第七章 LED将为我闪烁:控制发光二极管

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第七章 LED将为我闪烁:控制发光二极管相关的知识,希望对你有一定的参考价值。

                                                                         第七章 LED将为我闪烁:控制发光二极管


7.1 LED驱动的实现原理

7.2 编写LED驱动

7.2.1 体验LED驱动的奇妙
测试LED驱动之前需要用USB数据连接线S3C开发板,然后打开S3C开发板的电源开关。成功启动后,执行build.sh脚本文件编译和安装LED驱动。如果一切顺利,build.sh脚本文件会自动将s3c6410_leds.ko文件上传到S3C开发板并安装。

7.2.2 创建LED驱动的设备文件
创建一个设备文件的步骤:
第一步:使用cdev_init函数初始化cdev
第二步:指定设备号
第三步:使用cdev_add函数将字符设备添加到内核中的字符设备数组中
第四步:使用class_create宏创建struct class
第五步:使用device_create函数创建设备文件


7.2.3 卸载LED驱动的设备文件
卸载Linux驱动的设备文件需要依次调用device_destroy、class_destroy和unregister_chrdev_region方法。
leds_destroy_device函数用于卸载LED驱动的设备文件,leds_exit函数是LED驱动的卸载函数。leds_exit函数通过调用leds_destroy_device函数来完成卸载LED驱动设备文件的工作。
代码:书P118

7.2.4 设置寄存器与初始化LED驱动
需要知道的:
LED有两个引脚:GPB0和GPB1。
控制LED需要三个寄存器来完成。
每一个寄存器可以使用4个字节,也就是一个int类型数据占用的空间。
使用GPMCON寄存器的低16位将LED的两个端口属性设为Output。
使用GPMDAT寄存器的低四位控制4个LED的亮灭。每一位控制一个LED。最低位控制离电池最近的LED。0,1分别代表亮,灭。
使用GPMPUD寄存器的低8位分别打开4个LED的上拉电路。每两位控制一个LED上拉电路。

7.2.5 控制LED
LED驱动可以使用两种方式控制LED:
1、通过字符串控制LED
2、通过I/O命令控制LED

7.2.6 LED驱动的模块参数
书P123
注意:制定模块参数时参数名、参数值与等号之间不能有空格。

7.2.7 LED驱动的完整代码
LED驱动的完整代码:书P125~P129

7.3测试LED驱动

7.3.1 编写测试I/O控制命令的通用程序
LED驱动有2种与设备文件交互的方式:直接写入字符串设备和I/O控制命令。直接向设备文件写入数据可以使用命令行方式来完成,也可以通过write函数来完成。但I/O控制命令只能通过ioctl函数发出。

7.3.2 使用NDK测试LED驱动
NDK程序的源代码:书P132~P133
调用NDK函数的Java代码:书P133~P135

7.3.3 使用Java测试LED驱动
由于JDK未提供发送I/O命令的API,因此使用Java只能通过发送控制字符串测试LED驱动。
测试LED驱动的Java代码:书P135~P136

7.4 LED驱动的移植
LED驱动最简单的移植就是将其在不同Linux内核版本下载进行编译。
如果恰巧Linux驱动使用的API在移植的目标Linux内核未发生改变,就只需要重新编译Linux驱动的源代码就可以很轻松地将Linux驱动从一个Linux内核移植到另一个Linux内核。但大多数情况下并非如此简单。


 

以上是关于第七章 LED将为我闪烁:控制发光二极管的主要内容,如果未能解决你的问题,请参考以下文章

第七章 LED将为我闪烁:控制发光二极管

LED将为我闪烁:控制发光二极管

第七章LED将为我闪烁:控制发光二极管

第七章 LED将为我闪烁:控制发光二极管

第七章LED将为我闪烁:控制发光二极管

第七章 LED将为我闪烁:控制发光二极管 心得笔记