以PIOB的PB0为例:
#define LEVEL_IRQ_PIN (0x01<< 0)
AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC,((unsignedint)1<
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电平
}
}
上一篇:S3C2440地址空间的分配及启动过程
下一篇:ARM状态寄存器 CPSR SPSR
推荐阅读最新更新时间:2024-03-16 14:59