This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
尊敬的 TI 团队:
我们使用 Concerto F28M36P63C2、但遇到了 IPC 标志机制问题。
实现说明:
M3通过 IPC 设置一个'Function Call-X'到 C28。
-然后、当 C28接收到'Function Call-X'时、M3等待 Ack ('IPC_FLAG16')。
在 Ack 上、M3知道 C28将执行请求、M3可以继续操作。
在 Ack-to M3上、知道 C28可能有问题
- C28将接收'Function Call-X'并设置相关的 IPC-Flag 'IPC_FLAG16'。
然后 C28将执行请求的案例。
问题描述:
在大多数情况下不存在问题、工作正常。
通常、请求的"函数调用-X"基于秒数进行调用!
出于性能原因、调用'Function Call-X'的速度应尽可能快。
这可能在特定时间内有效、最后是 M3-Ack 等待执行超时
因为未检测到 IPC-Flag 的 Ack。
!但是 C28确实接收到'Function Call-X',设置相关 IPC-Flag 和
执行了请求的案例。 只有 M3会等待相关 IPC-Flag 的 Ack 并执行到。
要在此处获得更好的说明、请使用代码片段
编码 M3:
//使用'IPC_FLAG16'设置'uFlag'
//'id' 是 C28上的请求'Function Call-X'
/*使用参数*/调用 C28上的 fctCall()
ipcStatus = IPCMtoCFunctionCall (&m3IpcCtrl1、
(((Ulong*) M3_CTOM_PULLMSG)[C28_FCT1_CALL]、
(Ulong) id、
enable_blocking);
if (status_pass == ipcStatus)
{
/*等待 Ack */
ipcDspWait = 0L;
ipcStatus = IPCCtoMFlagBusy( uFlag );
while ((M3_IPC_STATUS_PASS!= ipcStatus <M3_IPC_WAIT_MSG_TO) ))&&(ipcD
{
ipcDspWait++;
ipcStatus = IPCCtoMFlagBusy( uFlag );
}
if (M3_IPC_STATUS_PASS == ipcStatus)
{
//继续
}
其他
{
//至
}
}
/*始终确认。 *
IPCCtoMFlagAcknowledge ( uFlag );
…
编码 C28:
void c28IpcFctCall( uint32 ulData )
{
switch( ulData )
{
xyz 案例:
(笑声)
案例"函数调用-X":
{
(笑声) 启动请求的案例...
/*我们接收到请求的案例*/
IPCCtoMFLAGSet ( IPC_FLAG16 );
中断;
}
}/*开关结束()*/
}/* c28IpcFctCall()的末尾*/
其他信息
对于 M3-to、C28确实接收并正确完成
请求者'Function Call-X'。
此外、我无法看到任何有关 IPC 标志机制的勘误表。
我的问题是:
什么是错误的、或者由于什么原因未看到 M3 IPC 标志?
以下设置正在使用中:
- Code Composer Studio
版本:6.1.2.00015
- F28M36P63C2
M3 - 125MHz
C28 - 125MHz
提前感谢您、此致
WJ
您好!
IPC 标志和 ACK 机制没有已知问题、因此您不会在勘误文档中看到它。 我建议仔细检查代码以确保 IPC 序列正确。
此致、
Vivek Singh
您好、Vivek、
感谢您的反馈。
由于 IPC 标志机制非常简单(同步 M3和 C28进程)、
因此、我不知道您意味着什么类型的"正确 IPC 序列"(对 IPC 标志机制重新分级)。
IPC-Flag 机制得到了很好的说明(图5-16)、并在《数据手册》中进行了介绍。
请您给我更多/其他参考。
谢谢。
此致
WJ
您好、Vivek、
正如您所确认的、这是一个简单的"标志设置/清除机制"、这正是我造成混淆的原因。
工作用例和非工作用例之间的 SW-Flow 没有明显的区别。
我尝试解决的一个问题是在 C28中添加以下代码以确保设置该标志:
C28代码片段:
案例"函数调用-X":
{
(笑声) 启动请求的案例...
/*我们接收到请求的案例*/
#if 0
IPCCtoMFLAGSet ( IPC_FLAG16 );
其他
while (CtoMIPCRegs.CTOMIPFLG.bit.IPC16!= 1)
CtoMIPCRs.CTOMIPSET.bit.IPC16 = 1;
#endif
中断;
}
!但结果相同。
其他问题。
如果 C28设置相关标志(此处为 IPC16)、则该部分编码在 ISR (PieVectTable.MTOCIPC_INT1)内运行。
可能会同时运行对 IPC-Memory 的其他访问(只读/写内存位置)。
C28-SW 和 M3-SW 会在 ISR 之外定期更新 IPC-Memory 位置。
用于检测相关 IPC-Flag 的 M3-SW 也会在 ISR 外部正常运行。
IPC 内存 R/W 和 R/W IPC 标志等其他活动期间是否存在任何限制?
谢谢、此致
WJ
您好!
[引用]在 IPC 内存 R/W 和 R/W IPC-Flag 等其他活动期间是否存在任何限制? [/报价]
否、没有已知限制。 两者都是独立的。 我仍然认为 C28和 M3代码之间的握手处于某种竞争状态、因此导致了此问题。
Vivek Singh
您好、Vivek、
供参考、我选择了不同的方法来解决此问题。
感谢您的支持。
此致
WJ