TMS320C66x学习笔记之通用并行端口中断服务程序示例
[复制链接]
以下伪代码用于写入uPP中断服务路由(ISR)函数的模板。请注意,UPP组合所有事件到单个CPU中断,同时如果前面的中断仍然没有从ISR返回,一个新的中断将不调用ISR。为了允许进一步调用ISR,结束中断UPP寄存器(UPEOI)必须写入零值。因此,ISR应检查多个事件,在处理每一个事件后应继续复查,直到没有更多的事件被发现。然后,它在返回之前必须写UPEOI=0。
Function upp_isr
{
interrupt_status = UPIER
while (interrupt_status != 0)
{
if (interrupt_status.EOLI)
{
UPIER.EOLI = 1 // clear EOLI
// Handle EOLI...
}
if (interrupt_status.EOWI)
{
UPIER.EOWI = 1 // clear EOWI
// Handle EOWI...
}
if (interrupt_status.ERRI)
{
UPIER.ERRI = 1 // clear ERRI
// Handle ERRI...
}
if (interrupt_status.UORI)
{
UPIER.UORI = 1 // clear UORI
// Handle UORI...
}
if (interrupt_status.DPEI)
{
UPIER.DPEI = 1 // clear DPEI
// Handle DPEI...
}
if (interrupt_status.EOLQ)
{
UPIER.EOLQ = 1 // clear EOLQ
// Handle EOLQ...
}
if (interrupt_status.EOWQ)
{
UPIER.EOWQ = 1 // clear EOWQ
// Handle EOWQ...
}
if (interrupt_status.ERRQ)
{
UPIER.ERRQ = 1 // clear ERRQ
// Handle ERRQ...
}
if (interrupt_status.UORQ)
{
UPIER.UORQ = 1 // clear UORQ
// Handle UORQ...
}
if (interrupt_status.DPEQ)
{
UPIER.DPEQ = 1 // clear DPEQ
// Handle DPEQ...
}
// loop again if any interrupts are left
interrupt_status = UPIER
} // end of while
// write end of interrupt vector to allow future calls
UPEOI = 0
} // end of function
|