MAX-IDE入门

描述

MAX-IDE是MAXQ系列微控制器的全功能应用开发和调试环境。MAX-IDE设计用于与所有标准MAXQ评估套件配合使用,以提供基于项目的开发环境、对标准MAXQ调试功能的访问、集成的宏汇编器以及使用JTAG接口的在线应用加载。

概述

MAX-IDE是MAXQ系列微控制器的全功能、应用开发和调试环境。它适用于所有标准的MAXQ评估板,并提供以下功能。

基于项目的MAXQ装配开发环境

集成MAXQ宏汇编器,包括所有MAXQ微控制器的标准头文件

使用JTAG/TAP接口和ROM引导加载程序加载在线应用(用于带闪存或EEPROM程序存储器的MAXQ微控制器)

通过JTAG/TAP接口提供的在线调试功能包括断点、分步程序执行和存储器/寄存器内容查看

安装 MAX-IDE

系统要求

操作系统:Windows 98、Windows NT、Windows 2000、Windows ME 或 Windows XP®®

至少一个空闲串行COM端口(与MAXQ评估板通信需要),或一个USB转串行适配器和一个空闲USB端口

运行安装程序

MAX-IDE 的安装包是 MAX-IDE.zip。

下载此软件包,解压缩并运行安装程序.exe以将MAX-IDE安装到硬盘驱动器。

在InstallShield对话框中,选择典型安装,这将使用评估套件安装MAXQ应用开发所需的所有文件。

安装完成后,可以从“开始”菜单启动MAX-IDE。

最大集成集成组件安装的文件

MAX-IDE 的主要可执行文件和帮助文件位于 MAX-IDE 根目录中,缺省情况下位于 {Program Files}MAX-IDE。其他文件位于以下子目录中。

编译器子目录包含随MAX-IDE安装的所有编译器和汇编程序的可执行文件和数据文件。这至少包括标准的MAXQ汇编器;根据您使用的发行版,也可以安装其他汇编程序和编译器。

器件子目录包含库、驱动程序和配置文件,用于所有MAXQ微控制器和评估板的目标应用,并与所有MAXQ微控制器和评估板进行通信。

Example子目录包含所有MAXQ微控制器的代码示例(在/xxx_Demo中)和标准包含文件和库(在/api中)。

设置JTAG接口

串行转JTAG适配器板

MAX-IDE通过专用的JTAG测试访问端口(TAP)接口与MAXQ微控制器的引导加载程序和调试引擎功能接口,该接口与JTAG IEEE标准1149兼容。此接口由以下信号组成,这些信号通常与端口引脚多路复用:TMS(测试模式选择)、TCK(测试时钟)、TDI(测试数据输入)和 TDO(测试数据输出)。

图1说明了所有MAXQ微控制器评估套件附带的串行转JTAG适配器如何在PC串行COM端口和MAXQ微控制器的JTAG接口之间提供接口层。

寄存器

图1.用于MAXQ的串行至JTAG接口

JTAG接口信号和电缆

串行转JTAG适配器板通过10连接器带状电缆连接到MAXQ评估板,两端各有一个2×5 0.100“间隔的插座。该电缆承载的信号列于下表 1 中。

 

引脚编号 信号类型 信号名称 信号描述
1 输入至最大限量 TCK JTAG/TAP测试时钟
2 接地
3 最大分量输出 UD。 JTAG/TAP测试数据输出
4 参考 VREF 由MAXQ套件提供,用于设置串行转JTAG板输出的JTAG信号的基准电平
5 输入至最大限量 TMS JTAG/TAP测试模式选择
6 输入至最大限量 nRST 漏极开路驱动,连接MAXQ复位线
7 没有 .KEY 用于JTAG电缆对准的键控引脚
8 权力 VCC5 +5.0V (±5%) 电源由 JTAG 板提供
9 输入至最大限量 TDI JTAG/TAP测试数据
10 接地

 

连接评估套件

根据所使用的评估套件类型,串行转JTAG接口板和/或评估板可能需要电源。此处提供了设置两个板的简要说明(表 2);有关更详细的说明,请参阅评估板数据手册。注意,串行转JTAG板或任何MAXQ评估板使用的所有电源都是直流电源,中心柱正极。

 

评估套件 吉泰格电源 套件电源 跳线设置 JTAG标头
最大Q2000 5V, ±5% 没有 JTAG—关闭 JH1, JH2, JH3Kit—关闭 JU11;在 JU1、JU2、JU1 收盘 2+3 J4

 

为了设置MAXQ评估板和串行转JTAG板(图2)以与MAX-IDE配合使用:

将电源连接到串行转JTAG板,如上所示。

设置评估套件和串行转JTAG板的任何跳线,如上所示。可能需要在评估套件板上进行额外的跳线或DIP开关设置,以访问某些套件功能;有关更多详细信息,请参阅评估套件数据手册。

将串行转JTAG板上的P2接头的5×10 2连接器带状电缆连接到评估板上的相应接头。连接器可以键控以仅以一个方向连接;如果不是,请验证红线是否连接到两个接头上的同一引脚。

