Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Пример "10 строк" на Си для светодиода (IAR)
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Didro
Добрый день,

пытаюсь заставить работать простейший код:

Код
#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 вообще ?

Спасибо
vmp
Не мучайтесь, возьмите у Атмела готовый пример из software library под свой процессор.
Когда запустите, можно будет дальше править.
Didro
Цитата(vmp @ Dec 8 2009, 15:48) *
Не мучайтесь, возьмите у Атмела готовый пример из software library под свой процессор.
Когда запустите, можно будет дальше править.


я бы с удовольствием, но в примерах Atmel (в дистрибутиве IAR) нет примеров под отладочную плату, которую я использую (от starter kit'a) - или можно не особо задумываться об отладочных платах, а смело брать примеры под процессор (at91sam9260) ?
mdmitry
Начальная инициализация контроллера RAM и другой необходимой периферии делает ваша программа или используемый Вами загрузчик? Кое-что про загрузку Вам уже написали в похожий пост
vmp
Цитата(Didro @ Dec 8 2009, 15:52) *
я бы с удовольствием, но в примерах Atmel (в дистрибутиве IAR) нет примеров под отладочную плату, которую я использую (от starter kit'a) - или можно не особо задумываться об отладочных платах, а смело брать примеры под процессор (at91sam9260) ?

Знал бы я, чем они отличаются... Проверьте ширину шины и параметры памяти, частоту кварца, номер ножки со светодиодом. Если совпадают - пробуйте загрузить готовый пример.
На всякий случай пример от IAR сравните с родным примером от Atmel - иногда они отличаются.
Didro
Цитата(mdmitry @ Dec 8 2009, 16:01) *
Начальная инициализация контроллера RAM и другой необходимой периферии делает ваша программа или используемый Вами загрузчик? Кое-что про загрузку Вам уже написали в похожий пост


Инициализацию переферии (насколько я понимаю) выполняется CStartup (board_cstartup_iar.s) - я модифицирую только файл main.c из стандратного проекта. В настройках проекта Entry symbol = "resetHandler" - т.е. исполнение начинается с CStartup, где и происходит вся инициализация. Пока не могу понять в чем может быть проблема.
Можно ли как-то с помощью SAM-BA, например, определить исполняется программа или нет ?

Спасибо
mdmitry
Цитата(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).
DpInRock
SDRAM (sDram) должен кто-то инициализировать, прежде чем туда писать.
Для этого самба использует готовые модули. Тексты их есть при самбе. Если ваша SDRAM не совпадает чем-то с той, о которой предполаает самба, то естественно ничео работать и не должно.
Didro
Цитата(DpInRock @ Dec 8 2009, 19:22) *
SDRAM (sDram) должен кто-то инициализировать, прежде чем туда писать.
Для этого самба использует готовые модули. Тексты их есть при самбе. Если ваша SDRAM не совпадает чем-то с той, о которой предполаает самба, то естественно ничео работать и не должно.


Для конкретики вот используемая плата - http://www.starterkit.ru/html/index.php?na...SK-MAT91SAM9260
tcl-скрипты для SAM-BA поставляются вместе с этой платой, и скрипт инициализации SDRAM (Enable SDRAM) присутствует и исполняется без ошибок.
Буду искать дальше
Didro
Цитата(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 мою программу, которая и будет исполнятся.
Может кто-то подтвердить, что описание алгоритма загрузки верно ?

Спасибо
TigerSHARC
Ну подтвердите, гуру!!!!!

Я вот тоже думаю что так и должно быть...

Но я заливаю 100% рабочй bootstrap (проверено, так как он загружает U-boot, если второй находится по нужному адресу), затем на то место, где должен быть U-boot заливаю getting-started-project (бинарник раз в 10 меньше чем U-boot).
В консоли пишет что загружен bootstrap, но больше ничего не находит.
По каким признакам bootstrap находит приложение по нужному адресу, я всегда думал что ему всё равно что кидать в SD-RAM.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.