因为项目需要,我需要调试和完成WINCE5.0+2443系统和驱动的功能,在调试camera驱动的时候,发现一个很郁闷的问题,就是camera的中断一直进不来,因为我之前在WINCE6.0+2443系统中已实现了camera中断了,而WINCE5.0和WINCE6.0下的camra驱动架构基本一样,可是为什么camera中断一直会进不来呢?分析如下:
1. 中断ISR对camera中断设置不正确。
在OEMInterruptHandler()函数中加入调试信息,只是定时获取到IRQ_TIMER4,说明camera中断真的是没有进来,但为什么呢?我把需要设置camera中断的设置都安装6.0下的一样设置了,可为什么camera中断还是进不来呢?针对这种可能性目前找不到原因,就分析下面的原因吧
2. Camera控制器没有配置好。
可是我基本上是把6.0下的camera驱动全部搬过来的,但是6.0下面的camera驱动是ok了,所以只能接着分析下面的原因了。
3. Camera sensor IC TVP5150没有正常power on
其实刚开始最不怀疑是这个原因引起的,但找不到解决问题的办法,所以就又回来分析这个原因。为什么不相信是供电引起camera中断进不来呢?因为device.exe加载camera驱动的时候,我在camera的初始函数中对TVP5150进行写和读寄存器,写进去和读出来的寄存器的值是完全一样的,说明在初始化的时候对TVP5150进行供电(是通过GPL8对TVP5150供电)的,但后来想想,会不会是其他驱动改变了GPL8的配置和电平的状态呢?因为WINCE5.0+2443的bsp包是从一个开发板拿过来用的,之前驱动的动作和GPIO口的分配和配置我还不是很清楚,所以就在整个BSP包通过source insight软件来查看是不是其他驱动改变了GPL8的配置,真的发现是一个在camera驱动加载之后才加载的驱动把GPL8由输出为高电平改为输入了,所以就把这部分现在这个驱动用不到的这部分代码注释掉,重新update系统,camera中断就进来了。
之所以写下这篇博客,是因为自己以后还会可能遇到类似这样的问题,以此来加深自己的影响,避免犯同样的错误。