Android深度探索(卷1)HAL与驱动开发学习笔记(7)

Android深度探索(1)HAL与驱动开发学习笔记(7

第七章 控制发光二极管

 

  1. LED驱动实现原理

 
   

2. 编写LED驱动

* 创建LED驱动的设备文件

·使用cdev_init 函数初始化cdev

·指定设备号

·使用cdev_add函数将字符设备添加到内核中字符设备组中

·使用class_creat宏创建stuct class

·使用device_creat 创建设备文件

  1. 卸载LED驱动的设备文件

  依次调用device_destoryclass_destoryunregister_chrdev_region 原型如下

  void device_destory(struct  class *class,dev_t devt)

  void class_destroy(struct class *cls)

  Void unregister_chrdev_region(dev_t from,unsigned count)

  1. 设置寄存器与初始化LED驱动

* LED有两个引脚 :GPBOGPBI。其中一个引脚连接到了ARM处理器的G P I O端口,另一个引脚经过一个限流电阻连接到电源:VCC3上。当G P I O端口为低电平时,LED两端产生电压差,这时LED电流通过并发光;反之当GPIO端口为高电平时,LED中没有电流通过,LED将熄灭。由予高低电平之间切换非常快,所以LED亮灭之间要有-定的延迟,否则人眼无法捕捉到LED的变化。

* 控制L E D需要通过3个寄存器来. 完 成这3个寄存器是G P M C O N(端口配置寄存器)GPMDAT(端口数据寄存器)和GPMPUD(端口上拉电路寄存器〉。

* 使用GPMCON寄存器的低1 6位将LED的两个端口(GPBOGPBl)的属性,设为O u t p u t。每4位设置一个LED共4L E D .  O u t p u t的值是0 0 0 1(二进制),如果用十六进制数表示就是GPMCON寄存器的低1 6位的值是0x 1111。

 * 使用GPMDAT寄存器的低4位控制4LED的亮、灭。每一位控制一个LED。最低位控制离电池最近的LED. 0表示亮、l表示灭。

* 使用GPMPUD寄存器的低8位分别打开4个LED的上拉(p u l l - u p)电路。两位控制一个LED的上拉电路。1 0C二进制)为打开上电路.如果用十六位数表示,GPMPUD寄存器的低8位是OxAA,才能同时打开4LED的上拉电路。

  1. 控制LED

* 通过字符串

* 通过I/O命令

 

  1. 测试LED驱动

* 编写测试I/控制命令的通用程序

* 使用NDK测试LED驱动

  1. LED 驱动的移植
原文地址:https://www.cnblogs.com/zhangnene/p/5560653.html