问题是这样的,我用周立功的开发板自带的wince 5.0的I2C驱动(是正常的)移植到我的板子上我的板子硬件接口和周的基本一样,只是BSP不同,我把I2C编译进
内核(用了两种方法,一种是直接把周生成的DLL文件直接编译进去,并增加BIB和REG信息,另一种是把驱动程序放到我的BSP里重新编译)然后下载到板子上时,启动时在串口均输出这样的信息:
IC: DLL_PROCESS_ATTACH
>>> IIC_initalization address..set..
ERROR: I2C Bus: Failed to request sysintr value for I2C Bus interrupt.
IIC: DLL_PROCESS_DETACH
也就是说申请逻辑中断失败,我用同样的方法把周的can驱动也移植进去后也出现
了同样的问题,但pwm,gpio,ADC等驱动移植过后都正常工作,我总结了一下
I2C和CAN的驱动都涉及到中断的申请,而其他的没涉及到。所以现在的问题就是
为什么会中断申请失败。我的BSP是从4.2升级到5.0的,里面带的一些驱动
的中断申请用的都是静态映射。而周那驱动用的都是动态申请,我想问题关键就是出
在这里了,但就是不知道怎么搞定,是不是中断申请和BSP中的某些文件是生死关联的?。我用getlasterror 放到I2C驱动中得到的返回直是:50
查了下错误原因是:the network request is not supported。
问题就这样,如果大虾有什么好的方法或思路的话,望赐教!
如果有需要,我可以把我的BSP和驱动都传上
4.2BSP 不能使用KernelIOControl申请中断的,KernelIOControl是动态申请,你这样直接套上去肯定不行了。
要支持KernelIOControl还要实现一些动态中断相关的函数。
最近也在搞相关驱动问题,说说自己的看法了:
我的是5.0,驱动调用KernelIOControl后,会调用OEMIoControl,这个函数中会首先在IOCTL table中寻找匹配的
IOCTL 控制代码,然后就会执行对应的函数(pfnHandler).我想你使用的控制代码应该是IOCTL_HAL_REQUEST_SYSINTR
,对应的函数是OALIoCtlHalRequestSysIntr,此函数中会调用OALIntrRequestSysIntr,我想你的问题就是在这个函数里产生的了,你可以仔细查看下这个函数的流程应该就能解决!
但是我看了周的I2C的驱动中断那块,几乎调用的都是wince 5.0下的文件,没见有和BSP相关的,比如
OEMInterruptHandler ALIoCtlHalRequestSysIntr
OALIntrRequestSysIntr
等相关的函数都是wince 5.0下的,还有IRQ物理中断号也都定义好了的。我就想不通,我直接把周生成的
DLL编译进内核怎么就不行了,而且我用的也是5.0的
wince系统,只是BSP不一样而已(我的BSP包
厂家声称是升级到5.0了的,不过估计质量很差)
OALIntrRequestSysIntr
还会调用BSP下面的东西的。
他们的所谓升级到5.0了,仅仅是改一些东西而已,中断方法根本没有改动。
我以前就用这样的BSP,开发驱动还要修改OAL的中断部分不合理,不过4.2的中断ISR貌似效率较高。
首先非常感谢 googleman 和kkkcxf1981的热心帮助
我想问一下googleman,象我这种情况,应该怎么做才行,现在都有点蒙了。请你给我点思路。
我也想改成静态中断,但就是不知道wince5.0下具体要改哪些东西,昨天改了一些,然后编译写进内核,启动的时候连LCD都不亮了。。。
关于中断,WINCE 5之前都是静态中断,从CE 5开始中断申请分为动态申请和静态分配2种;楼主用的KernelIoControl+IOCTL_HAL_REQUEST_SYSINTR就是动态申请的方法;静态分配其实很简单,在OEMInterruptHandler里直接switch case即可;具体实现很多,各家BSP不一样,但是道理都是如此;
其实,动态申请就是由系统维护一个table,使得OEM允许其他厂商的驱动以安装的形式动态加到这个table里。作为OEM自己,其实维护一个静态的中断分配就可以了,驱动完全不用动态申请。只不过很多参考BSP用了这个形式,导致大家都在动态申请。
非常感谢nick_TS16949 。
这几天我也在研究中断,感觉你说的很合理,又给我加深了对中断的了解,真的。谢谢了啊。
4.2和5.0的中断是不同的,你把整个代码拿过来用肯定是不行的,你看看里面的实现过程,4.2的静态的,5.0是动态分配的,4.2用InterruptInitialize将中断号和事件绑定,而5.0是用KernelIoControl来申请后再绑定的