00001
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #include "config.h"
00042 #include "start_boot.h"
00043 #include "lib_mcu/wdt/wdt_drv.h"
00044
00045 #ifdef __ICCAVR__
00046 #if (defined(__AT90USB1287__) || defined(__AT90USB1286__))
00047 void (*start_bootloader) (void)=(void (*)(void))0xf000;
00048 #elif (defined(__AT90USB647__) || defined(__AT90USB646__))
00049 void (*start_bootloader) (void)=(void (*)(void))0x7800;
00050 #else
00051 #error MCU part not define in project options
00052 #endif
00053 #elif defined __GNUC__
00054 #if (defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB1286__))
00055 void (*start_bootloader) (void)=(void (*)(void))0xf000;
00056 #elif (defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB646__))
00057 void (*start_bootloader) (void)=(void (*)(void))0x7800;
00058 #else
00059 #error MCU part not define in project options
00060 #endif
00061 #else // Other compiler
00062 #error Compiler unknow
00063 #endif
00064
00065 #ifdef __GNUC__
00066 U32 boot_key __attribute__ ((section (".noinit")));
00067 #else
00068 __no_init U32 boot_key At(0x0100);
00069 #endif
00070
00078 void start_boot(void)
00079 {
00080 boot_key=0x55AAAA55;
00081
00082
00083 wdtdrv_enable(WDTO_500MS);
00084 while(1);
00085 }
00086
00087
00093 void start_boot_if_required(void)
00094 {
00095 if(boot_key==GOTOBOOTKEY)
00096 {
00097 boot_key = 0;
00098 (*start_bootloader)();
00099 }
00100 }
00101
00102
00105 void goto_boot(void)
00106 {
00107 (*start_bootloader)();
00108 }
00109
00110