驱动开发之LED驱动

最近在学习嵌入式Linux驱动开发,大致了解了驱动的基本开发流程,本文主要针对字符设备驱动开发做一个简要介绍,也当作是对这几天工作的一个小小总结。

计算机系统是由软硬件相互协调共同完成工作的,作为专用计算机系统的嵌入式系统也不例外,既要有CPU、SDRAM、FLASH、IO等硬件,同时也少不了操作系统和应用软件等软件的支持,而作为应用程序与硬件的桥梁——驱动程序,是整个嵌入式系统开发过程中的关键环节。驱动开发涉及底层,而了解底层作用机制对于整个系统的开发意义重大。

Linux内核中有60%以上是驱动程序,它不仅支持驱动以静态形式编译进内核,而且允许驱动以模块的形式动态加载进内核,大大减小了内核的大小,同时便于调试分析。

Linux将所有的设备当作文件进行处理,Linux系统的设备分为三类:字符设备、块设备和网络设备。字符设备的驱动有一个固定的模板,主要编写file_operations结构体中的成员函数,这些函数最终会在应用程序进行Linux的open()、write()、read()、ioctl()、close()等系统调用时被调用。

驱动开发作用在内核空间,应用程序开发作用在用户空间。下面以GPIO端口驱动LED亮灭为例。

1、查看开发板原理图和芯片数据手册;

从上图图中可以看出GPF4~GPF7 分别控制D12~D9,当GPF4~GPF7被配置为输出模式,同时向该引脚输出0时LED亮,输出1时LED灭。

mini2440 LED驱动程序开发

基于Tiny6410的LED驱动程序

Linux设备驱动的Hello World—LED驱动

mini2440 LED驱动程序经典分析

Tiny6410-LED驱动

从下图可以看出GPFCON控制寄存器对应的每个引脚由两位决定,01时表示输出,所以GPF7~GPF4为0101时,四个引脚配置为输出,所以GPFCON=0x55FF。GPFDAT的八位分别对应八个引脚,0表示输出0,1表示输出1,譬如要使D9~D12都亮,则GPFDAT=0x0F。GPFUP对应的八位为1时表示上拉失效,为0时对应位上拉。同时可以看出GPFCON、GPFDAT、GPFUP的物理地址分别是0x56000050、0x56000054、0x56000058。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/7add1726bcbb67f035b28abc591f6d6c.html