原创 TMS320C6678 ZYNQ 双核ARM通信案例开发手册之matrix_multiply案例

2021-7-7 13:43 3236 13 3 分类: FPGA/CPLD

目 录

2 matrix_multiply案例

2.1 案例功能

2.2 操作说明

2.3 关键代码

2.3.1 linux_demo代码说明

2.3.2 freertos_demo代码说明

2.3.3 baremetal_demo代码说明

3 内存分配说明

4 案例编译说明

4.1 CPU0应用程序编译

4.2 CPU1裸机与FreeRTOS程序编译

前  言

本文主要介绍ZYNQ基于OpenAMP框架的双核ARM通信案例的使用说明,CPU0(Master)运行Linux系统,CPU1(Remote)运行裸机或FreeRTOS程序。CPU0使用remoteproc加载CPU1程序,并对CPU1进行配置。 

 图 1

 

matrix_multiply案例开发手册是基于创龙科技 TI TMS320C6678 + Xilinx Zynq-7045的高速多路高清视频采集处理平台,采用DSP+FPGA+ARM架构。

 

SOM-TL6678ZH核心板正面图 

SOM-TL6678ZH核心板背面图

 

TL6678ZH-EVM评估板资源图1

 ​TL6678ZH-EVM评估板资源图2

表 1


1 matrix_multiply案例1 案例功能

案例功能:CPU0随机生成两个矩阵并使用RPMsg向CPU1发送数据,CPU1接收到数据后进行矩阵乘法运算,再使用RPMsg向CPU0回传运算结果,然后CPU0通过串口终端输出运算结果。

2 操作说明

将CPU1裸机或FreeRTOS可执行文件复制到评估板文件系统“/lib/firmware/”目录下,并执行如下命令加载CPU1程序。

Target# echo matrix_multiply.elf > /sys/class/remoteproc/remoteproc0/firmware

Target# echo start > /sys/class/remoteproc/remoteproc0/state

 图 29

 

执行如下命令加载RPMsg驱动,并在“/dev/”目录下生成RPMsg设备节点。

Target# modprobe rpmsg_user_dev_driver

图 30

将CPU0应用程序可执行文件复制到评估板文件系统,并执行如下命令通过RPMsg与CPU1进行通信。

Target# ./mat_mul_demo

图 31

输入1,并按回车键进行测试。

图 32

 输入2,并按回车键退出测试。

图 33

执行如下命令,停止CPU1程序。

Target# echo stop > /sys/class/remoteproc/remoteproc0/state

 

图 34

 

3 关键代码

由于本案例大部分代码与echo_test案例基本一致,因此代码说明可参考echo_test案例代关键代码章节,下面对部分代码进行补充说明。

2.3.1 linux_demo代码说明

(1) 打开RPMsg驱动设备节点,创建ui_thread_entry、compute_thread_entry线程。

图 35

2.3.2 freertos_demo代码说明

(1) 在app()中进行矩阵乘法运算,并向CPU0回传运算结果。

图 36

3.3 baremetal_demo代码说明

(1) 在数据读取函数rpmsg_read_cb()中,对从CPU0接收到的数据进行判断,并进行不同处理(关机或回传数据),实现通信和生命周期管理。

图 37

3.4内存分配说明

PS端DDR容量为1GByte,内存地址分配如下:

 表 2

如需修改CPU1程序(OpenAMP-remote app)内存地址空间范围,可通过更改设备树文件、资源表rsc_table.c及链接文件lscript.ld对内存地址空间进行重新分配。三者需同步修改并保持一致,以确保固件程序链接地址与设备树配置的elf_ddr_0对应。所使用的资源(内存和virtio设备资源)不能超出设备树文件配置的内存范围。TL6678ZH-EVM评估板使用的设备树文件为tl6678zh-evm.dts,该设备树文件会调用tlz7x-easyevm.dts,因此实际需修改的文件为tlz7x-easyevm.dts。

图 38 设备树文件tlz7x-easyevm.dts配置

图 39 设备树文件tlz7x-easyevm.dts配置 

图 40 CPU1程序资源表rsc_table.c配置 

图 41 CPU1程序链接文件lscript.ld配置 

  • 案例编译说明
  • 4.1 CPU0应用程序编译

    请参考“ZYNQ Linux开发环境搭建”文档配置好交叉编译工具链,并将CPU0应用程序源码目录拷贝至Ubuntu,然后在源码目录下执行如下命令进行编译。

    Host# make CC=arm-linux-gnueabihf-gcc

      

    图 42

    由于matrix_multiply案例使用线程相关函数,编译时需增加-pthread编译选项。

    Host# make CC=arm-linux-gnueabihf-gcc CFLAGS=-pthread

    图 43

     

    4 .2 CPU1裸机与FreeRTOS程序编译

    请参考“ZYNQ PS端裸机与FreeRTOS案例开发手册”进行工程编译。由于案例路径发生改变后会无法识别到BSP源文件,编译前请参考如下操作更新BSP源文件。

    双击案例xxx_bsp目录下的system.mss,在弹出的界面点击“Re-generate BSP Source”。 

    图 44

     

    点击Yes重新更新BSP源文件后,即可正常编译。

    图 45

    图 46

     补充说明

    案例工程默认已增加“-DUSE_AMP=1”编译选项。增加此编译选项后,仅允许CPU0对GIC、L2等共享资源初始化。

    如新建工程,可参考如下方法进行设置。

    (1) 右击BSP包,点击Board Support Package Settings。

     图 47

     

    (2) 点击“ps7_cortexa9_1 -> extra_compiler_flags”,增加“-DUSE_AMP=1”编译选项。

    图 48

     

    ​ 如需获取案例源码、TL6678ZH-EVM评估板或其他产品详细资料,欢迎留言或者私聊!

    作者: Tronlong, 来源:面包板社区

    链接: https://mbb.eet-china.com/blog/uid-me-3881012.html

    版权声明:本文为博主原创,未经本人允许,禁止转载!

    PARTNER CONTENT

    文章评论1条评论)

    登录后参与讨论

    商业资讯 2021-8-3 15:33

    图片没了
    相关推荐阅读
    Tronlong 2024-11-29 09:53
    国产!瑞芯微RK3576(八核@2.2GHz+6T NPU)工业开发板规格书
    1 评估板简介创龙科技TL3576-EVM是一款基于瑞芯微RK3576J/RK3576高性能处理器设计的四核ARM Cortex-A72 + 四核ARM Cortex-A53 + 单核ARM ...
    Tronlong 2024-11-25 09:37
    RK3588J成功适配“欧拉”系统!助力能源电力国产OS!
    粤港澳大湾区国家技术创新中心(简称“大湾区国创中心”)是根据国家战略部署打造的跨区域、跨领域、跨学科、跨产业的三个综合类国家技术创新中心之一,是国家在粤港澳大湾区布局的战略科技力量。为了满足用户对于欧...
    我要评论
    1
    13
    关闭 站长推荐上一条 /3 下一条