F2837xD/F2838x/F2838x-M4 IPC Receive
使用为每个核心单独建模的方式,从任一核心接收数据。
库:
C2000 Microcontroller Blockset /
F2837xD
C2000 Microcontroller Blockset /
F2838x /
C28x
C2000 Microcontroller Blockset /
F2838x /
M4
C2000 Microcontroller Blockset /
F28p65x
描述
IPC Receive 模块接收并输出从一个内核发送到另一个内核的数据。
注意
对于多核处理器,使用 IPC 接收和 IPC 发送模块来接收或发送数据到任一核心。这些模块适用于扁平模型方法,其中每个核心都使用单独的模型。
如果您使用多处理器建模方法,并且使用任务管理器通过单个模型触发多个核心,请使用 Interprocess Data Read 和 Interprocess 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 1 和 PIE interrupt numbers 13 和 15 14 16。
IPC 平面模型的内存分配
Channel assignment、Memory 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:
MW_IPCCMtoCPUxBuffers - 元素数量 =(通道数 * 缓冲区大小)- 大小 = 8 字节,用于存储数据类型、数据长度和数据结构。
MW_Cpu1PutWriteIndexes - 元素数量 = 通道数 - 大小 = 2 字节
MW_Cpu1GetReadIndexes - 元素数量 = 通道数 - 大小 = 2 字节
MW_CPU1WRITEFLAGBUFF1 - 元素数量 = 通道数 - 大小 = 2 字节
MW_CPU1WRITEFLAGBUFF2 - 元素数量 = 通道数 - 大小 = 2 字节
MW_CPU1READFLAGBUFF1 - 元素数量 = 通道数 - 大小 = 2 字节
MW_CPU1READFLAGBUFF2 - 元素数量 = 通道数 - 大小 = 2 字节
根据通道选择和数据长度进行缓冲区分配
mwCpu1 通道<通道号>缓冲区 1
mwCpu1Channel<通道号>Buff2 - 元素数量 = 数据长度 (datalength) - 大小 4 字节
Memory usage in C28x message RAM - 当在模型中配置 IPC 发送或 Receive 块时,C28x 消息 RAM 会使用 IPC 结构和缓冲区创建以下变量。例如,当 Buffer size = 2:
MW_IPCCPUtoCMBuffers - 元素数量 =(通道数 * 缓冲区大小)- 大小 = 8 字节,用于存储数据类型、数据长度和数据结构。
MW_CmPutWriteIndexes - 元素数量 = 通道数 - 大小 = 2 字节
MW_CmGetReadIndexes - 元素数量 = 通道数量 - 大小 = 2 字节
MW_CMWRITEFLAGBUFF1 - 元素数量 = 通道数 - 大小 = 2 字节
MW_CMWRITEFLAGBUFF2 - 元素数量 = 通道数 - 大小 = 2 字节
MW_CMREADFLAGBUFF1 - 元素数量 = 通道数 - 大小 = 2 字节
MW_CMREADFLAGBUFF2 - 元素数量 = 通道数 - 大小 = 2 字节
根据通道选择和数据长度进行缓冲区分配。
mwCmChannel<通道号>Buff1
mwCmChannel<channelNumber>Buff2 - 元素数量 = 数据长度 (datalength) - 大小 4 字节
示例
端口
输出
参数
版本历史记录
在 R2018a 中推出

