Multicore Navigator (CPPI):Notify end of QM interrupt

来源:互联网 发布:中文域名注册多少钱 编辑:程序博客网 时间:2024/05/21 22:44

在RTOS中,Multicore Navigator (CPPI)中PDSP监控的中断是作为中断进程进行调度的。如下,QM_PDSP_ISR是作为中断进程的入口函数注册给中断进程的,每次中断进程被调用的时候,都将从QM_PDSP_ISR处执行,这与普通的非中断进程不同(从被打断处继续执行)。

void QM_PDSP_ISR()
{
        //processing func
        ISR_func();
        // End interrupt.
       (void)QmInterruptEndOfInterrupt(interrupt_Type,accChannel);
}

ISR_func执行完后,要通过QmInterruptEndOfInterrupt函数作一些善后工作:

        intr =accChannel; //PDSP监控QM中断的channel号,即也是中断号

        /*1, Clear status register bit of this interrupt */
        regPtr->statusClearRegs =  (u32)(1<<intr);
        /*,2,Subract one for this interrupt from the int count register */
        regPtr->intCntRegs[ intr] = 1;
        /*,3,Signal that interrupt has been serviced */
        regPtr->endOfInt = intr;

第一步目的是清除intr中断状态寄存器,表示该中断已得到服务;

第二步目的是将记录该intr中断对应的count寄存器减1(因为同一个intr中断可以触发多次,对应intr的count寄存器记录了还没有得到服务的intr中断的数量),表示intr中断已响应一次。count最大值是3,表示最大可以记录3个同种intr中断,超出的将会丢掉。

第三步设置对应于intr中断的endOfint寄存器,表示该intr中断已正式服务完成。

当第三步设置完成后,如果intr中断对应的count寄存器值不等于0,则intr中断将会再次触发(假设比intr中断优先级高的中断count寄存器值为0,即没有高优先级中断触发),但是this should not happen with firmware generated interrupts(4.4.1.2 inMulticore Navigator (CPPI) Users guide.pdf)。


控制QM interrupt中断的regs area是QMSS INTD config region(Multicore Navigator (CPPI) Users guide.pdf):

 

中断号Valid values are: (other values are ignored)

0, 1 = PKTDMA RX starvation interrupts 0 and 1 (respectively)

2 - 33 = High-priority channel interrupts 0 through 31 (respectively)

34 - 49 = Low-priority channel interrupts 0 through 15 (respectively)

0 0
原创粉丝点击