嵌入式系统常用外设驱动编程实例
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
FIO0MASK:0x2009C010 FIO1MASK:0x2009C030 FIO2MASK:0x2009C050 FIO3MASK:0x2009C070 FIO4MASK:0x2009C090
5.2.2 基于GPIO的矩阵键盘设计
1. 常用键盘工作原理 (1)独立式按键接口
优点:电路配置灵活, 软件实现简单。
P1.31。 P2端口14个:P2.0~P2.13。 P3端口2个:P3.25,P3.26。 P4端口2个:P4.27,P4.28。
5.2.1 LPC1768的GPIO概述
LPC1768的GPIO特性如下: 加速GPIO功能:GPIO寄存器被转移到外设AHB总线上,以实
现高速的I/O时序;屏蔽寄存器允许将某些端口位作为一组进行 操作,而其他位不变;所以GPIO寄存器可以以字节、半字和字 的方式进行读/写操作;GPIO寄存器可由GPDMA进行访问。 置位和清零寄存器允许用一条指令置位和清零操作一个端口的 任意位。
键9按下时扫描过程
扫描次数 输出(行) 输入(列)
键刚按下时 000
110
第一次扫描 011
111
第二次扫描 101
111
第三次扫描 110
110
3.专用芯片式设计
专用键盘处理芯片一般功能比较完善.芯片本身能完成对按键 的编码、扫描、消抖和重键等问题的处理,甚至还集成了显示 接口功能。
专用键盘处理芯片的优点很明显,可靠性高,接口简单,使用 方便,适合处理按键较多的情况。但在很多应用场合,考虑成 本因素.可能并不是最佳选择。
{ rFIO1DIR3 |=0x07; //设置P1.24~P1.26配置为输出,P1.27~P1.29 //配置为输入;其中1为输出。 rFIO1CLR3| =0x07; //设置P1.24~P1.26输出为0。
}
3.键盘扫描程序
根据扫描原理,设置的P1.24~P1.26按如表5-5所示的顺序 输出,比较每次扫描P1.27~P1.29的输入值是否等于键刚被 按下的输入值,如果相等,找出输出为零的行,则该行即为被
嵌入式系统常用外设驱动编程实 例
嵌入式系统常用外设除了存储设备以外还包括:通信 总线及接口(如UART、USB、I2C、SPI等)、人机 交互设备(如LCD、键盘、触摸屏等)、其他输入输 出设备(如A/D、D/A、PWM等)。
本章提要
1 LPC1768 简介 2 GPIO与键盘实例 3 UART异步串口模块实例
所有GPIO寄存器支持位带操作功能。 单个端口的方向可控制。
所有I/O端口在复位后默认为上拉输入端。 P0和P2端口的每个引脚提供了中断功能。 每个端口的中断可被编程为上升沿、下降沿或边沿产生中断。
边沿检测支持异步操作。 P0和P2端口的每个引脚支持掉电唤醒功能。
5.2.1 LPC1768的GPIO概述
通用名称 描述
访问 复位值 PORTn寄存器名称和地址
2. GPIO寄高存速器GP描IO述端口方向控制寄
FIO0DIR:0x2009C000 FIO1DIR:0x2009C020
FIODIR 存器。该寄存器可单独控 R/W 0
FIO2DIR:0x2009C040
制每个端口引脚的方向
FIO3DIR:0x2009C060 FIO4DIR:0x2009C080
引脚功能选择寄存器9(PINSEL9)
PINSEL9寄存器控制端口4高半部分的位功能。仅当引脚选择 使用GPIO功能时,FIO4DIR寄存器中的方向控制位才有效。
引脚功能选择寄存器(PINSEL10)
PINSEL10寄存器用于控制P2.2~P2.6的跟踪功能。
本章提要
1 LPC1768 简介 2 GPIO与键盘实例 3 UART异步串口模块实例
引脚功能选择寄存器4(PINSEL4)
PINSEL4寄存器控制端口2低半部分的位功能。仅当引脚选 择使用GPIO功能时,FIO2DIR寄存器中的方向控制位才有效 。
引脚功能选择寄存器7(PINSEL7)
PINSEL7寄存器控制端口3高半部分的位功能。仅当引脚选择 使用GPIO功能时,FIO3DIR寄存器中的方向控制位才有效。
keytemp= rFIO0PIN0 &0x38; //将列的值存入keytemp的3~6位
#define rFIO1DIR3 (*(volatile unsigned char *)0x2009C023) // P1.24 ~
P1.31口方向控制寄存器 #define rFIO1PIN3 (*(volatile unsigned char *)0x2009C037) // P1.24 ~
键号
K6 K7 K8 K9
二进制代码
XX01 1101 XX11 0011 XX11 1011 XX01 1011
十六进制代码
0x1D 0x33 0x3B 0x1B
5.2.3键盘驱动程序设计
1. 寄存器宏定义
将32位GPIO寄存器分成4个8位的子寄存器进行访问,其他例子则采用开 发板自带寄存器定义方式来访问。
ARM Cortex-M3 CPU具有3级流水线和哈佛结构。LPC17XX 系列微控制器的外设组件包含高达512KB的 flash存储器、 64KB的数据存储器、以太网MAC、USB主机/从机/OTG 接口 、8 通道 DMA 控制器、4 个 UART、2 条 CAN 通道、2个 SSP控制器、SPI 接口、3个IIC接口、2输入和2输出的IIS接口 、8通道的12位ADC、10位DAC、电机控制 PWM、正交编码 器接口、4个通用定时器、6输出的通用 PWM、带有独立电池 供电的超低功耗 RTC 和多达70个的通用IO管脚。
高 速 GPIO端口输出置位寄
存器。写1使相应的端口引 脚输出高电平;写0没有影
R/W
0
响
FIO0SET:0x2009C018 FIO1SET:0x2009C038 FIO2SET:0x2009C058 FIO3SET:0x2009C078 FIO4SET:0x2009C098
FIOCLR
高 速 GPIO端口输出清零寄
存器。写1使相应的端口引 脚输出低电平;写0没有影
R/W
0
响
FIO0CLR:0x2009C01C FIO1CLR:0x2009C03C FIO2CLR:0x2009C05C FIO3CLR:0x2009C07C FIO4CLR:0x2009C09C
FIOMASK 高速GPIO端口屏蔽寄存器 R/W 0
P1.31口输出清零寄存器 #define rFIO2DIR0 (*(volatile unsigned char *)0x2009C020) // P2.0~
P2.7口方向控制寄存器
5.2.3键盘驱动程序设计
2.键盘初始化函数 键盘初始化函数主要针对键盘所用的端口属性进行初始化。在键盘工作
之前,根据行列键盘电路设计原理将P1.24~P1.26配置为输出,P1.27~ P1.29配置为输入。如果采用了中断,还要初始化中断寄存器。 void KeyInit () //该函数对键盘使用的端口进行初始化
P1.31口状态寄存器 #define rFIO1SET3 (*(volatile unsigned char *)0x2009C03B) // P1.24 ~
P1.31口输出置位寄存 器
#define rFIO1CLR3 (*(volatile unsigned char *)0x2009C03F) // P1.24 ~
3×3矩阵键盘键值代码表
若确实有键按下,则执行该按键的功能事件。 判断按键是否释放,若没有释放则等待按键释放。
键号
K1 K2 K3 K4 K5
源自文库
二进制代码
XX11 0110 XX10 1110 XX01 1110 XX11 0101 XX10 1101
十六进制代码
0x36 0x2E 0x1E 0x35 0x2D
引脚功能选择寄存器2(PINSEL2)
PINSEL2寄存器控制端口1低半部分的位功能,包含以太网 相关功能引脚。仅当引脚选择使用GPIO功能时,FIO1DIR寄 存器中的方向控制位才有效。
引脚功能选择寄存器3(PINSEL3)
PINSEL3寄存器控制端口1高半部分的位功能。仅当引脚选
引脚连接模块寄存器映射
引脚连接模块寄存器映射
引脚功能选择寄存器0(PINSEL0)
PINSEL0寄存器控制端口0低半部分的位功能。仅当引脚选 择使用GPIO功能时,FIO0DIR寄存器中的方向控制位才有效 。
引脚功能选择寄存器1(PINSEL1)
PINSEL1寄存器控制端口0高半部分的位功能。仅当引脚选 择使用GPIO功能时,FIO0DIR寄存器中的方向控制位才有效 。LPC1768的引脚功能选择寄存器1的位功能描述如表3-7所 列。
4 A/D转换器应用实例
5 触摸屏模块设计实例
6 LCD模块设计 7 PWM控制实例
5.1.1 LPC1768概述
LPC1768是NXP公司推出的基于ARM Cortex-M3内核的微控 制器LPC17XX系列中的一员。LPC17XX系列Cortex-M3微处 理器用于处理要求高度集成和低功耗的嵌入式应用。 LPC1700系列微控制器的操作频率可达100MHz(新推出的 LPC1769和LPC1759可达120MHz)。
缺点:需要用软件处理消抖、 重键等
应用:行列式按键接口适应于 按键数量较多,又不 想使用专用键盘芯片 的场合。
键盘扫描阵列:
一个瞬时接触开关(按钮)放 置在每一行与线一列的交叉点 。矩阵所需的键的数目显然根 据应用程序而不同。每一行由 一个输出端口的一位驱动,而 每一列由一个电阻器上拉且供 给输入端口一位。
4 A/D转换器应用实例
5 触摸屏模块设计实例
6 LCD模块设计 7 PWM控制实例
5.2.1 LPC1768的GPIO概述
1. LPC1768 GPIO简介
LPC1768其引脚数为100,其中用做GPIO功能的引脚达70个。 具体分配如下:
P0端口28个:P0.0~P0.11,P0.15~P0.30。 P1端口24个:P1.0~P1.1,P1.4,P1.8~P1.10,P1.14~
缺点:每个按键需要占 用一根口线,若按键数 量较多.资源浪费将比 较严重
应用:主要用于按键较 少或对操作速度要求较 高的场合,软件实现时 ,可以采用中断方式, 也可采用查询方式
(2)行列式按键接口
优点:相对于独立接口方式可 以节省很多I/O资源, 相对于专用芯片键盘 可以节省成本,且更 为灵活;
2. 3×3矩阵键盘电路设计
5.2.3键盘驱动程序设计
在图5-3中,KR0~KR2连接到P1.24~P1.26作为输出,KL3~KL5连接 到P1.27~P1.29作为输入。如果采用了中断,还要初始化中断寄存器。
3×3矩阵键盘的识别过程是由以下几个步骤构成: 判断按键是否按下。 若有键按下,则延时5~10ms,消除按键抖动。 再判断按键是否真的按下。
按下的行。
获取键盘列输入值,放入临时变量 高4位
扫描次数
输出(行)
按表5-5依次改变 行输出值
第一次扫描 110
否
第二次扫描 101
读取键盘列输入值
第三次扫描 011
是否等于第一次列 输入值
是 将行值放入临时变量低4位,返回读
取结果
BYTE GetKey()
//键盘扫描子程序
{
BYTE i, keytemp;
2. 3×3矩阵键盘电路设计
(1)功能要求
利用LPC1768的P1.24~P1.29引脚外接3×3矩阵键盘, 将键盘的值通过连接在P2.0~P2.5引脚上的LED按照键盘 按键的编号顺序点亮显示。
(2)硬件电路
3×3矩阵键盘识别实例的硬件电路如图5-5所示。K1~K9 的9个轻触式按键以3行3列的形式分别连接到P1.24~ P1.29引脚上,其中P1.24~P1.26引脚用于连接矩阵键盘 的行,P1.27~P1.29引脚用于连接矩阵键盘的列。8个 LED发光二极管连接到LPC1768的P2.0~P2.7引脚上显 示按键编号。
FIOPIN
高 速 GPIO端口引脚状态寄 存器。该寄存器真实反映 R/W 0 数字端口引脚的当前状态
FIO0PIN:0x2009C014 FIO1PIN:0x2009C034 FIO2PIN:0x2009C054 FIO3PIN:0x2009C074 FIO4PIN:0x2009C094
FIOSET