调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之一
/**
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驱动之一的更多相关文章
- 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之二
/** ****************************************************************************** * @author 暴走的小 ...
- 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之三
/** ****************************************************************************** * @author 暴走的小 ...
- Holer实现外网访问ARM嵌入式Linux系统
公网访问ARM嵌入式Linux系统 实验室里的ARM嵌入式Linux系统,只能在局域网内访问,怎样从公网也能访问内网ARM嵌入式Linux系统? 本文将介绍使用holer实现的具体步骤. 1. 准备工 ...
- 外网访问ARM嵌入式Linux系统
外网访问ARM嵌入式Linux系统 实验室里的ARM嵌入式Linux系统,只能在局域网内访问,怎样从外网也能访问ARM嵌入式Linux系统? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并 ...
- Linux下GPIO驱动(一) ----一个简单的LED驱动
/******************************* * *杂项设备驱动:miscdevice *majior=10; * * *****************************/ ...
- Linux下GPIO驱动(三) ----gpio_desc()的分析
上篇最后提出的疑问是结构体gpio_chip中的成员函数set等是怎么实现的,在回答之前先介绍下gpio_desc这个结构体. 如上图所示,右上方部分为GPIO驱动对其它驱动提供的GPIO操作接口,其 ...
- 很好的linux下GPIO驱动详解文章
原文地址 http://blog.csdn.net/llxmedici/article/details/6282372 打算跟着友善之臂的<mini2440 linux移植开发指南>来做 ...
- 转: 嵌入式linux下usb驱动开发方法--看完少走弯路【转】
转自:http://blog.csdn.net/jimmy_1986/article/details/5838297 嵌入式linux下的usb属于所有驱动中相当复杂的一个子系统,要想将她彻底征服,至 ...
- Linux下GPIO驱动
编写驱动程序,首先要了解是什么类型的设备.linux下的设备分为三类,分别为:字符设备,块设备和网络设备.字符设备类型是根据是否以字符流为数据的交换方式,大部分设备都是字符设备,如键盘,串口等,块设备 ...
随机推荐
- iOS:不同属性声明方式的解析
代码: /* 属性声明方式说明: ----------------------- 1 @interface ... { id name } @end 这样声明的属性其实可以认为是private属性,因 ...
- windows相关小知识
获得本机MAC1 快捷键win+R打开运行窗口, 输入cmd回车进入控制台2 输入ipconfig -all 找到本地连接中的物理地址 根据IP获得MAC方法:1 进入cmd控制台,执行:ping ...
- LightOj_1027 A Dangerous Maze
题目链接 题意: 你在一个迷宫里, 开始的时候你面前有n个门, 选择每个门的概率相等, 有两种结果: 1)回到|x|分钟之前(x为负时) 2)x分钟之后出迷宫(x为正时) 每次回到|x|分钟之前, 你 ...
- StartSSL免费SSL证书成功申请-HTTPS让访问网站更安全
StartSSL免费SSL证书成功申请-HTTPS让访问网站更安全 一.StartSSL个人证书登录申请 1.StartSSL官网: 1.官方首页:http://www.startssl.com/ 2 ...
- 【产品体验】echo回声
本人产品新人,学习中,希望大家用过该产品的给点意见,不吝赐教哦~~ 先来两张echo的界面图镇楼—— echo简介: “echo”是一款做声音社交的APP,在这里,你可以感受到声音无限的 ...
- oralce闪回
Oracle闪回操作 1. 记录当前时间或SCN 在数据库变动前记录时间或SCN SQL> select to_char(sysdate,'YYYY-MM-DD HH24:mi:ss') fr ...
- jquery判断邮箱格式问题
方法一: var search_str = /^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/; var email_val = $("#Email").val(); ...
- linux里的php使用phpize拓展各种功能(curl,zip,gd等等)
这里的实验以拓展zip功能为实例,成功使用zip功能需要如下步骤: 1.下载zip拓展包,并解压,并进入zip文件夹 tar -zxvf zip.tar.gz // 解压 cd zip //进入文件夹 ...
- mysql中TimeStamp和Date的转换
mysql 查询时间戳(TIMESTAMP)转成常用可读时间格式 from_unixtime()是MySQL里的时间函数 date为需要处理的参数(该参数是Unix 时间戳),可以是字段名,也可以直接 ...
- WITH AS and materialize hints
WITH AS: 就是将一个子查询部分独立出来,有时候是为了提高SQL语句的可读性,有时候是为了提高SQL语句性能. 如果一个SQL语句中,某个表会被访问多次,而且每次访问的限制条件一样的话,就可以使 ...