阅读:2768回复:7
请帮助分析一下InterruptInitialize调用失败的原因!
使用研华PXA255X开发板,利用其AMI-120总线的GPIO3提供输出中断信号,利用其提供的IST例程,无奈总是在执行InterruptInitialize(...)时返回失败。望得到各位指教!
附例程代码如下: #define SYSINTR_NAME 0x48 #define USERGPIONAME 3 DWORD UserIntrThread(DWORD dwParam) { // ... SetThreadPriority(GetCurrentThread),THREAD_PRIORITY_ABOVE_NORMAL); hUserThreadTerminatedEvent=CreateEvent(NULL,FALSE,FALSE,NULL); MessageBox(NULL,_T(\"IST Installed Step 1!\"),_T(\"Title\"),MB_OK); if(hUserThreadTerminatedEvent==NULL) return FALSE; hUserIntrEvent = CreateEvent(NULL,FALSE,FALSE,NULL); MessageBox(NULL,_T(\"IST Installed Step 2!\"),_T(\"Title\"),MB_OK); if(hUserIntrEvent==NULL) return FALSE; else { InterruptDisable(SYSINTR_NAME); MessageBox(NULL,_T(\"IST Installed Step 3!\"),_T(\"Title\"),MB_OK); if(InterruptInitialize(SYSINTR_NAME,hUserIntrEvent,NULL,0)) { MessageBox(NULL,_T(\"IST Installed Step 4!\"),_T(\"Title\"),MB_OK); while(!bStopThread) { MessageBox(NULL,_T(\"IST Installed!\"),_T(\"Title\"),MB_OK); if(WaitForSingleObject(hUserIntrEvent,INFINITE)==WAIT_OBJECT_0) { dwTriggerCount++; RETAILMSG(1, (TEXT(\"dwTriggerCount=0x%x \\r\\n\"), dwTriggerCount)); ReadDataFromPort(); MessageBox(NULL,_T(\"IST OK\"),_T(\"Title\"),MB_OK); InterruptDone(SYSINTR_NAME); } } InterruptDisable(SYSINTR_NAME); SetEvent( hUserThreadTerminatedEvent ); } else { MessageBox(NULL,_T(\"InterruptInitialize Fail!\"),_T(\"Title\"),MB_OK); return FALSE; } } return TRUE; } [编辑 - 6/10/05 by cy_jj] |
|
沙发#
发布于:2005-06-10 13:47
#define SYSINTR_NAME 0x48
To cy_jj: 你的SYSINTR_NAME的定义好像有问题,如果我没有记错的话,0x48这个值已经超过允许的最大值了,你换一个小点的值试试。 好久没来论坛了,感觉真是亲切啊:) [编辑 - 6/10/05 by wwei_wang] |
|
|
板凳#
发布于:2005-06-10 14:58
wwei_wang兄,终于等到你出现!
根据PB我应该超不出40才对,我现在是根据研华 提供的开发板光盘上给的参数定义的,而且其文档还指出必须在0x48~0x4f之间,这也是我想不明白的地方,现在我已将程序发给研华的技术支持,希望他们能够给出答复! |
|
地板#
发布于:2005-06-10 15:52
谢谢cy_jj兄弟还记得我,前段时间一直忙别的来着:))
(1)你的bsp是研华提供的吧? (2)另外,你也可以用其他的SYSINTR_NAME值试试。祝你好运! (3)如果问题解决了,通知一声:) |
|
|
论坛版主
|
地下室#
发布于:2005-06-13 15:48
#define SYSINTR_NAME 0x48 亲切哇,亲切就要经常杀过来三,革命是多么需要兄弟这样的仁人志士啊 cy_jj: 你看看你的bsp中oeminterruptenable的实现,如果使用了sysintr和irq映射表来管理中断映射,那么在oeminit里面需要调用相应(oem实现的)函数来实现一个你的sysintr_name到其对应irq的静态映射,否则oeminterruptenable返回失败会导致InterruptInitialize失败 |
|
5楼#
发布于:2005-06-13 17:48
谢谢两位仁兄的指点!
现在麻烦就在于没有调试手段,否则就可以跟踪代码的运行了,不知是不是只要是PDA上用的CF网卡就能用来进行联机调试呢? 另to wwei_wang兄:BSP的确由研华提供,后来我将GPIO3当作IRQ3,SYS_INTR用0x13,结果InterruptInitialize能返回TRUE,但研华BSP中的oeminterruptXXX部分还在摸索,因为我的IST没能往下运行!如有结果,我会向大家汇报! |
|
6楼#
发布于:2005-06-20 17:38
你好,我也请问各位,我的中断实现为什么要在InterruptInitialize之前先调用InterruptDisable才能好使,我想用的共享中断模式。
请问怎样实现OEMinterruptXXX部分的开发?谢谢 |
|
论坛版主
|
7楼#
发布于:2005-06-21 14:12
下面是引用zzlng_xlb于2005-06-20 17:38发表的: 最近二周的帖子里才有这个问题的讨论,兄弟找找 |
|