以PIOB的PB0为例:
#define LEVEL_IRQ_PIN (0x01<< 0)
AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC,((unsignedint)1<<AT91C_ID_PIOB));//先要使能PIOB的控制器时钟
AT91F_PIO_CfgInput( AT91C_BASE_PIOB, LEVEL_IRQ_PIN);//将PB0配置为input输入
AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,
AT91C_ID_PIOB,
1,
AT91C_AIC_SRCTYPE_EXT_POSITIVE_EDGE,
//AT91C_AIC_SRCTYPE_INT_EDGE_TRIGGERED,//双边沿
//AT91C_AIC_SRCTYPE_EXT_HIGH_LEVEL,
//AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE,//
(void(*)(void))piob_interrupt_proc);
{volatile dummy;dummy= AT91C_BASE_PIOB->PIO_ISR;}
AT91F_PIO_InterruptEnable(AT91C_BASE_PIOB,LEVEL_IRQ_PIN);//使能PB0变化中断
{volatile dummy;dummy= AT91C_BASE_PIOB->PIO_ISR;}
AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_PIOB);//使能PIOB控制器中断
以上就完成了PB0的上升沿中断启动,来看看中断处理函数[ads1.2]
void __irq piob_interrupt_proc(void)
{
{volatile dummy;dummy= AT91C_BASE_PIOB->PIO_ISR;}
AT91C_BASE_AIC->AIC_EOICR= 0;
if(AT91F_PIO_GetInput(AT91C_BASE_PIOB)& LEVEL_IRQ_PIN)
{
//...1电平
}else
{
//...0电平
}
}
331



被折叠的 条评论
为什么被折叠?



