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

 
 
> вопрос про прерывания, AT91SAM7X
Sergei_K
сообщение Dec 6 2007, 11:06
Сообщение #1


Участник
*

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



Судя по даташиту, в начале обработки прерывания необходимо прочитать регистр AIC_IVR, как они выражаются, это the entry point of the interrupt handling.. В конце обработки прерывания необходимо прописать что-нибудь в регистр AIC_EOICR, т.к. это the
exit point of the interrupt handling
..

Так вот.. до недавнего времени мне удавалось вполне успешно обрабатывать прерывания (TC, CAN, ADC), не читая AIC_IVR, а читая соответствующие статусные регистры перриферии, сбрасывающие флаг, свидетельствующий о произошедшем прерывании и прописывая какое-то значение в AIC_EOICR..

Однако при обработке прерываний от PIO и IRQ0, IRQ1 я натолкнулся на некоторые трудности.. Например, при настройке IRQ0 на срабатывание по высокому уровню без чтения AIC_IVR программа зацикливается на функции прерывания.. Когда же произвожу чтение AIC_IVR, функция прерывания выполняется один раз и больше ни на что не реагирует (кроме ресета..)

В связи с этим вопрос: необходимо ли читать регистр AIC_IVR и если да, то в каких случаях?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Antokha
сообщение Apr 23 2009, 04:52
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 20-10-08
Из: Нижний Новгород
Пользователь №: 41 078



Цитата
AIC_IVR читается дважды. Огласите название книжки.

Это моя отсебятина, начитался pdf-ника. Там сказано регистр считать, а cstartup.s не доглядел.
Про ошибку:
При использовании функции AT91F_AIC_ConfigureIt объявляя функцию static __arm __irq void PIOA_Handler( void ), получаю ошибку:
Error[Pe167]: argument of type "void (__arm __irq *)()" is incompatible with parameter of type "void (*)()"
На данный момент сделал так:
Инит:
Код
AT91C_BASE_PIOA->PIO_PPUDR |= ( DataInput );
  AT91C_BASE_PIOA->PIO_ODR = ( DataInput );
  AT91C_BASE_PIOA->PIO_BSR = ( DataInput );
  AT91C_BASE_AIC->AIC_IDCR = ( 1UL<<AT91C_ID_IRQ2 );//disable interrupt IRQ2
  AT91C_BASE_AIC->AIC_SVR[AT91C_ID_IRQ2] |= ( AT91_REG )PIOA_Handler;  // set isr
  AT91C_BASE_AIC->AIC_SMR[AT91C_ID_IRQ2] |= ( AT91C_AIC_SRCTYPE_EXT_HIGH_LEVEL ) | ( 7 ); // prio 7
  AT91C_BASE_AIC->AIC_ICCR = ( 1UL<<AT91C_ID_IRQ2 );//clear interrupt
  AT91C_BASE_AIC->AIC_IECR = ( 1UL<<AT91C_ID_IRQ2 );//enable interrupt

Обработка:
Код
static __irq __arm void PIOA_Handler( void )
{AT91C_BASE_PIOB->PIO_SODR = ( DDS_P2_MODULATION );  /* PB7 - выв 87 AT91RM9200 */
  AT91C_BASE_PIOB->PIO_CODR = ( DDS_P2_MODULATION );  /* PB7 are output */
  AT91C_BASE_AIC->AIC_EOICR = 0;  
}

виснет после команды __enable_interrupt();
P.S. Имя обработчика прерывания осталось от нужного когда-то прерывания, извините уж.
А книжка - Это Редькин П.П. "32/16-битные микроконтроллеры ARM7 семейства AT91SAM7 Руководство пользователя"

Сообщение отредактировал Antokha - Apr 23 2009, 05:07
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 23 2009, 11:09
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Antokha @ Apr 23 2009, 08:52) *
[code]
AT91C_BASE_AIC->AIC_SVR[AT91C_ID_IRQ2] |= ( AT91_REG )PIOA_Handler; // set isr
AT91C_BASE_AIC->AIC_SMR[AT91C_ID_IRQ2] |= ( AT91C_AIC_SRCTYPE_EXT_HIGH_LEVEL ) | ( 7 ); // prio 7

Опять |=, да еще и при записи адреса.

Цитата(Antokha @ Apr 23 2009, 08:52) *
А книжка - Это Редькин П.П. "32/16-битные микроконтроллеры ARM7 семейства AT91SAM7 Руководство пользователя"

В печку ее.
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Apr 28 2009, 06:23
Сообщение #4


Дух погибшего транзистора
****

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



Цитата(aaarrr @ Apr 23 2009, 15:09) *
Опять |=, да еще и при записи адреса.

В печку ее.


Вместе с автором.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Sergei_K   вопрос про прерывания   Dec 6 2007, 11:06
- - Сергей Борщ   Цитата(Sergei_K @ Dec 6 2007, 13:06) В св...   Dec 6 2007, 11:19
- - aaarrr   Добавлю немного. AIC_IVR лучше читать сразу при п...   Dec 6 2007, 14:02
- - xelax   не перестанет если AIC находится в Protect режиме.   Dec 7 2007, 06:58
- - Antokha   У меня почти такая же проблема: второй раз не обра...   Apr 22 2009, 14:39
|- - singlskv   Цитата(Antokha @ Apr 22 2009, 18:39) У ме...   Apr 22 2009, 20:05
|- - aaarrr   Цитата(singlskv @ Apr 23 2009, 00:05) Ну ...   Apr 22 2009, 20:12
|- - singlskv   Цитата(aaarrr @ Apr 23 2009, 00:12) Ну, в...   Apr 22 2009, 20:25
- - aaarrr   Во-первых, не нужно читать write-only регистры. Во...   Apr 22 2009, 16:53
- - Antokha   ЦитатаВо-первых, не нужно читать write-only регист...   Apr 22 2009, 17:24
|- - aaarrr   Цитата(Antokha @ Apr 22 2009, 21:24) Если...   Apr 22 2009, 17:32
- - Antokha   AT91C_BASE_PIOB->PIO_SODR |= ( DDS_P2_MODULATIO...   Apr 22 2009, 17:52
|- - aaarrr   Цитата(Antokha @ Apr 22 2009, 21:52) AT91...   Apr 22 2009, 18:04
- - sergeeff   Функция обработчика объявлена как обычная функция,...   Apr 22 2009, 18:44
- - Antokha   ЦитатаФункция обработчика объявлена как обычная фу...   Apr 22 2009, 19:00
|- - aaarrr   Цитата(Antokha @ Apr 22 2009, 23:00) Вооб...   Apr 22 2009, 19:16
- - Antokha   Книжка может быть и Редькина, точно скажу завтра д...   Apr 22 2009, 19:23
|- - aaarrr   Цитата(Antokha @ Apr 22 2009, 23:23) При ...   Apr 22 2009, 19:26
- - Antokha   Про ошибку завтра днём. Компилятор (от IAR 5.11) д...   Apr 22 2009, 19:30
- - Сергей Борщ   Цитата(Antokha @ Apr 22 2009, 17:39) Кодe...   Apr 22 2009, 20:49
|- - MiklPolikov   AT91SAM7S32 Если читаю IVR вначале прерывания, пр...   Nov 20 2009, 00:27
- - Dron_Gus   Потому что если вы уже попали в обработчик конкрет...   Nov 20 2009, 07:04


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 23:46
Рейтинг@Mail.ru


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