主要内容

使用IPC块的处理器间通信

本示例展示了如何使用Simulink®模型在多核德州仪器™C2000™处理器的多核之间使用IPC块进行通信。金宝app

在这个例子中,你将学习如何:

  • 使用IPC传输块从一个核心发送标量和矢量数据

  • 在轮询和中断模式下使用IPC接收块在其他核心接收数据

所需的硬件

  • 德州仪器™Delfino F2837xD控制卡或F28379D发射台

  • 德州仪器™F2838x控制卡

  • 一根USB串行线,如果你的硬件提供USB串行功能

USB串口线用于在主机和目标硬件之间建立串口连接。有关更多信息,请参见建立与目标硬件的串行通信

若要选择不同的目标硬件,请在Simulink编辑器中浏览到金宝app配置参数>硬件实现>硬件板

任务1 -使用IPC块在TI Delfino F2837xD的CPU1和CPU2之间通信

本任务的一个例子是配置TI Delfino F28377D控制卡与坞站。F2837xD是一个双核处理器。在这个任务中,你将为两个核心闪现两个不同的模型:

本例使用四个不同的通道在核心之间传输和接收数据。CPU1向CPU2传输的数据如下:

  • 一个标量uint16计数器值从通道0发送

  • 类型为uint32的标量数据从通道1发送

  • 一个uint16类型的向量[1x10]从通道2发送

  • 类型为single的向量[1x3]从通道3发送

TI F2837xD (C28x)的CPU1模型

打开c2837xd_ipc_cpu1_tx模型,然后单击构建、部署和启动硬件按TAB键Ctrl + B在CPU1上构建和下载可执行文件。

TI F2837xD (C28x)的CPU2模型

CPU2在轮询和中断模式下使用IPC接收块接收数据。

1.打开c2837xd_ipc_cpu2_rx模型。

2.在配置参数窗口中,单击硬件实现并导航到目标硬件资源>外部模式并设置串行端口参数输入COM端口设备管理器>港口(COM & LTP)在Windows。有关更多信息,请参见串行通信的参数调优和信号记录

3.开放硬件页,单击监视和调优

4.使用显示块观察输出数据。CPU2接收的数据必须与CPU1发送的数据相匹配。

请注意:读CPU的IPC Receive块的通道号必须与写CPU的IPC Transmit块的通道号相匹配。

记忆的细节

处理器间通信:

  • 对于标量数据传输,将使用消息ram。链接器文件中的当前内存设置如下:

CPU2TOCPU1RAM: origin = 0x03F800, length = 0x000400

CPU1TOCPU2RAM: origin = 0x03FC00, length = 0x000400

  • 对于矢量数据传输,使用全局共享RAM的两个块(2x16K)。链接器文件中的当前内存设置如下:

RAMGS_IPCBuffCPU1: origin = 0x00C000, length = 0x001000

RAMGS_IPCBuffCPU2: origin = 0x00D000, length = 0x001000

您可以通过浏览到访问链接器文件配置参数>硬件实现>目标硬件资源>构建选项

对于使用IPC块的较大数据传输,必须使用链接器文件增加内存。为了增加IPC内存大小,可以为RAMGS_IPCBuffCPU1和RAMGS_IPCBuffCPU2分配更多的内存。在这两种情况下,内存的大小必须相同。

有关使用IPC块的双电机控制,请参见使用C2000处理器控制双电机负载的PMSM (Dyno).在这个例子中,c28379Dpmsmfocdual_cpu1_ert.slx而且c28379Dpmsmfocdual_cpu2_ert.slx模型使用IPC进行通信。

任务2 -使用IPC块在TI F2838x (C28x)和TI F2838x (ARM Cortex - m4)上的CPU1、CPU2之间进行通信

本示例的任务是用Texas Instruments™F2838x ControlCard配置的。F2838x是一个多核处理器。你可以为三个核心闪现三个不同的模型。

本例使用四个不同的通道在核心之间传输和接收数据。

  • 空闲运行计数器数据从CPU1传输到CPU2。数据通过四个通道(0,1,2,3)以四种不同的采样率传输

  • CPU2通过IPC接收块接收数据。通道号和采样时间被配置为与CPU1中的IPC传输块中使用的通道号和采样时间相匹配。接收到的数据从CPU2传输到ARM Cortex - M4。

  • 数据在ARM Cortex - M4使用IPC接收块接收。通道号和采样时间被配置为与CPU2中IPC传输块中使用的通道号和采样时间相匹配。接收到的数据从ARM Cortex - M4传输到CPU1。

  • 在外部模式下运行CPU1模型,并将发送到CPU2的数据与从ARM Cortex - M4接收到的数据进行比较。

为了运行这个例子。下载TI F2838x (C28x)的CPU2模型和ARM Cortex -M4模型(TI F2838x (ARM Cortex -M4)),然后在外部模式下运行TI F2838x (C28x)的CPU1模型。

CPU2型号TI F2838x (C28x)

打开CPU2模型,并单击构建、部署和启动硬件按TAB键Ctrl + B在CPU2上构建和下载可执行文件。

ARM Cortex - M4型号TI F2838x (ARM Cortex - M4)

打开ARM Cortex-M4型号,并单击构建、部署和启动硬件按TAB键Ctrl + B在ARM Cortex - M4上构建并下载可执行文件。

CPU1型号TI F2838x (C28x)

1.开放CPU1模型

2.配置参数窗口中,单击硬件实现并导航到目标硬件资源>外部模式并设置串行端口参数输入COM端口设备管理器>端口(COM <P)在Windows。有关更多信息,请参见串行通信的参数调优和信号记录

3.开放硬件选择并单击监视和调优

4.使用显示块观察输出数据。从ARM Cortex - M4接收到的数据与传输到CPU2的数据相比会产生延迟值。

记忆的细节

对于CPU1和CPU2之间的处理器间通信,

  • 对于标量数据传输,将使用消息ram。链接器文件中的当前内存设置如下:

CPU1TOCPU2RAM: origin = 0x03A000, length = 0x000800

CPU2TOCPU1RAM: origin = 0x03B000, length = 0x000800

  • 对于矢量数据传输,使用全局共享RAM的两个块(2x16k)。链接器文件中的当前内存设置如下:

RAMGS_IPCBuffCPU1: origin = 0x00D000, length = 0x001000

RAMGS_IPCBuffCPU2: origin = 0x00E000, length = 0x001000

对于使用IPC块的较大数据传输,必须使用链接器文件增加内存。您可以通过浏览到访问链接器文件配置参数>硬件实现>目标硬件资源>构建选项.为了增加IPC内存大小,可以为RAMGS_IPCBuffCPU1和RAMGS_IPCBuffCPU2分配更多的内存。在这两种情况下,内存的大小必须相同。

对于CPU1/CPU2与ARM Cortex - M4之间的处理器间通信,由于全局共享RAM不可用,所以使用IPC消息RAM。CPU1/CPU2和ARM Cortex - M4之间的数据传输量受到可用消息ram大小的限制。

链接器文件中的当前消息RAM设置如下:

CPUTOCMRAM: origin = 0x039000, length = 0x000800

CMTOCPURAM: origin = 0x038000, length = 0x000800

有关IPC块的信息,请参见: