|
вопрос про прерывания, AT91SAM7X |
|
|
|
Dec 6 2007, 11:06
|
Участник

Группа: Новичок
Сообщений: 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 и если да, то в каких случаях?
|
|
|
|
|
 |
Ответов
|
Apr 22 2009, 17:24
|
Участник

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

|
Цитата Во-первых, не нужно читать write-only регистры. Если это про AIC_IVR, то это я наверно на автомате набрал, читая pdf на контроллер. Вообще-то этот регистр уже наверно считался до входа в эту процедуру обработки: cstartup.s: Код ... __irq_handler: ldr PC,[PC,#-0xF20] ;; IRQ .... Цитата Во-вторых, какой смысл использовать прерывания по фронту для внутреннего источника в данном случае? AT91C_AIC_SRCTYPE_INT_EDGE_TRIGGERED в файле AT91RM9200.h описан как: #define AT91C_AIC_SRCTYPE_INT_EDGE_TRIGGERED ((unsigned int) 0x1 << 5) // (AIC) Internal Sources Code Label Edge triggered, т.е. в соответствии с pdf на контроллер это и прерывание по фронту для внутреннего источника так и прерывание по спаду для внешнего прерывания.
|
|
|
|
|
Apr 22 2009, 17:32
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Antokha @ Apr 22 2009, 21:24)  Если это про AIC_IVR... Нет, это про PIO_SODR, PIO_CODR, AIC_ICCR и т.д. Цитата(Antokha @ Apr 22 2009, 21:24)  AT91C_AIC_SRCTYPE_INT_EDGE_TRIGGERED в файле AT91RM9200.h описан как... Смысл какой? Источник у Вас внутренний, так зачем работать по фронту, рискуя огрести проблемы (что, судя по всему, и случилось)?
|
|
|
|
Сообщений в этой теме
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 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 Antokha ЦитатаAIC_IVR читается дважды. Огласите название к... Apr 23 2009, 04:52 aaarrr Цитата(Antokha @ Apr 23 2009, 08:52) [cod... Apr 23 2009, 11:09  SpiritDance Цитата(aaarrr @ Apr 23 2009, 15:09) Опять... Apr 28 2009, 06:23   MiklPolikov AT91SAM7S32
Если читаю IVR вначале прерывания, пр... Nov 20 2009, 00:27 Dron_Gus Потому что если вы уже попали в обработчик конкрет... Nov 20 2009, 07:04
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|