使用 IPC 模块进行处理器间通信
本示例展示了如何使用 IPC 模块在 Texas Instruments™ C2000™ Microcontroller Blockset 和 Simulink® 模型的多核处理器的多个内核之间进行通信。
在这个示例中,您将学习如何:
使用 IPC 传输模块从一个内核发送标量和向量数据
使用 IPC 接收模块,以轮询和中断模式从其他内核接收数据
所需硬件
Texas Instruments™ Delfino F2837xD 控制卡或 F28379D LaunchPad
Texas Instruments™ F2838x 控制卡
如果您的硬件支持 USB 转串口功能,则需要使用 USB 转串口线。
USB 串口线用于在主机和目标硬件之间建立串口连接。有关更多信息,请参阅与目标硬件建立串行通信。
要选择不同的目标硬件,请在 Simulink 编辑器中浏览到配置参数 > 硬件实现 > 硬件板。
任务 1 - 使用 IPC 模块实现 TI Delfino F2837xD 的 CPU1 和 CPU2 之间的通信
本示例任务配置为使用带扩展坞的 TI Delfino F28377D 控制卡。F2837xD 是一款双核处理器。在这个任务中,您需要为两颗核心刷写两种不同的固件:
c2837xd_ipc_cpu1_tx
CPU1 modelc2837xd_ipc_cpu2_rx
CPU2 model
本示例使用四个不同的通道在内核之间传输和接收数据。以下数据从 CPU1 传输到 CPU2:
从通道 0 发送一个标量 uint16 计数器值。
从通道 1 发送 uint32 类型的标量数据。
从通道 2 发送一个类型为 uint16 的 [1x10]向量。
从通道 3 发送一个类型为 single 的 [1x3]向量。
适用于 TI F2837xD 的 CPU1 模型
打开 c2837xd_ipc_cpu1_tx 模型,然后在硬件选项卡下点击构建、部署和启动,或按 Ctrl+B 在 CPU1 上构建和下载可执行文件。

适用于 TI F2837xD 的 CPU2 模型
CPU2 使用 IPC Receive 模块在轮询和中断模式下接收数据。
1.打开 c2837xd_ipc_cpu2_rx 模型。
2.在配置参数窗口中,点击硬件实现,导航至 Target hardware resources > 外部模式,并将 Serial port 参数设置为 Windows 系统中 Device Manager > 端口(COM & LTP)处的 COM 端口。有关更多信息,请参阅利用串行通信进行参数调节和信号记录。
3.打开硬件选项卡,然后点击监控和调节。
4.使用 Display 模块观察输出数据。CPU2 接收到的数据必须与 CPU1 发送的数据相匹配。
注意:读取 CPU 上的 IPC Receive 模块的通道号必须与写入 CPU 上的 IPC 发送模块的通道号匹配。

内存详情
用于处理器间通信:
对于标量数据传输,将使用消息 RAM。链接器文件中当前的内存设置如下:
CPU2TOCPU1RAM: origin = 0x03F800, length = 0x000400
CPU1TOCPU2RAM:起始地址 = 0x03FC00,长度 = 0x000400
对于向量数据传输,使用两个全局共享 RAM 模块 (2x16K)。链接器文件中当前的内存设置如下:
RAMGS_IPCBuffCPU1:起始地址 = 0x00C000,长度 = 0x001000
RAMGS_IPCBuffCPU2:起始地址 = 0x00D000,长度 = 0x001000
您可以通过浏览到配置参数 > 硬件实现 > 目标硬件资源 > 构建选项来访问链接器文件。
对于使用 IPC 模块进行较大数据传输的情况,必须使用链接器文件增加内存。要增加 IPC 内存大小,请为 RAMGS_IPCBuffCPU1 和 RAMGS_IPCBuffCPU2 分配更多内存。两种情况下内存大小必须相同。
有关使用 IPC 模块的双电机控制,请参阅 使用 C2000 处理器控制负载双电机的永磁同步电机(测功机)。在这个示例中,c28379Dpmsmfocdual_cpu1_ert.slx 和 c28379Dpmsmfocdual_cpu2_ert.slx 模型使用 IPC 进行通信。
任务 2 - 使用 IPC 模块在 TI F2838x 和 ARM Cortex-M4 上的 CPU1 和 CPU2 之间进行通信
本示例任务配置使用 Texas Instruments™ F2838x 控制卡。F2838x 是一款多核处理器。您可以为三个核心刷入三种不同的固件。
c2838xd_ipc_cpu1
CPU1 model。
c2838xd_ipc_cpu2
CPU2 model
c2838xd_ipc_cm
ARM Cortex-M4 model
本示例使用四个不同的通道在内核之间传输和接收数据。
自由运行计数器数据从 CPU1 传输到 CPU2。数据通过四个通道(0、1、2、3)以四种不同的采样率传输。
数据通过 IPC 接收模块在 CPU2 处接收。通道号和采样时间配置为与 CPU1 中 IPC 发送模块使用的通道号和采样时间相匹配。接收到的数据随后从 CPU2 传输到 ARM Cortex-M4。
数据由 ARM Cortex-M4 使用 IPC 接收模块接收。通道号和采样时间配置为与 CPU2 中 IPC 发送模块使用的通道号和采样时间相匹配。接收到的数据随后从 ARM Cortex-M4 传输到 CPU1。
在外部模式下运行 CPU1 模型,并将发送到 CPU2 的数据与从 ARM Cortex-M4 接收的数据进行比较。
为了运行示例,下载适用于 TI F2838x (C28x) 和 ARM Cortex -M4 模型 (TI F2838x (ARM Cortex - M4)) 的 CPU2 模型,然后在外部模式下运行适用于 TI F2838x (C28x) 的 CPU1 模型。
适用于 TI F2838x 的 CPU2 模型
打开 c2838xd_ipc_cpu2,然后在硬件选项卡下点击构建、部署和启动,或按 Ctrl+B 在 CPU2 上构建和下载可执行文件。
ARM Cortex - M4 模型,适用于 ARM Cortex - M4
打开 c2838xd_ipc_cm ARM Cortex-M4 model,点击硬件选项卡下的构建、部署和启动,或按 Ctrl+B 在 ARM Cortex - M4 上构建和下载可执行文件。
适用于 TI F2838x 的 CPU1 模型
1.打开 c2838xd_ipc_cpu1 CPU1 model。
2.在配置参数窗口中,点击硬件实现,导航至目标硬件资源 > 外部模式,并将串行端口参数设置为设备管理器 > 端口 (COM & LTP) 中的 COM 端口。有关更多信息,请参阅利用串行通信进行参数调节和信号记录。
3.打开硬件选项卡,然后点击监控和调节。
4.使用 Display 模块观察输出数据。与发送到 CPU2 的数据相比,从 ARM Cortex-M4 接收的数据将存在延迟。
内存详情
用于 CPU1 和 CPU2 之间的处理器间通信,
对于标量数据传输,将使用消息 RAM。链接器文件中当前的内存设置如下:
CPU1TOCPU2RAM:起始地址 = 0x03A000,长度 = 0x000800
CPU2TOCPU1RAM: origin = 0x03B000, length = 0x000800
对于向量数据传输,使用全局共享 RAM 的两个模块 (2x16k)。链接器文件中当前的内存设置如下:
RAMGS_IPCBuffCPU1:起始地址 = 0x00D000,长度 = 0x001000
RAMGS_IPCBuffCPU2:起始地址 = 0x00E000,长度 = 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:起始地址 = 0x038000,长度 = 0x000800
有关 IPC 模块的信息,请参阅: