Помогите разобраться !!! AIC не сбрасывает прерывание при считывании FVR.
В стартапе:
org 0x1c ldr PC,[PC,#-0xF20]
В main.c: __arm __fiq void f_handler( void ) ;
int main() { .... PIOB_PDR = (1 << 28); // PB28 - Perepheral control PIOB_ASR = (1 << 28); // PB28 - PA (FIQ) PIOB_ODR = 0x1000ffff; // As input PMC_PCER = 8; AT91C_BASE_AIC->AIC_SVR[0] = ( AT91_REG )f_handler ; /* set isr */ AT91C_BASE_AIC->AIC_SMR[0] = (3 << 5) ; /* Positive - edge triggered */ .... }
Тело обработчика:
__arm __fiq void f_handler( void ) { AIC_EOICR = 0; // Здесь ставлю брейкпоинт и проверяю регистры }
По теории AIC должен сбросить прерывание при считывании FVR, однако это не отслеживатеся в самом прерывании, да и в результате подачи единичного положительного фронта на PB28 программа зацикливается в обработчике. Если принудидельно очищать прерывание AIC_ICCR = 1, то все нормально работает (но такой способ ИМХО неверен). Подскажите плиз в чем проблема.
|