网站首页 > 技术文章 正文
目录
前 言
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
表 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评估板或其他产品详细资料,欢迎留言或者私聊!
猜你喜欢
- 2024-11-24 「论文集锦」激光技术应用——《电子技术应用》优秀论文集锦
- 2024-11-24 基于MCAPI的多核软件开发方法
- 2024-11-24 硬件工程师必读!多款ARM、FPGA、DSP开发板/核心板测试使用大全
- 2024-11-24 基于多核DSP互联架构的SAR处理研究与设计
- 2024-11-24 基于TL6678F-EasyEVM评估板——DSP算法案例开发手册
- 2024-11-24 「方案分享」基于C6678+Zynq-7045 目标追踪视觉技术
- 2024-11-24 SAR成像的距离多普勒算法(RDA)的硬件实现
- 2024-11-24 AD9361、AD9613高速AD采集处理开发案例,基于C6678+Kintex-7
- 2024-11-24 基于TMS320C6678开发板的ZYNQ PS + PL异构多核案例开发手册(3)
- 2024-11-24 TMS320C6678开发板 ZYNQ PS + PL异构多核案例开发手册(4)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)