实现MAXQ2000微控制器的JTAG加载主机

[09-13 17:04:13]   来源:http://www.88dzw.com  控制技术   阅读:8661

文章摘要:图4. 通过DR的移位数据和状态位2x5 如上面的图4所示,在TAP调试模式下,移入和移出DR的数据包括8个数据位(第2位到第9位)和两个状态位(第0位和第1位)。当JTAG主机移入数据时,只使用8个数据位。TAP控制器没有使用的两个状态位(也必须被移入),可以被设置为零,或者任何其他值。在TAP控制器移出的10位数值中,两个状态位提供启动加载程序或者调试引擎的状态信息。当启动加载程序运行时,一般只能达到最后两个状态(调试忙或者调试有效),这是因为其他两个状态值不会出现在启动加载程序模式中。(参见图4中的状态/条件) 如果状态位被设置为调试忙(10b),启动加载程序还没有读取被JTAG主机移入

实现MAXQ2000微控制器的JTAG加载主机,标签:计算机控制技术,工厂电气控制技术,http://www.88dzw.com

图4. 通过DR的移位数据和状态位

2x5 如上面的图4所示,在TAP调试模式下,移入和移出DR的数据包括8个数据位(第2位到第9位)和两个状态位(第0位和第1位)。当JTAG主机移入数据时,只使用8个数据位。TAP控制器没有使用的两个状态位(也必须被移入),可以被设置为零,或者任何其他值。

在TAP控制器移出的10位数值中,两个状态位提供启动加载程序或者调试引擎的状态信息。当启动加载程序运行时,一般只能达到最后两个状态(调试忙或者调试有效),这是因为其他两个状态值不会出现在启动加载程序模式中。(参见图4中的状态/条件)
  • 如果状态位被设置为调试忙(10b),启动加载程序还没有读取被JTAG主机移入到DR中的前一数值。这也表明,移出的8位数据没有意义,因为启动加载程序还没有执行完命令。接收到该数值后,JTAG主机必须以前一发送的字节值重新装入DR,这样,启动加载程序可以访问它。正确执行这一操作的状态顺序如下。
    • 在Shift-DR状态,将最后一个比特移入到DR中,转换到Exit1-DR之后,JTAG主机应检查两个状态位。
    • 如果接收到调试忙值,转换到Pause-DR状态,从这里到Exit2-DR,然后再次返回Shift-DR。重新装入前一DR值(这次不是移位的数值),然后通过Exit1-DR和Update-DR,忽略第二次通过的状态位值。
    • 延迟较短的一段时间(取决于所执行的命令),重试字节传送。
  • 如果状态位被设置为调试有效(11b)值,表明启动加载程序读取了移入的最后字节,已经装入了应答字节。移出的8位数值含有有效数据。
当执行启动加载程序命令序列时,shiftDR和shiftDR_next例程自动完成同步。应为序列中的第一个字节调用shiftDR例程;为后续字节调用shiftDR_next。shiftDR_next例程的过程和shiftDR一致,只是在需要时,它还检查两个状态位,并重新传送上面说明的前一DR字节。sendCommand例程结合了所有这些,调用shiftDR和shiftDR_next来发送命令序列,根据需要延迟并重新发送字节,直到命令完成。
;==============================================================================
;=
;=  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/dec
   push    LC[1]
   call    waitForPrompt
   pop     LC[1]
   jump    C, sendCommand_fail

   move    Acc, @DP[0]       ; Read first byte to transmit
   call    shiftDR
   push    Acc
   move    Acc, A[1]
   cmp     #3                ; Should be valid status since we had a prompt
   pop     Acc
   jump    NE, sendCommand_fail

   move    @DP[0], Acc       ; Store first received byte
   move    NUL, @DP[0]++     ; Increment data pointer
   djnz    LC[1], sendCommand_loop
   jump    sendCommand_pass

sendCommand_loop:
   move    A[2], #10         ; Number of retries allowed
sendCommand_retry:
   move    Acc, @DP[0]       ; Get next byte to transmit
   call    shiftDR_next
   push    Acc
   move    Acc, A[1]
   cmp     #3
   pop     Acc
   jump    NE, sendCommand_stall

   move    @DP[0], Acc       ; Store received byte
   move    NUL, @DP[0]++     ; Increment data pointer
   djnz    LC[1], sendCommand_loop
   jump    sendCommand_pass

sendCommand_stall:
   move    LC[0], #8000      ; About a millisecond
   djnz    LC[0], $
   move    Acc, A[2]
   sub     #1
   jump    NZ, sendCommand_retry
   jump    sendCommand_fail

加载程序提供的功能

MAXQ微控制器的启动加载程序功能一般采用共享模式,这意味着器件之间很多命令和状态代码都是相同的。不同器件根据内部程序存储器结构和其他要求,可以采用不同的启动加载程序命令子集。关于这方面的详细信息,请参考您正在使用的MAXQ微控制器用户指南附录(English only)。对于这一情况,可以参考MAXQ2000用户指南附录(English only)中"在系统编程"一节的启动加载程序命令。

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13]  下一页


Tag:控制技术计算机控制技术,工厂电气控制技术控制技术

《实现MAXQ2000微控制器的JTAG加载主机》相关文章