zoukankan      html  css  js  c++  java
  • 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之一

     /**

    ******************************************************************************
    * @author    暴走的小哥哥
    * @version   V1.0.0
    * @date       2016-02-19
    ******************************************************************************
    * <  Beijing university of posts and telecommunications >
    *******************************************************************************
    ******************************************************************************
    * platform exynos4412
    *******************************************************************************
    **/

    1Led硬件原理简单介绍

    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小灯和一个无限大的电阻上,电流为零,小灯就会灭。

    2Led管脚的调用、赋值以及配置

    涉及GPIO调用、赋值以及配置的函数

    2.1GPIO申请和释放函数

    想用使用任何一个GPIO都必须先申请。

    在头文件“include/linux/gpio.h”中有Linux默认的GPIO申请函数,这个头文件是属于嵌入式Linux平台,任何一个嵌入式Linux内核都可以这么使用。

    如下图所示,在源码目录中使用命令“vim include/linux/gpio.h”打开该文件。

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

    如上图所示,简单介绍一下gpio_request函数。

    首先这个函数有一个重要的“检测”功能,就是如果其它地方申请了这个IO,那么这里就会返回错误,提示已经被占用了,这是一个标准用法。

    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。

    2.2GPIO配置参数宏定义

    GPIO在Linux初始化,进行映射之后调用GPIO操作函数对GPIO宏定义进行操作就是对GPIO的操作。

    这个GPIO宏定义文件都是由原厂提供,肯定是已经做好的,属于BSP板级开发包。

    如下图所示,在源码目录中使用命令

    “vim arch/arm/mach-exynos/include/mach/gpio-exynos4.h”打开该文件。

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

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

     2.3GPIO配置函数和参数

    在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宏定义。

    本人文字水平有限,所以就一步一步的写和截图,希望这种形式对大家有所帮助!

    本文只对系统函数,基础知识进行分析,如果想要获得led/GPIO操作的驱动、Makefile文件和在无界面最小Linux系统下的应用

    请参考本人另一篇原创博客:调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之二

    当一个人一心前行,整个世界为之让路! 我要从小白,一年时间之内掌握ARM,多核技术,linux应用,驱动,了解linux内核,会写Android代码 每周至少发布一篇博文!
  • 相关阅读:
    hive报错 java.sql.SQLException: No suitable driver found for jdbc:hive://localhost:10000/default
    使用Beeline连接Hive
    hive报错 root is not allowed to impersonate root (state=08S01,code=0)
    hive报错 Could not open client transport with JDBC Uri: jdbc:hive2://node01:10000/default:java.net.ConnectException refused
    excel快速删除空值单元格,数据上移
    FineBI 图表选择
    数据库连接池大小设置?
    工作中有待留❤️积累的一些经验
    内存包括随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE)。RAM最重要
    我自己ood的复习思路:抄
  • 原文地址:https://www.cnblogs.com/-4412/p/5201333.html
Copyright © 2011-2022 走看看