《電子技術(shù)應用》
您所在的位置:首頁 > 模擬設(shè)計 > 業(yè)界動態(tài) > 采用MAXQ610評估套件(EV kit)和IAR嵌入式工作臺進行設(shè)計

采用MAXQ610評估套件(EV kit)和IAR嵌入式工作臺進行設(shè)計

2009-01-12
作者:美信公司

引言

??? MAXQ610是Maxim Integrated Products提供的低功耗微控制器,設(shè)計用于電池供電的應用,提供低電流工作模式(1MHz時的典型值為1.4mA,12MHz時為3.5mA),以及低電流停止模式(典型值200nA)。微控制器還具有效率非常高的16位單周期RISC處理器核以及靈活的時鐘配置,有助于動態(tài)控制性能和功耗。MAXQ610適合于需要大量I/O引腳以及對功耗要求比較高的應用。

??? MAXQ610具有很多重要的特性,包括:
  • 1.7V至3.6V的寬范圍工作電壓
  • 64KB應用程序(IAP)閃存
  • 2KB數(shù)據(jù)SRAM
  • SPI?和兩個USART
  • 8kHz低功耗“異或”喚醒定時器
  • IR載頻發(fā)生器和調(diào)制
  • 擾碼功能可防止攻擊者下載軟件,提供IP保護
  • 存儲器保護功能隔離了內(nèi)核庫,提供IP保護,防止第三方應用
??? MAXQ610評估套件(EV)為MAXQ610處理器開發(fā)低功耗應用提供成熟可靠的平臺。套件包括IR發(fā)射器和接收器;兩個串口;用于用戶輸入的8個按鍵;出于應用目的的4個LED;原型區(qū);以及用于訪問MAXQ610所有I/O引腳的插頭等。此外,還提供跳線,可以方便地監(jiān)監(jiān)MAXQ610處理器在工作時的實際功耗。

設(shè)置MAXQ610評估套件

??? MAXQ610評估套件電路板如圖1所示。評估套件含有下面的硬件元件,這些元件用于實現(xiàn)并驗證本應用筆記中的演示程序:
  1. MAXQ610評估套件電路板
  2. JTAG電路板
  3. JTAG電纜(連接MAXQ610套件電路板和JTAG電路板)
  4. 9針串行電纜
  5. 穩(wěn)壓電源(5V,±5%,300mA,正極中心)

圖1. MAXQ610評估套件


更詳細的圖
(PDF, 284kB)
圖1. MAXQ610評估套件



??? MAXQ610評估套件電路板和JTAG電路板都有很多跳線需要進行配置。在本應用筆記中,應按照表1表2配置這些跳線。


表1. MAXQ610評估套件的電路板跳線配置

Jumper(s) State Purpose
JH1, JH2 Don't Care Control RS-232 level shifters FORCEON and active-low FORCEOFF inputs
JH3, JH4 Don't Care Configure RS-232 transmitter inputs
JH20, JH21 Don't Care Connect RS-232 receiver outputs to MAXQ610 signals
JH18 Don't Care Connect RS-232 active-low INVALID input to MAXQ610 control pin
JH5 Connect Pins 1 (Square Pad) and 2 Connects regulated voltage to MAXQ610 supply
JH22, JH23, JH24, JH25 Closed Connects MAXQ610 port pins to LEDs
JH15, JH16, JH17 Don't Care Connect IR circuitry to MAXQ610 pins
JH26 Closed Uses power from JTAG connection to power the MAXQ610 board
JH14 Closed Connects board power to MAXQ610

表2. JTAG電路板跳線配置

Jumper(s) State Purpose
JH1, JH2 Don't Care External DTR used to control loading the on-board microcontroller.
JH3 Closed Connects JTAG board's 5.0V supply to JTAG connector pin 8 (feeds target board).

??? 用JTAG電纜連接JTAG電路板和MAXQ610評估套件電路板。電纜上的紅條應連接至JTAG電路板上標有引腳9和引腳10的連接器一側(cè),以及MAXQ610評估套件電路板上標有TDI-GND的連接器一側(cè)。

??? 用9針串行電纜連接PC和JTAG電路板(不要將其連接至MAXQ610評估套件電路板)。最后,將5V電源連接至JTAG電路板的電源連接器。

采用IAR編譯器開始設(shè)計:blinker

??? 我們不以“Hello World”開始,而是構(gòu)建一個簡單的應用程序,該應用程序使MAXQ610評估套件電路板上的4個LED閃爍(例如,DS1、DS2、DS3和DS4)。我們要使用的工具包是IAR嵌入式工作臺,由IAR系統(tǒng)公司提供。本應用筆記的軟件采用IAR系統(tǒng)公司2.12版KickStart試驗包來編寫并進行了測試。

