您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 第5章通用输入输出接口.
第五章通用输入输出(GPIO)目录GPIO简介1GPIO特性描述2GPIO输入输出3GPIO中断4GPIO简介|数字量输入/输出——GPIOGPIO是通用型输入/输出(GeneralPurposeI/O)的简称,主要用于工业现场需要用到数字量输入/输出的场合,例如:继电器、LED、蜂鸣器等的控制;传感器状态、高低电平等信息的输入等。目录GPIO简介1GPIO特性描述2GPIO输入输出3GPIO中断4GPIO特性描述|I/O结构大部分GPIO为推挽输出,具有完整I2C功能的是开漏结构;管脚可承受最大5V的输入电压。正常拉出灌入电流为4mA,短时间极限值40mA;GPIO特性描述|通用输入输出所有GPIO寄存器位于AHB总线上,可以进行高性能的CPU快速访问,支持Cortex-M3位带操作;GPIO允许进行DMA数据操作。可配置为上拉/下拉电阻、开漏和中继模式;LPC1700系列Cortex-M3有5组GPIO,多达70个通用I/O管脚(100管脚封装);GPIO特性描述|中断LPC1700P0.xP2.xLPC1700系列Cortex-M3的P0和P2还具有中断功能,P0和P2每个引脚都可配置为上升沿、下降沿或双边沿中断。下降沿中断边沿中断GPIO中断还具有掉电唤醒功能目录GPIO简介1GPIO特性描述2GPIO输入输出3GPIO中断4GPIO输入输出|I/O相关寄存器LPC1700系列Cortex-M3具有5个端口,所以具有5组控制寄存器。一个GPIO引脚在某一时刻,只受4个位的控制,这4个位分布在该GPIO所属端口的4个控制寄存器中。GPIO端口方向寄存器FIOxDIRBit31Bit30……Bit1Bit0GPIO输出置位寄存器FIOxSETBit31Bit30……Bit1Bit0GPIO输出清零寄存器FIOxCLRBit31Bit30……Bit1Bit0GPIO管脚值寄存器FIOxPINBit31Bit30……Bit1Bit0控制的引脚Px.nPx.31Px.30……Px.1Px.0GPIO输入输出|I/O相关寄存器GPIO端口方向寄存器FIOxDIRBit31Bit30……Bit1Bit0GPIO输出置位寄存器FIOxSETBit31Bit30……Bit1Bit0GPIO输出清零寄存器FIOxCLRBit31Bit30……Bit1Bit0GPIO管脚值寄存器FIOxPINBit31Bit30……Bit1Bit0LPC1700系列Cortex-M3的高速GPIO口还可通过一些字节和半字访问的寄存器来控制,如FIOxDIR0/1/2/3、FIOxSET0/1/2/3、FIOxCLRL/U等。控制的引脚Px.nPx.31Px.30……Px.1Px.0PINSELxFIOxDIRFIOxCLRFIOxPINFIOxSETinout10PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10通用名称描述访问类型复位值FIOxPINGPIO引脚值寄存器,不管方向模式如何,引脚的当前状态都可以从该寄存器中读出只读NAFIOxSETGPIO输出置位寄存器。该寄存器控制引脚输出高电平读/置位0x00000000FIOxCLRGPIO输出清零寄存器。该寄存器控制引脚输出低电平只清零0x00000000FIOxDIRGPIO方向控制寄存器。该寄存器单独控制每个IO口的方向读/写0x00000000•GPIO相关寄存器描述PINSELxFIOxDIRFIOxCLRFIOxPINFIOxSETinout10•GPIO相关寄存器描述——FIOxPINFIOxPIN描述复位值31:0GPIO引脚值。FIOxPIN[0]对应于Px.0…FIOxPIN[31]对应于Px.31引脚未定义该寄存器反映了当前引脚的状态。FIOxPIN中的x对应于某一个端口,如P1口对应于FIO1PIN。所以芯片存在多少个端口,就有多少个IOxPIN分别与之对应。写该寄存器会将值保存到输出寄存器,具体使用稍后介绍。注意:无论引脚被设置为输入还是输出模式或者配置为其他可选的数字功能,都不影响引脚状态的读出。PINSELxFIOxDIRFIOxCLRFIOxPINFIOxSETinout10•GPIO相关寄存器描述——FIOxDIRFIOxDIR描述复位值31:0方向控制位。FIOxDIR[0]对应于Px.0…FIOxDIR[31]对应于Px.31引脚0当引脚设置为GPIO输出模式时,可使用该寄存器控制引脚的方向。向某位写入1使对应引脚作为输出功能,写入0时作为输入功能。作为输入功能时,引脚处于高阻态。PINSELxFIOxDIRFIOxCLRFIOxPINFIOxSETinout10•GPIO相关寄存器描述——FIOxSETFIOxSET描述复位值31:0输出置位。FIOxSET[0]对应于Px.0…FIOxSET[31]对应于Px.31引脚0当引脚设置为GPIO输出模式时,可使用该寄存器从引脚输出高电平。向某位写入1使对应引脚输出高电平。写入0无效。从该寄存器读回的数据为GPIO输出寄存器的值。该值不反映外部环境对引脚的影响。PINSELxFIOxDIRFIOxCLRFIOxPINFIOxSETinout10•GPIO相关寄存器描述——FIOxCLRFIOxCLR描述复位值31:0输出清零。FIOxCLR[0]对应于Px.0…FIOxCLR[31]对应于Px.31引脚0当引脚设置为GPIO输出模式时,可使用该寄存器从引脚输出低电平。向某位写入1使对应引脚输出低电平。写入0无效。注意:读取该寄存器无效,不能读回输出寄存器的值。GPIO输入输出|I/O功能框图INOUT10GPIOPINSELxPINMODExvccFIOxDIR10FIOxSETFIOxCLRFIOxPINFIOxMASK输出置位寄存器模式选择寄存器功能选择寄存器端口屏蔽寄存器输出清零寄存器端口方向控制寄存器管脚值寄存器复位后默认所有GPIO为上拉输入模式GPIO输入输出|I/O屏蔽寄存器采用屏蔽寄存器FIOxMASK来屏蔽某些位,可以让软件在一个写操作过程中设置GPIO相应的位而又不影响到其他的管脚。FIOxSET11……10011FIOxMASK10……11001引脚电平u1……uuu1uu=电平不变GPIO输入输出|I/O操作流程FIOxPIN10FIOxCLRFIOxSETINOUT10FIOxDIRPINMODExvccGPIOPINSELx设置引脚为GPIO功能1配置引脚模式2设置GPIO的方向3设置GPIO输出电平4GPIO输入GPIO输出1高电平1输出操作流程输入操作流程1读取GPIO引脚电平4•使用GPIO注意要点引脚设置为输出方式时,输出状态由FIOxSET和FIOxCLR中最后操作的寄存器决定;大部分GPIO输出为推挽方式(个别引脚为开漏输出),正常拉出/灌入电流均为4mA(短时间极限值40mA);复位后默认所有GPIO为输入模式。...LPC_PINCON-PINSEL0&=0xFFFFFFFC;LPC_GPIO0-FIODIR|=0x00000001;LPC_GPIO0-FIOSET=0x00000001;...C代码:PINSEL0FIO0DIRFIO0CLRFIO0PINFIO0SETinout10•GPIO应用示例——设置P0.0输出高电平P0.0(1)设置引脚连接模块,P0.0为GPIO(2)设置P0.0口方向,设置为输出(3)设置P0.0口状态,输出高电平1...uint32_tPinStat;LPC_PINCON-PINSEL0&=0xFFFFFFFC;LPC_GPIO0-FIODIR&=0xFFFFFFFE;PinStat=LPC_GPIO0-FIOPIN;...C代码:PINSEL0FIO0DIRFIO0CLRIO0PINFIO0SETinout10•GPIO应用示例——读取P0.0引脚状态P0.0(1)设置引脚连接模块,P0.0为GPIO(2)设置P0.0口方向,设置为输入(3)从FIO0PIN读取引脚状态FIO0PIN#defineDataBus0xFFPINSEL0&=0xFFFF0000;FIO0DIR|=DataBus;FIO0CLR=DataBus;FIO0SET=Data;...使用FIOxSET和FIOxCLR实现:•GPIO应用示例——输出多位数据至IO口(1)设置引脚连接模块,P0.0~P0.7为GPIO(2)设置P0.0口方向,设置为输出(3)清零8位IO口的输出状态在需要将多位数据同时输出到某几个IO口线时,通常使用FIOxSET和FIOxCLR来实现,在某些情况下也可以使用FIOxPIN寄存器实现。后者可以在多个IO口上直接输出0和1电平。本例将8位无符号整形变量Data的值输出到P0.0~P0.7。(4)Data变量中为1的位将输出高电平0x??0x00Data数据输出线:#defineDataBus0xFFPINSEL0&=0xFFFF0000;FIO0DIR|=DataBus;FIO0PIN=(FIO0PIN&0xFFFFFF00)|Data;...•GPIO应用示例——输出多位数据至IO口(1)设置引脚连接模块,P0.0~P0.7为GPIO(2)设置P0.0口方向,设置为输出(3)写FIO0PIN,输出数据在需要将多位数据同时输出到某几个IO口线时,通常使用IOxSET和IOxCLR来实现,在某些情况下也可以使用IOxPIN寄存器实现。后者可以在多个IO口上直接输出0和1电平。本例将8位无符号整数变量Data的值输出到P0.0~P0.7。使用FIOxPIN实现:0x??Data数据输出线:0x??0x00Data与前者对比:•GPIO应用程序示例——控制LEDintmain(void){unsignedlongi;LPC_GPIO2-FIODIR=0x0000000F;//设置P2.0---P2.3方向为输出LPC_GPIO2-FIOSET=0x0000000F;//初始化输出高电平,关闭指示灯while(1){LPC_GPIO2-FIOCLR=0x0000000F;//输出低电平,点亮指示灯for(i=1000000;i0;i--);LPC_GPIO2-FIOSET=0x0000000F;//输出高电平,关闭指示灯for(i=1000000;i0;i--);}}•GPIO应用程序示例——控制按键intmain(void){unsignedlongi;//设置P2.0---P2.3方向为输出,P2.11、P2.12方向的输入LPC_GPIO2-FIODIR=0x0000000F;//初始化输出高电平,关闭指示灯LPC_GPIO2-FIOSET=0x0000000F;while(1){//判断按键1P2.11是否按下及处理程序if(((LPC_GPIO2-FIOPIN)&0x00000800)==0x0)//如果有按键按下{//延时时间较短可能出现连击for(i=100000;i0;i--);//软件延时去抖动if(((LPC_GPIO2-FIOPIN)&0x00000800)==0x0)//按键依然按下{//等待按键释放while(((LPC_GPIO2-FIOPIN)&0x00000800)==0x0);•GPIO应用程序示例——控制按键//切换LED1的状态//原来输出为高电平,则改为输出低电平if(((LPC_GPIO2-FIOPIN)&0x00000001)==0x00000001){LPC_GPIO2-FIOCLR=0x00000001;}else//原来输出为低电平,则改为输出高电平{LPC_GPIO2-FIOSET=0x00000001;}}}•GPIO应用示例——状态机控制按键一般的按键输入软件接口程序非常简单,在程序中一旦检测到按键输入口为低电平(有时可能为高),便采用软件延时的方法来进行消抖,然后再次检测按键输入,如果再次确认为低电
本文标题:第5章通用输入输出接口.
链接地址:https://www.777doc.com/doc-2110643 .html