Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: есть вопросы при переходе
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
bookevg
Раньше в разработках использовали АРМ7 от Atmel-а, а именно SAM7x. Теперь подумываем о переходе на АРМ9, а именно на SAM9260 или SAM9XE. При этом хотелосб бы, чтобы была возможность устанвки по выбору или SAM9260 или SAM9XE (т.к. последний еще не запущен в производство). Все разработки программного обеспечения предполагается вести в IAR.
Так вот привожу список вопросов, которые у меня возникли:
1) у SAM9260 есть возможность загрузки программы из внешней flash-SPI памяти, но часть моей программы д.б. во внутр. ОЗУ, а часть во внеш. Значит вначале должна загрузится часть программы, которая заливается во внутр. ОЗУ, затем эта программа д.проинициализировать внешную память и загрузить оставшую часть программы из внешней flash-SPI памяти как во внутр. ОЗУ, так и во внеш.ОЗУ память.
Это все я должен реализовывать сам или IAR это поддерживает (т.е. есть готовый загрузчик, который мне надо только подправить, чтобы правильно проинициализироватьвнешнюю память)?
Для примера: для процессоров ADSP21371/5, у которых есть возможность выполнения программ из внеш.ОЗУ, я описывал проект свой, в котором по сегментам указывал компилятору, где должен располагаться код и данные, а затем к своему проекту я выбирал готовый загрузчик от AD. Т.о. при подачи питания вначале загружается этот загрузчик, а затем он загружает мою прошивку как во внутр., так и во внеш. память
2) может ли выполняться программный код у SAM9XE во внешней памяти?
3) есть ли возможность у SAM9XE выполнить аналогичные действия как в 1-м пункте, т.е. представить внутр.ОЗУ как внеш.память.
Это я должен реализовывать сам или у IAR или Atmel для этого готовые программные решения?
4) есть ли возможность у SAM9XE разместить часть кода как во внутр.ОЗУ, так и во внеш.ОЗУ - отличие от п.3 состоит в том, что программа может также выполняться из внутр.flash памяти - т.е. это что-то похоже на размещение функции директивой __ramfunc__, которая есть у IAR - но вот только как сказать IAR, что функция д.б. размещена во внеш.ОЗУ - я так понимаю все это делается указанием сегмента, в котором д.б. размещена функция + использованием директивы __ramfunc__, тогда при инициализации программа загрузит ее во внеш. ОЗУ - как это было для SAM7x
5) правильно ли я понял, что для SAM9260 SAMBA м.обновить программу, которая должна быть размещена во внеш.SPI памяти?
defunct
Цитата(bookevg @ Apr 17 2009, 09:16) *
2) может ли выполняться программный код у SAM9XE во внешней памяти?

Может.

Цитата
3) есть ли возможность у SAM9XE выполнить аналогичные действия как в 1-м пункте, т.е. представить внутр.ОЗУ как внеш.память.
Это я должен реализовывать сам или у IAR или Atmel для этого готовые программные решения?

Не совсем ясен вопрос. Внутреннее ОЗУ это внутреннее ОЗУ. Оно быстрое в отличие от внешнего, тратить его надо грамотно на что-то очень критичное по быстродейтствию.
Например удобно размещать там структуры данных ОС, Стеки, и конечно же критичные по времени обработки - обработчики прерываний.
Готовые решения есть, но все зависит от задачи.

Плюс можно также взять во внимание что у процессора есть BUS_MATRIX - это комутатор шин между мастерами и памятью/периферией.
Например DMA может ложить или читать что-то из внутренней памяти, в то время как процессор параллельно может читать инструкции из FLASH и одновременно данные из внешней памяти.
Обычный код можно хранить и в медленной памяти, т.к. ICache'а у этих процессоров всяко больше, чем кеша данных.

Цитата
4) есть ли возможность у SAM9XE разместить часть кода как во внутр.ОЗУ, так и во внеш.

Обязательно. Можно размещать что угодно и как угодно. Туча примеров на сайте Atmel.
В то же время у процессора есть MMU, т.е. любую память можно заремепить на любой адрес.

Цитата
ОЗУ - отличие от п.3 состоит в том, что программа может также выполняться из внутр.flash памяти - т.е. это что-то похоже на размещение функции директивой __ramfunc__, которая есть у IAR - но вот только как сказать IAR, что функция д.б. размещена во внеш.ОЗУ - я так понимаю все это делается указанием сегмента, в котором д.б. размещена функция + использованием директивы __ramfunc__, тогда при инициализации программа загрузит ее во внеш. ОЗУ - как это было для SAM7x

За "что-где положить" отвечает линкер. см. скрипты линкера.
Самые удобные на мой взгляд скрипты в тулчейнах от ARM - SDT / RVDS. А IAR сильно нагружен ненужностями тянущимися от других процессоров.

Цитата
5) правильно ли я понял, что для SAM9260 SAMBA м.обновить программу, которая должна быть размещена во внеш.SPI памяти?
Да правильно. SAMBA нативно поддерживает SPI флеш и NAND. Аналогично для XE + внутренний флеш.
mdmitry
Посмотрите на linux4sam про bootstrap и u-boot. Надеюсь, станет понятней процесс загрузки и исполнения кода.
bookevg
Спасибо за ответы. Так и думал.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.