免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1323 | 回复: 0
打印 上一主题 下一主题

关于linux驱动编写的一些问题(用gpio口来模仿IIC slave驱动) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-08-24 21:17 |只看该作者 |倒序浏览
我最近在学习写一个用gpio口模拟IIC slave的驱动,发现了一些问题,查了好多资料都没有找到明确的答案
我目前的想法是:用两个gpio口来模拟SCL.SDA
然后判断SDA为下降沿的时候触发中断——然后在中断函数中禁用该中断,接着启用线程——线程用while来判断信号(就像下面代码那样),当判断gpio口发来的是结束信号的时候,就使能中断,然后用do_exit来结束线程——接着等待新的SDA下降沿信号

1.我想通过判断一个gpio口的信号为下降沿的时候产生中断,然后在函数中启动一个内核线程,用这个线程来处理接下来gpio口的接收的信号(因为不可能一直在中断函数中处理gpio口的内容信号吧)。这个应该可以吧?
2.因为是模拟IIC slave的驱动,因此我打算在线程中用while里面循环判断SCL的高低(while里面死循环),比如
while(!SCL) ; (这后面跟着一个分号)
SDA=0;
while(SCL) ; (这后面也跟着一个分号)
SDA=1;
可是我觉得这样子很占用cpu,可是如果改成用中断的话又很乱,不知道要怎么写。请问一下又什么好的办法。
3.因为这个是要循环使用的内核线程,为了方便之后接收到新的开始信号的时候在启用中断来启用这个函数。本来我想用do_exit()来退出内核线程的,可是我上网查了一下发现有的说用do_exit也是会产生僵尸线程还是要等待kthread_stop()。请问一下是不是这样?如果是的话,我可不可以直接在线程内调用kthread_stop()来杀死自己?

4.我想问一下,在启动线程这个时间是不是相对于IIC传输可以忽略不记?就是在启动线程的时候不会漏掉gpio口上的信号变化。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP