You are on page 1of 39

ULINK2 用户指南

ULINK2 用户指南

Table Of Contents
1. 概述 ................................................................................................................................................ 2
1.1 工具包 .................................................................................................................................. 2
1.2 特性 ...................................................................................................................................... 3
1.3 支持的设备 .......................................................................................................................... 3
1.4 支持的协议 .......................................................................................................................... 4
1.5 软件需求 .............................................................................................................................. 5
1.6 局限性 .................................................................................................................................. 5
1.7 技术参数 .............................................................................................................................. 5
2. 硬件描述 ........................................................................................................................................ 6
2.1 USB 接口 ............................................................................................................................. 6
2.2 LED 指示灯 ......................................................................................................................... 7
2.3 跳线 ...................................................................................................................................... 7
2.4 目标连接器 .......................................................................................................................... 8
2.5 JTAG 接口电路图.............................................................................................................. 10
2.6 启动顺序 ............................................................................................................................ 12
2.7 重启顺序 ............................................................................................................................ 12
3. 安装及使用 ULINK2.................................................................................................................. 13
3.1 连接 ULINK2.................................................................................................................... 14
3.2 安装驱动 ............................................................................................................................ 14
3.3 配置 μVision...................................................................................................................... 15
3.3.1 调试驱动配置 ......................................................................................................... 15
3.3.2 设置Flash 下载....................................................................................................... 18
3.4 下载到 Flash ..................................................................................................................... 27
3.5 调试程序 ............................................................................................................................ 28
3.6 链接多目标 ........................................................................................................................ 28
4. 实时代理 ...................................................................................................................................... 30
4.1 添加实时代理 .................................................................................................................... 30
4.1.1 给工程添加 RTA 文件 .......................................................................................... 31
4.1.2 配置实时代理 ......................................................................................................... 31
4.1.3 修改 STARTUP.S 文件 ......................................................................................... 32
4.1.4 测试实时代理 ......................................................................................................... 33
4.2 添加 I/O 重定向............................................................................................................... 34
4.2.1 添加 RETARGET.C ............................................................................................... 34
4.2.2 配置 RETARGET.C ............................................................................................... 34
4.2.3 测试重定向 ............................................................................................................. 36
4.3 API 函数............................................................................................................................. 36
4.4 接口自定义硬件 ................................................................................................................ 37
5. Addenda......................................................................................................................................... 38
5.1 ULINK2: Configuring the Real-Time Agent....................................................................... 38

1
ULINK2 用户指南

1. 概述

概述
Keil ULINK2 USB-JTAG 适*配器通过 USB 端口将*PC 机与目标硬件(经 JTAG
或 OCDS)连接起来 ,可以实现:

• 下载程序到目标硬件上进行测试;
• 对 许多设备(See 1.3) 的片上 FLASH 存储器进行编程;
• 对许多目标系统的外部 FLASH 存储器进行编程。

ULINK2 适配器

Keil µVisio* IDE/调试器是通过*LINK2 在目标硬件上创建、下载和测试嵌入式应


用程*序的前端。

1.1 工具包

工具包
ULINK2 USB-JTAG 适*配器分为两种单独的配置:

• 标准产品*
这是 ULINK2 的标准产品。此产*品包含:
o ULINK2 USB-JTAG 适配器;
o 4 根目标适配器线(用于 ARM 、 µPSD 、 C16x 、 XC16x 和 C8xx 设备);
o 一根 USB 线;
o Keil 评估工具 CD-ROM 。
• 特定芯片产品
这是 ULINK2 的定制产品,它向*许多芯片买主提供评估板。和标准产品的不同之处
在于其缺少附加目标适配器线。*

2
ULINK2 用户指南

1.2 特性

• 由 USB 接口提供电源和快速 PC 通讯;


• 使用片上调试接口进行实时内电路仿真;
• 通过片上调试接口对 Flash 进行编程;
• 三个 LED 显示 RU*、COM 和 USB 状态。*

1.3 支持的设备

支持的设备
ULINK2 支持很多公司的设备。当前列表中的 支持的设备 都可用。*

• Analog 设备 (ARM7/ARM9/Cortex-M3 系列)


ADuC7019, ADuC7020, ADuC7021, ADuC7022, ADuC7024, ADuC7025, ADuC7026,
ADuC7027, ADuC7032, ADuC7033, ADuC7128, ADuC7129
• Atmel (ARM7/ARM9/Cortex-M3 系列)
AT91C140, AT91F40416, AT91F40*16, AT91FR40162, AT91FR4042, AT91FR4081,
AT91M40400, AT91M40800, AT91M40807, AT91M42800A, AT91M43300,
AT91M55800A, AT91M63200, AT91R40008, AT91R40807, AT91RM3*00, AT91RM9200,
AT91SAM7*1, AT91SAM7A2, AT9*SAM7*3, AT91SAM7S128, AT*1SAM7S256,
AT9*SAM7S32, AT91SAM7S64, AT91SAM7SE256, AT91SAM7SE32,
AT91SAM7SE512, AT91SAM7X128, AT91SAM7X256* AT91SAM7XC128,
AT91SAM7XC256, AT91SAM9260, AT91SAM9261, AT91SAM*263
• Freescale Semiconductor (ARM7/ARM9/Cortex-M3 系列)
MAC7101, MAC7104, M*C7105, MA*7106, MAC7111, MAC7112, *AC7114, MAC7115,
MA*7116, MAC7121, MAC7122, MAC7124, MAC7125, MAC7126, MAC7131,
MAC7134, MAC7135, MAC7136, MAC7141, MAC7142, MAC7144
• Infineon (8051 系列)
TLE7809, TLE7810, TLE7824, TLE7826, XC856-13FF, XC856-16FF, XC856-9FF,
XC86*-1FR, XC8*6-2FR, XC866-4FR, XC886-6FF, XC886-8FF, XC886C-6FF,
XC886C*8FF, XC886CLM-6FF* XC886CLM-8FF, XC886CM-6FF, XC886CM-8FF,
XC886LM-6FF, XC886LM-8FF, XC888-6FF, XC888-8FF, XC888C-6FF, XC888C-8FF,
XC888CL*-6FF, XC8*8CLM-8FF, XC888CM-6FF, XC888CM-8FF, XC888LM-6FF,
XC888LM-8FF
• Inf*neon (C16x/ST10/XC16x 系列)
XC16*CJ-1*F, XC161CS-32F, XC164CM-8F, XC164CS-16F, XC164CS-16R,
XC164CS-32F, XC164CS-32R, XC164CS-8F, XC164CS-8R, XC16*D-16F, XC164D-*2F,
XC164LM-8F, XC164S-32F, XC164SM-4F, XC164SM-8F, XC164TM-4F, XC164TM-8F,
XC167CI-16F, XC167CI-32F
• Luminary Micro (ARM7/ARM9/Cortex-M3 系列)
LM3S101, LM3*102, LM3S301, *M3S310, LM3S315, LM3S316, LM3S317, LM3S*28,

3
ULINK2 用户指南

LM3S601, LM3S61*, LM3S611, LM3*612, LM3S613, LM3S6*5, LM3S617, LM3S618,


