新聞中心

        MAX-IDE入門

        ——
        作者: 時間:2007-01-26 來源:《Maxim公司》 收藏

        安裝max-ide

        系統要求

        操作系統:windows 98, windows nt, windows 2000, windows me或者windows xp

        至少一個未用的串行com端口(用于與maxq評估板通信),或者一個usb至串口適配器和一個未用的usb端口。

        運行安裝程序

        max-ide的安裝包為max-ide.zip,可以從maxq網頁下載。

        下載該安裝包,解壓縮,然后運行setup.exe,將max-ide安裝到您的硬盤上。
        在installshield對話框中,選擇典型安裝,安裝評估板maxq開發所需要的全部文件。

        安裝完成后,可以從開始菜單啟動max-ide。

        max-ide安裝的文件

        max-ide的主執行程序和幫助文件位于max-ide根目錄下,默認路徑為{program files}max-ide。其他文件在以下子目錄中。

        本文引用地址:http://www.104case.com/article/20641.htm

        compilers子目錄含有max-ide安裝的所有編譯器和匯編器的可執行程序和數據文件。至少包含標準maxq匯編器;也可能會安裝一些其它匯編器和編譯器,和你的獲得渠道有關。

        devices子目錄含有庫、驅動程序和配置文件,用于將應用定位于各種maxq微控制器和評估板,并完成它們之間的通信。

        examples子目錄含有代碼實例(/xxx_demo),以及所有maxq微控制器的標準包含文件和庫(/api)。

        設置jtag接口

        jtag適配板

        通過一個專用的jtag測試訪問端口(tap),max-ide與maxq微控制器的引導裝載程序和調試引擎接口,這個測試口符合jtag ieee標準1149。該接口由以下信號組成(它們通常與端口引腳復用):tms (測試模式選擇)、tck (測試時鐘)、tdi (測試數據輸入)和tdo (測試數據輸出)。

        圖1顯示了串口-jtag適配器(包含于所有maxq微控制器評估板中)是如何連接pc串行com口和maxq微控制器的jtag口的。


        圖1. 用于maxq的串口-jtag接口。

        jtag接口信號和電纜

        jtag適配器通過10芯帶狀電纜和2 x 5、0.100"間距的接插件與maxq評估板連接。該電纜傳輸的信號列在下面表1中。

        表1. jtag接口信號

        連接評估板

        根據所采用的評估板類型,需要對jtag適配板、評估板或者兩者供電。此處給出兩個電路板的簡要設置方法(表2);更詳細的說明請參考評估板數據資料。注意,無論是jtag適配板還是maxq評估板,所用的電源均為直流電源,中心為正。

        表2. 評估板設置

        使用max-ide時,請按照以下步驟設置maxq評估板和jtag適配板(圖2):


        如上所述將電源接到jtag適配板。
        如上所述設置評估板和jtag適配板的跳線。可能還需要根據評估需要設置評估板上其他的跳線或者dip開關;更詳細的信息請參考評估板數據資料。
        連接2 x 5 10芯帶狀電纜到jtag適配板上的p2插座和評估板上的對應插座。連接器僅能從一個方向連接;否則,請確定紅線連接至兩個插座相同編號的引腳。
        使用直通串行電纜將jtag適配板上的j1連接至pc com端口。
        打開所有電源。


        圖2. maxq2000評估板和jtag適配板。

        在max-ide中建立項目

        建立一個新的maxq匯編項目

        按照以下步驟,在max-ide中建立一個新的maxq匯編語言項目:

        從max-ide菜單選擇device maxq jtag。
        選擇project new project。建立一個未命名的項目。
        選擇project save project as。選擇您希望保存項目(.prj 文件)的位置。
        要建立一個新的匯編代碼文件,可選擇file new file。在文件中輸入匯編代碼后,選擇file save as,在你的項目目錄下保存新建立的.asm文件。下一步,選擇project add files,選擇新建的文件,加入到項目中。
        要將已有的匯編代碼文件加入到項目中,選擇project add files,然后選擇要加入的文件。
        不必將包含文件加入到項目中,匯編過程會自動讀入包含文件。

        maxq2000的一個匯編文件實例如下:

        $include (..apimaxq2000.inc)

        org 0000h

        main:
        jump $

        end

        以上$include行因包含文件的位置而異。關于$include和org偽指令的詳細信息,請參考本文檔的“使用max-ide匯編器”一節。

        關于匯編和包含文件的說明

        全體maxq微控制器共有的系統寄存器(例如累加器、數據指針和循環控制寄存器)已在max-ide匯編器中進行了預定義。外設寄存器因器件而異,必須在包含文件中定義。用于各種maxq微控制器的標準包含文件隨max-ide一起被安裝;上例中的包含文件是用于maxq2000的。

        預處理偽指令(例如等同、定義和宏)不會在一個項目內的不同文件之間傳送。如果一個max-ide匯編項目含有一個以上的匯編文件,各匯編文件必須含有它要用到的預處理偽指令或者文件包含偽指令。

        不管項目中有多少匯編文件,每個文件的最后必須有"end"聲明。

        不要在包含文件中加入"end"聲明。

        項目中含有多個匯編文件時,所有文件中的所有標識符都為公用的;即,任何匯編文件中的代碼都可以調用或引用同一項目中任何其他匯編文件中的例程或標號。

        打開一個已有的項目

        要打開一個以前建立的max-ide項目,只需從菜單中選擇project open project,然后選擇你希望打開的.prj文件。注意,如果jtag適配板和評估板沒有正確連接和上電,打開maxq jtag項目時可能會產生錯誤信息。

        當一個項目已經建立或者打開后,該項目中的匯編代碼文件將被列在左側的面板上。雙擊文件名可以將其打開,以便在max-ide中進行編輯,如下面的圖3所示。


        圖3. max-ide項目環境

        運行和調試代碼

        編譯項目

        要編譯項目文件,從菜單中選擇debug make或者debug build all,或者點擊工具條上這些命令的快捷按鈕,或者按下f7 (作用與make相同)。maxq編譯器運行,如果沒有錯誤,消息窗口中將出現"compiling...build successful."。構建過程中的任何錯誤將會出現在消息窗口中。

        運行項目

        項目被成功編譯后,可以采用以下方法之一,在調試器中執行該項目。

        選擇debug run (f5)后,編譯后的項目代碼通過jtag接口被裝入maxq微控制器并啟動運行。程序將持續運行,直到選擇了debug stop (shift+f5)、點擊pause按鈕或者程序執行到斷點為止。

        選擇debug step into (f11)后,編譯后的程序被載入,在源代碼的第一行暫停程序執行。

        選擇debug run to cursor (control+f10)后,編譯后的程序被載入,并開始運行,直到程序運行到編輯窗口中光標所在的行,或者遇到斷點,先到者為準。如果光標不在源代碼行上,選擇該選項將導致錯誤。

        斷點用來使程序運行到預定位置時暫停下來,可以采用以下三種方法之一設置或清除。

        將光標移到您希望建立斷點的行,選擇debug toggle breakpoint。
        將光標移到您希望建立斷點的行,點擊工具條上的禁行燈圖標。
        在編輯窗口中,單擊您希望建立斷點的行號。

        注意,可以將斷點設在沒有源代碼的行上,但是這不會起作用。maxq微控制器支持一次設4個斷點;如果選擇run to cursor,這將占用一個斷點,因此,在這種情況下,只能設置3個斷點。

        選擇debug stop,或者單擊工具條上的stop圖標,將完全停止程序運行。但是,如果停止在第一行(step into)、光標行(run to cursor)或者設置了斷點的行,接下來還可以使用單步模式運行程序。也可以通過單擊pause按鈕進入單步模式。在該模式下,以綠色箭頭標志當前運行所處的位置,可使用下列命令:

        debug step into (f11), debug step over (f10)和debug step out(shift+f10),在匯編調試模式下,這些命令的作用相同,即執行單個指令,將執行點轉至下一指令。

        debug run,從當前位置開始運行,直到下一個斷點,如上所述。

        debug run to cursor,從當前位置開始運行,直到光標所在的行,如上所述。

        注意,運行在匯編語言調試模式時,debug菜單下的high-level debug和low-level debug設置不起作用。

        顯示和編輯處理器寄存器

        程序裝入并執行了至少一條指令后,就可以利用調試器來查看和編輯maxq微控制器的寄存器。選擇window show registers 將顯示寄存器組。隨著調試器中代碼的執行,這些寄存器中的數值將隨之更新。雙擊可寫寄存器的數值區可以對其進行編輯,可以輸入十六進制、十進制或二進制的新值。

        使用maxq2000評估板時應注意:如果裝配了lcd子板,不要手動編輯po0, pd0, po1, pd1, po2, pd2, po3或者pd3寄存器的值。當帶有lcd時,這些引腳上的靜態輸出會損壞lcd。

        顯示和編輯處理器存儲器

        程序裝入并至少執行一條指令后,就可以查看和編輯maxq微控制器的內部存儲器了。選擇window show memory 將顯示內部存儲器。通過顯示窗口中的下拉列表,你可以選擇查看代碼、數據或者堆棧存儲器。代碼和堆棧區用16位寬顯示,數據區用8位寬顯示。數據和堆棧區的存儲器值可以編輯,雙擊某個存儲器位置并輸入新值即可。

        使用max-ide匯編器

        max-ide提供一個多道匯編器,用于開發maxq匯編語言應用程序。該匯編程序含有一個單道預處理器,能夠使用包含文件、符號等式、條件匯編和宏。匯編器和預處理器完全集成在max-ide環境中。

        有關如何使用宏以及其他預處理偽指令的舉例,請參考macro實例項目。

        一般語法

        maxq匯編器和預處理器均對大小寫不敏感。匯編語句遵循以下格式:

        [label:] [opcode [parameter [, parameter]]] [;comment]

        如以下代碼:

        main:
        move acc, a[2] ; copy a[2] to active accumulator

        標志符(例如上面的main標號)可以含有字符[a-za-z_?$0-9],但是不能以0-9數字開始。其長度可以達到127個字符。

        請參考maxq系列用戶指南,了解maxq微控制器系列的體系結構、指令集、尋址模式和核心寄存器的詳細說明。

        源文件

        項目編譯時,max-ide項目窗口列出的所有匯編源文件(.asm)將按照窗口中文件列出順序進行匯編。沒有提供鏈接器,因此,在匯編多個文件時,就如同它們被合并到單個文件中進行匯編一樣。

        源文件可以包含偽指令、等同/定義、宏、條件匯編模塊和聲明等。任何源代碼文件的最后一行必須為end偽指令:

        end

        包含文件

        不必刻意添加包含(.inc)文件到項目中。它們可以由“include”偽指令自動讀入和解析,就如同包含文件的全部文本被加入到源文件中“include”偽指令所在的位置一樣。

        (source file): (equates.inc):
        $include(equates.inc) ---> mask1 equ 0ffh
        mask2 equ 0feh
        (resume parsing in source <---
        file)

        包含文件可以含有“include”偽指令、等同、宏和db/dw數據聲明,但是不能含有匯編子程序。包含文件不必結束于end偽指令。
        max-ide為每種maxq微控制器提供標準包含文件,在其中定義了該類微控制器的外設寄存器組,以及應用rom所提供函數的地址。這些包含文件可用于所有匯編語言項目;它們位于max-ide主安裝目錄的examples子目錄中。

        常數

        語句或等同說明中作為立即數的常數可以采用以下四種格式之一。


        十進制(默認)—以非字符或d結尾。例如:10, 07d
        二進制—以b結尾。例如:01b, 1101101b
        十六進制—以0-9數字開始,以h結尾。例如:10h, 09ffeh
        單字符—轉換為一個字節的ascii值。例如:a

        以下運算符也可被用于常數和等同說明;在常數被解析之前,這些表達式在預處理階段被賦值。

        move acc, #(1+1) ; 2 : addition
        move acc, #(4-1) ; 3 : subtraction
        move acc, #(2*2) ; 4 : multiplication
        move acc, #(25/5) ; 5 : division (truncated to integer)

        move acc, #(min(6,7)) ; 6 : minimum of two values
        move acc, #(max(6, 7)) ; 7 : maximum of two values
        move acc, #a ; ascii value of a

        move acc, #(550h | 055h) ; 555h : logical or
        move acc, #(550h & 055h) ; 050h : logical and
        move acc, #(550h ^ 055h) ; 505h : logical xor
        move acc, high(#1234h) ; 12h : select high byte of word
        move acc, low(#1234h) ; 34h : select low byte of word
        move acc, not(#0000h) ; ffffh : bitwise negation
        move acc, #001h << 7 ; 080h : shift left
        move acc, #080h >> 7 ; 001h : shift right

        等同

        等同說明,即equ偽指令,用來在任何使用常數的地方代替數字常數。可以使用任何格式和上面所提到的常數運算符。標號不被認作常數。

        one equ 01
        two equ 02

        move acc, #one
        move acc, #(one+two)

        等同也可以被后面的等同說明引用。

        one equ 01
        two equ one+one

        定義

        定義偽指令支持c風格的直接文本替換,不需要額外的處理,常用于包含文件中定義外設寄存器。替換文本被限制為單行;不支持接續符。不支持c風格的宏。

        #define po[0] m0[0]

        move acc, po[0] ; parses as move acc, m0[0]

        數據聲明

        db和dw偽指令用于在十六進制文件的當前位置插入原始數據字節(包括來自于字符串值的數據字節)或字。

        db 055h, 0aah, 055h, 0aah ; byte values
        dw 0aaaah, 05555h ; word values
        db "max-ide environment " ; byte value for each char (padded to even count)

        注意,這些數據將被插入到代碼空間中。因此,如果db聲明出現在兩組指令之間,那么定義的字節數必須是偶數,以免發生字對齊匯編錯誤。
        條件匯編
        只有符合某些布爾條件時,才對某塊代碼進行匯編。具有以下格式。


        if ()
        statements
        ...
        endif

        布爾表達式可以由常數、等同或者以下布爾運算符組成:=, !=, <, <=, >, 和 >=。在條件匯編代碼塊中只能有代碼和包含語句,而不能有宏或者等同說明。

        debug equ 0
        doinc equ 1

        if (debug != 0)
        call routinedbg
        endif

        if (debug = 0)
        call routine
        endif

        if (doinc = 1)
        $include(defines.inc)
        endif



        一段代碼所執行的功能可以用宏來表示,每當該功能被調用時,它被當地展開并匯編。它們具有以下格式。

        macro [[param ] [whitespace and/or comma] [] ...]
        [local [whitespace and/or comma] [] ...]

        ...
        endm

        最簡單的一類宏僅是在其被引用時,將其代碼插入。所插入代碼中的等同、定義和嵌套的宏調用等均按常規方式處理。

        threenops macro
        nop
        nop
        nop
        endm

        threenops --> nop
        nop
        nop

        宏可以具有一個或多個參數,在引用宏時傳遞數值給它們。這些數值被傳遞給展開后的代碼。下面的宏采用一個參數為任一可寫寄存器(acc除外)提供inc功能,只需占用一級堆棧空間。

        inc macro param register
        push acc
        move acc, register
        add #1
        move register, acc
        pop acc
        endm

        inc lc[0] --> push acc
        move acc, lc[0]
        add #1
        move lc[0], acc
        pop acc


        宏也可以含有局部標識符,代碼展開后對其重新命名,這樣每次引用宏時它們各不相同。

        loopn macro param count
        local l1
        move lc[0], count
        l1:
        djnz lc[0], l1
        endm

        在引用這個宏時,插入其代碼時標號l1將被更改為一個不同的臨時標號。



        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 阿勒泰市| 师宗县| 蒲江县| 枞阳县| 泽库县| 朝阳市| 南木林县| 运城市| 磐安县| 兴山县| 荆州市| 青冈县| 图木舒克市| 灵武市| 柳林县| 南宁市| 清涧县| 苍溪县| 姜堰市| 安丘市| 平原县| 宁化县| 洞头县| 镇沅| 图木舒克市| 永登县| 上杭县| 洮南市| 永胜县| 湄潭县| 建德市| 庆城县| 万源市| 绥滨县| 中超| 长葛市| 织金县| 凉城县| 龙口市| 博罗县| 淳化县|