久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2081|回復: 0
收起左側

TMS320C6678 ZYNQ OpenAMP 雙核ARM 通信案例開發手冊之echo_test案例

[復制鏈接]
ID:336245 發表于 2021-7-7 09:05 | 顯示全部樓層 |閱讀模式
目錄
前 言
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評估板或其他產品詳細資料,歡迎留言或者私聊!

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人99久久亚洲综合精品 | 欧美a在线观看 | 国产午夜久久久 | 国产 日韩 欧美 在线 | 一区二区三区视频在线 | 精品网站999| 久国产视频 | 国产h在线 | 一区二区在线看 | 久久高清 | 中文字幕动漫成人 | 久久久综合精品 | 国产在线观看一区二区三区 | 欧美综合在线视频 | 巨大黑人极品videos精品 | 成人免费淫片aa视频免费 | 天天操夜夜操 | av黄色在线 | 国产精品99久久久久久www | 日本成人二区 | 亚洲精品乱码 | 亚州综合在线 | 亚洲精品欧美 | 日韩三级免费网站 | 91视频一88av| 欧美黄色性生活视频 | 久久精品国产一区二区电影 | 成人免费在线视频 | 黄a网| 午夜欧美一区二区三区在线播放 | 天天插天天搞 | 久久专区 | 国产高清视频一区 | 激情国产在线 | 日本 欧美 三级 高清 视频 | www.亚洲一区二区 | 国产91九色 | 亚洲字幕在线观看 | 欧美日韩专区 | 久久久久久久久久久久久91 | 免费观看www7722午夜电影 |