引言
??? Maxim Integrated Products的MAXQ1850是高性能、安全,、小封裝,、32位RISC微控制器,設(shè)計(jì)用于電子商務(wù),、銀行和數(shù)據(jù)安全應(yīng)用,。微控制器執(zhí)行16位指令,有一個(gè)32位數(shù)據(jù)通道,。MAXQ1850在一個(gè)時(shí)鐘周期中執(zhí)行完成大部分指令,,是性能非常高的RISC機(jī)。MAXQ1850還具有很多重要的安全特性,,包括:- 支持DES,、3DES、AES,、SHA-1,、SHA-224、SHA-256,、RSA,、DSA和ECDSA的密碼加速器
- 真正的硬件隨機(jī)數(shù)發(fā)生器
- 8KB低泄漏電池備電NVSRAM
- 4個(gè)自毀輸入
- 防篡改探測(cè),可快速擦除密鑰/數(shù)據(jù),。
- 能夠探測(cè)超范圍條件的環(huán)境傳感器(例如,,溫度、電壓)
設(shè)置MAXQ1850評(píng)估套件
??? MAXQ1850評(píng)估套件電路板如圖1所示,。下面列出的硬件都包含在評(píng)估套件中,用于實(shí)現(xiàn)本應(yīng)用筆記:- MAXQ1850評(píng)估套件電路板
- JTAG電路板
- JTAG電纜(連接MAXQ1850評(píng)估套件電路板和JTAG電路板)
- 9針串行電纜
- 穩(wěn)壓電源(5V,、±5%,、300mA、中心正極)
詳細(xì)電路圖(PDF, 776KB)
圖1. MAXQ1850評(píng)估電路板
??? MAXQ1850評(píng)估電路板和JTAG電路板都有很多跳線需要進(jìn)行配置,。如果需要了解跳線及其功能的詳細(xì)信息,,請(qǐng)參考各自的數(shù)據(jù)手冊(cè)。對(duì)于本應(yīng)用筆記,,請(qǐng)按照以下要求來配置跳線:
- 在MAXQ1850評(píng)估套件電路板上,,短接以下跳線:JU3 (靠近Program開關(guān)),;JU4 (靠近Reset開關(guān));JU30 (靠近處理器左下部),;JU104 (靠近LCD模塊的左下部),。連接跳線JU5 (靠近電池)以及JU20 (靠近電源輸入)的引腳1 (PCB上的方形焊盤)和引腳2。連接跳線JU21 (靠近處理器的右上部)的引腳2和引腳3,。所有其他跳線應(yīng)打開,。
- 在JTAG電路板上,短接JH3,。這從JTAG電路板為評(píng)估套件電路板提供5V電源,。對(duì)于這一配置,,跳線JH1和JH2為“無關(guān)項(xiàng)”,。
??? 注意,,在老的MAXQ1850評(píng)估電路板設(shè)計(jì)中,MAXQ1850微控制器可能采用了插槽,。如果是這樣,,把MAXQ1850插入到插槽中,其無鉛指示符“+”朝向插槽中一個(gè)角(右下)上標(biāo)出的點(diǎn),。
??? 在您的PC和JTAG電路板之間連接9針串行電纜(不要將其連接至MAXQ1850套件電路板),。最后,將5V電源連接至JTAG電路板的電源連接器(J2),。它也為評(píng)估套件電路板提供電源供電,。
采用CrossWorks編譯器進(jìn)行設(shè)計(jì):WalkLED
??? 在開始使用MAXQ1850評(píng)估套件時(shí),我們開發(fā)一個(gè)簡(jiǎn)單的應(yīng)用程序,,使電路板上的三個(gè)LED閃爍,。LED以固定、重復(fù)的順序閃爍,,看起來象是在電路板上“走”,。因此,該工程被命名為WalkLED,。該程序的代碼列在附錄A中,。代碼非常短,您甚至能夠在相對(duì)很短的時(shí)間內(nèi)手動(dòng)輸入這些代碼,。您還可以從評(píng)估套件的CD中獲得源代碼文件,,也可以從Maxim網(wǎng)站下載獲得,。??? 我們使用的工具包是Rowley Associates公司提供的CrossStudio。編寫本文檔時(shí),,工具包是面向MAXQ30的CrossWorks,,版本2.0.0.2008063000.2293。這是本文檔中用于產(chǎn)生截屏的版本,。為確定是否是最新版本,,請(qǐng)?jiān)L問Rowley & Associates網(wǎng)站,或者發(fā)送電子郵件至 [email protected] (English only),。
??? 在建立新方案時(shí),,點(diǎn)擊File