将串行到JTAG板上的直通串行电缆从J1连接到PC COM端口。

打开所有电源。

寄存器

图2.MAXQ2000评估板和串行转JTAG板

在 MAX-IDE 中使用项目

创建新的MAXQ装配项目

要在MAX-IDE中创建新的MAXQ汇编语言项目,请执行以下步骤。

从MAX-IDE菜单中,选择器件→MAXQ JTAG。

选择“项目”→“新建项目”。将创建一个无标题的项目。

选择“项目”→“将项目另存为”。选择要保存项目的位置(.prj 文件)。

要创建新的汇编语言文件,请选择“文件”→“新建文件”。将程序集代码输入到文件中后,选择“文件”→“另存为”,并将新创建的 .asm 文件保存在项目目录中。接下来,选择“项目”→“添加文件”,然后选择要添加到项目中的新创建的文件。

若要将现有汇编语言文件添加到项目中,只需选择“项目”→“添加文件”,然后选择要添加到项目中的文件。

包含文件不需要正式添加到项目中,因为它们是在组装过程中自动读取的。

MAXQ2000的示例装配文件为:

 


$include (..\api\maxQ2000.inc)

org 0000h

main:
    jump  $

end

上面的$include行将根据包含文件的位置而有所不同。有关 $includeorg 指令的更多详细信息,请参阅本文档的“使用 MAX-IDE 汇编器”部分。

有关汇编和包含文件的说明

所有MAXQ微控制器通用的系统寄存器(如累加器、数据指针和环路控制寄存器)在MAX-IDE汇编器中预定义。每个器件的外设寄存器都不同,必须在包含文件中定义。每个MAXQ微控制器的MAX-IDE安装都包含标准包含文件;上例所示的包含文件用于MAXQ2000。

预处理器指令(如等式、定义和宏)不会在项目内的文件之间传递。如果MAX-IDE程序集项目包含多个程序集文件,则任何预处理器指令或包含文件指令都必须包含在使用它们的每个汇编文件中。

无论项目中的程序集文件数如何,每个文件的末尾都必须显示“end”语句。

不要将“end”语句放在包含文件的末尾。

当项目中包含多个程序集文件时,所有文件中的所有标识符都是有效的公共标识符;也就是说,任何程序集文件中的代码都可以调用例程或引用该项目中任何其他程序集文件中定义的标签。

打开现有项目

要打开以前创建的MAX-IDE项目,只需从菜单中选择“项目→打开项目”,然后选择要打开的项目的.prj文件。注意,当串行转JTAG板和评估板未正确连接并上电时,打开MAXQ JTAG项目可能会导致错误信息。

创建或打开项目后,项目中包含的汇编代码文件将在左侧面板中列出。双击文件名将打开它,以便在 MAX-IDE 中进行编辑,如下图 3 所示。

寄存器

图3.MAX-IDE 项目环境。

执行和调试代码

编译项目

若要编译项目文件,请从菜单中选择“调试→生成”或“调试→全部生成”,单击工具栏上这些命令的快捷按钮之一,或按 F7(与 Make) 相同)。MAXQ汇编器将运行;如果没有错误,则消息“正在编译...构建成功“将显示在”消息“窗口中。生成中的任何错误也将显示在“消息”窗口中。

运行项目

成功编译项目后,可以使用几种方法之一在调试器中执行该项目。

选择调试→运行(F5)将通过JTAG接口将编译好的项目代码加载到MAXQ微控制器中并开始执行。程序执行将继续,直到选择“调试→停止”(Shift+F5)、单击“暂停”按钮或遇到断点。

选择“调试”→单步执行 (F11) 将加载已编译的程序并在第一个源代码行停止执行。

选择“调试”→“运行到光标”(Control+F10) 将加载已编译的程序,开始执行并运行,直到执行点到达编辑光标所占据的行或到达断点(以先发生者为准)。如果光标不在源代码行上,则选择此选项将导致错误。

断点在预定位置停止程序执行,可以通过以下三种方法之一进行设置或清除。

将光标移动到要断点的行,然后选择“调试”→“切换断点”。

将光标移动到要断点的行,然后单击工具栏中的红绿灯图标。

在编辑窗口中单击要断点的行的行号。

请注意,断点可以放在非源代码行上,但这不会有任何影响。MAXQ微控制器允许一次设置多达4个断点;如果选择了“运行到光标”,则会占用一个断点,因此在这种情况下只能设置三个断点。

选择“调试”→“停止”或单击工具栏中的“停止”图标将完全关闭程序执行。但是,当执行在第一行(单步执行)、游标行(运行到光标)或设置了断点的行处停止时,程序可能会以分步模式执行。也可以通过单击“暂停”按钮进入分步模式。在此模式下,当前执行点用绿色箭头标记,可以使用以下命令。

调试→单步执行 (F11)、调试→单步执行 (F10) 和调试→单步执行 (Shift+F10) 在程序集调试模式下都具有相同的效果,即执行单个指令并将执行点移动到下一条指令。

调试→运行将从当前执行点运行,直到到达下一个断点,如上所述。

