阅读:1578回复:9
再问关于中断的问题
各位老大,我的cpu是x86,用 pDevDesc->hIsr = LoadIntChainHandler( pDevDesc->Info.Isr.szIsrDll, pDevDesc->Info.Isr.szIsrHandler, (BYTE)pDevDesc->Info.Isr.dwIrq );函数加载我的isr,现在有一个问题,我的设备产生中断后有时候可以进isr有时候不能进,不能进入isr的时候我用示波器看中断信号还是有的,就是没有进isr不知道为什么
|
|
沙发#
发布于:2005-01-19 16:27
(1)有没有可能你在isr或/和ist中把中断屏蔽掉了?
(2)有没有可能相邻两个中断来得太快了,来不及响应? (3)你能肯定没进入你的isr?还是进去了,但是从你的isr中的其他出口出去了? |
|
|
板凳#
发布于:2005-01-19 16:54
是这样的,我在isr中有一条语句可以让中断信号由低变高,但是有的时候中断的信号就一直是低的,我是电平触发的,所以我认为中断没有进我的isr
|
|
地板#
发布于:2005-01-19 19:11
(1)有没有可能你的isr中那条可以让中断信号由低变高的语句没有执行,而从其他的出口出去了?
(2)你的驱动有没有ist?从ist能否被激活就知道是否进isr了。 (3)方便的话,能否把你的isr贴上来,让大家帮你分析一下。 |
|
|
地下室#
发布于:2005-01-20 13:11
wwei_wang,你说LoadIntChainHandler函数和其他的中断连接方法有什么不同吗
|
|
5楼#
发布于:2005-01-20 15:18
各位老大,我的cpu是x86,用 pDevDesc->hIsr = LoadIntChainHandler( pDevDesc->Info.Isr.szIsrDll, pDevDesc->Info.Isr.szIsrHandler, (BYTE)pDevDesc->Info.Isr.dwIrq );函数加载我的isr,现在有一个问题,我的设备产生中断后有时候可以进isr有时候不能进,不能进入isr的时候我用示波器看中断信号还是有的,就是没有进isr不知道为什么 既然能进入到isr里面,说明你调用LoadIntChainHandler函数肯定成功了,我觉的问题不应该在这里。你应该查查你的isr以及isr中同硬件交互的代码有没有问题。 |
|
|
6楼#
发布于:2005-01-20 16:20
我开始用的giisr,这个是微软带的,应该没有问题吧,但是还是出现我说的那个问题
|
|
7楼#
发布于:2005-01-20 16:28
有没有可能在你驱动程序的某个地方在某一时刻把这个中断屏蔽掉了?从而导致cpu不能响应这个中断。
|
|
|
8楼#
发布于:2005-01-21 14:02
wwei_wang,很感谢你的帮助,但是我的这个现象不是一直都不好使,是有时候好使有时候不好使,好使的时候接收几千帧都没有问题,不好使的时候接收第一帧就完蛋了
|
|
9楼#
发布于:2005-01-21 14:30
有没有可能在isr中”让中断信号由低变高“的指令执行完后,信号还没有变高(或者稳定),下一个中断就来了,这样可能就捕捉不到中断了。如果是这个原因,在执行指令后加一个延时。
|
|
|