CoX - gpio讲解
gpio接口的原理及应用

GPIO接口的原理及应用1. GPIO接口简介1.1 GPIO的含义GPIO(General Purpose Input/Output)是通用输入输出的简称,用于连接外部设备与计算机系统进行数据交互。
它是一种灵活的接口,可以根据需要配置为输入或输出模式,并支持不同的电压和信号类型。
1.2 GPIO接口的作用GPIO接口在嵌入式系统中起到了非常重要的作用。
它可以用来控制或接收外部设备的信号,如按钮、LED灯、传感器等,实现与外部世界的交互。
同时,GPIO接口也可以作为计算机系统与其他设备的通信通道,如串口通信、SPI通信等。
1.3 GPIO接口的特点•多功能性:可以配置为输入或输出模式。
•灵活性:可以根据需要进行配置和控制。
•低功耗:相比其他通信接口,GPIO接口通常功耗较低。
•低速度:相较于专用的通信接口,GPIO接口的传输速度较慢。
2. GPIO接口的工作原理2.1 输入模式在输入模式下,GPIO接口通常用于读取外部设备的信号,如按钮的按压状态、传感器的检测结果等。
工作原理如下:1.配置引脚模式:将GPIO接口的相应引脚设置为输入模式。
2.读取信号:读取引脚上的电平状态,判断外部设备的信号。
3.处理信号:根据读取到的信号进行相应的处理,如触发某个事件或改变某个状态。
2.2 输出模式在输出模式下,GPIO接口通常用于控制外部设备的状态,如控制LED灯的亮灭、驱动电机运动等。
工作原理如下:1.配置引脚模式:将GPIO接口的相应引脚设置为输出模式。
2.设置输出值:通过写入高或低电平来控制外部设备的状态。
3.控制设备:根据设置的电平状态,控制外部设备的工作状态。
3. GPIO接口的应用场景3.1 嵌入式系统在嵌入式系统中,GPIO接口被广泛应用于控制和读取外部设备的状态。
一些常见的应用场景包括: - 控制LED灯:通过GPIO接口控制LED灯的亮灭,实现状态指示或显示效果。
- 读取按键状态:将按键连接到GPIO接口,通过读取引脚的电平状态来检测按键的按压情况。
gpio详细解读 -回复

gpio详细解读-回复GPIO详细解读GPIO,全称为通用输入输出接口(General Purpose Input/Output),是一种在计算机系统中用于与外部设备进行数字通信的接口。
它允许计算机与各种不同类型的外设进行通信,并且可以通过软件控制这些外设的输入和输出。
在本文中,我将逐步回答关于GPIO的各种问题,以帮助读者全面理解和使用GPIO接口。
一、GPIO概述GPIO是计算机系统与外部设备之间的桥梁,它通过引脚(pin)与外设相连,使用数字信号进行通信。
每个引脚可以配置为输入或输出模式,以实现不同的功能。
GPIO接口的灵活性和通用性使其成为计算机系统的核心部分。
二、GPIO引脚GPIO引脚是与外部设备相连的物理引脚,它们通常以数字方式编号,并且可以通过引脚号来识别和访问。
常见的计算机系统通常具有多个GPIO引脚,可以通过软件将它们配置为输入或输出模式。
三、GPIO模式GPIO引脚可以配置为输入或输出模式,取决于与之相连的外部设备类型和应用需求。
在输入模式下,GPIO引脚可以接收来自外设的信号,并将其传递到计算机系统;而在输出模式下,GPIO引脚可以发送计算机系统生成的信号到外设。
四、GPIO寄存器GPIO寄存器是计算机系统中用于配置和控制GPIO引脚的寄存器。
通过读写这些寄存器的值,可以设置GPIO引脚的工作模式、电平状态和其他参数。
使用GPIO寄存器可以实现对GPIO接口的灵活编程控制。
五、GPIO驱动程序为了简化对GPIO的操作,操作系统通常提供了GPIO驱动程序。
通过调用这些驱动程序提供的接口函数,可以更方便地实现对GPIO引脚的配置和控制。
驱动程序隐藏了底层硬件细节,使开发人员能够更专注于应用程序的开发。
六、GPIO使用示例以下是一个简单的GPIO使用示例,以帮助读者更好地理解GPIO接口的工作原理。
1. 引脚配置:首先,需要选择一个GPIO引脚,并将其配置为输入或输出模式。
这可以通过操作GPIO寄存器来实现。
GPIO模式详解

