嵌入式dsp开发环境_mcu芯片设计

(17) 2023-09-16 16:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说嵌入式dsp开发环境_mcu芯片设计,希望能够帮助你!!!。

前 言

分享DSP多核IPC通信案例开发手册,本篇文章内容包含有shmIpcBenchmark案例、qmssIpcBenchmark案例、srioIpcBenchmark案例。TI-IPC(Inter-Processor Communication)组件提供与处理器硬件无关的API,可用于多核处理器核间通信、同一处理器进程间通信和设备间通信。TI-IPC支持MessageQ、Notify和SharedRegion等常用的IPC模块,支持Shared Memory、Multicore Navigator和SRIO三种传输方式。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第1张

本次测试板卡为TMS320C6678开发板,它是一款基于TI KeyStone架构C6000系列TMS320C6678八核C66x定点/浮点DSP,以及Xilinx Zynq-7000系列XC7Z045/XC7Z100 SoC处理器设计的高端异构多核评估板,TMS320C6678开发板每核心主频可高达1.25GHz,XC7Z045/XC7Z100集成PS端双核ARM Cortex-A9 + PL端Kintex-7架构28nm可编程逻辑资源,引出双路CameraLink、双路SFP+光口、四路千兆网口、双路SATA、双路PCIe、四路USB、双路CAN、双路CAMERA、HDMI IN/OUT、LVDS、LCD、RS485、RS232、Micro SD、HPC FMC等接口。

基于RTOS的多核IPC通信案例目录说明如下表,其中bin目录存放程序可执行文件,project目录存放案例工程源文件。

表 1

目录

文件/目录

说明

bin

xxx.out

程序可执行文件

project

xxx.c

程序源码文件

xxx.cfg

RTSC配置文件

driver

驱动文件存放目录

system

平台文件存放目录

.ccsproject/.cproject/.project

CCS工程文件

本文档案例程序默认使用DSP端主频为1GHz的核心板,通过TL-XDS200仿真器加载运行进行操作效果演示。请通过Micro USB线将调试串口与PC机进行连接,打开串口调试终端SecureCRT并正确连接DSP端调试串口。

shmIpcBenchmark案例

案例说明

案例功能:C66xx_0核心向C66xx_1核心发送消息后,C66xx_1核心将收到的消息回传至C66xx_0核心。底层通过IPC的Shared Memory共享内存方式实现核间通信。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第2张

图 1

案例测试

将程序可执行文件分别加载至C66xx_0~C66xx_1核心后,再依次运行C66xx_0和C66xx_1核心程序,DSP端串口调试终端将会分别打印C66xx_0核心向C66xx_1核心发送单个消息的往返延迟(由C66xx_0核心统计),以及C66xx_0核心以突发方式将所有消息发送至C66xx_1核心的数据吞吐量(由C66xx_1核心统计)。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第3张

图 2

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第4张

图 3

关键代码

初始化C66xx_0核心,并等待C66xx_1核心初始化完成与连接成功。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第5张

图 4

C66xx_0与C66xx_1核心分别创建MessageQ。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第6张

图 5

动态创建任务shmIpcBenchmark。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第7张

图 6

注册HEAP_ID,并分别打开另一核心的MessageQ。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第8张

图 7

测试C66xx_0核心至C66xx_1核心的消息传输往返延迟。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第9张

图 8

C66xx_0核心以突发方式将所有消息发送到C66xx_1核心,C66xx_1核心接收所有消息并统计数据吞吐量。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第10张

图 9

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第11张

图 10

通过宏定义NUM_MSGS_TO_PREALLOC设置突发模式下的Message发送数量,并同步修改Program.global.shmSize的值大于(NUM_MSGS_TO_PREALLOC x 128)。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第12张

图 11

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第13张

图 12 project\shmIpcBenchmark.cfg

qmssIpcBenchmark案例

案例说明

案例功能:C66xx_0核心向C66xx_1核心发送消息后,C66xx_1核心将收到的消息回传至C66xx_0核心。底层通过IPC的Multicore Navigator(QMSS多核导航)方式实现核间通信。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第14张

图 13

案例测试

将程序可执行文件分别加载至C66xx_0~C66xx_1核心后,再依次运行C66xx_0和C66xx_1核心程序,DSP端串口调试终端将会分别打印C66xx_0核心向C66xx_1核心发送单个消息的往返延迟,以及C66xx_0核心以突发方式将所有消息发送至C66xx_1核心的数据吞吐量。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第15张

图 14

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第16张

图 15

关键代码

动态创建任务qmssIpcBenchmark。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第17张

图 16

初始化C66xx_0核心,并等待C66xx_1核心初始化完成与连接成功。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第18张

图 17 图 17

C66xx_0与C66xx_1核心分别创建MessageQ。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第19张

图 18

注册HEAP_ID,并分别打开另一核心的MessageQ。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第20张

图 19

测试C66xx_0核心至C66xx_1核心的消息传输往返延迟。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第21张

图 20

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第22张

图 21

C66xx_0核心以突发方式将所有消息发送到C66xx_1核心,C66xx_1核心接收所有消息并统计数据吞吐量。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第23张

图 22

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第24张

图 23

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第25张

图 24

通过宏定义NUM_MSGS_TO_PREALLOC设置突发模式下的Message发送数量,并同步修改Program.global.shmSize的值大于(NUM_MSGS_TO_PREALLOC x 128)。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第26张

图 25

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第27张

图 26 project\qmssIpcBenchmark.cfg

srioIpcBenchmark案例

案例说明

案例功能:C66xx_0核心向C66xx_1核心发送消息后,C66xx_1核心将收到的消息回传至C66xx_0核心。底层通过IPC的SRIO方式实现核间通信。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第28张

图 27

案例测试

将程序可执行文件分别加载至C66xx_0~C66xx_1核心后,再依次运行C66xx_0和C66xx_1核心程序,DSP端串口调试终端将会分别打印C66xx_0核心向C66xx_1核心发送单个消息的往返延迟,以及C66xx_0核心以突发方式将所有消息发送至C66xx_1核心的数据吞吐量。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第29张

图 28

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第30张

图 29

关键代码

初始化C66xx_0核心,并等待C66xx_1核心初始化完成与连接成功。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第31张

图 30

C66xx_0与C66xx_1核心分别创建MessageQ。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第32张

图 31

动态创建任务srioIpcBenchmark。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第33张

图 32

注册HEAP_ID,并分别打开另一核心的MessageQ。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第34张

图 33

测试C66xx_0核心至C66xx_1核心的消息传输往返延迟。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第35张

图 34

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第36张

图 35

C66xx_0核心以突发方式将所有消息发送到C66xx_1核心,C66xx_1核心接收所有消息并统计数据吞吐量。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第37张

图 36

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第38张

图 37

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第39张

图 38

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第40张

图 39

通过宏定义NUM_MSGS_TO_PREALLOC设置突发模式下的Message发送数量,并同步修改Program.global.shmSize的值大于(NUM_MSGS_TO_PREALLOC x 128)。

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第41张

图 40

嵌入式dsp开发环境_mcu芯片设计_https://bianchenghao6.com/blog__第42张

图 41

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复