реклама на сайте
подробности

 
 
> ARM, забегая вперёд...
Zelepuk
сообщение Nov 11 2010, 13:58
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Есть цель: научится писать простые приложения (управление ЖК, использование АЦП, вывод через UART строки) для ARM (at91SAM9260 в частности)

Знания: базовые навыки Си-программировния.

В связи с отсутствием "разжёванной" информации для ARM, я начал практиковаться с AVR (ну для этих то инфы просто море!!!!)

Есть первые результаты. По сути ничего сложного.

Но!

Объясните чем отличается программа на AVR от программы для ARM.

Вот для AVR ожно расписать так:

Выставляем нужные биты в регистры -> используя интринсики разрешаем прерывания -> и вперёд в главный цикл ногами дрыгать!!!!

А в ARM как?
Насколько я понял нужно учесть кучу параметров, так как ARM стартует на низкой частоте, да ещё и внешнюю SD-RAM инициализировать надо и... да мало ли чего ещё.

Кто-нибудь может просто по шагам расписать принцип дрыгания ногами для ARM. Нужно учесть что прога лежит в Dataflash, потом должна запускаться из внешней SD-RAM. Ну Частота тактовая должна быть нормальная (Мегагерцы). Может я чего упустил....

Заранее спасибо.
Go to the top of the page
 
+Quote Post
5 страниц V  < 1 2 3 4 > »   
Start new topic
Ответов (15 - 29)
radistka
сообщение Nov 15 2010, 12:22
Сообщение #16


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 4-03-09
Из: Санкт-Петербург
Пользователь №: 45 656



возвращаясь к первому сообщению, кто-нибудь может объяснить толково как правильно залить программу в Dataflash чтобы она потом запустилась из внешней SDRAM?
1. если использую flashloader, то программа как-будто пишется, но не стартует при подаче питания - SDRAM что ли не инициализировалась....не понятно
2. написала загрузчик, который с нужного адреса Dataflash копирует программу в SDRAM и перехожу на начало программы в SDRAM - без прерываний работают простенькие проги, с прерываниями - нет. В чем подвох может быть?
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Nov 15 2010, 14:56
Сообщение #17


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



1. Главу Boot Program пересказывать не имеет смысла. Ее надо читать.
2. Вектора находятся в SRAM


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Nov 15 2010, 17:33
Сообщение #18


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Сложновато-сложновато, всё равно((

Например подёргать ногами на AVR можно просто (напримере IAR)
DDRC = 255;
PORTC = 255;

сколько не искал подобные констркукции для ARM... не нашёл((

Как осуществляется доступ к PA0... PA31, PB0... PB31 и т.д.
(здаётся мне их настроить их на вывод тоже непрсото - одной строчкой необойтись)

P.S. Наверное нужно и впрям запастись мешком семечек и курить даташит....

Сообщение отредактировал Zelepuk - Nov 15 2010, 17:34
Go to the top of the page
 
+Quote Post
radistka
сообщение Nov 15 2010, 18:20
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 4-03-09
Из: Санкт-Петербург
Пользователь №: 45 656



Boot Program читан, FlashLoaderGuide перечитан, все легко и просто - прописал путь до загрузчика, подцепил mac файл, где инициализируется SDRAM и все должно работать... Но ведь не работает! В надежде, что не я первая стою на этих граблях, надеюсь на помощь )

Что касается векторов прерываний, то они как были в SRAM, так и лежат там себе... Первое прерывание (работаю с touch screen) обрабатывается, но из него не выходит программа, то есть прерывание не сбрасывается? но при загрузке проги напрямую в SDRAM обработка прерываний идет нормально
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Nov 15 2010, 18:40
Сообщение #20


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Цитата(radistka @ Nov 15 2010, 21:20) *
Boot Program читан, FlashLoaderGuide перечитан, все легко и просто - прописал путь до загрузчика, подцепил mac файл, где инициализируется SDRAM и все должно работать... Но ведь не работает! В надежде, что не я первая стою на этих граблях, надеюсь на помощь )

Что касается векторов прерываний, то они как были в SRAM, так и лежат там себе... Первое прерывание (работаю с touch screen) обрабатывается, но из него не выходит программа, то есть прерывание не сбрасывается? но при загрузке проги напрямую в SDRAM обработка прерываний идет нормально


присоединяюсь... только про mac-файл бы узнать подробнее)
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Nov 15 2010, 20:20
Сообщение #21


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Если читан и перечитан, то какие могут быть "вроде"?
Научитесь для начала в SRAM программы запускать.
Потом, если надо будет SDRAM -
Программа из датафлэш грузится в SRAM, переписывает настоящую программу, написанную и откомпилированную для
SDRAM (предварительно инициализировав оную).
Переписывает вектора прерываний на нужное место (на самом деле проще всего всунуть в стартап команду выборки прямо из AIC адреса - тогда вектора подойдут от отстатков загузчика) .

После чего уже джамп на начало SDRAM.
Естественно, никакой инициализации SDRAM после этого. И вообще - никакой инициализации. Все - в первоначальном загрузчике делать.
---
По жизни вот так делать.

1. Пишем программы для SRAM и тренируемся их запускать.
2. Компилируем программу для SDRAM и с помощью одной из уже написанный программок засовываем ея в датафлэш куда-нибудь в серединку.
3. После чего грузим в SDRAM программку, которая токо и умеет, что инициализировать PLL+SDRAM? копировать программу из п.2 в SDRAM и запускать оную
4. После удачи, программку из пункта 3 обзываем загрузчиком и запихиваем ее в датафлэш уже с нулевого адреса.

Все.


Сообщение отредактировал DpInRock - Nov 15 2010, 20:29


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Nov 16 2010, 05:30
Сообщение #22


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



В пункте 3 следует читать: 3. После чего грузим в SRAM программку...
Go to the top of the page
 
+Quote Post
radistka
сообщение Nov 16 2010, 06:08
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 4-03-09
Из: Санкт-Петербург
Пользователь №: 45 656



ну черт знает, так и делаю, но когда в SDRAMном проекте есть прерывания, программа зависает. А так - я тоже домозговала до этих 4 пунктов


Zelepuk, дергайте же уже ногами =)

