Linux驱动,那些调试的日子,终于拨开云雾见青天。实践证明,摄取多少知识并不等于你会了多少,实践才出真知,动手才能够打破疑惑。
上次分享留下了一个问题,自己也正在解决。为了能够解决,为了开会能够汇报进度,不想这个问题一直卡在这里,周末加了个小班,终于把这个问题解决了。
先回顾一下这个问题,就是对IO口的操作,输入检测一直为零。很纳闷,为什么输出可以输入不可以,是否是调用的函数有问题,还是配置的电气属性有问题。刚开始调的时候,设备树引脚重用检查了,内核调用的函数检查了,应用函数检查了,硬是没发现问题,这有点让我怀疑硬件有没有问题。
今天把输入脚配置成输出,控制没有问题,说明引脚被其他占用是不可能的了,因为能够正常访问控制。那问题就出在我的输入配置上了。仔细检查,查看原理图,今天一看,果然还是有点问题,因为在调试的过程换过好多个引脚,所以不确定之前是否真的配对,今天看来是没配对,这是一个点。
其次是设备树其实是有两个地方需要配置的,一个是配置引脚,另一个是配置属性。有点大意的地方是一直以为没有问题,因为刚开始的时候两个一起配了,后面只关注引脚,没关注属性这里,配置高电平也需要写引脚,这里没改,以至于出现一连串的问题。
这里还有一个点就是,引脚配置寄存器的时候,写成10b0和f080都可以检测到高低电平的变化,只要配置成输入就行了,这一点我需要再去看看。这个问题算是解决了。
在下还遇到一个问题,就是这些我在串口挂载,读取,控制都没有问题,但是放到应用程序里面会发现实现不了控制和检测,这里面微妙的变化还在研究,也希望广大朋友提点一下,感谢感谢!