0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术工控主板快速GPIO操作介绍

英创信息技术 ? 来源:英创信息技术 ? 作者:英创信息技术 ? 2020-01-17 09:56 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

英创公司EM928x系列和EM335x系列的工控主板均有32位GPIO0 – GPIO31并且为可独立方向可设置的通用数字IO,所有GPIO的上电初始状态均为输入状态带上拉电阻。所以在初始化状态下,每位GPIO管脚所呈现的电平均为高电平。面对丰富的GPIO资源,许多客户希望将GPIO利用起来做一下其他的应用,比如模拟SPI接口I2C接口,以及一些总线时序等,下面就来看看GPIO的操作。

常规的GPIO操作在英创公司的主板使用手册中已经有了较为详细的介绍,下面将主要的步骤例举出来:

首先需要打开GPIO的设备文件:
fd = open('/dev/em335x_gpio', O_RDWR);

然后根据英创公司提供的接口即可实现对GPIO的操作:
rc = GPIO_OutEnable(fd, 0xffffffff); //使能GPIO
if(rc < 0)
{
printf('GPIO_OutEnable::failed %d\n', rc);
return rc;
}
rc = GPIO_OutClear(fd, GPIO0); //拉低GPIO
if(rc < 0)
{
printf('GPIO_OutClear::failed %d\n', rc);
return rc;
}

这样通过调用驱动,实现了对GPIO的控制,但是调用驱动就存在用户空间和内核空间的数据传输,还会涉及到系统调度的问题,所以当我们执行一次置低置高的操作,经测试,大概会用掉2.5μs,波形如下图:

通过驱动程序操作GPIO的波形

对于一般的应用来说,通过驱动来操作GPIO已经能够满足需求,直接使用英创公司封装好的接口函数,即可实现对应用程序的开发。但是当需要用GPIO做实时性要求较高的应用时,简单的通过驱动来控制GPIO可能就无法实现,比如需要用GPIO来模拟某种时序,调用驱动来操作可能就会让时序的一个周期过长,无法满足时序的要求。

针对这种情况,英创公司为客户提供了一种更快速的GPIO 操作方法,即通过内存映射的方法来操作GPIO,使用mmap()函数将GPIO的硬件地址映射到进程地址空间,实现对内存物理地址的读写,直接控制GPIO的寄存器,这是一种直接操作硬件的方式,避免了用户进程和内核进程的数据交换,极大地提升了效率。

首先将/dev/mem/设备文件中GPIO的地址映射到用户进程空间的代码:
void *GPIO_MMAP::gpio_em335x_pin_config(unsigned int BASE)
{
int mem_fd;
void *base;
mem_fd = open('/dev/mem', O_RDWR|O_SYNC);
printf('mem_fd is %d\n', mem_fd);
/* mmap GPIO */
base = mmap(
NULL,//起始地址
GPIO_DEV_SIZE, //映射的文件内容的大小
PROT_READ|PROT_WRITE,// 映射区域可读可写
MAP_SHARED,//映射区域的写入数据会写回到原来的文件
mem_fd,
BASE//被映射的硬件地址
);
close(mem_fd);
return base;
}

成功执行时,mmap()函数返回被映射区的指针。普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问,不必再调用read(),write()等操作。只需要使用返回的地址指针在对应的寄存器的偏移地址赋值,就可以完成操作。在例程中已经将函数接口引出(详细的代码请参考例程):
GPIO.GPIO_OutEnable(GPIO0);//输出使能
GPIO.GPIO_OutClear(GPIO0);//置为低电平
GPIO.GPIO_OutSet(GPIO0);//置为高电平

通过这样的方式实现GPIO操作,时序图如下:

用过内存映射操作的GPIO时序

可以看到,置低置高的操作只用了220ns左右,相比调用驱动程序所需要的2.5μs,大大的提升了效率,也已经达到了实时操作的要求。下面来看一个实际的例子,使用GPIO模拟HPI接口的写时序,HPI是一个与主机通信的并行接口,主要用于DSP与其他总线或CPU进行通信,在工业控制中,HPI接口是很常用的,所以我们就用HPI接口的时序作为例子,下面这个HPI时序有16位数据线和12位地址线:

HPI写时序图

时序要求

我们使用30位GPIO来模拟这个时序,将GPIO0~GPIO15作为16为数据线,GPIO16~GPIO28作为12为地址线,而GPIO28作为片选,GPIO29作为读写控制信号。基本的思路流程为:
①将片选,读写信号和地址线置为输出,并且为高电平。数据线置为输入。
②将数据线的寄存器置为需要的值。
③将数据线置为输出。
④拉低读写信号线,再拉低片选。
⑤这里可以根据时序要求做一点延时,拉高片选,拉高读写信号,再将数据线置为输入。

按照这样操作就基本完成了一次要求的写时序,实现的程序代码

int GPIO_Write(unsigned int AddrBits, unsigned int DataBits)
{
unsigned int DSetBits,DClearBits;
unsigned int ASetBits,AClearBits;
ASetBits= (AddrBits << 16) & 0x0fff0000 ;  // 地址位为1的位
AClearBits= ~ASetBits ^ 0xf000ffff ;//地址位为0的位
printf('0x0%x\n',AClearBits);
GPIO.GPIO_OutSet(ASetBits);
GPIO.GPIO_OutClear(AClearBits);
DSetBits= DataBits & 0x0000ffff ;//数据位为1的位
DClearBits= ~DSetBits ^ 0xffff0000 ;//数据位为0的位

GPIO.GPIO_OutSet(DSetBits);
GPIO.GPIO_OutClear(DClearBits);
GPIO.GPIO_OutEnable(0x0000ffff);//设置数据线为输出

GPIO.GPIO_OutClear(GPIO29);//读写信号
GPIO.GPIO_OutClear(GPIO28);//将片选拉低

GPIO.GPIO_OutSet(GPIO28);//将片选拉高
GPIO.GPIO_OutSet(GPIO29);//读写信号

GPIO.GPIO_OutDisable(0x0000ffff);//设置数据线为输入

return 1;
}

