AM57x 多核SoC開發板——GPMC的多通道AD採集綜合案例手冊(上)

目 錄
1 ————案例功能
2 ————操作說明
2.1 ————硬體連接
2.2 ————案例測試
2.3 ————使用CCS查看訊號波形
2.3.1 ————載入Symbols資訊表
2.3.2 ————查看時域波形
2.3.3 ————查看頻域波形
3 ————案例編譯
4 ————關鍵程式碼
4.1 ————ARM(Host)端關鍵程式碼
4.2 ————DSP(Slave)端關鍵程式碼

 

本文檔適用開發環境:

Windows開發環境:Windows 7 64bit、Windows 10 64bit

Linux Processor SDK:ti-processor-sdk-linux-rt-am57xx-evm-04.03.00.05

RTOS Processor SDK:ti-processor-sdk-rtos-am57xx-evm-04.03.00.05

CCS:CCS7.4

 

本案例主要是通過GPMC介面採集AD7606或ADS8568模組輸入的AD訊號,由DSP端對AD訊號進行FFT處理,並由ARM端對AD訊號進行Qt波形繪製、數據保存等,其中使用到的測試板卡為創龍科技的TL570x-EVM工業開發板。

創龍科技TL570x-EVM是一款基於TI Sitara系列AM5708 ARM Cortex-A15 + 浮點DSP C66x處理器設計的異構多核SoC評估板,由核心板和評估底板組成。典型應用在運動控制、工業PC、機器視覺、智慧電力、影片監測等領域。

核心板經過專業的PCB Layout和高低溫測試驗證,穩定可靠,可滿足各種工業應用環境。開發板介面資源豐富,引出雙路PRU百兆網口、千兆網口、USB 3.0、CAMERA、GPMC、HDMI、PCIe等介面,方便用戶快速進行產品方案評估與技術預研。

 

案例功能

AM570x DSP端使用EDMA通過GPMC介面採集AD7606或ADS8568模組8通道的AD訊號,同時由DSP端對其中6通道的AD訊號進行FFT處理,最後將8通道時域數據和經FFT處理的6通道頻域數據保存到DSP端L2SRAM中,可通過模擬器與CCS軟體查看對應通道的時域波形和頻域波形。

程式保存通道0的時域數據和經FFT處理的頻域數據至CMEM(共享記憶體)空間,通過IPC組件通知ARM端讀取該通道的時域數據和頻域數據,使用Qt在LCD顯示器上進行波形繪製,最後將數據保存到文件中。

本案例默認配置AD7606模組取樣周期為6us,即取樣率約為167KHz;配置ADS8568模組取樣周期分別為5us,即取樣率為200KHz。程式工作流程圖如下所示:

圖 1

操作說明

硬體連接

將Tronlong的TL7606I(AD7606)模組或TL8568I(ADS8568)模組插入評估板GPMC擴展介面,並對模組進行獨立供電。TL7606I模組使用5V電源供電,J1跳線帽連接到0,使用±5V量程。TL8568I模組使用12V電源供電,軟體已配置為±12V量程。

將模組的待測輸通道正確連接訊號發生器,訊號發生器輸出頻率為4KHz、峰峰值為2Vpp(即幅值為1V)的正弦波訊號。待測訊號電壓請勿超過模組量程,否則可能會導致模組損壞。評估板接入LCD顯示器,並通過模擬器連接到PC機。硬體連接示意圖如下:

圖 2 TL7606I模組硬體連接示意圖
圖 3 TL7606I模組硬體連接示意圖
圖 4 TL8568I模組硬體連接示意圖
  1. 案例測試

案例位於產品資料「4-軟體資料\Demo\rtos-examples\tl-linux-ipc-examples\tl-gpmc-ad-fft\」目錄下,案例目錄說明如下。

圖 5

表 1

bin目錄

app_host

ARM端可執行文件

load-firmware.sh

DSP端可執行文件運行腳本

server_dsp1.xe66

DSP端可執行文件

lib目錄

libqwt-6.1.3.tar.gz

QWT庫壓縮包

src目錄

dsp1目錄

存放DSP端源碼和配置文件等

host目錄

存放ARM端源碼和配置文件等

ludev目錄

存放共享記憶體庫源碼和鏡像文件等

shared目錄

存放多核共用程式碼定義相關文件

makefile

頂層Makefile文件,用於構建整個案常式序

products.mak

頂層配置文件,用於配置編譯環境

