首页 > 代码库 > TI C66x DSP 系统events及其应用 - 4.2(Exception Combiner)
TI C66x DSP 系统events及其应用 - 4.2(Exception Combiner)
Exception Combiner允许系统设计者只选择一部分system events作为CPU EXCEP的输入。为此,Exception Combiner提供了四个exception mask寄存器(EXPMAKS[3:0])用于禁掉不想要CPU EXCEP处理的event。因为单个CPU仅有一个exception输入,所以需要四个mask寄存器协调工作combine 128个events为一个CPU EXCEP输入。
The default value of the EXPMASKx registers are all 1s. This means that all events are masked; therefore, no system events generate an exception unless you program this register.
Exception Combiner也提供了4个masked exception flag寄存器(MEXPFLAG[3:0]),与excepton mask寄存器结合使用。masked exception flag寄存器表示对event falg 寄存器(EVTFLAG[3:0])mask(通过exception mask寄存器实现)后的值,即除去了通过exception mask寄存器禁止掉的event,即使INTC收到了被禁掉的event,也不会在MEXPFLAG寄存器中置位,不被CPU处理。
其中event falg 寄存器(EVTFLAG[3:0])将捕获INTC接收到的所有system events,这四个32bit寄存器将cover 124个system events(即4~127,其中0~3是INTC内部combine的event,将不作为INTC的输入,在INTC内部,event 0~3是Interrupt Selector的输入。与处理中断的Event Combiner不同,Exception Combiner不会对event 4~127分组,见corPac user guide Figure9-1可知),每个event映射到event falg 寄存器的1位。当INTC收到event后,相应为被置1,该寄存器是read-only的,只能通过EVTCLR[3:0]清除相应位。
Exception Combiner涉及三种寄存器:
event falg 寄存器(EVTFLAG[3:0]);
exception mask寄存器(EXPMAKS[3:0]);
masked exception flag寄存器(MEXPFLAG[3:0])
#define CORE_PAC_INTC_BASE_ADDR (SCorePacINTCRegs *) 0x01800000
/* INTC寄存器的起始地址是0x01800000 */
/*******************************************************************
* @brief SCorePacINTCRegs structure definition for CorePac Interrupt
* Controller registers.
*******************************************************************************/
typedef struct SCorePacINTCRegs
{
volatile u32 EVTFLAG[4]; /**< Event flag registers */
volatile u8 RSVD1[16];
volatile u32 EVTSET[4]; /**< Event set registers */
volatile u8 RSVD2[16];
volatile u32 EVTCLR[4]; /**< Event clear registers */
volatile u8 RSVD3[48];
volatile u32 EVTMASK[4]; /**< Event mask registers */
volatile u16 RSVD4[8];
volatile u32 MEVTFLAG[4]; /**< Masked Event flag registers */
volatile u8 RSVD5[16];
volatile u32 EXPMASK[4]; /**< Exception Mask registers */
volatile u8 RSVD6[16];
volatile u32 MEXPFLAG[4]; /**< Masked Exception Flag registers */
volatile u8 RSVD7[20];
volatile u32 INTMUX[3]; /**< Interrupt mux registers: INTMUX1, INTMUX2,INTMUX3 */
volatile u8 RSVD8[48];
volatile u32 AEGMUX[2]; /**< Advanced event generator mux registers */
volatile u8 RSVD9[56];
volatile u32 INTXSTAT; /**< Interrupt exception status register */
volatile u32 INTXCLR; /**< Interrupt exception clear register */
volatile u32 INTDMASK; /**< Dropped interrupt mask register */
}SCorePacINTCRegs;