圖2. 新工程
??? 單擊Next繼續(xù),,您將看到Project Properties彈出框(圖3),。Target處理器可能是MAXQ1103。雙擊處理器序列號(hào),,選擇MAXQ1850處理器,。這一頁面的所有其他部分以及后續(xù)頁面都選擇默認(rèn),因此,,選擇MAXQ1850后,,點(diǎn)擊Finish,建立工程,。如果需要,,您可以單擊Next,選擇其他的工程選項(xiàng),。
圖3. 選擇MAXQ1850處理器
??? 在建立工程時(shí),,Project Explorer窗口(圖4)會(huì)出現(xiàn)一個(gè)新工程,通常位于應(yīng)用程序窗口的右上,。打開它,,您將看到兩個(gè)文件夾,Source Files和System Files,。打開Source Files,,將看到main.c
,這是您的應(yīng)用程序源代碼,。雙擊它,,打開,。
圖4. Project Explorer窗口
??? 現(xiàn)在,輸入附錄A的應(yīng)用代碼,,或者從上面提到的來源中,,將代碼剪切并粘貼到main.c
文件中,替換所有當(dāng)前內(nèi)容,。
??? 當(dāng)應(yīng)用程序執(zhí)行時(shí),,您會(huì)看到LED DS1、DS2和DS3 (位于套件電路板原型區(qū)左側(cè))按順序不斷閃爍,。而在應(yīng)用程序運(yùn)行前,,必須首先“構(gòu)建”它。選擇Build Build WalkLED_demo,,或者按下F7,。如果一切都正確構(gòu)建,您將在Output窗口看到消息“Build complete”,,它旁邊有一個(gè)對(duì)勾(圖5),。如果有錯(cuò),,請(qǐng)確定您輸入的代碼是否正確,。
圖5. 工程構(gòu)建后的輸出
??? 現(xiàn)在可以運(yùn)行應(yīng)用程序。對(duì)此,,單擊Debug Build and Debug,,程序?qū)?dòng),不斷運(yùn)行,。單擊Pause按鈕(Break Execution,,如代碼窗口上面和左側(cè)所示),程序在當(dāng)前位置暫停,,等待用戶的下一動(dòng)作,。如果沒有Build和Debug選項(xiàng),找到“targets”窗口,;單擊Maxim Serial JTAG Adapter,;然后,單擊Connect按鈕(窗口左上角),。這樣,,通過JTAG電路板連接工具包和評(píng)估套件,使能調(diào)試功能,。工具包調(diào)試功能被使能后,,單擊Step Over按鈕就可以開始調(diào)試過程,如圖6所示,。
圖6. Step Over按鈕
??? 按下Step Over按鈕,,程序啟動(dòng)后,,CrossStudio通過JTAG電路把應(yīng)用程序下載到MAXQ1850中,Output窗口顯示狀態(tài)消息,。應(yīng)用程序開始運(yùn)行,,然后,在代碼第一行停止(左側(cè)空白區(qū)顯示黃色箭頭),。從這一點(diǎn)運(yùn)行應(yīng)用程序時(shí),,選擇Debug Go (或者單擊Play按鈕)。現(xiàn)在,,請(qǐng)確定MAXQ1850電路板上的LED正在閃爍,。您可能希望能夠在一定程度上修改應(yīng)用程序;按照相反的順序來閃爍LED,,或者改變點(diǎn)亮?xí)r間,,更快或者更慢的閃爍。
使用CrossStudio調(diào)試應(yīng)用程序
??? 現(xiàn)在,,讓我們了解一下MAXQ1850和CrossStudio工具的調(diào)試功能,。MAXQ1850有內(nèi)置JTAG引擎,支持在實(shí)際芯片上進(jìn)行調(diào)試,,從而不需要昂貴的仿真器或者有可能出錯(cuò)的模擬器,。注意,MAXQ1850還提供安全鎖定機(jī)制,,在元件鎖定時(shí),,防止JTAG工作。這樣,,當(dāng)MAXQ1850器件用在敏感應(yīng)用中時(shí),,保證了JTAG調(diào)試引擎不會(huì)帶來安全威脅。??? 考慮WalkLED_demo應(yīng)用程序,。作為一次試驗(yàn),,在
main.c
函數(shù)中,把Delay
函數(shù)的延時(shí)計(jì)數(shù)從200000改為2000,。for(i=0;i < 2000; i++) ;
??? 現(xiàn)在,,選擇Build

