Sylvan (12.11.2013 10:52, просмотров: 2267)
LPC1788 bootloader. Почему не происходит переход на user code? бутлоадер почти работает, все пишется во флеш, куда положено. Но не работает переход по заданному адресу - туда, где лежит пользовательская программа. Переход происходит по какому странному адресу типа 0x680 или куда-то еще, но только не на нужные мне 0x2000.
Вопросы:
1. В чем ошибка с переходом, почему неверно записываются данные в SP,PC
2. Примеры в интернете останавливают PLL, сбрасывают ожидания прерываний, даже конвейер чистят. Ничего этого не было в LPC1768. Почему? Где написано, что именно так надо делать?
Код:
__asm void boot_jump( uint32_t address ){
LDR SP, [R0] ;Load new stack pointer address
LDR PC, [R0, #4] ;Load new program counter address
}
void execute_user_code(void)
{
uint8_t tmp;
NVIC->ICER[0] = 0xFFFFFFFF; //Disable all interrupts
NVIC->ICER[1] = 0x00000001;
NVIC->ICPR[0] = 0xFFFFFFFF; //Clear all pending interrupts
NVIC->ICPR[1] = 0x00000001;
for(tmp = 0; tmp < 32; tmp++) // Clear all interrupt priority
{
NVIC->IP[tmp] = 0x00;
}
LPC_SC->CCLKSEL = 0x01; // set sysclk (12MHz) as clock source
LPC_SC->PLL0CON = 0; // disable PLL
LPC_SC->PLL0FEED = 0xAA;
LPC_SC->PLL0FEED = 0x55;
SCB->VTOR = (0x2000) & 0x1FFFFF80;
boot_jump(0x2000);
}