X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=examples%2Ftriface%2Fboot%2Fmain.c;h=7af08126b67853ac18bc46dc61d009941cf5df90;hb=1eecdfdefd523e5d412f5569f99a37cd2760ed0f;hp=f4f05c436ad82ad49d6302502b8cb74d13753828;hpb=b6f9eb45c14010b05db137970a893e9588e8e762;p=bertos.git diff --git a/examples/triface/boot/main.c b/examples/triface/boot/main.c index f4f05c43..7af08126 100644 --- a/examples/triface/boot/main.c +++ b/examples/triface/boot/main.c @@ -61,6 +61,32 @@ #include +#include + +/* + * Watchdog disable. + * + * This function disable the watchdog timer early after a reset. + * We must do it very soon because new AVR cores do not disable + * the watchdog timer after a cpu reset. In this way the watchdog + * timer is still enabled, continuously resetting the cpu. This is + * necessary only with new AVR cores, for other cores this code has + * no effect. + * + * \{ + */ +// Function prototype of watchdog reset. +void wdt_init(void) __attribute__((naked)) __attribute__((section(".init3"))); +// Function implementation of watchdog reset. +void wdt_init(void) +{ + MCUSR = 0; + wdt_disable(); + + return; +} +/* \} */ + int main(void) { FlashAvr flash; @@ -82,9 +108,10 @@ int main(void) ser_init(&ser, CONFIG_BOOT_PORT); ser_setbaudrate(&ser, CONFIG_BOOT_BAUDRATE); - xmodem_recv(&ser, &flash.fd); + xmodem_recv(&ser.fd, &flash.fd); + kfile_close(&flash.fd); - kfile_close(&ser.fd); + kfile_close(&ser.fd); IRQ_DISABLE;