(外部中断描述的位置)
section 2 -> general purpose input/output
分析X210开发板的按键对应的EINT编号:
EINT2、EINT3、EINT16、EINT17、EINT18、EINT19
--------------------------------------------------------------
CON:
External Interrupt Control Registers:
(EXT_INT_0_CON,R/W, Address = 0xE020_0E00)
EXT_INT_0_CON [31:0]
此时学习的按键中断用到EXT_INT[3] EXT_INT[2]
这里的CON 作用是选择中断触发模式
此处使用 ----
EXT_INT_0_CON[2] [10:8]
因为bit[11]是reserved
所以可以直接将四位一起用
----- 010 = Falling edge triggered
-----0010
EXT_INT_0_CON[3] [14:12]
bit[15] reserved
--
----- 010 = Falling edge triggered
-----0010
External Interrupt Control Registers
(EXT_INT_2_CON, R/W, Address = 0xE020_0E08)
后面还有4个按键,是GPH2CON[3:0]
显示是EXT_INT[16~19]
对应 EXT_INT_2_CON [0~4]
同样--
EXT_INT_2_CON[0] [2:0] reserved [3]
EXT_INT_2_CON[1] [6:4] reserved [7]
EXT_INT_2_CON[2] [10:8] reserved [11]
EXT_INT_2_CON[3] [14:12] reserved [15]
------>
可以直接将四位一起用
----- 010 = Falling edge triggered
-----0010
------------------------------------------------------------------
---
MASK
(各个外部中断的使能/禁止开关)
External Interrupt Control Registers
(EXT_INT_0_MASK, R/W, Address = 0xE020_0F00)
--
EXT_INT_0_MASK
EXT_INT_0_MASK[2] bit[2]
EXT_INT_0_MASK[3] bit[3]
EXT_INT_2_MASK
(EXT_INT_2_MASK, R/W, Address = 0xE020_0F08)
EXT_INT_2_MASK[0] bit[0]
EXT_INT_2_MASK[1] bit[1]
EXT_INT_2_MASK[2] bit[2]
EXT_INT_2_MASK[3] bit[3]
0 = Enables Interrupt
1 = Masked
0是使能 1是屏蔽
----------------------------------------------------------
PEND
(中断挂起寄存器)
(没有发生中断时,该寄存置0 ;发生中断时,硬件会自动将该寄存器相对应的中断的位置1)
(发生中断后并处理完后,我们应该手动将该位置0,手动代码实现)
(这个PEND寄存器的位就相当于是一个标志)
(如果中断发生置1后,没来得及处理,他就会挂起,这个位将会一直是1)
(直到运行处理后,手动清 0 ,才表现为这个中断已经处理)
External Interrupt Control Registers
(EXT_INT_0_PEND, R/W, Address = 0xE020_0F40)
EXT_INT_0_PEND[2] bit[2]
EXT_INT_0_PEND[3] bit[3]
External Interrupt Control Registers
(EXT_INT_2_PEND, R/W, Address = 0xE020_0F48)
EXT_INT_2_PEND[0] bit[0]
EXT_INT_2_PEND[1] bit[1]
EXT_INT_2_PEND[2] bit[2]
EXT_INT_2_PEND[3] bit[3]
0 = Not occur 1 = Occur interrupt
初始化GPIO
开始轮询模式学习时,用的是输入模式
现在用中断处理,就要设置为中断模式
--
GPH0CON[2] [11:8]
GPH0CON[3] [15:12]
0000 = Input
1111 = EXT_INT[2]
1111 = EXT_INT[3]
GPH2CON[0] [3:0]
GPH2CON[1] [7:4]
GPH2CON[2] [11:8]
GPH2CON[3] [15:12]
0000 = Input
1111 = EXT_INT[16]
1111 = EXT_INT[17]
1111 = EXT_INT[18]
1111 = EXT_INT[19]
中断方式处理按键编程实践
1、外部中断对应的GPIO模式设置
2、中断触发模式设置
3、中断允许、清挂起
4、中断处理程序isr编写(包含真正处理的代码 以及 及时清除PEND标志位)
(注意:EINT16~31是共享中断,要在程序中以PEND 的标志位做以判别)
(rEXT_INT_2_PEND 对应有bit 7位 前4位 分别对应 四个按键的前4位 所以在这分别判断哪位按下位1 即可)
5、总结对比:轮询方式处理按键和中断方式的差异