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

 
 
> LPC11xx не стартует код из своего бутлоадера
zuy
сообщение Oct 21 2010, 10:42
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 173
Регистрация: 30-11-05
Из: San Francisco
Пользователь №: 11 593



Использую LPC1114. По доке вроде все понятно.
Свой бутлоадер код во флеш прописал.
для старта делаю следующее:
1. копирую 48 векторов прерывания основной программы в ОЗУ с адреса 0x10000000
2. Делаю ремап LPC_SYSCON->SYSMEMREMAP = 0x01; т.е. отобрашаем вектора из ОЗУ в начало адресного простанства
3. инициализирую SP и PC данными из первых 8-ми байт моей проги.

Все это выглядит так:
Код
__asm void boot_jump( uint32_t address )
{
   LDR R1, [R0]    ;Load new stack pointer address
   MOV R13, R1
   LDR R1, [R0, #4];Load new program counter address
   BX  R1
}

void run(unsigned long address)
{
  unsigned long          *dst, size;
  const unsigned long    *src;
  
  // Copy vectors table
  src = (unsigned long *)address;
  dst = (unsigned long *)0x10000000;
  size = VECTORS_TABLE_SIZE >> 2;
  do  { *dst++ = *src++; } while (--size);

  LPC_SYSCON->SYSMEMREMAP = 0x01;        /* remap to SRAM */

  boot_jump(address);
}


В результате поведение непредсказуемое. то висит, то попадает куда-то в середину бутлоадера.
Если убрать ремап, то целевая прога запускается, но естественно с векторами из флеша.

Что я забываю в этой схеме?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Almaz1988
сообщение Sep 24 2012, 08:46
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 19-09-12
Пользователь №: 73 602



Вот код бутлоадера:
CODE
#include "LPC11xx.h"
#include "rom_drivers.h"
#include "gpio.h"
#include "string.h"
#include "type.h"
#include "core_cm0.h"
#include "system_LPC11xx.h"
#include "application_Flash.h"


__ASM void __copy_MSP_( )
{
ldr r0, =0x10000000
ldr r0, [r0]
mov sp, r0
}

__ASM void __copy_reset_handler_( )
{
ldr r0, =0x10000004
ldr r0, [r0]
bx r0
}

/********************************************************** Main function ********************************/
int main(void)
{
SystemInit();

LPC_SYSCON->SYSAHBCLKCTRL |= (1<<6);

uint32_t const * pSrc = (uint32_t const *)0x00001000; //копируем первые 200 байт флеша, начиная с адреса 0х1000 в ОЗУ
uint32_t * pDst = (uint32_t *)0x10000000;
#define VECTORS_COUNT 128
for(uint_fast8_t i = 0; i < VECTORS_COUNT; ++i)
*pDst++ = *pSrc++;

__copy_MSP_( ); //загружаем в стек

__disable_irq(); //запрещаем прерывания
LPC_SYSCON->SYSMEMREMAP = 0x01; // remap to ram

__copy_reset_handler_(); //прыгаем на Resrt_handler

while(1);
}

Работает только если в "рабочей программе" не используются прерывания. Если прерывания используются, то "Рабоча программа" нивкакую не стартует.
Какие есть догадки, в чем ошибка?

Сообщение отредактировал IgorKossak - Sep 24 2012, 13:31
Причина редактирования: [codebox] для длинного кода!!!
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Sep 24 2012, 15:09
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Almaz1988 @ Sep 24 2012, 11:46) *
Работает только если в "рабочей программе" не используются прерывания. Если прерывания используются, то "Рабоча программа" нивкакую не стартует.
Какие есть догадки, в чем ошибка?

Такая догадка: в рабочей программе происходит очистка памяти, в которой находятся адреса обработчиков прерываний.
Проверьте на входе в main рабочей программы что у вас по адресам ОЗУ 0x10000000-0x100000C0? Заполнена эта область нулями или там адреса обработчиков?
Эту область нужно как-то выделить в скрипте линкера или указать в скрипте область ОЗУ рабочей программы не 0x10000000-0x100001FF, а от 0x100000C0 до 0x100001FFF.

Цитата(Almaz1988 @ Sep 24 2012, 11:46) *
нивкакую не стартует.
Какие есть догадки, в чем ошибка?

Не стартует - это что значит? А что она делает?
В HardFault не попадает?

