|
IAR Flashloader для AT91RM9200 + AM29LV160D, Выкладываю. Может кому будет полезно. |
|
|
|
Jun 20 2005, 06:56
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Только начал работать с ARM и сразу на AT91RM9200. До этого имел дело c ATMega128. Потихоньку начал разбираться. Сначала во внутренней RAM простенькие программы запускал, шупал настройки и проникался масштабом бедствий. Потом дошло дело до Flashloader. Два дня отладчика и он заработал. В эттаче FlashLoader для AT91RM9200 + AM29LV160DB(T) с исходниками. Может кому полезно будет. Ну и попутно вопросы созрели: 1. Помогите разобраться с тактовыми частотами. PLLB = 96 МГц c выходом 48 для USB это понятно. Все остальное буду тактировать от PLLA. Какую MCK надо подать на Memory Controller, если на нем подключено AM29LV160DB 70 нc и SDRAM с CL=2 при 100 МГц. 2. Тактовая на SDRAM равна MCK? Тогда что лучше в плане производительности a) Процессор на 180 МГц и SDRAM на 90 МГц б) Процессор на 100 Мгц и SDRAM на 100 МГц Код будет исполняться из SDRAM. 3. Не совсем понял с времянкой работы FLASH на SMC. Во флэшлоадере MCK у меня 96 МГц c PLLB и все настройки SMC по умолчанию. Как это вяжется с 70 нc скоростью микросхемы AM29LV160D? Похоже, я что-то не понимаю. 4. Стоит ли стэк помещать во внутренней RAM процессора, а не в SDRAM. Получу ли я прибавку в скорости. Как к этому отнесется кэш?
FL_AT91RM9200_AM29LV160D.RAR ( 33.65 килобайт )
Кол-во скачиваний: 364
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 38)
|
Jun 21 2005, 07:43
|
Участник

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

|
Цитата 1. Помогите разобраться с тактовыми частотами. PLLB = 96 МГц c выходом 48 для USB это понятно. Все остальное буду тактировать от PLLA. Какую MCK надо подать на Memory Controller, если на нем подключено AM29LV160DB 70 нc и SDRAM с CL=2 при 100 МГц.
2. Тактовая на SDRAM равна MCK? Тогда что лучше в плане производительности a) Процессор на 180 МГц и SDRAM на 90 МГц б) Процессор на 100 Мгц и SDRAM на 100 МГц Код будет исполняться из SDRAM.
3. Не совсем понял с времянкой работы FLASH на SMC. Во флэшлоадере MCK у меня 96 МГц c PLLB и все настройки SMC по умолчанию. Как это вяжется с 70 нc скоростью микросхемы AM29LV160D? Похоже, я что-то не понимаю.
4. Стоит ли стэк помещать во внутренней RAM процессора, а не в SDRAM. Получу ли я прибавку в скорости. Как к этому отнесется кэш? Ответ на первый и попутно на второй вопросы - с точки зрения производительности лучше : a) Процессор на 200 МГц и SDRAM на 100 МГц, но т.к производитель нормирует максимальную частоту работы на внешней шине всего лишь 80 Мhz, то есть ещё 2 варианта: б) Процессор на 209 МГц и SDRAM на 70(209/3) МГц; в) Процессор на 160 МГц и SDRAM на 80 МГц. ВЫбирай сам. Ответ на третий вопрос - нужно внимательно посмотреть на значение МСК и настройки SMC для нужного nCS. Ответ на четвертый вопрос - по моему мнению стэк стоит помещать во внутренней RAM процессора, а не в SDRAM, работать будет быстрее.
|
|
|
|
|
Jun 21 2005, 09:33
|
Участник

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

|
Случайно примера как в IAR написать команды включения кэшей у меня нет, а то что касается включения и настройки кэш-памяти - можно посмотреть как это делается в Linux.
|
|
|
|
|
Sep 16 2005, 14:27
|
Участник

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090

