-
s5pv210中断部分是我学习arm以来较为复杂的一部分,并且很难理解里面的关系,现在我写一篇博客来把思路挑清楚,使得这一部分不再杂乱无章。
-
按键只是中断系统的一部分,也就是说按了按键中断就产生了。比如按键按下了LED灯亮了,其实这就是一个中断。他按下了就把正在进行的事情停止了下来,去做LED灯亮的中断。
查S5PV210的硬件原理图
一共有7个按键,能编程按键的只有SW5~10,从图中可以看出左边VDD_IO是高电压的,当按键按下时会与右边的接地符号导通。从而使整个按键处于低电平。底版中的EINT2-3或则KP—COL3则是引了条引线到核心板中。
SW5:GPHO_2
SW6:GPH0_3
同理通过先查底板的原理图,再查核心板的原理图可以得到sw7-11对应的寄存器
SW7:GPH2_0
SW8:GPH2_1
SW9:GPH2_2
SW10:GPH2_3
-
SoC按键有2种思路:轮询方式和中断方式。
- 轮询方式,就是SoC主动的每隔一段时间去读取(按键所对应的)GPIO的电平高低,以此获得按键信息;
- 中断方式,就是SoC事先设定好GPIO触发的中断所对应的中断处理程序ISR,当外部按键按下或弹开时会自动触发GPIO对应的外部中断,导致ISR执行,从而自动处理bbbbbbbbbbbbbbbbbbb从 按键信息。
-
首先介绍一下轮询方式的中断
由上分析可知可设置是寄存器是GPIO(通用输入输出模式),按键不按下是高电平,按下是低电平,按键的对应的GPIO为GPH0 GPH2,可把这两个寄存器设置为输入模式。
轮询方式处理中断的流程: -
第一步,先初始化GPIO模式为input
-
第二歩,轮询读取GPIO的值,差看是否按键有被按下产生中断。
初始化按键:
//先创建key.c的文件,然后开始往里面写代码
//这些宏定义都是查看数据手册得知的。
#define GPH0CON 0xE0200C00
#define GPH0DAT 0XE0200C04
#define GPH2CON 0xE0200C40
#define GPH2DAT 0XE0200C44
//把这些宏定义对应的寄存器作为变量存储
#define rGPH0CON (*(volatile unsigned int*)G