GPIO模式详解GPIO是General Purpose Input/Output的缩写,中文意思为通用输入输出引脚。
它是一种通用的硬件接口,可以用于连接外部设备和微控制器或单片机。
GPIO在许多嵌入式系统中都被广泛使用,例如树莓派等。
GPIO功能的实现方式有几种,其中最常见的是通过设置寄存器来控制GPIO的模式和状态。
下面将详细介绍GPIO的几种常见模式。
1. 输入模式(Input Mode):GPIO引脚在输入模式下接收外部信号,可以监测外部信号的状态。
输入模式通常用于外部设备的传感器信号读取。
在输入模式下,可以设置GPIO引脚为上拉输入(Pull-up Input)或下拉输入(Pull-down Input),以防止输入信号漂移。
2. 输出模式(Output Mode):GPIO引脚在输出模式下可以向外部设备发送信号。
输出模式通常用于控制外部设备的电平或状态。
在输出模式下,可以设置GPIO引脚为开漏输出(Open Drain Output)或推挽输出(Push-pull Output),用于适应不同的外部设备。
3. 仿真模式(Analog Mode):GPIO引脚在仿真模式下可以实现模拟信号输入和输出。
在一些特定的应用中,需要使用GPIO引脚来进行模拟信号的输入和输出,例如连接模拟传感器或驱动模拟设备。
4. 复用模式(Alternate Function Mode):GPIO引脚在复用模式下可以实现多种不同的功能,通常用于连接外部设备的特定功能接口。
例如,一些GPIO引脚可以被设置为串行通信接口(如SPI、I2C、UART等)的引脚,以便与外部设备进行通信。
根据不同的芯片和硬件平台,GPIO的模式实现方式有所不同。
有些芯片需要通过设置特定的寄存器来配置GPIO的模式和状态,其他一些芯片则通过使用特定的库函数或驱动程序来操作GPIO。
此外,GPIO的模式还包括一些其他的特性,例如中断功能、输入输出速度控制、上下拉电阻的选择等。
嵌入式学习笔记之GPIO详解

嵌入式学习笔记之GPIO详解一、什么是GPIO:GPIO,英文全称为General-Purpose IO ports,也就是通用IO口。
在嵌入式系统中常常有数量众多,但是结构却比较简单的外部设备/电路,对这些设备/电路有的需要CPU为之提供控制手段,有的则需要被CPU用作输入信号。
而且,许多这样的设备/电路只要求一位,即只要有开/关两种状态就够了,比如灯亮与灭。
对这些设备/电路的控制,使用传统的串行口或并行口都不合适。
所以在微控制器芯片上一般都会提供一个通用可编程IO接口,即GPIO。
接口至少有两个寄存器,即通用IO控制寄存器与通用IO数据寄存器。
数据寄存器的各位都直接引到芯片外部,而对这种寄存器中每一位的作用,即每一位的信号流通方向,则可以通过控制寄存器中对应位独立的加以设置。
这样,有无GPIO接口也就成为微控制器区别于微处理器的一个特征。
二、GPIO之LCD控制编程:S3C2440有130个I/O端口,分为A-J共9组:GPA、GPB、、、、GPJ,可以通过设置寄存器来确定某个引脚用于输入、输出还是特殊功能。
比如:可以设置GPH6作为输入、输出、或者用于串口。
1、通过寄存器来操作GPIO引脚1)GPxCON寄存器它用于配置引脚的功能端口A与端口B-J在功能上有所不同,GPACON 中每一位对应一根引脚(共23根引脚)当某位为0时,对应引脚为输出,此时在GPADAT 中相应位写入0或1,让此引脚输出低电平或高电平;当某位被设为1时,对应引脚为地址线或用于地址控制,此时GPADAT保留不用。
GPACON通常被设为全1,以便访问外部存储设备端口B-J在寄存器操作上完全相同,PxCon中每两位控制一根引脚,00表示输入,01表示输出,10表示特殊功能,11保留不用。
2)GPxDAT寄存器它用于读写引脚,当引脚被设为输入时,读此寄存器得到对应引脚的电平状态是高还是低;当引脚被设为输出时,写此寄存器相应位可令此引脚输出高低电平。
gpio操作实验原理 -回复

