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

 
 
> Прерывание от PIOA 1 раз
Hastja
сообщение Mar 15 2007, 13:41
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 21-11-05
Пользователь №: 11 170



Знающие люди подскажите:
В исходном коде прерывание от PIOA запускается только раз
от кнопки SW2. Keil (RealView) + Simulator.

__irq void pio_c_irq_handler( void )
{
if ( (AT91C_BASE_PIOA->PIO_PDSR & LED2 ) == LED2 ) AT91C_BASE_PIOA->PIO_CODR = LED2;
else AT91C_BASE_PIOA->PIO_SODR = LED2;
//AT91C_BASE_AIC->AIC_EOICR = 0;
}

int main (void) {
AT91C_BASE_PMC->PMC_PCER = (1<<AT91C_ID_PIOA);
AT91C_BASE_PIOA->PIO_PER = LED2;
AT91C_BASE_PIOA->PIO_OER = LED2; //* LCD_CS_pin Output
AT91C_BASE_PIOA->PIO_CODR = LED2; //* LCD_CS_pin = 0
AT91C_BASE_PIOA->PIO_ODR = SW_MASK;
AT91C_BASE_PIOA->PIO_PER = SW_MASK; //* SIGNAL SW_MASK Input
//AT91C_BASE_AIC->AIC_IDCR = (1 << AT91C_ID_PIOA);
AT91C_BASE_AIC->AIC_SMR[AT91C_ID_PIOA] = (AT91C_AIC_SRCTYPE_EXT_LOW_LEVEL | PIO_INTERRUPT_LEVEL) ;
AT91C_BASE_AIC->AIC_SVR[AT91C_ID_PIOA] = (unsigned int) (pio_c_irq_handler) ;
//AT91C_BASE_AIC->AIC_ICCR = (1 << AT91C_ID_PIOA);
AT91C_BASE_AIC->AIC_IECR = (1 << AT91C_ID_PIOA);
//AT91C_BASE_PIOA->PIO_IMR = SW1;
AT91C_BASE_PIOA->PIO_IER = SW2;
while(1) ;
}

Если разкоментировать строку в обработчике, обработчик
выполныется все время и из него не выходим.
Что не так?

Все разобрался, не хватало прочтения
AT91C_BASE_PIOA->PIO_ISR;

Р.S. Два дня ковырял.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


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


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