由於本案例需依賴QWT庫文件,因此請將libqwt-6.1.3.tar.gz壓縮包解壓,並將解壓目錄中的lib目錄下的libqwt.so、libqwt.so.6、libqwt.so.6.1、libqwt.so.6.1.3此四個QWT庫文件拷貝到文件系統「/usr/lib/」目錄下。同時將bin目錄下的app_host、server_dsp1.xe66、load-firmware.sh此三個文件拷貝到評估板文件系統同一個目錄下。

 

圖 6

Linux內核預留0xa0000000~0xac000000(192MByte)記憶體作為CMEM共享記憶體,案例使用0xa0000000~0xa0008000(32KByte)記憶體進行測試,此32KByte記憶體劃分為2個16KByte (0x4000,16384)池空間,分別用於存放模組通道0的時域數據和頻域數據。

進入評估板文件系統執行如下命令。

備註:由於CMEM共享記憶體地址空間已超過512MByte,故如下測試僅支援DDR3不小於1GByte的評估板。

Target# /etc/init.d/matrix-gui-2.0 stop //關閉Matrix介面程式

Target# pkill ti-mctd //禁用ti-mctd服務,避免cmemk驅動卸載失敗

Target# rmmod cmemk //卸載cmemk驅動

Target# modprobe cmemk phys_start=0xa0000000 phys_end=0xa0008000 pools=2×16384 //劃分2個16KByte池空間

Target# cat /proc/cmem //查看CMEM配置

圖 7
 
圖 8

進入app_host、server_dsp1.xe66、load-firmware.sh文件所在目錄並執行如下命令,運行DSP端程式。

Target# ./load-firmware.sh

圖 9

執行如下命令可查看ARM端程式參數說明。

Target# ./app_host -h

 

圖 10

執行如下命令,運行ARM端程式。

Target# ./app_host 0x01000000 6 10000 /home/root/ 7606

命令參數說明:

0x01000000:指定GPMC片選首地址,使用的GPMC片選為CS0。

6:指定訊號採集周期(單位:us)。TL7606I模組設置為6,TL8568I模組設置為5。

10000:指定採集循環次數。

/home/root/:指定模組通道0的時域數據和頻域數據的保存路徑。時域數據保存文件為ad_raw_data.txt,頻域數據保存文件為ad_fft_data.txt。

7606:指定模組型號。TL7606I模組設置為7606,TL8568I模組設置為8568。

 

圖 11 TL7606I模組運行命令

 

圖 12 TL8568I模組運行命令

程式運行後,即可在LCD顯示器上看到通道0的時域波形和頻域波形。

圖 13 時域波形
圖 14 頻域波形
  1. 使用CCS查看訊號波形

在程式運行過程中可使用CCS軟體查看存儲在DSP端L2SRAM中的時域和頻域波形。

載入Symbols資訊表

進入app_host、server_dsp1.xe66、load-firmware.sh文件所在目錄執行如下命令,運行DSP端程式。

Target# ./load-firmware.sh

驅動默認配置DSP端的電源控制模式為auto-suspend(自動休眠),當DSP端處於休眠狀態時,CCS將無法連接DSP端。

請執行如下命令設置電源控制模式為on,禁用auto-suspend模式。

Target# echo “on” > /sys/bus/platform/devices/40800000.dsp/power/control

請執行如下命令禁用錯誤恢復功能,避免發生錯誤時系統自動重啟DSP端,干擾調試。

Target# echo disabled > /sys/kernel/debug/remoteproc/remoteproc2/recovery

請執行如下命令,運行ARM端程式(以TL7606I模組為例)。

Target# ./app_host 0x01000000 6 10000 /home/root/ 7606

圖 15

打開CCS,創建模擬配置文件後進入Debug介面,右鍵點擊「Connect Target」連接DSP端,如下圖所示。連接後DSP端程式將會暫停運行,請點擊

按鍵恢復運行。

圖 16

由於程式調試需用到鏡像文件中的Symbols資訊表,因此請點擊「Run -> Load -> Load Symbols…」載入案例bin目錄下的server_dsp1.xe66鏡像文件導入Symbols資訊表。

備註:請確保載入的server_dsp1.xe66文件與當前DSP端運行的是同一個鏡像文件,否則可能導致符號地址不一致以及模擬運行錯誤。

 

圖 17
 

圖 18

查看時域波形