gpio操作实验原理-回复GPIO操作实验原理GPIO(General Purpose Input Output)是通用输入输出引脚,它是计算机系统与外部设备交互的一种重要方式。
在本文中,我们将探讨GPIO 操作实验的原理,包括什么是GPIO、GPIO操作的基本原理、GPIO的引脚模式以及如何进行GPIO实验等内容。
一、什么是GPIO?GPIO是指通用输入输出引脚,它是一种用于与计算机系统或单片机交互的接口。
它既可以作为输入端口,接收外部设备(例如传感器)的信号;又可以作为输出端口,控制外部设备(例如LED灯)的状态。
在计算机系统中,GPIO常见的接口类型有电平接口和串行接口。
电平接口通过高低电平的变化来传递信息,例如电平为高表示1,电平为低表示0;而串行接口则通过一系列的位来传递信息,例如通过SPI(串行外设接口)或I2C(串行总线)。
二、GPIO操作的基本原理GPIO操作的基本原理是通过对GPIO引脚的输入输出控制来实现与外部设备的交互。
具体而言,通过设置引脚的输入模式或输出模式,以及设置引脚的高低电平,来实现对外部设备的读取或控制。
1. GPIO引脚的模式GPIO引脚有两种基本模式:输入模式和输出模式。
输入模式:当GPIO引脚设置为输入模式时,它可以接收来自外部设备的信号。
在输入模式下,引脚可以通过读取电平(高或低)来获取外部设备的状态信息。
输出模式:当GPIO引脚设置为输出模式时,它可以控制外部设备的状态。
在输出模式下,引脚可以通过写入电平(高或低)来改变外部设备的状态。
2. 设置引脚模式在实际的GPIO操作中,我们需要调用相应的库函数或底层驱动来设置GPIO引脚的模式。
这些库函数或底层驱动会将对应的寄存器进行配置,以确定引脚是输入还是输出,并启用相应的电平逻辑。
3. 设定引脚电平在GPIO操作中,我们可以通过相应的库函数或底层驱动来设定引脚的电平(高或低)。
设定引脚的电平可以通过改变GPIO引脚上的电气信号来控制与其连接的外部设备。
GPIO输入输出各种模式详解

