From 9c9b1e87e7bca6ba0c5c101b0b76a514a820ea7c Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Thu, 17 Jun 2010 00:44:17 +0200 Subject: bwbootloader: add start delay --- src/bwbootloader/bwbootloader.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) (limited to 'src/bwbootloader/bwbootloader.c') diff --git a/src/bwbootloader/bwbootloader.c b/src/bwbootloader/bwbootloader.c index b7cc283..82644ca 100644 --- a/src/bwbootloader/bwbootloader.c +++ b/src/bwbootloader/bwbootloader.c @@ -28,21 +28,31 @@ #include "bwbootloader.h" #include "prog.h" +#include "timer.h" #include -/** Start application when 1. */ -volatile uint8_t start; +/** Start application when it reach zero. */ +volatile uint8_t start_delay; +/** Stop start delay counter when 1. */ +volatile uint8_t start_delay_pause; int main (void) { twi_init (0xb8); - while (!start) + timer_init (); + /* Handle bootloader messages. */ + start_delay = 40; + while (start_delay) + { twi_update (); - /* Small delay for acknowledge. */ - utils_delay_ms (500); + if (!start_delay_pause && timer_overflowed ()) + start_delay--; + } + /* Stop bootloader, start application. */ twi_uninit (); + timer_uninit (); prog_start (); return 0; } @@ -50,6 +60,8 @@ main (void) void bwbootloader_recv (const uint8_t *buffer, uint8_t size) { + /* Stop start countdown. */ + start_delay_pause = 1; /* Command is the first byte, it will be repeated as acknowledgement. * Words are little endian. */ static uint8_t rbuffer[AC_TWI_SLAVE_SEND_BUFFER_SIZE]; @@ -76,7 +88,8 @@ bwbootloader_recv (const uint8_t *buffer, uint8_t size) /* Start application. */ if (size != 1) break; - start = 1; + start_delay_pause = 0; + start_delay = 4; twi_slave_update (buffer, 1); return; case BWBOOTLOADER_READ: -- cgit v1.2.3