主要内容

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

F2837xD/F2838x/F2838x-M4 IPC Receive

使用为每个核心单独建模的方式,从任一核心接收数据。

  • F2837xD/F2838x/F2838x-M4 IPC Receive block

库:
C2000 Microcontroller Blockset / F2837xD
C2000 Microcontroller Blockset / F2838x / C28x
C2000 Microcontroller Blockset / F2838x / M4
C2000 Microcontroller Blockset / F28p65x

描述

IPC Receive 模块接收并输出从一个内核发送到另一个内核的数据。

注意

对于多核处理器,使用 IPC 接收和 IPC 发送模块来接收或发送数据到任一核心。这些模块适用于扁平模型方法,其中每个核心都使用单独的模型。

如果您使用多处理器建模方法,并且使用任务管理器通过单个模型触发多个核心,请使用 Interprocess Data ReadInterprocess Data Write模块在核心之间发送和接收数据。

Core1 将数据传输到其分配的内存(Core1 到 Core2 消息 RAM),并从 Core2 的分配内存(Core2 到 Core1 消息 RAM)接收数据。同样,Core2 将数据传输到其分配的内存(Core2 到 Core1 消息 RAM),并从 Core1 的分配内存(Core1 到 Core2 消息 RAM)接收数据。对于 F2838xD,Core1/Core2 可以是 CPU1、CPU2 或 ARM Cortex-M4 (CM);对于 F2837xD,Core1/Core2 可以是 CPU1 或 CPU2。

如果 Core1 和 Core2 都是 C28x 内核,则两个内核之间的数据和通道结构分配在消息 RAM 中,数据数组分配在全局共享 RAM 中。在 C28x 内核中,默认情况下所有通道结构都在消息 RAM 中创建。

但是,如果其中一个核心是 ARM Cortex M4(仅适用于 F2838x),则数据数组仅使用消息 RAM 进行分配,因为核心之间没有全局共享 RAM。为了容纳更多数据,消息 RAM 中仅创建所需的通道结构。因此,如果一个内核中用于发送块的通道号与另一个内核中用于接收模块的通道号不匹配,则数据传输将不会发生。

硬件中断模块可以与 IPC Receive 模块一起使用,用于接收基于硬件中断的数据。

  • C28x processor - 通道 0、1、2 和 3 分别配置为硬件中断 IPC0、IPC1、IPC2 和 IPC3。

  • F2838x-M4 processor - 通道 0、1、2、3、4、5、6 和 7 分别配置为硬件中断 IPC0、IPC1、IPC2、IPC3、IPC4、IPC5、IPC6 和 IPC7。

这些硬件中断可以在硬件中断块中使用以下参数进行设置:CPU interrupt number 1PIE interrupt numbers 1315 14 16

IPC 平面模型的内存分配

