完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
采用iomux的方法
在设备树中iomux中添加复用gpio引脚如下,具体设置的上下拉电阻,驱动能力,查找i.MX6UL CPU手册,对应修改。 比如MX6UL_PAD_CSI_DATA00__GPIO4_IO21 0x3008 MX6UL_PAD_CSI_DATA01__GPIO4_IO22 0x1f0b1 MX6UL_PAD_CSI_DATA02__GPIO4_IO23 0x1f0b1 MX6UL_PAD_CSI_DATA03__GPIO4_IO24 0x1f0b1 MX6UL_PAD_SNVS_TAMPER9__GPIO5_IO09 0x1f0b1 MX6UL_PAD_SNVS_TAMPER8__GPIO5_IO08 0x1f0b1 MX6UL_PAD_JTAG_TDO__GPIO1_IO12 0x1f0b1 同时修改设备树文件中(其他地方复用引脚) 编译设备树。替换飞凌iMX6UL开发板中所用设备树。 此时可以使用echo命令进行控制: 命令为: echo $i 》 /sys/class/gpio/export echo “out” 》 /sys/class/gpio/gpio$i/direction 或echo “in” 》 /sys/class/gpio/gpio$i/direction echo “1” 》 /sys/class/gpio/gpio$i/value echo “0” 》 /sys/class/gpio/gpio$i/value echo $i 》 /sys/class/gpio/unexport 以控制GPIO4_IO22为例: 1. 计算对应sys/class/gpio的值GPIOn_IOx = (n-1)*32 + x GPIO4_IO22=(4-1)*32+22=118 2. 将GPIO4_IO22设置为输出。 echo 118 》 /sys/class/gpio/export用于通知系统需要导出控制的GPIO引脚编号 echo “out” 》 /sys/class/gpio/gpio118/direction 控制为输出 echo “1” 》 /sys/class/gpio/gpio118/value 输出为高电平 或者echo “0” 》 /sys/class/gpio/gpio118/value输出为低电平 echo 118 》 /sys/class/gpio/unexport 通知系统取消导出 3. 将GPIO4_IO22设置为输入。 echo 118 》 /sys/class/gpio/export用于通知系统需要导出控制的GPIO引脚编号 echo “in” 》 /sys/class/gpio/gpio118/direction 控制为输入 这时给该引脚接高电平,输入即为高电平,反之为低电平 echo 118 》 /sys/class/gpio/unexport 通知系统取消导出 4. 另外客户可以自己通过shell文件来控制gpio做为输入或者输出。 4.1 GPIO输出测试 编写测试脚本 vi gpiotest_o.sh #!/bin/bash # gpio list gpio (bank-1)*32 + nr for test in 118 119 120 137 136 12 do echo Exporting pin $test. echo $test》 /sys/class/gpio/export echo Setting pin $1. echo out 》 /sys/class/gpio/gpio$test/direction echo $1 》 /sys/class/gpio/gpio$test/value echo $test》 /sys/class/gpio/unexport done echo complete 修改脚本执行权限:chmod u+x gpiotest_o.sh 测试gpio输出为低。进入到脚本所在路径:。/gpiotest_o.sh 0 所有GPIO输出低电平 0V。 测试gpio输出为高电平。进入到脚本所在路径:。/gpiotest_o.sh 1 所有GPIO输出高电平。输出的高电平,根据引脚所在的电源域不同,可能会有区别。 另外有些客户发现 echo 118 》 /sys/class/gpio/export用于通知系统需要导出控制的GPIO引脚编号 echo “out” 》 /sys/class/gpio/gpio118/direction 控制为输出 echo “1” 》 /sys/class/gpio/gpio118/value 输出为高电平 cat /sys/class/gpio/gpio118/value 仍旧为0 原因如下图所示,客户可以从CPU手册中查找到相关内容: 输入模式读取的是psr的值。 读取output的value值是从PSR中读取的。而写入output值是写入到DR中的。可以通过设置SION位回环。 4.2 GPIO输入测试 编写测试脚本 vi gpiotest_i.sh #!/bin/bash # gpio list gpio (bank-1)*32 + nr for test in 118 119 120 137 136 12 do echo Exporting pin $test. echo $test》 /sys/class/gpio/export echo in 》 /sys/class/gpio/gpio$test/direction gpioval=`cat /sys/class/gpio/gpio$test/value` echo GPIO $test = $gpioval echo echo $test》 /sys/class/gpio/unexport done echo complete 修改脚本执行权限:chmod u+x gpiotest_i.sh 测试gpio输入为低。进入到脚本所在路径:。/gpiotest_i.sh 所有GPIO输入为 0。 测试gpio输入为高电平,比如5v。进入到脚本所在路径:。/gpiotest_i.sh 所有GPIO输入为1。(如果为非零值,是因为读取对应的位为1,可以修改内核源码中drivers/gpio/gpio-generic.c文件,将其中中bgpio_get函数中 return bgc-》read_reg(bgc-》reg_dat) & bgc-》pin2mask(bgc, gpio);修改为 return !!(bgc-》read_reg(bgc-》reg_dat) & bgc-》pin2mask(bgc, gpio)); 修改之后,value值为1) iomuxcshelldiin-test.sh,复制到forlinx(比如)目录下。/in-test.sh 118 iomuxcshelldoclose.sh,复制到forlinx(比如)目录下。/close.sh 118 iomuxcshelldoopen.sh,复制到forlinx(比如)目录下。/open.sh 118 或者采用iomuxcwrite-117-out-hightest,复制到forlinx(比如)目录下。/test 将gpio 117输出为高。 |
|
|
|
创建dev/gpio节点。
1、在设备树文件中添加设备节点定义以及其引脚定义: 并将其他复用引脚对应的功能disabed,保证这些引脚没被重复定义使用。引脚的pinmux可以查看imx6ul-pinfunc.h文件。 2、在driver/misc/gpio目录下添加gpio驱动gpio-user.c,名字需要与节点定义里的驱动名字保持相同,客户也可以自己写驱动。同时添加Kconfig和Makefile文件。 修改driver/misc下Kconfig和Makefile文件: 在driver/misc/Makefile 中添加: obj-y += gpio/ 编辑driver/misc/Kconfig, 添加一行: source “drivers/misc/gpio/Kconfig”,如图: 在根目录下修改linux_imx6ul_config文件,添加: CONFIG_GPIO_USER_INTF=y 3、编译。 make zImage make ARCH=arm CROSS_COMPILE=arm-fsl-linux-gnueabi- dtbs 4、拷贝前面生成的zImage, imx6ul-14x14-evk.dtb 到 SD卡system目录中,SD卡方式烧录。 在dev下有gpio节点。 采用gpio-test.c为用户测试程序。编译为gpio-test。 使用gpio-test in 2测试DI。 使用gpio-test out 0 1 测试DO1 输出为高电平。 使用gpio-test out 0 0 测试DO1 输出为低电平。 |
|
|
|
只有小组成员才能发言,加入小组>>
684 浏览 0 评论
1100 浏览 1 评论
2465 浏览 5 评论
2799 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2638 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
648浏览 9评论
642浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
775浏览 6评论
619浏览 5评论
661浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 13:24 , Processed in 1.816047 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号