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

 
 
> AT91SAM7S прерывания в SRAM (IAR)
romashko
сообщение Sep 13 2007, 03:21
Сообщение #1


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

Группа: Свой
Сообщений: 85
Регистрация: 25-12-06
Пользователь №: 23 865



Уже второй бьюсь над прерыванием таймера в ИАР 4.4A
Когда самбой загружаю - прерывание НЕ работает! sad.gif

Вот код:

__irq __arm void TimerIRQ(void)
{
PITC_PIVR; //читаем интеррупт-статус таймера
OutLED(0); //зажигаем лампочку
AIC_EOICR=0; //энд оф интеррупт
}

void SetTimerFrequency(unsigned long int Frequency) //установка частоты тиков таймера
{
PITC_PIMR=0x03000000|(2995200/Frequency); //CPU Clock/16/Frequency
}

void EnableTimerIRQ(unsigned long int Priority) //настраивем AIC и PIT
{
AIC_SVR1=(unsigned long int)TimerIRQ; //адрес хэндлера
AIC_SMR1=Priority|(1<<5); //приоритет и срабатывание
AIC_IECR|=(1<<1); //разрешаем прерывание таймера
AIC_IDCR&=~(1<<1);
}

int main(void)
{
PMC_PCER|=(1<<2); //Enable PIOA Clock
PIO();
SetTimerFrequency(4000);
EnableTimerIRQ(7);
GO: //пустой цикл
goto GO;
}

в ИАРе в опциях линкера описываю регионы (at91sam7s256):

Vectors 0x202000-20203F
Code 0x202040-209FFF
Data 0x20A000-20CFFF

Прерывания не работают! sad.gif

как сделать прерывание рабочим? где ИАРу прописать, чтоб REMAP сделал и откопировал вектора в нужную область? help.gif

Сообщение отредактировал romashko - Sep 13 2007, 03:21
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Sep 13 2007, 09:09
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(romashko @ Sep 13 2007, 06:21) *
Уже второй бьюсь над прерыванием таймера в ИАР 4.4A
Когда самбой загружаю - прерывание НЕ работает! sad.gif
Ппереведи!.... (с) "Москва слезам не верит". Т.е. вы хотите чтобы вся программа исполнялась из ОЗУ, и загружаете ее туда самбой, так?
Цитата(romashko @ Sep 13 2007, 06:21) *
Vectors 0x202000-20203F
Прерывания не работают! sad.gif
Естественно. Ибо процессор ожидает вектора в области 0-3F.
Цитата(romashko @ Sep 13 2007, 06:21) *
как сделать прерывание рабочим? где ИАРу прописать, чтоб REMAP сделал и откопировал вектора в нужную область? help.gif
Извините, но REMAP придется вам делать самому из вашей программы. И копировать вектора тоже придется вручную. Не знаю, позволяет ли самба писать скрипты и из скрипта сделать эти действия. А линкеру указывать
Код
-DRAMSTART=00200040
-DRAMEND=00203FFF                       // any AT91SAM7 has at least 16K RAM

// Intvec always linked to 0x00-0x3F
-Z(CODE)INTVEC=00000000-0000003F

-Z(CODE)INTVEC_I=RAMSTART-RAMEND
-QINTVEC=INTVEC_I


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
romashko
сообщение Sep 14 2007, 00:39
Сообщение #3


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

Группа: Свой
Сообщений: 85
Регистрация: 25-12-06
Пользователь №: 23 865



Всеравно не получается sad.gif

Често говоря, я ничерта не понимаю, как в ИАР заставить исполняться программу
начиная с адресов 0x202000

Кстати, когда вектора находятся по адресу 0-3F, размер бинарника сильно вырастает, тоесть не линкер, не компилятор не мыслят механизмов ремэпа...

в общем смысл таков:

когда создаётся HEX (а из него потом BIN) карта памяти ДО РЕМЭПА такая:

Вектора 0x202000-0x20203F
КОД 0x202040-0x209FFF
ДАННЫЕ 0x20A000-0x20CFFF

Далее этот BIN грузится САМБОЙ по адресу 0x202000 и туда делаем GO

Далее внутри программы просиходит копирование векторов с 0x202000 в 0x200000
А потом делаем ремэп.

Сановится так:

Вектора 0x000000-0x00003F и 0x002000-0x00203F
КОД 0x002040-0x009FFF
ДАННЫЕ 0x00A000-0x00CFFF

В Keil'е это прекрасно работает, а в ИАРе отказывается sad.gif