|
А можно что-нибудь по-проще? Не понимаю как его (flashloader) использовать - сам пока только "лампочками мигаю" и тестирую (пишу/читаю) SDRAM. Гружусь Xmodemом (виглер бастует). Вот... А записать/прочитать флэш (такой же) ой как хочется. Об kernele конечно не может быть и речи, пока...
Не нашёл в этом loaderе даже обращения к SMC.
Ткните ПОЖАЛУЙСТА куда копать?
|
|
|
|
|
Sep 16 2005, 17:12
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Для того чтобы использовать этот FlashLoader надо подключиться по J-TAG. Не важно чем Wiggler подойдет. С его помощью можно flash прошить. Подробнее смотри EWARM User Guide страницу 232. Там все подробно. Для X-Modem это решение не идет. Подойдет вот это http://www.ucrouter.ru/download/AT91RM9200-29lv160d.binСобственно там еще много чего интересного есть.
|
|
|
|
|
Sep 21 2005, 10:45
|
Участник

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090

|
Цитата(VladislavS @ Sep 16 2005, 20:12) Для того чтобы использовать этот FlashLoader надо подключиться по J-TAG. Не важно чем Wiggler подойдет. С его помощью можно flash прошить. Подробнее смотри EWARM User Guide страницу 232. Там все подробно. Читал. Между делом и флэш раскочегарил - пишу, читаю, стираю. Но т.к. слишком зелёный в этом деле (начал вот читать уже с первых страниц) - непонял что конкретно подсовывать в качестве пути в диалог Override default flash loader path? FlashAT91RM9200_AM29LV160.d79? выдаёт ошибку "Overlapping address ranges" И в перспктиве осталось неясным как выполнить этот самый пункт первый "C-SPY downloads the flash loader into target RAM" ? PS> А как вообще IAR с Wigglerом совмещать надо? схема с двумя буферами и ресетами (SRst инвентирован), IAR_4.30 Я как-то пару раз вошёл в debug (CtrlD) режим без проблем. А теперь никак: "Check that all cables are connected and power is OK" Настройки wigglerа не менял, изменение последних (скорость и ресет) результатов недаёт. А OCD Commander работает... Здесь промелькала тема что IAR4.11 c Wigglerом не дружит. Ну блин это же не значит что савсем несовместим! Между прочим, насколько я теперь вспоминаю я перезапустил IAR с другим проектом. И теперь он Wiggler не видит
|
|
|
|
|
Sep 22 2005, 10:39
|
Участник

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

|
Мы просто меняли в редакторе нех-значение 6 байта и всё работало. В принципе и у тебя должно получиться.
|
|
|
|
|
Sep 23 2005, 14:05
|
Участник

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090

|
Такие дела: Wiggler глючит - отложил пока, в использование Embedded srvcов не въехал. Написал свой загрузчик по XModemу в SDRAM оттуда во флэш - в начало 0го сектора. Загружаю(во флэш) тестовый .bin с добавлеными вперёд 32 байтами. В шестой вектор пишу размер всего кода. Пробовал как Little так BigEndian (в отношении первых 32 бойтов). Также пробовал перекл. флэш в 8бит (пин у неё ByteModeSelect). Не грузит с флэша и всё Подскажите мож чё нетак делаю?
|
|
|
|
|
Sep 23 2005, 19:15
|
Участник

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090

|
Цитата(VladislavS @ Sep 23 2005, 17:24) Кстати, эти 32 байта не добавляются, а являются частью кода, так что лучше скомпилировать код сразу как надо. догадывался, но я то ожидал увидеть вектора в начале .bin'а, а там только первый есть, остальные - нули. Может покажете свой cstartup.s79 - ведь цивильно вектора вписываются туда как я понял из EWARM_CompilerReference.pdf (а не hex редактором). Кстати надоли тоогда что менять в.xcl ? Впринципе же эти директивы о содержимом табдицы векторов можно в любой имеющийся в проекте .s79 засунуть? Сам то я пользуюсь пока тест проектом от тов. Bender'а: там был в OBJ директории cstartup.r79 - я его потёр - ничё неизменилось. Теперь про шестой вектор. В шите говориться об установках для dataFlash. Но у меня то обычная 29LV160 от EBI через SMC. SPI нету. А стр. 95 п.7.3.3.5 упоминается размер кода в шестом векторе. Благодарю всех за исчерпывающие ответы особенно что-нибудь про этот cstartup. Как-то сам теперь удивляюсь что позади работа c 51ми TUSB3210 и 7C68013(EZ-FX2, USB2.0 поднимал - детский сад, как теперь вижу) на Keilе, а вот удалось прожить не вдаваясь в подробности cstartup'ов - ,были там какие-то - ну хрен с ними - и так работало...
|
|
|
|
|
Sep 24 2005, 01:26
|

