本帖最后由 superhechao 于 2009-12-11 14:31 编辑
由于C6000默认的中断不支持嵌套,部分程序如下:
vector.asm
;====================================================================
EXT_INT4:
STW B0, *B15--[1]
|| MVKL _FIFO_ISR, B0
MVKH _FIFO_ISR, B0
B B0
LDW *++B15[1], B0
NOP 2
NOP
NOP
EXT_INT5:
STW B0, *B15--[1]
|| MVKL _BP_ISR, B0
MVKH _BP_ISR, B0
B B0
LDW *++B15[1], B0
NOP 2
NOP
NOP
ISR.C
============================
interrupt void FIFO_ISR()
{
//搬移数据,时间很短
}
interrupt void BP_ISR()
{
//处理数据,时间较长
}
============================
因为_BP_ISR的处理时间很长,而_FIFO_ISR处理频率较高,导致进入_BP_ISR的时候,漏掉了部分_FIFO_ISR的接收,如何在处理_BP_ISR的时候嵌套FIFO_ISR的中断呢?
请高手们针对此问题指点。
注:
1) 主程序中还有更低优先级更长的任务,不能把_BP_ISR放在主程序中执行。
2) 系统结构比较复杂,没有使用DSP/BIOS。
3) 有人建议用DMA来搬移数据,但FIFO缓存的帧比较多,使用非常不便。
十分感谢,QQ:82169587 |