Прошу помощи.
Не могу понять почему не происхотит срабатывания IRQ0 по низкому уровню.
Инициализвция прерыванияКод
void AT91F_InitIRQ0(void)
{
//AT91F_PIO_CfgInput(AT91C_BASE_PIOA,(1<<22));
AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA,START,0);
AT91F_AIC_ConfigureIt (AT91C_BASE_AIC,
AT91C_ID_IRQ0,
IRQ0_INTERRUPT_LEVEL,
//AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE,
AT91C_AIC_SRCTYPE_EXT_LOW_LEVEL,
at91_IRQ0_handler);
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_IRQ0);
((AT91PS_AIC)AT91C_BASE_AIC)->AIC_SMR[28] = 0x00000000;
((AT91PS_AIC)AT91C_BASE_AIC)->AIC_IECR = 0x10000000;
}
[indent]
[i]Обработка прерывания[/i]
[code]
__ramfunc void at91_IRQ0_handler(void)
{
Fw = 10;
//
if((AT91F_PIO_GetInput(AT91C_BASE_PIOA) & LED_GREEN ) == LED_GREEN)
{
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,LED_GREEN);
}
else
{
AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED_GREEN);
}
//while ( (AT91F_PIO_GetInput(AT91C_BASE_PIOA) & START ) != START );
}
Основной код[code]
int main()
{
//u16 HH=0,HL=0,LL=0;
AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1<<AT91C_ID_PIOA);
AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, LED_MASK);
AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED_MASK ) ; // off leds
AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED_MASK ) ; // on leds
// êîíôèãóðèì ïèí äëÿ ãåíåðàöèè ÷àñòîòû
// enabling PCK clock output
AT91C_BASE_PMC->PMC_SCER = AT91C_PMC_PCK1;
AT91C_BASE_PMC->PMC_PCKR[1] = AT91C_PMC_CSS_MAIN_CLK | AT91C_PMC_PRES_CLK_16 ;
AT91F_PIO_CfgPeriph( AT91C_BASE_PIOA, 0, AT91C_PA19_PCK1);
leds_off();
//AT91F_DBGU_Init();
AT91F_PIOB_CfgPMC();
AT91F_PIO_CfgInput(AT91C_BASE_PIOB, MODE);
AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, (1<<16));
//AT91F_PIO_SetOutput(AT91C_BASE_PIOB, (1<<16)); // PIOB.16 = 1
//AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, (1<<16)); // PIOB.16 = 0
if(AT91F_PIO_GetInput(AT91C_BASE_PIOB)&0x00008000)
{
led_green_on();
//AT91F_SPI1_Init();
//Init_Accel();
//Init_Accel_RDY();
//AT91F_PIO_CfgInput(AT91C_BASE_PIOB, READY_LIC);
//InitSysTimer();
Init_HW();
led_green_off();
AT91F_InitIRQ0();
__enable_interrupt();
for(;;)
{
}
}
else
{
}
}
[code]