|
AT91SAM7S прерывания в SRAM (IAR) |
|
|
|
Sep 13 2007, 03:21
|
Частый гость
 
Группа: Свой
Сообщений: 85
Регистрация: 25-12-06
Пользователь №: 23 865

|
Уже второй бьюсь над прерыванием таймера в ИАР 4.4A Когда самбой загружаю - прерывание НЕ работает!  Вот код: __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 Прерывания не работают!  как сделать прерывание рабочим? где ИАРу прописать, чтоб REMAP сделал и откопировал вектора в нужную область?
Сообщение отредактировал romashko - Sep 13 2007, 03:21
|
|
|
|
|
 |
Ответов
|
Sep 13 2007, 09:09
|

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

|
Цитата(romashko @ Sep 13 2007, 06:21)  Уже второй бьюсь над прерыванием таймера в ИАР 4.4A Когда самбой загружаю - прерывание НЕ работает!  Ппереведи!.... (с) "Москва слезам не верит". Т.е. вы хотите чтобы вся программа исполнялась из ОЗУ, и загружаете ее туда самбой, так? Цитата(romashko @ Sep 13 2007, 06:21)  Vectors 0x202000-20203F Прерывания не работают!  Естественно. Ибо процессор ожидает вектора в области 0-3F. Цитата(romashko @ Sep 13 2007, 06:21)  как сделать прерывание рабочим? где ИАРу прописать, чтоб REMAP сделал и откопировал вектора в нужную область?  Извините, но 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)
|
|
|
|
|
Sep 14 2007, 00:39
|
Частый гость
 
Группа: Свой
Сообщений: 85
Регистрация: 25-12-06
Пользователь №: 23 865

|
Всеравно не получается  Често говоря, я ничерта не понимаю, как в ИАР заставить исполняться программу начиная с адресов 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'е это прекрасно работает, а в ИАРе отказывается  Прошу помочь разобраться с ИАРом!
|
|
|
|
|
Sep 14 2007, 06:59
|

Гуру
     
Группа: Модераторы
Сообщений: 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'е это прекрасно работает, а в ИАРе отказывается  Прошу помочь разобраться с ИАРом!  Увы, ни с кейлом ни с самбой не работал  Через JTAG-отладчик все решается гораздо проще. Не хотите собрать JTAG?
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Sep 16 2007, 22:23
|
Частый гость
 
Группа: Свой
Сообщений: 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 на сам загрузчик в конце!
|
|
|
|
|
Sep 17 2007, 07:17
|

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

|
Цитата(romashko @ Sep 17 2007, 09:56)  А под самопальным JTAGом вы имели ввиду виглер? Или вигглер или амонтек он же Olimex ARM-USB-TINY. Последний мне кажется очень интересным.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Sep 17 2007, 13:05
|

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

|
Цитата(alexander55 @ Sep 17 2007, 15:00)  Сергей, я правильно понял, что там стоит FTDI 245, драйвер от FTDI, а адаптер прикидывается Wingler. Из документа по приведенной ссылке: based on FT2232L IC from Future Technology Devices International Ltd. Живьем я его не щупал, мои сведения основываются на отзывах в различных форумах. Сомневаюсь, что прикидывается вигглером, скорее OpenOCD его знает как самостоятельное устройство. А большинство отладчиков умеют дружить с OpenOCD. Цитата(alexander55 @ Sep 17 2007, 15:00)  И еще вопрос. Впечатления от работы (глючность и скорость по отношению к JLink). Пока не пробовал.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
romashko AT91SAM7S прерывания в SRAM (IAR) Sep 13 2007, 03:21        Сергей Борщ Цитата(Сергей Борщ @ 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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|