IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> TI C6000 TMS320C6678 ZYNQ OpenAMP 双核ARM 通信案例开发手册之echo_test案例 -> 正文阅读

[嵌入式]TI C6000 TMS320C6678 ZYNQ OpenAMP 双核ARM 通信案例开发手册之echo_test案例

目录

前 ?言

1 echo_test案例

1.1 案例功能

1.2 操作说明

1.3 关键代码

1.3.1 linux_demo代码说明

1.3.2 freertos_demo代码说明

1.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_demo

bin

CPU0应用程序可执行文件

src

CPU0应用程序源码

freertos_demo

bin

CPU1 FreeRTOS可执行文件

project

CPU1 FreeRTOS工程

baremetal_demo

bin

CPU1裸机可执行文件

project

CPU1裸机工程

  1. echo_test案例
  1. 案例功能

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

  1. 操作说明

将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

  1. 关键代码
  1. linux_demo代码说明
  1. 打开RPMsg驱动设备节点。

图 9

  1. 向CPU1发送数据,并对从CPU1回传的数据进行验证

图 10

  1. freertos_demo代码说明
  1. 创建processing任务。

图 11

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

图 12

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

图 13

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

图 14

图 15

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

图 16

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

图 17

  1. 以上函数调用成功后,再调用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

  1. baremetal_demo代码说明

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

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

图 26

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

图 27

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

图 28

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

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-07 00:04:22  更:2021-07-07 00:04:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 14:04:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码