码迷,mamicode.com
首页 > 移动开发 > 详细

安卓驱动开发(七)----LED将为我闪烁:控制发光二极管

时间:2016-06-06 11:56:47      阅读:283      评论:0      收藏:0      [点我收藏+]

标签:

     在本章节中,作者通过对实例控制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将为我闪烁:控制发光二极管

标签:

原文地址:http://www.cnblogs.com/Mr-mwcss/p/5563092.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!