图1显示了串口-JTAG适配器(包含于所有MAXQ微控制器评估板中)是如何连接PC串行COM口和MAXQ微控制器的JTAG口的。
图1. 用于MAXQ的串口-JTAG接口。
JTAG接口信号和电缆
JTAG适配器通过10芯带状电缆和2 x 5、0.100"间距的接插件与MAXQ评估板连接。该电缆传输的信号列在下面表1中。
表1. JTAG接口信号
Pin Number | Signal Type | Signal Name | Signal Description |
1 | Input to MAXQ | TCK | JTAG/TAP Test Clock |
2 | Ground | GND | Ground |
3 | Output from MAXQ | TDO | JTAG/TAP Test Data Out |
4 | Reference | VREF | Supplied by MAXQ kit to set the reference level for JTAG signals output by the Serial-to-JTAG board |
5 | Input to MAXQ | TMS | JTAG/TAP Test Mode Select |
6 | Input to MAXQ | nRST | Open-drain drive, connected to MAXQ reset line |
7 | None | KEY | Keyed pin for JTAG cable alignment |
8 | Power | VCC5 | +5.0V (±5%) supply provided by JTAG board |
9 | Input to MAXQ | TDI | JTAG/TAP Test Data In |
10 | Ground | GND | Ground |
表2. 评估板设置
Evaluation Kit | JTAG Power Supply | Kit Power Supply | Jumper Settings | JTAG Header |
MAXQ2000 | 5V, ±5% | None | JTAG―Close JH1, JH2, JH3Kit―Close JU11; Close 1+2 on JU1, JU2, JU3 | J4 |
$include (..\api\maxQ2000.inc) org 0000h main: jump $ end以上$include行因包含文件的位置而异。关于$include和org伪指令的详细信息,请参考本文档的“使用MAX-IDE汇编器”一节。
关于汇编和包含文件的说明
当一个项目已经建立或者打开后,该项目中的汇编代码文件将被列在左侧的面板上。双击文件名可以将其打开,以便在MAX-IDE中进行编辑,如下面的图3所示。
图3. MAX-IDE项目环境
运行项目
项目被成功编译后,可以采用以下方法之一,在调试器中执行该项目。
选择Debug Stop,或者单击工具条上的Stop图标,将完全停止程序运行。但是,如果停止在第一行(Step Into)、光标行(Run to Cursor)或者设置了断点的行,接下来还可以使用单步模式运行程序。也可以通过单击Pause按钮进入单步模式。在该模式下,以绿色箭头标志当前运行所处的位置,可使用下列命令:
显示和编辑处理器寄存器
程序装入并执行了至少一条指令后,就可以利用调试器来查看和编辑MAXQ微控制器的寄存器。选择Window Show Registers 将显示寄存器组。随着调试器中代码的执行,这些寄存器中的数值将随之更新。双击可写寄存器的数值区可以对其进行编辑,可以输入十六进制、十进制或二进制的新值。
使用MAXQ2000评估板时应注意:如果装配了LCD子板,不要手动编辑PO0, PD0, PO1, PD1, PO2, PD2, PO3或者PD3寄存器的值。当带有LCD时,这些引脚上的静态输出会损坏LCD。
显示和编辑处理器存储器
程序装入并至少执行一条指令后,就可以查看和编辑MAXQ微控制器的内部存储器了。选择Window Show Memory 将显示内部存储器。通过显示窗口中的下拉列表,你可以选择查看代码、数据或者堆栈存储器。代码和堆栈区用16位宽显示,数据区用8位宽显示。数据和堆栈区的存储器值可以编辑,双击某个存储器位置并输入新值即可。
有关如何使用宏以及其他预处理伪指令的举例,请参考'Macro'实例项目。
一般语法
MAXQ汇编器和预处理器均对大小写不敏感。汇编语句遵循以下格式:
[label:] [opcode [parameter [, parameter]]] [;comment]如以下代码:
main: move Acc, A[2] ; copy A[2] to active accumulator标志符(例如上面的'main'标号)可以含有字符[a-zA-Z_?$0-9],但是不能以0-9数字开始。其长度可以达到127个字符。
请参考MAXQ系列用户指南,了解MAXQ微控制器系列的体系结构、指令集、寻址模式和核心寄存器的详细说明。
源文件
项目编译时,MAX-IDE项目窗口列出的所有汇编源文件(.asm)将按照窗口中文件列出顺序进行汇编。没有提供链接器,因此,在汇编多个文件时,就如同它们被合并到单个文件中进行汇编一样。
源文件可以包含伪指令、等同/定义、宏、条件汇编模块和声明等。任何源代码文件的最后一行必须为END伪指令:
end包含文件
(source file): (equates.inc): $include(equates.inc) ---> MASK1 equ 0FFh MASK2 equ 0FEh (resume parsing in source 包含文件可以含有“include”伪指令、等同、宏和DB/DW数据声明,但是不能含有汇编子程序。包含文件不必结束于END伪指令。MAX-IDE为每种MAXQ微控制器提供标准包含文件,在其中定义了该类微控制器的外设寄存器组,以及应用ROM所提供函数的地址。这些包含文件可用于所有汇编语言项目;它们位于MAX-IDE主安装目录的Examples子目录中。
常数
语句或等同说明中作为立即数的常数可以采用以下四种格式之一。
move Acc, #(1+1) ; 2 : Addition move Acc, #(4-1) ; 3 : Subtraction move Acc, #(2*2) ; 4 : Multiplication move Acc, #(25/5) ; 5 : Division (truncated to integer) move Acc, #(MIN(6,7)) ; 6 : Minimum of two values move Acc, #(MAX(6, 7)) ; 7 : Maximum of two values move Acc, #'A' ; ASCII value of 'A' move Acc, #(550h | 055h) ; 555h : Logical OR move Acc, #(550h & 055h) ; 050h : Logical AND move Acc, #(550h ^ 055h) ; 505h : Logical XOR move Acc, HIGH(#1234h) ; 12h : Select high byte of word move Acc, LOW(#1234h) ; 34h : Select low byte of word move Acc, NOT(#0000h) ; FFFFh : Bitwise negation move Acc, #001h << 7 ; 080h : Shift left move Acc, #080h >> 7 ; 001h : Shift right等同
ONE equ 01 TWO equ 02 move Acc, #ONE move Acc, #(ONE+TWO)等同也可以被后面的等同说明引用。
ONE equ 01 TWO equ ONE+ONE定义
#define PO[0] M0[0] move Acc, PO[0] ; Parses as 'move Acc, M0[0]'数据声明
db 055h, 0AAh, 055h, 0AAh ; byte values dw 0AAAAh, 05555h ; word values db "MAX-IDE Environment " ; byte value for each char (padded to even count)注意,这些数据将被插入到代码空间中。因此,如果DB声明出现在两组指令之间,那么定义的字节数必须是偶数,以免发生字对齐汇编错误。
条件汇编
只有符合某些布尔条件时,才对某块代码进行汇编。具有以下格式。
IF (布尔表达式可以由常数、等同或者以下布尔运算符组成:=, !=, , 和 >=。在条件汇编代码块中只能有代码和包含语句,而不能有宏或者等同说明。) statements ... ENDIF
DEBUG equ 0 DOINC equ 1 IF (DEBUG != 0) call RoutineDbg ENDIF IF (DEBUG = 0) call Routine ENDIF IF (DOINC = 1) $include(defines.inc) ENDIF宏
最简单的一类宏仅是在其被引用时,将其代码插入。所插入代码中的等同、定义和嵌套的宏调用等均按常规方式处理。MACRO [[PARAM ] [whitespace AND/OR comma] [ ] ...] [LOCAL [whitespace AND/OR comma] [ ] ...] ... ENDM
ThreeNops MACRO nop nop nop ENDM ThreeNops --> nop nop nop宏可以具有一个或多个参数,在引用宏时传递数值给它们。这些数值被传递给展开后的代码。下面的宏采用一个参数为任一可写寄存器(Acc除外)提供'INC'功能,只需占用一级堆栈空间。
Inc MACRO PARAM Register push Acc move Acc, Register add #1 move Register, Acc pop Acc ENDM Inc LC[0] --> push Acc move Acc, LC[0] add #1 move LC[0], Acc pop Acc宏也可以含有局部标识符,代码展开后对其重新命名,这样每次引用宏时它们各不相同。
LoopN MACRO PARAM Count LOCAL L1 move LC[0], Count L1: djnz LC[0], L1 ENDM
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』