Тестовый проект от Olimex отображает картинку на цветном индикаторе, озвучивает рычажок контактного "джойстика", кнопки включают и выключают подсветку. Пример предназначен для IAR версии 4.30, и на версии IAR 5.3 и более поздних он просто так не заработает, поскольку требует подключения нового кода инициализации процессора. Раньше этот код находился в файле cstartup.s, теперь - в board_cstartup_iar.s. Итак, процесс по шагам.
1. Скачал пример (см. ссылки), загрузил в IAR Embedded Workbench for ARM 5.3. При загрузке IAR предложил сконвертировать старую версию конфигурации в новую, согласился.
2. После успешной загрузки попытался сразу скомпилировать. Компилятор ругнулся на отсутствие файла в #include "ioat91sam7x256.h". Нашел этот файл в папке c:\Program Files\IAR Systems\Embedded Workbench 5.0 Evaluation\ARM\inc\Atmel\, скопировал в корневую папку проекта (туда же, где находится SAM7_EX256.eww, adc.h, adc.h, main.c и все другие модули проекта). После этого компиляция прошла успешно.
3. Попытался запустить отладку, получил сообщение об ошибке "The debugging session could not be started. Either the debugger initialization failed, or else the file "...\SAM7_EX256\Debug\Exe\SAM7_EX256.out" was corrupt or of an unsupported format. There might be more information in the Debug Log window"
В логе отладки (Debug Log): "Sun Jan 31 10:19:39 2010: Loaded macro file: C:\Program Files\IAR Systems\Embedded Workbench 5.0 Evaluation\ARM\config\flashloader\Atmel\FlashAT91SAM7X.mac Sun Jan 31 10:19:39 2010: Failed to load flash loader: C:\Program Files\IAR Systems\Embedded Workbench 5.0 Evaluation\ARM\config\flashloader\Atmel\FlashAT91SAM7X.d79"
4. Поменял в конфигурации проекта SAM7_EX256 (открыл вторую копию IAR, загрузил проект adkm и просто сравнил конфигурации):
Debugger -> Setup -> Use macro file(s) -> $PROJ_DIR$\SAM7.mac поменял на $PROJ_DIR$\at91lib\resources\flash.mac. Файл flash.mac взял из папки at91lib\resources\ проекта adkm (просто переписал папку at91lib\resources в корень проекта SAM7_EX256).
Debugger -> Download -> I Use flash loader(s) поменял ",,,,$TOOLKIT_DIR$\config\flashloader\Atmel\FlashAT91SAM7X.d79," на ",,,0x100000,(default)," с помощью кнопки "Edit...".
5. Снова запустил отладку. Чип прогрузился нормально, но отладка не запустилась с сообщением "Found active soft BP when downloading to flash. Flash download canceled.".
Поменял настройку линкера. Linker -> Config -> Linker configuration file -> поставил галку "Override default" и поменял $TOOLKIT_DIR$\CONFIG\generic.icf на $PROJ_DIR$\at91lib\board\at91sam7x256\flash.icf (папку at91lib\board\at91sam7x256 со всем содержимым тупо переписал из того же проекта adkm).
После компиляции вывалилось сообщение "Building configuration: SAM7_EX256 - Debug Updating build tree... Linking Warning[Lp012]: no sections with name FIQ_STACK included - special symbol FIQ_STACK$$Limit (referenced from cstartup.o(rt4t_al.a)) will be zero SAM7_EX256.out Total number of errors: 0 Total number of warnings: 1"
И отладка опять не запустилась. Причина была в том, что пока не был подключен файл инициализации процессора board_cstartup_iar.s.
6. Добавил группу at91lib, а туда группу board, а также группу at91sam7x256, по аналогии с проектом adkm. Добавил туда файлы board_cstartup_iar.s, board_lowlevel.c, board_memories.c, board_memories.h, board-pkrc-m.h, board.h, AT91SAM7X256.h.
7. Linker -> Library -> Override default program entry -> поменял адрес запуска программы, было __iar_program_start, стало resetHandler.
После этого проект нормально скомпилировался, запустилась отладка, и на индикаторе макетной платы SAM7_EX256 отобразился скалолаз. Тест-программа заработала.
[Ссылки]
1. Оригинальная тест-программа от Olimex со скалолазом (проект для IAR версии 4.30, SAM7_EX256.zip). 2. Та же самая тест-программа, портированная на IAR версии 5.30. 3. Автоматический датчик кода Морзе (АДКМ) - другая тест-программа для макетной платы Olimex SAM7_EX256. 4. Nokia_6100_LCD_Display_Driver.pdf - документация по использованию и системе команд LCD индикатора Nokia 6100 (на чипах Philips PCF8833 и Epson S1D15G00). |
Комментарии
microsin: действительно, на макетных платах Olimex SAM7-EX256 есть две разные версии LCD индикаторов, различающихся используемым чипом (Philips PCF8833 и Epson S1D15G00), и, соответственно, системой команд индикатора. По системам команд эти индикаторы несовместимы. Наверное, у Вас как раз код рассчитан на индикатор с другой системой команд. Узнайте, какой у Вас тип LCD-индикатора (какой чип), и найдите к нему низкоуровневую библиотеку, поддерживающую его систему команд. На моей макетной плате, если мне не изменяет память, стоял индикатор с чипом Epson S1D15G00.
RSS лента комментариев этой записи