DSP

TI C66x DSP 系统events及其应用 - 5.3.1(Interrupt之eventCo

2019-07-13 15:45发布

前面讲到对于中断来说,eventCombiner将INTC的输入event 4~127分为四个group,即evenCombiner的四个输出event 0~3. 这样event 0~3与event 4~127一起作为Interrupt Sector的输入。之所以这样做是因为CPU仅有12个INT输入(INT4~15),而systemEvent有4~127共124个event,所以12个CPU的INT输入无法与systemEvent一一映射,所以自然地CPU的12个中断将会打包服务某些event组,而这里eventCombiner就是将systemEvent 4~127分为四组,输出event 0~3(4个event表示4个event group),然后将event 0~3与CPU的中断输入关联起来(实际上event是与INT对应的vector关联),如果event 0~3中的event(如 event 2)触发了中断,将会执行event 2对应的ISR,然后在该ISR里遍历event 2对应的event group(即event 64~95,因为64/22 ~ 95/32 =2, 而96/32=3))中所有在masked event flag相应位为1(1表示该event被触发了,如event 65,实际上这里首先是event 65先触发,然后event 65作为eventCombiner的输入,将会输出event 2,从而event 2被触发,从而才能执行event 2对应的ISR)的event。这样就实现了CPU有限的12个中断输入,可以服务event 4~127共124个event。 当然也可以直接将event 4~127中的某个event(如event 65)与CPU的某个中断输入(即vector)关联起来(不再通过eventCombiner),这样event 65触发后就直接执行对应的vector,转而执行event 65对应的ISR。为了不让event 65通过eventCombiner输出event 2,并触发event 2的ISR(没有必要了,因为这里已经将event 65直接与CPU中断输入联系起来),需要设置event mask flag寄存器,将event 65在eventCombiner中屏蔽掉,这样当event 65触发了,eventCombiner就不会输出event 2了,从而也不会触发event 2的ISR了。