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

 
 
> не могу расположить код в LPC1768 начиная с 0x2000 в Keil, Could not write CPU register MSP: .....
Dunduk
сообщение Jan 31 2012, 08:16
Сообщение #1


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

Группа: Участник
Сообщений: 87
Регистрация: 15-08-09
Пользователь №: 51 904



довольно большой, рабочий проект решил сдвинуть на 2 сектора выше, дабы освободить место для Ethernet bootloader-а. Но Keil ругает меня, программа не идет.
Could not write CPU register MSP: Written: 0xffffffff, Read: 0xfffffffc
Единственное, что я делаю с рабочим проектом - я в проекте "Option for target" выставляю IROM1: 0x2000 и проблема появляется. Изначально, там был 0 и все работало.
what the фак am i doing wrong?

Пилю eth bootloader из комплекта Flash Magic. Там есть описание, как править проект чтоб оно заработало. Но как я понял, оно написано для LPC2378. Может, там есть какая-то специфика?



Сообщение отредактировал Dunduk - Jan 31 2012, 08:19
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Aaron
сообщение Feb 21 2012, 13:02
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 243
Регистрация: 5-10-06
Из: Зеленоград
Пользователь №: 21 007



Сыплю голову пеплом, почитал ман на fromelf.exe, пришлось у друзей заимствовать свежую утилиту из 4-го кейла (из моего кейла ключик не поддерживается почему-то), батник изменился на:
C:\Keil\ARM\BIN30\fromelf.exe --bincombined --output "e:\project\compile\binary.bin" "e:\project\compile\binary.axf"
Теперь нормально бинарник на выходе получаю, но вопрос всё равно остался открытым...
После передачи управления от бутлоадера к пользовательской прошивке (в указанном мной ранее соседнем топике подсказали):
Код
// copy application INTVEC to remapped INTVEC location (start of RAM)
uint32_t const *Src = (uint32_t *)FLASH_USER_START;
uint32_t *Dst = (uint32_t *)AT91C_ISRAM; //RAMSTART
uint_fast8_t Size = 0x40 / sizeof *Dst;
do  { *Dst++ = *Src++; } while (--Size);
BOARD_RemapRam();
BL_StartUserApplication = (void(*)(void))0x0;
BL_StartUserApplication();

происходит сброс и снова вход в бутлоадер, вот пошаговое выполнение через j-link, начиная с последней строки кода:
Цитата
J-Link>s
PC: 001014EA
J-Link>s
PC: 00000000
J-Link>s
PC: 00100020
J-Link>s
PC: 00100024
J-Link>

Получается, что по нулевому адресу флэш, то есть ремап в RAM не происходит, так что ли?

Поменял адрес для вызова функции:
Код
BL_StartUserApplication = (void(*)(void))AT91C_ISRAM;
Теперь, поставив точку останова на 0x200000 = AT91C_ISRAM, имею:
Код
J-Link>regs
PC: (R15) = 00200000, CPSR = 00000050 (User mode, ARM FIQ dis.)
R0 = 00101425, R1 = 00100899, R2 = 002007A4, R3 = 00200000
R4 = 00000020, R5 = 001007A9, R6 = 00100475, R7 = 001000F4
USR: R8 =00200008, R9 =A5000001, R10=00206D70, R11 =00000000, R12 =00000000
     R13=00207D50, R14=00101431
FIQ: R8 =FFFFF000, R9 =01000000, R10=00000000, R11 =00000002, R12 =00000000
     R13=00207FE0, R14=02000000, SPSR=10000057
SVC: R13=00207F70, R14=00100E7F, SPSR=7000007F
ABT: R13=00207FF0, R14=00000000, SPSR=3000001C
IRQ: R13=00207FD0, R14=40000070, SPSR=40000070
UND: R13=00208000, R14=00000000, SPSR=600000DE
J-Link>s
PC: 00102860
J-Link>s
PC: 00102864
J-Link>s
PC: 00102868
Бинго! передал управление на RAM, оттуда перешёл на Reset_Handler (0x00102860), описанный в стандартном кейловском файле SAM7.S
НО: где-то на этапе инициализации происходит сбой (если проект компилировать как самостоятельный без смещения памяти, то всё работает нормально), и я снова попадаю в бутлоадер. Через консоль j-link не получается нормально посмотреть, брейкпоинты почему-то один раз ставятся и потом не удаляются, и новые не ставятся. Буду копаться дальше, конечно. Но как же это муторно! wacko.gif
Go to the top of the page
 
+Quote Post



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

 


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


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