TI 专家您好,
近期工程中发现使用6678进行IPC通信时,一个CCS V5.1软件仿真与EVM6678LE硬件运行结果不一致的问题。测试程序基于6678的IPC demo,主要完成以下的工作:
1、core0依次给core1~core7设置IPC中断;
2、core1~core7在ISR中断程序中执行一些运算,运算结束后将IPCAR清零,清零操作如下:
read_ipcgr = *(volatile Uint32 *) iIPCGRInfo[CoreNum];
*(volatile uint32_t *) iIPCARInfo[CoreNum] = read_ipcgr; //clear the related source info
3、core0做一个轮询判断,当全部核的IPCAR寄存器清零之后,继续之后的计算,轮询代码如下:
uint8_t FinishFlagCnt;
do{
FinishFlagCnt = 0;
uint32_t read_ipcar = 0;
for(i = 0; i<7 ; i++)
{
read_ipcar = *(volatile uint32_t *) iIPCARInfo[(i+1)];
//printf("*(volatile uint32_t *) iIPCARInfo[(i+1)] = %x\n", *(volatile uint32_t *) iIPCARInfo[(i+1)]);
if ( 0 == read_ipcar)
FinishFlagCnt ++;
}
}while(FinishFlagCnt != 7);
在软件仿真中,程序可以正常运行并执行之后的操作。在EVM6678LE开发板上却遇到了最后被设置中断的3~4个核无法清零IPCAR的问题,导致core0无法跳出上述的循环。
为了方便你们重现问题,将测试程序打包在附件,希望可以给出解答。