Использую AT91SAM7S512. Написал для него Bootloader (во Flash по адресам 0x100000 по 0x101FFF).
Основная прога во Flash по адресам 0x102000 по 0x17FFFF.
Переход из бута в основную прогу сделан так:
Код
...
#define USER_FLASH_START 0x2000;
...
void (*user_code_entry)(void);
user_code_entry = (void (*)(void))USER_FLASH_START;
user_code_entry();
#define USER_FLASH_START 0x2000;
...
void (*user_code_entry)(void);
user_code_entry = (void (*)(void))USER_FLASH_START;
user_code_entry();
В большинстве случаев все отрабатывает нормально.
Но периодически при запуске происходит глюк. Причем в основной программе.
Проверял в отладке - прога крутится в файле SAM7.s примерно в этом месте:
Код
; Wait until Main Oscillator is stablilized
IF (PMC_MOR_Val:AND:PMC_MOSCEN) != 0
MOSCS_Loop LDR R2, [R0, #PMC_SR]
ANDS R2, R2, #PMC_MOSCS
BEQ MOSCS_Loop
ENDIF
IF (PMC_MOR_Val:AND:PMC_MOSCEN) != 0
MOSCS_Loop LDR R2, [R0, #PMC_SR]
ANDS R2, R2, #PMC_MOSCS
BEQ MOSCS_Loop
ENDIF
Циклическое выполнение происходит до срабатывания WDT таймера - после чего происходит нормальный запуск.
С чем это может быть связано? Куда копать?