5817|5

146

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

TMS320C6678 ZYNQ OpenAMP 双核ARM 通信案例开发手册之echo_test案例 [复制链接]

目录

前 言

1 echo_test案例

1 案例功能

2 操作说明

3 关键代码

3.1 linux_demo代码说明

3.2 freertos_demo代码说明

3.3 baremetal_demo代码说明


前 言

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

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评估板或其他产品详细资料,欢迎留言或者私聊!

 

最新回复

可以白嫖吗?   详情 回复 发表于 2021-7-15 22:57
点赞 关注
 

回复
举报

7452

帖子

2

TA的资源

五彩晶圆(高级)

沙发
 

板子看着不错,谢谢分享!

点评

感兴趣可以给发详细的售前资料  详情 回复 发表于 2021-7-15 14:24
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

146

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
freebsder 发表于 2021-7-7 17:46 板子看着不错,谢谢分享!

感兴趣可以给发详细的售前资料

点评

可以白嫖吗?  详情 回复 发表于 2021-7-15 22:57
 
 
 

回复

7452

帖子

2

TA的资源

五彩晶圆(高级)

4
 
别打牛牛 发表于 2021-7-15 14:24 感兴趣可以给发详细的售前资料

可以白嫖吗?

点评

可以添加,给你发  详情 回复 发表于 2021-7-16 09:51
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复

146

帖子

0

TA的资源

一粒金砂(高级)

5
 

Q:2310015505,wx:TLMKlife

 
 
 

回复

146

帖子

0

TA的资源

一粒金砂(高级)

6
 

可以添加,给你发

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表