找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2087|回復(fù): 0
收起左側(cè)

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

[復(fù)制鏈接]
ID:336245 發(fā)表于 2021-7-7 09:05 | 顯示全部樓層 |閱讀模式
目錄
前 言
1 echo_test案例
1 案例功能
2 操作說明
3 關(guān)鍵代碼
3.1 linux_demo代碼說明
3.2 freertos_demo代碼說明
3.3 baremetal_demo代碼說明

前 言

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

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裸機(jī)可執(zhí)行文件
projectCPU1裸機(jī)工程
echo_test案例
案例功能
案例功能:CPU0使用RPMsg向CPU1發(fā)送數(shù)據(jù),CPU1接收到數(shù)據(jù)后再使用RPMsg向CPU0回傳數(shù)據(jù)。CPU0對回傳的數(shù)據(jù)進(jìn)行驗(yàn)證,并輸出驗(yàn)證結(jié)果。
操作說明
將CPU1裸機(jī)或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é)點(diǎn)。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進(jìn)行通信。
Target# ./echo_test


圖4

輸入1,并按回車鍵進(jìn)行測試。


​圖 5


​圖 6

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


​圖 7

執(zhí)行如下命令,停止CPU1程序。
Target# echo stop > /sys/class/remoteproc/remoteproc0/state


​圖 8

關(guān)鍵代碼
linux_demo代碼說明
打開RPMsg驅(qū)動設(shè)備節(jié)點(diǎn)。



​圖 9

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


​圖 10

freertos_demo代碼說明
創(chuàng)建processing任務(wù)。


​圖 11

(2)在processing()中進(jìn)行函數(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()對之前獲得的平臺信息、資源表信息進(jìn)行處理。創(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()中進(jìn)行事件處理。




​圖 22

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


​圖 23

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


​圖 24

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


​圖 25

baremetal_demo代碼說明

由于裸機(jī)與FreeRTOS程序相似,因此baremetal_demo代碼說明可參考freertos_demo代碼說明小節(jié),下面對部分代碼進(jìn)行補(bǔ)充說明。
在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()對之前獲得的平臺信息、資源表信息進(jìn)行處理。創(chuàng)建Remote Device,并為其設(shè)置增加、刪除、讀取RPMsg通道函數(shù)。


​圖 27

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


​圖 28

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

回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表