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

em9560工控主板是以em9460工控主板为基础,并针对客户应用的需求,增加了更多通用数字io,于2012年初推出的一款低成本嵌入式主板产品。该产品保持了linux操作系统作为客户应用程序的软件平台,其基本接口功能api函数上也与前期产品em9460完全兼容,从而保证了客户的应用程序可不加修改的直接运行于em9560。
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);

科学家研发新型泵帮助软体机器人变得更柔软
华为P40 Pro陶瓷版渲染图曝光相比玻璃材质更具有质感
巴西制定雄心勃勃的物联网战略为了什么
新款奔驰GLE路试谍照曝光 将搭载全新发动机
三个最简单的三极管放大电路
英创信息技术EM9560工控主板GPIO的使用介绍
欧姆龙即将亮相2016慕尼黑上海电子展
深耕洁净领域,抢抓半导体发展机遇
10nm工艺华为麒麟970被曝光!苹果最大的中国元器件供应商被人挖坑损失了300亿!
滤波器设计指南
倍思65W氮化镓充电头与一加8T原装65W充电头测评介绍
宏三角形
eSIM是运营商拓展新业务的重要抓手
怎么延长HDMI传输距离
小米6什么时候上市:小米6维持1999元定价将有助它攫取销量
我们在采用电动执行机构层面时须留意哪些关键点
IIC-China 2010参展商展前专访:凯新达电子
能耗管理系统的详细说明
华为P40 Pro有哪些精彩内容,更多细节和规格浮出水面
Android VS iOS : 安卓系手机将退出高端市场?