??? 選擇Pause按鈕(或者選擇Debug

Delay
函數(shù)的“for”循環(huán)上,,因此代碼很有可能停在這里(參見圖7),。
圖7. 在Delay
函數(shù)中,,代碼停止運(yùn)行
??? 觀察右側(cè)的Locals窗口(如果看不到該窗口,,單擊Debug Debug Windows
Locals)。該窗口將顯示“i”變量的當(dāng)前值?,F(xiàn)在,,按下Step Over按鈕。讓程序運(yùn)行一秒,,然后,,再次按下Pause按鈕。您應(yīng)該看到“i”值增加了,。
??? 要退出函數(shù),,應(yīng)該一直按著Step Over按鈕,直到循環(huán)結(jié)束,,但這會(huì)浪費(fèi)很長(zhǎng)時(shí)間,。只要按下Step Out按鈕(在Step Into按鈕的右邊,如圖6所示),,程序一直執(zhí)行,,直到退出Delay
函數(shù),,返回到其調(diào)用函數(shù)main.c
,。
??? 通過設(shè)置斷點(diǎn),也可以獲得相似的結(jié)果,。函數(shù)main.c
中,,在調(diào)用Delay
函數(shù)的任一行上設(shè)置斷點(diǎn)時(shí),單擊該代碼行左側(cè)的小三角,。它將變?yōu)榧t圈(圖8)?,F(xiàn)在,再次運(yùn)行應(yīng)用程序(Debug Go,,或者Play按鈕),。應(yīng)用程序會(huì)運(yùn)行到這一點(diǎn),然后暫停,。
圖8. 加入斷點(diǎn)
??? 現(xiàn)在,,我們了解一下更多的調(diào)試功能。按下Step Over按鈕幾次。每按下一次,,C源代碼執(zhí)行一行,。您將看到,控制LED的一行代碼每執(zhí)行一次,,LED閃爍一下,。當(dāng)暫停在Delay()
一行時(shí),按下Step Into按鈕(圖9),。這會(huì)進(jìn)入該函數(shù),,暫停在該函數(shù)的第一行。正如前面所演示的,,按下Step Out按鈕,,可以退出Delay()
函數(shù)。
圖9. Step Into按鈕
??? 在運(yùn)行時(shí),,還可以改變變量(和寄存器),。點(diǎn)擊GO,然后,,點(diǎn)擊Pause,,程序應(yīng)再次停止在Delay()
函數(shù)的中間部分。注意“i”值?,F(xiàn)在,,把“i”設(shè)置為1998 (單擊“i”顯示的數(shù)值,高亮后輸入1998),。單擊Step Into按鈕,,由于達(dá)到了“i”最終值,因此,,您會(huì)看到循環(huán)結(jié)束,。
??? 以及您感興趣的其他調(diào)試功能:
- Debug
Disassembly將同時(shí)顯示C代碼和生成的匯編代碼。這樣,,用戶可以進(jìn)入?yún)R編代碼,,而不是C代碼,執(zhí)行時(shí),,同時(shí)顯示C代碼,。
- Debug
Debug Windows
Call Stack將顯示應(yīng)用程序到達(dá)當(dāng)前位置時(shí)所調(diào)用的函數(shù)。如果在Delay()函數(shù)中暫停執(zhí)行,,其顯示如圖10所示,。
- 使用Debug
Stop停止調(diào)試,觀察右側(cè)的Targets窗口,。確定Maxim Serial JTAG Adapter Properties以粗體字顯示,,觀察Properties Window下部的信息。如果沒有顯示Maxim Serial JTAG Adapter Properties,從下拉菜單中選擇它,。您將看到屬性列表及其設(shè)置,,如圖11所示。使用滾動(dòng)條看到所有信息,。Connection標(biāo)題下的一個(gè)屬性是Port Name,。如果您使用串口,而不是默認(rèn)的COM1,,那么,,可以在這里改變這一選項(xiàng)。
圖10. 在Delay()
函數(shù)中運(yùn)行時(shí)調(diào)用堆棧
圖11. Properties窗口
更多信息
??? 軟件庫和參考設(shè)計(jì)目前正在由Maxim工程師開發(fā),。如果您需要了解庫和工具的最新信息,,或者對(duì)本應(yīng)用筆記還有其他問題,請(qǐng)聯(lián)系 [email protected] (English only),。附錄A. WalkLED_main.c源代碼
#include#include #include 'WalkLED.h' void main(void) { PD1 = 0x62 ; // PD1 = In Out Out In In In Out In PO1 = PO1 & PO1_5_0 ; // U10 Din (P1.5) = 0 PO1 = PO1 | PO1_1_1 ; // U10 CS (P1.1) = 1 PO1 = PO1 & PO1_6_0 ; // U10 SCLK (P1.6) = 0 while (1) { wr_SPI(0x0700) ; // U10 P7 (nLED0) = 0 Delay() ; wr_SPI(0x0800) ; // U10 P8 (nLED1) = 0 Delay() ; wr_SPI(0x0900) ; // U10 P9 (nLED2) = 0 Delay() ; wr_SPI(0x0701) ; // U10 P7 (nLED0) = 1 Delay() ; wr_SPI(0x0801) ; // U10 P8 (nLED1) = 1 Delay() ; wr_SPI(0x0901) ; // U10 P9 (nLED2) = 1 Delay() ; } } void wr_SPI(short SPI_Dat) // Write data to SPI? device U10 { int i; PO1 = PO1 & PO1_1_0 ; // U10 CS (P1.1) = 0 for(i=0;i<16;i++) { // Set Din for each data bit if (SPI_Dat < 0) PO1 = PO1 | PO1_5_1 ; // Din = 1 else PO1 = PO1 & PO1_5_0 ; // Din = 0 PO1 = PO1 | PO1_6_1 ; // SCLK = 1 PO1 = PO1 & PO1_6_0 ; // SCLK = 0 PO1 = PO1 & PO1_5_0 ; // Din = 0 SPI_Dat = SPI_Dat << 1 ; // Shift in next bit } PO1 = PO1 | 0x02 ; // CS = 1 } void Delay(void) { // Delay to make LEDs visible int i = 0 ; for(i=0;i < 200000; i++) ; }
?
??? SPI是Motorola, Inc.的商標(biāo),。
?
?
?
?