第5章 通用输入输出接口
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
控制的引脚
GPIO输入输出|I/O相关寄存器
LPC1700系列Cortex-M3的高速GPIO口还可通过一 些字节和半字访问的寄存器来控制,如FIOxDIR0/1/2/3、 FIOxSET0/1/2/3、FIOxCLRL/U等。
GPIO端口方向寄存器 GPIO输出置位寄存器 GPIO输出清零寄存器 GPIO管脚值寄存器
• GPIO应用程序示例——控制按键
int main (void) { unsigned long i; // 设置P2.0---P2.3方向为输出,P2.11、P2.12方向的输入 LPC_GPIO2->FIODIR = 0x0000000F; // 初始化输出高电平,关闭指示灯 LPC_GPIO2->FIOSET = 0x0000000F; while(1) { // 判断按键1 P2.11是否按下及处理程序 if( ((LPC_GPIO2->FIOPIN)&0x00000800)==0x0) // 如果有按键按下 { // 延时时间较短可能出现连击 for(i = 100000; i > 0; i--); // 软件延时去抖动 if( ((LPC_GPIO2->FIOPIN)&0x00000800)==0x0) // 按键依然按下 { // 等待按键释放 while(((LPC_GPIO2->FIOPIN)&0x00000800)==0x0);
写该寄存器会将值保存到输出寄存器,具体使用稍后介绍。
注意:无论引脚被设置为输入还是输出模式或者配置为其他可选的 数字功能,都不影响引脚状态的读出。
• GPIO相关寄存器描述——FIOxDIR
out in FIOxDIR FIOxCLR FIOxSET 1 0
PINSELx
FIOxPIN
FIOxDIR
功能选择寄存器
1 OUT 0
IN
1 0 FIOxCLR 输出清零寄存器
GPIO
FIOxDIR
PINSELx 复位后默认所有 GPIO为上拉输入模式 端口方向控制寄存器 FIOxPIN 管脚值寄存器
GPIO输入输出|I/O屏蔽寄存器
采用屏蔽寄存器FIOxMASK来屏蔽某些位,可以让 软件在一个写操作过程中设置GPIO相应的位而又不影响 到其他的管脚。
描述
复位值
31 : 0
方向控制位。FIOxDIR[0]对应于Px.0 …FIOxDIR[31]对应于Px.31引脚
0
当引脚设置为GPIO输出模式时,可使用该寄存器控制引脚的方 向。向某位写入1使对应引脚作为输出功能,写入0时作为输入功 能。
作为输入功能时,引脚处于高阻态。
• GPIO相关寄存器描述——FIOxSET
第五章
通用输入输出(GPIO)
目
录
1 GPIO简介 GPIO特性描述
2
3 4
GPIO输入输出
GPIO中断
GPIO简介|数字量输入/输出——GPIO
GPIO是通用型输入/输出(General Purpose I/O)的 简称,主要用于工业现场需要用到数字量输入/输出的场 合,例如:
继电器、 LED、蜂鸣器等的控制; 传感器状态、高低电平等信息的输入等。
out in FIOxDIR FIOxCLR FIOxSET 1 0
PINSELx
FIOxPIN
FIOxS ET 31 : 0
描述 输出置位。FIOxSET[0]对应于Px.0 … FIOxSET[31]对应于Px.31引脚
复位值 0
当引脚设置为GPIO输出模式时,可使用该寄存器从引脚输出高 电平。向某位写入1使对应引脚输出高电平。写入0无效。
• GPIO应用示例——输出多位数据至IO口
在需要将多位数据同时输出到某几个IO口线时,通常使用 FIOxSET和FIOxCLR来实现,在某些情况下也可以使用FIOxPIN 寄存器实现。后者可以在多个IO口上直接输出0和1电平。
本例将8位无符号整形变量Data的值输出到P0.0~P0.7。 使用FIOxSET和FIOxCLR实现:
FIOxSET FIOxMASK 引脚电平
1
1
…… …… ……
1
0
0
1
1
1
0
1
1
0
0
1
u
1
u
u
u
1
u
u=电平不变
GPIO输入输出 |I/O操作流程 输出操作流程 输入操作流程
2
配置引脚模式
vcc
GPIO输 出 3 设置GPIO的方向
FIOxSET
高电平
1 1
PINMODEx
1 OUT
GPIO
1 1
复位值 0
当引脚设置为GPIO输出模式时,可使用该寄存器从引脚输出低 电平。向某位写入1使对应引脚输出低电平。写入0无效。 注意:读取该寄存器无效,不能读回输出寄存器的值。
GPIO输入输出|I/O功能框图
端口屏蔽寄存器 模式选择寄存器
vcc
输出置位寄存器
FIOxMASK FIOxSET PINMODEx
• GPIO应用示例——设置P0.0输出高电平
out in FIO0SET 1 0 FIO0CLR
P0.0
FIO0DIR
PINSEL0
FIO0PIN
C代码:
... LPC_PINCON->PINSEL0&= 0xFFFFFFFC; (1) 设置引脚连接模块,P0.0为GPIO LPC_GPIO0->FIODIR |= 0x00000001; (2) 设置P0.0口方向,设置为输出
IOxPIN PINSELx GPIO 输出清零寄存器。该寄存器控制引脚输出 低电平 IOxDIR IOxCLR
NA
0x00000000 0x00000000 0x00000000
读/置位 只清零 读/写
GPIO方向控制寄存器。该寄存器单独控制每个 IO口的方向
• GPIO相关寄存器描述——FIOxPIN
GPIO输入输出|I/O相关寄存器
LPC1700系列Cortex-M3具有5个端口,所以具有5组 控制寄存器。一个GPIO引脚在某一时刻,只受4个位的控 制,这4个位分布在该GPIO所属端口的4个控制寄存器中。
GPIO端口方向寄存器 GPIO输出置位寄存器 GPIO输出清零寄存器 GPIO管脚值寄存器
LPC_GPIO0->FIOSET
...
= 0x00000001;
(3) 设置P0.0口状态,输出高电平
• GPIO应用示例——读取P0.0引脚状态
out in FIO0SET 1 0 FIO0CLR
P0.0
FIO0DIR
PINSEL0
FIO0PIN IO0PIN
C代码:
... uint32_t PinStat; LPC_PINCON->PINSEL0 &= 0xFFFFFFFC; (1) 设置引脚连接模块,P0.0为GPIO LPC_GPIO0-> FIODIR PinStat ... &= 0xFFFFFFFE; (2) 设置P0.0口方向,设置为输入 (3) 从FIO0PIN读取引脚状态 = LPC_GPIO0-> FIOPIN;
= Data;
(4) Data变量中为1的位将输出高电平
数据输出线:
0x??
0x00
Data
• GPIO应用示例——输出多位数据至IO口
在需要将多位数据同时输出到某几个IO口线时,通常使用 IOxSET和IOxCLR来实现,在某些情况下也可以使用IOxPIN寄存 器实现。后者可以在多个IO口上直接输出0和1电平。
FIOxDIR FIOxSET FIOxCLR FIOxPIN Px.n
Bit31 Bit31 Bit31 Bit31 Px.31
Bit30 Bit30 Bit30 Bit30 Px.30
…… …… …… …… ……
Bit1 Bit1 Bit1 Bit1 Px.1
Bit0 Bit0 Bit0 Bit0 Px.0
= (FIO0PIN & 0xFFFFFF00) | Data; (3) 写FIO0PIN,输出数据
数据输出线:
与前者对比:
0x??
Data
wenku.baidu.com
0x??
0x00
Data
• GPIO应用程序示例——控制LED
int main (void) { unsigned long i; LPC_GPIO2->FIODIR = 0x0000000F; // 设置P2.0---P2.3方向为输出 LPC_GPIO2->FIOSET = 0x0000000F; // 初始化输出高电平,关闭指示灯 while(1) { LPC_GPIO2->FIOCLR = 0x0000000F; // 输出低电平,点亮指示灯 for(i = 1000000; i > 0; i--); LPC_GPIO2->FIOSET = 0x0000000F; // 输出高电平,关闭指示灯 for(i = 1000000; i > 0; i--); } }
本例将8位无符号整数变量Data的值输出到P0.0~P0.7。 使用FIOxPIN实现:
#define DataBus 0xFF
PINSEL0 &= 0xFFFF0000;
FIO0DIR FIO0PIN ... |= DataBus;
(1) 设置引脚连接模块,P0.0 ~P0.7为GPIO
(2) 设置P0.0口方向,设置为输出
GPIO特性描述|中断
LPC1700系列Cortex-M3的P0和P2还具有中断功能, P0和P2每个引脚都可配置为上升沿、下降沿或双边沿中断。
P0.x
LPC1700
P2.x
GPIO中断还具 有掉电唤醒功能
下降沿中断
边沿中断
目
录
1 GPIO简介 GPIO特性描述
2
3 4
GPIO输入输出
GPIO中断
目
录
1 GPIO简介 GPIO特性描述
2
3 4
GPIO输入输出
GPIO中断
GPIO特性描述|I/O结构
大部分GPIO为推挽输出,具有 完整I2C功能的是开漏结构;
正常拉出灌入电流为4mA,短 时间极限值40mA; 管脚可承受最大5V的输入电压。
GPIO特性描述|通用输入输出
LPC1700系列Cortex-M3有5组GPIO,多达70个通用I/O 管脚(100管脚封装); 所有GPIO寄存器位于AHB总线上,可以进行高性能的 CPU快速访问,支持Cortex-M3位带操作; 可配置为上拉/下拉电阻、开漏和中继模式; GPIO允许进行DMA数据操作。
GPIO输入0
FIOxCLR
0 IN FIOxDIR PINSELx
4 设置GPIO输出电平 4 读取GPIO引脚电平
FIOxPIN
1 设置引脚为GPIO功能
• 使用GPIO注意要点
引脚设置为输出方式时,输出状态由FIOxSET和 FIOxCLR中最后操作的寄存器决定; 大部分GPIO输出为推挽方式(个别引脚为开漏输 出),正常拉出/灌入电流均为4mA(短时间极限 值40mA); 复位后默认所有GPIO为输入模式。
从该寄存器读回的数据为GPIO输出寄存器的值。该值不反映 外部环境对引脚的影响。
• GPIO相关寄存器描述——FIOxCLR
out in FIOxDIR FIOxCLR FIOxSET 1 0
PINSELx
FIOxPIN
FIOxCLR 31 : 0
描述 输出清零。FIOxCLR[0]对应于Px.0 …F IOxCLR[31]对应于Px.31引脚
控制的引脚
• GPIO相关寄存器描述
out in FIOxDIR FIOxCLR FIOxSET 1 0
PINSELx
FIOxPIN
IOxSET
通用名称
描述
out
访问类型
1 0 只读
复位值
FIOxPIN
FIOxSET FIOxCLR FIOxDIR
GPIO引脚值寄存器,不管方向模式如何,引脚 in 的当前状态都可以从该寄存器中读出 GPIO输出置位寄存器。该寄存器控制引脚输出 高电平
#define DataBus 0xFF
PINSEL0 &= 0xFFFF0000; (1) 设置引脚连接模块,P0.0~P0.7为GPIO FIO0DIR |= DataBus; (2) 设置P0.0口方向,设置为输出 (3) 清零8位IO口的输出状态
FIO0CLR
FIO0SET ...
= DataBus;
FIOxDIR FIOxSET FIOxCLR FIOxPIN Px.n
Bit31 Bit31 Bit31 Bit31 Px.31
Bit30 Bit30 Bit30 Bit30 Px.30
…… …… …… …… ……
Bit1 Bit1 Bit1 Bit1 Px.1
Bit0 Bit0 Bit0 Bit0 Px.0
out in FIOxDIR FIOxCLR FIOxSET 1 0
PINSELx
FIOxPIN
FIOxPIN 31 : 0
描述 GPIO引脚值。FIOxPIN[0]对应于Px.0… FIOxPIN[31]对应于Px.31引脚
复位值 未定义
该寄存器反映了当前引脚的状态。FIOxPIN中的x对应于某一个 端口,如P1口对应于FIO1PIN。所以芯片存在多少个端口,就有多 少个IOxPIN分别与之对应。