Частый гость
 
Группа: Участник
Сообщений: 123
Регистрация: 28-06-05
Из: Тула
Пользователь №: 6 361

|
Да, аналогично У фуджиков тоже были свои стартап'ы, но я их почти не трогал-все работало и так. А тут без помощи не обойтись - все таки не понятно ни с .xcl, ни с cstartup.s79 - не мог бы кто нибудь поподробнее осветить это дело? 2VVJ- Тут буквально в пятницу в конце рабочего дня вроде заработал WIGGLER- похоже следовало поставить галку в DEBUGGER/DOWNLOAD на пункте Attach programm - стал коннектится, но это теперь до понедельника.
|
|
|
|
|
Sep 24 2005, 06:04
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Ребят, давайте мух от котлет отделять. 1. vvj, Если у тебя 29LV160 в 16-разрядном режиме, то забей на Bootloader. Тебе достаточно прошить код, перевести BMS в 0 и он стартанет прямо с флэшки. Только не забывай про ремэпы и что внутренняя SRAM проца будет по адресу 0x200000 и это надо указать в XCL-файле. Для 8-разрядного режима будет работать механизм Bootloader, только почитай Errata пункт 37. 2. Насчет cstartup.s79 и векторов. Все вектора, которые используются в приложении, будут вкомпилены в выходной файл. Если часть векторов не используется, как в вашем случае, на их местах будут нули. Для обычного приложения это штатная ситуация. Если мы хотим чтобы BootLoader признал наш код за валидное приложение, то должны прописать все вектора, а шестой еще и специальной информацией. Проще всего это сделать в cstartup.s79. Пример такого cstartup.s79 прикрепляю. Обратить внимание на код по адресу 0x14. 3. Насчет XCL-файла. Смею вас огорчить, но запрограммировать ARM в IAR не прописав руками XCL нереально. Справедливости ради надо отметить, что в настройках линкера есть кнопочка Command line configuration tool, но я как-то попробовал ей законфигурить и плюнув просто написал все в XCL. А необходимо это все по очень простой причине. ВЫ ДОЛЖНЫ СКАЗАТЬ КОМПИЛЯТОРУ СКОЛЬКО КАКОЙ ПАМЯТИ ПО КАКИМ АДРЕСАМ ЕСТЬ В СИСТЕМЕ И КУДА РАЗМЕЩАТЬ ВЕКТОРА ПРЕРЫВАНИЙ, СТЭКИ, СЕГМЕНТЫ КОДА И ДАННЫХ, КУЧУ. Ведь ARM может иметь довольно богатый набор различных типов памяти на борту и за бортом. Плюс тот же REMAP надо учесть. При этом, в отличии напримр от AVR, адресное пространство данных не отделено от адресного пространства программ, что дает множество возможных вариантов построения проекта. На этом месте советую почитать про сегменты в IAR-вском хэлпе. 4. Более того, один проект обычно содержит несколько XCL. Например, для отладки совсем не обязательно прошивать флэшки, а можно использовать для размещения кода SDRAM. При финальной же компиляции все переносится во flash. И примеров, когда надо использовать разную память в проекте, может быть множество. 5. Насчет Wiggler. Он хорош, если ARM для вас хобби. Но если это ваша работа, то я не понимаю как можно экономить на инструменте. Сравните стоимость фирменного J-Link и более чем вдвое дешевого MT-Link со стоимостью изготовления опытной четырех-шестислойной печатной платы для AT91RM9200 со всей его периферией !!! После подписания счета на печатные платы мой директор счет на J-Link подмахнул даже не спросив что это. Кстати, Flashloader для DataFlash уже работает. Так что, сегодня-завтра еще обкатаю на предмет ошибок и в понедельник выложу.
|
|
|
|
|
Sep 26 2005, 04:25
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Как и обещал выкладываю новую версию FlashLoader-а для IAR+AT91RM9200. Добавлена поддержка DataFlash AT45DB321 и AT45DB642. Остальные легко добавляются по аналогии. Обратите внимание на параметры, которые надо передать при запуске - они орсаны в файле !Parameters.txt.
|
|
|
|
|
Sep 27 2005, 14:12
|
Участник

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090

