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

 
 
> [Решено] LPC1788 bootloader переход на адрес приложения, приводит к lockup
Cosmojam
сообщение Aug 15 2013, 12:11
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 311
Регистрация: 12-01-11
Из: Калининград (Koenigsberg)
Пользователь №: 62 182



Не получается запустить приложение из загрузчика. Пример из AN10866 работает на LPC1768, но на LPC1788
Код
static void boot(uint32_t a)
{
    __asm volatile (
    "LDR SP, [R0]\n"
    "LDR PC, [R0, #4]\n"
            );
}

вызывает сброс в lockup и так по кругу. На следующем старте источник сброса SYSRESET и LOCKUP в RSID.
Посмотреть отладчиком что там происходит крайне затруднительно по причине его тормознутости и глючности (китайский j-link, кое-как с openocd рабоает и вообще никак с фирменной софтиной)

Код
__disable_irq();
__disable_fault_irq();

delay_loop(3000000u);
SCB->VTOR = (start_address & 0x1FFFFF80);
__asm volatile (
            "dmb\n"
            "dsb\n"
            "isb\n"
        );
boot(start_address);


Приложение записано с помощью IAP и судя по содержимому памяти записано верно. На LPC1768 помню приходилось перед модификацией PC переключаться на встроенный RC генератор и отключать PLL Тут это тоже пробовал - не помогает, либо я не правильно читаю даташит.

Поделитесь у кого есть реально рабочий код запуска приложения из загрузчика на этом процессоре с gcc.


--------------------
typedef enum { no, yes, maybe } bool; | блог тут
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
yanvasiij
сообщение Nov 6 2013, 07:38
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041



У меня схожая проблема. При переключении из bootloadera в рабочую программу в рабочей программе не стартует Freertos. То есть все, что до запуска планировщика работает, а как только доходит до запуска планировщика все рушится. FreeRtos присутствует и в bootloadere и в рабочей программе. Отладить вообще не представляю как, ибо рабочая программа загружается по с tftp-сервера, только по логам в уарте сужу, что происходит.
CODE
ъ
/**
* @brief Переключиться в программу
*
* @param address адрес где расположенна программа
*
*/
__asm void boot_jump( uint32_t address )
{
LDR SP, [R0] ;Load new stack pointer address
LDR PC, [R0, #4] ;Load new program counter address
}


/**
* @brief переключить программу
*
* @param address адрес, куда переключаться
*/
void switchProgram (uint32_t address)
{
NVIC->ICER[0] = 0xFFFFFFFF;
NVIC->ICER[1] = 0x00000001;
/* Clear all pending interrupts */
NVIC->ICPR[0] = 0xFFFFFFFF;
NVIC->ICPR[1] = 0x00000001;
/* Clear all interrupt priority */
uint8_t tmp = 0;
for (tmp = 0; tmp < 32u; tmp++)
{
NVIC->IP[tmp] = 0x00;
}
SCB->VTOR = address;
boot_jump(address);
}


Вот вырезка из места, где все это вызывается:

Код
...
            else if(memcmp("switch\r", str, strlen("switch\r")) ==0 )
            {
                taskEXIT_CRITICAL();
                vTaskEndScheduler();
                switchProgram(0x10000);
            }
...


Буду признателен за помощь.

Сообщение отредактировал IgorKossak - Nov 6 2013, 18:44
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Cosmojam   [Решено] LPC1788 bootloader переход на адрес приложения   Aug 15 2013, 12:11
- - Axel   Цитата(Cosmojam @ Aug 15 2013, 15:11) Под...   Aug 15 2013, 12:44
|- - ar__systems   Цитата(Axel @ Aug 15 2013, 07:44) Делюсь:...   Sep 30 2013, 17:17
|- - Dunduk   Цитата(ar__systems @ Sep 30 2013, 21:17) ...   Nov 11 2013, 14:58
|- - Dunduk   Oops... Сам себя обманул :-) У меня в проекте там ...   Nov 13 2013, 07:18
- - _Артём_   Цитата(Cosmojam @ Aug 15 2013, 15:11) Не ...   Aug 15 2013, 12:55
|- - Cosmojam   Спасибо за код и подсказку. Буду внимательнее смот...   Aug 15 2013, 18:02
- - Fedor   Попробуйте обявить эту функцию с __attribute__((na...   Aug 16 2013, 08:29
|- - Cosmojam   Цитата(Fedor @ Aug 16 2013, 11:29) Попроб...   Aug 16 2013, 09:09
- - Cosmojam   Попробуйте отключить systick перед запуском прилож...   Nov 6 2013, 17:10
- - Bass   В таблице векторов прерываний по нулевому смещению...   Nov 6 2013, 17:39
- - yanvasiij   Cosmojam Отключение systick не помогло. Bass Не со...   Nov 7 2013, 03:25
- - yanvasiij   Я понял в чем проблема. Все дело в функции systemI...   Nov 7 2013, 07:56
|- - Cosmojam   Цитата(yanvasiij @ Nov 7 2013, 10:56) Вых...   Nov 7 2013, 09:08
- - yanvasiij   Cosmojam Где определен указатель g_pfnVectors?   Nov 7 2013, 10:02
- - Cosmojam   Цитата(yanvasiij @ Nov 7 2013, 13:02) Cos...   Nov 7 2013, 17:02


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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 08:09
Рейтинг@Mail.ru


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