C6678的外设中断标志位在什么时候清除最合适?
环境:C6678 GbE网络外设驱动,网络接收中断源为QMSS队列(704)中断。
我们自己开发的简易操作系统内核,从触发中断(中断入口)到相应的网络驱动中断处理时间为3微妙。
当在网络驱动的中断处理中清除外设中断标志后,接着回收描述符(将接收描述符压入接收完成队列中),最后调用Mac层接收处理,程序表现正常。
当在中断入口后清除外设中断标志,(其余程序未调整)回收描述符的操作还是在驱动的中断处理函数中,通讯一段时间后,会出现相应Port口的接收完成队列中的描述符数量减少,直至为0.
两者区别只是清除外设中断标志位的时机不同,后者比前者提前。
请问为什么会导致这种情况。
谢谢大家!
Andy Yin1:
边沿触发的中断在入口即可清除中断,电平触发的中断在中断处理之后清中断。
你这个描述符减少的现象,感觉跟中断清除没有关系,可能是描述符回收的过程有问题,需要查一下减少的描述符都到哪里去了。