|
извиняюсь за повтор но наболело: Закачиваю значит бинарник в SDRAM и прыгаю по 0x20000000 Начинает работать, криво правда (- медленно) - потом разберусь... Если пишу закаченное в 16битный Flash - при BMS=0 - не начинает. Содержимое флэша уже проверял после ресета. Где та собака ?
|
|
|
|
|
Sep 28 2005, 13:51
|
Участник

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090

|
Цитата(VladislavS @ Sep 27 2005, 20:37) А то что из SDRAM работает это заслуга загрузчика, который за тебя уже все инициализировал. Виноват - не работает из SDRAMа - это из SRAMа код начинает работать... Потому как загружаемая прога компайлится используя тотже cstartup и .xcl для запуска из SRAM (по 0x00) - прав ли я? Но загрузив в SDRAM прект (с ftp://at91dist:distrib@81.80.104.162/ "AT91RM9200-Interrupt", из архива
AT91RM9200_BasicTools_IAR4_11A_1_1.zip ( 572.63 килобайт )
Кол-во скачиваний: 115 ) скомпайленый под at91_lnk_ram20000000.xlc, тоже наблюдаю тишину. Хотя с XModema, код скомпайленый, используя at91_lnk_ram.xlc и at91_lnk_ram200.xlc "лампочками мигает". Может я прыгаю не так: Jump((unsigned int)0x20000000); , хотя код взят из исходников loader'а (jump.s79): #include <at91rm9200dk.h> MODULE MyJump COMMON INTVEC:CODE:NOROOT(2) PUBLIC Jump Jump: CODE32 msr CPSR_c, #(ARM_MODE_SYS | I_BIT | F_BIT) mov pc, r0 ENDMOD END Кстати зачем перед прыжком там устанавливается режим процессора (или поправьте меня) ?
|
|
|
|
|
Sep 28 2005, 16:30
|
Участник

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090

|
Цитата(VladislavS @ Sep 28 2005, 17:18) JTAG по тебе плачет. Цитата(VladislavS @ Sep 28 2005, 17:18) А SDRAM А.C.Пушкин инициализирует? Я честно говоря думал что мой "загрузчик" "оставляет" после себя (перед прыжком) проинициализарованный SDRC. Если не так, то как закаченный им в SDRAM код вообще должен считываться?
|
|
|
|
|
Sep 29 2005, 10:17
|
Участник

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090

