英创信息技术EM9280的GPIO特色及应用简介

描述

EM9280是英创公司即将推出的新型工控主板产品。与英创公司的其他主板产品一样,EM9280带有32位通用数字IO(以下简称GPIO)。EM9280的各位GPIO的接口电平均为3.3V TTL电平,上电后均处于输入状态;各位GPIO的方向均可独立可设置,以方便使用。EM9280提供有标准的设备驱动程序API,应用程序可直接通过这些API函数来操作这些GPIO,EM9280的资料光盘上提供有GPIO操作的C/C++和C#的范例程序。对GPIO的操作的基本方法是打开GPIO的设备驱动文件“PIO1:”,然后通过调用DeviceIoContrtol来对GPIO进行设置或读取GPIO管脚的输入状态。其具体的操作定义在bsp_drivers.h中:

#define GPIO_IOCTL_OUT_ENABLE  // 激活指定GPIO的输出功能 
        #define GPIO_IOCTL_OUT_DISABLE  // 禁止指定GPIO的输出功能
        #define GPIO_IOCTL_OUT_SET  // GPIO输出高电平
        #define GPIO_IOCTL_OUT_CLEAR  // GPIO输出低电平
        #define GPIO_IOCTL_PIN_STATE  // 读取指定GPIO的输入状态

尽管EM9280的GPIO可以按统一的API函数来操作,但由于各位GPIO的实现机制的不同,其相应速度是有所区别的。EM9280的GPIO按相应速度分成低速和高速两类。具体分类如下表所示:

GPIO管脚 类型 简要说明
 GPIO0 - GPIO1  高速GPIO  API函数执行时间大约10us
 GPIO2 - GPIO5  低速GPIO  API函数执行时间大约100us
 GPIO6 - GPIO7  高速GPIO  API函数执行时间大约10us
 GPIO8 - GPIO9  低速GPIO  API函数执行时间大约100us
 GPIO10 - GPIO11  高速GPIO  API函数执行时间大约10us
 GPIO12 - GPIO19  低速GPIO  API函数执行时间大约100us
 GPIO20 - GPIO31  高速GPIO  API函数执行时间大约10us


由于存在比较大的执行时间的差异,因此在执行读取GPIO状态操作时,也要求指定需要具体读取的是哪几位GPIO。指定的方法是把需要读取的GPIO对应位置1,不需要读取的则为0,例如:

UINT32 u32StateBits = GPIO0; // 指定需要读取的GPIO,这里为GPIO0
        UINT32 u32StateRead;
        if (!DeviceIoControl(hGpio, // file handle to the driver
                GPIO_IOCTL_PIN_STATE, // I/O control code
                &u32StateBits, // in buffer
                sizeof(UINT32), // in buffer size
                &u32StateRead, // out buffer
                sizeof(UINT32), // out buffer size 
                NULL, // pointer to number of bytes returned
                NULL)) // ignored (=NULL)
        {
                // 出错处理……
        }
        // u32StateRead包含读取的GPIO状态

在大多数具体应用中,每次往往只需要读取一位GPIO的状态,因此只指定所需的GPIO即可,以保证API函数执行时间最快。对其他的GPIO设置操作,只需要设置需操作的GPIO位信息,没有返回参数。

为了提高管脚的利用率,EM9280的高速GPIO部分还复用了其他的接口功能,具体复用的情况如下表所示:

管脚 复用功能 简要说明
 GPIO0  CTS2#  与COM2口的CTS#复用管脚
 GPIO1  RTS2#  与COM2口的RTS#复用管脚
 GPIO2    低速GPIO
 GPIO3    低速GPIO
 GPIO4    低速GPIO
 GPIO5    低速GPIO
 GPIO6  PWM1  与PWM1复用管脚
 GPIO7  PWM2  与PWM2复用管脚
 GPIO8    低速GPIO
 GPIO9    低速GPIO
 GPIO10  RXD6  与COM6口的RXD复用管脚
 GPIO11  TXD6  与COM6口的TXD复用管脚
 GPIO12    低速GPIO
 GPIO13    低速GPIO
 GPIO14    低速GPIO
 GPIO15    低速GPIO
 GPIO16    低速GPIO
 GPIO17    低速GPIO
 GPIO18    低速GPIO
 GPIO19    低速GPIO
 GPIO20  PWM3  与PWM3复用管脚
 GPIO21  PWM4  与PWM4复用管脚
 GPIO22  I2C_SDA  与I2C总线的SDA复用管脚
 GPIO23  I2C_SCL  与I2C总线的SCL复用管脚
 GPIO24  IRQ1  与IRQ1复用管脚
 GPIO25  IRQ2  与IRQ2复用管脚
 GPIO26  IRQ3  与IRQ3复用管脚
 GPIO27  IRQ4  与IRQ4复用管脚
 GPIO28  SPI_MISO  与SPI接口的数据串入MISO复用管脚
 GPIO29  SPI_MOSI  与SPI接口的数据串出MOSI复用管脚
 GPIO30  SPI_SCLK  与SPI接口的同步时钟SCLK复用管脚
 GPIO31  SPI_CS0N  与SPI接口的片选控制CS0N复用管脚


从上表可见,对最常用的异步串口(UART)的功能,与GPIO复用的不多,这样可最大限度的保证EM9280的串口及GPIO的可用性。对COM2如果不需要硬件流控功能,GPIO0 – GPIO1都仍然可以作为标准GPIO使用,而不会影响COM2的正常使用。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分