Прошу помочь разобраться с ИАРом! 1111493779.gif help.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 14 2007, 06:59
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(romashko @ Sep 14 2007, 03:39) *
Често говоря, я ничерта не понимаю, как в ИАР заставить исполняться программу начиная с адресов 0x202000
Да наверное никак. Ибо в бинарнике нет информации о точке старта. В HEX есть. Самба HEX понимает?
Цитата(romashko @ Sep 14 2007, 03:39) *
Кстати, когда вектора находятся по адресу 0-3F, размер бинарника сильно вырастает, тоесть не линкер, не компилятор не мыслят механизмов ремэпа...
Боюсь, что компилятор не при чем, а механизма не мыслит кто-то другой. Обратите внимание на строчку -QINTVEC=INTVEC_I. Это значит линковать вектора так, как будто они лежат в INTVEC, но на самом деле разместить их в INTVEC_I. После ремапа INTVEC_I отобразится на INTVEC без всякого копирования.
Цитата(romashko @ Sep 14 2007, 03:39) *
Далее этот BIN грузится САМБОЙ по адресу 0x202000 и туда делаем GO. Далее внутри программы просиходит копирование векторов с 0x202000 в 0x200000
А что мешает линковать сразу на 0x200000?
Цитата(romashko @ Sep 14 2007, 03:39) *
А потом делаем ремэп.

Сановится так:

Вектора 0x000000-0x00003F и 0x002000-0x00203F
КОД 0x002040-0x009FFF
ДАННЫЕ 0x00A000-0x00CFFF
Да, там лежат отражения данных и кода, но программа работает с адресами 0x202040-0x209FFF и 0x20A000-0x20CFFF. Хотя это и не играет роли.

Цитата(romashko @ Sep 14 2007, 03:39) *
В Keil'е это прекрасно работает, а в ИАРе отказывается sad.gif

Прошу помочь разобраться с ИАРом! 1111493779.gif help.gif
Увы, ни с кейлом ни с самбой не работал sad.gif Через JTAG-отладчик все решается гораздо проще. Не хотите собрать JTAG?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
romashko
сообщение Sep 16 2007, 22:23
Сообщение #5


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

Группа: Свой
Сообщений: 85
Регистрация: 25-12-06
Пользователь №: 23 865



Цитата(Сергей Борщ @ Sep 14 2007, 17:59) *
А что мешает линковать сразу на 0x200000?


Самба мешает - из-за её кривости нельзя грузить в 0x200000 - там её переменные хранятся. Только начиная с 0x202000 и до конца.

Цитата(Сергей Борщ @ Sep 14 2007, 17:59) *
Через JTAG-отладчик все решается гораздо проще. Не хотите собрать JTAG?


согласен! с ЖТАГом прекрасно и с 0x200000 работает... но он доступен токо на работе, дома только SAM-Bой....

прийдётся блин, свой загрузчик писать с бут ассистентом - по ком-порту грузить... токо отхапаю пол-килобайта SRAM на сам загрузчик в конце!
Go to the top of the page
 
+Quote Post
romashko
сообщение Sep 17 2007, 06:56
Сообщение #6


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

Группа: Свой
Сообщений: 85
Регистрация: 25-12-06
Пользователь №: 23 865



А под самопальным JTAGом вы имели ввиду виглер?

Сообщение отредактировал romashko - Sep 17 2007, 06:58
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- romashko   AT91SAM7S прерывания в SRAM (IAR)   Sep 13 2007, 03:21
|- - Сергей Борщ   Цитата(romashko @ Sep 17 2007, 09:56) А п...   Sep 17 2007, 07:17
|- - alexander55   Цитата(Сергей Борщ @ Sep 17 2007, 11:17) ...   Sep 17 2007, 12:00
|- - Сергей Борщ   Цитата(alexander55 @ Sep 17 2007, 15:00) ...   Sep 17 2007, 13:05
|- - Сергей Борщ   Цитата(Сергей Борщ @ Sep 17 2007, 16:05) ...   Sep 17 2007, 17:41
- - amw   Ни с ИАР ни с кейл я не знаком, но по видимому, он...   Sep 17 2007, 10:54
- - romashko   ИАР: B InitReset ...   Sep 17 2007, 22:36
- - Сергей Борщ   Цитата(romashko @ Sep 18 2007, 01:36) ИАР...   Sep 18 2007, 07:08
- - amw   Цитата(romashko @ Sep 18 2007, 01:36) ИАР...   Sep 18 2007, 13:56
- - Сергей Борщ   Цитата(amw @ Sep 18 2007, 16:56) Перемеща...   Sep 18 2007, 23:15
- - romashko   Ура! Получилось! Короче, полностью старт...   Sep 19 2007, 01:37


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 11:07
Рейтинг@Mail.ru


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