最近完成了基于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驱动的基本套路的更多相关文章

  1. 迅为iTOP-4418/6818开发板-驱动-实现GPIO扩展

    实现 GPIO 扩展,先弄清楚“复用”的概念,将调用这些 GPIO 的驱动去掉配置,重新编译,加到自己的驱动中,就可以实现扩展的 GPIO 的输入和输出.另外必须要先看文档“迅为iTOP-4418开发 ...

  2. 【直播回顾】OpenHarmony知识赋能第四期第二课——GPIO驱动开发

    3月17日晚上19点,​知识赋能第四期直播的第二节课<OpenHarmony标准系统HDF框架之GPIO驱动开发>​,在OpenHarmony开发者成长计划社群内成功举办. 本期课程,由​ ...

  3. STC8H开发(十五): GPIO驱动Ci24R1无线模块

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  4. STC8H开发(十六): GPIO驱动XL2400无线模块

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  5. 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之二

    /** ****************************************************************************** * @author    暴走的小 ...

  6. 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之三

    /** ****************************************************************************** * @author    暴走的小 ...

  7. 迅为iTOP-4418/6818开发板-驱动-IO初始化配置介绍和例程

    对于所有的处理器,pad 一般可以分为两大类:IO(输入输出).Power(VDD 和GDD).类似摄像头 IO.以太网 IO.PWM 的 IO 等等,都可以统称为 IO.一个 IO,有可能能够被配置 ...

  8. 《连载 | 物联网框架ServerSuperIO教程》-4.如开发一套设备驱动,同时支持串口和网络通讯。附:将来支持Windows 10 IOT

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  9. 【工业串口和网络软件通讯平台(SuperIO)教程】七.二次开发服务驱动

    SuperIO相关资料下载:http://pan.baidu.com/s/1pJ7lZWf 1.1    服务接口的作用 围绕着设备驱动模块采集的数据,根据需求提供多种应用服务,例如:数据上传服务.数 ...

随机推荐

  1. Mongodb 学习笔记简介

    目录 1       准备工作... 5 1.1        相关网址... 6 1.1        下载安装... 6 1.1.1         下载:... 6 1.1.2         ...

  2. hidefocus小技巧

    hidefocus即隐藏聚焦,具有使对象聚焦失效的功能,其功能相当于: onFocus="this.blur()" 它的值是一个布尔值,如 hidefocus="true ...

  3. 【java】字符串的反转

    @org.junit.Test public void test(){ String a = "I IOVE CHINA"; if(a.indexOf(" ") ...

  4. Shader and Program编程基本概念 - 转

    原地址:http://blog.csdn.net/myarrow/article/details/7737313 一.本文关注的问题: • Shader and program 对象介绍• 创建并编译 ...

  5. github清理,记录一些有趣的项目

    1. rhino 一种java做的开源javascript引擎 https://github.com/mozilla/rhino 2. jeewx 国人写的公众号管理后台,集成度有些高,不好剥离.还是 ...

  6. Java开发中的23种设计模式详解 【转】

    创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问 ...

  7. SSH V2的中间人攻击

    SSH V2的中间人攻击 2012-12-19 10:48:52     我来说两句      作者:Dis9Team 收藏    我要投稿 中间人攻击(Man-in-the-MiddleAttack ...

  8. ColorSchemer Studio 2 破解

    软件介绍: ColorSchemer Studio 2 is a professional color matching application for anyone from hobbyists t ...

  9. Asp.Net北大青鸟总结(五)-数据绑定控件

        在前面的博客我已经介绍了关于一个特殊控件也是我们经经常使用到的控件gridview的使用实现真假分页.这也是属于绑定控件的一种使用.那么我们接下来来介绍一下数据绑定这门技术吧!  一.数据绑定 ...

  10. iOS之基于FreeStreamer的简单音乐播放器(模仿QQ音乐)

    代码地址如下:http://www.demodashi.com/demo/11944.html 天道酬勤 前言 作为一名iOS开发者,每当使用APP的时候,总难免会情不自禁的去想想,这个怎么做的?该怎 ...