cy_jj
驱动牛犊
驱动牛犊
  • 注册日期2002-02-13
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2754回复:7

请帮助分析一下InterruptInitialize调用失败的原因!

楼主#
更多 发布于:2005-06-09 16:25
使用研华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]
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-06-10 13:47
#define SYSINTR_NAME 0x48

To cy_jj:
你的SYSINTR_NAME的定义好像有问题,如果我没有记错的话,0x48这个值已经超过允许的最大值了,你换一个小点的值试试。


好久没来论坛了,感觉真是亲切啊:)

[编辑 -  6/10/05 by  wwei_wang]
Come on, let us drive the world.
cy_jj
驱动牛犊
驱动牛犊
  • 注册日期2002-02-13
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-06-10 14:58
wwei_wang兄,终于等到你出现!
  根据PB我应该超不出40才对,我现在是根据研华 提供的开发板光盘上给的参数定义的,而且其文档还指出必须在0x48~0x4f之间,这也是我想不明白的地方,现在我已将程序发给研华的技术支持,希望他们能够给出答复!

wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-06-10 15:52
谢谢cy_jj兄弟还记得我,前段时间一直忙别的来着:))

(1)你的bsp是研华提供的吧?
(2)另外,你也可以用其他的SYSINTR_NAME值试试。祝你好运!
(3)如果问题解决了,通知一声:)
Come on, let us drive the world.
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-06-13 15:48
#define SYSINTR_NAME 0x48

To cy_jj:
你的SYSINTR_NAME的定义好像有问题,如果我没有记错的话,0x48这个值已经超过允许的最大值了,你换一个小点的值试试。


好久没来论坛了,感觉真是亲切啊:)

[编辑 -  6/10/05 by  wwei_wang]


亲切哇,亲切就要经常杀过来三,革命是多么需要兄弟这样的仁人志士啊


cy_jj:
你看看你的bsp中oeminterruptenable的实现,如果使用了sysintr和irq映射表来管理中断映射,那么在oeminit里面需要调用相应(oem实现的)函数来实现一个你的sysintr_name到其对应irq的静态映射,否则oeminterruptenable返回失败会导致InterruptInitialize失败
根据地的兄弟们,团结就是力量
cy_jj
驱动牛犊
驱动牛犊
  • 注册日期2002-02-13
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-06-13 17:48
谢谢两位仁兄的指点!
现在麻烦就在于没有调试手段,否则就可以跟踪代码的运行了,不知是不是只要是PDA上用的CF网卡就能用来进行联机调试呢?
另to wwei_wang兄:BSP的确由研华提供,后来我将GPIO3当作IRQ3,SYS_INTR用0x13,结果InterruptInitialize能返回TRUE,但研华BSP中的oeminterruptXXX部分还在摸索,因为我的IST没能往下运行!如有结果,我会向大家汇报!
  
zzlng_xlb
驱动牛犊
驱动牛犊
  • 注册日期2005-06-20
  • 最后登录2006-09-01
  • 粉丝0
  • 关注0
  • 积分99分
  • 威望18点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-06-20 17:38
你好,我也请问各位,我的中断实现为什么要在InterruptInitialize之前先调用InterruptDisable才能好使,我想用的共享中断模式。
请问怎样实现OEMinterruptXXX部分的开发?谢谢
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-06-21 14:12
下面是引用zzlng_xlb于2005-06-20 17:38发表的:
你好,我也请问各位,我的中断实现为什么要在InterruptInitialize之前先调用InterruptDisable才能好使,我想用的共享中断模式。
请问怎样实现OEMinterruptXXX部分的开发?谢谢



最近二周的帖子里才有这个问题的讨论,兄弟找找
根据地的兄弟们,团结就是力量
游客

返回顶部