阅读:2105回复:4
中断处理困惑和IRQ
我也请问各位,我的中断实现为什么要在InterruptInitialize之前先调用InterruptDisable才能好使,我想用的共享中断模式。请问怎么实现中断共享。怎样设置在注册表中设置IRQ,万分感谢。
|
|
论坛版主
|
沙发#
发布于:2005-06-21 14:30
最近二周有近似问题的帖子
如果你的中断和其他共享irq,看看你的bsp怎么管理sysintr和irq映射的,如果实现不允许二者存在多对多对应(本来理论上这是可以的),你就需要改部分代码,首先允许一个irq对多个sysintr。其次,系统实现不允许sysintr和其触发的事件有一对多关系(可以多对一),也就是你不能把一个sysintr和多个事件关联。如果要必须先disable前一个,再挂现在的。 共享中断使用loadintchainhandler把你的中断挂入中断链即可 |
|
论坛版主
|
板凳#
发布于:2005-06-21 15:56
|
|
地板#
发布于: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,请问可以改吗?在那里改? 谢谢! |
|
论坛版主
|
地下室#
发布于: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后不记得了:)),你可以查查看。 |
|