专栏中心

EEPW首页 > 专栏 > 嵌入式Linux下使用GPIO中断功能

嵌入式Linux下使用GPIO中断功能

发布人:toradex 时间:2017-03-03 来源:工程师 发布文章

ByToradex秦海

1). 简介

GPIO应用是嵌入式设备最基本的应用之一, 本文就基于Embedded Linux系统演示开发GPIO中断以及输出相关的基本应用示例.

本文所采用的硬件平台来自与Toradex发布的基于NXP iMX7 SoC的Colibri iMX7 ARM计算机模块配合Colibri Eva Board.

2). 准备

a). ToradexColibri iMX7S (基于NXP iMX7SSoC)计算机模块配合Colibri Eva Board开发载板.

b). Embedded Linux使用Toradex官方发布的Linux release V2.6.1, 更新方法请见这里.

 

3). 软硬件安装

a). 本文所实现的GPIO应用原理为使用两个GPIO接口, 一个作为按键输入使用, 另外一个作为输出驱动载板上面的LED. 每次按键后, 会将LED状态翻转, 也就是点亮和熄灭交替.

b). 硬件连接,将Colibri Eva载板X3连接器C19和X21连接器SW6连接,作为按键输入端; 将X3连接器A19和X21连接器LED1连接, 用于驱动LED1.

c). 在Ubuntu 14.04 开发主机配置开发环境, 这里使用Eclipse作为开发IDE, 具体配置可以参考这里的Linux开发上手指南.

4). GPIO应用示例

a). 运行Eclipse, 创建一个新项目, 命名 ”gpiointtest” , 配置为 ”Empty Project” 和 “Cross GCC”.

b). 在 ”gpiointtest” 项目下首先新建GPIO操作相关的header和source文件

./ Header 文件 ” gpioconfig.h” 代码如下, 主要定义一些全局环境变量和声明GPIO基本的操作函数

https://github.com/simonqin09/gpiointtest/blob/master/gpioconfig.h

./ source文件 “gpioconfig.c” 代码如下,主要是GPIO基本操作函数

https://github.com/simonqin09/gpiointtest/blob/master/gpioconfig.c

c). 主函数文件为 “gpiointtest.c”, 源代码如下, 其主要实现的功能要点下面会逐一列出.

https://github.com/simonqin09/gpiointtest/blob/master/gpiointtest.c

./ 参考Colibri iMX7数据手册以及这里的GPIO号码定义规则, 本文所使用的C19和A19引脚对应的GPIO为GPIO-53和GPIO-52, 因此主程序在最开始就做了定义, 对应变量gpio2和gpio1.

./ 变量定义完成后第二部分就是GPIO的export和配置, 将gpio1配置为输出, gpio2 配置为中断输入, 上升沿触发.

./ 这里我们采用 ”poll” 函数作为中断事件处理函数, 使用的也是其标准用法, 这里就不赘述.

./ 这里详细说明下在触发事件后的处理, 也就是 ” if (fdset[1].revents & POLLPRI)” 里面的内容. 首先通过 “lseek” 函数将文件还原以便处理下一次中断触发; 然后通过 ”cnt” 变量的判定排除程序运行第一次默认触发的中断; 最后在有效中断触发情况下, 再通过 “usleep” 和 gpio2 当前value的读取来排除机械按键抖动, 这样在每次确定按键的前提下, 将gpio1 的输出做反转, 对应也就是LED亮和灭.

d). 编译项目, 然后将可执行文件scp下载到colibri imx7执行, 执行情况如下. 在测试中也可以发现当出现按键抖动的时候, 按键次数统计输出会跳过抖动的那次计数, 同样LED控制也不会被干扰.



e). 当在所需要同时控制的GPIO数量比较多的情况下, 采用 ”epoll” 函数效率会高于 “poll”, 因此这里也将基于 “epoll” 的主程序代码罗列如下, 其思路和上面是一致的, 就不赘述.

https://github.com/simonqin09/gpiointtest/blob/master/gpiointtest_epoll.c

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

最新教育示波分析技术及应用

视频 2012-04-19

AMD发布Instinct MI500,性能比MI300X高出1000倍

智能计算 2026-01-07

NVIDIA、AMD CES主题演讲大战互别苗头 为何热度略嫌不足?

智能计算 2026-01-07

CES 2026 :终于AMD开启了言必称AI的全栈AI时代

智能计算 2026-01-07

CES 2026:Nordic推出集成神经网络处理器的无线MCU nRF54LM20B

CES 2026:MIPS推出基于RISC-V 的人工智能神经处理器IP

CES 2026:AI终于从“功能点”变成“产品架构”

智能计算 2026-01-07

CES 2026:忘掉GPU,英伟达开启AI工程化落地时代

CES 2026:惠普推出配备EliteBoard G1a的AI键盘PC

走近 MIPS

视频 2012-04-19

必看

lo_sky 2005-04-15

大嘴业话:直面国内测试仪器的差距(二)

ARM - The Architecture for The Digital World

视频 2012-04-19

ADIsim RF-快捷 、易用的收发信机信号链路计算工具

视频 2012-04-24

必看

lo_sky 2005-04-15

CES 2026:Micro RGB掀起电视显示技术新热潮

CES 2026:挑战X86,高通骁龙X2 Plus平台单核性能提升35%

更多 培训课堂
更多 焦点
更多 视频

技术专区