主要内容

本页采用了机器翻译。点击此处可查看英文原文。

使用 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 是一款双核处理器。在这个任务中,您需要为两颗核心刷写两种不同的固件:

本示例使用四个不同的通道在内核之间传输和接收数据。以下数据从 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.slxc28379Dpmsmfocdual_cpu2_ert.slx 模型使用 IPC 进行通信。

任务 2 - 使用 IPC 模块在 TI F2838x 和 ARM Cortex-M4 上的 CPU1 和 CPU2 之间进行通信

本示例任务配置使用 Texas Instruments™ F2838x 控制卡。F2838x 是一款多核处理器。您可以为三个核心刷入三种不同的固件。

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

  • 自由运行计数器数据从 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 模块的信息,请参阅: