注:以下内容学习于韦东山老师arm裸机第一期视频教程
一.中断的处理
1.1 中断初始化
1.1.1 设置中断源,让他能够发出中断信号
a.以按键中断为例,按键原理图如下,4个按键分别接到EINT0,EINT2,EINT11,ENIT19对应GPF0,GPF2,GPG3,GPG11
![](https://i-blog.csdnimg.cn/blog_migrate/c8dfc9d0e0714eadf88df0b7008c2abc.png)
b.配置GPFCON,GPGCON使得GPF0,GPF2,GPG3,GPG11被配置为外部中断引脚
c.配置EXTINTX寄存器设置中断触发方式为双边沿触发
其中EXTINT0寄存器对应EINT0-EINT7
EXTINT1寄存器对应EINT8-EINT15
EXTINT2寄存器对应EINT16-EINT23
d.配置EINTMASK寄存器允许EINT0,EINT2,EINT11,ENIT19向中断控制器发生中断
其中EINT0-EINT3的中断信号不需要配置,可以直接到达中断控制器
相关码如下:
/* 初始化按键, 设为中断源 */
void key_eint_init(void)
{
/* 配置GPIO为中断引脚 */
GPFCON &= ~((3<<0) | (3<<4));
GPFCON |= ((2<<0) | (2<<4)); /* S2,S3被配置为中断引脚 */
GPGCON &= ~((3<<6) | (3<<22));
GPGCON |= ((2<<6) | (2<<22)); /* S4,S5被配置为中断引脚 */
/* 设置中断触发方式: 双边沿触发 */
EXTINT0 |= (7<<0) | (7<<8); /* S2,S3 */
EXTINT1 |= (7<<12); /* S4 */
EXTINT2 |= (7<<12); /* S5 */
/* 设置EINTMASK使能eint11,19 */
EINTMASK &= ~((1<<11) | (1<<19));
}
1.1.2 设置中断控制器,让他可以向CPU发出中断
根据下图进行相关的配置
![](https://i-blog.csdnimg.cn/blog_migrate/8b72dbe59ad7da076932acd5b922c620.png)