zoukankan      html  css  js  c++  java
  • 开发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等延时函数,适当得等待一会儿 

         

  • 相关阅读:
    数据库操作类
    并查集的使用
    简单的图片识别,源代码
    Sql Server清理缓存代码
    京东商城商品价格获取方法
    【转】 SEO的含义与意义
    隐藏控制台窗口的方法
    MySQL存储过程详解
    常见电商B2C网站购物车的设计
    UML建模之业务处理模型(Business Process Model,BPM)
  • 原文地址:https://www.cnblogs.com/lagujw/p/4118640.html
Copyright © 2011-2022 走看看