调试→运行到游标将从当前执行点运行,直到到达游标行,如上所述。

请注意,汇编语言调试模式下运行时,“调试”菜单中的“高级调试”和“低级别调试”设置不起作用。

显示和编辑处理器寄存器

一旦程序加载完毕并执行了至少一条指令,就可以使用调试器查看和编辑MAXQ微控制器的寄存器。选择“窗口”→显示→寄存器将显示寄存器集。这些值将在调试器中单步执行代码时更新。可写寄存器可以通过双击其值字段并以十六进制、十进制或二进制输入新值来编辑。

MAXQ2000套件说明: 如果连接了LCD子板,请勿手动编辑寄存器PO0、PD0、PO1、PD1、PO2、PD2、PO3或PD3的值。在连接液晶屏的情况下将这些针脚输出设置为静态值可能会损坏液晶屏。

显示和编辑处理器内存

一旦程序加载完毕并执行了至少一条指令,就可以查看和编辑MAXQ微控制器的内部存储器。选择“窗口”→显示→内存将显示内部存储器。您可以通过从显示屏上的下拉列表中进行选择来查看代码、数据或堆栈内存。内存以 16 位宽度显示代码和堆栈空间,以 8 位宽度显示数据空间。可以通过双击内存位置并输入新值来编辑数据或堆栈空间中的内存值。

使用MAX-IDE汇编程序

MAX-IDE提供了一个多通道汇编器,可用于用MAXQ汇编语言开发应用程序。此汇编程序包括一个单通道预处理器,它提供了使用包含文件、符号等值、条件程序集和宏的功能。汇编器和预处理器与MAX-IDE环境完全集成。

有关如何使用宏和其他预处理器指令的示例,请参阅“宏”示例项目。

一般语法

MAXQ汇编器和预处理器都不区分大小写。程序集语句遵循以下格式:

[label:]   [opcode   [parameter [, parameter]]]    [;comment]

如以下示例代码所示:

 

main:
move   Acc, A[2]             ; copy A[2] to active accumulator

标识符(如上面显示的“主”标签)可能包含字符 [a-zA-Z_?$0-9],但它们不能以 0-9 数字开头。它们的长度最多为 127 个字符。

请参考MAXQ系列用户指南,详细了解MAXQ微控制器系列的架构、指令集、寻址模式和内核寄存器。

源文件

MAX-IDE项目窗口中列出的所有汇编源(.asm)文件将在编译项目时按照它们在窗口中的显示顺序进行汇编。未提供链接器,因此多个文件的组装方式与合并到单个文件中然后组装的方式相同。

源文件可能包含指令、等值/定义、宏、条件程序集块和语句。任何源文件的最后一行都必须包含 END 指令:

end

包含文件

包含 (.inc) 文件不需要显式添加到项目中。相反,它们通过 include 指令自动读入和分析,这会导致解析包含文件,就好像它的所有文本都出现在源文件中而不是 include 指令一样。

 

(source file):                        (equates.inc):
$include(equates.inc)        --->     MASK1  equ  0FFh
                                      MASK2  equ  0FEh
(resume parsing in source    <---
file)

包含文件可能包含指令、等值、宏和 DB/DW 数据语句,但它们可能不包含程序集例程。包含文件不需要以 END 指令结尾。

MAX-IDE为每个MAXQ微控制器提供了一个标准的包含文件,该文件定义了该微控制器的外设寄存器集以及实用程序ROM提供的功能地址。这些包括文件可用于所有汇编语言项目;它们位于主 MAX-IDE 安装目录下的“示例”子目录中。

常数

用作语句或等价定义的即时值的常量数值可以用四种格式之一编写。

十进制(默认值)- 不以字符或“d”结尾。示例:10、07d

二进制 - 以“b”结尾。示例:01b、1101101b

十六进制 - 以 0-9 位数字开头,以“h”结尾。示例:10h、09FFEh

单个字符 - 转换为字节 ASCII 值。示例:“A”

以下运算符也只能在常量中使用并等同定义;这些语句的评估在预处理阶段执行,在解析常量值之前。

 

 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

等同

使用 EQU 指令定义的等值用于通常使用常量值的任何位置的数字替换。他们可以使用上面为常量定义的所有格式和常量运算符。标签不被识别为常量。

 

ONE equ 01
TWO equ 02

   move    Acc, #ONE
   move    Acc, #(ONE+TWO)

等值也可用于后续等值的定义中。

ONE equ 01
TWO equ ONE+ONE

定义

定义允许直接 C 样式文本替换,无需额外处理,并且最常用于包含文件中以定义外设寄存器。替换文本限制为一行;没有公认的延续字符。无法识别 C 样式宏。

#define PO[0] M0[0]

move    Acc, PO[0]           ; Parses as 'move Acc, M0[0]'

数据关键字

DB 和 DW 指令可用于将原始字节(包括字符串值中的字节)或单词插入到当前位置的十六进制文件中。


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

在上面的宏中,每次引用宏并插入其代码时,“L1”标签都将重命名为不同的临时值。

审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分