??? 在開始一個新工程之前,需要將一些MAXQ610特殊文件復制到IAR安裝目錄(通常是C:Program FilesIAR SystemsEmbedded Workbench 4.0,下面將其稱為[IAR])中。網(wǎng)上提供本應用筆記的文件(請參考文檔最后的了解詳細信息一節(jié)),評估套件的CD-ROM也提供這些文件。請復制這里提到的這些文件:
  • iomaxq610.h復制到[IAR]MAXQinc
  • lnkmaxq610.xcl復制到[IAR]MAXQconfig
  • maxq610.sfr復制到[IAR]MAXQconfig
  • maxq610.ddf復制到[IAR]MAXQconfig
  • maxq610.menu復制到[IAR]MAXQconfigdevices
??? 現(xiàn)在啟動IAR嵌入式工作臺。選擇“Create new project in current workspace” (圖2)。選擇MAXQ?工具鏈,確定選擇了“Empty project” (圖3)。單擊OK,打開一個文件對話框。在這個例子中,工程文件名為“blinker” (圖4)。

圖2. 工作臺啟動


圖2. 工作臺啟動

圖3. 建立一個空的工程
圖3. 建立一個空的工程

圖4. 如圖所示,保存工程“blinker”
圖4. 如圖所示,保存工程“blinker”

??? 工作空間將顯示“blinker”工程?,F(xiàn)在,建立一個新文件(File New File),將以下文本復制到該文件中。

#include 
#include 

void main()
{
  /*
   * Try to get a 1Hz blink on the LEDs. System clock = 12MHz. 
   * Timer reload = 0x5B8D = 23437. Running at div 256, so we get a timer
   * interrupt once every 23437*256 cycles = 5,999,872, or roughly 500ms.
   * We toggle every 500ms, so we get a 1Hz cycle.
   */
  TB0R = 0x5B8D;       // reload for timer 0
  TB0CN = 0x0416;      // timer set to run, enable interrupt, down count, div 256
  PD3 = 0x0f;          // set port 2 lower nibble to output
  IC_bit.IGE = 1;      // set global interrupt enable
  while (1)
  {

  }
}

??? 在這個簡單的應用程序中,采用一個定時器中斷來啟動使評估套件LED不斷接通和關(guān)斷的代碼。要重新裝入的值在定時器寄存器中斷時自動裝入該寄存器,大約每500ms周期性中斷一次。設(shè)置定時器運行之后,將連接LED的端口引腳配置為輸出,然后,全局使能中斷。應用程序進入無限while循環(huán)。中斷服務(wù)例程(ISR)代碼完成應用程序(請參見下面圖5)。

??? 單擊save,將文件命名為main.c (確定代碼保存目錄與您建立新工程的目錄相同)。在工作窗口下,右鍵單擊“blinker”,選擇Add Add main.c

??? 下一步,將另外兩個文件從軟件分配源復制到您的工程目錄中:isr.cclib.r66。C文件含有中斷部分,編譯器需要利用它來編譯程序。r66文件含有應用程序運行需要的啟動代碼和標準庫代碼。每次開始新的MAXQ610工程時,都需要重復這一復制步驟。

??? 再次右鍵單擊工作窗口中的“blinker”行,找到Add Add Files,選擇isr.c。

??? 現(xiàn)在,需要配置工程選項。選擇Project Options,打開選項窗口。請按照以下步驟進行:
  • 在General選項下:Target,選擇MAXQ610。
  • 在General選項下:Library Configuration,從下拉菜單中選擇Custom CLIB。瀏覽Library File文本區(qū),選擇剛剛復制到工程目錄中的clib.r66文件。
  • 在Debugger下:Setup,從driver下拉菜單中選擇JTAG。
  • 在JTAG下:輸入您將使用的連接JTAG電路板的串口。
??? 現(xiàn)在,構(gòu)建應用程序就非常簡單了。按下F7或者選擇Project Make。您首先會被詢問保存工作空間。對此,請輸入“gettingstarted”。工程應該被正確構(gòu)建。

??? 如果您希望在此處運行應用程序(例如,Project Debug,然后單擊右箭頭按鈕),電路板上不會有任何事情發(fā)生。這是因為應用程序代碼試圖使用定時器中斷來確定LED什么時候應該改變,而定時器的ISR中沒有代碼。因此,必須為定時器(ISR)編寫代碼。

