|
控制一个gpio可以通过两个步骤实现,以下通过讲解imx6下控制gpio 1_0开始介绍
步骤一:
修改内核将管脚配置成gpio模式.
linux 3.0.35:
修改arch/arm/mach-mx6/board-mx6q_sabresd.h文件,在结构体iomux_v3_cfg_t mx6q_sabresd_pads[]中添加MX6Q_PAD_GPIO_0__GPIO_1_0,
linux 4.1:
修改arch/arm/boot/dts/imx6qdl-sabresd.dtsi文件,在imx6qdl-sabresd下面的pinctrl_hog: hoggrp 中添加MX6QDL_PAD_GPIO_0__GPIO1_IO00 0x80000000,
ps:关于为什么使用MX6Q_PAD_GPIO_0__GPIO_1_0和MX6QDL_PAD_GPIO_0__GPIO1_IO00会在最后说明.
步骤二:
在用户层控制gpio.
在命令行:
echo 0 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio0/direction //设置为输出
echo 1 > /sys/class/gpio/gpio0/value //输出高电平
echo 0 > /sys/class/gpio/gpio0/value //输出低电平
echo in > /sys/class/gpio/gpio0/direction //设置为输入
cat /sys/class/gpio/gpio0/value //读取电平值
在linux程序中:
int fd = open("/sys/class/gpio/export",O_RDWR);
write(fd,'0',1);
close(fd);
.... //后面的参考在命令行的
在android程序中:
很多人以为在android下控制gpio需要自己写jni(大神除外),其实可以不用,android下也有和linux类似的读写文件的方法,下面的就是android下我使用的读写函数,然后其他的参考linux程序的步骤:
写函数:
File file = new File(name);
FileOutputStream output = new FileOutputStream(file, false);
output.write(content.getBytes());
output.close();
读函数:
File file = new File(filename);
FileInputStream input = null;
input = new FileInputStream(file);
while ((len = input.read(temp)) > 0) {
注:关于为什么使用MX6Q_PAD_GPIO_0__GPIO_1_0和MX6QDL_PAD_GPIO_0__GPIO1_IO00.
在linux 3.0.35中io管脚的配置模式的宏定义可以查看arch/arm/plat-mxc/include/mach/iomux-mx6q.h文件
在linux 4.1中可以查看arch/arm/boot/dts/imx6q-pinfunc.h文件
|
|