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.

[参考译文] CCS/TMS320F28377D:IPC 标志清除功能

Guru**** 2546020 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/623428/ccs-tms320f28377d-ipc-flag-clear-function

器件型号:TMS320F28377D

工具/软件:Code Composer Studio

通过使用 CPU1中的 IPC 标志来注意 CPU2、我们在一个 ISR 中设置了两个 IPC 标志、如下所示、该 ISR 在2ms 运行:

#define IPC_FLAG_DATAREQUEST_CPU1 IPC_FLAG26
#define IPC_FLAG_DATAREQUEST_CPU2 IPC_FLAG27

void DataExchange(){
#if defined (CPU1)
// CPU1将 IPC 标志设置为每个 CPU
IPCLtoRFlagSet (IPC_FLAG_DATAREQUEST_CPU1);
IPCLtoRFlagSet (IPC_FLAG_DATAREQUEST_CPU2);
#endif
} 

并在另一个运行速度为125us 的 ISR 中检测每个 CPU 中的 IPC 标志:

void CmdCheck(){
#if defined (CPU1)
DataRequest = IPCLtoRFlagBusy (IPC_FLAG_DATAREQUEST_CPU1);
#Elif Defined (CPU2)
DataRequest = IPCRtoLFlagBusy (IPC_FLAG_DATAREQUEST_CPU2);
#endif 
if (DataRequest){ //重置 IPC 标志 #if defined (CPU1) IPCLtoRFlagClear (IPC_FLAG_DATAREQUEST_CPU1); #Elif Defined (CPU2) IPCRtoLFlagAcknowledge (IPC_FLAG_DATAREEST_CPU2); #endif }

在正常情况下   ,在设置  IPC_FLAG26后,CmdCheck()中的指示器仅触发一次。

此机制有时工作正常、但我们发现  IPC_FLAG26 每次都不能正确清除、这会使设置 IPC_FLAG26后连续触发两次指示器。

在查看了1日专题讨论会和 F28377规格后、我使用的机器主义似乎是正确的。

在 F2837xD 示例:IPC_GPIO_TOGGLE 中,我发现每个 CPU 不仅通过调用 IPCLtoRFlagClear,而且还通过调用 IPCRtoLFlagAcknowledge 来清除自己的标志。

本地 CPU 清零本地标志是否必须在 CLR 之前使用 ACK? 但如果是这样、为什么该机制有时工作正常?

或者我没有注意到什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ali、

    很抱歉、由于某种原因、此帖子长时间未得到解答。 只是想检查您是否仍然存在此问题或是否已解决?

    Vivek Singh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Vivek、

    我仍然有这个问题、但我们使用另一种机制来避免、这种机制只使用 while 循环的确认而不是使用 clear。

    您能解释一下这个问题的现象吗?
    感谢您的回复。