P.S. Выложили бы проекты целиком - программа это не только текст.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- zuy   LPC11xx не стартует код из своего бутлоадера   Oct 21 2010, 10:42
- - Alekseeey   У меня та же проблема. Пробую на отладке LPCXpres...   Oct 21 2010, 12:12
|- - zuy   Цитата(Alekseeey @ Oct 21 2010, 15:12) Во...   Oct 21 2010, 12:52
|- - Alekseeey   Цитата(zuy @ Oct 21 2010, 16:52) Если чес...   Oct 21 2010, 13:01
- - DpInRock   Вообще-то так и должно быть. Как правильно (это м...   Oct 21 2010, 12:38
- - DpInRock   Reset - это место откуда программа стартует. Как б...   Oct 21 2010, 12:58
|- - zuy   Цитата(DpInRock @ Oct 21 2010, 15:54) Res...   Oct 21 2010, 13:01
|- - Alekseeey   Цитата(zuy @ Oct 21 2010, 17:01) Да, это ...   Oct 21 2010, 13:41
|- - zuy   Цитата(Alekseeey @ Oct 21 2010, 16:41) По...   Oct 21 2010, 17:28
|- - zuy   Нет, все равно решительно не понимаю, что делает р...   Oct 21 2010, 19:14
|- - Alekseeey   Цитата(zuy @ Oct 21 2010, 23:14) Нет, все...   Oct 21 2010, 20:30
|- - zuy   Цитата(Alekseeey @ Oct 21 2010, 23:09) Об...   Oct 21 2010, 20:43
|- - Alekseeey   Цитата(zuy @ Oct 22 2010, 00:43) Отладчик...   Oct 22 2010, 07:00
|- - rezident   Цитата(Alekseeey @ Oct 22 2010, 13:00) По...   Oct 22 2010, 13:28
- - DpInRock   Понятия не имею. Но для вас вряд ли имеет значение...   Oct 21 2010, 13:13
- - rezident   Возникло предположение, что ремапу подвергается Fl...   Oct 21 2010, 20:55
|- - zuy   Цитата(rezident @ Oct 21 2010, 23:55) Воз...   Oct 21 2010, 21:09
- - rezident   Встречный вопрос. А сколько памяти у вас отведено ...   Oct 21 2010, 21:48
|- - zuy   Цитата(rezident @ Oct 22 2010, 00:48) Вст...   Oct 22 2010, 05:17
- - rezident   Сегодня проэкспериментировал со своей платой и исх...   Oct 22 2010, 20:51
|- - Alekseeey   Цитата(rezident @ Oct 23 2010, 00:51) Что...   Oct 23 2010, 05:02
|- - zuy   Цитата(rezident @ Oct 22 2010, 23:51) Сег...   Oct 23 2010, 09:18
|- - rezident   Цитата(zuy @ Oct 23 2010, 15:18) Поставьт...   Oct 23 2010, 20:00
- - DpInRock   За кортекс не скажу, но кроме векторов надо копиро...   Oct 23 2010, 08:47
- - rezident   Любопытство победило Со второй попытки создал в K...   Oct 24 2010, 01:05
|- - zuy   Цитата(rezident @ Oct 24 2010, 04:05) Люб...   Oct 24 2010, 15:20
|- - rezident   Цитата(zuy @ Oct 24 2010, 21:20) Т.о. на ...   Oct 24 2010, 16:17
|- - zuy   Цитата(rezident @ Oct 24 2010, 19:17) Люб...   Oct 24 2010, 16:56
- - KRS   Тоже столкнулся с проблемой. Но при обычной отладк...   Jun 16 2011, 14:20
|- - _Артём_   Цитата(Almaz1988 @ Sep 24 2012, 11:46) Ра...   Sep 24 2012, 11:18
|- - Сергей Борщ   QUOTE (Almaz1988 @ Sep 24 2012, 11:46) Во...   Sep 24 2012, 12:45
- - KRS   Т.к. у Cortex-M0 нет VTOR и переместить таблицу пр...   Sep 24 2012, 11:41
- - Almaz1988   Наметился небольшой прогресс)) В "загрузчике...   Sep 28 2012, 06:22
|- - KRS   Цитата(Almaz1988 @ Sep 28 2012, 10:22) Ещ...   Sep 28 2012, 07:15
|- - Сергей Борщ   QUOTE (Almaz1988 @ Sep 28 2012, 09:22) и ...   Sep 28 2012, 07:56
|- - _Артём_   Цитата(Almaz1988 @ Sep 28 2012, 09:22) Ис...   Sep 28 2012, 18:55
- - Almaz1988   Цитата(KRS @ Sep 28 2012, 11:15) Если вы ...   Sep 28 2012, 08:10
|- - Сергей Борщ   QUOTE (Almaz1988 @ Sep 28 2012, 11:10) Ср...   Sep 28 2012, 08:44
|- - KRS   Цитата(Almaz1988 @ Sep 28 2012, 12:10) Я ...   Sep 28 2012, 10:45
- - Almaz1988   Цитата(Сергей Борщ @ Sep 28 2012, 12:44) ...   Sep 28 2012, 09:06
|- - Сергей Борщ   QUOTE (Almaz1988 @ Sep 28 2012, 12:06) Та...   Sep 28 2012, 09:26
|- - alx2   Кажется, без ответа остался этот вопрос: Цитата(Al...   Oct 2 2012, 10:16
- - Almaz1988   Цитата(Сергей Борщ @ Sep 28 2012, 13:26) ...   Sep 28 2012, 09:43
- - Almaz1988   Продолжаю штурм)) и в загрузчике и в рабочей прогр...   Oct 1 2012, 11:34
- - Almaz1988   Продолжаю штурм)) и в загрузчике и в рабочей прогр...   Oct 1 2012, 11:36
- - Almaz1988   Продолжаю штурм)) и в загрузчике и в рабочей прогр...   Oct 1 2012, 11:36
- - Almaz1988   Продолжаю штурм)) и в загрузчике и в рабочей прогр...   Oct 1 2012, 11:36
- - Almaz1988   Продолжаю штурм)) и в загрузчике и в рабочей прогр...   Oct 1 2012, 11:38
- - Almaz1988   Добил бутлоадер))) В бутлоадере использую только C...   Oct 2 2012, 06:09
|- - Сергей Борщ   QUOTE (Almaz1988 @ Oct 2 2012, 09:09) Как...   Oct 2 2012, 06:31
- - Almaz1988   Дело близится к завершению)) "Программный за...   Oct 5 2012, 10:07
|- - _Артём_   Цитата(Almaz1988 @ Oct 5 2012, 13:07) ...   Oct 5 2012, 13:23
|- - igor_mmm   Добрый День! Использую 11с24 и работаю с CAN. ...   Oct 6 2012, 19:07
|- - KRS   Цитата(igor_mmm @ Oct 6 2012, 23:07) Необ...   Oct 6 2012, 20:13
|- - igor_mmm   Цитата(KRS @ Oct 7 2012, 00:13) Если в се...   Oct 7 2012, 07:29
- - Almaz1988   Цитата(igor_mmm @ Oct 6 2012, 22:07) Добр...   Oct 8 2012, 04:11
|- - igor_mmm   Цитата(Almaz1988 @ Oct 8 2012, 08:11) Вот...   Oct 9 2012, 03:21
- - Almaz1988   Вопрос по примеру "NXP secondary bootloader...   Oct 8 2012, 06:05
|- - Сергей Борщ   QUOTE (Almaz1988 @ Oct 8 2012, 09:05) Как...   Oct 8 2012, 06:34
- - Almaz1988   Цитата(Сергей Борщ @ Oct 8 2012, 09:34) П...   Oct 8 2012, 09:28
|- - Сергей Борщ   QUOTE (Almaz1988 @ Oct 8 2012, 12:28) Как...   Oct 8 2012, 11:02
- - Almaz1988   В общем осталась последняя проблема. Есть функция ...   Oct 8 2012, 11:45
|- - Сергей Борщ   QUOTE (Almaz1988 @ Oct 8 2012, 14:45) Что...   Oct 8 2012, 11:57
- - Almaz1988   Цитата(igor_mmm @ Oct 9 2012, 06:21) а гд...   Oct 9 2012, 04:24
|- - igor_mmm   Цитата(Almaz1988 @ Oct 9 2012, 08:24) В п...   Oct 9 2012, 05:53
- - Almaz1988   Цитата(Сергей Борщ @ Oct 8 2012, 14:57) Н...   Oct 9 2012, 08:34


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

 


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


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