开发GPIO驱动的基本套路
最近完成了基于AR9331的GPIO驱动的开发,主要包括:控制一个连接GPIO的灯控;接收一个连接GPIO的按键事件;以及接收一个连接GPIO的脉冲事件。
这里,结合开发实践,总结一下GPIO驱动开发的基本套路
一.准备环节
拿到硬件连接图,找到硬件实体连接中的GPIO是具体哪个,以及高低电平的控制含义
阅读CPU的Datasheet,找到控制GPIO的寄存器地址以及寄存器value的字段含义
二.实现环节
1.注册一个字符设备驱动 --- 一般GPIO驱动都注册为一个字符设备驱动;在字符设备中定义好file_operations结构体以及其中的open,write,read,ioctl等函数实现
2. 针对灯控的GPIO
2.1 设置其工作在输出模式 --- 即此GPIO为对外输出信号;
2.2 设置该GPIO的初始输出信号值:高 or 低;
2.3 创建一个proc目录文件,并提供write和read函数接口;此文件接口可以供上层应用使用,从而可以根据需要控制GPIO输出高or低电平。进而控制灯的亮or灭;
3.针对按键的GPIO,
3.1 设置其工作在输入模式---即此GPIO为从外部获得信号;
3.2 设置其中断触发方式 --- 电平触发或者边沿触发(根据硬件设计而定)
3.3 获得该GPIO对应的IRQ中断号,并定义中断处理函数 --- 当从此GPIO上获得信号后,即触发中断处理函数的执行;
3.4 在中断处理函数中,则可以根据业务需求,实现具体的信号判断和进一步的处理
4.针对脉冲事件的GPIO
基本同3,只是这个中断是周期定时产生的,故具体的内部逻辑处理,须具体情况具体对待
特别提出:
1.针对GPIO的通用设置函数,包括:设置为输入/输出模式;设置中断触发方式;获得IRQ中断号;从GPIO读值;向GPIO写值,等等,都应该是基础SDK封装好的,直接使用就可以了
2.有些GPIO引脚存在复用情况,需要根据硬件要求,显示地将此GPIO引脚的非所需功能给关闭掉;
3.向GPIO引脚对应寄存器写值,到此值在寄存器中生效,是需要一定的时间的,因此可以考虑采用usleep等延时函数,适当得等待一会儿
开发GPIO驱动的基本套路的更多相关文章
- 迅为iTOP-4418/6818开发板-驱动-实现GPIO扩展
实现 GPIO 扩展,先弄清楚“复用”的概念,将调用这些 GPIO 的驱动去掉配置,重新编译,加到自己的驱动中,就可以实现扩展的 GPIO 的输入和输出.另外必须要先看文档“迅为iTOP-4418开发 ...
- 【直播回顾】OpenHarmony知识赋能第四期第二课——GPIO驱动开发
3月17日晚上19点,知识赋能第四期直播的第二节课<OpenHarmony标准系统HDF框架之GPIO驱动开发>,在OpenHarmony开发者成长计划社群内成功举办. 本期课程,由 ...
- STC8H开发(十五): GPIO驱动Ci24R1无线模块
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- STC8H开发(十六): GPIO驱动XL2400无线模块
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之二
/** ****************************************************************************** * @author 暴走的小 ...
- 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之三
/** ****************************************************************************** * @author 暴走的小 ...
- 迅为iTOP-4418/6818开发板-驱动-IO初始化配置介绍和例程
对于所有的处理器,pad 一般可以分为两大类:IO(输入输出).Power(VDD 和GDD).类似摄像头 IO.以太网 IO.PWM 的 IO 等等,都可以统称为 IO.一个 IO,有可能能够被配置 ...
- 《连载 | 物联网框架ServerSuperIO教程》-4.如开发一套设备驱动,同时支持串口和网络通讯。附:将来支持Windows 10 IOT
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- 【工业串口和网络软件通讯平台(SuperIO)教程】七.二次开发服务驱动
SuperIO相关资料下载:http://pan.baidu.com/s/1pJ7lZWf 1.1 服务接口的作用 围绕着设备驱动模块采集的数据,根据需求提供多种应用服务,例如:数据上传服务.数 ...
随机推荐
- 通过映射缓存文件夹加速WPF的响应速度
到了Visual Studio 2012时,WPF的设计器已经非常好用了,大多数的时候基本上可以抛弃Blend了.但是,仍然存在一些不令人满意的问题,那就是当项目非常大的时候,很多时候页面切换变得比较 ...
- JAVA EE 学习笔记
http://www.cnblogs.com/kuangdaoyizhimei/category/701794.html http://www.cnblogs.com/liunanjava/p/445 ...
- Git -- git中本地与远程库的关联与取消
1.在本地目录下关联远程repository : git remote add origin git@github.com:git_username/repository_name.git 2.取消本 ...
- 怎么在VS2010中打开VS2013的项目
其实VS2010与VS2013上的sln文件没有本质的区别.打不开的原因是什么呢?其实原因很简单,两者开头的软件信息不同.因此造成低版本VS的不识别. VS2013版本vs.sln文件开头的软件信息: ...
- JavaScript Array reverse 方法:颠倒数组中元素的顺序
在JavaScript中,Array对象的reverse()方法将颠倒(反转)数组中元素的顺序.arr.reverse()在原数组上实现这一功能,即,reverse()会改变原数组. 例1:将数组元素 ...
- js 上传图片进行回显
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Managed Media Aggregation using Rtsp and Rtp
his article was written almost 2 years ago, it's content may not reflect the latest state of the cod ...
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何配置虚拟轴 TC2
右击NC- Configuration,然后Append Task,然后右击Axis,Append Axis 轴的类型可以分为:Continuous Axis,默认的类型,NC可以连续闭环控制该轴 ...
- Windows如何使用主题包
相信有很多朋友都遇到这样的问题 下载了主题却没有办法安装就是解压到C:\WINDOWS\Resources\Themes也是于事无补 没有任何反应 回到桌面 点击右键还是没有没有任何反应见图一 原因很 ...
- import * as obj from 'xx'
import * as obj from 'xx' 这种写法是把所有的输出包裹到obj对象里 例如: xx里中: export function hello(){ return '我是hello 内 ...