日韩精品电影一二区-精品久久久久久亚洲中文字幕-一区二区三区国产美女在线播放-欧美日韩在线观看你懂的-午夜精品一区二区三区的区别-久久精品娱乐亚洲领-欧美在线网站一区二区三区-在线观看91精品国产不卡-国产水滴盗摄一区二区

創(chuàng)龍首頁 >關(guān)于創(chuàng)龍 > 新聞資訊 > 技術(shù)文章

聯(lián)系我們

Contact Us

公司總機:020-8998-6280

技術(shù)熱線:020-3893-9734

技術(shù)郵箱:support@tronlong.com

銷售郵箱:sales@tronlong.com

TMS320C6678 ZYNQ OpenAMP 雙ZYNQ 通信案例開發(fā)手冊之echo_test案例

2021/07/07

前言

本文主要介紹ZYNQ基于OpenAMP框架的雙核ARM通信案例的使用說明,CPU0(Master)運行Linux系統(tǒng),CPU1(Remote)運行裸機或FreeRTOS程序。CPU0使用remoteproc加載CPU1程序,并對CPU1進行配置。

圖1


echo_test案例開發(fā)手冊是基于創(chuàng)龍科技 TI TMS320C6678 + Xilinx Zynq-7045的高速多路高清視頻采集處理平臺,采用DSP+FPGA+ARM架構(gòu)。

SOM-TL6678ZH核心板正面圖

SOM-TL6678ZH核心板背面圖


TL6678ZH-EVM評估板資源圖1


TL6678ZH-EVM評估板資源圖2

表 1


目錄說明

linux_demobinCPU0應(yīng)用程序可執(zhí)行文件

srcCPU0應(yīng)用程序源碼

freertos_demobinCPU1 FreeRTOS可執(zhí)行文件

projectCPU1 FreeRTOS工程

baremetal_demobinCPU1裸機可執(zhí)行文件

projectCPU1裸機工程

echo_test案例


案例功能

案例功能:CPU0使用RPMsg向CPU1發(fā)送數(shù)據(jù),CPU1接收到數(shù)據(jù)后再使用RPMsg向CPU0回傳數(shù)據(jù)。CPU0對回傳的數(shù)據(jù)進行驗證,并輸出驗證結(jié)果。


操作說明

將CPU1裸機或FreeRTOS可執(zhí)行文件復(fù)制到評估板文件系統(tǒng)“/lib/firmware/”目錄下,并執(zhí)行如下命令加載CPU1程序。

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

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


圖 2

執(zhí)行如下命令加載RPMsg驅(qū)動,并在“/dev/”目錄下生成RPMsg設(shè)備節(jié)點。RPMsg驅(qū)動源碼為內(nèi)核“drivers/rpmsg/”目錄下的rpmsg_user_dev_driver.c文件。

Target# modprobe rpmsg_user_dev_driver

圖 3

將CPU0應(yīng)用程序可執(zhí)行文件復(fù)制到評估板文件系統(tǒng),并執(zhí)行如下命令通過RPMsg與CPU1進行通信。

Target# ./echo_test


圖4


輸入1,并按回車鍵進行測試。


圖 5


圖 6

輸入2,并按回車鍵退出測試。


圖 7


執(zhí)行如下命令,停止CPU1程序。

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


圖 8


關(guān)鍵代碼

linux_demo代碼說明

打開RPMsg驅(qū)動設(shè)備節(jié)點。


圖 9


向CPU1發(fā)送數(shù)據(jù),并對從CPU1回傳的數(shù)據(jù)進行驗證。


圖 10


freertos_demo代碼說明

創(chuàng)建processing任務(wù)。


圖 11


(2)在processing()中進行函數(shù)調(diào)用。


圖 12


調(diào)用init_system()初始化libmetal庫與GIC控制器等。


圖13


綁定中斷號與中斷服務(wù)函數(shù),中斷號需與設(shè)備樹配置的中斷號一致。


圖 14

圖 15

調(diào)用platform_create_proc()創(chuàng)建平臺相關(guān)信息。


圖 16


調(diào)用get_resource_table()獲取資源表信息,資源表包含內(nèi)存和virtio設(shè)備資源。virtio設(shè)備包含vring地址、vring大小和vring對齊方式等信息。


圖 17


(13)以上函數(shù)調(diào)用成功后,再調(diào)用app()。


圖 18


調(diào)用remoteproc_resource_init()對之前獲得的平臺信息、資源表信息進行處理。創(chuàng)建Remote Device,并為其設(shè)置增加、刪除、讀取RPMsg通道函數(shù)。


圖 19


調(diào)用hil_poll()以阻塞的方式調(diào)用poll函數(shù),并等待數(shù)據(jù)接收。


圖 20

圖 21

在數(shù)據(jù)讀取函數(shù)rpmsg_read_cb()中,將接收到的數(shù)據(jù)放入緩沖區(qū)后產(chǎn)生數(shù)據(jù)接收事件,并在app()中進行事件處理。


圖 22

在virtio設(shè)備復(fù)位函數(shù)virtio_rst_cb()中產(chǎn)生復(fù)位virtio事件,并在app()中進行事件處理。


圖 23


在RPMsg通道創(chuàng)建函數(shù)rpmsg_channel_created()中,創(chuàng)建一個全局RPMsg端點,并設(shè)置端點讀取函數(shù)。RPMsg通信通過端點完成,與USB類似。


圖 24

在RPMsg通道刪除函數(shù)rpmsg_channel_deleted()中,刪除RPMsg端點同時產(chǎn)生通道刪除事件,并在app()中進行事件處理。


圖 25


baremetal_demo代碼說明

由于裸機與FreeRTOS程序相似,因此baremetal_demo代碼說明可參考freertos_demo代碼說明小節(jié),下面對部分代碼進行補充說明。


在main()中調(diào)用init_system()初始化libmetal庫與GIC控制器等。調(diào)用platform_create_proc()創(chuàng)建平臺相關(guān)信息。調(diào)用get_resource_table()獲取資源表信息。以上函數(shù)調(diào)用成功后,再調(diào)用app()。


圖 26


調(diào)用remoteproc_resource_init()對之前獲得的平臺信息、資源表信息進行處理。創(chuàng)建Remote Device,并為其設(shè)置增加、刪除、讀取RPMsg通道函數(shù)。


圖 27


在數(shù)據(jù)讀取函數(shù)rpmsg_read_cb()中,對從CPU0接收到的數(shù)據(jù)進行判斷,并進行不同處理(關(guān)機或回傳數(shù)據(jù)),實現(xiàn)通信和生命周期管理。


圖 28


如需獲取案例源碼、TL6678ZH-EVM評估板或其他產(chǎn)品詳細資料,歡迎留言或者私聊!


Copyright © 2013~2025 廣州創(chuàng)龍電子科技有限公司 All Rights Reserved  | 粵ICP備15055271號