摘要:本應用筆記說明如何建立、構建和調試面向MAXQ?平臺、以C語言編寫的應用程序,并演示MAXQ2000的某些特性。
本應用采用專用于MAXQ平臺的1.12B版IAR編譯器編寫。這些指令在后續版本的產品中仍會保留。這些指令可以在MAXQ2000評估板上執行。
圖1. 連接有LCD板的MAXQ2000評估板
剩下的一塊電路板是JTAG板。MAXQ2000裝載器和調試引擎采用JTAG協議通信。由于很難找到通用的、用于個人計算機的商品化JTAG適配器,Dallas Semiconductor提供了一個串行至JTAG轉換板。評估板還包括了一個小型連接器。如圖2所示,使用該連接器來連接MAXQ2000評估板和JTAG板。通過電纜將MAXQ2000評估板上標有J4的端子和JTAG電路板上標有P2的端子連接在一起。注意,連接電纜的紅邊應在兩個板子上的引腳“1”和“2”一側。
圖2. MAXQ2000評估板與JTAG板連接
MAXQ2000評估板上有3個跳線。跳線JU1、JU2和JU3上的引腳1和2應跳接在一起。此外,確保晶體放置在Y1上(靠近板上的微處理器)。本應用筆記的演示程序默認晶振頻率為13.5MHz。JTAG板也含有3個跳線。跳線應放置在端子JH1、JH2和JH3上。
本裝置要求5V ±5%/300mA的電源,插孔中心為正極。將電源插入JTAG板上的電源插孔J2。
最后,需要將PC串口連接至JTAG板。采用一個標準9針直通串行電纜,將計算機的一個串口與JTAG板的串口相連(注意:不要連接至MAXQ2000評估板的串口,具體參見圖3的正確連接方式)。
圖3. 連接至JTAG板的串行電纜的正確位置
現在,我們就可以利用IAR工具開始工作了。
按照以下步驟從開始菜單啟動IAR Embedded Workbench:IAR Systems IAR Embedded Workbench for MAXQ IAR Embedded Workbench?,F在,我們就在MAXQ2000評估板上創建一個簡單的應用。
建立一個新的工作區。在FILE菜單下,選擇NEW。將出現一個對話框,顯示"Source/Text"和"Workspace"選項。選擇WORKSPACE,單擊OK。出現一個文件對話框,詢問新工作區的名稱。確定保存新工作區的位置后,輸入工作區名稱。對于本項目,我們稱其為"helloworld"。輸入工作區名稱后,單擊SAVE。
一旦打開工作區后,則需要建立一個項目。在PROJECT菜單下,選擇CREATE NEW PROJECT。將彈出另一個文件對話框。確定在下拉框"Tool Chain"中選擇MAXQ。輸入項目名稱,單擊CREATE按鈕。此項目名定為"helloproject"。
現在項目建立完畢,我們還需要對其進行配置,以便用于MAXQ2000評估板。在項目管理窗口中,右鍵單擊標有"helloproject - Debug"的一行,單擊OPTIONS項(圖4)。大部分默認選項是恰當的,但是需要修改部分設置。
圖4. 在項目上單擊右鍵
在項目選項中,選擇CATEGORY下的XLINK,然后選擇"Include"標簽。在對話框的最下面,選中標有"Override Default"的框,然后單擊下面編輯行右側的小按鈕(標著"...")。將出現文件選擇對話框。選擇文件"lnkmaxq200x.xcl"1,單擊OPEN。應出現如圖5所示的項目選項對話框。
圖5. 為MAXQ2000設置正確的鏈接器選項
現在,選擇CATEGORY下面的C-SPY DEBUGGER。在標有"Driver"的下拉框下,選擇JTAG。這就告訴IAR Embedded Workbench在真實硬件(而不是在軟件仿真器)上調試應用程序。同時,確定"Device Description File"所選的是'$TOOLKIT_DIR$\Config\maxq200x.ddf'。圖6所示為該對話框窗口的正確配置。
圖6. MAXQ2000工作時的調試器選項
所需的最后一個項目選項在條目JTAG中,它是CATEGORY列表下的C-SPY DEBUGGER子條目。在標有"COM Port:"的編輯框中,輸入將與MAXQ2000評估板進行通信的PC COM端口。通常為COM1或者COM2,許多帶有USB串口適配器的用戶將使用COM4或者序號更高的端口。
現在,已經正確的配置了IAR工具,使其能夠與MAXQ2000評估板一起工作。單擊項目選項窗口中的OK按鈕。下一步,將需要為項目建立源代碼。首先,開始一個能夠觸發LED的簡單的HelloWorld型應用程序。
單擊工具條上的新文件按鈕(工具條最左側的空白頁),或者選擇FILE菜單下的NEW。選擇SOURCE/TEXT,單擊OK按鈕。標有"Untitled1"的新窗口將出現。在新窗口中輸入以下代碼:
在PROJECT菜單下,選擇選項REBUILD ALL。屏幕下方的消息窗口中將輸出大量數據,其結尾是:
成功構建項目后,準備運行。確定JTAG板和MAXQ2000板已經按照本文第一部分所述已經連接并上電。同樣,對于第一次演示,需要打開能使LED段點亮的一個開關。找到標有SW6的開關,將第8個開關打到on (上部)位置。運行本項目,選擇PROJECT菜單,然后選擇DEBUG選項。將出現一個窗口通知應用程序正在下載。
點擊執行代碼第一行的第一個斷點"PD0 = 0xff;",啟動項目。我們將在以后研究IAR Embedded Workbench的調試選項?,F在,只需點擊工具條的GO按鈕(三個藍色箭頭),或者選擇DEBUG菜單下的GO。將看到大部分LED以每秒一次的頻率閃爍。
我們已經采用IAR Embedded Workbench編譯、下載、運行了首個為MAXQ2000評估板編寫的應用。下一步,該實例程序將變得復雜一些。然后,將討論MAXQ2000評估板的一些特性,以及IAR Embedded Workbench的某些調試特性。
按照前面所述的步驟,建立一個新的工作區和項目(注意,需要為該新項目重新輸入所有的XLINK、C-SPY和JTAG選項)。 為該工作區起名為LCDDemo,項目名為SimpleLCD。下載該實例的源代碼。將文件lcdcounter.c放在剛剛建立的LCDDemo項目目錄下。在IAR項目窗口中,右鍵單擊標有"SimpleLCD - Debug"的一行,選擇"Add Files..."。選擇剛剛加入的文件lcdcounter.c,然后單擊OPEN。
在運行項目前,我們來查看一些比較重要的代碼段。首先,下拉至文件底部的void main()一行,此處是應用程序的起始點。您將看到對LCD的初始化(函數initLCD),然后進入無限循環while (1)。主循環調用的函數在LCD屏幕上顯示一個數字。每執行一次循環,數值計數增1,如果超過LCD能夠顯示的最大值19999,則重新計數。
現在繼續運行程序。單擊DEBUG按鈕(工具條的最右側),或者選擇菜單中的PROJECT DEBUG。注意,IAR Embedded Workbench在將應用程序裝入到評估板之前,自動進行構建。我們將看到IAR顯示變為調試模式,在void main()代碼的第一行停止運行。點擊GO按鈕(三個藍色箭頭),查看顯示屏,它應快速向上計數。如果觀察的時間足夠長,接近20000時,顯示將從頭開始。
現在可以展示MAXQ2000評估板上非常有用的一個特性――RESET按鈕。評估板左下側是標有SW2和RESET的開關。按下按鍵,觀察LCD屏幕,它將立刻從0開始顯示。該按鈕連接在微控制器的復位引腳上――如果需要重新啟動應用程序,則按該按鈕。
圖7. LCD段至MAXQ2000寄存器位的映射
經開關使能后,其他兩個按鍵可連接至外部中斷。每個按鍵可連接至一對外部中斷。按鍵1在評估板上標記為SW4,可連接至端口5引腳2 (外部中斷#10)或者端口5引腳3 (外部中斷#11)。按鍵2在評估板上標記為SW5,可連接至端口7引腳0 (外部中斷#14)或者端口7引腳1 (外部中斷#15)。下表說明了用于將按鍵連接至外部中斷引腳的開關的使用。
注意,這些引腳還有其他功能,這就是為什么要對按鍵連接到哪個部中斷進行選擇的原因。例如,端口7引腳0和1用于UART 0串口發送和接收。如果將按鍵連接至這些引腳之一,則不利于使用UART 0的功能。請注意,MAXQ2000含有兩個UART,因此,決定如何配置MAXQ2000評估板時,可以有多個選擇。
為能夠通過該串口讀取到達數據,SW1上的3號開關必須置于ON的位置。注意,如果P7.1被用于外部中斷(如果SW6.5置于ON),將產生沖突。要在該串口寫數據,SW1上的第7個開關必須置于ON的位置。同樣,如果P7.0被用于外部中斷(如果SW6.4置于ON),也將產生沖突。
圖8. LED至MAXQ2000寄存器位的映射
為能夠向I/O端口寫入數值,首先需要將端口0引腳方向設置為輸出。每個引腳具有一個獨立的輸入/輸出方向控制。在第一個應用程序中,由以下代碼來設置端口0所有的引腳為輸出:
參見: MAX1407快速瀏覽數據資料
該程序實際是前面編寫的LCD計數器程序的擴展。開始運行后,其LCD顯示與以前相似,快速顯示計數遞增。但是,按下SW4按鍵,程序將顯示實時時鐘的當前值。這看起來實用性較差,因為時間顯示幾乎都不正確。按下SW5按鈕幾次后,將看到分鐘遞增。如果同樣需要增加小時,不停的按該按鈕將使人疲倦。在這種情況下,可以按住SW5按鈕,然后按下SW4按鈕來增加小時。如果再次單獨按下SW4按鈕,將切換回計數器顯示。
點擊GO按鈕(三個藍色箭頭),繼續運行程序。反復操作幾次,熟悉該程序。一旦掌握該程序后,我們將利用它來介紹一些IAR調試工具。
程序暫停后,可以有幾種選擇。如果將鼠標放在調試工具條的其他按鈕(帶有藍色箭頭)上,保持一段時間,將彈出提示窗口,顯示該按鈕的功能。較為常用的一些按鈕為:
按下SW5按鍵,計數器程序似乎停止了。如果回過頭來注意一下IAR Embedded Workbench,將看到程序已經停止運行,加入斷點的一行被高亮顯示,如圖9所示。
圖9. 在IAR Embedded Workbench中達到斷點
調試應用程序時,斷點是非常有用的工具。開發人員通常希望了解代碼是否按要求執行,或未被執行。例如,如果按鍵中斷例程沒有正常工作,我們將會考慮兩種可能—1) 按鍵中斷例程代碼不正確,因此,得不到預期結果,2) 按鍵中斷代碼根本就沒有執行。采用斷點后,可以知道第2種情況是否發生,幫助我們決定應在哪方面花時間調試。
圖10. IAR Embedded Workbench的局部變量窗口
注意到有兩個條目:temp和time。temp變量用于顯示PI7寄存器的數值。注意另一條目time的表達。這意味著該變量不在當前視野之內――它或者沒有賦值,或者其數值不會再被函數使用。
LOCALS窗口顯示了應用中止處所在函數中所聲明且使用的變量。這是了解程序當前狀態的強有力工具――可以檢查變量中不正確的數值,還可以根據變量值判斷程序下一步的去向。
LOCALS窗口的功能不僅這些――在程序執行期間,還可以修改變量值。單擊temp值(可能是1),輸入一個新的整數值,則修改了運行程序的狀態。這可以幫助開發人員查看其程序對不同輸入的反應,而不必重新構建和裝載程序。
圖11. IAR Embedded Workbench中表達式的Watch窗口
圖12. IAR Embedded Workbench中的Call stack窗口
圖13. IAR Embedded Workbench顯示的Memory內容
與LOCALS窗口相似,我們也可以直接在這里修改RAM的數值。加亮某個位置,輸入你所希望的新16進制數值。與LOCALS窗口一樣,這是個非常有用的工具,便于開發人員修改程序狀態而無須重新構建和裝入應用程序。
圖14. IAR Embedded Workbench顯示的Register內容
對于綜合新聞和信息,以及如何開始使用MAXQ2000、MAXQ平臺和MAXQ未來器件的信息,請訪問MAXQ主頁。
對于上述這些以及其他有關MAXQ2000程序裝載的問題,打開屏幕下方消息窗口中的TOOL OUTPUT標簽,將有助于問題的解決。此處列出的消息可能會給你提供一些有關為何裝載失敗的線索。
引言
MAXQ平臺得到了世界一流工具的支持,例如IAR專為MAXQ系列提供的“嵌入式工作臺” (Embedded Workbench)。本應用筆記說明如何建立、構建和調試面向MAXQ平臺、以C語言編寫的應用程序。本文還將演示MAXQ2000的某些特性,MAXQ2000是MAXQ系列的第一款微控制器。本應用采用專用于MAXQ平臺的1.12B版IAR編譯器編寫。這些指令在后續版本的產品中仍會保留。這些指令可以在MAXQ2000評估板上執行。
設置MAXQ2000評估板
在開始編寫代碼前,首先連接MAXQ2000評估板。該評估板應含有3塊電路板,其中一個帶有小型LCD屏。最大的那個電路板(圖1中連接了LCD子板的)就是MAXQ2000評估板。我們將在本文后面討論它的特性。將LCD板連接至MAXQ2000評估板上標有J3的端子。圖1. 連接有LCD板的MAXQ2000評估板
剩下的一塊電路板是JTAG板。MAXQ2000裝載器和調試引擎采用JTAG協議通信。由于很難找到通用的、用于個人計算機的商品化JTAG適配器,Dallas Semiconductor提供了一個串行至JTAG轉換板。評估板還包括了一個小型連接器。如圖2所示,使用該連接器來連接MAXQ2000評估板和JTAG板。通過電纜將MAXQ2000評估板上標有J4的端子和JTAG電路板上標有P2的端子連接在一起。注意,連接電纜的紅邊應在兩個板子上的引腳“1”和“2”一側。
圖2. MAXQ2000評估板與JTAG板連接
MAXQ2000評估板上有3個跳線。跳線JU1、JU2和JU3上的引腳1和2應跳接在一起。此外,確保晶體放置在Y1上(靠近板上的微處理器)。本應用筆記的演示程序默認晶振頻率為13.5MHz。JTAG板也含有3個跳線。跳線應放置在端子JH1、JH2和JH3上。
本裝置要求5V ±5%/300mA的電源,插孔中心為正極。將電源插入JTAG板上的電源插孔J2。
最后,需要將PC串口連接至JTAG板。采用一個標準9針直通串行電纜,將計算機的一個串口與JTAG板的串口相連(注意:不要連接至MAXQ2000評估板的串口,具體參見圖3的正確連接方式)。
圖3. 連接至JTAG板的串行電纜的正確位置
現在,我們就可以利用IAR工具開始工作了。
IAR編譯器使用入門: Hello World
IAR提供了一個為MAXQ平臺設計、限定代碼尺寸的評估版編譯器,它們在MAXQ2000評估板附帶的CD上。此外,也可以從http://www.iar.com下載。按照說明來安裝、選擇默認的安裝位置和選項。注意,IAR Embedded Workbench產品僅適用于Windows?平臺。按照以下步驟從開始菜單啟動IAR Embedded Workbench:IAR Systems IAR Embedded Workbench for MAXQ IAR Embedded Workbench?,F在,我們就在MAXQ2000評估板上創建一個簡單的應用。
建立一個新的工作區。在FILE菜單下,選擇NEW。將出現一個對話框,顯示"Source/Text"和"Workspace"選項。選擇WORKSPACE,單擊OK。出現一個文件對話框,詢問新工作區的名稱。確定保存新工作區的位置后,輸入工作區名稱。對于本項目,我們稱其為"helloworld"。輸入工作區名稱后,單擊SAVE。
一旦打開工作區后,則需要建立一個項目。在PROJECT菜單下,選擇CREATE NEW PROJECT。將彈出另一個文件對話框。確定在下拉框"Tool Chain"中選擇MAXQ。輸入項目名稱,單擊CREATE按鈕。此項目名定為"helloproject"。
現在項目建立完畢,我們還需要對其進行配置,以便用于MAXQ2000評估板。在項目管理窗口中,右鍵單擊標有"helloproject - Debug"的一行,單擊OPTIONS項(圖4)。大部分默認選項是恰當的,但是需要修改部分設置。
圖4. 在項目上單擊右鍵
在項目選項中,選擇CATEGORY下的XLINK,然后選擇"Include"標簽。在對話框的最下面,選中標有"Override Default"的框,然后單擊下面編輯行右側的小按鈕(標著"...")。將出現文件選擇對話框。選擇文件"lnkmaxq200x.xcl"1,單擊OPEN。應出現如圖5所示的項目選項對話框。
圖5. 為MAXQ2000設置正確的鏈接器選項
現在,選擇CATEGORY下面的C-SPY DEBUGGER。在標有"Driver"的下拉框下,選擇JTAG。這就告訴IAR Embedded Workbench在真實硬件(而不是在軟件仿真器)上調試應用程序。同時,確定"Device Description File"所選的是'$TOOLKIT_DIR$\Config\maxq200x.ddf'。圖6所示為該對話框窗口的正確配置。
圖6. MAXQ2000工作時的調試器選項
所需的最后一個項目選項在條目JTAG中,它是CATEGORY列表下的C-SPY DEBUGGER子條目。在標有"COM Port:"的編輯框中,輸入將與MAXQ2000評估板進行通信的PC COM端口。通常為COM1或者COM2,許多帶有USB串口適配器的用戶將使用COM4或者序號更高的端口。
現在,已經正確的配置了IAR工具,使其能夠與MAXQ2000評估板一起工作。單擊項目選項窗口中的OK按鈕。下一步,將需要為項目建立源代碼。首先,開始一個能夠觸發LED的簡單的HelloWorld型應用程序。
單擊工具條上的新文件按鈕(工具條最左側的空白頁),或者選擇FILE菜單下的NEW。選擇SOURCE/TEXT,單擊OK按鈕。標有"Untitled1"的新窗口將出現。在新窗口中輸入以下代碼:
#include單擊Save按鈕(工具條上的磁盤圖標),或者從菜單上選擇FILESAVE,保存文件。在出現的文件對話框中,輸入"demo.c"作為文件名稱,單擊save。注意,文件"demo.c"并不出現在項目窗口中。在能夠構建該項目之前,需要為該項目加入源文件。右鍵單擊項目窗口中的"helloproject - Debug"行,選擇菜單中的"Add Files..."。當文件對話框出現后,選擇文件"demo.c",單擊OPEN?,F在,已經加入源文件,可以進行構建了。void main() { unsigned int counter1; unsigned int counter2; PD0 = 0xff; while (1) { for (counter1 = 0; counter1 < 0xffff; counter1++) { for (counter2 = 0; counter2 < 0x10; counter2++) { } } PO0 = PO0 ^ 0xff; } }
在PROJECT菜單下,選擇選項REBUILD ALL。屏幕下方的消息窗口中將輸出大量數據,其結尾是:
Total number of errors: 0 Total number of warnings: 0如果出現任何錯誤或者警告信息,請確定輸入代碼是否正確,是否按照項目設置說明進行操作。此處常出現的警告信息是"last line of file ends without a new line"。如果出現該錯誤,則找到源代碼的最后一行,多次敲擊ENTER,在最后的右括號('})之后,建立幾個新行。
成功構建項目后,準備運行。確定JTAG板和MAXQ2000板已經按照本文第一部分所述已經連接并上電。同樣,對于第一次演示,需要打開能使LED段點亮的一個開關。找到標有SW6的開關,將第8個開關打到on (上部)位置。運行本項目,選擇PROJECT菜單,然后選擇DEBUG選項。將出現一個窗口通知應用程序正在下載。
點擊執行代碼第一行的第一個斷點"PD0 = 0xff;",啟動項目。我們將在以后研究IAR Embedded Workbench的調試選項?,F在,只需點擊工具條的GO按鈕(三個藍色箭頭),或者選擇DEBUG菜單下的GO。將看到大部分LED以每秒一次的頻率閃爍。
我們已經采用IAR Embedded Workbench編譯、下載、運行了首個為MAXQ2000評估板編寫的應用。下一步,該實例程序將變得復雜一些。然后,將討論MAXQ2000評估板的一些特性,以及IAR Embedded Workbench的某些調試特性。
一個簡單應用:在LCD上顯示一個計數器
現在已經成功觸發了LED,下一步繼續處理更加復雜的LCD應用程序。MAXQ2000微控制器具有一個集成的132段LCD控制器,以及一個片內電阻分壓器用于對比度控制。它還可以直接對LCD屏供電。MAXQ2000評估板帶有一個簡單的靜態LCD屏,其上有4個數字和一些簡單的標點符號(一對冒號和點號,參見圖7)。對于初次使用者,我們將編寫一個能夠在LCD上實現計數器的應用程序。然后,深入討論控制LCD的代碼,演示更復雜的實例。按照前面所述的步驟,建立一個新的工作區和項目(注意,需要為該新項目重新輸入所有的XLINK、C-SPY和JTAG選項)。 為該工作區起名為LCDDemo,項目名為SimpleLCD。下載該實例的源代碼。將文件lcdcounter.c放在剛剛建立的LCDDemo項目目錄下。在IAR項目窗口中,右鍵單擊標有"SimpleLCD - Debug"的一行,選擇"Add Files..."。選擇剛剛加入的文件lcdcounter.c,然后單擊OPEN。
在運行項目前,我們來查看一些比較重要的代碼段。首先,下拉至文件底部的void main()一行,此處是應用程序的起始點。您將看到對LCD的初始化(函數initLCD),然后進入無限循環while (1)。主循環調用的函數在LCD屏幕上顯示一個數字。每執行一次循環,數值計數增1,如果超過LCD能夠顯示的最大值19999,則重新計數。
現在繼續運行程序。單擊DEBUG按鈕(工具條的最右側),或者選擇菜單中的PROJECT DEBUG。注意,IAR Embedded Workbench在將應用程序裝入到評估板之前,自動進行構建。我們將看到IAR顯示變為調試模式,在void main()代碼的第一行停止運行。點擊GO按鈕(三個藍色箭頭),查看顯示屏,它應快速向上計數。如果觀察的時間足夠長,接近20000時,顯示將從頭開始。
現在可以展示MAXQ2000評估板上非常有用的一個特性――RESET按鈕。評估板左下側是標有SW2和RESET的開關。按下按鍵,觀察LCD屏幕,它將立刻從0開始顯示。該按鈕連接在微控制器的復位引腳上――如果需要重新啟動應用程序,則按該按鈕。
MAXQ2000評估板特性
現在已經建立了使用MAXQ2000評估板LCD子板的應用程序,讓我們仔細研究一下評估板的各個部分。我們不在此處涉及到評估板的所有器件,在評估板附帶的CD中的MAXQ2000評估板原理圖和"MAXQ2000 Evaluate Kit Getting Started Guide"中有更詳細的信息。LCD子板
現在,LCD板已經能夠運轉。顯示段和公共極信號的產生受控于MAXQ微控制器的幾個寄存器。LCD子板的連接方式簡化了對于LCD屏的操作,向4個顯示位置中的任何一個寫入數碼非常容易。由于每個7段LCD數字的映射相同,因此,在代碼中包括了下表,以幫助寫入正確的LCD寄存器數值:#define LCD_PATTERN_0 0x03F #define LCD_PATTERN_1 0x006 #define LCD_PATTERN_2 0x05B #define LCD_PATTERN_3 0x04F #define LCD_PATTERN_4 0x066 #define LCD_PATTERN_5 0x06D #define LCD_PATTERN_6 0x07D #define LCD_PATTERN_7 0x007 #define LCD_PATTERN_8 0x07F #define LCD_PATTERN_9 0x067 int PATTERNS[] = { LCD_PATTERN_0, LCD_PATTERN_1, LCD_PATTERN_2, LCD_PATTERN_3, LCD_PATTERN_4, LCD_PATTERN_5, LCD_PATTERN_6, LCD_PATTERN_7, LCD_PATTERN_8, LCD_PATTERN_9 }; int getLCDDigit(int digit) { return PATTERNS[digit]; }利用getLCDDigit函數,可由以下代碼向控制器屏寫入數值:
/* write the value 612 to the LCD screen */ LCD2 = getLCDDigit(6); LCD1 = getLCDDigit(1); LCD0 = getLCDDigit(2);該LCD板還可以顯示小數點和冒號,適用于時鐘、溫度顯示以及任何其他簡單的數字顯示等。圖7是LCD子板各段的完整顯示以及用于控制各段LCD顯示的寄存器位。
圖7. LCD段至MAXQ2000寄存器位的映射
按鍵
MAXQ2000評估板上有三個按鍵,兩個連接至外部中斷,一個連接至微控制器的復位信號。復位按鈕用于重新運行應用程序,如同前面演示的LCD計數器所示。經開關使能后,其他兩個按鍵可連接至外部中斷。每個按鍵可連接至一對外部中斷。按鍵1在評估板上標記為SW4,可連接至端口5引腳2 (外部中斷#10)或者端口5引腳3 (外部中斷#11)。按鍵2在評估板上標記為SW5,可連接至端口7引腳0 (外部中斷#14)或者端口7引腳1 (外部中斷#15)。下表說明了用于將按鍵連接至外部中斷引腳的開關的使用。
Switch (set to ON) | Connect push button | To port pin... | External Interrupt # |
SW6, switch 2 | Push Button 1 (SW4) | Port 5 Pin 2 | 10 |
SW6, switch 3 | Push Button 1 (SW4) | Port 5 Pin 3 | 11 |
SW6, switch 4 | Push Button 2 (SW5) | Port 7 Pin 0 | 14 |
SW6, switch 5 | Push Button 2 (SW5) | Port 7 Pin 1 | 15 |
注意,這些引腳還有其他功能,這就是為什么要對按鍵連接到哪個部中斷進行選擇的原因。例如,端口7引腳0和1用于UART 0串口發送和接收。如果將按鍵連接至這些引腳之一,則不利于使用UART 0的功能。請注意,MAXQ2000含有兩個UART,因此,決定如何配置MAXQ2000評估板時,可以有多個選擇。
串行連接器
MAXQ2000評估板含有一個9針連接器和一個RS-232電平轉換器。因此,可以采用一條標準的直通串行電纜連接評估板和PC。這與連接串口至JTAG板的串行電纜相同。為能夠通過該串口讀取到達數據,SW1上的3號開關必須置于ON的位置。注意,如果P7.1被用于外部中斷(如果SW6.5置于ON),將產生沖突。要在該串口寫數據,SW1上的第7個開關必須置于ON的位置。同樣,如果P7.0被用于外部中斷(如果SW6.4置于ON),也將產生沖突。
LED面板
在簡單的HelloWorld式應用程序中我們已經使用了LED面板,現在仔細觀察一下面板的實際顯示。圖8顯示了LED面板的每個亮條和與其相關的輸出引腳。圖8. LED至MAXQ2000寄存器位的映射
為能夠向I/O端口寫入數值,首先需要將端口0引腳方向設置為輸出。每個引腳具有一個獨立的輸入/輸出方向控制。在第一個應用程序中,由以下代碼來設置端口0所有的引腳為輸出:
PD0 = 0xff;當適當的I/O端口設置為輸出后,PO0寄存器相應位設置為1時,該引腳對應的LED被點亮。注意,組合開關SW6上的8號開關必須置于ON的位置,才能對LED陣列供電。
MAX1407
MAXQ2000評估板帶有一個MAX1407,它含有一個4通道16位模數轉換器,以及兩個10位數模轉換器。MAXQ2000通過其片內SPI?主機與之通信。這樣,MAX1407就成為連接MAXQ2000與外部真實世界信號的理想橋梁。網上2有一個使用熱敏電阻以及MAXQ2000評估板來實時顯示當前溫度的實例程序。請查看該實例程序的源代碼,了解運行該程序所需的硬件連接和配置。參見: MAX1407快速瀏覽數據資料
使用IAR編譯器來調試應用程序
現在,轉向一個新的應用程序,通過它我們來熟悉一下IAR調試工具。同前面一樣,建立一個新的工作區和項目,將工作區命名為"lcdtime",項目名為"rtc_demo"。從本應用筆記的下載源3添加源代碼文件lcd_trc.c。構建該程序,點擊DEBUG按鈕將其裝入到MAXQ2000評估板。該程序實際是前面編寫的LCD計數器程序的擴展。開始運行后,其LCD顯示與以前相似,快速顯示計數遞增。但是,按下SW4按鍵,程序將顯示實時時鐘的當前值。這看起來實用性較差,因為時間顯示幾乎都不正確。按下SW5按鈕幾次后,將看到分鐘遞增。如果同樣需要增加小時,不停的按該按鈕將使人疲倦。在這種情況下,可以按住SW5按鈕,然后按下SW4按鈕來增加小時。如果再次單獨按下SW4按鈕,將切換回計數器顯示。
點擊GO按鈕(三個藍色箭頭),繼續運行程序。反復操作幾次,熟悉該程序。一旦掌握該程序后,我們將利用它來介紹一些IAR調試工具。
IAR調試:暫停一個應用程序
程序正在運行時,按下工具條左側的紅色手形按鈕,或者選擇DEBUG菜單下的BREAK,這將使處理器停止運行,IAR將顯示你在應用程序中的當前位置。程序暫停后,可以有幾種選擇。如果將鼠標放在調試工具條的其他按鈕(帶有藍色箭頭)上,保持一段時間,將彈出提示窗口,顯示該按鈕的功能。較為常用的一些按鈕為:
- Step Over: 走過下一指令。如果下一指令是函數調用,按下此按鈕將不會進入該函數。
- Step Int 走入下一指令。如果下一指令是函數調用,按下該按鈕將進入被調用的函數。
- Run to Cursor: 運行程序至光標所在代碼的位置。這要比使用斷點功能來運行至代碼的特定位置方便一些。
- G 使程序正常運行。按下pause按鈕或者到達斷點后,程序停止運行。
IAR調試:斷點
斷點功能使我們在程序運行到特定位置后,能夠停止程序運行。下面以實例說明。如果程序仍在運行,先停止它。找到代碼中的函數pushButtonInterrupt,找到下面一行:IF (EIF1 & 0x04)右鍵單擊此行,從彈出菜單中選擇選項TOGGLE BREAKPOINT (不是選項'Toggle Bookmark'!)。該行左側空白位置將出現一個紅色的'X'?,F在,再次點擊DEBUG按鈕,按下GO按鈕,運行程序。將看到LCD計數器運行。
按下SW5按鍵,計數器程序似乎停止了。如果回過頭來注意一下IAR Embedded Workbench,將看到程序已經停止運行,加入斷點的一行被高亮顯示,如圖9所示。
圖9. 在IAR Embedded Workbench中達到斷點
調試應用程序時,斷點是非常有用的工具。開發人員通常希望了解代碼是否按要求執行,或未被執行。例如,如果按鍵中斷例程沒有正常工作,我們將會考慮兩種可能—1) 按鍵中斷例程代碼不正確,因此,得不到預期結果,2) 按鍵中斷代碼根本就沒有執行。采用斷點后,可以知道第2種情況是否發生,幫助我們決定應在哪方面花時間調試。
IAR調試:局部變量
程序還停止在斷點上時,打開LOCALS窗口(如果還沒有打開)。可通過選擇VIEW菜單下的LOCALS選項來打開窗口。如果還停止在前面所設置的斷點行上,則locals窗口應如下所示:圖10. IAR Embedded Workbench的局部變量窗口
注意到有兩個條目:temp和time。temp變量用于顯示PI7寄存器的數值。注意另一條目time的表達。這意味著該變量不在當前視野之內――它或者沒有賦值,或者其數值不會再被函數使用。
LOCALS窗口顯示了應用中止處所在函數中所聲明且使用的變量。這是了解程序當前狀態的強有力工具――可以檢查變量中不正確的數值,還可以根據變量值判斷程序下一步的去向。
LOCALS窗口的功能不僅這些――在程序執行期間,還可以修改變量值。單擊temp值(可能是1),輸入一個新的整數值,則修改了運行程序的狀態。這可以幫助開發人員查看其程序對不同輸入的反應,而不必重新構建和裝載程序。
IAR調試:Watch窗口
程序暫停時,打開WATCH窗口(VIEW WATCH)。在expression下,輸入pbcount。WATCH窗口中應出現數值1 (除非按下了其他鍵,使程序再次運行)。Watch窗口使我們能夠隨意輸入任意表達式,并顯示該表達式的計算數值。在本例中,我們輸入了一個全局變量名,它告訴我們按鍵中斷代碼被執行了幾次。Watch窗口的作用還不僅如此――在WATCH窗口中,再次單擊pbcount,輸入pbcount ^ 0x05。IAR Embedded Workbench將計算該表達式(pbcount值與5異或),顯示結果為(4)。圖11. IAR Embedded Workbench中表達式的Watch窗口
IAR調試:Call Stack
打開call Stack (VIEW CALL STACK)。Call Stack顯示代碼執行到當前位置已調用過的函數。此時,由于正在響應一個中斷,只顯示pushButtonInterrupt() (以及一些調試信息)。單步調試該程序,查看該窗口的反應。向下找到標有中斷15的代碼段下面的showTime()行??梢园聪耂TEP OVER幾次,或者右鍵單擊該行,選擇RUN TO CURSOR。此時,showTime()行被高亮顯示。按下STEP INTO按鈕,將看到showTime()函數的第一行代碼被高亮顯示。再次查看Call Stack――現在,showTime()函數顯示在第一行,其后是pushButtonInterrupt()。由于這是一個堆棧,現在執行的函數被首先列出,其后是調用該函數的函數,再后是更上一層的調用函數,等等。圖12. IAR Embedded Workbench中的Call stack窗口
IAR調試:Memory窗口
IAR Embedded Workbench允許我們察看正在執行應用程序的器件的內部存儲器。選擇VIEW MEMORY來查看Memory窗口。窗口首次打開時,可能會顯示代碼段的存儲器內容。單擊下拉框,你會看到用于顯示的存儲器類型選項。選擇Data選項來查看MAXQ2000片內RAM的內容。圖13. IAR Embedded Workbench顯示的Memory內容
與LOCALS窗口相似,我們也可以直接在這里修改RAM的數值。加亮某個位置,輸入你所希望的新16進制數值。與LOCALS窗口一樣,這是個非常有用的工具,便于開發人員修改程序狀態而無須重新構建和裝入應用程序。
IAR調試:Register窗口
Register窗口(VIEW REGISTER)與Memory窗口相似。該窗口顯示MAXQ2000的寄存器映射。出現的第一個寄存器是MAXQ平臺的核心寄存器,例如累加器、數據指針和循環計數器等。單擊下拉框,可以看到其他幾個選項。例如,如果選擇Port I/O寄存器,你就可以看到并編輯與MAXQ2000輸入/輸出端口相關的所有寄存器。圖14. IAR Embedded Workbench顯示的Register內容
開發支援
對于MAXQ平臺的開發者,我們提供了多種資源予以支持。其中之一是由Dallas Semiconductor開發人員管理的在線論壇,解答用戶提交的問題,同時也是開發人員發布消息的窗口,提供最新的工具信息和相關的其他問題。請訪問主頁,進行注冊,登錄您的賬號:Dallas Semiconductor討論組 (English only)對于不適合在公開論壇提出的問題,請通過Maxim支持中心聯系我們。
對于綜合新聞和信息,以及如何開始使用MAXQ2000、MAXQ平臺和MAXQ未來器件的信息,請訪問MAXQ主頁。
常見問題及其解決
開始使用一款新器件時,初次建立通信總會遇到一些問題。確定是否全部按照本文檔第一部分的說明來進行操作可解決大部分問題(例如,電路板連接和項目配置)。以下是常見問題及其解決方式:問題 | 可能的解決方式 |
點擊調試時,IAR根本不出現任何提示,但是MAXQ2000硬件沒有反應。 | 確定已經選擇了C-SPY Debugger項目選項下的JTAG驅動器。 |
出現損壞的*.d66文件的錯誤提示。 | 確定在XLINK Include選項下,已經選擇了以lnkmaxq200x.xcl文件覆蓋默認的XCL文件。 |
每一步都配置正確了,但是按下DEBUG按鈕后,無法裝入程序。 | 確定沒有其他軟件在使用你選用的COM口。一般而言,PDA軟件在計算機啟動時,占用串口??梢赃x擇一個不同的COM口,或者關掉PDA軟件。 |
IAR試圖開始裝入程序,但一直不能成功。所有的電纜連接和配置都正確。 | 嘗試重新啟動IAR Embedded Workbench。 |
對于上述這些以及其他有關MAXQ2000程序裝載的問題,打開屏幕下方消息窗口中的TOOL OUTPUT標簽,將有助于問題的解決。此處列出的消息可能會給你提供一些有關為何裝載失敗的線索。
評論
查看更多