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

 
 
> 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 > »   
Start new topic
Ответов (1 - 65)
DRUID3
сообщение Nov 11 2010, 17:31
Сообщение #2


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



wacko.gif 07.gif wacko.gif

Цитата(Zelepuk @ Nov 11 2010, 15:58) *
А в ARM как?
Насколько я понял нужно учесть кучу параметров, так как ARM стартует на низкой частоте, да ещё и внешнюю SD-RAM инициализировать надо и... да мало ли чего ещё.

... да-да-да... А еще добавить немножечко воды и ...ммм... пукнуть туды rolleyes.gif )))

Начнем с такого вопроса - какой у Вас ARM?


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Nov 11 2010, 18:46
Сообщение #3


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Zelepuk @ Nov 11 2010, 15:58) *
Кто-нибудь может просто по шагам расписать принцип дрыгания ногами для ARM. Нужно учесть что прога лежит в Dataflash, потом должна запускаться из внешней SD-RAM. Ну Частота тактовая должна быть нормальная (Мегагерцы). Может я чего упустил....


Как пример вот: http://eewiki.ru/wiki/Example_PinToggle_for_ARMGS10

Инициализация периферии в ARM-ах действительно сложное дело.
Еще более оно усложняется тем что не всегда хорошо описана в документации.
Большинство производителей чипов просто создают библиотеки подпрограмм для работы с их периферией.
Как правило у разных производителей эти библиотеки абсолютно разные по составу и стилю.
Кроме этого собственные библиотеки идут с компиляторами под ARM.

Поэтому выбор конкретного ARM-а очень критичен.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Nov 11 2010, 22:52
Сообщение #4


Гуру
******

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



АРМ - это всего лишь система команд. Архитектура процессорного ядра.
Так как пишем на Си, то наплевать на систему команд. И на архитектуру.
Не наплевать станет несколько позже.

Основной проблемой является частное устройство конкретной модели. Т.е. набор периферии, как обычной (таймеры, USB,UART), так и специфичной - PLL, MMU, DMA...

Выход простой. Купить семок мешок и читать даташиты, пока этот мешок не сгрызешь.


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


Знающий
****

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



Цитата(DRUID3 @ Nov 11 2010, 20:31) *
wacko.gif 07.gif wacko.gif


... да-да-да... А еще добавить немножечко воды и ...ммм... пукнуть туды rolleyes.gif )))

Начнем с такого вопроса - какой у Вас ARM?


бред какой-то....


В старте написано какой АРМ у меня.

Сообщение отредактировал Zelepuk - Nov 12 2010, 05:19
Go to the top of the page
 
+Quote Post
segment
сообщение Nov 12 2010, 08:31
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 352
Регистрация: 10-08-06
Из: Санкт-Петербург
Пользователь №: 19 471



Помойму сейчас уже нет разницы под что писать. Тем более на Си/Си++. Что мешает открыть доку на проц и посмотреть примеры?
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Nov 12 2010, 15:13
Сообщение #7


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



Цитата(Zelepuk @ Nov 12 2010, 07:18) *
бред какой-то....


В старте написано какой АРМ у меня.

Я конечно не самый внимательный в мире человек, но что-то сомневаюсь что я мог пропустить прямое указание на at91SAM9260. Вы его потом приписали wink.gif ... Обманывать - нехорошо, непедагогично... tongue.gif


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Nov 12 2010, 15:52
Сообщение #8


Знающий
****

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



Цитата(DRUID3 @ Nov 12 2010, 18:13) *
Я конечно не самый внимательный в мире человек, но что-то сомневаюсь что я мог пропустить прямое указание на at91SAM9260. Вы его потом приписали wink.gif ... Обманывать - нехорошо, непедагогично... tongue.gif


DRUID3 вы ИМХО самый странный участник форума.... что за чушь!
Там же не написано что я редактировал сообщение.

Если вы серьёзно (а то хрен вас разберёт)))
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Nov 12 2010, 19:10
Сообщение #9


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Сега @ Nov 12 2010, 10:31) *
Помойму сейчас уже нет разницы под что писать. Тем более на Си/Си++. Что мешает открыть доку на проц и посмотреть примеры?


Потому что доки как для PIC-ов больше не пишут.
Чипы сложнее в 10 раз и клепают их в пару раз быстрее. Производителям уже не до доки.

А на борьбу с недокументированными возможностями ARM-ов могут уйти многие месяцы.
Берясь за ARM-ы сразу резервируйте время на исследования и не надейтесь на доку.

Go to the top of the page
 
