tms320c6678 zynq openamp 双zynq 通信案例开发手册之echo-pg直营网

    pg直营网-pg网赌游戏 >关于创龙 > 新闻资讯 > 技术文章

    联系pg直营网

    contact us

    公司总机:020-8998-6280

    技术热线:020-3893-9437

    技术邮箱:support@tronlong.com

    销售邮箱:sales@tronlong.com

    tms320c6678 zynq openamp 双zynq 通信案例开发手册之echo_test案例

    2021/07/07

    前言

    本文主要介绍zynq基于openamp框架的双核arm通信案例的使用说明,cpu0(master)运行linux系统,cpu1(remote)运行裸机或freertos程序。cpu0使用remoteproc加载cpu1程序,并对cpu1进行配置。

    图1


    echo_test案例开发手册是基于创龙科技 ti tms320c6678 xilinx zynq-7045的高速多路高清视频采集处理平台,采用dsp fpga arm架构。

    som-tl6678zh核心板正面图

    som-tl6678zh核心板背面图


    tl6678zh-evm评估板资源图1


    tl6678zh-evm评估板资源图2

    表 1


    目录说明

    linux_demobincpu0应用程序可执行文件

    srccpu0应用程序源码

    freertos_demobincpu1 freertos可执行文件

    projectcpu1 freertos工程

    baremetal_demobincpu1裸机可执行文件

    projectcpu1裸机工程

    echo_test案例


    案例功能

    案例功能:cpu0使用rpmsg向cpu1发送数据,cpu1接收到数据后再使用rpmsg向cpu0回传数据。cpu0对回传的数据进行验证,并输出验证结果。


    操作说明

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

    target# echo echo_test.elf > /sys/class/remoteproc/remoteproc0/firmware

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


    图 2

    执行如下命令加载rpmsg驱动,并在“/dev/”目录下生成rpmsg设备节点。rpmsg驱动源码为内核“drivers/rpmsg/”目录下的rpmsg_user_dev_driver.c文件。

    target# modprobe rpmsg_user_dev_driver

    图 3

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

    target# ./echo_test


    图4


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


    图 5


    图 6

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


    图 7


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

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


    图 8


    关键代码

    linux_demo代码说明

    打开rpmsg驱动设备节点。


    图 9


    向cpu1发送数据,并对从cpu1回传的数据进行验证。


    图 10


    freertos_demo代码说明

    创建processing任务。


    图 11


    (2)在processing()中进行函数调用。


    图 12


    调用init_system()初始化libmetal库与gic控制器等。


    图13


    绑定中断号与中断服务函数,中断号需与设备树配置的中断号一致。


    图 14

    图 15

    调用platform_create_proc()创建平台相关信息。


    图 16


    调用get_resource_table()获取资源表信息,资源表包含内存和virtio设备资源。virtio设备包含vring地址、vring大小和vring对齐方式等信息。


    图 17


    (13)以上函数调用成功后,再调用app()。


    图 18


    调用remoteproc_resource_init()对之前获得的平台信息、资源表信息进行处理。创建remote device,并为其设置增加、删除、读取rpmsg通道函数。


    图 19


    调用hil_poll()以阻塞的方式调用poll函数,并等待数据接收。


    图 20

    图 21

    在数据读取函数rpmsg_read_cb()中,将接收到的数据放入缓冲区后产生数据接收事件,并在app()中进行事件处理。


    图 22

    在virtio设备复位函数virtio_rst_cb()中产生复位virtio事件,并在app()中进行事件处理。


    图 23


    在rpmsg通道创建函数rpmsg_channel_created()中,创建一个全局rpmsg端点,并设置端点读取函数。rpmsg通信通过端点完成,与usb类似。


    图 24

    在rpmsg通道删除函数rpmsg_channel_deleted()中,删除rpmsg端点同时产生通道删除事件,并在app()中进行事件处理。


    图 25


    baremetal_demo代码说明

    由于裸机与freertos程序相似,因此baremetal_demo代码说明可参考freertos_demo代码说明小节,下面对部分代码进行补充说明。


    在main()中调用init_system()初始化libmetal库与gic控制器等。调用platform_create_proc()创建平台相关信息。调用get_resource_table()获取资源表信息。以上函数调用成功后,再调用app()。


    图 26


    调用remoteproc_resource_init()对之前获得的平台信息、资源表信息进行处理。创建remote device,并为其设置增加、删除、读取rpmsg通道函数。


    图 27


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


    图 28


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


    联系创龙

    公司总机:020-8998-6280

    技术热线:020-3893-9734

    技术邮箱:support@tronlong.com

    销售邮箱:sales@tronlong.com



    创龙官方微信公众号

    pg直营网 copyright © 2013~2021 广州创龙电子科技有限公司 all rights reserved  |

    网站地图