码迷,mamicode.com
首页 > 其他好文 > 详细

控制发光二极管

时间:2016-06-07 12:44:29      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:

驱动控制LED灯步骤:

一.创建led驱动的设备文件:

  1. 使用cdev_init函数初始化cdev;
  2. 指定设备号;
  3. 使用cdev_add函数将字符设备添加到内核中的字符设备数组中;
  4. 使用class_create宏创建struct_class;
  5. 使用device_create函数创建设备文件。

二.卸载LED驱动的设备文件:

需要依次调用device-destory、class-destory、和unregistor-chrder-region(dev__t from,.unsigned count)。

三.设置寄存器与初始化LED驱动:

LED有两个引脚GPB0和GPB1;

控制LED需要通过3个寄存器来完成;

每一个寄存器可以使用4个字节;

使用GPMCON寄存器的低16位将LED的两个端口的属性设为Output;

使用GPMDAT寄存器的低4位控制LED的亮灭;

使用GPMPUD寄存器的低8位分别打开LED灯的上拉电路。

四.控制LED(及所谓的代码编写——linuxC语言):两种方法,1、通过字符串控制LED;

 2、通过I/O命令控制LED。

举例一种实现方法,如下:

混杂设备驱动中需要实现的是填充file_operations结构,然后设置miscdevices的各个字段值,然后注册到内核即可。详细流程如下:

  1. 编写ioctl接口函数
  2. 填充file_operations结构,主要是将ioctl函数注册进去
  3. 填充miscdevice结构,主要是次设备号、fops和设备名称。
  4. 编写要提供给module_init宏使用的初始化代码,设置LED端口为输出,注册到内核
  5. 编写要提供给module_exit宏使用的注销代码,主要是注销掉初始化中注册到内核的miscdevice设备

LED驱动虽然并不复杂,只是控制了4个LED,但LED驱动已经包括了Linux驱动所必要的部分。一个完整的Linux驱动主要是由内部处理和与硬件交互两部分组成。其中内部处理主要是指Linux驱动的装载、卸载、与设备文件相关的动作处理以及业务逻辑等。与硬件交互通过iowrite32、ioread32等函数与硬件中的寄存器进行数据交互。Linux在不同平台的移植也是处理这两部分。

 

http://www.cnblogs.com/lv-peng/

11:00:59 2016-06-06

控制发光二极管

标签:

原文地址:http://www.cnblogs.com/lv-peng/p/5566273.html

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