+Quote Post
Stas-
сообщение Nov 15 2010, 07:44
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 157
Регистрация: 20-01-09
Из: Новосибирск
Пользователь №: 43 645



Цитата(AlexandrY @ Nov 13 2010, 01:10) *
Потому что доки как для PIC-ов больше не пишут.
Чипы сложнее в 10 раз и клепают их в пару раз быстрее. Производителям уже не до доки.

А на борьбу с недокументированными возможностями ARM-ов могут уйти многие месяцы.
Берясь за ARM-ы сразу резервируйте время на исследования и не надейтесь на доку.

Тоска какая-то sad.gif
Неужели нет каких-нибудь новых быстрых контроллеров, которые были бы так же хорошо документированы и просты в применении, как старички AVR, например?
Я как начал с AVR так на них и застрял. Армы SAM7s оказались слишком сложны sad.gif
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Nov 15 2010, 08:58
Сообщение #11


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



MSP430, AVR32, DSPIC...
но всё это сильно в сторону от ARM mainstream'а, так что думайте сами, решайте сами


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Nov 15 2010, 08:59
Сообщение #12


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



..посмотрите в сторону STM32 ..сам я не программировал , но вроде как ходят слухи smile.gif что для данного проца наделано куча библиотек с исходниками , и подёргать ножками и может даже что посложнее там - нет проблем, какая вам переферия нужна - берёте из библиотек модуль соответствующий и работаете.
(STM32 тоже ARM . )


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Nov 15 2010, 09:17
Сообщение #13


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Lmx2315 @ Nov 15 2010, 11:59) *
..сам я не программировал , но вроде как ходят слухи smile.gif что для данного проца наделано куча библиотек с исходниками

Библиотек с исходниками у всех полно, только вот качество их - того...
На уровне студентов старших курсов


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Nov 15 2010, 10:35
Сообщение #14


Гуру
******

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



Что за ерунда.
Рекомендую. Поизучайте какой-нибудь Пентюк на предмет ембеденья (примерно час).
После этого документация на АРМ7 покажется краткой и ясной.

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

Периферии больше - да. Но никто не мешает ее не использовать.
Единственное отличие от АВР - это надо настроить частоту на которой собрался работать. И все.

Все остальное - по ходу дела.
---
А вот современные АРМы для планшетов - это да. Это круто. Но они - нафик не нужны. Себе для развлечения восьмислойную плату городить - проще уж купить готовое.


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


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(DpInRock @ Nov 15 2010, 13:35) *
А вот современные АРМы для планшетов - это да. Это круто. Но они - нафик не нужны. Себе для развлечения восьмислойную плату городить - проще уж купить готовое.

Производители планшетов тоже так считают.
Сегодня вычитал на планшетном форуме про начинку SmartQ - плата Telechips TCC8900 Demo Board
А я всё удивлялся - что это китайские планшеты похожи друг на друга, как близнецы


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
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
sergeeff
сообщение Nov 17 2010, 14:08
Сообщение #31


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

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



Ну взяла бы уважаемая радистка и сделала в своей программе dump первых 64 байт sram с 0-го адреса. По крайней мере многое прояснится.
Go to the top of the page
 
+Quote Post
SII
сообщение Nov 17 2010, 18:18
Сообщение #32


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 13-07-10
Из: Солнечногорск-7
Пользователь №: 58 414



