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

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

文章摘要:控制JTAG端口和复位线从机MAXQ2000 (TMS, TCK, TDO和TDI) JTAG/TAP端口的四条线以及nRESET线分别连接至主机MAXQ2000的一个端口引脚。控制JTAG接口的第一步是正确配置这些线。 #define TCK PO0.0 ; Test Clock - Master output#define TDO PI0.1 ; Test Data Out - Slave output, master input#define TMS PO0.2 ; Test Mode Sel - Master output#defi

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

控制JTAG端口和复位线

从机MAXQ2000 (TMS, TCK, TDO和TDI) JTAG/TAP端口的四条线以及nRESET线分别连接至主机MAXQ2000的一个端口引脚。控制JTAG接口的第一步是正确配置这些线。
#define  TCK   PO0.0      ; Test Clock    - Master output
#define  TDO   PI0.1      ; Test Data Out - Slave output, master input
#define  TMS   PO0.2      ; Test Mode Sel - Master output
#define  TDI   PO0.3      ; Test Data In  - Master output
#define  RST   PD0.4      ; Reset         - Master open-drain output (on 1)
四条JTAG线工作在标准驱动模式下。从主机角度看,TMS、TCK和TDI总是被驱动为输出,而TDO (由从机驱动)总是为输入。JTAG线的方向固定,不是双向的。nRESET线是特殊情况,被配置为主机侧开漏输出。通常,从机将自己的nRESET线拉至高电平,因此,主机只能将该线拉低(复位从机时),或者完全释放它(在其他所有时间)。主机不应将从机的nRESET线驱动为高电平。
;==============================================================================
;=
;=  initializeJTAG
;=
;=  Sets up the port pins for the JTAG interface.
;=
;=  Inputs   : None
;=  Outputs  : None
;=  Destroys : None
;=

initializeJTAG:
   move    PD0.0, #1      ; TCK - master output
   move    PO0.0, #1      ; Drive high
   move    PD0.1, #0      ; TDO - master input
   move    PO0.1, #1      ; Weak pullup on
   move    PD0.2, #1      ; TMS - master output
   move    PO0.2, #1      ; Drive low
   move    PD0.3, #1      ; TDI - master output
   move    PO0.3, #1      ; Drive high
   move    PD0.4, #0      ; RST - open drain when 1, tristate when 0
   move    PO0.4, #0      ; Weak pullup off
   ret
端口引脚初始化之后,采用例程clock0和clock1来同步TMS线上的静态0和1,使TAP控制器从一个状态转换到另一状态。只要JTAG时钟速率保持低于从机微控制器系统时钟速率1/8的最大值,JTAG时钟可以采用任何频率。这里不需要考虑主机的系统时钟速率;它不需要和从机系统时钟速率相匹配。主机可以比从机运行的快或者慢,而不会导致出现JTAG通信问题。

由于这一例子中的从机MAXQ2000安装了8MHz时钟晶振,主机能够驱动JTAG时钟达到1MHz,而不会出现问题。对于这个例子,100kHz JTAG时钟足够了。
#define   JCLOCK           40        ; 100kHz : (((10us / (1/8MHz)) / 2)

;==============================================================================
;=
;=  clock0
;=
;=  Clocks a zero TMS bit into the JTAG interface.
;=
;=  Inputs   : None
;=  Outputs  : None
;=  Destroys : LC[0]

clock0:
   move    TMS, #0           ; Drive TMS low
   move    LC[0], #JCLOCK
   djnz    LC[0], $
   move    TCK, #1           ; Clock rising edge
   move    LC[0], #JCLOCK
   djnz    LC[0], $
   move    TCK, #0           ; Clock falling edge
   move    LC[0], #JCLOCK
   djnz    LC[0], $
   ret


;==============================================================================
;=
;=  clock1
;=
;=  Clocks a one TMS bit into the JTAG interface.
;=
;=  Inputs   : None
;=  Outputs  : None
;=  Destroys : LC[0]

clock1:
   move    TMS, #1           ; Drive TMS high
   move    LC[0], #JCLOCK
   djnz    LC[0], $
   move    TCK, #1           ; Clock rising edge
   move    LC[0], #JCLOCK
   djnz    LC[0], $
   move    TCK, #0           ; Clock falling edge
   move    LC[0], #JCLOCK
   djnz    LC[0], $
   ret
利用这两个例程,我们可以增加另一个例程来初始化TAP控制器,迫使它回到Test-Logic-Reset状态。注意Test-Logic-Reset状态,正如其名称的含义,它对TAP逻辑进行彻底复位,包括确定启动加载程序是否使能以及启动加载程序使用哪一接口位(SPE和PSS[1:0])。因此,一旦进入启动加载程序模式,设置TAP控制器为Test-Logic-Reset,对器件进行复位,退出启动加载程序模式。演示应用程序中使用的JTAG例程(除了testLogicReset本身之外)都假定TAP控制器在例程启动时处于Run-Test-Idle状态。在JTAG通信期间,TAP控制器在不同状态间转换;例程最后,TAP控制器总是返回到Run-Test-Idle。
;==============================================================================
;=
;=  testLogicReset
;=     clock0, clock1
;=
;=  Resets the JTAG/TAP controller to its starting state.
;=
;=  Inputs   : None
;=  Outputs  : None
;=  Destroys : LC[0]
;=

testLogicReset:
   call    clock1
   call    clock1
   call    clock1
   call    clock1
   call    clock1
   call    clock1
   call    clock1
   call    clock0            ; Brings us to Run-Test-Idle
   ret

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


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

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