多核处理器由中断触发通信后,配置相应的寄存器,以完成通信。TMS320C6678主要的核间通信寄存器有16个, 其中8个IPC中断生成寄存器(IPCGR0~IPCGR7) 和8个IPC中断确认寄存器(IPCAR0~IPCAR7)。将IPC 中断生成寄存器IPCGRx(0≤x≤7) 的最后一位IPCG 位置1,就能产生对core_x 的中断;1~3位是保留位,4~31位(SRCS0~SRCS27)提供了可以识别多达28种的中断来源。IPC 中断确认寄存器IPCARx(0≤x≤7) 的0~3位是保留位,4~31 位(SRCC0~SRCC27)分别对应28种不同的中断来源。当SRCSx 被置1时,寄存器将相应的中断确认寄存器的SRCCx 位置1。当中断被确认后,寄存器将SRCCx和相应的SRCSx 位同时置0 。 当TMS320C6678的一个处理器核准备与其他处理器核通信时,根据TMS320C6678 的中断事件映射表, 引发91号事件,产生可屏蔽的核间中断, 调用中断服务例程。中断服务例程IPC_ISR 函数设计如下: voidIPC_ISR() { KICK0= KICK0_UNLOCK; KICK1= KICK1_UNLOCK; *(volatileuint32_t *) IPCGR[2] = 0x20; *(volatileuint32_t *) IPCGR [2] |= 1; KICK0= KICK0_UNLOCK; KICK1= KICK1_UNLOCK; } 以向core_2 发送0x20 信息的中断为例,对应的0x20 的信息存入SRCS 位中, 用于识别中断源。同时将当前CPU 核心内的中断产生寄存器IPCGR2 的最后一位IPCG位置1, 触发IPC 中断。当目标处理器核被中断触发后,会自动跳转到中断异常向量表中相应的入口点,读取当前核心中断产生寄存器IPCGRx (0≤x≤7 ),从寄存器的SRCS 位中获取通信发起方传来的核间信息。然后将信息存入对应的中断确认寄存器IPCARx 中,清空SRCC 和相应的SRCS位, 用以接收下一次的核间中断。其中的KICK0 和KICK1 为陷阱控制寄存器, 用来避免通信冲突的发生。
|