Channel assignmentMemory usage in CM message RAM 以及 Memory usage in C28x message RAM 详细说明了如何在平面模型的 IPC 模块中分配内存。

  • Channel assignment - C28x-CM IPC(处理器间通信)中的通道分配是 CPU1、CPU2 和通信管理器 (CM) 之间无缝通信的关键方面。内部为每个 CPU 维护通道阵列,以便与 CM 进行数据交换。该过程涉及对数组进行排序,以根据预定的顺序分配通道,从而最大限度地利用消息 RAM 实现高效通信。

    IPC 块对数组进行排序,并根据排序后的顺序分配通道,这可能导致块中的通道选择与生成的代码中的通道选择不匹配。这种逻辑有助于我们最大限度地利用消息 RAM 与 CPUx 和 CM 进行通信。

    例如,根据模型上的通道选择:

    • CM-CPU1 channel selection - 如果 CM-CPU1 数组按 [0_Rx, 0_Tx, 1_Tx, 2_Rx, 4_Rx] 排序,则生成的代码中的相应条目为 [0_Rx, 0_Tx, 1_Tx, 2_Rx, 3_Rx]

    • CM-CPU2 channel selection - 如果 CM-CPU2 数组按如下方式排序:[0_Rx, 0_Tx, 2_Rx, 3_Tx, 5_Tx, 6_Tx],则生成的代码中的相应条目为 [0_Rx, 0_Tx, 1_Rx, 2_Tx, 3_Tx, 4_Tx]

  • Memory usage in CM message RAM - 当在模型中配置 IPC 发送或 Receive 块时,CM 消息 RAM 会使用 IPC 结构和缓冲区创建以下变量。例如,当 Buffer size = 2

    1. MW_IPCCMtoCPUxBuffers - 元素数量 =(通道数 * 缓冲区大小)- 大小 = 8 字节,用于存储数据类型、数据长度和数据结构。

    2. MW_Cpu1PutWriteIndexes - 元素数量 = 通道数 - 大小 = 2 字节

    3. MW_Cpu1GetReadIndexes - 元素数量 = 通道数 - 大小 = 2 字节

    4. MW_CPU1WRITEFLAGBUFF1 - 元素数量 = 通道数 - 大小 = 2 字节

    5. MW_CPU1WRITEFLAGBUFF2 - 元素数量 = 通道数 - 大小 = 2 字节

    6. MW_CPU1READFLAGBUFF1 - 元素数量 = 通道数 - 大小 = 2 字节

    7. MW_CPU1READFLAGBUFF2 - 元素数量 = 通道数 - 大小 = 2 字节

      根据通道选择和数据长度进行缓冲区分配

      • mwCpu1 通道<通道号>缓冲区 1

      • mwCpu1Channel<通道号>Buff2 - 元素数量 = 数据长度 (datalength) - 大小 4 字节

  • Memory usage in C28x message RAM - 当在模型中配置 IPC 发送或 Receive 块时,C28x 消息 RAM 会使用 IPC 结构和缓冲区创建以下变量。例如,当 Buffer size = 2

    1. MW_IPCCPUtoCMBuffers - 元素数量 =(通道数 * 缓冲区大小)- 大小 = 8 字节,用于存储数据类型、数据长度和数据结构。

    2. MW_CmPutWriteIndexes - 元素数量 = 通道数 - 大小 = 2 字节

    3. MW_CmGetReadIndexes - 元素数量 = 通道数量 - 大小 = 2 字节

    4. MW_CMWRITEFLAGBUFF1 - 元素数量 = 通道数 - 大小 = 2 字节

    5. MW_CMWRITEFLAGBUFF2 - 元素数量 = 通道数 - 大小 = 2 字节

    6. MW_CMREADFLAGBUFF1 - 元素数量 = 通道数 - 大小 = 2 字节

    7. MW_CMREADFLAGBUFF2 - 元素数量 = 通道数 - 大小 = 2 字节

      根据通道选择和数据长度进行缓冲区分配。

      • mwCmChannel<通道号>Buff1

      • mwCmChannel<channelNumber>Buff2 - 元素数量 = 数据长度 (datalength) - 大小 4 字节

示例

端口

输出

全部展开

从另一个核心读取数据。

状态端口输出以下值之一:

  • 0 - 无错误。

  • 1 — 数据不可用

  • 2 — 数据类型不匹配

  • 4 — 数据长度不匹配

  • 6 — 数据类型和数据长度不匹配

注意

当没有数据传输时,IPC 接收块接收到 0(uint16 数据类型),并显示数据类型不匹配状态。

参数

全部展开

您希望接收数据的来源。信号源的选择取决于您选择的处理器。对于 F2838x(C28x) 处理器,其源可以是 C28x (CPU1/CPU2) 或 ARM Cortex-M4 (CM)。对于 F2838x-M4 ARM 内核处理器,源是 CPU1 或 CPU2。

IPC Receive 块掩码显示当前源和所选通道。例如,如果该块显示 C28x_Ch0,则源为 C28x (CPU1/CPU2),通道为 0。同样,如果 IPC Receive 块显示 CM_Ch1,则源是 ARM Cortex-M4 (CM),通道是 1

注意

此参数仅适用于 F2838x(C28x) 和 F2838x-M4 ARM 内核处理器。

您希望接收数据的通道。每个通道都是共享内存中的一个独立内存位置。

注意

发射器和接收器各有 32 个通道用于发送和接收数据。数据传输和接收时,发射器和接收器必须设置为相同的频道号。

该模块接收的数据类型。

向量数据存储在全局共享 RAM 中,数据的地址存储在 MSGRAM 中。

每个采样时间点接收到的数据单元数量。如果数据长度为 1,则该块将每个传入的数据解释为标量值;如果数据长度大于 1,则该块将每个传入的数据解释为长度等于 Data length 向量。标量和向量数据的最大大小为 32 位。

启用后,核心会等待直到从另一个核心获得数据。

数据采样之间的时间间隔,以秒为单位。当您将此参数设置为-1,Simulink® 会根据模型中的模块上下文确定模块的最佳采样时间。

版本历史记录

在 R2018a 中推出