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

采用MAXQ610評(píng)估套件(EV kit)和IAR嵌入式工作臺(tái)進(jìn)行設(shè)計(jì)

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

引言

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

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

設(shè)置MAXQ610評(píng)估套件

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

圖1. MAXQ610評(píng)估套件


更詳細(xì)的圖
(PDF, 284kB)
圖1. MAXQ610評(píng)估套件



??? MAXQ610評(píng)估套件電路板和JTAG電路板都有很多跳線需要進(jìn)行配置。在本應(yīng)用筆記中,應(yīng)按照表1表2配置這些跳線。


表1. MAXQ610評(píng)估套件的電路板跳線配置

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評(píng)估套件電路板。電纜上的紅條應(yīng)連接至JTAG電路板上標(biāo)有引腳9和引腳10的連接器一側(cè),以及MAXQ610評(píng)估套件電路板上標(biāo)有TDI-GND的連接器一側(cè)。

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

采用IAR編譯器開(kāi)始設(shè)計(jì):blinker

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

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

圖2. 工作臺(tái)啟動(dòng)


圖2. 工作臺(tái)啟動(dòng)

圖3. 建立一個(gè)空的工程
圖3. 建立一個(gè)空的工程

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

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

#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)
  {

  }
}

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

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

??? 下一步,將另外兩個(gè)文件從軟件分配源復(fù)制到您的工程目錄中:isr.cclib.r66。C文件含有中斷部分,編譯器需要利用它來(lái)編譯程序。r66文件含有應(yīng)用程序運(yùn)行需要的啟動(dòng)代碼和標(biāo)準(zhǔn)庫(kù)代碼。每次開(kāi)始新的MAXQ610工程時(shí),都需要重復(fù)這一復(fù)制步驟。

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

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

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

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

?

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

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

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


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

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

使用IAR嵌入式工作臺(tái)調(diào)試應(yīng)用程序

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

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

??? 單擊Break按鈕,或者選擇Debug Break,暫停執(zhí)行(圖7)。程序應(yīng)暫停在while(1)聲明上,這是因?yàn)樵撀暶髡加昧藷o(wú)限循環(huán)的大部分運(yùn)行時(shí)間,而中斷矢量只占用了很少的時(shí)間(每500ms只有幾個(gè)周期)。

圖7. Break按鈕


圖7. Break按鈕

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

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


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

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

圖9. Step Over按鈕


圖9. Step Over按鈕

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

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

圖10. 斷點(diǎn)設(shè)置和到達(dá)斷點(diǎn)


圖10. 斷點(diǎn)設(shè)置和到達(dá)斷點(diǎn)

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

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

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最下面一個(gè)引腳,因此,3個(gè)LED同步閃爍,而1個(gè)將獨(dú)立閃爍。延時(shí)循環(huán)間隔并不重要,但是必須提供足夠的延時(shí)才能觀察到結(jié)果。運(yùn)行該應(yīng)用程序(開(kāi)始調(diào)試,然后,運(yùn)行),您將很快看到和最初的應(yīng)用程序并沒(méi)有什么不同;所有LED以1秒的間隔同時(shí)接通和關(guān)斷。暫停應(yīng)用程序,打開(kāi)本地變量觀察窗口(View Locals)。如果程序停在主應(yīng)用程序的while循環(huán)(很有可能)中,窗口中將顯示變量x (圖11)。

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

圖11. 本地變量窗口


圖11. 本地變量窗口

了解詳細(xì)信息

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

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

IAR Embedded Workbench是IAR Systems AB的注冊(cè)商標(biāo)。

??? IAR是IAR Systems AB的商標(biāo)。

??? MAXQ是Maxim Integrated Products, Inc.的注冊(cè)商標(biāo)。

??? SPI是Motorola, Inc.的商標(biāo)。

?

?

?


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