TI中文支持网
TI专业的中文技术问题搜集分享网站

6678 IPC中断结束后IPCAR寄存器无法全部清零

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无法跳出上述的循环。

为了方便你们重现问题,将测试程序打包在附件,希望可以给出解答。

Thomas Yang1:

没有清零IPCAR的那几个核的中断程序正常执行没有呢?那几个核的清零操作执行没有呢?

Aimee Ma:

回复 Thomas Yang1:

您好,感谢您的回复,

IPCAR寄存器没有清零的那几个核的中断服务程序是正常执行了的,因为计算结果可以在MSMC寄存器中看到了。

为了确定清零操作有没有执行,我把清零的语句放在计算语句之前,发现core0在查询IPCAR[5]~IPCAR[7]寄存器时,这三个寄存器仍然没有清零,但是计算结果已经在MSMC中了,所以我觉得清零操作是执行了的。

赞(0)
未经允许不得转载:TI中文支持网 » 6678 IPC中断结束后IPCAR寄存器无法全部清零
分享到: 更多 (0)