ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
462591
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); }