<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 模擬技術(shù) > 設計應用 > 實(shí)現MAXQ2000微控制器的JTAG加載主機

實(shí)現MAXQ2000微控制器的JTAG加載主機

作者: 時(shí)間:2012-03-19 來(lái)源:網(wǎng)絡(luò ) 收藏
rrc call shift ; Shift in DR bit 0rrc call shift ; Shift in DR bit 1rrc call shift ; Shift in DR bit 2rrc call shift ; Shift in DR bit 3rrc call shift ; Shift in DR bit 4rrc call shift ; Shift in DR bit 5rrc call shift ; Shift in DR bit 6rrc call shift ; Shift in DR bit 7rrc call shift ; Shift in DR bit 8rrc move TMS, #1 ; Drive TMS high for last bitcall shift ; Shift in DR bit 9 (Exit1 DR)call clock1 ; (Update DR)call clock0 ; (Run Test Idle)push Acc ; sddd dddd 10xx xxxxsra4 ; ssss sddd dddd 10xxsra2 ; ssss sssd dddd dd10and #0003h ; ---- ---- ---- --10move A[1], Acc ; Return status bits only in A[1]pop Accand #0FF00h xch ; Return data bits only in A[0]ret

進(jìn)入程序加載模式

需要按照以下步驟使進(jìn)入啟動(dòng)加載程序模式。
  1. 初始化TAP控制器,重新設置它,進(jìn)入Test-Logic-Reset狀態(tài)。
  2. 設置指令寄存器(IR)為100b,使能系統編程模式。
  3. 設置數據寄存器(DR)為001b。這使得SPE(系統編程使能)位為1,使能啟動(dòng)加載程序,設置PSS[1:0] (編程源選擇)位為00b,選擇接口。
  4. 保持nRESET低電平,復位。
  5. 釋放nRESET。這導致指向程序ROM (8000h)中的標準復位點(diǎn)。程序ROM代碼將檢查SPE和PSS位值,相應地激活JTAG啟動(dòng)加載程序。在這一點(diǎn),啟動(dòng)加載程序運行,準備接收JTAG命令。
  6. 設置指令寄存器(IR)為010b,使能調試模式。該模式用于和JTAG啟動(dòng)加載程序或者調試引擎進(jìn)行通信;在這一例子中,我們將使用該模式和啟動(dòng)加載程序進(jìn)行通信。
  7. 10位數據移位通過(guò)DR,開(kāi)始向JTAG啟動(dòng)加載程序發(fā)送命令。
#define  IR_DEBUG         010b      ; Debug Mode#define  IR_BYPASS        011b      ; Bypass Mode (default)#define  IR_SYSTEM_PROG   100b      ; System Programming Mode (activate loader); System Programming Register settings#define  SP_EXECUTE       000b      ; Bootloader disabled#define  SP_LOAD_JTAG     001b      ; Activate JTAG bootloader #define  SP_LOAD_UART     011b      ; Activate UART bootloader#define  SP_LOAD_SPI      101b      ; Activate SPI bootloader (invalid on 2000)#define  SP_RESERVED      111b      ; Reserved value...call    initializeJTAG    ; Set up port pins for JTAGcall    testLogicReset    ; Reset JTAG port (ending state: Run-Test-Idle)move    Acc, #IR_SYSTEM_PROGcall    shiftIR3          ; Load the System Programming instruction into IRmove    Acc, #SP_LOAD_JTAGcall    shiftDR3          ; Enable the bootloader in JTAG interface modemove    RST, #1           ; Drive nRESET lowmove    Acc, #100         ; Delay for 100mscall    delayMScall    clock0            ; Remain in Run-Test-Idlemove    RST, #0           ; Release nRESETmove    Acc, #100         ; Delay for 100mscall    delayMSmove    Acc, #IR_DEBUGcall    shiftIR3          ; Enable access to the 10-bit debug shift register;;;;  Bootloader commands may now be shifted through the DR registercall    waitForPrompt     ; Verify that the bootloader is responding...

與加載程序通信

一旦啟動(dòng)加載程序運行,程序ROM中的啟動(dòng)加載程序代碼讀取內部寄存器的命令代碼,命令代碼由DR移位寄存器裝入。程序ROM還把結果數據寫(xiě)入另一內部寄存器,由JTAG主機通過(guò)DR寄存器移出。通過(guò)這種方式,啟動(dòng)加載程序代碼和JTAG主機交換信息。

然而,啟動(dòng)加載程序代碼和JTAG主機并不同步。只要JTAG時(shí)鐘保持低于MAXQ系統時(shí)鐘1/8的最大值,由于JTAG是同步接口,因此,兩路時(shí)鐘的確切值并不影響通信。但是,MAXQ系統時(shí)鐘速率以及接收到的啟動(dòng)加載程序命令特性將決定啟動(dòng)加載程序接收命令和發(fā)送回應之間的延時(shí)。例如,1MHz運行的MAXQ2000響應某一啟動(dòng)加載程序命令的時(shí)間要比10MHz的MAXQ2000時(shí)間長(cháng),即使兩個(gè)都可以采用100kHz的JTAG時(shí)鐘進(jìn)行通信。只是讀并返回信息的命令,例如返回ROM標志ID的命令以及從程序存儲器讀取的命令,花費的時(shí)間也要少于編程閃存操作等命令。

