摘要:本文將介紹MAXQ微控制器架構(gòu)及與內(nèi)核緊密集成的硬件調(diào)試引擎特性,使用IAR公司的嵌入式工作臺(Embedded Workbench)開發(fā)環(huán)境與評估板的結(jié)合對其應(yīng)用開發(fā)作分析說明。
關(guān)鍵詞:在線調(diào)試 自舉裝載 JTAG端口 C語言 訪問編程
1、MAXQ硬件調(diào)試引擎特性
新型MAXQ結(jié)構(gòu)為應(yīng)用開發(fā)的編程了拓寬了渠道。這是因為每個MAXQ微控制器都包含一個與微控制器內(nèi)核緊密集成的硬件調(diào)試引擎。
而架構(gòu)中第一款芯片就是MAXQ2000,本文將MAXQ微控制器架構(gòu)與硬件調(diào)試引擎特性,結(jié)合IAR的Embedded Workbench(嵌入式工作臺)開發(fā)環(huán)境與MAXQ2000評估板一起使用對其應(yīng)用程序開發(fā)作分折說明,從而領(lǐng)會其使用與技巧。
將MAXQ2000微控制器的在線調(diào)試與程序裝載功能與IAR Embedded Workbench開發(fā)環(huán)境相結(jié)合,就能為設(shè)計者提供C或匯編級的應(yīng)用開發(fā)與測試手段。而MAXQ2000基于硬件的調(diào)試引擎與自舉裝載過程在專用的JTAG端口運行,可以全面調(diào)試訪問,而對系統(tǒng)資源的影響最小。
2、硬件調(diào)試引擎
2.1在線調(diào)試特性
與微控制器內(nèi)核緊密集成的硬件調(diào)試引擎,用來控制MAXQ2000的調(diào)試特性。該調(diào)試引擎可以調(diào)用片上的固定用途ROM中的服務(wù)子程序,支持廣泛的調(diào)試特性。具體如下:
* 對集成程序閃存的讀取訪問。
* 對板上數(shù)據(jù)SRAM的讀/寫訪問。
* 對16×16堆棧存儲器的讀取訪問。
* 對所有MAXQ2000系統(tǒng)與外設(shè)寄存器的讀/寫訪問。
* 單步(跟蹤)程序執(zhí)行。
* 最多四個地址斷點,在代碼存儲器中特定的單元停止程序的執(zhí)行。
* 兩個數(shù)據(jù)存儲器匹配斷點,在數(shù)據(jù)存儲器中特定單元被訪問時停止程序的執(zhí)行。
* 兩個寄存器斷點,在出現(xiàn)對特定系統(tǒng)或外設(shè)寄存器的寫訪問時(不能與數(shù)據(jù)存儲器匹配斷點同時使用),并且寫入寄存器的數(shù)據(jù)與特定值匹配時停止程序的執(zhí)行。
* 密碼匹配功能(用來解鎖其余的調(diào)試功能)。
所有與調(diào)試引擎的通信都通過MAXQ2000專用的JTAG測試訪問端口(TAP)接口完成,該接口與JTAG IEEE標(biāo)準(zhǔn)1149兼容。該接口由四個信號組成,由MAXQ2000端口引腳復(fù)用得到,定義如下:TMS(測試模式選擇)-與P4.2復(fù)用;TCK(測試時鐘)-與P4.0復(fù)用;TDI(測試數(shù)據(jù)輸入)-與P4.1復(fù)用;以及TDO(測試數(shù)據(jù)輸出)-與P4.3復(fù)用。
盡管JTAG TAP端口專門用于系統(tǒng)內(nèi)調(diào)試與系統(tǒng)內(nèi)編程,不過,一旦應(yīng)用開發(fā)完成,傳輸JTAG TAP端口信號的四個端口引腳可以被釋放用于其他目的。JTAG端口在復(fù)位后默認(rèn)為激活狀態(tài),但是一旦運行,應(yīng)用軟件可以關(guān)閉端口,將四個相關(guān)的端口引腳用于其他用途。
從MAXQ2000內(nèi)核來看,JTAG接口與調(diào)試引擎異步工作。通過JTAG端口進(jìn)行的通信不需要與MAXQ2000運行的時鐘速率相同,不過對MAXQ2000來說,TCK頻率的最大值被限定在1/8系統(tǒng)時鐘速率以下。
在MAXQ2000執(zhí)行代碼時,可以通過調(diào)試引擎讀取或?qū)懭霐帱c設(shè)置。該模式被稱為后臺模式,在這種模式下,調(diào)試引擎獨立于CPU內(nèi)核之外工作。
為了完成其他操作,如存儲器與寄存器的讀寫,調(diào)試引擎控制MAXQ2000的內(nèi)核,并切換到執(zhí)行固定用途ROM中的調(diào)試服務(wù)子程序。該模式被稱作調(diào)試模式,該模式下,調(diào)試引擎中斷了正常的程序執(zhí)行。在這種情況下,用戶應(yīng)用程序被暫時掛起,等到調(diào)試函數(shù)執(zhí)行完畢后繼續(xù)執(zhí)行,與中斷服務(wù)子程序的處理方式相同。
由于在應(yīng)用程序中JTAG TAP端口并不使用,因此組成JTAG端口的端口引腳可以被應(yīng)用軟件收回。調(diào)試功能所需的所有附加代碼都位于固定用途ROM中,因此,調(diào)試功能消耗的系統(tǒng)資源只是少量的數(shù)據(jù)SRAM,以及一層程序堆棧(用來存儲調(diào)用調(diào)試子程序的返回地址)。最多19個字節(jié)的數(shù)據(jù)SRAM(地址0x07ED至0x07FF)被保留用于調(diào)試服務(wù)子程序。若某個應(yīng)用程序不使用在線調(diào)試,則這些數(shù)據(jù)SRAM單元可供應(yīng)用程序使用。
2.2程序裝載功能-通過JTAG進(jìn)行集成閃存編程
JTAG TAP端口也可被用于自舉裝載功能,甚至在不使用調(diào)試功能時也有效。通過JTAG TAP接口設(shè)置3個配置位,然后從復(fù)位中釋放MAXQ2000,將控制轉(zhuǎn)移到位于固定用途ROM中內(nèi)置的自舉裝載過程子程序。用來控制訪問自舉裝載過程的配置位如下:
* SPE:系統(tǒng)編程使能位(1CDF.1)。該位被置1時,MAXQ2000在系統(tǒng)復(fù)位后,執(zhí)行固定用途ROM中的自舉裝載子程序。
* PSS[l:0]:編程源選擇(1CDE3-2)。這幾位的設(shè)置決定了自舉裝載過程的通信使用JTAG端口(PSS[l:0]= =00b)還是串口0 UART(PSS[l:0]= =01b)。
一旦這些位被置位并且MAXQ2000從復(fù)位狀態(tài)中釋放,固定用途ROM的自舉裝載過程通過選定的端口(JTAG或串口0 UART)開始與主機系統(tǒng)通信。在這兩種情況下,使用的協(xié)議相同,并且都提供如下函數(shù):
* 讀取MAXQ2000的ID標(biāo)題(識別固定用途ROM的版本)。
* 返回內(nèi)部程序與數(shù)據(jù)存儲器的大小。
* 讀取、寫入、驗證與CRC校驗集成閃存程序存儲器。
* 讀取、寫入、驗證與CRC校驗內(nèi)部數(shù)據(jù)SRAM。
* 密碼匹配(解鎖存儲器讀寫指令)。
當(dāng)自舉裝載過程通過串口0 UART而不是通過JTAG端口通信時,必須使用JTAG接口將自舉裝載過程置為串行通信模式。不過,適當(dāng)?shù)卦O(shè)置SPE與PSS位,然后復(fù)位MAXQ2000(通過使看門狗定時器過期或使用外部硬件手段),應(yīng)用軟件也可以在串行通信模式下調(diào)用自舉裝載過程。使自舉裝載過程被調(diào)用的方法必須由應(yīng)用軟件決定。
2.3對于調(diào)試和自舉裝載功能的密碼保護(hù)
基本的密碼保護(hù)方案限制了對MAXQ2000的調(diào)試與自舉裝載過程函數(shù)的訪問。必須先由主機系統(tǒng)提供該密碼,才允許訪問任何讀取或修改存儲器或系統(tǒng)與外設(shè)寄存器內(nèi)容的函數(shù)。
密碼長度為16個字或32個字節(jié)。密碼的數(shù)值存放在內(nèi)部閃存的0x0010至0x001F字單元中。這些數(shù)值可以作為靜態(tài)數(shù)組包含在應(yīng)用程序中,或者只是存儲在這些單元中的指令代碼的數(shù)值。不管哪種方式,在裝人應(yīng)用程序時密碼自動寫入。若沒有裝入任何應(yīng)用,密碼的缺省值為所有的字都等于0xFFFF。
即使密碼未知,MAXQ2000的內(nèi)部閃存也始終可以通過自舉裝載過程擦除。這將有效地清除密碼值(所有字都變?yōu)?xFFFF),并允許其他編程或調(diào)試操作繼續(xù)進(jìn)行。在32字節(jié)密碼數(shù)值沒有匹配之前,密碼保護(hù)簡單地確保了不能從MAXQ2000中讀取現(xiàn)有指令。
3、使用串口-JTAG適配器模塊
MAX02000微控制器的集成開發(fā)環(huán)境(例如MAXIDE與IAR Embedded Workbench)包含了支持與MAXQ2000 JTAG接口進(jìn)行通信的軟件庫。不過,由于運行該軟件的PC通常都不具備JTAG端口,因此,兩個系統(tǒng)的接口需要一個硬件層。
MAXQ2000評估板包含的串口-JTAG適配器模塊為這個接口問題提供了圓滿的解決方案(見圖1)。PC上運行的軟件(例如IAR Embedded Workbench)通過標(biāo)準(zhǔn)的COM串行端口與串口-JTAG適配器模塊通信。然后串口-JTAG適配器模塊與MAXQ2000的JTAG端口接口,將指令傳輸至自舉裝載過程或調(diào)試引擎。適配器模塊不僅用來實現(xiàn)電平轉(zhuǎn)換,也支持在不同電源電壓范圍運行的MAXQ微控制器,而且不需要PC為JTAG波形提供精確時序。
4、使用IAREmbedded WOrkbonch進(jìn)行應(yīng)用程序開發(fā)
IAR Embedded Workbench開發(fā)環(huán)境為MAXQ2000提供了基于C語言或基于匯編語言的應(yīng)用程序開發(fā)手段。使用上述對MAXQ2000評估板與串口-JTAG適配器模塊的硬件配置,IAR Embedded Workbench可以完全訪問MAXQ2000的基于JTAG的自舉裝載過程以及在線調(diào)試特性。
IAR Embedded Workbench為MAXQ2000的應(yīng)用程序開發(fā)提供了以下特性。
* 將編譯完成的應(yīng)用程序裝入MAXQ2000的集成程序閃存中。
* 提供C語言或匯編語言級的單步(跟蹤)程序執(zhí)行。
* 顯示代碼、數(shù)據(jù)、硬件堆棧與固定用途ROM存儲器。
* 調(diào)用堆棧跟蹤。
* C語言或匯編語言級的斷點設(shè)置。
* 顯示與編輯所有MAXQ2000系統(tǒng)與外設(shè)寄存器。
5、應(yīng)用
值此,以創(chuàng)建與編譯一個MAXQ2000項目為例對應(yīng)用作說明。
由于IAR Embedded Workbench包含對MAXQ2000微控制器系列的集成支持,創(chuàng)建一個新的MAXQ2000微控制器項目只需要幾個具體的設(shè)置。
啟動IAR后,從菜單中選擇File,然后選擇New。在New的對話框中選擇Workspace,然后點擊Ok。為該項目的工作空間鍵人一個新的名稱(保存為“.eww”文件),然后點擊Save。
工作空間窗口打開后,從菜單中選擇Project,然后選擇Create New Project。對于新項目,MAXQ工具鏈為默認(rèn)狀態(tài)。為新項目鍵人文件名(保存為*.ewp文件),然后點擊Create。
接下來,從菜單中選擇Project,然后選擇Settings。出現(xiàn)的對話框中顯示的是新創(chuàng)建項目的設(shè)置,如圖2所示。
在Options對話框中的General Options選擇標(biāo)簽下,應(yīng)當(dāng)為MAXQ2000微控制器選擇以下設(shè)置。
* 由于MAXQ2000具有MAXQ20型的內(nèi)核,Processor Variant應(yīng)當(dāng)設(shè)定為MAXQ20。
* 對于MAXQ2000,Number of accumulators應(yīng)當(dāng)設(shè)定為16。
* 對于MAXQ2000,Hardwar estac kdepth應(yīng)當(dāng)設(shè)定為16。
在Option對話框中的C-Spy Debugger選擇標(biāo)簽中,應(yīng)當(dāng)為MAXQ2000選擇以下設(shè)定(見圖3):
* 將Driver設(shè)定為JTAG,說明通過PC的COM端與串口-JTAG接口電路板連接。另兩個可能的設(shè)置為Simulator(用來與MAXQ2000軟件模擬器一起運行)與Emulator(用來與MAXQ2000在線仿真器系統(tǒng)一起運行)。
* 應(yīng)將Use Device Description File邏輯框選中。器件說明文件(*。ddf應(yīng)當(dāng)是提供給MAXQ2000微控制器的文件(maxq200x.ddf)。該文件定義了IAR環(huán)境使用的特定MAXQ微控制器的存儲器空間與外設(shè)寄存器組。
在Options對話框中的JTAG部分,Command line options區(qū)段包含了與串口-JTAG電路板連接的PC COM端口。圖4所示為連接至COM端口1的選項設(shè)置。
為項目進(jìn)行選項設(shè)置之后,選擇Projiect,然后選擇Add Files,將C語言代碼文件添加到項目中。添加了項目文件之后,選擇Project,然后選擇Make來編譯項目。接下來,選擇Proiect,然后選擇Debug來啟動調(diào)試過程。這樣將編譯后的項目通過JTAG接口下載,并將IAR置為調(diào)試模式,如圖5所示。
IAR中的調(diào)試操作
啟動調(diào)試過程后,Step over(F10),StepInto(F11)與StepOut(Shift+F11)可以用來跟蹤項目的C語言代碼。若要運行代碼,則從菜單中選擇Debug,然后選擇Go,或按F5鍵。將光標(biāo)放置在源代碼的指令行上,并點擊工具欄中的Toggle Breakpoint按鈕,就可以設(shè)定或清除地址斷點。一次最多可以設(shè)置四個地址斷點。
Memory窗口可以顯示MAXQ2000的Code(內(nèi)部閃存)、Data(內(nèi)部SRAM)、Hw stack(內(nèi)部16層堆棧),以及固定用途ROM存儲器。存儲器顯示可以被設(shè)置為字節(jié)、字,或雙字格式,也可以按hex(對所有寬度)與ASCII(對字節(jié)寬度)格式來顯示。
Register窗口用來顯示MAXQ2000的系統(tǒng)與外設(shè)寄存器。它們按以下邏輯分組來顯示:
* CPU寄存器:累加器與累加器控制寄存器、數(shù)據(jù)指針與數(shù)據(jù)指針控制寄存器、指令指針、循環(huán)計數(shù)器,以及程序狀態(tài)標(biāo)志。
* 中斷控制:中斷向量、模塊屏蔽,以及標(biāo)識寄存器。
* 周期:顯示已經(jīng)執(zhí)行的指令周期數(shù)。
* 并行端口:用于PO、P1、P2、P3和P4的輸入、輸出以及端口方向寄存器。
* 外部中斷:用于外部中斷的使能、邊沿選擇,以及標(biāo)志寄存器。
* 定時器:用于定時器/計數(shù)器0至2的寄存器。
* 串行端口:用于SPI與串行端口的控制與緩沖寄存器。
* 乘法器:與硬件乘法器模塊相關(guān)的寄存器。
點擊寄存器數(shù)值并鍵人新值,可以實現(xiàn)對可寫寄存器的編輯。點擊寄存器名稱旁的加/減符號,可以實現(xiàn)寄存器中獨立位或位區(qū)域顯示的擴(kuò)展或壓縮。
6、結(jié)論
IAR Embedded Workbench高級的、基于C語言項目的環(huán)境集成了MAXQ2000的底層調(diào)試接口,允在C語言或匯編語言代碼層上執(zhí)行精細(xì)的調(diào)試。MAXQ2000的內(nèi)置的調(diào)試與在線編程的特性,以及對系統(tǒng)資源的底層影響,允許應(yīng)用程序開發(fā)過程以及已完成項目的最終發(fā)布使用同樣的硬件設(shè)計。