??? 打開文件isr.c,找到函數(shù)isr6(void),在它旁邊應該有注釋//timers。在函數(shù)中輸入以下代碼:
  TB0CN = TB0CN & 0xFF7F;       // clear timer 0 interrupt
  PO3 = PO3 ^ 0x0f;             // toggle lower nibble

?

??? 這些代碼首先清除定時器中斷標志(必須由軟件清除中斷標志,否則,將導致中斷矢量不斷啟動)。第二行觸發(fā)所有4個LED,這些LED連接到端口引腳P3.0至P3.3。

??? 現(xiàn)在開始構(gòu)建工程,進行調(diào)試(Project Debug把您帶到執(zhí)行C代碼的第一行,如圖5所示)。代碼第一行下面高亮顯示,左側(cè)空白區(qū)有一個箭頭,指示程序在此暫停?,F(xiàn)在,單擊Run按鈕(圖6)。該按鈕使程序運行至結(jié)束(或者到下一個斷點)。當程序執(zhí)行無限循環(huán)時,LED塊在一直閃爍。

圖5. 程序在代碼第一行暫停


圖5. 程序在代碼第一行暫停

圖6. 程序Run按鈕
圖6. 程序Run按鈕

使用IAR嵌入式工作臺調(diào)試應用程序

??? 現(xiàn)在,我們看一下MAXQ610和嵌入式工作臺工具的調(diào)試功能。MAXQ610處理器有內(nèi)置JTAG引擎,支持在實際芯片中進行調(diào)試。這一特性還避免了使用昂貴的模擬器或者有可能出錯的仿真器。

??? 返回到最初的blinker應用程序,開始上面介紹的調(diào)試過程。第一行高亮顯示后,點擊Go按鈕,繼續(xù)執(zhí)行。您將看到LED接通500ms,然后關(guān)斷500ms。

??? 單擊Break按鈕,或者選擇Debug Break,暫停執(zhí)行(圖7)。程序應暫停在while(1)聲明上,這是因為該聲明占用了無限循環(huán)的大部分運行時間,而中斷矢量只占用了很少的時間(每500ms只有幾個周期)。

圖7. Break按鈕


圖7. Break按鈕

??? 在檢查一些處理器寄存器中的數(shù)值時,打開寄存器窗口(View Register)。此處,從下拉菜單中選擇Timer 0,您將看到與定時器控制閃爍LED相關(guān)的寄存器(圖8)。這里顯示的Timer 0寄存器包括重裝寄存器(TB0R),控制寄存器(TB0CN),計數(shù)寄存器(TB0C)和數(shù)值寄存器(TB0V)。

圖8. Register窗口顯示Timer 0寄存器


圖8. Register窗口顯示Timer 0寄存器

??? 作為演示,我們將執(zhí)行幾行代碼,觀察這些定時器寄存器會有什么變化。按下Step Over按鈕幾次(圖9),或者選擇Debug Step Over。觀察TB0V中的數(shù)值。Step Over按鈕執(zhí)行一行C代碼,但是不會進入任何函數(shù)調(diào)用。該按鈕按下時,您將看到TB0V中的數(shù)值變化范圍很大,這是因為調(diào)試引擎執(zhí)行時,定時器在不斷運行。您還將看到,TB0CN寄存器隨著定時器中斷出現(xiàn)和結(jié)束的變化。

圖9. Step Over按鈕


圖9. Step Over按鈕

??? 寄存器窗口不但顯示了寄存器內(nèi)容,而且,在調(diào)試進程中,還可以向其寫入數(shù)值。程序暫停時,雙擊TB0R寄存器中的數(shù)值。將寄存器改為0x2DC6 (這是0x5B8C/2),然后,單擊Go按鈕。LED現(xiàn)在閃爍應比以前快兩倍,這是因為定時器重新裝入的計數(shù)值減小了,從而減小了定時器中斷之間的時間。

??? 在另一個演示中,我們把光閃爍模式由全通/全關(guān)(1111 0000 1111)改為交替模式(1010 0101 1010)。而這種改變并不需要重新編譯程序。首先,我們必須加入一個斷點。程序運行時,打開isr.c文件,找到定時器中斷矢量。雙擊代碼第一行左側(cè)的灰色區(qū),將出現(xiàn)一個紅色X。這一X表示加入了一個斷點。當程序執(zhí)行到這一行代碼時,程序?qū)⑼V?,其屏幕顯示如圖10所示。綠色箭頭和高亮顯示的代碼表示已經(jīng)到達斷點,程序暫停在這里。

圖10. 斷點設(shè)置和到達斷點


圖10. 斷點設(shè)置和到達斷點

