zzlng_xlb
驱动牛犊
驱动牛犊
  • 注册日期2005-06-20
  • 最后登录2006-09-01
  • 粉丝0
  • 关注0
  • 积分99分
  • 威望18点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:2089回复:4

中断处理困惑和IRQ

楼主#
更多 发布于:2005-06-20 17:42
  我也请问各位,我的中断实现为什么要在InterruptInitialize之前先调用InterruptDisable才能好使,我想用的共享中断模式。请问怎么实现中断共享。怎样设置在注册表中设置IRQ,万分感谢。
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-06-21 14:30
最近二周有近似问题的帖子

如果你的中断和其他共享irq,看看你的bsp怎么管理sysintr和irq映射的,如果实现不允许二者存在多对多对应(本来理论上这是可以的),你就需要改部分代码,首先允许一个irq对多个sysintr。其次,系统实现不允许sysintr和其触发的事件有一对多关系(可以多对一),也就是你不能把一个sysintr和多个事件关联。如果要必须先disable前一个,再挂现在的。

共享中断使用loadintchainhandler把你的中断挂入中断链即可
根据地的兄弟们,团结就是力量
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-06-21 15:56
根据地的兄弟们,团结就是力量
zzlng_xlb
驱动牛犊
驱动牛犊
  • 注册日期2005-06-20
  • 最后登录2006-09-01
  • 粉丝0
  • 关注0
  • 积分99分
  • 威望18点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-06-21 17:26
谢谢版主指导。
我用的就是loadintchainhandler来连接一个中断链,但是我该怎么修改BSP里面的函数,譬如我直接在F:\WINCE420\PUBLIC\COMMON\OAK\CSP\I486\OAL下修改cfwpc.c文件为什么Build系统的时候出现错误?
我该如何修改允许一个irq对多个sysintr和怎么管理Event事件?
另外我是在PCMCIA上实现PC Card驱动,请问我设置IRQ在那里设置,我看到有些文档说Pc Card IRQ固定设置为0XB,请问可以改吗?在那里改?
谢谢!
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-06-22 15:53
...
对于这部分内容涉及的面有点儿广,我建议你先好好看看帮助。

你修改CFWPC.C的内容后编译生成OAL.LIB有错?应该不会,你看看不动的情况下编译对不对,搞清楚你该得不对还是编译环境没建好。

我看了一下你说的CFWPC.C,里面对IRQ和SYSINTR用了两个数租来映射,你可以看到这种方式irq和sysintr只能是一对一的,本来这也不是很大的问题,因为你完全可以使用共享中断的方式把你的isr挂到这个irq得isr链中,不过问题是你挂接以后在调用interruptinitialize的时候,给出的sysintr值必须先和一个irq对应好,否则这个函数会失败,那么你的sysintr对应的irq又有另一个东西占用了,我没有看x86这里对这个问题怎么处理的,你自己拿主意就行了,方法还是很多的。

x86的pcmcia使用的irq可能是固定的,(8个中断的8259还能记得些,加到16后不记得了:)),你可以查查看。
根据地的兄弟们,团结就是力量
游客

返回顶部