一、按键和中断分析
要使用中断,首先要做好两个部分的工作:CPU中断的初始化和相应器件的中断的初始化。
CPU中断初始化:就是要设置号CPU有关中断的东西。
相关器件的中断初始化:例如按键,就要设置好按键,就触发中断。
(1)、先看看按键的原理图
从上图我们可以得知:按键是接在EINT2和EINT3处,还有KP_COL0-3,一共是6个按键。
(2)、接下来看SoC接口处
从上图EINT2和EINT3接在了GPH0_2,3处,KP_COL0-3接在了GPH2_0-3处。
(3)、最后看看有关的寄存器(GPH0和GPH2,全部将其设置为外部中断模式(EXT_INT),也就是1111),
KP_COL模式是用来做矩阵键盘的。
设置好寄存器GPH0和GPH2之后,我们下面设置和外部中断相关的寄存器:
EXT_INT_0_CON,EXT_INT_2_CON,EXT_INT_0_MASK,EXT_INT_2_MASK,EXT_INT_0_PEND,EXT_INT_2_PEND。
总结:也就是说按键这边,一个按键需要设置好四个寄存器就行了。
GPH0CON:选择外部中断模式
EXT_INT_0_CON:选择怎样就触发中断(是高电平就触发中断,还是低电平,上升沿,下降沿,上升/下降触发中断)
EXT_INT_0_MASK:向该寄存器写0来使能中断
EXT_INT_0_PEND:我们初始化的时候可以通过写1来进行清除中断,中断处理完之后,我们也要向这个寄存器写1来
清除中断。
设置好上面这些寄存器,我们按键部分的中断初始化就设置好了
// 以中断方式来处理按键的初始化
void key_init_interrupt(void)
{
// 1. 外部中断对应的GPIO模式设置
rGPH0CON |= 0xFF<<8; // GPH0_2 GPH0_3设置为外部中断模式
// 2. 中断触发模式设置
rEXT_INT_0_CON &= ~(0xFF<<8); // bit8~bit15全部清零
rEXT_INT_0_C