英创信息技术EM9560工控主板GPIO的使用介绍

网友投稿 310 2022-11-03

英创信息技术EM9560工控主板GPIO的使用介绍

EM9560的GPIO数量从原有的16位(即EM9460的GPIO数)增加到46位。为了方便客户应用程序的一致性,EM9560的GPIO驱动支持用户应用程序采用现有API函数就可操作所有的GPIO。本文主要介绍如何利用现有API函数实现EM9560的GPIO操作。

EM9560的46位GPIO分成了2组,第一组为原有的16位GPIO,称为GPIO0–GPIO15,第二组为扩展的新的GPIO,为区别说明,成为GPIOX0–GPIOX29。注意这两组GPIO都没有用到最高bit,即BIT31。新的API函数正是利用BIT31作为输入参数,当BIT31为“0”时,表示操作基本的GPIO0–GPIO15;而BIT31=“1”时,则表示操作扩展的GPIOX0–GPIOX29。举例说明如下:

#define GPIOX_FLAG (1 << 31) // 定义操作标志

以设置GPIO位输出高电平为例,其基本操作函数保持不变:

int GPIO_OutSet(int fd, unsigned int dwSetBits) { int rc; rc = ioctl(fd, EM9X60_GPIO_IOCTL_OUT_SET, &dwSetBits); return rc; }

当操作基本的GPIO0–GPIO15时,调用方式为:

unsigned int uBits = GPIOm | … | GPIOn; // 设置相关GPIO位 rc = GPIO_OutSet(fd, uBits );

而当操作扩展的GPIOX0–GPIOX29时,调用方式为:

unsigned int uBits = GPIOm | … | GPIOn; // 设置相关GPIO位 rc = GPIO_OutSet(fd, uBits |GPIOX_FLAG ); // 设置扩展标志位

由于GPIO的API大多数是输出类型的,对仅操作基本GPIO0 – GPIO15,原有程序可不做修改,就可直接使用。但对读取GPIO状态,则需要特别注意,其输出参数必须事先设置标志位,才能调用状态读取函数,其相关代码如下:

基本的状态读取函数不变:

int GPIO_PinState(int fd, unsigned int* pPinState) { int rc; unsigned int dwCurrPinState; rc = ioctl(fd, EM9X60_GPIO_IOCTL_PIN_STATE, &dwCurrPinState); if(rc == 0) // ioctl successful { *pPinState = dwCurrPinState; } return rc; }

对读取基本GPIO0–GPIO15的状态,需要对输出参数先赋0,再调用:

unsigned int uState = 0; rc = GPIO_PinState(fd, &uState);

对读取扩展GPIOX0 – GPIOX29的状态,需要对输出参数先设置扩展GPIO标志,再调用:

unsigned int uState = GPIOX_FLAG; // 设置扩展标志位 rc = GPIO_PinState(fd, &uState);

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:[云原生专题-40]:K8S - 核心概念 - 网络模型、网络通信、集群内负载均衡机制(重要重要重要)
下一篇:[云原生专题-49]:Kubesphere云治理-操作-分步部署基于微服务的业务应用 - 基本过程与步骤
相关文章

 发表评论

暂时没有评论,来抢沙发吧~