|
Такой вопрос: если посмотреть на map файлы каждой из конфигураций Debug 0x20000000\List\interrupt.map: Absolute parts ENTRY ADDRESS REF BY ===== ======= ====== _HEAP_SIZE 00010000 _IRQ_STACK_SIZE 00000004 _CSTACK_SIZE 00010000 RAMEND 203FFFFF RAMSTART 20000000 ROMEND 203FFFFF ROMSTART 20000000
Debug 0x200000\List\interrupt.map: _HEAP_SIZE 00000100 _IRQ_STACK_SIZE 00000004 _CSTACK_SIZE 00000100 RAMEND 00203FFF RAMSTART 00200000 ROMEND 00203FFF ROMSTART 00200000
Debug 0x00\List\interrupt.map: _HEAP_SIZE 00000100 _IRQ_STACK_SIZE 00000004 _CSTACK_SIZE 00000100 RAMEND 00003FFF RAMSTART 00000000 ROMEND 00003FFF ROMSTART 00000000 то вроде бы отвечает ожиданиям, а вот если глядеть на визуальный AddressMap из Command File Configuration Tool от Linker'а то всё одно и тоже: 0-3F Вектора, 8000-F FFFF ROM, 10 0000-7F FFFF RAM при любой (из трёх) выбранной конфигурации!
и я уже не понимаю что имеется ввиду под ROMом и RAMом?
2. Записал 1MB c ROMа(с 0x10 0000) во FLASH и всё равно при BMS=0 не грузится. Хотя должен ли BootLoader стартануть с 16b flash'ки? причём осциллографом видно что (при BMS0) читает после ресета - nCS0 выдаёт меандр ~5kHz в течении ~10 секунд
|
|
|
|
|
Sep 29 2005, 13:59
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Ну блин, когда BMS=0, то FLASH с адреса 0x00000000 начинается, а SRAM с 0x200000. -DRAMSTART=200040 -DRAMEND=203FFF -DSDRAMSTART=20000000 -DSDRAMEND=21FFFFFF -DROMSTART=40 -DROMEND=1FFFFF Вот с таким XCL сможешь из FLASH стартануть, только не забудь в low_level_init SDRAM инициализировать. Код // INTVEC -- Exception vector table. // SWITAB -- Software interrupt vector table. // ICODE -- Startup (cstartup) and exception code. // DIFUNCT -- Dynamic initialization vectors used by C++. // CODE -- Compiler generated code. // CODE_I -- Compiler generated code declared __ramfunc (executes in RAM) // CODE_ID -- Initializer for CODE_I (ROM). // ------------- // Data segments - may be placed anywhere in memory. // ------------- // CSTACK -- The stack used by C/C++ programs (system and user mode). // IRQ_STACK -- The stack used by IRQ service routines. // SVC_STACK -- The stack used in supervisor mode // (Define other exception stacks as needed for // FIQ, ABT, UND). // HEAP -- The heap used by malloc and free in C and new and // delete in C++. // INITTAB -- Table containing addresses and sizes of segments that // need to be initialized at startup (by cstartup). // CHECKSUM -- The linker places checksum byte(s) in this segment, // when the -J linker command line option is used. // DATA_y -- Data objects. // // Where _y can be one of: // // _AN -- Holds uninitialized located objects, i.e. objects with // an absolute location given by the @ operator or the // #pragma location directive. Since these segments // contain objects which already have a fixed address, // they should not be mentioned in this linker command // file. // _C -- Constants (ROM). // _I -- Initialized data (RAM). // _ID -- The original content of _I (copied to _I by cstartup) (ROM). // _N -- Uninitialized data (RAM). // _Z -- Zero initialized data (RAM).
-carm
-DRAMSTART=200040 -DRAMEND=203FFF
-DSDRAMSTART=20000000 -DSDRAMEND=21FFFFFF
-DROMSTART=40 -DROMEND=1FFFFF
-Z(CODE)INTVEC=00-3F
-Z(CODE)ICODE,DIFUNCT=ROMSTART-ROMEND -Z(CODE)SWITAB=ROMSTART-ROMEND
-Z(CODE)CODE=ROMSTART-ROMEND
-Z(CONST)CODE_ID=ROMSTART-ROMEND
-Z(CONST)INITTAB,DATA_ID,DATA_C=ROMSTART-ROMEND -Z(CONST)CHECKSUM=ROMSTART-ROMEND
//************************************************ // Data segments. //************************************************
-Z(DATA)DATA_I,DATA_Z,DATA_N=SDRAMSTART-SDRAMEND
//************************************************ // __ramfunc code copied to and executed from RAM. //************************************************
-Z(DATA)CODE_I=SDRAMSTART-SDRAMEND
-QCODE_I=CODE_ID
//************************************************************************* // Stack and heap segments. //*************************************************************************
-D_CSTACK_SIZE=800 // -D_SVC_STACK_SIZE=10 -D_IRQ_STACK_SIZE=300 -D_HEAP_SIZE=4000
-Z(DATA)CSTACK+_CSTACK_SIZE=RAMSTART-RAMEND // -Z(DATA)SVC_STACK+_SVC_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)IRQ_STACK+_IRQ_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)HEAP+_HEAP_SIZE=SDRAMSTART-SDRAMEND
|
|
|
|
|
Sep 29 2005, 18:43
|
Участник

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090