??? 在寄存器窗口中,從下拉列表中選擇Port I/O。注意,代碼使用了XOR (^)運算符來觸發(fā)端口3 (P3)最下面的4個引腳,而這些引腳從未明確設(shè)置。為改變這一操作,單擊PO3中的數(shù)值,輸入新值0x05。輸入后,您將看到,按照0101的模式,2個LED接通,2個LED關(guān)斷?,F(xiàn)在,單擊Run。程序開始運行,直至到達斷點而再次停止,LED將轉(zhuǎn)換狀態(tài),因此,處理器現(xiàn)在輸出1010模式。雙擊紅色X,清除斷點,然后,單擊Go。程序?qū)⒁越惶鍸ED模式不斷運行。

??? 在IAR嵌入式工作臺中,您可以按照與寄存器一樣的方法來觀察并改變變量值。對此進行演示時,單擊Stop或者選擇Debug Stop Debugging,停止應用程序?,F(xiàn)在,修改代碼,在主函數(shù)中加入變量x,在while循環(huán)中嵌入延時循環(huán)。如下所示,輸入對程序的一些修改。注意,在代碼中故意設(shè)置了錯誤,稍后對它進行討論。

void main()
{
  /*
   * Try to get a 1Hz blink on the LEDs. System clock = 12MHz. 
   * Timer reload = 0x5B8D = 23437. Running at div 256, so we get a timer
   * interrupt once every 23437*256 cycles = 5,999,872, or roughly 500ms.
   * We toggle every 500ms, so we get a 1Hz cycle.
   */
  long int x;
  TB0R = 0x5B8D;          // reload for timer 0
  TB0CN = 0x0416;         // timer set to run, enable interrupt, down count, div 256
  PD3 = 0x0f;             // set port 2 lower nibble to output
  IC_bit.IGE = 1;         // set global interrupt enable
  while (1)
  {
    for (x=0;x<100000;x++)
    {
      if (x==100000)
        PO3 = PO3 ^ 0x01;
    }
  }
}

?

??? 這些改變用于偶爾觸發(fā)端口3最下面一個引腳,因此,3個LED同步閃爍,而1個將獨立閃爍。延時循環(huán)間隔并不重要,但是必須提供足夠的延時才能觀察到結(jié)果。運行該應用程序(開始調(diào)試,然后,運行),您將很快看到和最初的應用程序并沒有什么不同;所有LED以1秒的間隔同時接通和關(guān)斷。暫停應用程序,打開本地變量觀察窗口(View Locals)。如果程序停在主應用程序的while循環(huán)(很有可能)中,窗口中將顯示變量x (圖11)。

??? 前面曾提到上面的代碼中有錯誤?,F(xiàn)在,按下Step Over按鈕幾次,您將看到執(zhí)行從循環(huán)對比(x<100000)跳到條件測試“if”聲明(x ==100000),直到遞增(x++),然后是本地窗口中x值的變化。在PO3 = PO3 ^ 0x01一行設(shè)置一個斷點,單擊Go。出于某些原因,執(zhí)行并沒有暫停。很明顯,程序沒有進入“if”聲明。再次按下Break,將變量x值改為99999,單擊Step Over幾次。您將注意到,由于x=0部分被執(zhí)行,“for”循環(huán)終止,然后再次開始。問題很明顯—x值永遠不會到達“for”循環(huán)中的100000,這是因為進行了“l(fā)ess than”測試。停止程序,將“if”聲明中的對比值改為99999。重新編譯程序,啟動調(diào)試器,單擊Go。LED開始閃爍,LED DS1自己獨立閃爍。

圖11. 本地變量窗口


圖11. 本地變量窗口

了解詳細信息

???? 評估套件CD-ROM中提供本應用筆記所有文件的源代碼。還可以從Maxim網(wǎng)站下載這些源代碼。文件還含有工程文件;所有頭文件和include文件;以及機器可裝入.HEX輸出文件,采用Maxim的MTK (微控制器工具套件)等終端模擬器直接可以裝入并運行它(例如,不需要使用編譯器工具包),可以下載這一模擬器。

???? Maxim提供軟件庫、應用筆記和參考設(shè)計。如果您需要了解庫和工具的最新信息,或者對本應用筆記還有問題,請搜索
Maxim網(wǎng)站的微控制器部分,或者聯(lián)系 microcontroller.support@maxim-ic.com (English only)。

IAR Embedded Workbench是IAR Systems AB的注冊商標。

??? IAR是IAR Systems AB的商標。

??? MAXQ是Maxim Integrated Products, Inc.的注冊商標。

??? SPI是Motorola, Inc.的商標。

?

?

?


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。