Может кто встречался с такой проблемой. Хочу помигать диодиком по прерыванию от порта.
После загрузки программы в контроллер(AT91SAM7A3) вроде бы работает нормльно, обработчик прерывания выполняется по прерыванию. Потом отключаю питание и снова включаю. И программа остаётся висеть в прерывании. Вот куски кода:
MAIN:
CODE
int main(void)
{
AT91S_AIC * pAic=AT91C_BASE_AIC;
pAic->AIC_IDCR = 1<<AT91C_ID_PIOA;//mask ;
//* Save the interrupt handler routine pointer and the interrupt priority
pAic->AIC_SVR[AT91C_ID_PIOA] = (unsigned int) int_button1 ;
//* Store the Source Mode Register
pAic->AIC_SMR[AT91C_ID_PIOA] = AT91C_AIC_SRCTYPE_POSITIVE_EDGE | 7 ;
;
//* Clear the interrupt on the interrupt controller
pAic->AIC_ICCR = 1<<AT91C_ID_PIOA ;
// Нулевую ножку PIOB на выход
*AT91C_PIOB_PER=0x00000001;
*AT91C_PIOB_OER=0x00000001;
*AT91C_PIOB_PPUDR=0x00000001;
*AT91C_PIOB_SODR=0x00000001;
//Нулевую ножку PIOA на прерывание
*AT91C_PIOA_PPUDR=0x00000001;
*AT91C_PIOA_IER=0x00000001;
//Enable interrupt
pAic->AIC_IECR = 0x1 << AT91C_ID_PIOA ;
while(1){}
Обработчик:
Код
void int_button1()
{
while(1){*AT91C_PIOB_SODR=0x00000001;
*AT91C_PIOB_CODR=0x00000001;}
*AT91C_AIC_EOICR=0;
}
Я взял пример прям из IAR'а - getting-started-project.
Заранее спасибо.