|
Цитата(VladislavS @ Sep 29 2005, 16:59) Вот с таким XCL сможешь из FLASH стартануть, только не забудь в low_level_init SDRAM инициализировать. Есть ну очень тупая апликейшн: только лампочками мигает - никаких там PLL,SDRAM etc. Она работает со SRAMа закружаясь по XModem'у. Если её скомпайлить с приведённым выше .xcl и прошить во FLASH - должна ли она работать (у меня не хочет) или необходимо сделать что-то ещё ? cstartup сейчас default'овый - но ведь при BMS=0 никто и не "рыщит" за первыми 8ю векторами. Кстати, похоже что этот Linker Command File Configuration Tool не "парсит" изменения в отредоктированном ручками .xcl - всё время показывает свои Region: ARM [0-3F], [800-3FFF] что вообще ни пришей ни.. И ещё: не нашёл в своём проекте .map файлов. Ни "на диске" , ни в настройках. В скачанных с инета проектах в List директории один .map, а у меня там куча .lst и .s79ых. Настораживает однако.
|
|
|
|
|
Sep 30 2005, 05:01
|

Частый гость
 
Группа: Участник
Сообщений: 123
Регистрация: 28-06-05
Из: Тула
Пользователь №: 6 361

|
Цитата(vvj @ Sep 29 2005, 21:43) И ещё: не нашёл в своём проекте .map файлов. Ни "на диске" , ни в настройках. В скачанных с инета проектах в List директории один .map, а у меня там куча .lst и .s79ых. Настораживает однако. Посмотри настройки линкера - закладка "LIST" -> segment map,module map,static overlay map.
|
|
|
|
|
Sep 30 2005, 05:37
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Вот тебе XCL для "тупого апликэйшина", работающего из FLASH при BMS=0. На коком MCK твой "тупой апликэйшин" работает? На забудь перед переходом с часового кварца на основной сделать что-то типа SMC_CSR0= (1<<13)|(1<<12)|(3<<8)|(1<<7)|5; //DWB=1 | BAT=1 | TDF=3 | WSEN | NWS=4 Код -carm
-DRAMSTART=200040 -DRAMEND=203FFF
-DROMSTART=40 -DROMEND=1FFFFF
-Z(CODE)INTVEC=00-3F
-Z(CODE)ICODE,DIFUNCT=ROMSTART-ROMEND -Z(CODE)SWITAB=ROMSTART-ROMEND
-Z(CODE)CODE=ROMSTART-ROMEND
-Z(CONST)CODE_ID=ROMSTART-ROMEND
-Z(CONST)INITTAB,DATA_ID,DATA_C=ROMSTART-ROMEND -Z(CONST)CHECKSUM=ROMSTART-ROMEND
//************************************************ // Data segments. //************************************************
-Z(DATA)DATA_I,DATA_Z,DATA_N=RAMSTART-RAMEND
//************************************************ // __ramfunc code copied to and executed from RAM. //************************************************
-Z(DATA)CODE_I=RAMSTART-RAMEND
-QCODE_I=CODE_ID
//************************************************************************* // Stack and heap segments. //*************************************************************************
-D_CSTACK_SIZE=400 // -D_SVC_STACK_SIZE=10 -D_IRQ_STACK_SIZE=100 -D_HEAP_SIZE=0000
-Z(DATA)CSTACK+_CSTACK_SIZE=RAMSTART-RAMEND // -Z(DATA)SVC_STACK+_SVC_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)IRQ_STACK+_IRQ_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)HEAP+_HEAP_SIZE=RAMSTART-RAMEND
|
|
|
|
|
Sep 30 2005, 09:50
|
Участник

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090

