imx6配置GPIO为LED,编写LED应用

(主机端)

基础知识

imx6 3.0.35  kernel中内核驱动核心源码实现位置

参数配置文件

板级目录:arch/arm/mach-mx6/
板级文件:arch/arm/mach-mx6/board-myimx6ek***.c (“***”表示200或314)
管脚功能定义:arch/arm/mach-mx6/board-myimx6ek***-6*.h (“***”表示200或314,“*”表示q或u)
管脚标号定义:arch/arm/plat-mxc/include/mach/iomux-mx6*.h (“*”表示q或dl)

实现目的

查看原理图,将D32灯在LED中添加出文件设备以供操作,

查看硬件对应IO口

由图可得IO引脚为EIM_BCLK,查找数据手册 IMX6DQ参考手册(RM)_201507.pdf 中可得D13的引脚为GPIO6_IO31

在kernel中配置EIM_BCLK引脚为GPIO模式

在arch/arm/mach-mx6/board-myimx6ek200-6q.h中

在kernel中注册EIM_BCLK引脚为LED驱动框架

在kernel中将EIM_BCLK引脚注册到系统LED驱动框架上,修改arch/arm/mach-mx6/board-myimx6ek200.c

//定义需注册的io

 

//注册到系统led框架数组

//修改系统led驱动IO数组

配置Menuconfig支持LED IO框架

生成镜像uImage并烧录

make uImage -j4

(开发板端)

查看LED框架下得自定义led设备

cd /sys/class/leds

操作LED

//echo 1 > /sys/class/leds/user_led/brightness
//echo 0 > /sys/class/leds/user_led/brightness

 

编写LED应用

#include   <stdio.h>  
#include   <stdlib.h>
#include   <string.h>  
#include   <unistd.h>  
#include   <fcntl.h>  
#include   <errno.h>  
#include   <termios.h>  
#include   <sys/time.h>
#include <linux/input.h>

void write_int(char *path, int i)
{
	char buf[1024];
	int fd = open(path, O_RDWR);
	if(fd < 0)
	{
		perror("open");
		exit(1);
	}
	sprintf(buf, "%d", i);
	if(write(fd, buf, strlen(buf)) != strlen(buf)) {
		perror("write");
		exit(1);
	}
	close(fd);
}

void set_led(int on)
{
	write_int("/sys/class/leds/user_led/brightness", on);
//	write_int("/sys/class/leds/led1/brightness", on);
}

int main(int argc,char **argv)
{
	int v=1;
	int i;
	for(i=0; i<100000; i++)
	{
		if(v==0)
			v=1;
		else
			v=0;	
	printf("write=%d\n",v);
	set_led(v);
	usleep(1000000);
	}
}

编译下载LED应用程序

链接:Imx6编译应用APP并烧录

猜你喜欢

转载自blog.csdn.net/qq_14997637/article/details/81630464