zoukankan      html  css  js  c++  java
  • 迅为4412开发板-实验LEDS驱动一

    14.1 本章导读
    本节实验介绍一个完整的 GPIO 驱动,以后在 Linux 中需要处理 GPIO 驱动都可以仿照或
    者移植这个驱动。
    14.1.1 工具
    14.1.1.1 硬件工具
    1)iTOP4412 开发板
    2)U 盘或者 TF 卡
    3)PC 机
    4)串口
    14.1.1.2 软件工具
    1)虚拟机 Vmware
    2)Ubuntu12.04.2
    3)超级终端(串口助手)
    4)源码文件夹“leds”
    14.1.2 预备课程
    实验 12_物理地址虚拟地址
    实验 13_GPIO 初始化
    14.1.3 视频资源
    本节配套视频为“视频 14 LEDS 驱动一”
    14.2 学习目标
    本章需要学习以下内容:
    Led 硬件原理简单介绍
    Led 管脚的调用、赋值以及配置
    编写简单应用调用 LED 管脚,并测试
    14.3 Led 硬件原理简单介绍
    Led 的电路比较简单,一般是使用三极管搭建一个控制电路。
    如下图所示,是原理图中两个 Led 的控制电路。KP_COL0 和 VDD50_EN 网络控制 Led的通断。

    如上图所示。
    当 KP_COL0 和 VDD50_EN 网络时高电平的时候,三极管 L9014 的 BE 导通,CE 导通,相当于 5V 的 VSYS 电压加到 1K 和 Led 小灯上,小灯就会亮。
    当 KP_COL0 和 VDD50_EN 网络时低电平的时候,三极管 L9014 的 BE 会截止,CE 截止,相当于 5V 的 VSYS 电压加到 1K、Led 小灯和一个无限大的电阻上,电流为零,小灯就会灭。
    14.4 Led 管脚的调用、赋值以及配置
    本节给大家介绍一部分涉及 GPIO 调用、赋值以及配置的函数。
    14.4.1 GPIO 申请和释放函数
    想用使用任何一个 GPIO 都必须先申请。
    在头文件“include/linux/gpio.h”中有 Linux 默认的 GPIO 申请函数,这个头文件是属于嵌入式 Linux 平台,任何一个嵌入式 Linux 内核都可以这么使用。
    如下图所示,在源码目录中使用命令“vim include/linux/gpio.h”打开该文件。

    如下图所示,就是本节实验中需要用到的函数 gpio_request。

    如上图所示,简单介绍一下 gpio_request 函数。
    首先这个函数有一个重要的“检测”功能,就是如果其它地方申请了这个 IO,那么这里就会返回错误,提示已经被占用了,这是 Linux 中的一个标准用法。
    gpio_request 函数有两个参数
    unsigned gpio,申请的那个 GPIO,一般是 GPIO 对应的宏定义
    const char *label,为 GPIO 取个名字,便于阅读
    如下图所示,和 gpio_request 函数对应的是 gpio_free 函数。

    在调用 gpio_request 函数之后,向系统表明这个 IO 已经被占用了,在卸载驱动的时候一般需要调用 gpio_free 函数将其释放。
    gpio_free 函数的参数比较简单,只有一个 GPIO 参数,使用 GPIO 对应的宏定义即可。
    如下图所示,还有一个赋值函数 gpio_set_value。

    在将 GPIO 配置为输出模式之后,还需要给 GPIO 赋值,一般就是高电平和低电平两种。
    两个参数分别为
    unsigned gpio,GPIO
    int value,高电平 1 和低电平 0。
    14.4.2 GPIO 配置参数宏定义
    GPIO 在 Linux 初始化,进行映射之后调用 GPIO 操作函数对 GPIO 宏定义进行操作就是对 GPIO 的操作。
    这个 GPIO 宏定义文件都是由原厂提供,肯定是已经做好的,属于 BSP 板级开发包。
    如下图所示,在源码目录中使用命令
    “vim arch/arm/mach-exynos/include/mach/gpio-exynos4.h”打开该文件。

    如下图所示,可以看到所有的 GPIO 都已经定义了。

    在原理图中查找 KP_COL0、VDD50_EN 网络,最终连接到 4412 上的部分如下图所示。

    如上图所示,则两个 Led 的宏定义为 EXYNOS4_GPL2(0),EXYNOS4_GPK1(1)。
    14.4.3 GPIO 配置函数和参数
    在 Linux 中,对 GPIO 的配置函数以及参数都已经集成到三星板级开发包中。
    先来看一下配置函数,如下图所示,在源码目录中使用命令
    “vim arch/arm/plat-samsung/include/plat/gpio-cfg.h”打开该文件。

    如下图所示,s3c_gpio_cfgpin 函数就是本节实验需要的。

    如上图所示,函数 extern int s3c_gpio_cfgpin(unsigned int pin, unsigned int to);
    一般来说带有 s3cxxx 的函数就是三星平台能够通用的函数。
    s3c_gpio_cfgpin 管脚配置函数有两个参数
    参数 unsigned int pin,管脚
    参数 unsigned int to,配置参数。
    再来看一下配置参数,如下图所示,在源码目录中使用命令
    “vim arch/arm/plat-samsung/include/plat/gpio-cfg.h”打开该文件,配置参数和函数是在同一个函数中。

    如下图所示,对于 GPIO 需要将其配置为输出模式,对应 S3C_GPIO_OUTPUT 宏定义。

    14.5 编写简单应用调用 LED 管脚,并测试
    在前面的 devicenode_linux_module.c 文件上添加代码,首先将文件名devicenode_linux_module.c 改为 leds.c。
    先处理一下编译文件 Makefile,如下图所示,将 devicenode_linux_module 改为leds。

    接着修改 leds.c 文件。
    首先添加需要的头文件,如下图所示,分别是申请 GPIO、配置函数、配置参数、GPIO宏定义等的头文件。然后将设备节点名称由 hello_ctl123 修改为 hello_ctl

    然后需要修改的就是 probe 函数,一般说来 GPIO 的初始化都是在 probe 中。如下图所示,调用配置函数以及配置函数。

    然后就是修改一下 ioctl 函数,在 Linux 中对 GPIO 的控制一般是使用 ioctl,虽然 write函数也可以实现类似的功能,但是 ioctl 函数的效率高一些。如下图所示,根据应用传入的参数给 GPIO 赋值。

    如上图所示,先对于参数做一个简单的判断,然后给 led 赋值。
    接着再来看一下应用,如下图所示,应用比较简单,调用延时函数,首先将 Led 点亮三秒,然后再灭掉三秒,再点亮。

    在 Ubuntu 系统下新建 leds 文件夹,将写好的 leds 和编译脚本拷贝到 leds 文件夹下,使用 Makefile 命令编译驱动,使用
    “arm-none-linux-gnueabi-gcc -o invoke_leds invoke_leds.c -static”命令编译应用。如下图所示

    将上图中的文件 invoke_leds 和 leds.ko 拷贝到 U 盘。
    启动开发板,将 U 盘插入开发板,使用命令“ mount /dev/sda1 /mnt/udisk/”加载 U盘符,
    使用命令“ insmod /mnt/udisk/leds.ko ”加载驱动 leds.ko,
    使用命令“./mnt/udisk/invoke_leds”运行小应用 invoke_leds,如下图所示。

    经过上面的操作可观察到 led 小灯会一亮一灭一亮,中间大概间隔三秒钟。

  • 相关阅读:
    Mybatis-Plus02 CRUD
    Idea一直卡在loading archetype list问题解决(或者报Unable to import maven project: See logs for details)
    Mybatis-Plus01 快速开始
    用PS给视频磨皮美颜
    Linux基本内容
    【maven】IDEA工程右边的maven配置中Plugins有重复的命令
    段誉身具凌波微波,动无常则,若危若安,一次能走一级台阶或者两级台阶,他要爬一段30级的山路,问有多少种走法?分析如何计算,然后编程解答。 进阶问题:当他轻功熟练度提升,一次最多可以走三级,那就结果有什么变化?后来走火入魔了,不能走一级,只能走二或三级,又有什么变化?
    小陆每天要写一份工作日报,日报标题含有日期。几年后,他翻开以前的日报,想知道两份日报的日期是否同为星期几,请编程帮助他判断。
    高性能HTML5/JS开发框架DevExtreme 新版——v20.2.7发布
    跨平台UI开发框架DevExpress XAF 拥有超强性能,你Get了吗?
  • 原文地址:https://www.cnblogs.com/liyue3/p/14234717.html
Copyright © 2011-2022 走看看