通過(guò)JTAG接口傳送的數據沒(méi)有被緩沖。如果在前一命令被讀取之前,發(fā)送了另一10位命令,前一命令的結果丟失。ROM代碼和TAP控制器保證前一數據被JTAG主機卸載前,啟動(dòng)加載程序不會(huì )發(fā)送其他數據,但反方向還是需要同步。JTAG主機需要通過(guò)某種方式知道移入DR的前一字節是否已經(jīng)被啟動(dòng)加載程序讀取了。這樣,JTAG主機能夠知道什么時(shí)候發(fā)送下一字節。采用的方法是利用TAP控制器發(fā)送的其他兩個(gè)狀態(tài)位,以及啟動(dòng)加載程序輸出的每個(gè)8位字節。

實(shí)現MAXQ2000微控制器的JTAG加載主機
圖4. 通過(guò)DR的移位數據和狀態(tài)位

2x5 如上面的圖4所示,在TAP調試模式下,移入和移出DR的數據包括8個(gè)數據位(第2位到第9位)和兩個(gè)狀態(tài)位(第0位和第1位)。當JTAG主機移入數據時(shí),只使用8個(gè)數據位。TAP控制器沒(méi)有使用的兩個(gè)狀態(tài)位(也必須被移入),可以被設置為零,或者任何其他值。

在TAP控制器移出的10位數值中,兩個(gè)狀態(tài)位提供啟動(dòng)加載程序或者調試引擎的狀態(tài)信息。當啟動(dòng)加載程序運行時(shí),一般只能達到最后兩個(gè)狀態(tài)(調試忙或者調試有效),這是因為其他兩個(gè)狀態(tài)值不會(huì )出現在啟動(dòng)加載程序模式中。(參見(jiàn)圖4中的狀態(tài)/條件)
  • 如果狀態(tài)位被設置為調試忙(10b),啟動(dòng)加載程序還沒(méi)有讀取被JTAG主機移入到DR中的前一數值。這也表明,移出的8位數據沒(méi)有意義,因為啟動(dòng)加載程序還沒(méi)有執行完命令。接收到該數值后,JTAG主機必須以前一發(fā)送的字節值重新裝入DR,這樣,啟動(dòng)加載程序可以訪(fǎng)問(wèn)它。正確執行這一操作的狀態(tài)順序如下。
    • 在Shift-DR狀態(tài),將最后一個(gè)比特移入到DR中,轉換到Exit1-DR之后,JTAG主機應檢查兩個(gè)狀態(tài)位。
    • 如果接收到調試忙值,轉換到Pause-DR狀態(tài),從這里到Exit2-DR,然后再次返回Shift-DR。重新裝入前一DR值(這次不是移位的數值),然后通過(guò)Exit1-DR和Update-DR,忽略第二次通過(guò)的狀態(tài)位值。
    • 延遲較短的一段時(shí)間(取決于所執行的命令),重試字節傳送。
  • 如果狀態(tài)位被設置為調試有效(11b)值,表明啟動(dòng)加載程序讀取了移入的最后字節,已經(jīng)裝入了應答字節。移出的8位數值含有有效數據。
當執行啟動(dòng)加載程序命令序列時(shí),shiftDR和shiftDR_next例程自動(dòng)完成同步。應為序列中的第一個(gè)字節調用shiftDR例程;為后續字節調用shiftDR_next。shiftDR_next例程的過(guò)程和shiftDR一致,只是在需要時(shí),它還檢查兩個(gè)狀態(tài)位,并重新傳送上面說(shuō)明的前一DR字節。sendCommand例程結合了所有這些,調用shiftDR和shiftDR_next來(lái)發(fā)送命令序列,根據需要延遲并重新發(fā)送字節,直到命令完成。
;==============================================================================;=;=  sendCommand;=;=  Transmits a loader command by shifting bytes through DR.;=;=  Inputs   : DP[0] - Points to area of RAM which stores input bytes;=                     for command and which will be filled with output.;=             LC[1] - Number of bytes to transmit/receive;=  Outputs  : C - Set on JTAG communication error;=  Destroys : AP, APC, A[0], A[1], A[2], A[15], PSW, LC[0];=sendCommand:move    APC, #80h         ; Acc => A[0], turn off auto inc/decpush    LC[1]call    waitForPromptpop     LC[1]jump    C, sendCommand_failmove    Acc, @DP[0]       ; Read first byte to transmitcall    shiftDRpush    Accmove    Acc, A[1]cmp     #3                ; Should be valid status since we had a promptpop     Accjump    NE, sendCommand_failmove    @DP[0], Acc       ; Store first received bytemove    NUL, @DP[0]++     ; Increment data pointerdjnz    LC[1], sendCommand_loopjump    sendCommand_passsendCommand_loop:move    A[2], #10         ; Number of retries allowedsendCommand_retry:move    Acc, @DP[0]       ; Get next byte to transmitcall    shiftDR_nextpush    Accmove    Acc, A[1]cmp     #3pop     Accjump    NE, sendCommand_stallmove    @DP[0], Acc       ; Store received bytemove    NUL, @DP[0]++     ; Increment data pointerdjnz    LC[1], sendCommand_loopjump    sendCommand_passsendCommand_stall:move    LC[0], #8000      ; About a milliseconddjnz    LC[0], $move    Acc, A[2]sub     #1jump    NZ, sendCommand_retryjump    sendCommand_fail

加載程序提供的功能

MAXQ的啟動(dòng)加載程序功能一般采用共享模式,這意味著(zhù)器件之間很多命令和狀態(tài)代碼都是相同的。不同器件根據內部程序存儲器結構和其他要求,可以采用不


關(guān)鍵詞: MAXQ2000 微控制器 JTAG

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>