新闻中心

EEPW首页 > 模拟技术 > 设计应用 > 实现MAXQ2000微控制器的JTAG加载主机

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

作者: 时间:2012-03-19 来源:网络 收藏
移出时,状态机保持在Shift-IR或者Shift-DR状态。在最后一个比特周期,TMS必须被驱动为高电平,这样,随着最后一位的输入和输出,TAP控制器将进入Exit1-DR或者Exit1-IR状态。

作为一个例子,在表4中,主机将数值100b (系统编程模式)移入到IR寄存器中。IR寄存器开始设置旁路值011b;TAP控制器最初为Run-Test-Idle状态。如下面的图4所示,比特以最低有效位在前、最高有效位在后移入(移出)TAP控制器。因此,在第一个移位周期,新数值的第0位被移入,旧数值的第0位被移出。

表4. 指令寄存器移位实例
TCKTMSTDITDOTAP StateShift RegisterInstruction Register
bit 2bit 1bit 0bit 2bit 1bit 0
01xxRun-Test-Idlexxx011
11xxSelect-DR-Scanxxx011
01xxSelect-DR-Scanxxx011
11xxSelect-IR-Scanxxx011
00xxSelect-IR-Scanxxx011
10xxCapture-IR001011
00xxCapture-IR001011
10xxShift-IR001011
000xShift-IR001011
100xShift-IR001011
0001Shift-IR000011
1001Shift-IR000011
0110Shift-IR000011
1110Exit1-IR000011
01x0Exit1-IR100011
11x0Update-IR100100
00xxUpdate-IR100100
10xxRun-Test-Idlexxx100

下面是执行这一操作的例程shiftIR3。

;==============================================================================;=;=  shiftIR3;=     clock0, clock1, shift;=;=  Shifts a 3-bit value into the IR register.;=;=  Inputs   : A[0] - Low three bits contain value to shift into IR;=  Outputs  : None;=  Destroys : AP, APC, A[0], PSW, LC[0];=shiftIR3:move    APC, #80h         ; Acc => A[0], turn off auto inc/deccall    clock1            ; (Select DR Scan)call    clock1            ; (Select IR Scan)call    clock0            ; (Capture IR - loads 001b to shift register)call    clock0            ; (Shift IR)move    TMS, #0           ; Drive TMS low                            move    C, TDO            ; xxxxx210   c = srrc                       ; sxxxxx21   c = 0call    shift             ; Shift in IR bit 0rrc                       ; ssxxxxx2   c = 1call    shift             ; Shift in IR bit 1rrc                       ; sssxxxxx   c = 2move    TMS, #1           ; Drive TMS high for last bitcall    shift             ; Shift in IR bit 2 (Exit1 IR)call    clock1            ; (Update IR)call    clock0            ; (Run Test Idle)ret

写入TAP数据寄存器

数值移入或者移出TAP控制器DR的操作与装入/卸载IR的方式相似。通常,只有当IR被设置为两个数值之一时才能进行这一操作:100b (使TAP控制器进入系统编程模式)或者010b (使TAP控制器进入调试模式)。

激活系统编程模式后,装入和卸载DR寄存器的操作如下。
  • DR寄存器移入和移出宽度为3比特。所有三个比特都代表有效数据。
  • 当到达Update-DR状态时,送入DR寄存器的数值被复制到从机的内部系统编程寄存器中。这三个比特的用法如下。
    • 从机可访问第0位(读/写),它作为寄存器位ICDF.1 (SPE),也被称为系统编程使能位。复位后,程序ROM检查该位,确定应进入启动加载程序模式(SPE = 1)还是正常程序执行模式(SPE = 0)。
    • 从机可访问第1位和第2位(读/写),它作为寄存器位ICDF.2-3 (PSS0-PSS1),也被称为编程源选择位。对于能够为启动加载程序提供多个接口的微控制器,例如,这些位用于当SPE = 1时应选择哪一启动加载程序接口。当SPE = 0 (正常程序执行模式)时,这些位的设置不起作用。
  • DR寄存器传送出去的数值是系统编程寄存器以前的数值(当进入Capture-DR状态后,锁存到移位寄存器中)。
激活系统编程模式后,装入和卸载DR寄存器的操作如下。
  • DR寄存器移入和移出宽度为10比特。对于移出数据,所有10个比特都代表有效数据(8个数据位和2个状态位)。对于移入数据,只使用了8个数据位;没有使用两个状态位。
  • 然后,将移入DR寄存器的高8位卸载,作为启动加载程序命令的一部分,被启动加载程序(从程序ROM中运行)读取。
  • 移出DR寄存器的10个比特含有8位由启动加载程序装入的数值(作为命令输出的一部分),以及由TAP控制器设置的两个状态信息位。
;==============================================================================;=;=  shiftDR3;=;=  Shifts a 3-bit value into the DR register.  This operation should only be;=  performed when IR =100b (System Programming Mode).;=;=  Inputs   : A[0] - Low 3 bits contain value to shift into SPB (PSS1:PSS0:SPE);=  Outputs  : None;=  Destroys : AP, APC, A[0], PSW, LC[0]shiftDR3:move    APC, #80h         ; Acc => A[0], turn off auto inc/deccall    clock1            ; (Select DR Scan)call    clock0            ; (Capture DR)call    clock0            ; (Shift DR)move    TMS, #0           ; Drive TMS low                            move    C, TDO            ; xxxxx210   c = srrc                       ; sxxxxx21   c = 0call    shift             ; Shift in DR bit 0rrc                       ; ssxxxxx2   c = 1call    shift             ; Shift in DR bit 1rrc                       ; sssxxxxx   c = 2move    TMS, #1           ; Drive TMS high for last bitcall    shift             ; Shift in DR bit 2 (Exit1 DR)call    clock1            ; (Update DR)call    clock0            ; (Run Test Idle)ret;==============================================================================;=;=  shiftDR;=     clock0, clock1, shift;=;=  Shifts a 10-bit value into and out of the DR register.  This operation ;=  should only be performed when IR = 010b (Debug/Loader Mode).;=;=  Inputs   : A[0]  - Byte value (input) to shift into DR;=  Outputs  : A[0]  - Byte value (output) shifted out of DR;=             A[1]  - Low two bits are status bits 1:0 shifted out of DR;=             A[15] - Byte value shifted in, cached for use by shiftDR_next;=  Destroys : AP, APC, PSW, LC[0]shiftDR:move    APC, #80h         ; Acc => A[0], turn off auto inc/decmove    A[15], A[0]       ; Cache input byte value for use by shiftDR_nextsla2                      ; Add two empty bits (for status)call    clock1            ; (Select DR Scan)call    clock0            ; (Capture DR)call    clock0            ; (Shift DR)move    TMS, #0           ; Drive TMS low                            move    C, TDO            ; xxxxxxxx76543210   c = s
				
            
                
			
							

关键词: MAXQ2000 微控制器 JTAG

评论


相关推荐

技术专区

关闭