开发环境: 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。
上一篇:s5pv210-nand-驱动-1
下一篇:GEC210 led流水灯C语言实现 ADS工程
推荐阅读最新更新时间:2024-11-11 07:11
设计资源 培训 开发板 精华推荐
- 使用 LTC2924 电源排序设置不同的 ON/OFF 延迟
- IP2325双串锂电池充电模块
- MPC5668G车联网评估套件
- 使用 Microchip Technology 的 TC38C47COE 的参考设计
- AM2M-2405S-NZ 5 Vout、2W 单路输出 DC-DC 转换器的典型应用
- 简易平板5.0寸800x480
- LTC1877EMS8 演示板、高效率单片式同步降压稳压器、2.65V 至 10V 输入、1.5V 至 3.3Vout @ 600mA
- 使用 Analog Devices 的 LTM4636-1EY 的参考设计
- 基于STM32F411RC的小四轴飞行器
- 使用 ON Semiconductor 的 LV5809MX 的参考设计