实现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加载主机》相关文章
- › 实现MAXQ2000微控制器的JTAG加载主机
- 在百度中搜索相关文章:实现MAXQ2000微控制器的JTAG加载主机
- 在谷歌中搜索相关文章:实现MAXQ2000微控制器的JTAG加载主机
- 在soso中搜索相关文章:实现MAXQ2000微控制器的JTAG加载主机
- 在搜狗中搜索相关文章:实现MAXQ2000微控制器的JTAG加载主机
分类导航
最新更新