CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
楼主: sunbeyond

驱动中操作GPIO和中断

[复制链接]
发表于 2014-12-1 15:35:47 | 显示全部楼层
测试程序没有报错.
是安卓的.就是下面这个连接下载下来的最新源码
git clone https://bitbucket.org/cubietech/a20-android4.2_lichee.git
git clone https://bitbucket.org/cubietech/a20-android4.2_android.git

led-sunxi驱动会有干扰吗? 我是自己定义的gpio,应该与其他定义的驱动不冲突吧.
回复 支持 反对

使用道具 举报

发表于 2014-12-1 15:56:48 | 显示全部楼层
有个疑问,驱动教程代码中使用gpio_request(num,"gpio")申请gpio,num是sys_config.fex里面的编号.而gpio_sunxi也使用gpio_request函数来申请sys_config.fex中配置的GPIO,但在gpio_sunxi中是使用GPIO的编号的,如我在sys_config.fex里面配置:
gpio_pin_1 = portB02<0><default><default><1>
gpio_pin_2 = portI03<1><default><default><1>
gpio_sunxi中使用gpio_request函数是第一个参数分别是26和204.而教程里面使用的就是1,2.这里面不明白.
驱动教程这样调用确实会和sys_config.fex里面配置是一致的.没有配置的就会请求失败.有配置的能请求成功.但就是无法控制.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-1 22:09:50 | 显示全部楼层
anyuser 发表于 2014-12-1 15:56
有个疑问,驱动教程代码中使用gpio_request(num,"gpio")申请gpio,num是sys_config.fex里面的编号.而gpio_sun ...

首先先声明一点。教程是针对Cubieboard Linux 下。源码例如Cubieez的。根据这里的readme.txt  到http://pan.baidu.com/s/1hquyzB2# ... FSource%252FCubieez   github下载
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-1 22:11:28 | 显示全部楼层
安卓的gpio驱动是原生的。  Linux这边是有经过社区修改的。安卓的我没去看过。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-1 22:23:21 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2014-12-1 22:30:00 | 显示全部楼层
确实,这份教程跟我现在用这份源码不是很兼容.本来内核就有GPIO支持,而又加入了gpio-sunxi驱动,这就导致了冲突.
我rmmod了gpio-sunxi模块,然后按照gpio-sunxi中的调用方法,修改了教程代码代码,现在已经可以正常操作GPIO了.
但在测试中断例程还是有问题.在6.获取中断号中能够 获得60这个irq号,但是在/*7 注册中断*/这一步失败了.错误号是-16.不知道是说明原因. -16错误号应该是-EBUSY,是什么原因导致这个错误呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-2 09:51:04 | 显示全部楼层
anyuser 发表于 2014-12-1 22:30
确实,这份教程跟我现在用这份源码不是很兼容.本来内核就有GPIO支持,而又加入了gpio-sunxi驱动,这就导致了冲 ...

good!可以分享一下吗? 要rmmod gpio-sunxi还是有点不正规。
android其实有一些接口可以操作中断和gpio。
可以参考一下linux-3.4/drivers/input/keyboard/sunxi-keyboard.c还有其他驱动是怎么操作中断的。
你那个报错师中断号已经被占用了。跟前面的gpio有点类似。可以尝试一下request_irq第三个参数设置成共享中断试试看
回复 支持 反对

使用道具 举报

发表于 2014-12-2 10:44:00 | 显示全部楼层
之所以要rmmod gpio_sunxi,是因为gpio_sunxi初始化是会申请sys_config.fex配置的gpio,然后如果驱动中再申请同样的GPIO,就会fail了.而实际上内核已经有gpio的功能了,gpio_sunxi在这里有点多余.
中断还是没有搞定,使用sw_gpio_irq_request可以申请到irq,但是触发的都是别的程序的,dev_id参数不一样,而驱动配置的中断一直没有触发.
而使用代码原来的方式申请中断,即使在request_irq参数中增加IRQF_SHARED,也还是会返回-16.
回复 支持 反对

使用道具 举报

发表于 2014-12-2 14:25:16 | 显示全部楼层
中断终于能触发了,但是我明明配置为边缘触发,IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RISING,但是运行起来却是低电平触发呢?怎么回事.
回复 支持 反对

使用道具 举报

发表于 2014-12-2 14:41:34 | 显示全部楼层
终于搞定了,迟点再把具体的解决方法整理出来.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2024-4-26 07:17 , Processed in 0.027786 second(s), 13 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部