您的位置:首页 > 其它

GEC210 按键裸机开发 原理介绍

2017-05-22 21:25 363 查看
GEC210 按键 裸机编程
 

开发环境: ADS1.2  或者 arm-linux-gcc4.4.1

开发板  : GEC210(s5pv210 soc)

 

 

原理部分:

按键部分作为cpu的输入信号,按键表现为cpu外部事件输入的一种简单形式。

对cpu而言,需要获取按键的状态,那么这种方式便是输入模式,cpu需要主动获取io引脚的电信号,才能知道按键是否按下。而按键按下本身是外部事件,不受cpu控制。Cpu想知道按键的情况,一种就是查询方式,每隔一段事件去查看按键是否按下,另一种便是中断方式,有按键按下时,主动打断cpu,告诉cpu按键按下了。

今天我们先看看比较简单的查询方式。

查询方式的原理较简单,每隔一段时间(比如100ms,或者比这个时间值更小)就查询一下按键的状态,这样就能正确获得按键的信息。

但是这个地方有一个麻烦,就是间隔的时间如果太长,那么很有可能有按键的动作,cpu就识别不到。比如cpu每隔10s查询一次按键的状态,但是我按键的动作持续1s,所以就会出现有按键动作但是cpu不会察觉的状态。

当然,细心的朋友会发现,cpu很多时候都在做空转,因为大部分时间都不会有按键,但是cpu还是要不断查询。这是查询方式的特点,所以才有后来的中断方式(以后再介绍中断方式)。

 

接下来还是

第一个步骤:看原理图

看原理图基本要弄清两个问题

a)   设备工作原理(可能需要查看相关理论知识及芯片文档)

b)   设备与cpu的连接关系

 


图1 按键原理图(210KFBDBV1.1.pdf第4页)



图2 按键与cpu的连接关系(210kfb-core-v11.pdf 第2页)

 

通过查看pdf文件相关按键的部分,可以看到图1,图2的部分,我们截取了主要的相关部分,这里分成了两个原理图,因为这个开发板原理图分为两个部分,一个核心板,一个底板,所以要分开看,但是核心板和底板是靠排插这种连接器连接在一起的,原理图部分需要多注意。

 

我们将两个图合并说明如下:



图3 按键原理图
在这个图上我们可以看到,按键没有按下时是高电平,按下后是低电平,每一个按键独立连接一个GPIO引脚,8个按键分别连接在GPH2的0-3#引脚和GPH3的0-3#引脚上。

也就是说平时没有按下按键时,读取的值应该是1,有按键按下时读取的值是0(每一个按键对应一个位).

 

 

 

所以此时应该出现

第二个步骤:看SOC相关章节

GPIO部分基本与led的介绍类似,这里我们基本省略,需要说明的是led使用的是输出模式,而按键是需要使用输入模式的。

好,直接跳到相应的寄存器部分(328页)。

与led的寄存器一样,6个寄存器中我们只关心con和dat寄存器。

 

好接下来事情就好办了,只有两个寄存器需要我们认真关心,小开心一下吧。但是我们要认真理解一下这两个寄存器哦,第一次接触总有点疏忽,没关系,多看两遍了。。。

 

1、控制寄存器------配置引脚功能的寄存器(32bits)



该寄存器有32位,每4位控制一个引脚的功能,所以该寄存器可以配置8个引脚的功能,每4个位的含义与具体描述相匹配

如果配置某个引脚为输入模式,即对应的4个位写为0000(二进制形式),等效于16进制的0x0。其他功能以此类推。

 

2、数据寄存器(注意该寄存器的描述部分)

1)让引脚配置成输入的时候,我们读取数据寄存器,可以得到引脚的输入状态值(0或1)

2)当一个引脚配置成输出的时候,可以通过该寄存器控制引脚的输出状态(0或1)

3)当引脚配置成功能引脚,读该寄存器的时候,读到的值是不确定的。



该寄存器只有8位,每一个位对应一个引脚。特别注意与CON寄存器的32位不同。

输出模式的时候,这个寄存器的某一位决定对应引脚的状态

输入模式的时候,这个寄存器的某一位反应(记录)了引脚的状态。

cpu的运算只能计算二进制的数值,而引脚是电平信号,二进制1就表示引脚的高电平,二进制0就表示引脚的低电平

 

 

好现在基本流程走完

我们通过上述已经知道:

1)   对cpu而言,按键是外部事件,cpu不可控,只能使用查询或中断方式知道按键是否按下

2)   从原理图看出,按键按下是低电平,松开是高电平

3)   对应的引脚找到,GPH2组的0-3#引脚,GPH3组的0-3#引脚,一共8个引脚,每个引脚控制一个按键

4)   GPH2/GPH3组的引脚我们需要配置为输入模式,修改GPH2CON寄存器的值,比如配置第0#引脚,就设置GPH2CON的低4位为0x0。

5)   读取GPH2DAT/GPH3DAT寄存器的值,才能知道按键是否按下,有按键按下时,对应的位值为0,没有按下时,对应的位值为1。

 

 

好了原理就讲到这了。做了led的程序,按键应该知道怎么做了吧。。。

顺便提醒一句:

输出模式:指的是cpu想控制引脚的状态(cpu主动)

输入模式:指的是cpu想获取引脚的状态(cpu被动,且无法预知)

这两个模式都与电流的方向无关。

 

写程序吧,实现一下功能:

前4个按键点亮对应的led,后4个按键熄灭对应的led。

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: