阅读:1338回复:1
ce5.0下驱动的中断问题求解
最近在尝试将5.0下mainstoneii的驱动移植到现在使用的270开发板上,在sd卡插卡检测时遇到了一些问题。
mainstoneii平台的sd卡插卡检测中断是由板上的FPGA中断产生的,看了一下代码,据我的理解,FPGA中断应该是挂在GPIO0中断下的一个二级中断。可能标准的mainstoneii开发板上有一个中断处理芯片接在GPIO0.而我现在用的开发板sd插卡检测是接在GPIO22. 所以我在BSPIntrInit()里,打开了IRQ_GPIOXX_2,这个是除GPIO0,1外所有GPIO口跳变检测的或中断。添加了一个系统中断号SYSINTR_MMCCD,并且与sd卡驱动注册表中的IRQ值映射。 OALIntrStaticTranslate(SYSINTR_MMCCD, IRQ_GPIO_MMCCD); 然后在BSPIntrEnableIrq,BSPIntrDone里,如果接受到中断号是IRQ_GPIO_MMCCD将GPIO22设置成检测上下沿跳变。在BSPIntrDisableIrq中关闭这个中断 在BSP中断处理函数中,设置如果检测到IRQ_GPIOXX_2就设置irq = IRQ_GPIO_MMCCD 但是现在在驱动中调用 KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &dwSDCDIrq, sizeof(DWORD), &(dwSysintrCD), sizeof(DWORD), NULL)) 的时候,却得不到我想要的系统中断号SYSINTR_MMCCD。而且即使我改动dwSDCDIrq这个参数每次得到的dwSysintrCD都是一样的。 请教一下各位兄弟,这些步骤有没有错误,为什么KernelIoControl返回的值不对呢,还有一个最重要的是mainstoneii下的OALMSG这个函数怎么让他打印出来,编译了debug版本也不行,或者有什么办法来调式以上的那些函数,小弟接触ce不深,除了知道串口打印就不知道有其他的什么调式方法了,经常是在瞎猫碰死耗子,极度郁闷。 |
|
沙发#
发布于:2007-02-02 11:03
顶一下 大家随便发表点意见 不要不理我
|
|