1. 案例功能
TI AM5708的DSP端使用EDMA通過GPMC接口采集AD7606或ADS8568模塊8通道的AD信號(hào),同時(shí)由DSP端對其中6通道的AD信號(hào)進(jìn)行FFT處理,最后將8通道時(shí)域數(shù)據(jù)和經(jīng)FFT處理的6通道頻域數(shù)據(jù)保存到DSP端L2SRAM中,可通過仿真器與CCS軟件查看對應(yīng)通道的時(shí)域波形和頻域波形。
程序保存通道0的時(shí)域數(shù)據(jù)和經(jīng)FFT處理的頻域數(shù)據(jù)至CMEM(共享內(nèi)存)空間,通過IPC組件通知ARM端讀取該通道的時(shí)域數(shù)據(jù)和頻域數(shù)據(jù),使用Qt在LCD顯示屏上進(jìn)行波形繪制,最后將數(shù)據(jù)保存到文件中。
2. 案例框圖
3. 案例演示
3.1 硬件連接
案例基于創(chuàng)龍科技的TL570x-EVM(AM5708)評估板、TL7606I(AD7606)模塊、TL8568I(ADS8568)模塊進(jìn)行測試。
TL570x-EVM評估板簡介
(AM5708,C66x DSP+Cortex-A15 ARM )
TL7606I模塊硬件連接示意圖
TL8568I模塊硬件連接示意圖
3.2 案例測試
按照用戶手冊操作步驟進(jìn)行程序的加載,程序運(yùn)行后,即可在LCD顯示屏上看到通道0的時(shí)域波形和頻域波形。
亦可使用CCS軟件查看存儲(chǔ)在DSP端L2SRAM中的時(shí)域和頻域波形。
點(diǎn)擊菜單欄放大按鈕進(jìn)行放大查看,點(diǎn)擊打開游標(biāo)工具,再點(diǎn)擊X-Axis可查看到信號(hào)存在,如下圖所示。
程序已將6通道的頻域數(shù)據(jù)保存到DSP端L2SRAM,如需查看其他通道波形,請按照上述方法打開對應(yīng)通道地址查看即可。
4. 關(guān)鍵代碼
4.1 ARM(Host)端關(guān)鍵代碼
Qt程序框架
(1) 解析命令行參數(shù),并顯示Qt主窗口。
host/main.cpp
(2) 申請CMEM共享內(nèi)存空間,并轉(zhuǎn)換為實(shí)際物理地址。在共享內(nèi)存空間中申請兩個(gè)Buffer空間,分別用于存放AD信號(hào)時(shí)域數(shù)據(jù)和經(jīng)FFT處理的頻域數(shù)據(jù)。申請的兩個(gè)Buffer空間的內(nèi)存地址將會(huì)發(fā)送至DSP端,DSP端將一個(gè)通道的AD信號(hào)時(shí)域數(shù)據(jù)和經(jīng)FFT處理的頻域數(shù)據(jù)存放在Buffer空間。
host/app.c
(3) 發(fā)送App_CMD_SETUP消息類型至DSP端,該消息攜帶申請好的Buffer空間物理地址等信息,并等待DSP端返回消息。
(4) 發(fā)送App_CMD_TEST消息類型至DSP端,該消息主要通知DSP端進(jìn)行AD信號(hào)采集。DSP端每次采集512個(gè)點(diǎn),并保存AD信號(hào)時(shí)域數(shù)據(jù)和經(jīng)FFT處理的頻域數(shù)據(jù)。該消息還攜帶loop_times參數(shù),已設(shè)置為8。DSP端每循環(huán)8次,即采集并處理8x512=4096個(gè)點(diǎn)后返回消息至ARM端。
當(dāng)運(yùn)行“。/app_host 0x01000000 6 10000 /home/root 7606”命令時(shí),程序循環(huán)次數(shù)設(shè)置為10000,則總采樣點(diǎn)個(gè)數(shù)為:4096*10000=40960000。
host/app.c
(5) 發(fā)送App_CMD_SHUTDOWN信息類型至DSP端,通知DSP端結(jié)束程序的運(yùn)行,并等待DSP端返回消息。
host/app.c
(6) Qt App線程接收到DSP端的通知后,通過信號(hào)槽通知主線程繪制波形。
host/app_thread.cpp
(7) 分別繪制時(shí)域波形和頻域波形。
host/plot.cpp
(8) 將時(shí)域和頻域數(shù)據(jù)寫入文件。
host/file.cpp
4.2 DSP(Slave)端關(guān)鍵代碼
(1) 監(jiān)聽slaveQue消息隊(duì)列,等待ARM端發(fā)送消息。
根據(jù)消息攜帶的“msg-》cmd”參數(shù)來判斷不同的消息類型,從而進(jìn)入相應(yīng)的處理函數(shù)。處理結(jié)束后,返回消息至ARM端。
dsp1/Server.c
(2) 響應(yīng)ARM端發(fā)送的App_CMD_SETUP消息類型,調(diào)用ad_init和ad_test_init初始化函數(shù)。
dsp1/Server.c
ad_init()主要實(shí)現(xiàn)Timer、GPIO、GPMC等和AD芯片硬件相關(guān)的程序初始化。
ad_test_init()主要用于程序運(yùn)行環(huán)境的準(zhǔn)備,如信號(hào)量、內(nèi)存申請、EDMA3初始化、FFT初始化等。
dsp1/ad_test.c
(3) 程序通過EDMA GPIO event方式采集AD信號(hào)。
定時(shí)器創(chuàng)建后,將以固定的時(shí)間間隔進(jìn)入定時(shí)器中斷服務(wù)函數(shù)。在中斷服務(wù)函數(shù)中通過CONVST引腳觸發(fā)AD信號(hào)采集來控制采樣頻率。每次采集轉(zhuǎn)換完成后,AD芯片的Busy引腳將觸發(fā)GPIO2的下降沿中斷,從而觸發(fā)EDMA傳輸。
dsp1/ad_test.c
(4) EDMA傳輸完成后,將進(jìn)入EDMA中斷服務(wù)函數(shù)。
在中斷服務(wù)函數(shù)中統(tǒng)計(jì)采樣點(diǎn)個(gè)數(shù),當(dāng)采樣點(diǎn)個(gè)數(shù)達(dá)到ADC_SAMPLING_FFT_NUM(512)個(gè)后,將置位信號(hào)量,通知任務(wù)進(jìn)行數(shù)據(jù)處理。
dsp1/ad_test.c
(5) DSP端響應(yīng)ARM端發(fā)送的App_CMD_SETUP消息類型,調(diào)用ad_test()進(jìn)行數(shù)據(jù)處理。
① 使能定時(shí)器,使定時(shí)器按固定周期觸發(fā)AD信號(hào)采集。
② 阻塞等待信號(hào)量置位,信號(hào)量置位后,對數(shù)據(jù)進(jìn)行保存、FFT運(yùn)算等操作。
5. 應(yīng)用場合
6. 源碼、資料下載
案例源碼、產(chǎn)品資料(用戶手冊、核心板硬件資料、產(chǎn)品規(guī)格書)可點(diǎn)擊下方鏈接獲取。
http://site.tronlong.com/pfdownload
評論