搜索
bottom↓
回复: 4

【转载】迅为4412开发板实验LEDS驱动一

[复制链接]

出0入0汤圆

发表于 2015-9-18 15:15:18 | 显示全部楼层 |阅读模式
本帖最后由 buguai 于 2015-9-18 15:20 编辑

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

Led管脚的调用、赋值以及配置
本节介绍一部分涉及 GPIO 调用、赋值以及配置的函数。
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。

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)。

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


编写简单应用调用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小灯会一亮一灭一亮,中间大概间隔三秒钟。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2015-9-18 21:59:55 | 显示全部楼层
顶一个,写的非常详细,谢谢!

出0入0汤圆

发表于 2015-9-19 15:27:11 | 显示全部楼层
想问一下,你这个用了设备树吗?

出0入0汤圆

发表于 2015-12-16 20:24:36 | 显示全部楼层
有没有关于RFID的例程呢

出0入0汤圆

 楼主| 发表于 2016-1-8 10:44:24 | 显示全部楼层
huashengdun 发表于 2015-12-16 20:24
有没有关于RFID的例程呢

4412板子支持RFID,应该有相关例程的,还没弄过这方面
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 07:32

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表