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

 
 
> Запускается во FLASH, но не доходит до main() !?, IAR, LPC2294, J-link, 1M RAM, 4M ROM (OLIMEX)
DnTrm
сообщение May 15 2009, 21:24
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 15-05-09
Пользователь №: 49 137



Несколько дней бьюсь над проблемой. Помогите.. Имею: IAR, LPC2294, J-link, 1M RAM, 4M ROM (OLIMEX). Проект нормально работает в RAM (под JTAG'ом). После прошивки PHILIPS'овской утилитой во FLASH (с расчетом KS и размещением по 0х00000014 адресу) имею следующее: В отладчике IAR'а, через JTAG, работает. Без отладчика - прорабатывает cstarup, __low_level_init и после проработки ее последней команды return (1) куда-то "девается"... Я исполльзую scmRTOS ну и соответственно __low_level_init ее родная, в нее добавил только инициализацию частоты процессора, портов и включение MAM (MAMTIM=3). В стандартном cstartup, в самом начале, перед определением стеков добавил настройку внешней памяти. Там есть такие слова, что-то вроде: "свои инициализации добавлять сюда..". Добавил вот только сегодня. Возлагал на это дело большие надежды.. Не помогло..! Как я понял, что добираюсь до указанного места? Просто в самом начале __low_level_init настроил один из pin'ов процессора на выход и в цикле мигаю светодиодом. Так вот до выхода из __low_level_init мигает, а в main() уже нет. В отладчике мигает и в main(). Да и вообще в отладчике программа выполняет свое назначение. Да, еще! В отладчике наблел, что между __low_level_init и main() прорабатывается две (видимо стандартные процедуры) что-то вроде __sector_init (инициализирует ICODE) и чего-то там еще (какя-то вложенная процедура). Не запомнилось, так, как уже уходил с работы. Увидел только, что во всю используется стек, а он у меня во внешней памяти (проект большой, ну и стек ему соответствует). Успел только попробовать с инициализацией внешней памяти в cstartup. Но, как уже сказал - не помогло. Раньше работал с 51-ми, ATmega, Winbond, с msp430-м немного. В ARM все не так! Медленно, как-то все продвигается! Помогите советом.

Сообщение отредактировал DnTrm - May 15 2009, 21:29
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DnTrm
сообщение May 19 2009, 16:27
Сообщение #2





Группа: Новичок
Сообщений: 4
Регистрация: 15-05-09
Пользователь №: 49 137



Andy Mozzhevilov, примите слова благодарности!
Все заработало! Спасибо за советы где искать!
Насчет сумбура согласен. Часть того, что наблюдал - под вопросом.
Рассказываю, что сделал:
Начал по одной ремить строчки Setup макроса и запускать отладчик.
Выяснил, что на строчке инициализации регистра PINSEL2 все и происходит, т.е. начинает работать (точнее не работать), как и при простом запуске без IAR'а. Регистр PINSEL2 при этом содержит 0x0F6009F4. В макросе же я инициировал значением 0x0F000924:

__writeMemory32(0x0F000924, 0xE002C014, "Memory");
//00001111 00000000 00001001 00100100
//bits 0 1 = xx(00) (reserved)
//bit 2 = 1 (pins P1.31:26 are used as a JTAG port)
//bit 3 = 0 (pins P1.25:16 are used as GPIO pins)
//bits 5 4 = 10 (pins P2.7:0 - D7:0
// pin P1.0 - CS0,
// pin P1.1 - OE,
// pin P3.31 - BLS0,
// pins P2.15:8 - D15:8,
// pin P3.30 - BLS1,
// pins P2.27:16 - D27:16,
// pins P2.29:28 - D29:28,
// pins P2.31:30 - D31:30,
// pins P3.29:28 - BLS2:3)
//bit 6 = x(0) (controls the use of pin P3.29 is not, as bits 5:4 are 10)
//bit 7 = x(0) (controls the use of pin P3.28 is not, as bits 5:4 are 10)
//bit 8 = 1 (pin P3.27 - WE)
//bits 10 9 = xx(00) (reserved)
//bit 11 = 1 (pin P3.26 - CS1)
//bit 12 = x(0) (reserved)
//bit 13 = x(0) (controls the use of pin P3.23 is not, as bits 25:23 are 110)
//bits 15 14 = 00 (pin P3.25 are used as GPIO pin)
//bits 17 16 = 00 (pin P3.24 are used as GPIO pin)
//bits 19 18 = xx(00) (reserved)
//bit 20 = x(0) (controls the use of pin P2.29:28 is not, as bits 5:4 are 10)
//bit 21 = x(0) (controls the use of pin P2.30 is not, as bits 5:4 are 10)
//bit 22 = x(0) (controls the use of pin P2.31 is not, as bits 5:4 are 10)
//bit 23 = 0 (P3.0 are used as GPIO pin)
//bit 24 = 1 (P3.1 - A1)
//bits 27 25 = 111 (P23:2 - A23:2)
//bits 31 28 = xxxx(0000) (reserved)

Кдючевым оказалось то, что при значении 0x0F6009F4 биты 5, 4 равны 11 и внешняя шина данных отсутствует!
После того, как добавил следующий код в cstartup, все заработало:

CODE32
?cstartup
. . .
; Add initialization nedded before setup of stackpointers here

; Initialization of MEMMAP
MOV R1,#0xE0000000
ORR R1,R1,#0x1FC000

#ifdef RAM_MAP
;MEMMAP = 2;
MOV R2,#0x2
#endif
#ifdef ROM_MAP
;MEMMAP = 1;
MOV R2,#0x1
#endif
STR R2,[R1,#+64]
;Set Data bus functionality
;PINSEL1 = 0x0;
;GPIO for P0.16 - P0.25 and P0.27 - P0.30
MOV R0,#0xE0000004
ORR R0,R0,#0x2C000
MOV R1,#0x0
STR R1,[R0,#+0]

;PINSEL2 &= 0x00000004;
LDR R1,[R0,#+16]
AND R1,R1,#0x4
STR R1,[R0,#+16]

;PINSEL2 |= 0x0F000920;
;00001111 00000000 00001001 00100000
LDR R1,[R0,#+16]
MOV R2,#0xF000000
ORR R2,R2,#0x920
ORR R1,R2,R1
STR R1,[R0,#+16]

; Initialization of EMC
; BCFG0=0x10002480;
; FLASH 16bit; IDCY = 1; WST1 = 4; RBLE = 1; WST2 = 4
; 00010000 00000000 00100100 10000000
MOV R1,#0xF0000000
ORR R1,R1,#0xFE00000
MOV R2,#0x10000000
ORR R2,R2,#0x2480
STR R2,[R1,#+0]

; BCFG1=0x20000400;
; SRAM 32bit; IDCY = 1; WST1 = 0; RBLE = 1; WST2 = 0
; 00100000 00000000 00000100 00000000
MOV R2,#0x20000000
ORR R2,R2,#0x400
STR R2,[R1,#+4]

. . .

MEMMAP, наверно, можно было не инициировать, т.к. на старте в нем уже единица (подтянутая ножка P0.14 + KS по адресу 0х00000014), но я его проинициировал на всякий случай.
Биты 5 и 4 PINSEL2 после сброса в единицах, я так понимаю, тоже из-за внутренних подтяжек на соответствующих пинах ( BOOT1:0 ).

Много получилось, но зато поделился изысканиями! :0)
Еще раз спасибо! Успехов!
Думаю, что загляну еще и нераз! Пока.

Сообщение отредактировал DnTrm - May 19 2009, 16:30
Go to the top of the page
 
+Quote Post



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

 


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


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