F28M35 IPC 运行问题



运行F28M35提供的例程,ctom_ipcdrivers_lite和ctom_ipcdrivers,按照烧录和启动方法先烧录M3程序,再烧录C28程序,然后,RESET C28,再RESET M3,然后,RESTART M3 , RUN M3  再RUN C28,使用ctom_ipcdrivers_lite例程出现程序停止在IPCLiteCtoMGetResult函数判断处,

while (IPCLiteCtoMGetResult(&usRWord16,IPC_LENGTH_16_BITS,
IPC_FLAG32) != STATUS_PASS)
{
}
if (usWWord16 != usRWord16)
{
ErrorCount++;
}

使用ctom_ipcdrivers例程出现程序停止在IPCPUT函数处(// Wait until Put Buffer slot is free),由此可以说明,C28向M3发送数据后,M3没有回复数据给C28。请问大侠这是什么问题?

unsigned short
IpcPut (volatile tIpcController *psController, tIpcMessage *psMessage,
unsigned short bBlock)
{
unsigned short writeIndex;
unsigned short readIndex;

writeIndex = *(psController->pusPutWriteIndex);
readIndex = *(psController->pusPutReadIndex);

// Wait until Put Buffer slot is free
while (((writeIndex + 1) & MAX_BUFFER_INDEX) == readIndex)
{
// If designated as a "Blocking" function, and Put buffer is full,
// return immediately with fail status.
if (!bBlock)
{
return (STATUS_FAIL);
}

readIndex = *(psController->pusPutReadIndex);
}

// When slot is free, Write Message to PutBuffer, update PutWriteIndex,
// and set M3 IPC INT Flag
psController->psPutBuffer[writeIndex] = *psMessage;

writeIndex = (writeIndex + 1) & MAX_BUFFER_INDEX;
*(psController->pusPutWriteIndex) = writeIndex;

HWREG(MTOCIPC_BASE + IPC_O_MTOCIPCSET) |= psController->ulPutFlag;

return (STATUS_PASS);
}

另外,我的F28M35程序烧录到FLASH后,仿真可以运行,断电后不能重启运行,这是怎么回事?本人F28M35新手,望指教。谢谢。

  • 检查BOOT MODE gpio引脚。

  • 报告一下解决方法,不能从FLASH启动时因为BOOT MODE方式问题,把GPIO35,GPIO43及GPIO47引脚强制拉高到3.3V后可以从FLASH启动,另外还发现BUG,那就是TI 提供的例程,刚开始用的是V140,只能跑一个核M3。后来咨询TI rick后,他推荐用最新的V201试试,结果OK啦。目前还有个小问题,就是IPC传输的时间太长了,M3写一次16位数据到C28,最短居然要10us左右,不知道怎么优化。