技术支持你好,我参考的是IPC_example_on_6678,现在有几个问题想请教一下。
KICK0 = KICK0_UNLOCK;
KICK1 = KICK1_UNLOCK; 是解锁的意思,我每打开一个核的IPCGR(最低位置1)之前都必须打开。那么对于每个核,下次如果还要打开该核的中断,是不是就不用再置1了?直接可以跳入中断?需不需要响应中断后将IPCGR最低位清掉,下次才可以响应IPC中断?
还有程序里面写的是:
KICK0 = KICK0_UNLOCK;
KICK1 = KICK1_UNLOCK;
*(volatile uint32_t *) iIPCGRInfo[iNextCore] = interruptInfo;
*(volatile uint32_t *) iIPCGRInfo[iNextCore] |= 1;
// lock Config
KICK0 = KICK_LOCK;
KICK1 = KICK_LOCK; 为什么解锁要写2遍?应该只要前面的解锁就可以了吧?
还有一个问题是中断优先级的问题:如果核0在响应IPC的中断,但是另外一个中断(比如需要核0搬移数据,优先级比IPC高)出现了,那么核0必须从IPC中断跳出来去响应该中断,这个优先级怎么去设置呢?仅仅是设置CSL_INTC_VECTID_4到CSL_INTC_VECTID_15么?还需要什么寄存器设置呢?
最后一个问题是:IPC_example_on_6678所有的中断都对应到vector:CSL_INTC_VECTID_4,如果8个核同时响应了IPC中断(IPC_example_on_6678里面不是同时的),那么是不是得排队啊?问题比较多,希望得到解答,谢谢~~