/**

******************************************************************************
* @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驱动之二

调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之一的更多相关文章

  1. 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之二

    /** ****************************************************************************** * @author    暴走的小 ...

  2. 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之三

    /** ****************************************************************************** * @author    暴走的小 ...

  3. Holer实现外网访问ARM嵌入式Linux系统

    公网访问ARM嵌入式Linux系统 实验室里的ARM嵌入式Linux系统,只能在局域网内访问,怎样从公网也能访问内网ARM嵌入式Linux系统? 本文将介绍使用holer实现的具体步骤. 1. 准备工 ...

  4. 外网访问ARM嵌入式Linux系统

    外网访问ARM嵌入式Linux系统 实验室里的ARM嵌入式Linux系统,只能在局域网内访问,怎样从外网也能访问ARM嵌入式Linux系统? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并 ...

  5. Linux下GPIO驱动(一) ----一个简单的LED驱动

    /******************************* * *杂项设备驱动:miscdevice *majior=10; * * *****************************/ ...

  6. Linux下GPIO驱动(三) ----gpio_desc()的分析

    上篇最后提出的疑问是结构体gpio_chip中的成员函数set等是怎么实现的,在回答之前先介绍下gpio_desc这个结构体. 如上图所示,右上方部分为GPIO驱动对其它驱动提供的GPIO操作接口,其 ...

  7. 很好的linux下GPIO驱动详解文章

    原文地址  http://blog.csdn.net/llxmedici/article/details/6282372 打算跟着友善之臂的<mini2440 linux移植开发指南>来做 ...

  8. 转: 嵌入式linux下usb驱动开发方法--看完少走弯路【转】

    转自:http://blog.csdn.net/jimmy_1986/article/details/5838297 嵌入式linux下的usb属于所有驱动中相当复杂的一个子系统,要想将她彻底征服,至 ...

  9. Linux下GPIO驱动

    编写驱动程序,首先要了解是什么类型的设备.linux下的设备分为三类,分别为:字符设备,块设备和网络设备.字符设备类型是根据是否以字符流为数据的交换方式,大部分设备都是字符设备,如键盘,串口等,块设备 ...

随机推荐

  1. Web 研发模式演变

    前不久徐飞写了一篇很好的文章:Web 应用的组件化开发.本文尝试从历史发展角度,说说各种研发模式的优劣. 一.简单明快的早期时代 可称之为 Web 1.0 时代,非常适合创业型小项目,不分前后端,经常 ...

  2. ShareSDK(iOS版)开发实践:自定义授权视图和分享视图导航栏

    最近很多人问ShareSDK的授权视图和分享视图的导航栏样式与应用风格不一致,能否修改导航栏的样式?那么这里我就2.6.1版本进行说明(还在使用1.x版本的朋友建议升级到2.x版本,在新版本中可定制的 ...

  3. 浅谈C# .Net技术面试 , 正在找工作的人一定要看看

    1.引子 最近一直在负责.net(B/S方向)技术面试相关的工作,前前后后面试了不少人,但是通过率较低,大概只有20%左右:有颇多感慨. 最近也一直比较困惑,原因究竟是什么? 是我们要求太高,应聘者本 ...

  4. ebook-nodej

    http://www.nodebeginner.org/index-zh-cn.html https://about.pinterest.com/careers/engineering/#oFwkXf ...

  5. 关于Android4.2后WebView的js方法需要加@JavascriptInterface

    解读: targetSdkVersion>=17时,需要加上@JavascriptInterface,否则报错Uncaught TypeError: Object [object Object] ...

  6. 译文: async/await SynchronizationContext 上下文问题

    async / await 使异步代码更容易写,因为它隐藏了很多细节. 许多这些细节都捕获在 SynchronizationContext 中,这些可能会改变异步代码的行为完全由于你执行你的代码的环境 ...

  7. makefile 自动处理头文件的依赖关系 (zz)

    现在我们的Makefile写成这样: all: main main: main.o stack.o maze.ogcc $^ -o $@ main.o: main.h stack.h maze.hst ...

  8. Linux的IP设置参考

    位置:etc/network/interfaces 内容: 第一段是网口1自动从DHCP处获得IP 第二段是网口2静态分配IP 如果是IPv6,请把 iface eth0 inet dhcp(stat ...

  9. cocos2d的ARC开启

    ARC,官方解释是Automatic Reference Counting,是Apple公司从iOS5开始为开发者新添加的一个功能. 相信很多写移动开发,可能不只是移动开发的人都深有体会,创建一个对象 ...

  10. 深入hibernate的三种状态【转载】

    这篇文章写得很好,举了很多例子. http://www.cnblogs.com/xiaoluo501395377/p/3380270.html