Android深度探索(卷1)HAL与驱动开发学习笔记(7)
Android深度探索(卷1)HAL与驱动开发学习笔记(7)
第七章 控制发光二极管
- LED驱动实现原理
2. 编写LED驱动
* 创建LED驱动的设备文件
·使用cdev_init 函数初始化cdev
·指定设备号
·使用cdev_add函数将字符设备添加到内核中字符设备组中
·使用class_creat宏创建stuct class
·使用device_creat 创建设备文件
- 卸载LED驱动的设备文件
依次调用device_destory、class_destory、unregister_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)
- 设置寄存器与初始化LED驱动
* LED有两个引脚 :GPBO和GPBI。其中一个引脚连接到了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的两个端口(GPBO和GPBl)的属性,设为O u t p u t。每4位设置一个LED,共4个L E D . O u t p u t的值是0 0 0 1(二进制),如果用十六进制数表示就是GPMCON寄存器的低1 6位的值是0x 1111。
* 使用GPMDAT寄存器的低4位控制4个LED的亮、灭。每一位控制一个LED。最低位控制离电池最近的LED. 0表示亮、l表示灭。
* 使用GPMPUD寄存器的低8位分别打开4个LED的上拉(p u l l - u p)电路。两位控制一个LED的上拉电路。1 0C二进制)为打开上电路.如果用十六位数表示,GPMPUD寄存器的低8位是OxAA,才能同时打开4个LED的上拉电路。
- 控制LED
* 通过字符串
* 通过I/O命令
- 测试LED驱动
* 编写测试I/控制命令的通用程序
* 使用NDK测试LED驱动
- LED 驱动的移植