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


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


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

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

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

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



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

3、配置Keil的debug和trace選項
(1)點(diǎn)擊settings進(jìn)入設(shè)備設(shè)置界面

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

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

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

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

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

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


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

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

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