AT91C_BASE_PIOA->PIO_PER = (AT91C_PIO_PA28); //PIO Enable Register
AT91C_BASE_PIOA->PIO_PPUDR = (AT91C_PIO_PA28); //Pull-up Disable Register
AT91C_BASE_PIOA->PIO_SODR = (1 << 28); //Set Output Data Register
AT91C_BASE_PIOA->PIO_OER = (AT91C_PIO_PA28); //Output Enable Register

AT91C_BASE_PIOA->PIO_SODR = (1 << 28); // 1
AT91C_BASE_PIOA->PIO_CODR = (1 << 28); // 0

Цитата(DpInRock @ Nov 15 2010, 23:20) *
Переписывает вектора прерываний на нужное место (на самом деле проще всего всунуть в стартап команду выборки прямо из AIC адреса - тогда вектора подойдут от отстатков загузчика) .


а не могли бы вы подробнее рассказать про всовывание команды выборки из AIC в стартап? как совать? )
заранее благодарю!
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Nov 16 2010, 06:17
Сообщение #24


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Кэт, программка может виснуть по сотне причин.
Тут уже вступает в силу такое правило: посмотрите стартап файл и разберитесь - а за каким чертом он нужен.

ldr PC, [PC,# -0xF20] ;AIC direct

Вот такая строчка должна быть для IRQ вектора. (ОНа может быть и другая, но вот такая - будет работать с SDRAM без дополнительных телодвижений) (Это кстати подробнейшим образом описывается в разделе про аик в даташите.)

(В этом случае вы оформляете прерывание как __arm __irq и его адрес пишете напрямую в аик -- Процедура обработки будет вызываться сразу, минуя все промежуточные этапы, которые любят использовать в примерах).

Далее.
Для работы просто необходимо сделать общение с компом по 232.

Сообщение отредактировал DpInRock - Nov 16 2010, 06:19


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
dimka76
сообщение Nov 16 2010, 13:57
Сообщение #25


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(DpInRock @ Nov 16 2010, 09:17) *
(В этом случае вы оформляете прерывание как __arm __irq и его адрес пишете напрямую в аик -- Процедура обработки будет вызываться сразу, минуя все промежуточные этапы, которые любят использовать в примерах).


В примерах это делается для организации вложенных прерываний.
Если вложенность не требуется, то тогда как вы говорите реакция на прерывание действительно будет быстрее.

Блин, почему книжки никто не читает. Тревор Мартин не плохо все это описывает.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Nov 16 2010, 14:30
Сообщение #26


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Цитата
В примерах это делается для организации вложенных прерываний

Вовсе нет.
Организация вложенности делается совершенно по-другому.
Хуже того, насколько я помню, в примерах вложенные прерывания нигде не применяются.

Для вложенности требуется во первых разрешать прерывания изнутри обработчика. Это как минимум. (Я не говорю о манипуляциях с аик (просто точно не помню, а лезть неохота).
А для этого применяют волшебное слово __nested


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 16 2010, 16:24
Сообщение #27


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(radistka @ Nov 16 2010, 10:08) *
ну черт знает, так и делаю, но когда в SDRAMном проекте есть прерывания, программа зависает. А так - я тоже домозговала до этих 4 пунктов


Надеюсь вы не забыли сделать remap памяти, чтобы ваша sram читалась/писалась с нулевого адреса? А потом уже туда копировать таблицу векторов прерываний.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Nov 16 2010, 22:23
Сообщение #28


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Вообще, лучше проверять местонахождение программы и выполнять или не выполнять ремап.
Ибо при загрузке из флэша ремап выполняется автоматически. А вот при старте кода самбой о ремапе должна думать программа.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 17 2010, 07:15
Сообщение #29


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(DpInRock @ Nov 17 2010, 02:23) *
Ибо при загрузке из флэша ремап выполняется автоматически. А вот при старте кода самбой о ремапе должна думать программа.



При загрузке какой программы? Чего там происходит автоматически?
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Nov 17 2010, 11:22
Сообщение #30


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Прочитайте раздел даташита о последовательности действий загрузчика при поиске программ на допустимых носителях.

А чуть ниже будет описана система команд самбы. Там также все однозначно указано.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post

5 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th June 2025 - 02:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.01555 секунд с 7
ELECTRONIX ©2004-2016