rilyyu
驱动小牛
驱动小牛
  • 注册日期2006-11-17
  • 最后登录2010-08-17
  • 粉丝0
  • 关注0
  • 积分512分
  • 威望130点
  • 贡献值0点
  • 好评度127点
  • 原创分0分
  • 专家分0分
阅读:1282回复:1

ce5.0下驱动的中断问题求解

楼主#
更多 发布于:2007-01-31 22:25
  最近在尝试将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不深,除了知道串口打印就不知道有其他的什么调式方法了,经常是在瞎猫碰死耗子,极度郁闷。
rilyyu
驱动小牛
驱动小牛
  • 注册日期2006-11-17
  • 最后登录2010-08-17
  • 粉丝0
  • 关注0
  • 积分512分
  • 威望130点
  • 贡献值0点
  • 好评度127点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-02-02 11:03
顶一下 大家随便发表点意见 不要不理我
游客

返回顶部