GPIO输入输出各种模式详解GPIO(General Purpose Input/Output)是通用输入输出口,用于连接外部设备和单片机。
在单片机中,GPIO可以配置为输入或输出模式,同时还有三种特殊的模式:推挽模式、开漏模式和准双向端口模式。
下面将从原理、使用场景和配置方法三个方面详细介绍这三种模式。
推挽模式(Push-Pull Mode)是GPIO输出的常见模式,也是默认的输出模式。
当GPIO输出引脚处于高电平状态时,推挽模式会提供高电平输出(通常为Vcc电源电平),而当GPIO输出引脚处于低电平状态时,推挽模式会提供低电平输出(通常接地)。
推挽模式的优势在于输出电流大,能够提供较强的驱动能力,适用于直接驱动大功率负载的场景。
例如,通过GPIO控制LED灯等外设时,推挽模式可以稳定提供给LED所需的驱动电流,保证LED的正常工作。
开漏模式(Open-Drain Mode)是GPIO输出的另一种模式。
当GPIO输出引脚处于高电平状态时,开漏模式会将输出引脚拉到高阻态,而当GPIO输出引脚处于低电平状态时,开漏模式会将输出引脚拉到地。
开漏模式需要通过一个外接上拉电阻将输出引脚连接到Vcc电源电平上。
开漏模式的优势在于输出可以与其他器件共享同一个总线,通过总线上的上拉电阻或其他器件的驱动电源提供高电平。
开漏模式适用于多个GPIO输出的引脚需要共享一个总线的场景,例如,使用I2C总线协议时,多个GPIO引脚可以共享SDA(数据线)和SCL(时钟线)。
准双向端口(Quasi-Bidirectional Port)是GPIO输入输出的特殊模式,常见于外设总线接口中。
准双向端口可以既作为输入又作为输出,且在不同的时间片段进行输入输出操作。
准双向端口的原理是通过一个三态门和一个外接上拉电阻实现的。
当GPIO处于输出模式时,三态门使得GPIO输出到外设;而当GPIO处于输入模式时,三态门处于高阻态,外设可以将信号输入到GPIO中。
CoX介绍
CoX外设接口CoX外设接口是一套功能接口的定义。
它定义了一套操作MCU外设通用功能的接口,例如GIPO,I2C, SPI, UART等外设分别都为其定义了一组通用接口。
同时CoX库提供MCU全面的功能,也提供了MCU的寄存器接口在项目中可以方便的直接操作MCU寄存器。
简单的概括CMSIS接口标准统一了ARM Cortex MCU 内核的接口,使得M0/M0+/M3/M4等内核通用功能API接口一致,而CoX接口标准则是统一了所有ARM Cortex MCU外设的接口。
基于CoX通用强制型接口开发的外围驱动(比如传感器,LCD等)可以再各个厂商MCU 之间无缝一致。
CoX外设库可以划分为四个部分:通用强制型接口。
通用非强制型接口。
MCU特有功能接口。
MCU寄存器接口。
特性:免费开源,基于BSD license统一的外设接口,可以轻松的移植到其他系列MCU上提供外设全面的功能,CoX也提供MCU特性的APIs支持中断,CoX提取了一套中断事件大量的可复用驱动大量的基于doxygen生成的文档增加创新性的元素,例如在GPIO模块里的short pin(PA2)严格的编码标准,不影响生成可执行文件的尺寸和效率,严格的测试和检验可配置提供模板,使得很容易移植到新系列MCU上为什么用CoXCoX外设库不仅仅是一套为外设驱动的通用接口,而是也提供mcu所有功能的库CoX功能接口统一的定义了一套操作mcu的通用接口,这使得代码在不同mcu之间移植起来更容易。
CoX为每个MCU提供一套特定实现,并且它的代码尺寸和效率几乎和厂商提供的库相当。
什么时候应该用CoX如果用户可能更换mcu进行开发,又不想在移植上花太多功夫如果用户想用已经有的基于CoX接口的驱动总之MCU厂家的库有的功能,CoX库都有,CoX能做到的厂家库做不到,因为基于CoX 库的驱动可以具有移植性。
介绍gpio的八种工作模式特点及应用场景
标题:深度探讨GPIO的八种工作模式特点及应用场景在嵌入式系统中,GPIO(General Purpose Input/Output)是非常重要的接口,它可以在数字电路中扮演着非常重要的作用。
GPIO的工作模式多种多样,每种模式都有其特点和应用场景。
在本文中,我将深度探讨GPIO的八种工作模式特点以及在实际应用中的各种场景。
1. 输入模式- 简介:输入模式是最基础的GPIO工作模式,用于将外部信号输入到嵌入式系统中。
- 特点:具有高电平或低电平的状态,并能够接收外部传感器、开关等设备的信号。
- 应用场景:用于接收按钮、传感器等外部设备的输入信号,如温度传感器、光敏电阻等。
2. 输出模式- 简介:输出模式是将嵌入式系统中的数字信号输出到外部设备中。
- 特点:可以输出高电平或低电平的数字信号,控制外部设备的状态。
- 应用场景:用于控制LED灯、蜂鸣器、继电器等外部设备,实现各种实际应用。
3. 推挽输出- 简介:推挽输出是一种特殊的输出模式,可以输出较大的电流。
- 特点:输出信号可以直接驱动负载,不需要外部电路,具有较高的可靠性。
- 应用场景:用于驱动电机、舵机等高电流负载的驱动,如智能小车、机械臂等项目。
4. 开漏输出- 简介:开漏输出是一种适合于多路设备共享总线的输出模式。
- 特点:可用于实现多设备共享总线,并且可以实现硬件控制的通信协议。
- 应用场景:用于I2C、SPI等多设备共享总线的通信协议,以及控制LED显示器、LCD屏幕等设备。
5. 三态输出- 简介:三态输出是一种可以对外输出、内部拉高或拉低的输出模式。
- 特点:可以使输出引脚处于高阻态,避免对总线的冲突。
- 应用场景:多设备共享总线的通信协议中,避免总线冲突,保证通信的准确性。
6. 模拟输入- 简介:模拟输入模式是用于接收模拟信号的输入模式。
- 特点:可以接收模拟信号,并将其转换成数字信号,进行后续的处理。
- 应用场景:用于接收模拟传感器信号,如声音传感器、光线传感器等,进行模拟信号处理。
介绍gpio的八种工作模式,特点及应用场景
介绍gpio的八种工作模式,特点及应用场景【标题】深入介绍GPIO的八种工作模式,揭秘特点及广泛应用场景【导言】GPIO(General Purpose Input/Output)是通用输入输出引脚的简称,它是现代电子设备中非常重要的一个接口,广泛应用于各个领域,如嵌入式系统、电子工程、物联网等。
GPIO的工作模式决定了其功能特性和应用场景的选择。
本文将全面深入地介绍GPIO的八种工作模式,探讨其特点并揭示其广泛应用场景,以帮助读者更好地理解和应用GPIO接口。
【正文】1. 输入模式输入模式是GPIO最基本的工作模式之一,用于读取外部信号的逻辑电平状态。
在输入模式下,GPIO引脚接收外界电平变化,并将其转换成对应的逻辑值,供处理器或者其他IC进行处理。
常见的应用场景包括按键输入、传感器数据采集等。
2. 输出模式输出模式是GPIO的另一个基础工作模式,用于控制外部设备的电平状态。
在输出模式下,GPIO引脚会根据处理器的指令输出相应的电平信号,驱动外部设备进行工作。
控制LED灯、驱动电机等。
3. 开漏输出模式开漏输出模式是GPIO的一种特殊输出模式,它允许多个输出引脚连接到一个电平上拉电阻上,实现共享一个信号线的目的。
开漏输出模式常用于总线通信(I2C、SPI)等场景,同时也可以用于实现外部电平转换。
4. 串行模式(UART)串行模式是GPIO的一种高级工作模式,常用于数据通信。
UART (Universal Asynchronous Receiver/Transmitter)是一种常见的串行通信协议,它通过GPIO的输入和输出引脚实现数据的发送和接收。
串行模式在无线通信、蓝牙、WiFi模块等场景中得到了广泛应用。
5. PWM模式PWM(Pulse Width Modulation)模式是GPIO的一种特殊输出模式,用于控制脉冲宽度的调节。
通过在不同时间段内改变高电平和低电平的占空比,可以控制输出引脚产生不同的平均电压或者电流,从而实现对电机速度、LED亮度等的精确控制。
GPIO结构简介
GPIO内部结构及使用介绍关键词:GPIO 推挽 OC摘要:分类:□机械□软件□控制□其他作者:高峰日期:xxxx-xx-xx如何在嵌入式设计中高效正确的选用GPIO是硬件工程师基本能力之一。
首先我们要了解GPIO的内部结构,然后熟知其重要的内部参数。
GPIO的英文全称是General Purpose Input Output (通用输入/输出),具体一定的拉电流和灌电流能力。
图1:GPIO内部结构图通常一个GPIO PIN脚对应两个寄存器,输入寄存器和输出寄存器。
其 PIN脚的输入、输出模式需要在对应的寄存器进行配置。
同时GPIO PIN脚处有内部钳位保护二极管,其作用是防止从外部管脚Pin输入的电压过高或者过低。
GPIO的几种模式:输入模式(1)GPIO_Mode_AIN 模拟输入(2)GPIO_Mode_IN_FLOATING 浮空输入(3)GPIO_Mode_IPD 下拉输入(4)GPIO_Mode_IPU 上拉输入输出模式(5)GPIO_Mode_Out_OD 开漏输出(6)GPIO_Mode_Out_PP 推挽输出推挽输出与开漏输出的区别:推挽输出:可以输出高、低电平; 推挽结构一般由两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止.图2:GPIO推挽输出模式结构示意图开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).图3:开漏输出结构示意图开漏输出模式类似我们常说的OC、OD门,其在使用时必须外接上拉电阻,同时开漏输出模式下可以实现多PIN脚“线与”功能在选用GPIO时我们需要注意哪些参数和性能?在集成IC设计中,GPIO多分于几组不同的电源域进行驱动,而不同的电源域的驱动能力、管理方式、默认状态、电压匹配等等均会有所差异,在选用时需要全面考虑。
例如:设计选用GPIO来控制某模组,要求基带IC无论处于唤醒模式还是休眠模式下,该GPIO均处于默认输出高电平。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CoX.GPIO1.GPIO接口设计思想1.1CoX.GPIO发展过程,历史版本CoX第一版从2009年开始,从CoX诞生开始,CoX的目标就是要做到在M系列的CPU上实现平滑移植。
所以,GPIO的实现,第一版首先实现了,IO的模式配置(输入、输出)和管脚的上拉、下拉配置;然后,实现了IO管脚的状态读写。
具体可以从接口定义清晰的看出来:typedef struct {COX_Status (*Init) (COX_PIO_Dev pio);COX_Status (*Dir) (COX_PIO_Dev pio, uint8_t dir);uint8_t (*Out) (COX_PIO_Dev pio, uint8_t level);uint8_t (*Read) (COX_PIO_Dev pio);COX_Status (*Cfg) (COX_PIO_Dev pio, uint8_t index, uint32_t arg, uint32_t *pre_arg);} COX_PIO_PI_Def;typedef const COX_PIO_PI_Def COX_PIO_PI;这样的实现,确实可以大大减小IO操作的移植,因为我们在每个厂商实现一套API,以新唐为例:COX_PIO_PI pi_pio ={NUC_GPIO_Init,NUC_GPIO_SetDir,NUC_GPIO_Out,NUC_GPIO_Read,NUC_GPIO_Cfg};在使用的时候,我们仅仅需要使用pi_pio的指针就可以调用GPIO的API操作了,而且这个指针还可以被驱动嵌套使用。
有兴趣的可以参考NUC140-LB Board的CoOS例程,这个在官网可以下载到。
然而,第一版有几个明显的不足:1.实现的功能很少,只有IO的基本配置和读写操作,没有外部中断实现,没有多功能配置实现,以及一些其他特殊的功能。
2.采用了结构体的形式,代码的可读性大大降低,效率也不高。
3.CoX代码不能搞定所有基本的事情,在使用CoX库的使用还必须和厂商库配套使用。
4.CoX在第一版更多的注重外设模块的移植,而忽略了系统。
所以,CoX需要改进、升级。
经常一年多时间的积累,在2011年开始推出CoX 2.0版本,这个版本解决了上述所有的缺点的同时,保留了CoX设计的初衷——那就是在M 系类CPU上面的通用性。
下面,详细介绍2.0版的CoX.GPIO接口。
1.2通用强制接口通用强制接口是提取的一套ARM Cortex M0/M3所有厂商系列MCU都具有的功能接口。
本篇以新唐M051为例讲解CoX.GPIO,其他系列大同小异, 提取GPIO通用接口的时候,是从以下角度出发考虑的:◆配置一个GPIO管脚线●方向配置:⏹输入⏹输出⏹硬件功能●外围功能配置:●Pad配置:⏹驱动能力大小(电流)⏹开源/推挽⏹弱上拉/下拉电阻◆GPIO管脚数据控制●输出高/低电平●获取管脚输入值◆输入中断(EXTI)●上升沿检测●下降沿检测●上/下沿检测●低电平检测●高电平检测APIs分组完成以下几大功能:◆配置GPIO管脚线的函数:●xGPIODirModeSet●xGPIOSPinDirModeSet●xGPIOPinConfigure◆读回GPIO管脚线模式配置的函数:●xGPIODirModeGet◆还有很方便的函数,可以将GPIO配置成想要的功能:●xGPIOSPinTypeGPIOInput●xGPIOSPinTypeGPIOOutput●xSPinTypeADC●xSPinTypeI2C●xSPinTypeSPI●xSPinTypeTimer●xSPinTypeUART●xSPinTypeACMP◆处理GPIO中断的APIs●xGPIOPinIntCallbackInit●xGPIOPinIntEnable●xGPIOSPinIntEnable●xGPIOPinIntDisable●xGPIOSPinIntDisable●xGPIOPinIntStatus●xGPIOPinIntClear●xGPIOSPinIntClear◆处理GPIO Pin状态的APIs●xGPIOPinRead●xGPIOSPinRead●xGPIOPinWrite●xGPIOSPinWrite1.3通用非强制接口通用非强制接口是一部MCU通有的功能,而不是所有MCU都具有的功能接口:●xGPIOSPinTypeGPIOOutputOD●xGPIOSPinTypeGPIOOutputQB●xSPinTypePWM●xSPinTypeEXTINT●xSPinTypeEBICoX的宏定义的参数和APIs都是以' x '开头的, 体现出CoX接口的特征。
比如将GPIOA Pin0配置成输出模式, 代码如下:xGPIODirModeSet(xGPIO_PORTA_BASE, xGPIO_PIN_0, xGPIO_DIR_MODE_OUT);函数和形式参数都是x开头。
1.4厂商库特色接口特色接口是包括了通用性接口,和MCU特有功能的接口。
比如:void GPIOPinDebounceEnable(unsigned long ulPort, unsigned long ulPins);并不是通用强制型或者通用非强制型,而是MCU特有的功能,就是在厂商库特色接口这一组。
另外厂商库接口也实现了MCU其他所有的功能,比如:void GPIOPinWrite(unsigned long ulPort, unsigned long ulPins,unsigned char ucVal);也实现了GPIO管脚线模式的配置,这个在CoX接口的xGPIOPinWrite也是这个功能。
其实这个时候xGPIOPinWrite的实现方式如下:#definex GPIOPinWrite(ulPort,ulPins,ucVal) \ GPIOPinWrite(ulPort, ulPins, ucVal)进行了一次宏定义包装罢了,对应的参数也是进行的一次宏定义比如:#define xGPIO_PIN_0 GPIO_PIN_02.设计技巧简介GPIO的CoX接口创新性的提出了Short Pin,比如PA0 是GPIOA的Pin0脚,它的定义如下:#define PA0 PA0自从有了Short Pin之后,对GPIO的操作简单多了,例如比如将GPIOA Pin0配置成输出模式,并输出高电平, 代码如下:xGPIODirModeSet(xGPIO_PORTA_BASE, xGPIO_PIN_0, xGPIO_DIR_MODE_OUT);xGPIOPinWrite(xGPIO_PORTA_BASE, xGPIO_PIN_0, 1);现在用Short Pin作为参数,上面的功能可以这样实现:xGPIOSPinTypeGPIOOutput(PA0);xGPIOSPinWrite(PA0, 1);上面的Short Pin到底是如何实现的呢?看起来很神奇,以xGPIOSPinWrite为例说明它的实现过程:#define xGPIOSPinWrite(eShortPin, ucVal) \ GPIOSPinWrite(eShortPin, ucVal)#define GPIOSPinWrite(eShortPin, ucVal) \ GPIOPinWrite(G##eShortPin, ucVal)关于##, 其实是宏定义里面的高级用法,它是一个连接符,遇到此连接符,宏会一直展开下去,直到不能展开为止。
G##eShortPin其实会连接为GPA0,而GPA0同样是个宏定义,如下:#define GPA0 GPIO_PORTA_BASE, GPIO_PIN_0 GPIOPinWrite(GPA0, ucVal)会进一步展开为GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_0, ucVal),这个函数在厂商库里面定义了的,所以实现了Pin写的功能。
另外Short Pin对GPIO管脚的外设多功能复用操作也带来了极大的方便,比如配置PD5为I2C的clock脚功能,如下:xSPinTypeI2C(I2C0SCK, PD5);是不是很简单!!!上面的实现如下:#define xSPinTypeI2C(ePeripheralPin, eShortPin) \ do \ { \ GPIOSPinConfigure(ePeripheralPin, eShortPin); \ GPIOSPinFunctionSet(GPIO_FUNCTION_I2C,eShortPin); \ } \ while(0)#define GPIOSPinConfigure(ePeripheralPin, eShortPin) \ GPIOPinConfigure(GPIO_##eShortPin##_##ePeripheralPin)上面的会连接成这样GPIOPinConfigure(GPIO_PD5_I2C0SCK), GPIO_PD5_I2C0SCK 宏定义如下:#define GPIO_PD5_I2C0SCK 0x00003510这个是根据多功能复用进行的编码,视不同的芯片,这个编码方式灵活多变。
还有一些接口完全是为了移植方便性而产生的,比如xGPIOSPinToPort, 这个接口是由Short Pin就可以得到这个Pin所对应的PORT Base,而在CoX.SYSCTL中有一个接口xSysCtlPeripheralEnable2是使用外设地址Base为参数使能这个外设(在SYSCTL 中维护了一个外设BASE-ID-INT的表),它实现的时候,是进行了一个Base到外设ID的一个转换,最终还是调用xSysCtlPeripheralEnable使能外设的。
但是有了这个功能,也很利于基于CoX驱动组件的移植性,例如在AD7415温度传感器是通过I2C接口进行数据通信的,在这个驱动组件头文件中,只需要考虑一下四个元素就可以平滑的使得这个驱动组件移植到其他的MCU上(比如NUC1xx,或者STM32F1xx):////! Config the device i2c Address//#define AD7415_I2C_ADDRESS 0x48////! Config the devide i2c bus master//#define AD7415_MASTER_BASE xI2C0_BASE////! Config the i2c SDA pin//#define AD7415_PIN_I2CSDA PA8////! Config the i2c SCL pin//#define AD7415_PIN_I2CSCK PA9因为有了xI2C0_BASE在驱动中就可以使能这个I2C外设,有了连接的管脚也就可以使能对应的GPIO PORT, 如xSysCtlPeripheralEnable2(AD7415_MASTER_BASE); 这里不在需要给出I2C0的外设使能ID,或者GPIOA的外设使能ID,用户移植的时候只需要从硬件连接角度出发,用了那个I2C, 管脚是怎么连接的,而不需要考虑其他的元素。