LM3S628, LM3S801, LM3S811, L*3S812, LM3S815, LM3*828
• NXP (由 Ph*lips 建立) (ARM7/ARM9/C*rtex*M3 系列)
LPC2101, LPC2102, LPC2103, LPC2*04, LPC2105, LPC2106, LPC2114, LPC2119,
LPC2124, *PC2129, LPC2131, LP*2132, LPC2134, LPC2136, LPC2138, LPC2141,
LPC2142, LPC*144, LPC2146, LPC21*8, LPC2194, LPC2210, LPC2212, LPC2214,
LPC2220, L*C2290, LPC2292, LPC2294, LPC2364, *PC2366, LPC2368, LPC2378,
LPC2468, LPC2470, LPC2478, L*C288*, LPC2888, LPC*180
• OKI (ARM7/ARM9/Cortex-M3 系列)
ML674000* ML674001, *L674002* *L674003, *L675*01, ML675002, *L675003*
ML67Q4050, ML67Q4051, ML67Q4060, ML67Q4061, ML696201, M*69Q6203
• Samsung (ARM7/ARM9/Cortex-M3 系列)
S3C2410A, S3C2440A, S3C44B0X, S3C4510B
• Sharp (ARM7/ARM9/Cortex-M3 系列)
LH75400, LH75401, LH75410, LH75411
• STMicroelectronics (8051 系列)
uPSD3212A, uPSD3212C, uPSD3212CV, uPSD32*3B, uPSD3233BV, uPSD3234A,
uPSD3234BV, uPSD3253B, uPSD3253BV, uPSD3254A, uPSD3254BV, uPSD3312D,
uPSD331*DV, uPSD3333D, uPSD3333DV, uPSD3334D, uPSD3334DV, uPSD3354D,
uPSD3354DV, uPSD3422E, uPSD3422E*, uPSD3433E, uPSD3433EV, uPSD*434E,
uPS*3434*V* uPSD3454E, uPSD3454EV
• STMicroelectronics (ARM7/ARM9/Cortex-M3 系列)
STR710FZ1, STR7*0FZ2, STR711FR0, STR711FR1, STR711FR2, STR712FR0,
STR*12FR1, STR712FR2, STR715FR0, STR730FZ1, STR730FZ2, STR731F*0,
STR731*V1, *TR731FV2, STR735FZ1, STR735FZ2, STR736FV0, STR736FV1,
STR750FL2, STR750FV0, STR750FV1, STR750FV2, STR751FR0, STR751FR1,
STR751FR*, STR752FR0, STR752*R1, STR752FR2, STR755FR0, STR755FR1,
STR755FR2, STR755FV0, STR755FV1, STR755FV2, STR910FM32, STR910FW32,
STR*11FM42, S*R911FM44, STR912FW42, STR912FW44
• TI (ARM7/ARM9/Cortex-M3 系列)
TMS470R1A128, TMS*70R1A256, TMS470R1A288, TMS470R1A384, TMS47*R1A64,
TMS470R*B1M, TMS470R1B512, TMS470R1B7*8

1.4 支持的协议

支持的协议
ULINK2 支持多种设备和通讯协议。

• A*M7 和 ARM9 设备
这些设备提供 JTAG 编程和调试信号(称为*嵌入式 ICE)
,连接到一个 20 针连接器。
• ARM Cortex-M3 设备
这些设备提供 JTAG 编程和调试信号(称*为嵌入式 ICE)
,连接到一个 20 针连接器。

4
ULINK2 用户指南

• Infineon C1*x 设备
这些设备(C161U、C165H 和 C165UTAH)提供编程和调试信号(称为 OCDS 或片上
调试系统),连接到一个 16 针连接器。
• Infineon XC16x 设备
这些设备(XC161、XC164 和 XC167)提供编程和调试信号(称为 OCDS 或片上调试
系统) ,连接到 16 针连接器。
• Infineon XC8xx 设备
这些设备(XC866、XC886 和 XC888)提供编程*和调试信号(称为 OCDS 或片上调试
系统) ,连接到 16 针连接器。
• STMicroelectronics µPSD 设*备
这些设备(µPSD33xx 和 µPSD34xx)提供 JTAG 编程和调试信号,连接到 14 针连接器。

以上取决于*设备和目标硬件配置, 有时要连接适当的线到目标连接器(See 2.4)。

1.5 软件需求

ULINK2 JTAG 适配器需要 PC 安装如下版本的软件(或更新):

1.6 局限性

局限性
使用 ULINK2 来调试目标程序时会产生一些局限, 大部分是由片上调试器而产
生的。

• ARM7 和 A*M9 设备
这些设备上的嵌入式 ICE 在 Flash 存储器上至多支持 2 个硬件断点。RAM 上的断点没有
限制。
• ARM Cortex-M3 设备
这些设备上的嵌入式 ICE 在 Flash 存储器上至 多支持 8 个硬件断点。RAM 上的断点也
没有限制。

1.7 技术参数

参数 说明 提供电压 由 PC 的 US* 总线提供。 XTAL 频率 12 MHz 外围设备 1 × USB


