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.

[参考译文] TMS320F28374D:使用 GSRAM 进行批量数据交换

Guru**** 2425930 points
Other Parts Discussed in Thread: TMS320F28374D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1023279/tms320f28374d-bulk-data-exchange-using-gsrams

器件型号:TMS320F28374D

您好!

我正在尝试在 TMS320F28374D 的 CPU1和 CPU2之间交换大量数据、这超出了 MSG RAM 的处理能力。 以进行测试
我创建了两个数组、每个 CPU 一个。

我最初希望归档的是、两个 CPU 都有一个阵列、其中一个 CPU 可以存储数据、另一个 CPU 只能读取
来自数组的相同数据、他可以访问这些数据、因为它的名称与其他 CPU 上的名称相同、并且具有相同的起始地址和长度。

我所做的是:

使用 GSRAM8和 GSRAM9进行传输。 对于 CPU1、GSRAM8为 R/W;对于 CPU2、GSRAM9为 R/W。
我在两个 CPU 的存储器映射中创建并分配了数据段:

部分

(笑声)

CPU1_TO_CPU2_GS:> RAMGS8 PAGE = 1.
CPU2_TO_CPU1_GS:> RAMGS9 PAGE = 1.

(笑声)

然后、我创建了两个数组并使用 pragma 将它们分配到正确的存储器区域。 我在 CPU 的两个代码中都执行了此操作
相同的名称、因此两者看起来都与以下内容完全相同:

uint32 CPU1_TO_CPU2_Array[256]= 0;
uint32 CPU2_TO_CPU1_Array[256]= 0;

#pragma DATA_SECTION (CPU1_TO_CPU2_Array、"CPU1_TO_CPU2_Gs");
#pragma DATA_SECTION (CPU2_TO_CPU1_Array、"CPU2_TO_CPU1_Gs");


此外、我将 GSRAM8的主角色分配给 CPU1、将 GSRAM9分配给 CPU2。 我还一直等到所有权
相应地分配;这两个都发生在 CPU1的代码中:

EALLOW;
MemCfgRegs.GSxMSEL.bit.MSEL_GS8 = 0;// CPU1可以读取/写入;CPU2只能读取
MemCfgRegs.GSxMSEL.bit.MSEL_GS9 = 1;// CPU2可以读取/写入;CPU1只能读取
EDIS;
while (!((MemCfgRegs.GSxMSEL.bit.MSEL_GS9 = 1 && MemCfgRegs.GSxMSEL.bit.MSEL_GS8 = 0));


当我现在使用调试时、它可以工作、但前提是我仅将这两个数组用于测试目的。 当我以这种方式创建更多数组时、它们将是
映射到两个 CPU 上指定区域中的不同存储器空间。 然后、CPU1和 CPU2上的相同数组之间没有匹配、
因此它不再工作。

是否可以在两个具有相同内存起始地址的 CPU 上创建数组,而无需手动将它们分配给该地址? 或者是否存在其他问题
在两个 CPU 之间实现大量数据交换的方法?

提前感谢您!

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

    Viktor、

    使用#pragma 和 Data_Section 实现是我唯一知道的强制链接器将区域分配给特定地址的方法。  因此、如果您希望有多个具有固定地址的块、您需要声明其中的多个块、如您所述。

    我想您可以使用 DMA 传输数据、DMA 可以访问所有 GX RAM。  这将节省 CPU 开销、并且在发生冲突时也会自动进行仲裁。  

    此外、您还可以使用 IPC 将数据数组的地址起始/长度发送到另一个 CPU。  这将防止您不得不如上所述在链接器中进行硬性分配。  然后、您可以使用 IPC 中断启动一次性 DMA 事件来读取数据。

    请告诉我这是否有帮助、或者我们可以集思广益。

    最棒的

    Matthew

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

    您好、Matthew、

    非常感谢您的详细回答!

    然后、我将手动分配数据、并使用 DMA 减少通信开销。  

    此致、

    维克托