|
|
  |
Пример "10 строк" на Си для светодиода (IAR), AT91SAM9260 (SK) |
|
|
|
Dec 8 2009, 12:41
|
Частый гость
 
Группа: Участник
Сообщений: 94
Регистрация: 9-04-07
Пользователь №: 26 893

|
Добрый день, пытаюсь заставить работать простейший код: Код #include "Atmel/ioat91sam9260.h" int main(void) { volatile AT91PS_PIO pPIO = AT91C_BASE_PIOA; // pointer to PIO data structure volatile AT91PS_PMC pPMC = AT91C_BASE_PMC;
pPMC->PMC_PCER = 1 << AT91C_ID_PIOA;
pPIO->PIO_PER = 0xFFFFFFFF; // PIO Enable Register - allow PIO to control pins pPIO->PIO_PSR = 0xFFFFFFFF; // PIO is active on the corresponding I/O line (peripheral is inactive). pPIO->PIO_OER = 0xFFFFFFFF; // PIO Output Enable Register pPIO->PIO_SODR = 0xFFFFFFFF; // PIO Set Output Data Register while(1); return 1; } Подобный же пример видел для lpc2468 на форуме. Зашиваю .bin файл (at91sam9260_sdram.bin) с помощью SAM-BA в SDRAM (использую sdram.icf). Прошивается без ошибок. Далее через SAM-BA пытаюсь запустить программу из SDRAM: Цитата (AT91-ISP v1.13) 3 % SDRAM::runFrom_21d00000 -I- End of executing Результата нет - светодиод не горит. Светодиод исправный, подключен к PIN_1 (PA24). Укажите ошибку, если она в коде. И как проверить запускается ли программа из SDRAM вообще ? Спасибо
|
|
|
|
|
Dec 8 2009, 12:52
|
Частый гость
 
Группа: Участник
Сообщений: 94
Регистрация: 9-04-07
Пользователь №: 26 893

|
Цитата(vmp @ Dec 8 2009, 15:48)  Не мучайтесь, возьмите у Атмела готовый пример из software library под свой процессор. Когда запустите, можно будет дальше править. я бы с удовольствием, но в примерах Atmel (в дистрибутиве IAR) нет примеров под отладочную плату, которую я использую (от starter kit'a) - или можно не особо задумываться об отладочных платах, а смело брать примеры под процессор (at91sam9260) ?
|
|
|
|
|
Dec 8 2009, 13:11
|

Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070

|
Цитата(Didro @ Dec 8 2009, 15:52)  я бы с удовольствием, но в примерах Atmel (в дистрибутиве IAR) нет примеров под отладочную плату, которую я использую (от starter kit'a) - или можно не особо задумываться об отладочных платах, а смело брать примеры под процессор (at91sam9260) ? Знал бы я, чем они отличаются... Проверьте ширину шины и параметры памяти, частоту кварца, номер ножки со светодиодом. Если совпадают - пробуйте загрузить готовый пример. На всякий случай пример от IAR сравните с родным примером от Atmel - иногда они отличаются.
|
|
|
|
|
Dec 8 2009, 13:52
|
Частый гость
 
Группа: Участник
Сообщений: 94
Регистрация: 9-04-07
Пользователь №: 26 893

|
Цитата(mdmitry @ Dec 8 2009, 16:01)  Начальная инициализация контроллера RAM и другой необходимой периферии делает ваша программа или используемый Вами загрузчик? Кое-что про загрузку Вам уже написали в похожий постИнициализацию переферии (насколько я понимаю) выполняется CStartup (board_cstartup_iar.s) - я модифицирую только файл main.c из стандратного проекта. В настройках проекта Entry symbol = "resetHandler" - т.е. исполнение начинается с CStartup, где и происходит вся инициализация. Пока не могу понять в чем может быть проблема. Можно ли как-то с помощью SAM-BA, например, определить исполняется программа или нет ? Спасибо
|
|
|
|
|
Dec 8 2009, 14:14
|

Начинающий профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648

|
Цитата(Didro @ Dec 8 2009, 16:52)  Инициализацию переферии (насколько я понимаю) выполняется CStartup (board_cstartup_iar.s) - я модифицирую только файл main.c из стандратного проекта. В настройках проекта Entry symbol = "resetHandler" - т.е. исполнение начинается с CStartup, где и происходит вся инициализация. Пока не могу понять в чем может быть проблема. Объем RAM в AT91SAM9260 мал (32к), у Вас весь код вмещается туда? Иначе надо инициализировать SDRAM и грузить в него. Посмотрите внимательно, что инициализируется и как в board_cstartup_iar.s. (с IAR для этого контроллера дел не имел, использовал gcc под linux). Возьмите bootstrap для этой платы и посмотрите его внимательно, он загружается из флэша (4к) внутреннего в RAM и там выполняется. Помниться, что в нем ничего и нет по-сути (инициализация контроллера SDRAM и каких-то портов GPIO плюс указание на загрузку U-boot).
--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
|
|
|
|
|
Dec 8 2009, 17:23
|
Частый гость
 
Группа: Участник
Сообщений: 94
Регистрация: 9-04-07
Пользователь №: 26 893

|
Цитата(DpInRock @ Dec 8 2009, 19:22)  SDRAM (sDram) должен кто-то инициализировать, прежде чем туда писать. Для этого самба использует готовые модули. Тексты их есть при самбе. Если ваша SDRAM не совпадает чем-то с той, о которой предполаает самба, то естественно ничео работать и не должно. Для конкретики вот используемая плата - http://www.starterkit.ru/html/index.php?na...SK-MAT91SAM9260tcl-скрипты для SAM-BA поставляются вместе с этой платой, и скрипт инициализации SDRAM (Enable SDRAM) присутствует и исполняется без ошибок. Буду искать дальше
|
|
|
|
|
Dec 11 2009, 12:40
|
Частый гость
 
Группа: Участник
Сообщений: 94
Регистрация: 9-04-07
Пользователь №: 26 893

|
Цитата(Didro @ Dec 8 2009, 15:41) (AT91-ISP v1.13) 3 % SDRAM::runFrom_21d00000 -I- End of executing Оказалось, что данный samba-скрипт не работает, он должен запускать программу по команде SAM-BA сразу из SDRAM минуя загрузчик, но не делает этого. Поэтому очевидно, единственным сценарием загрузки на моей плате является - загрузка AT91Bootstrap-v1.6 в DataFlash по адресу 0x00, затем записывание в эту же DataFlash по другому адресу (0х8000) самой программы. Адрес 0х8000 взят из описания загрузчика - Application Note AT91Bootstrap (стр. 14): Цитата Generating DataFlashBoot... The following example shows how to to generate a bootstrap in DataFlash to launch U-Boot.Код /* Download Settings */ #define IMG_ADDR 0x8000 /* U-Boot Address in DataFlash */ #define IMG_SIZE 0x30000 /* U-Boot size in DataFlash */ #define JUMP_ADDR 0x23F00000 /* U-Boot Link Address in SDRAM */ Только вместо U-Boot, я запишу свою программу. После подачи напряжения BootROM загрузит в SRAM из DataFlash AT91Bootstrap, который потом уже загрузит в SDRAM мою программу, которая и будет исполнятся. Может кто-то подтвердить, что описание алгоритма загрузки верно ? Спасибо
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|