реклама на сайте
подробности

 
 
> помогите с запуском Ethernet secondary ISP bootloader, LPC1768
politen
сообщение Sep 24 2010, 09:03
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 1-09-10
Пользователь №: 59 223



читаю AN10744 Ethernet secondary ISP bootloader Rev. 01 — 3 September 2008
описан процесс для серии LPC2000
в комплект поставки FlashMagic есть пример для серии LPC1700
подправил пример (в основном ссылки на хидер LPC17xx.h и добавил префикс LPC_ для системных переменных)
После компиляции и загрузки на MCB1700 все светодиоды горят. В дебагере видно, что программа уходит в бесконечный цикл
Код
HardFault_Handler\
                PROC
                EXPORT  HardFault_Handler         [WEAK]
                B       .
                ENDP


уходит в цикл из процедуры
Код
unsigned user_code_present(void)
{    
    param_table[IAP_CMD_CODE] = BLANK_CHECK_SECTOR;
    param_table[IAP_PARAM_0] = USER_START_SECTOR;
    param_table[IAP_PARAM_1] = USER_START_SECTOR;
    iap_entry(param_table,result_table);
    if( result_table[IAP_STAT_CODE] == CMD_SUCCESS )
    {
        return FALSE;
    }
    else
    {
        return TRUE;
    }
}

причем пошаговый режим F11 в проверку условия даже не заходит, т.е. после строки с if(..) после следующего нажатия F11 курсор исполнения программы прыгает на завершающую скобку функции user_code_present и потом на бесконечный цикл (см. выше)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
politen
сообщение Sep 28 2010, 13:23
Сообщение #2





Группа: Участник
Сообщений: 14
Регистрация: 1-09-10
Пользователь №: 59 223



готово. все запустилось.
пришлось править функцию запуска юзеркода.
в оригинале примера, шедшего вместе с FlashMagic было:
Код
void execute_user_code(void)
{
      void (*user_code_entry)(void);
      user_code_entry = (void (*)(void))(USER_START_SECTOR_ADDRESS | 0x00000001);
      user_code_entry();
}

в AN10866 LPC1700 secondary USB bootloader эта функция несколько другая ее с некоторыми изменениями удалось приладить к MCB1700
Код
__asm void boot_jump(uint32_t address){
    LDR R13,[R0]
    LDR R15,[R0,#4]
}

void execute_user_code(void)
{
    SCB->VTOR = USER_START_SECTOR_ADDRESS & 0x1FFFFF80;
    boot_jump(USER_START_SECTOR_ADDRESS);
}
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 05:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.02381 секунд с 7
ELECTRONIX ©2004-2016