zoukankan      html  css  js  c++  java
  • 第七章

     本章学习控制发光二极管,通过直接与硬件交互完成,控制开发板上的四个小灯。

       LED驱动的实现原理是

     

    理解了原理之后,我们便可以开始编写led驱动了,与上一章步骤类似,通过命令和读写文件实现。首先创建led驱动的设备文件,可以使用cdev_init,register_chrdev_region,cdev_add等建立主设备号的设备文件。步骤如下:

    1使用cdev_init初始化cdev

    2指定设备号

    3使用cdev_add函数将字符设备添加到内核中的字符设备组中

    4使用class_creat宏创建struct class

    5使用device_creat函数创建设备文件

    然后卸载led驱动的设备文件

    {Device_destroy(leds_class,dev_number);

    If(leds_class)

    Class_destroy(leds_class);

    Unregister_chrdev_region(dev_number,DEVICE_NUMBER);

    Return;}

    Static void leds_exit(void)

    {

    Leds_destroy_device();

    Printk(DEVICE_NAME” ext! ”);

    }

    Module_exit(leds_exit);

    然后设置寄存器与初始化led驱动,arm处理器有多个寄存器,通过设置不同寄存器的值,设置led引脚状态、打开或禁止上拉电路以及控制led的亮和灭。一下几点需要知道

    Led有两个引脚,GPB0GPB1

    控制led需要通过三个寄存器完成

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

    使用GPMCON寄存器的低16位将led的两个端口属性设为output

    使用GPMDAT寄存器的低4位控制4led的亮灭。

    使用GPMPUD寄存器的低八位分别打开四个led的上拉电路

    然后就是比较重要的控制led,要想完成这一过程,led驱动就必须接受相应的数据。如果通过字符串控制,需要使用file_operations.write。如果通过I/O命令控制led,需要使用file_operations.ioctl函数。编写时需要了解几点:

    4led的状态用一个长度为4char数组存储

    如果写入的字符串长度小于4,直接写入,如果大于4,只写前4

    如果写入的字符串小于4,相当于后面的都是0

    GPNMDAT寄存器写入数据之前最好先读取GPMDAT当前值

    最后进行测试led驱动,方法有一下几种:

    编写控制命令的通用程序:led驱动有两种与设备文件交互的方式:直接写入字符串数据和I/O控制命令。

    使用NDK测试led驱动

    使用java测试led驱动

    Led驱动是第一个真正和硬件打交道的linux驱动,虽然这个驱动并不复杂,只是控制了4led,但是已经包括了linux驱动所有必要的部分。因此很有必要认真学习。

  • 相关阅读:
    Silverligh OOB一直更新
    Silverlight使用通过服务绑定数据的控件
    vue prop不写value的处理逻辑
    .NET Core Http请求(GET、POST、上传文件并携带参数)
    流媒体服务器与web客户端插件的配置与搭建(Darwin Streaming server + Quictime plugin)
    目录
    margin标记可以带一个、二个、三个、四个参数,各有不同的含义。
    Asp.Net中几种相似数据绑定标记符号的解释及用法
    火狐自动换行 有空格
    xml
  • 原文地址:https://www.cnblogs.com/liang0202/p/5555127.html
Copyright © 2011-2022 走看看