|
Код #include "AT91RM9200.h" unsigned long cnt; void main(void) { * AT91C_PIOA_OER=AT91C_PIO_PA0 | AT91C_PIO_PA1; for (int l = 0; l<10; l++) { * AT91C_PIOA_SODR=AT91C_PIO_PA0; * AT91C_PIOA_SODR=AT91C_PIO_PA1; for (cnt=0;cnt<99999;cnt++); * AT91C_PIOA_CODR=AT91C_PIO_PA0; * AT91C_PIOA_CODR=AT91C_PIO_PA1; for (cnt=0;cnt<99999;cnt++); } } Тупее не придумал, но даже это с флэша не грузится. Может в default'овом cstartup'е дело? EDIT : лампочки зажглися
|
|
|
|
|
Sep 30 2005, 09:52
|
Участник

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090

|
Заработало, извиняюсь, видимо php здесь не сработал TBD: эти "резонанс-посты" можно было бы удалить
|
|
|
|
|
Sep 30 2005, 09:53
|
Участник

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090

|
Заработало, извиняюсь, видимо php здесь не сработал TBD: эти "резонанс-посты" можно было бы удалить А FLом займёмся как только JTAG приедет
|
|
|
|
|
Oct 4 2005, 19:28
|
Участник

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090

|
Цитата(VladislavS @ Sep 30 2005, 19:16) А то может зря распинался? ни в коем случае! J-Link вчера приехал и усё сегодня заработало! Созрели и вопросы (ответ конечно в 1768, но что не нашёл пока): при BMS=0, по 0му адресу-флэш, а по какому адресу начинается SRAM ? Надо ли делать ремап и что он даст? Почему спрашиваю - по дисассемблеру видно что переменные индекса цикла читаются из ~[PC,#+160] но ведь код выполняется из флэша - писать(держать там переменные) туда "нельзя"... При BMS=1 смотрю в дебагере (работает BootLoader - ремапа значит небыло) по адресу 0x00 и 0x10_0000 - разный код. А вообще конечно от всей души за FL благодарю!
|
|
|
|
|
Oct 5 2005, 08:30
|
Участник

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090

|
А не могли бы пояснить с переменными: по инструкции LDR я не вижу что бы "cnt" читалась в R2 именно из SRAM, а вот обведённый красным комментарий сообщает об обратном:
Не имеет ли к этому отношение запись в .xcl Цитата //************************************************ // __ramfunc code copied to and executed from RAM. //************************************************
-Z(DATA)CODE_I=RAMSTART-RAMEND
-QCODE_I=CODE_ID И что имеется ввиду в Debug Log'е : Driver does not support code coverage. ?
|
|
|
|
|
Oct 5 2005, 13:27
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
По директиве LDR надо просто почитать о методах адресации. Я в этом не силен. Запись Код -Z(DATA)CODE_I=RAMSTART-RAMEND
-QCODE_I=CODE_ID сделана для функций, которые при инициализации сегментов копируются из ПЗУ в ОЗУ и оттуда запускаются. В программе такие функции имеют модификатор __ramfunc.
|
|
|
|
|
Oct 6 2005, 13:52
|
Участник

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090

|
Цитата(VladislavS @ Sep 24 2005, 09:04) Насчет XCL-файла. Смею вас огорчить, но запрограммировать ARM в IAR не прописав руками XCL нереально. Возвращаясь к .XCL и не только: а нет ли у кого IAR'овского проекта c U-Boot'ом ? Сам пока не догоняю возможно ли это всё в одном проекте - у него там и BootImage, и переменные окружения, и запакованный код. Это всё по отдельности прошивать надо или возможно "за один присест" ? FlashLoader'ом?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|