接口
1 × JTAG 接口
3 × LED(RUN、C*M、USB)
轮廓尺寸 107mm x 57mm x 25mm (4.25" x 2.25" x 1.0")。

5
ULINK2 用户指南

2. 硬件描述

硬件描述
下图显示了 ULINK2 适配器 的重要接口及硬件组成。

ULINK 适配器 (内部结构)

通*常为目标系统配置 ULINK 非常简单。但需要注意:

• 设置 ULINK 配置 跳线(See 2.3) 。


• 正确连线到 目标连接器(See 2.4) 。

2.1 USB 接口

USB 接口
ULINK2 USB 接口使用标准 USB 连接器来连接到 PC。ULINK2 由 USB 接口提
供电源*。

ULINK2 适配器 USB 接口

6
ULINK2 用户指南

2.2 LED 指示灯

LED 指示灯
ULINK2 适配器有如下 LED 指示灯。

• RUN LED 显示目标板在执行程序。


• COM *ED 显示在调试器和目标板之间存在有效传输。
• USB LED 显示正在对 ULINK 供电。

ULINK2 适配器 - LED (内部结构)

2.3 跳线

跳线
*LINK2 仅有一个跳线设置:VCC。

ULINK2 适配器 - 跳线(内部结构)

VCC 跳线决定* JTA* 接口的 VCC 电源来源。

• 如果目标硬件为 JTAG 接口提供 VCC,则设置 VCC 上的跳线到 ARM 位置。


• 如果目标硬件不为 JTAG 接口提供 *CC,则设置 VCC 上的跳线到 3.*V 位置。

7
ULINK2 用户指南

2.4 目标连接器

目标连接器
在 ULINK2 内部有 5 个 JTAG 连接器。这些连接器支持各种接线,以备于通过
ULINK 调试不同的对象。 这些连接器有:

• 一个调试 ARM 的窄的(2.00mm/0.079" 针间距)20-针连接器;


• 一个调试 ARM 的标准(2.54mm/0.1")20-针连接器;
• 一个调试 Infineon OCDS(JTAG)的 16-针连接器;
• 一个调试 STMicroe*ectr*nics µPS* 的 14-针连接器;
• 一个调试 ARM 的*10-针连接器。

连接器上的连线都可用于 ULINK2 标准*产品。换线时确保线上标记与连接器上


的第 1 针相对应。

UL*NK2 适配器连接器(内部结构)

ULINK2 支持 JTAG 和串行模式接口。查阅 ULINK2 适配器连接器相应的信息,


以确保其与目标硬件相匹配。

*TAG 接口

信号 连接到...
TMS TMS 针 — 向 VCC 提供 100K 欧上拉电阻。
TDO TDO 针。

8
ULINK2 用户指南

RTCK JTAG 返回时钟。


TDI TDI 针 — 向 VCC 提供 100K 欧上拉电阻。
TRST/ 针 — 向 VCC 提供 100K 欧上拉电阻。 TRST 是可选项,在*一些设备上
TRST
不可用,可以不连接。
TCLK T*LK 针 — 向 VCC 提供 100K 欧上拉电阻。
VCC 提供正电压 — 向 JTAG 接口驱动器。
*ND 数字地。
*ESET RSTIN/ 针 — 连接此针到目标 CPU 的(低)复位输入上。
CPUCLK CPU 时钟(依照 IEEE 标准 1149.1) 。
OCDSE 有效/无效 OCDS 接口(无穷特定)。
TRAP 陷阱状态(无穷特定)。
BRKIN 硬件插入(无穷特定)。
BRKOUT硬件突发(无穷特定)。
*JEN J*AG 生效(STMicr*electroni*s 特定) 。
TSTAT JTAG ISP 状态(STMicroelectronics 特定)(可选) 。
/RST Chip 复位 (STMicroel*ctro*ics 特定)。
/TERR JTAG ISP 错误 (STMicroelectronics 特定) (可选)。

注意

• 一些 Philips LPC2000 设备含有启动 JTAG 接口的*专门针(RTCK / DBGSEL)。如


在 Philips LPC2129 上,在使能 JTAG 接口时,RTCK 信号必须为低。也可以在硬件
上添加跳*线来实现。

串行模式接口

在串行模式中,只有 TCLK 和 TDI 针被使用。TD* 为一个可选的跟踪数据输出


针。

信号 连接到...
SWDIO Data I/O 针。为 VCC 提供 100K 欧上拉电阻。
SWO 可选的跟踪输出针。
SWCLK时钟针。为 V*C 提供 100K 欧上拉电阻*。
VCC 提供正电压 *供给 JTAG 接口驱动。
GND 数字地。
RESET RSTIN/ 针 — 连接此针到目标 CPU 的(低)复位输入上。

注意

9
ULINK2 用户指南

• 通过 USB 连线给 ULINK2 提供电源。


• ULINK2 运行时电压为 3.3V 。 JTAG 引脚的最高电压为 5V。

2.5 JTAG 接口电路图

JTAG 接口电路图*
下图显示了 ULINK2 的部分 JTAG 接口电路。此图可帮助分析目标硬件的内在
问题。

信号接口电路图— IC2

信号接口电路图— IC4

10
ULINK2 用户指南

信号接口电路图— IC5

信号接口电路图— IC6

11
ULINK2 用户指南

2.6 启动顺序

启动顺序
在对目标系统进行调试之前,ULINK2 执行一系列操作。许多操作都依赖于在
µVision IDE 上的设置。

• 如果允许启动时(See 3.3.1.3)重启(See 3.3.1.3), ULINK2 驱动 JTAG输出重启信号


(*ARM JTAG 连接器(See 3.1) 上 15 针,OCDS 和 ST 连接器(See 3.1) 上 8 针),持
续时间低于 50 毫秒。
• ULINK2 初始化 JTA* 接口并检测芯片 ID。
• 如果允许启动时(See 3.3.1.3)即重启(See 3.3.1.3),则 ULINK2 执行*一个重启顺序(See
2.7)。
• ULINK2 停止设备。
• 如果允许 Project — Options — Debug — Load Application at Startup ,则 ULINK2
下载代码到目标上并执行一*个重启顺序(See 2.7)。
• 如果 Project — Opt*ons — Debug — Initializ*tion File 文本框包含初始*化脚本文
件,则此脚本文件中的调试命令将被执行。

2.7 重启顺序

重启顺序
12
ULINK2 用户指南

ULINK2 的重启顺序是与设备相关的。对于多数设备,ULINK2 发出JTAG 重启


的信号(通过ARM JTAG 连接器(See 3.1) 上 15 针以及OCDS 和 ST 连接器(See
3.1) 上 8 针来实现),以试图立即停止设备。

一些 ARM 设备不支持在重启命令执行时立即停止,在 UNLINK2 发出停止命令


前还执行指令。 对于这类设备,当 ULIN*2 获得控制权,*它中止 CPU 运行, 然
后通过设置 *CU 程序计数器和栈寄存器来模拟重启后立即停止。

ARM 设备副作用

重启设置 ARM 设备可能会产生意外的副作用。


如下的知识库文章 对这些副作用
进行了*详细描述:

• ULINK: RESET BEHAVIOUR


• ULINK: SINGLE STEP AT RESET *PPEARS TO FAIL
• ULINK: ARM DEVICE DOES NOT REACT
• U*INK: RECOVER STR71X WHEN JTAG DISABLE

3. 安装及使用 ULINK2

安装及使用 ULINK2
ULINK2 USB-JTAG 适配器易*于使用。经过简单的配置即可建立编程环境。

• 连接 ULINK2(See 3.1)
介绍ULINK2 , PC 机和目标硬件之间的连接。

• 安装驱动*程序(See 3.2)
介绍如何在 PC 上安*装 USB 驱动。

• 配置 µVision(See 3.3)
介绍怎样为 *Visi*n 配置目标调试和 Flash 编程选项。

配置 ULINK2 之后, 即可对 Flash 存储器编程和调试程序。*详细步骤如下:

• 下载到 Flash(See 3.4)


介绍如何下载程序到目标系统的 F*ash 存储器。

• 调试程序(See 3.5)
介绍如何在目标硬件上调试程序。

• 链*接多目标(See 3.6)
介绍如何链接多目标系统到 ULINK2 上。

13
ULINK2 用户指南

3.1 连接 ULINK2

连接 ULINK2
只需将 ULINK2 JTAG 的一端连接到目标硬件的 JTAG 上,带 USB 接口的一端
连接到到 PC 机 上。

ULINK2 适配器与目标硬件连接

ULINK2 适配器的电缆线连接到*目标硬件的 5 个 JTAG 接口中的一个上:

• ARM 10-针接口(1.27mm/0.05" 针间距);


• ST 14-针接口;
• OCDS *6-针接口;
• ARM 20-针接口(2.0mm/0.079" 针间*距);
• ARM 20-针接口(2.54mm/0.1" 针间距)。

ULIN*2 适配器目*标连线

有关 JTAG 信号和针分配的信息,请参阅 目标连接器(See 2.4) 一节。

3.2 安装驱动

ULINK2 使用标准 Windows USB 驱动。不需额外的或特定*的 ULINK2 驱动。

14
ULINK2 用户指南

3.3 配置 μVision

配置 µVision
Keil 集成开发调试环境 µVision 允许使用 ULINK2 进行:

• 调试在目标硬件上运行的程序;
• 下载到目标硬件上的 Flash 存储器。

必须通过配置 µVision ,进而使用 ULINK2 。

• 调试驱动配置(See 3.3.1)
要调试运行在目标硬件上的程序,必须配置 µVision 来使用 ULINK2 作为目标调试使用的调试器。

• Flash 下载配置(See 3.3.2)


在目标硬件上进行片上和片外 Flash 存储器编程,必须通过设置µVision 来使用适当的编程算法,这些算法是基
于存储图和使用的 Flash 设备*的。大多片上 Flash 存储器的编程算法都是自动选择的。

3.3.1 调试驱动配置

调试驱动配置
使用 Options for Target 工具栏按钮,并单击 Debug 选项卡来*打开调试对话
框。

µVisi*n 使用目标驱动来连接、控制 Flash 下载和调试。Use 选项中选择目标驱动:

应选择与 In-Circuit Emulator(ICE)或下拉列表*中的目标调试器匹配的驱动。

注意

• ULINK2 适配器使用与 ULINK 适配器相同的驱动,以下或更高*级产品需要此设备


驱动。
o MDK-ARM — V3.04
o C16* — V6.06
o C51 — V8*06

15
ULINK2 用户指南

当启动调试器时,检查 Load
Application at Startup 和 Run to
main() 选项来加载应用程序,并 执行
到 main() 函数。

连接 ULINK2(See 3.1) 适配器到 PC 上,然后点击 Settings 按钮来显示目标驱


动设置对话框。

Target Driver Setup(目标驱动设置)对话框由三组信息和配置设置组成:

• ULINK2 USB-JTAG 适配器(See 3.3.1.1)


• JTAG 设备链(See 3.3.1.2)
• 调试(See 3.3.1.3)

3.3.1.1 ULINK2 USB-JTAG 适配器

ULINK2 USB-JTAG Adapter 项显示*了 ULINK2 适配器的驱动、设备和固


Target Driv er Setup - ULINK2
A dapter

件信息。

*erial No: 显示了 ULINK2 适配器的序号。当有多个适配器被连接时,使用下拉


列表来选择 ULINK2 适配器。

当选中 SWJ 时,ULINK2 产生在 JTAG 和 Serial Wire(SW)模式之间切换的


顺序。启用 SWJ 同时停用 SWJ。

在Port 下拉列表中选择用于设备通讯的调试接口类型:JTAG 或 SW( 串行线)。


选择SW时,ULINK2 只使*用两针用于通讯,就像目标连接器(See 2.4) - (See 2.4)
串行线模式接口(See 2.4)中描述的一样。

SWJ 和 PORT 只在使用 ULINK Cortex Debugger 时才有效,ULINK Cortex


Debugger 接口可以调试 Cortex-M1 和 Cortex-M3 设备。

Max JTAG Clock 下拉列表设置用于与目标*板通讯的最高 JTAG 时钟速度。

注意:

• ULINK2 支持大多 ARM7 和 ARM9 处理器的 Return Clock (RTCK) 。*RTCK 信


号适应 JTAG 时钟速度以达到可能的最大值。从 Max JTAG Clock 下拉列表中选择
RTCK 来启用此功能。
• RTCK 只在提供 RTCK 针的处理器上使用。

16
ULINK2 用户指南

3.3.1.2 JJTAG 设备链

JJTAG 设备链
JTAG Device Chain 项显示了连接到 JTAG 接口的目标板。ULINK2 自动地显示
所有检测到的目标 IDCODE、 设备名和 IR 长度。

Manual Configuration 允许给未检测到的 JTAG 设备重新命名。但必须指定


JTAG 设备链中每个设*备指令寄存器的长度(IR len)。

注意

• 如果手动设置 ARM 处理器,则 Device N*me 必须为 ARM7 或 ARM9 以便识别


芯片核。

有关多重目标配置的详细信息,请参阅 目标链(See 3.6)。

3.3.1.3 调试

调试
Debug 项控制调试启动时的高速缓存、下载以及设备*重置属性。

Cache Options 在目标调试过程中,使用 PC 内存作为目标设备存储器的 cache,


从而提高了 µVision 调试器的性能。默认选中选项以达到最高性能。
17
ULINK2 用户指南

• Cac*e Co*e 确保下载的程序代码不会改变。此选项被选中时,µVisi*n 将不从目标系


统中读取程序代码。如果使用自修改代码或怀疑程序代码被重写,就不选此项。
• Cache Memory 决定程序*停止时存储器显示是否被更新。当选中时,调试器将不更
新存储器显示,直到下一个单步、程序步或运行命令开始执行。如果*想查看调试器
停止运行时实际的存储器内容(如存储器映射外围数据内容),可不选此项。

Downlo*d Op*ions 控制调试器启动时下载代码到目标系统。

• Verify Code Download 将目标存储器的内容与装入到调试器中的应用程*序进行比


较。
• 下载到 Flash 下载代码到所有的存储区。选中时,调试器不下载代码到 Flash
Do*nload Setup 定义的 Memory Address Ranges 。

Misc 选项

• 若选中 Use Res*t at Star*up ,则当调试器启动时将给*目标发出一个重启 CPU 的命


令。若没有选中此选项,则调试器仅仅停止 CPU 到当前执行的命令。这样将允许调
试当前在目标*上执行的程序。

更多信息请查阅启动顺序(See 2.6)。

3.3.2 设置 Flash 下载

设置 Flash 下载
µVi*ion 使用了目标驱动器控制 Flash 下载。选择 Opti*ns f*r Ta*get — Utilities
对话框中的 Use Target Driver for Flash Pr*gramming :

18
ULINK2 用户指南

一般必须选择与 In-Circuit Emulator(ICE)或下拉列表中的目标调试器相匹配的


驱动。使用 ULINK 时*,为目标硬件选择适当的 ULINK 驱动。

选中 U*date Target before Debugging 选项以确保只要调试器启动,就对


Update Target Before
Debugging Selection

Fla*h ROM 编程。

单击 Settings 按钮来显示 Flash Download Setup 对*话框。其包含三组设置:

• 下载功能(See 3.3.2.1)
• RAM 算*法(See 3.3.2.2)
• 编程算法(See 3.3.2.3)

3.3.2.1 下载功能

下载功能
Flash Download Setup 对话框中的 Download Function 项定义了当目标设备下载
时(Fl*sh — Download)将发生的 Flash 操作。

必须选择一个 Erase 功能:

• Erase Full Chip 擦除程序*下载前设备上的所有 Flash 存储;


• Erase Sectors 只擦除程序下载所使用的部分;
• Do Not Erase 不擦除 Flash 。

选择 Program 功能:

• Program 用当前 µVision 工程程序文件对 Flash ROM 编程;


• Verify 将当前 µVision 工程的编程文件与 Flash ROM 的内容进行比较;
• Reset and Run 在下载和确认完成后,复位目标板并运行程*序。

3.3.2.2 RAM 算法

RAM 算法
19
ULINK2 用户指南

Flash Download Setup 中的 RAM for Algorithm 项定义了装载执行的编程算


Flash Download Setup - RA M
for A lgorithm

法的地*址空间。通常它位于片上 RAM。

• Start 为 RAM 区域的启动地址;


• Size 为 RAM 区域的长度(字节长)。

3.3.2.3 编程算法

编程算法
Flash 下载设置对话框中 Programming Algorithm 项包含目标硬件 Flash 设备的
定义和它们的配置参数(大小、地址空间等等)。µVisi*n 通过设备*配置和编程
算法给每个设备执行写入操作。默认的 µVision 中 包含片上 Flash 存储器的定
义。

可以从列表中选择一个设备来改变它的配置细节。

通过 Start 和 Size 可以为 Flash 设备更改地址范围。可以修改如下数值:


Flash Programming Setu p -
Start and Size

• Flash 设备的 Start 地址。


• Flash 设备的 Size 。

要添加一个新的设备(和算法),请使用 Add 按钮。使用 Remove 可以从


Flash Programming Setu p -
A dd and Remov e

列表中移除所选的设备。

当添加一个设备时,µVision 打开一个可供选择的 可用算法 列表。一旦选择一个


新的设备,必须指定所占用的地址空间。

20
ULINK2 用户指南

虽然* µVi*ion 提供了许多标准设备,但可以为一个新设备创建新的编程算法(See


3.3.2.5)。

3.3.2.4 提供的算法

提供的算法
本章中的页面列出了 *EIL\ARM\FLASH 文件夹中*可用的 Flash 编程算法。算
法通过在 Project — Options for Target — Utilities — ULINK ARM Debugger —
Settings — Add 对话框中的 Add 按钮选中。

Flash 编程算法可用于如下供应商:*

• Analog Devices(See 3.3.2.4.1)


• AMD(See 3.3.2.4.2)
• Atmel(See 3.3.2.4.3)
• Intel(See 3.3.2.4.4)
• Luminary Micro(See 3.3.2.4.5)
• Macronics(See 3.3.2.4.6)
• NXP (由* Phi*ips 建立)(See 3.3.2.4.7)
• OKI(See 3.3.2.4.8)
• SST(See 3.3.2.4.9)
• STMicroelectronics
• Tosh*ba(See 3.3.2.4.11)
• TI(See 3.3.2.4.12)

每个编程算法的源代码存放在子文件夹中,并且可作为新的 Flash 设备的模板(如


添加新算*法(See 3.3.2.5)中的所介绍)。

21
ULINK2 用户指南

\KEIL\ARM\FLASH\LPC_IAP_256\测试\ 文件夹包含一个测试工程,它说明了如
何测试一个新 Flash 编程算法。

3.3.2.4.1 Analog 设备

Analog 设备
µVision 提供如下 F*ash 编程算法:

• ADuC702x Flash
Analog 设备 ADuC*000 片上 Flas*。

• ADuC703x xxKB Flas*


Analog 设备 A*uC703x 片上 Flash。

• ADuC712 *lash
Analog 设备 ADuC712x 片上 Flash。

• ADuC7229 Flash
Analog 设备 ADuC7229 片上 Flash。

3.3.2.4.2 AMD

• AM29F160DB Flash
AMD AM29F160DB 外部, 16-bit Flash,底部启动块处理器。

• AM29F160DT Flash
AMD AM29F160DT 外部, 16-bit Flash,头部启动块处理器。
• AM29F320DB Flash
AMD AM29F320DB / AM29*V320*B / ST M29DW324DB / Samsung K5*3x80YT 外部, 16-bit Flash,底部启动块
处*理器。

• AM29F320DB Dual Flash


AMD AM29F320DB / AM29LV320DB / *T M29DW324DB / Samsung K5A3x80YB 外部, 16-bit Flash,底部启动*
块和完全 32-bit BUS 处理器。

• AM29F320D* Fla*h
AMD AM2*F320*T / AM29LV320DT / ST M29DW324DT / S*msung K5A3x80YT 外部, 16-*it F*ash,头部启动块

处理器。
• AM2*F320DT Dual Flash
AMD AM29F320DT / AM29LV320DT / ST M29DW324DT / Samsung K5A3x80YT 外部, 16-bit Flash,头部启动块*

和完全 32-bit BUS 处理器。


• AM29x033 Flash
AM* AM29LV033 或兼容 8-bit, 外部 Flash 处理器。
• AM29x128 Flash
AMD A*29LV*28 或兼容 16-bit, 外部 Flash 处理器。
• AM29x800BB Flash
AMD *M29x*00BB 外部, 16-bit Flash 底部启动块处理器。

22
ULINK2 用户指南

• AM29x800B* Dual Flash


two AMD AM29x800BB 外部, 32-bit Flash,底部启动块和完全 32-bit BUS 处理器。

• A*29x800BT Flash
AMD AM29x800BT 外部, 16-bit Flash,头部启动块处理器。
• AM29x800BT Dual Flash
two AMD AM29x800BT 外部, 32-bit Flash,头部启动*块和完全 32-bit BUS 处理器。

• AM29x800DB Flash
AMD AM29x800DB 外部, 16-bit Flash,底部启动块处理器。
• *M29x800DB Dual Flash
tw* AMD AM29x800DB 外部, 32-bit Flash,底部启动块和完全 32-bit BUS 处理器。

3.3.2.4.3 Atmel

• AT29x1024 Flash
Atmel AT29x1024 外部, 16-bit Flash 处理器。
• AT49xV0*0x Flash
Atmel AT49xV080x 外部, 8-bit Flash 处理器。

• AT49xV162A Flash
At*el AT49xV162A 外部, 16-bit Flash 处理器。

• AT49xV162AT Flash
Atm*l AT*9xV162AT 外部, 16-bit *lash 处理*器。
• AT49xV16x4A Flash
Atmel AT49xV16x4A 外部, 16-bit Flash 处理器。
• AT49xV32x Flash
Atmel AT49xV32x 外部, 16-bit Flash 底部启动块处理器。
• AT49xV32xT Flash
Atmel AT49xV32xT 外部, 16-*it F*ash 头部启动*块处理器。
• AT49xV32xT_2 Dual Flash
two Atmel AT49xV32xT_2 外部, 32-bit Flash 头部启动块和完全 32-bit BUS 处理器。
• AT49xV32x_2 Dual Flash
two Atmel AT49xV32x_2 外部, 32-bit Flash 底部启动块和完全*32-b*t BUS 处理器。

• AT49xV6416 Flash
Atmel AT49xV6416 16-bit, 外部 Flash。
• AT*1SAM7A3 Flash
Atmel AT91SAM7A3 片上 Fl*sh。
• AT91SAM7S_32 Flash
Atmel AT91SAM7Sx32, Atmel AT91SAMXx32 片上 Flash。
• AT91SAM7S_64 Flash
Atmel AT91SAM7Sx64, Atmel AT91SAMXx64 片上 Flash。
• AT91SAM*S_12* Flash
Atmel AT91SAM7Sx128, Atmel AT91*AMXx128 片上* Flash。
• AT91SAM7S_256 Flash
Atmel AT91SAM7Sx256, Atmel AT91SAMXx256 片上 Flash。

23
ULINK2 用户指南

• AT91SAM7_32 Flash
Atmel AT91SAM7x32 片上 Flash。
• AT91SAM7_64 Flash
Atmel A*91SA*7x64 片上 Flash。
• AT91SAM7_128 Flash
Atmel AT91SAM7x128 片上 Flash。
• AT91SAM7_256 Flash
Atmel AT91SAM7x256 片上 Flash。

3.3.2.4.4 Intel

• RC28F320J Flash
Intel *C28F*20J,Intel E28F320J 16-bit,片上 Flash。
• RC28F640P30B Flash
Intel TE/JS/PC/RC28F640P30B *6-bi,片上 Flash。

3.3.2.4.5 Luminary Micro

• LM3Sxxx xxxKB Flash


Luminary Cortex-M3 处理器系列片上 Flash。

3.3.2.4.6 Macronics

• MX29F400B Flash
Macronix MX29F400B 16-bit, 外部 Flash。
• *X29F400T Flash
Macronix MX29F400T 16-bit, 外部 Flash。
• MX29x800B Flash
Macronix MX29x400B 16-bit, 外部 F*ash。
• MX29x800T Flash
Mac*onix MX29x800T 16-bit, 外部 Flas*。

3.3.2.4.7 NXP (由 Philips 建立)

NXP (由 Philips 建立)


µVision 提供如下 Flash 编*程算法:

• LPC2000 IAP xxxKB Flash


NXP LPC210x, LPC21*x, L*C212*, LPC219x, LPC221x, LPC222x, LPC229x 片上 Flash。

24
ULINK2 用户指南

• LPC2000 IAP2 xxx*B Fl*sh


NXP LPC213x 新的 NXP 算法, LPC214x & new LPC210x 系列片上 Flash。
• LPC2888 1MB Flash
NXP LPC2880 新的 NXP 算法和 LPC2888 系列片上 Flash。
• LPC3180 NAND Fl*sh S*
NXP LPC3180 8-bit, 外部 Flash。

3.3.2.4.8 OKI

• ML6xxxxx Flash
OKI ML6xxxxx ARM7 和 ARM9 处理器系列片上 Flash。

3.3.2.4.9 SST

• SST39x*60x *lash
SST39x1601, SST39x*602, SST39x160 连续 16-bit, 外部 Flash。
• SST39x200A Flash
SST39*200A 16-bit, 外部 Flas*。
• SST39x320x Flash
SST39x3201, SST39x3202 连续 16-bit, 外部 Flash。

• SST39x400A Flash
SST39x400A 16*bit, 外部 Flash.

• SST3*x640x Flash
SS*39x6401, SST39x6402 连续 16-bit, 外部 Flash。
• SST39x800A Flash
SST39x800A 16-bit, 外部 Flash。

3.3.2.4.10 STMicroelectronics

• M28W320CB Flash
STMicroelectronics M28W320CB 16-bit, 外部 Flash。
• STR71X Bank x Flash
STMicroelectronics STR71X Bank 0 和 Bank 1 片上 Flash。
• STR73X Bank x Flash
STMicroelectronics STR7*X 片上 Flash。
• STR75X Bank x Flash
STMicroelectroni*s ST*75X *ank 0 和 Bank * 片上 Flash。
• STR91xFxx2/4 Flash Bank 0
STMicroelectronics STR91xFxx2/4 Bank 0 片上 Flash, 通过 CPU 编程。

• STR91xFxx2/4 Fl*sh Bank 0 ICP


STM*croelectronics STR91xFxx2/4 *ank * 片上 Flash, 通*过 ICP 编程。

25
ULINK2 用户指南

• STR91xFxxx Flash Bank 1


STMicroelectronics STR91xFxxx Bank 1 片上 Flash, 通过 CPU 编程。

• STR91xFxxx Flash Bank 1 ICP


STMicroelectronics STR91xFxxx B*nk 1 片上 Flash, 通过 *CP 编程。
• STR91x OTP ICP
STMicroelectronics STR91X, OTP 区通过 ICP 编程。
• *TR91x User Code ICP
STMicroelectronics STR91X, 用户*代码区通过 ICP 编程。
• STR91x CFG & Security ICP
STMicroelectronics STR91X, 配置区通过 ICP 编程。

3.3.2.4.11 Toshiba

• TC58FVM5B2A Flash
Toshiba TC58FVM5B2A (4MByte) 16-bit 和 32-bit 外部 *lash。
• TC58FVM6B2A F*ash
Toshiba TC58FVM6B2A (8MB*te) 16-bit, 外部 Flash。

3.3.2.4.12 TI

µVision 提供如下 *lash 编程算法:

• TMS470xx Flash
TI TMS470 处理器片上 Flash 系列。

3.3.2.5 添加新算法

添加新算法
µVision 环境允许为新的以前不支持的设备定义附加的 Flash 编程算法。算法将
作为一个 µVision 工程被实现, 该工程包含擦除和 Flash 编程的函数。必须进行
额外的特殊编译器和链接器设置。

配置新算法

遵循如下步骤来配置一个新的 Flash 编程算法。

1. 在 \KEIL\ARM\FLASH\ 文件夹中创建一个新的、空的子文件夹。
2. 将现有的* Flash 算法的内容(如 \KEIL\ARM\FLASH\LPC_IAP_256\)复制到此新
文件夹中。将使用此工程作为新设备的模板*。

26
ULINK2 用户指南

3. 重新命名工程文件 LPC_I*P_25*.UV2 来表示新的 Flash ROM 设备名。例如,


29F400.UV2。然后用 µVision IDE 打开此新工程。
4. 在 Project — Options for Target — Output 对话框中,替换所有的输*出名(如
LPC_IAP_256)为新的设备名。
5. 编辑 FLASHPRG.C 文件并为 EraseChip 、 EraseBlock 和 ProgramBlock 函数创
建必须的算法代码。可以根*据需要为算法修改 Init 和 UnInit 函*数。
6. 在 FLASHDEV.C 文件中为 FlashDevice 结构体定义设备参数。
7. 建立新的 Flash 编程算法。带有*.FLX 扩展名的输出文件包含新的编程算法。它由*
工程自动复制到适当的文件夹中。
8. 在 µVision 中,使用 Configur* Fla*h Download 对话框中的 Add 按钮来为 µVision
工程添加此设备(算法) 。

测试*新算法

\KEIL\ARM\FLASH\LPC_IAP_256\TES*\ 文件夹包含了一个工程,它允许测试
新 Flash 编程算法。

3.4 下载到 Flash

下载到 Flash
ULINK2 USB-JTAG 适配器支持在目标板上为 Flash 存储器编程。首先要在
µ*ision ID*中设置 ULINK*为 Flash 编程工具:

1. 通过 USB 线 连接(See 3.1) ULINK2 适配器到 PC 上,另一端连接到目*标板的


JTAG 连接器上。注意红线与 JTAG 连接器的第 1 针相对*应;
2. 启动电源;
3. 使用 Project — Options for Target —Utilities 对话框 配置 Flash(See 3.3.2) 存储器;
4. 下载应用程序到 Flash 上。

使用 Download to Flash 工具栏下载应用程序到目标设备上。在输出窗


下的 Loading Object Code... 栏显示了下载进度。

当下载完成时,下载结果显示在输出窗中。

27
ULINK2 用户指南

ULINK2 USB-JTAG 适配器也可用于在目标板的 Flash ROM 或 RAM 中


调试(See 3.5)程序代码。

3.5 调试程序

调试程序
按以下步骤使*用 µVision 调试器和 ULINK2 USB-JTAG 适配器来调试程序。

1. 通过 USB 线 连接(See 3.1) ULINK2 适配器到 PC 上,并连接到目标板的 JTAG 连


接口。注意红线与 JTAG 连接器第 1 针相对应;
2. 启动电源;
3. 在 Project — Options for Targ*t — Debug 选项卡中 配置调试器(See 3.3.2);
4. 启动调试器。

使用 Start/Stop Debug Session 工具栏按钮来启动调试程序。

调试器把程序装载到目标 Flash 存储器。输出窗下方显示了下载进度。

注意

• 有关使用*调试器的详细信息可以参阅 µVision 用户指南 的调试一节以及 启动用户


指南(\*EIL\*RM\H*P\GS*.CHM)的 测试程序一节。

3.6 链接多目标

链接多目标
28
ULINK2 用户指南

链接多目标或目标链*是指同时将一个 JTAG 总线上的多目*标系统连接到一个


单一的 ULINK2 适配*器上。这样 ULINK2 可对 Flash 存储器进行编程,并单
独调试每*个目标系统。但对目标系统有以下要求:

目标链接需要每个目标设备支持如下项:

• BYPASS 寄存器;
• IDCODE 指令必须紧跟在测试访问端口(TAP)复位之后执行;
• I* Code 的 0 位为 1;
• 在 CAPTURE-IR 状态,定值 1 必须装载到 IR 中。

设立多目标

ULINK2 为每个目标寻找一*个 IDCODE(一个设备名)和一个 IR 长度,并自动


建立目标。寻找的结果显示在 ARM 目标驱动的设置对话框(Project — Options
for Target — Debug — Settings)中的 JTAG 设备链中。

如果自动设置失败,可以使用 Manual Configuration 来设置每个设备的属性。使


用手动配置时目标设备必须有 BYPASS 寄存器支持。

连接目标

连接多目标:

• 通过并行连接控制信号(TMS 和 TCLK)。
• 通过串行连接数据信号(*DI 和 TDO)。

在链中目标数据*输出(TDO)应该作为下个目标的输入。

29
ULINK2 用户指南

注意

• ULINK2 JTAG 连接器上的 TDI 和 TDO 信号的命名可参照 CPU 上信号的名称。

4. 实时代理

实时代理
ULINK2 JTAG 适配器支持 MDK-ARM 开发工具包的实时代理性能。此特*性扩
展了 µVision 调试器的能力。

调试嵌入式应用程序时,一般不能实现挂起*程序来观察或修改存储容量值。在应
用程序中添加实时代理就可以在运行时观察和修改目标存储器,而不必终止程序。

实时代理具有以下功能:

• 程序运行时的存储器读写
存储器窗口 和 观察窗口 显示程序运行时的应用程序数据。如果 观察-窗口定期更新 被 允许,则这些窗口自动更新。

• 终端仿真
µVision 中的 串行窗口 通过 ULINK2 用户 I/O 支持终端仿真。
• 连续调试输出
µVision 中的 串行窗口 可以用于显示调试输出(通过 RTA_printf 调试函数)。

实时代理由紧凑的 C 源文件实现,可添加到应用程序中。可以编译后小于 1*5kB,


优化以便最小化使用资源。

4.1 添加实时代理

添加实时代理
实时代理可以很容易添加到应用程序中。Keil 提供模板文件,可以复制它到工程
中并进行配置以满足应用程序。此节讲述如何添加配置这些文件,从*而利于更好
地工作。

共有四步:

1. 为工程添加实时代理文件(See 4.1.1)。
2. 配置实时代理文件(See 5.1)以满足应用程序*。
3. 修改 STARTUP.S 文件(See 4.1.3)来使用外部 DAbt 处理程序。
4. 对应用程序*进行实时代理测试(See 4.1.4)。

30
ULINK2 用户指南

4.1.1 给工程添加 RTA 文件

给工程添加* RTA 文件
复制模板文件到工程文件夹中,然后添加它们到工程。在 Project Wo*kspace 中创
建一个新的组,确保这*些文件与应用程序文件相互独立。

复制模板文件到工程中

• 复制 C:\KEIL\ARM\RV30\RT AGENT\TEMPLATE\RT_AGENT.C 到工程目录中。


• 复制 *:\KEIL\ARM\RV30\RT AGENT\TEMPLATE\RT_A*ENT.H 到工程目录中。

在工程中为*新组添加模板文件

• 在 P*ojec* Workspace 中为这些文件创建一个新的组叫做 Real-Time Agent。


• 在此组中添加 RT_Agent.c 文件。
• 右击组选择 Options for Group 'Real-Time Agent'。在 C/C++表下选择 Optimization
Level 3。

自己的 Project Workspace 窗口应与此窗口相似。

注意在 Real-Time Agent 组文件图标的左边有三个红


点。这些点表示文件夹选项不是*默认设置。此时,这
些点表示将改变编译器优化级别为*3。

4.1.2 配置实时代理

配置实时代理
实时代理中包含一个配置向导来帮助开发者轻松完成不同硬件平台的编译。通过
打开 µVision 中*的 RT_AGENT.C 文件访问配置向导,并点击配置向导标号来
显示如下内容:

31
ULINK2 用户指南

点击 Expand All 键来观察并选择如下选项:

选项 说明
允许或禁止实*时代理。如果被禁止,则调用它的函数将被 stub 函数代替,
Real-T*me Agent 这些函数返回 RTA_ERR_DISABLED 错误代码(当调用 RTA_Term 函数
时返回 0)。
选择使*用的硬件类型。如果硬件不可用*,可以实现自己的硬件(与自定义
Hardware Type
硬件接口)。
Outpu* Buffer用于从目标传送实时代理数据到主机的 缓冲的大小。JTAG 连接较慢或数
Size (bytes) 据丢失时,可增大其空间。
Enable Terminal
允许或禁止终端仿真。当不需要终端仿真时,禁止保存代码和存储空间。
Emu*atio*
Input Buffer Size
此缓冲器用于输入*终端数据。
(bytes)
Ech* Characters如果被允许,则输入在 µVisio* 连续窗口中的字符将自动地回显。当使用标
Automatically *准库函数(如 scanf())时需要允许此选项。
如果允许,若没有足够缓冲空间来立即发送字符,则将阻*止调用
RTA_TermPutChar() ,以防止丢失终端数据。如*果禁止, 若没有足够缓冲
Block on Write
空间,则调用 RTA_TermPut*har(* 时将会丢弃数据。 当被禁止时如果终端
数据丢失,可以增加输出缓冲大小来解决此问题。

4.1.3 修改 STARTUP.S 文件

修改 STARTUP.S 文件
按照如下步骤修改 STARTUP.S 文件*:

• 注释掉默认的 SWI 和 DAbt 处理程序;


• 添加 EXTERNs 到 SWI 和 DAbt 处理程序。

32
ULINK2 用户指南

下面给出了一个更改的例子:

;/*********************************************************/
;/* STARTUP.S: 启动文件 */
;/*********************************************************/

.*.

EXTERN DAbt_Handler

Undef*Hand*er B Undef_Handler
SWI_H*ndle* B SWI_Handler
PAbt_Handler B PAbt_Handler
;DAbt_Handler B DAbt_Handler
IRQ_Handler B IRQ_Handler
FIQ_Handler B FIQ_Handler

4.1.4 测试实时代理

测试实时代理
当配置工程使用实时代理后,很容易检测其工作状况。

1. 建立工程,下载程序*到目标硬件,启动调试器并点击 run 按钮来执行程序。


2. 为一个可被改变的变量添加watch。
右图的测试中,不断改变的变量值是
实时代*理输出缓冲器的写索引
(wr_idx)。
Sy mbol Window Button

点击工*具栏上按钮打开符号窗口
(Symbol Window),然后选择
Project— RT_A*ent — rta — out —
wr_idx 。
3. 点击 wr_idx 图标,然后把它拖*放
到监视窗口(*Watc* Win*ow)中。
4. 选中 View 菜单中的 Pe*iodic
Window Update 。
5. 如果监视窗口中的变量值改变,则实时代理已经成功地归并到应用程序中。

注意

33
ULINK2 用户指南

• 在遇到集成实时代理的问题时,可参看 C:\KEIL\ARM\RV30\RT Agent\MCB21xx 中


给出的 Keil MCB21XX 板的工作实例。
• 要使用 *TA_p*intf*) 和 RTA_scanf() 宏,则必须实现I/O 重定向(请参阅添加 I/O 重
定向)。

4.2 添加 I/O 重定向

添加 I/O 重定向
I/O 重定向允许I/O定制硬件使用标准C库。实时代理可以利用I/*重定向,通过
UNLINK2 USB-JTAG适配器向µVision 串行窗口提供标准库函数,如 scanf() 和
printf()。

如下描述了如何为实时代理添加 I/O 重定向到用户程序的步骤:

1. 为工程 添加 RETARGET.C 文件 。
2. 配置 RETARGET.C 文件 以满足应用程序。
3. 对应用程序进行 I/O 重定向测试(See 4.2.3)。

4.2.1 添加 RETARGET.C

以下介绍如何为实时代理添加 I/O 重定向到用户程序中:

为工程复制模板文件

• 复制 C:\KEIL\ARM\RV30\RT AGENT\TEMPLATE\RETARGET.C 到工程目录。

为工程添加模板文件

• 添加 RE*ARGET.C 到工程中的*系统调用组 。

4.2.2 配置 RETARGET.C

RETARGET.C 文件中包含一个配置向导来帮助开发者轻松完成不同的编译。通
过打开 µVision 中的 retarget.c 文件*访问配置向导,点击配置向导标*号显示如
下内容:

34
ULINK2 用户指南

点*击 Expand All 按钮来观察选择如下选项:

选项 说明
I/O 允许或禁止 I/O 重定向。如果被选中,则使用默认的半主机方法,而非 I/O 重
Rvetargeting 定向来处理对 printf()、scanf()等的调用。
STDIN Source选择 STDIN 流的源。
STDOUT
选择 STDOUT 流的目的文件。
Destination
STDERR
选择 STDERR 流的目的文件。
Destination
En*ble 允许实时代理 RTA_printf() 和 RTA_scanf() 宏。如果没有选中,则对这些宏的
RTA_printf() 调用将返回错误。
如果实现文件系统,可能想使用 I/O 重定向来访问那个文件系统。此时,要实
现_*fopen、__fclose、__write、__flushbuf、__read、__setfpos 和__get_flen 这
External file些 函 数 并 允 许 此 项 。
operations C:\KEIL\ARM\RV30\RTL\FLASHFS\EXAMPLES\FILE_EX1 给 出 了 一 个
defined I/O 重定向用法的例子。

注意: 如果此选项选中,但没有定义上述函数,则会出现链接错误。

注意

• STDIN Source、STDIN Destinat*on 和 STDERR D*stination 中的 'COM Port 1' 流


选项定义了如下函数*:
o int sendchar (int ch): 为串行端口写一个字符。
o int getkey (void): 从串行端口(中止)中获取一个字符。

C:\KEIL\ARM\RV30\RT AGENT\MCB21XX\MEASURE\SERIAL.C 中
给出了一个为 Keil MCB21XX 开发板实现这些函数的例程。

35
ULINK2 用户指南

4.2.3 测试重定向

测试重定向
为重定向配置完工程后,按照以下步骤检查其工作是否正常:

1. 确*保应用程序中包含 printf() 或 RTA_printf() ,确保 RETARGET.C 配置向导(See


4.2.2)中的 Enable RTA*prin*f() 被选中。
2. 建立工程、下载、启动调试器并点*击 Run 按钮来开始运行。
3. 打开 Serial Window #1。
4. 如果看到 printf() 的数据显示在串行窗口中,则 I/O 重定向已经*成功集成到应用程
序中。

注意

• 如果遇到任何集成 I/O 重定向的问题,可以在 C:\KEIL\ARM\RV30\RT


AGENT\MCB21XX 中找到 Keil MCB21X* 开发板的工作实例。
• I/O 重定向需要使用目标上的少量堆存储,确保在 STARTUP.S 中至少分配了 1kB
的堆空间以供标准库使用(额外加上用户需求的堆空间)。
• 如果 µVision 尚未就绪,则目标中初始化的 printf() 数据可能会丢失。此类情况也发
生在缓冲器中含有旧数据或者调试器没有完全初始化时。前者是当调试器启动后并发
出板重启命令时,由在目标上运行的代码产生的。后*者归因于一些设备的重启问题。
每种情况都可先执行一个空的 printf() 和*一个足够的延迟,这样在执行第一个真实
printf() 前就可解决此问题。
• 太多数的终端数据会实时代理输出缓冲器溢出。例如,如果一个 printf() 被放进主程
序代码中的一个紧密循环中,则将在输出缓冲器中生成很多数据,导致大*多数数据
会丢失,并且串行窗口中会显示无序的数据。如果发生这种情况,选中 RT_AGENT.C
配置向导(See 4.2.2) 中的 Block on Write 即可阻止数据的丢失,但是会影响到实时执
行操作。

4.3 API 函数

API 函*数
实时代理 API (Application Program Interface,应用程序接*口)在
C:\KEIL\ARM\RV30\RT AGENT\TEMPLATE\RT_AGENT.H 中。它*包含初始
化实时代理以及将用户定义的信息返回到 µVision 3 等一些程序。这些程序可以
后备用。

如下 API 程序可用:

程序 说明

36
ULINK2 用户指南

初始化*实时*代理。
RTA_Init 此程序必须在调用其它 RTA 程序前调用。直到在目标上调用时此函数之后,
存储器读写才可用。
通过实时代理给主机发送一条信息。
RTA_Msg
此程序留作以后使用。
检查终端仿真器缓冲中是否存在有用字符。
RTA_TermIsKey
此程序不阻塞。
从 RTA 终端(µVision 连续窗口)中获得一个字符。
RTA_TermGetChar
此程序阻塞,直到一个字符有用时才不阻塞。
写一个字符到 RTA 终端(µVision 连续窗口)。
RTA_TermPutChar 此程序阻塞,直到缓冲空间有用,当且仅当配置向导中的 'Block on Write' 启用
时才不塞闭,否则将丢弃字符。
输出一个格式串到 RTA 终端(µVision 连续窗口) 。
RTA_printf 此程序的参数与 printf() 的参数相同。必须执行*/O 重定向(I/O 重定向配置)
来使用此宏。
从 RTA 终端(µVision 连续窗口)中寻找一个格式串。
RTA_scanf 此程序的参数与 scanf() 的参数相同。必须执行I/O 重定向(I/O 重定向配置)
来使*用此宏。

4.4 接口自定义硬件

接口自定义硬件
实时代理通过调试通信通道(Debug Co*muni*ation Channel,DCC)在目标设备上
执行中断操作。如果不支持目标设备,可以通过以下步骤添加中断控制硬件:

• 在 RT_Agent.c 配置向导中选择 Hardware Type — Custom Hardware ;


• 添加自定义硬件的头文件,并在 RT_Agent.c 项的 RTA Hardware Specific Section /
Custom Hardware 中实现 C 硬件 MACRO 。

实现 C 硬件 MACRO 的步骤如下:

• TX_IRQ_INIT(): DCC 被触发后,初始化 DCC 传输中断来调用 RTA_tx_word() 。


• RX_IRQ_INIT(): DCC 被触发后,初始化 D*C 接受中断来调用 RTA_*x_wo*d() 。
• RX_IRQ_ENTER(): 执行任何必需的 DCC 接受中断进入动作(如中断应答)。*
• RX_IRQ_EXIT(): 执行任何必需的 DCC 接受中断退出动作(如中断应答) 。
• R*_IRQ_ENABLE(): 允许 DCC 接受中断。
• RX_IRQ_DISABLE(): 禁止 DCC 接受中断。
• TX_IRQ_ENTER(): 执行任何必需*的 DCC 传输*中断进入动作(如中断应答)。
• TX_IRQ_EXIT(): 执行任何必需的 DCC 传输中断退出动作(如中断应答) 。
• TX_IRQ_ENABLE(): 允许 DCC 传输中断。
• TX_IRQ_DISABLE(): 禁止 DCC 传输中断。

37
ULINK2 用户指南

• TX*WORD(): 必须读取:

• __asm { MCR p14, 0, *x_wo*d, c1, c0 }
• RX_WORD(): 必须读取:

• _*asm { MRC p14, 0, rx_word, c*, c0 }

5. Addenda

5.1 ULINK2: Configuring the Real-Time Agent

配置实时代理
实时代理包含一个配置向导来帮助开发者轻松完成不同硬件平台的编译。通过打
开 µVision 中的 RT_AGENT.C 和 SWI.S 文件访问配置向导,点击配置向导标
号来访问配置向导:

RT_Agent.c

选项 说明
允许或禁止实时代理。如果被禁止,则调用它的函数将被 st*b 函*数代替,
Real-Time Agent 这些函数返回 RTA_ERR_DISABLED 错误代码(当调用 RTA_Term 函数
时返回 0)。
选择使用的硬件类型。如果硬件不可用,可*以自定义实现硬件(接口连接
Hardware Type
自定义硬件) 。
Output Buffer用于从目*标传送实时代理数据到主机的 缓冲的*大小。JTAG 连接较慢或
Size (bytes) 数据丢失时,可增大其空间。
Enable Terminal
允许或*禁止终端仿真。当不需要终端仿真时,禁止保存代码和存储空间。
Emulation
Input Buffer S*ze
此缓冲器用于输入终端数据。
(*ytes)
Echo Characters如果被允许,则输入在 µVisio* 连续窗口中的字符将自动地回显。当使用
Automatically 标准库函数(如 scanf())时需要允许此选项。
如果允许,若没有足够缓冲空间来立即发送字符,则将阻止调用
RTA_TermPutChar() ,以防止丢失终端数据。如果禁止, 若没有足*够缓冲
Block on Write
空间,则调用 RTA_TermPutChar() 时将会丢弃数据。 当被禁止时如果终端
数据丢失,可以增加输出缓冲大小来解决此问题。

38

You might also like