执行程序,可以看到片选和读写信号的时序为:

片选和读写信号的时序

可以看到一次写操作的时间大约在1.25μs,如果是调用驱动程序控制GPIO来实现这个时序的模拟,那效率就会变低,详细的代码请参考例程。

注意事项:我们推荐客户直接使用例程中引出的接口进行操作,不推荐客户对硬件访问这一部分代码进行修改,以免在操作的时候出现无法预估的错误。

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

    关注

    7

    文章

    6105

    浏览量

    36480
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    智慧新核心,龙芯主板助力信体系再升级

    信息技术飞速发展的当下,信体系的自主可控与创新升级已成为国家战略层面的关键任务。作为信产业发展的重要基础硬件支撑,国产工控主板正发挥着
    的头像 发表于 08-11 09:14 ?121次阅读

    佛瑞亚如何通过信息技术推动业务增长

    在数字化、信息化的浪潮下,信息技术已经不仅是后台工具,更成为驱动企业发展的关键力量。本期Women Inspiring Mobility,我们采访了佛瑞亚中国区信息技术总监马瑛,了解她和团队如何将
    的头像 发表于 07-29 14:00 ?405次阅读

    飞腾主板为信产业发展提高硬实力

    信息技术飞速发展的当下,信产业已成为我国实现科技自立自强、保障国家信息安全的关键领域。信,即信息技术应用创新,其核心目标是实现
    的头像 发表于 07-22 18:20 ?311次阅读

    科普|信是什么?一文读懂“信息技术应用创新”战略

    什么是信?信,即“信息技术应用创新”,是国家推动IT系统自主可控、安全可控的重要战略工程。它不仅是技术层面的创新,更承载着保障国家网络安全、推动产业升级和实现数字主权的重任。简单来
    的头像 发表于 06-13 10:06 ?3090次阅读
    科普|信<b class='flag-5'>创</b>是什么?一文读懂“<b class='flag-5'>信息技术</b>应用创新”战略

    浪潮下,国产主板有什么新的发展机遇?

    信息技术应用创新浪潮的推动下,国产主板迎来了诸多新的发展机遇。信产业旨在实现信息技术领域的自主可控,这一战略目标为国产主板的发展提供了广
    的头像 发表于 05-09 09:24 ?286次阅读
    信<b class='flag-5'>创</b>浪潮下,国产<b class='flag-5'>主板</b>有什么新的发展机遇?

    工控主板特点与应用场景介绍

    工控主板(IndustrialMotherboard)是专为工业环境设计的计算机主板,用于控制、监测和管理工业设备及自动化系统。与普通消费级主板相比,
    的头像 发表于 03-06 14:39 ?644次阅读
    <b class='flag-5'>工控</b><b class='flag-5'>主板</b>特点与应用场景<b class='flag-5'>介绍</b>

    工控主板在数控机床设备中的应用

    工控主板作为数控机床的核心组件之一,发挥着至关重要的作用。以下是工控主板在数控机床设备中应用的详细介绍
    的头像 发表于 01-09 15:33 ?618次阅读

    工业级主板工控主板的区别?

    在工业领域,主板的重要性是被无限放大的。在大型工厂里日夜不停运转的自动化生产线、精准控制的智能电网系统、以及在极端环境下依然稳定采集数据的石油勘探设备,它们背后都依靠着工业级主板工控主板
    的头像 发表于 01-02 10:01 ?609次阅读

    国产工控主板有什么优势、特点?

    随着国产工控主板的发展,国内企业也在不断开发新的工控主板,为了满足国内企业的发展需求,一些国产工控主板
    的头像 发表于 11-15 10:11 ?620次阅读

    ?什么是国产工控主板,国产工控主板的特点有哪些?

    什么是国产工控主板呢?国产工控主板是工业计算机的主板,是一种计算机系统的硬件设备,是专门为工业控制场景设计和生产的电路板。它在国内的研发和制
    的头像 发表于 11-07 10:29 ?793次阅读

    国产工控主板,信产业发展新引擎

    在当今科技飞速发展的时代,信产业正成为国家战略的重要支撑。而我们的国产工控主板,以其卓越的性能和可靠的品质,为信产业的发展注入强大动力。国产工控
    的头像 发表于 11-06 10:29 ?739次阅读

    中科达荣获2024年软件和信息技术服务优秀企业

    及前百家企业”名单。中科达凭借非凡的技术实力与持续的创新能力,成功入选“2024年度软件和信息技术服务竞争力百强企业”以及“2024年软件和信息技术服务优秀企业”。
    的头像 发表于 10-30 11:44 ?1077次阅读

    工控主板有哪些特点?

    ?工控主板是用于工业控制领域的专用主板,具有以下特点: 稳定性:工控主板通常经过严格的测试和优化,具有较高的稳定性和可靠性,能够在恶劣的工业
    的头像 发表于 10-10 08:55 ?954次阅读

    国产化背景下的工控主板发展现状

    ,是信息技术应用创新产业的简称,于2016年“信工委会”(信息技术应用创新工作委员会)提出,目的就是要推动我们国内软硬件关键技术的研发
    的头像 发表于 09-21 16:15 ?964次阅读