Цитата(Zelepuk @ Nov 15 2010, 20:33) *
Сложновато-сложновато, всё равно((

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

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

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

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


В общем-то, там ничего сложного нет, просто в АРМе сложней первоначальная настройка, и в неё лучше вникнуть, а не копипастить откуда-то, не очень понимая точный смысл. Я использую AT91SAM9261, никаких трудностей не возникало, за исключением того, что первый раз, инициализируя DBGU, забыл отдать ему соответствующие ноги портов -- естественно, передача данных при этом не работала.

ADD. Ну а если конкретно про дрыганье ногами, то имеется два варианта.

1. Для установки неких разрядов какого-либо порта записываются 1 в соответствующие разряды регистра PIO_SODR этого порта (те разряды, в которые записывается 0, не будут менять своё состояние). Для сброса разрядов производится запись единиц в соответствующие позиции регистра PIO_CODR.

2. Сброс-установка разрядов путём записи необходимых значений в порт PIO_ODSR. Именно этот режим эквивалентен изменению ног в AVRках, но нередко удобнее бывает способ 1: если в какие-то биты порта записывается 0, то соответствующие ноги просто не меняются, поэтому установить или сбросить конкретные ноги проще (не надо предварительно считывать состояние порта и проводить логические операции, чтобы установить-сбросить определённые биты).

Сообщение отредактировал SII - Nov 17 2010, 18:25
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Nov 18 2010, 10:12
Сообщение #33


Знающий
****

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



Цитата(SII @ Nov 17 2010, 21:18) *
В общем-то, там ничего сложного нет, просто в АРМе сложней первоначальная настройка, и в неё лучше вникнуть, а не копипастить откуда-то, не очень понимая точный смысл. Я использую AT91SAM9261, никаких трудностей не возникало, за исключением того, что первый раз, инициализируя DBGU, забыл отдать ему соответствующие ноги портов -- естественно, передача данных при этом не работала.

ADD. Ну а если конкретно про дрыганье ногами, то имеется два варианта.

1. Для установки неких разрядов какого-либо порта записываются 1 в соответствующие разряды регистра PIO_SODR этого порта (те разряды, в которые записывается 0, не будут менять своё состояние). Для сброса разрядов производится запись единиц в соответствующие позиции регистра PIO_CODR.

2. Сброс-установка разрядов путём записи необходимых значений в порт PIO_ODSR. Именно этот режим эквивалентен изменению ног в AVRках, но нередко удобнее бывает способ 1: если в какие-то биты порта записывается 0, то соответствующие ноги просто не меняются, поэтому установить или сбросить конкретные ноги проще (не надо предварительно считывать состояние порта и проводить логические операции, чтобы установить-сбросить определённые биты).


спасибо!
Go to the top of the page
 
+Quote Post
tturist
сообщение Nov 19 2010, 14:45
Сообщение #34


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 2-04-07
Пользователь №: 26 703



Я тут сильно извиняюсь...
По моему скромному мнению изучение АРМ9 нужно начинать не с вопроса "как ножками потрыгать" а с вопроса "какую операционную систему на этот чип поставить". Тогда не будет лишних вопросов как что грузить и как память инициализировать. Нужно придумать очень экзотическую задачу чтобы имело смысл лудить такую железку без ОС. У меня вот фантазии не хватает. Не надо ничего изобретать и приделывать к велосипеду квадратные колеса.
У вас простая задача - берите 8-ми битную архитектуру.
Что-то посложнее - АРМ7 и можно подумать о какой-нибудь риал-тайм ОС.
А если вам захотелось АРМ9 с ММУ залудить - без операционной системы не обойтись. Он для этого и придуман. Идете на сайт производителя с вопросом "какую ОС вы мне можете предложить для этого железа".
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Nov 19 2010, 17:03
Сообщение #35


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



tturist, тренируйте фантазию smile.gif

У нас есть железка с WinCE на ARM9, там загрузчик полностью переписан и обвешан блекджеками и шл... излишествами.
Цель - на производстве (да и у пользователя тоже) убедиться, что всё железо работает нормально.

Ногодрыг там используется вовсю.
Хотя основное применение железки, конечно, другое - крутить задачку под WinCE.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 19 2010, 17:48
Сообщение #36


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

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



Цитата(tturist @ Nov 19 2010, 17:45) *
Я тут сильно извиняюсь...
По моему скромному мнению изучение АРМ9 нужно начинать не с вопроса "как ножками потрыгать" а с вопроса "какую операционную систему на этот чип поставить".


Вы в этом вопросе идете на поводу у сторонников теории "главное побыстрее чего-нибудь сляпать, а потом...". Вы, к примеру, не смотрели как в Linux'e через стандартную драйверную обвязку сделано "ногодрыгание"? Вы посмотрите, может свое мнение и несколько поменяете.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Nov 19 2010, 19:35
Сообщение #37


Гуру
******

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



Цитата
а с вопроса "какую операционную систему на этот чип поставить"

Когда хоть одну железку своими руками (а не руками производителей китов) сделаете, ваше мнение изменится.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение Nov 20 2010, 11:55
Сообщение #38


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Цитата(tturist @ Nov 19 2010, 17:45) *
Я тут сильно извиняюсь...
По моему скромному мнению изучение АРМ9 нужно начинать не с вопроса "как ножками потрыгать" а с вопроса "какую операционную систему на этот чип поставить". Тогда не будет лишних вопросов как что грузить и как память инициализировать. Нужно придумать очень экзотическую задачу чтобы имело смысл лудить такую железку без ОС. У меня вот фантазии не хватает. Не надо ничего изобретать и приделывать к велосипеду квадратные колеса.
У вас простая задача - берите 8-ми битную архитектуру.
Что-то посложнее - АРМ7 и можно подумать о какой-нибудь риал-тайм ОС.
А если вам захотелось АРМ9 с ММУ залудить - без операционной системы не обойтись. Он для этого и придуман. Идете на сайт производителя с вопросом "какую ОС вы мне можете предложить для этого железа".


Линукс реалтаймовский - не проблема?
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 20 2010, 13:52
Сообщение #39


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

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



Цитата
А если вам захотелось АРМ9 с ММУ залудить - без операционной системы не обойтись.


Совсем уж неясное утверждение. Что-то такого фантастического нужно для инициализации D- и I- кешей, к примеру, что не катит без ОС?
Go to the top of the page
 
+Quote Post
NIKOLASIUS
сообщение Nov 22 2010, 09:07
Сообщение #40


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 17-06-10
Из: МИНСК
Пользователь №: 57 975



Доброго времени суток!
Может быть кто-нибудь сталкивался с ECC (Error Corrected Code Controller) в MCU AT91SAM9G45.
Суть проблемы токова: в очищенный блок NAND FLASH пишу одну страницу и содержимое регистров ECC, а вот при чтении получаю мультибитовую ошибку.

Сообщение отредактировал NIKOLASIUS - Nov 22 2010, 09:08


--------------------
Никогда не бойся делать то, что ты не умеешь.
Помни, ковчег был построен любителем.
Профессионалы построили "Титаник".
Go to the top of the page
 
+Quote Post
radistka
сообщение Nov 24 2010, 06:54
Сообщение #41


Участник
*

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



Значит так, стала запускаться моя программа с помощью написанного загрузчика.
Беда была вот какая - основная программа была скомпилирована для SDRAM, но чатсь функций была помещена в SRAM, сделано это было помещением конкретной функции в секцию, расположенную в ОЗУ. При прошивке программы непосредственно в SDRAM под IARом все работало корректно, однако при загрузке программы из флэш в SDRAM (с помощью написанного загрузчика) ОЗУшные функции, судя по всему, не помещались в нужные секции. Подскажите, может в IARе где-то чего-то указать дополнительно нужно или еще чего...Или функции в ОЗУ можно поместить только ручками, прописав их в стартапе?
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 24 2010, 07:33
Сообщение #42


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

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



Цитата(radistka @ Nov 24 2010, 09:54) *
Значит так, стала запускаться моя программа с помощью написанного загрузчика.


Странное дело. Вы ведь сами написали загрузчик из flash в sdram? Что же вы тогда спрашиваете?
Go to the top of the page
 
+Quote Post
radistka
сообщение Nov 24 2010, 09:02
Сообщение #43


Участник
*

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



спрашиваю, потому что не понимаю, что в него еще нужно приписать. На сегодняшний день загрузчик инициализирует SDRAM, копирует код программы из флеш в SDRAM и переходит на адрес этой программы в SDRAM, но как дело обстоит с функциями основной программы, помещенными в SRAM, не понятно.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 24 2010, 16:47
Сообщение #44


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

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



Цитата(radistka @ Nov 24 2010, 12:02) *
спрашиваю, потому что не понимаю, что в него еще нужно приписать. На сегодняшний день загрузчик инициализирует SDRAM, копирует код программы из флеш в SDRAM и переходит на адрес этой программы в SDRAM, но как дело обстоит с функциями основной программы, помещенными в SRAM, не понятно.


Во flash у вас лежит, скорее всего, линейный bin-файл. Вы же должны знать, хотя бы, границы bss сегмента (чтобы его обнулить). Таким же образом, вы, по идее, должны знать границы вашего нестандартного (sram) сегмента, и, соответсвенно ручками скопировать этот сегмент по нужным адресам. Детали всего этого сильно зависят от вашего компилятора/линкера.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Nov 24 2010, 18:27
Сообщение #45


Гуру
******

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



Все функции __ramfunc перекачиваются в SRAM в процессе инициализации main (это делает за вас компилятор).
Но для этого у вас должно быть верное определение SRAM в линкерном файле.
Если там все нормально, то проверьте, на месте ли находится SRAM.
Т.е. хто делает ремап и делает ли вообще. Сам компилятор этого делать не станет.


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


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

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



Цитата(DpInRock @ Nov 24 2010, 21:27) *
Все функции __ramfunc перекачиваются в SRAM в процессе инициализации main (это делает за вас компилятор).


В процессе инициализации... Этот момент не поясните ли? До main еще какая-то функция вызывается, или это какая-то функция, первая в main?
Go to the top of the page
 
+Quote Post
ZED
сообщение Nov 30 2010, 07:36
Сообщение #47


Местный
***

Группа: Свой
Сообщений: 264
Регистрация: 17-04-07
Из: Москва
Пользователь №: 27 102



Прошу прощения, может вы мне ответите на вопрос, который я задал в теме: Мигание светодиодом на AT91SAM7S256?
Может нужно как-то настроить IAR, может прога не правильная. Мой микропроцессор AT91SAM9260 расположен на плате MMNET1001.
P.S.Если можно в той теме, за ранее спасибо.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Nov 30 2010, 10:34
Сообщение #48


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(sergeeff @ Nov 25 2010, 12:55) *
В процессе инициализации... Этот момент не поясните ли? До main еще какая-то функция вызывается, или это какая-то функция, первая в main?

поищите __main
Go to the top of the page
 
+Quote Post
radistka
сообщение Dec 1 2010, 06:24
Сообщение #49


Участник
*

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



sergeeff, попробовала копировать свой нестандартный sram сегмент по нужным адресам при работе из flash - не завелось ((

DpInRock, что с ремапом, что без него...а он работает с 0 адреса? то есть на sram, расположенную с 0x30000 не должен влиять?

я вот посмотрела проекты, сделанные под sam-ba , так там в *.lds файлах указываются _efixed, _sprerelocate, _eprerelocate и _spostrelocate, _epostrelocate, а потом в board_cstartup.c в resetHandler эти сегменты инициализируются, а в IAR'овских проектах этот механизм в каком месте осуществляется? сегменты описываются в *.icf, но в каком месте IAR их инициализирует и цепляет?
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Dec 6 2010, 16:05
Сообщение #50


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

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(radistka @ Dec 1 2010, 09:24) *
я вот посмотрела проекты, сделанные под sam-ba , так там в *.lds файлах указываются _efixed, _sprerelocate, _eprerelocate и _spostrelocate, _epostrelocate, а потом в board_cstartup.c в resetHandler эти сегменты инициализируются, а в IAR'овских проектах этот механизм в каком месте осуществляется? сегменты описываются в *.icf, но в каком месте IAR их инициализирует и цепляет?


Вы хотели сказать, что посмотрели проекты сделанные под gcc (а не под sam-ba)...
Сдаётся мне, что в IAR для этого надо поставить "__ramfunc" перед функцией
и возможно добавить в .icf "initialize by copy { rw, section MYCODE };" (а возможно и не надо если устроит, что функции лягут в дефолтную секцию.)

Правда поймёт ли IAR, что от него требуют чтобы он разместил часть функций (с "__ramfunc") в SRAM, при условии что остальной проект находится в SDRAM - это уже вопрос к Гуру.

Go to the top of the page
 
+Quote Post
sergeeff
сообщение Dec 6 2010, 16:25
Сообщение #51


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

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



Цитата(radistka @ Dec 1 2010, 09:24) *
sergeeff, попробовала копировать свой нестандартный sram сегмент по нужным адресам при работе из flash - не завелось ((

DpInRock, что с ремапом, что без него...а он работает с 0 адреса? то есть на sram, расположенную с 0x30000 не должен влиять?

я вот посмотрела проекты, сделанные под sam-ba , так там в *.lds файлах указываются _efixed, _sprerelocate, _eprerelocate и _spostrelocate, _epostrelocate, а потом в board_cstartup.c в resetHandler эти сегменты инициализируются, а в IAR'овских проектах этот механизм в каком месте осуществляется? сегменты описываются в *.icf, но в каком месте IAR их инициализирует и цепляет?


Вы мне так и не ответили, а главное и себе тоже, с 0х00000000 адреса у вас сидит таблица прерываний, как положено? Проект вообще не работает или работает до вызова какой-либо функции из sram?

Вы бы почетче рассказывали, что там у вас. На расстоянии, знаете ли, сложновато. Особенно,когда вы выпадаете из разговора на недели.
Go to the top of the page
 
+Quote Post
diglook
сообщение Dec 6 2010, 17:12
Сообщение #52


Частый гость
**

Группа: Участник
Сообщений: 99
Регистрация: 29-06-09
Пользователь №: 50 730



Извините может не в тему

В моем проекте IAR раньше все функции были во Флеш, поставил на все "__ramfunc", и ничего больше не менял.
Теперь графика стала рисоватся в 2 раза быстрее(перерисовка всего экрана с использованием двойной буферизации) . LPC2478 72Mhz 640x480x16. И память ОЗУ осталось чуток свободной. Так-что чаще использовать рамфунк
Go to the top of the page
 
+Quote Post
radistka
сообщение Dec 7 2010, 08:25
Сообщение #53


Участник
*

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



Цитата(sergeeff @ Dec 6 2010, 19:25) *
Вы мне так и не ответили, а главное и себе тоже, с 0х00000000 адреса у вас сидит таблица прерываний, как положено? Проект вообще не работает или работает до вызова какой-либо функции из sram?


да, с 0 адреса лежит таблица прерываний. Прошу прощения, опечаталась, проект работает именно до вызова функции, лежащей в SRAM, которая вызывается из прерываний

Сообщение отредактировал radistka - Dec 7 2010, 11:19
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Dec 7 2010, 08:49
Сообщение #54


Гуру
******

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



Осталось только сформулировать по-русски.
"ПРоект не работает до вызова...". Следовательно, "после вызова" - работает.

Таблица перываний сидит с 0. Это так и должно быть.
Далее.
Программа может стартовать как с 0, так и с 30000. В зависимости от.
Вы должны проверять при старте, где вы находитесь. И в зависимости ОТ, делать ремап или не делать.
Заметка. Ремап так хитро устроен, что переключается как Т-триггер. Т.е., переключается в ПРОТИВОПОЛОЖНУЮ сторону от текущего. Посему ЛИШНИЙ ремап - плохо.

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

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

Постойте! Как еще рам функции в 9260? Там нет флэша исполняемого...

Может имеются ввиду функции в SDRAM (D)?
Я так понял в теме смешались 2478 и 9260 каким-то образом...

Сообщение отредактировал DpInRock - Dec 7 2010, 08:57


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Dec 7 2010, 09:21
Сообщение #55


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

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



Цитата(radistka @ Dec 7 2010, 11:25) *
да, с 0 адреса лежит таблица прерываний. Проект не работает именно до вызова функции, лежащей в SRAM, которая вызывается из прерываний

Потратьте еще немного времени и проверьте:
1. Действительно ли с 0-го адресе sram (куда-нибудь в sram запишите чего-нибудь и прочитайте обратно).
2. Таблица прерываний в sram должна быть типа:
Код
                b           InitReset               ; 0 - 0x00 SoftReset
                ldr         pc, [pc, #0x18]         ; 1 - 0x04 UndefHandler
                ldr         pc, [pc, #0x18]         ; 2 - 0x08 SWIHandler
                ldr         pc, [pc, #0x18]         ; 3 - 0x0C PrefetchAbortHandler
                ldr         pc, [pc, #0x18]         ; 4 - 0x10 DataAbortHandler
                nop                                 ; 5 - 0x14 Reserved
                ldr         pc, [pc, #0x18]         ; 6 - 0x18 IRQ_Handler_Entry
                ldr         pc, [pc, #0x18]         ; 7 - 0x1C FIQ_Handler_Entry
;- There are only 5 offsets as the vectoring is used.
                DCD         InitReset               ; 0x20
                DCD         AT91F_Undef             ; 0x24
                DCD         SWIHandler              ; 0x28
                DCD         AT91F_FetchAbort        ; 0x2c
                DCD         AT91F_DataAbort         ; 0x30
                DCD         ReservedHandler         ; 0x34
                DCD         IRQHandler              ; 0x38
                DCD         FIQHandler              ; 0x3c


Такая организация таблицы позволяет размещать ваши обработчики прерываний где угодно.

3. Убедитесь, что ваши sram-функции сидят именно в sram по нужным адресам.
4. Убедитесь в том, что вы правильно компилятору сообщили о своих sram функциях и он их вызывает командами BX/BLX, а не B/BL.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Dec 7 2010, 10:18
Сообщение #56


Гуру
******

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



Код
        MODULE  ?cstartup

       ;; Forward declaration of sections.
        SECTION PROGRAM_DATA:CODE
        SECTION IRQ_STACK:DATA:NOROOT(3)
        SECTION FIQ_STACK:DATA:NOROOT(3)
        SECTION CSTACK:DATA:NOROOT(3)

        SECTION .intvec:CODE:NOROOT(2)

        PUBLIC  __vector
        PUBLIC  __vector_0x14
        PUBLIC  __iar_program_start
        EXTERN  Undefined_Handler
        EXTERN  SWI_Handler
        EXTERN  Prefetch_Handler
        EXTERN  Abort_Handler
        EXTERN  IRQ_Handler
        EXTERN  FIQ_Handler

        ARM

__vector:
       ; All default exception handlers (except reset) are
       ; defined as weak symbol definitions.
       ; If a handler is defined by the application it will take precedence.

;      ldr     PC,Reset_Addr          ; To allow remap, a relative branch is required !
    B       __iar_program_start
        ldr     PC,Undefined_Addr      ; Undefined instructions
        ldr     PC,SWI_Addr            ; Software interrupt (SWI/SVC)
        ldr     PC,Prefetch_Addr       ; Prefetch abort
        ldr     PC,Abort_Addr          ; Data abort
__vector_0x14:
        DCD     SFE(PROGRAM_DATA)      ; End address of all const and text sections.

;       ldr     PC,IRQ_Addr            ; IRQ
        ldr     PC, [PC,# -0xF20]       ;AIC direct
        ldr     PC,FIQ_Addr            ; FIQ

        DATA

Reset_Addr:     DCD   __iar_program_start
Undefined_Addr: DCD   Undefined_Handler
SWI_Addr:       DCD   SWI_Handler
Prefetch_Addr:  DCD   Prefetch_Handler
Abort_Addr:     DCD   Abort_Handler
IRQ_Addr:       DCD   IRQ_Handler
FIQ_Addr:       DCD   FIQ_Handler

__vector_end:

; --------------------------------------------------
; ?cstartup -- low-level system initialization code.
;
; After a reser execution starts here, the mode is ARM, supervisor
; with interrupts disabled.
;


        SECTION .text:CODE:NOROOT(2)

        EXTERN  ?main
        REQUIRE __vector

        ARM

__iar_program_start:

/**********************************************************************
* ?CSTARTUP
*
* Execution starts here.
* After a reset, the mode is ARM, Supervisor, interrupts disabled.
*/
?cstartup:

        mvn     r0, #0xFF        ;remap here
        bic     r0,r0, #0x1100
        mov     r1, #0x03
            str     r1, [r0, #+0]
        
        mrc     p15, 0, r0, c1, c0,0               ; read cp15 control register (cp15 r1) r0
        ldr     r3, =0xC0001085                    ; Disable Cache, Disable MMU
        ldr     r4, =0x40005004                    ; Round Robin replacement 0x40004000
        bic     r0, r0, r3
        orr     r0, r0, r4
        mcr     p15, 0, r0, c1, c0,0               ; write cp15 control register (cp15 r1)
;--------------------------------------------------------------------------------
    

;--------------------------------------------------------------------------------
; Initialize the stack pointers.
       ;; Set up the interrupt stack pointer.

        msr     cpsr_c,#0xd2           ; Change mode to IRQ mode, FIQ and IRQ disabled
        ldr     sp, =SFE(IRQ_STACK)    ; End of IRQ_STACK
        bic     sp,sp,#0x7             ; Make sure SP is aligned on 8 byte boundary
    
       ;; Set up the fast interrupt stack pointer.

        msr     cpsr_c,#0xd1           ; Change mode to FIQ mode, FIQ and IRQ disabled
        ldr     sp, =SFE(FIQ_STACK)    ; End of FIQ_STACK
        bic     sp,sp,#0x7             ; Make sure SP is aligned on 8 byte boundary

       ;; Set up the normal stack pointer.

        msr     cpsr_c,#0xdf           ; Change mode to SYS mode, FIQ and IRQ disabled
   ;     msr     cpsr_c, #0xd3
         ldr     sp, =SFE(CSTACK)       ; End of CSTACK
         bic     sp,sp,#0x7             ; Make sure SP is aligned on 8 byte boundary

        ;msr     cpsr_c,#0xd2

; Jump to startup code in library
        ldr     r0,=?main
        bx      r0

        LTORG
        END

; ***** EOF **********************************************************


Это работающее. Обработчики прерываний IRQ берутся прямо из AIC.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Dec 7 2010, 10:36
Сообщение #57


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

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



Чтобы это было совсем рабочим, не мешало бы:

1. Задать стеки для всех остальных режимов.
2. Обнулить данные в bss - сегменте.
3. До main вызвать что-нибудь типа low_level_init, где инициализировать "железо" и программные дела типа кучи.
4. Если используется/планируется С++ - до main вызвать конструкторы глобальных объектов.
Go to the top of the page
 
+Quote Post
adc
сообщение Dec 7 2010, 11:06
Сообщение #58


Местный
***

Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836



Подскажите пожалуйста где найти(его надо писать или он есть в IAR-e) этот файл стартапа?
Куда его надо прикошачить чтоб подправить?
Еще вопрос.. непонимаю что происходит при отладке... Программа останавливается(см. приложения fi1 и архив с проектом).

Почитал ветку и непонял программа прошивается во флеш при отладке?
Где находится заводской булодер? Можно его случайно стереть или испортить?

Пользуюсь IAR + mt-link+LPC-H2103.

Эскизы прикрепленных изображений
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  v02_lsp2103_blink.zip ( 37.73 килобайт ) Кол-во скачиваний: 9
 
Go to the top of the page
 
+Quote Post
radistka
сообщение Dec 7 2010, 12:12
Сообщение #59


Участник
*

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



Цитата(DpInRock @ Dec 7 2010, 11:49) *
Программа может стартовать как с 0, так и с 30000. В зависимости от.
Вы должны проверять при старте, где вы находитесь. И в зависимости ОТ, делать ремап или не делать.
Заметка. Ремап так хитро устроен, что переключается как Т-триггер. Т.е., переключается в ПРОТИВОПОЛОЖНУЮ сторону от текущего. Посему ЛИШНИЙ ремап - плохо.

...

Я так понял в теме смешались 2478 и 9260 каким-то образом...


действительно, намешано всего, я имею дело с at91sam9rl64

Сама программа располагается с 0x300000. С ремапом я, видимо, так и не разобралась ((


Вариант копирования SRAM секций (куда унесены некоторые функции) по тем же адресам из работающего SDRAM проекта в flash-проект оказался вообще-то рабочим, просто нужно было быть внимательнее с загрузкой секции во flash (в виде .txt файла). То есть теперь в программе-загрузчике инициализирую sdram, копирую код основной программы, копирую sram-секцию, прыгаю на адрес main и все даже работает!

спасибо всем большое!
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Dec 7 2010, 12:51
Сообщение #60


Гуру
******

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



Цитата(sergeeff @ Dec 7 2010, 13:36) *
Чтобы это было совсем рабочим, не мешало бы:

1. Задать стеки для всех остальных режимов.
2. Обнулить данные в bss - сегменте.
3. До main вызвать что-нибудь типа low_level_init, где инициализировать "железо" и программные дела типа кучи.
4. Если используется/планируется С++ - до main вызвать конструкторы глобальных объектов.


1. Все остальные режимы не являются работающими.
2. Зачем?
3. Дурной тон. Тем более, еще куч мне не хватает до полного счастья.
4. Зачем.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
adc
сообщение Dec 7 2010, 12:59
Сообщение #61


Местный
***

Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836



пост58
Подтолкните пожалуйста.. ну не едут лыжи и все тут... :-(
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Dec 7 2010, 13:43
Сообщение #62


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

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



Цитата(radistka @ Dec 7 2010, 15:12) *
и все даже работает!

спасибо всем большое!


У меня в институте был хороший друг, который взяв в руки листок в клетку и карандаш, говорил:"А теперь поиграем в компьютер". Я ему представлял текст программы, а он ее на бумажке выполнял. Очень полезный прием. Заставляет над многим задуматься и найти кучу ошибок.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Dec 9 2010, 05:35
Сообщение #63


Знающий
****

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



Цитата(sergeeff @ Dec 7 2010, 16:43) *
У меня в институте был хороший друг, который взяв в руки листок в клетку и карандаш, говорил:"А теперь поиграем в компьютер". Я ему представлял текст программы, а он ее на бумажке выполнял. Очень полезный прием. Заставляет над многим задуматься и найти кучу ошибок.


Видать программы были что-то вроде посчитать сумму ряда?
Go to the top of the page
 
+Quote Post
muravei
сообщение Dec 9 2010, 10:03
Сообщение #64


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(SII @ Nov 17 2010, 21:18) *
2. Сброс-установка разрядов путём записи необходимых значений в порт PIO_ODSR. Именно этот режим эквивалентен изменению ног в AVRках,

А в NXP 21xx можно занести что-нить одной командой ?
Там что-то про это написано "Entire port value can be written in one instruction." , но не въехал как. sad.gif
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Dec 9 2010, 12:25
Сообщение #65


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

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



Цитата(Zelepuk @ Dec 9 2010, 08:35) *
Видать программы были что-то вроде посчитать сумму ряда?


Важно не то, какая программа, а понимание, как ее выполняет компьютер/контроллер. Поняли разницу?
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Dec 9 2010, 13:37
Сообщение #66


Знающий
****

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



Цитата(sergeeff @ Dec 9 2010, 15:25) *
Важно не то, какая программа, а понимание, как ее выполняет компьютер/контроллер. Поняли разницу?


Да это понятно конечно.
Интересно на каком уровне расписывал программу ваш товарищь (неужели писал что-то вроде в этот регистр записывается то-то, затем передаётся в АЛУ и т.д.) или просто писал что на каждом этапе считается и что выводится на экран?


P.S.Для обучения таким образом расписывать маленькие программик очень полезно. Не спорю.
Go to the top of the page
 
+Quote Post

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

 


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


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