點擊「View -> Memory Browser」,在彈出介面的搜索欄搜索ch_raw_buffer數組,該數組存放時域數據,搜索結果如下圖所示。ch_raw_buffer數組包含8個地址,從左到右分別對應存放通道0至7時域數據的起始地址,例如0x00828EA0為存放通道0時域數據的起始地址。

圖 19

點擊「Tools -> Graph -> Single Time」,如下圖所示。

圖 20

在彈出介面中按照下圖內容進行配置,然後點擊OK,即可查看AD訊號的時域波形。

圖 21

表 2

Acquisition Buffer Size

從Start Address開始讀取的數據長度

Dsp Data Type

讀取的數據類型

Start Address

從Start Addres開始讀取數據

Display Data Size

顯示的數據長度(即將多少個取樣點的數據進行顯示,該數值不能大於Acquisition Buffer Size)

圖 22

程式已將8通道的時域數據保存到DSP端L2SRAM,如需查看其他通道波形,請按照上述方法打開對應通道地址查看即可。

本次使用TL7606I模組進行測試,在上圖中可看到通道0的時域波形,波形的幅值約為6796。從CCS看到的波形值為AD晶片內部暫存器保存的數字量,從AD7606和ADS8568的晶片數據手冊得到的換算公式均為:數字量=待測量/量程*32768,則AD訊號實際幅值=數字量*量程/32768=6796*5V/32768=1.04V,與訊號發生器的1V標稱值接近。

查看頻域波形

點擊「View -> Memory Browser」,在彈出介面的搜索欄搜索ch_fft_buffer數組,該數組存放頻域數據,搜索結果如下圖所示。ch_fft_buffer數組包含8個地址,從左到右分別對應存放通道0至7頻域數據的起始地址,例如0x008292A0為存放通道0頻域數據的起始地址。

備註:由於受處理器的性能限制,程式默認只對通道0~5進行FFT處理,因此ch_fft_buffer數組未存放通道6和7頻域數據。

圖 23

點擊「Tools -> Graph -> Single Time」,如下圖所示。

圖 24

在彈出介面中按照下圖內容進行配置,然後點擊OK,即可查看AD訊號的頻域波形。

圖 25

 

表 3

Acquisition Buffer Size

從Start Address開始讀取的數據長度

Dsp Data Type

讀取的數據類型

Index Increment

索引增量(即每個取樣點數據序號的相差值,由於FFT數據以複數形式存儲,只取複數中的實部進行顯示,因此設置成2,隔點取值顯示)

Start Address

從Start Addres開始讀取數據

Display Data Size

顯示的數據長度(即將多少個取樣點的數據進行顯示,該數值不能大於Acquisition Buffer Size)

圖 26

點擊菜單欄放大按鈕進行放大查看,點擊

打開游標工具,再點擊X-Axis可查看到訊號存在,如下圖所示。

圖 27
 

程式已將6通道的頻域數據保存到DSP端L2SRAM,如需查看其他通道波形,請按照上述方法打開對應通道地址查看即可。

本次使用TL7606I模組進行測試,在上圖中可看到通道0的頻域波形在第12個點存在訊號。程式命令已設置每6us觸發一次TL7606I模組的CONVST/GPIO5[13]引腳進行AD訊號採集。

圖 28
圖 29

在程式運行過程中使用示波器通過測量CONVST/GPIO5[13]引腳,測得訊號實際採集周期為5.720us,即訊號實際取樣率為174.8KHz。

圖 30

與設定的6us存在一定誤差的原因主要有如下兩點:

  1. 程式使用的GPTimer6定時器的精度存在誤差,並受系統延時影響。
  2. GPIO引腳電平翻轉存在約100ns的時延。如選擇專用的定時器輸出引腳作為觸發訊號,可降低時延。

根據採集頻率計算公式,某點n所表示的取樣頻率為:Fn=n*(Fs/N)(n>=0),參數解析如下表。

表 4

Fn

取樣頻率

n

存在訊號的點

Fs

訊號取樣率

N

訊號取樣長度

可得出實際的取樣頻率Fn=12*(174.8KHz/512)=4.0969KHz,與訊號發生器的4KHz標稱值接近。

到這裡,案例功能和操作的基本說明,包括硬體連接與案例測試、如何使用CCS查看訊號波形部分就介紹到這裡,想要查看案例編譯和ARM(Host)端、DSP(Slave)端的關鍵程式碼,請看下篇文章,感謝關注,歡迎點贊或評論區留言!