一、硬件、軟件環境
1、硬件環境:
(1)開發板:ATSAMV71Q21開發板(注:開發板需帶ETM模塊接口)


(2)仿真器:ULINK pro仿真器(注:仿真器支持ETM功能即可)


2、軟件環境:
(1)系統:window11 專業版
(2)軟件:Keil MDK pro版
二、ETM功能配置流程
1、新建初始化文件”SAMx7_TP.ini”

初始化文件的內容如圖所示:(注:不同型號的芯片的對應trace功能的初始化文件可能不一致,不同芯片的trace功能的初始化文件可以參考幫助文檔Configure Cortex-M Devices for Tracing部分)

初始化文件主要內容是將ETM功能使能和對應的GPIO口進行對應的使能。
首先是對于電源管理控制器(PMC)進行寫保護失能,使得可以對PMC對應的寄存器進行操作。據數據手冊查詢,PCK3時鐘對應的是ETM外部設備,所以要設置ETM的主時鐘,使能PCK3時鐘。

然后是使能PIOD的時鐘,要對于PIOD組進行設置也需要對于PIOD的寫保護進行失能并禁止PIO控制相對應的引腳,啟用對于對應引腳的外圍控制,讓仿真器可以對于對應IO口進行控制。
然后是對于IO口的復用,需要對于寄存器0和寄存器1進行設置。讓PD8設置成無上拉下拉,PD7~4設置成輸入改變中斷模式,無上拉下拉。
最后設置一個重啟執行函數OnResetExec,讓該函數可以通過uVision的“重置”按鈕重置后執行。
2、添加初始化文件:將初始化文件添加到Keil->option for target->Debug->Initialization File中,



3、選擇仿真器
仿真器需要選擇支持ETM功能的,而ULINK pro仿真器支持ETM功能,所以仿真器選項可以選擇”ULINK Pro Cortex Debugger”。

3、配置Keil的debug和trace選項
(1)點擊settings進入設備設置界面

(2)在Debug選項中,需要將port選擇SW接口

(3)然后在trace配置上,需要設置core clock,核心時鐘必須與設備配置相對應。并且勾選”Use Core Clock”,讓trace clock和core clock保持一致。

(4)然后,勾選”Trace Enable”和”ETM Trace Enable”,讓Trace和ETM功能使能。

(5)Trace Port的設置必須始終與”xxxx.ini”文件中的設置相對應。在配置文件中,配置了 PD4-PD8五個IO口,其中TRACED[0..3]在引腳PD4到PD7上輸出,跟蹤時鐘TRACECK 在引腳PD8上配置。所以,Trace Port選擇”Sync Trace Port with 4-bit Data”。
CLK為引腳TRACECLK設置以ns為單位的信號延遲。通常,無需更改,0.0 ns的值就足夠了。
D0..D3為引腳TRACEDATA[0]..TRACEDATA[3]設置以ns為單位的信號延遲。通常,無需更改,0.0 ns的值就足夠了。
(補充資料:什么時候需要調整信號延遲)

(6)這里的PC Sampling部分定義了生成儀器跟蹤數據的間隔。除了周期性生成外,還 可以為每個存儲器讀/寫操作生成PC采樣。設置PC的采樣間隔為1024*16.(周期性PC 值的頻率 = 核心時鐘/預分頻器)

(7)Trace Event設置這里可以根據需求自行進行勾選,勾選項會在Event Counters窗口出展示。


CPI(每條指令的周期):用于指令周期計數估計的通用計數器。此計數器在執行多周期指令所需的每個額外周期上遞增。在任何指令獲取暫停的每個周期,計數器也會遞增。指令的第一個周期和LSU記錄的周期不計數。
EXC(異常開銷):計數器在與異常條目或返回相關聯的每個周期上遞增。也就是說,它統計與入口堆疊、返回取消堆疊、搶占和其他異常相關進程相關的周期。
SLEEP(睡眠周期):無論是由WFI或WFE指令啟動,還是由退出時休眠功能啟動,計數器在與省電相關的每個周期上遞增。
LSU(加載存儲單元周期):此計數器在執行多周期加載存儲指令所需的每個額外周期上遞增。它不計算執行任何指令所需的第一個周期。
FOLD(折疊指令):計數器對以零周期執行的任何指令遞增(例如,IT指令被折疊且不使用任何周期)。
EXCTRC(異常跟蹤):計數器在異常、中斷條目和中斷退出時遞增。“跟蹤異常”窗口顯示統計信息和事件查看器隨時間的執行情況。
5、完成上述步驟,Trace功能和ETM功能就配置完成,進入調試界面后,界面下方出現”Trace: Running”則表示配置成功,可以使用Trace、ETM功能。

若出現的不是”Trace:Running”,需要根據對應的提示信息對于配置流程進行篩查。
例如:
“Trace:Communication Error”:表示檢測到無效通信。不正確的時鐘設置或硬件問題導致此消息。在main()程序中更改核心時鐘的應用程序可能會在數據捕獲錯誤時拋出此消息。一旦核心時鐘調整到系統設置,此錯誤消息將消失。
“Trace:HW Buffer”:表示檢測到溢出USB端口無法以適配器發送數據的速度接收數據。關閉不需要的跟蹤事件,或跳過“PC采樣”。
“Trace:SW Buffer”:表示PC上的內部SW緩沖區溢出。調整跟蹤端口的SWO時鐘預分頻器或調試端口的最大時鐘。
“Trace:No Synchronization”:表示未從目標接收到同步數據包。跟蹤硬件未連接或配置不正確。
“Trace:Data Stream Error”:表示跟蹤端口太忙,無法傳輸所有跟蹤數據包。捕獲太多跟蹤數據時會發生這種情況。減少跟蹤事件的數量。“指令跟蹤窗口”顯示溢出發生的位置。
三、功能展示
1、代碼覆蓋率功能:可以顯示函數的執行百分比了。

2、性能分析功能:可以查看工程中每一個文件、函數、語句的執行時間和占用總時間的比例。


首頁 > 資源中心 > FAQ
