安卓驱动开发----LED将为我闪烁:控制发光二极管
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓驱动开发----LED将为我闪烁:控制发光二极管相关的知识,希望对你有一定的参考价值。
在本章节中,作者通过对实例控制LED来讲述了安卓的驱动开发。与上一章节不同的是,上一章在注册和卸载设备文件的时候使用的是函数misc_register,而在LED中使用的是cdev_init等函数。两者的差别是:前者只能建立主设备号为10的设备文件,使用不够灵活,而后者课建立其它设备号的设备文件,而且可以建立多个设备文件(在device_create函数的参数中可以进行相应的设置关联)。
另外,在本章节中,主要是对LED的控制,要对LED进行控制,就要明白应该控制哪些硬件实现最终效果。即三个寄存器,GPMCON ,GPMDAT, GPMPUD三个寄存器。向三个寄存器中写入不同的内容,LED会出现不同的现象。当然,要使用三个寄存器,就要对三个寄存器进行初始化,其初始化应该放在 leds_init_gpm函数中进行初始化,相应代码为:
tmp = ioread32(S3C6402_GPMCON);
tmp &= (~0xFFFF);
tmp |= 0x1111;
iowrite32(tmp, S3C6402_GPMCON);
tmp = ioread32(S3C6402_GPMPUD);
tmp &= (~0xFF);
tmp |= 0xAA;
iowrite32(tmp, S3C6402_GPMPUD);
tmp = ioread32(S3C6402_GPMCON);
tmp &= (~0xF);
tmp |= leds_default;
iowrite32(tmp, S3C6402_GPMCON);
另外,实现控制LED有两种方式,一种是通过字符串控制LED,一种是通过I/O命令控制LED。在上一章节中,使用的是前者,使用到的函数是file_operations.write。而在本章节中使用的是后者,则使用的函数是file_operations.ioctl。这个函数可以接收向字符设备发送的命令和参数。
以上是关于安卓驱动开发----LED将为我闪烁:控制发光二极管的主要内容,如果未能解决你的问题,请参考以下文章