ICE50 High End Emulator 使用说明

ICE50 使用说明

绪言

关于该使用说明

更新特性

疑难解答

ICE50 固件历史

导言

特性

ICE50 硬件资源

系统要求

订购须知

总体硬件描述

总体描述

主单元

POD

Probe

电源系统描述

个性化适配器

测试适配器

ICE50 存储器模块插件的装配

使用ICE50

连接 ICE50 进行仿真

选择正确的个性化适配器

将 Probe 连接到目标板

将 ICE50 连接到 PC 主机

ICE50 上电步骤

升级 USB 驱动

配置AVR Studio

快速入门指导

升级 ICE50 固件

为ICE50 加载新器件

器件选择选项

引导区选项

其他选项

中止模式选项

堆栈监视器

堆栈监视器选项

熔丝位

ICE 状态

使用 ICE50 和 AVR Studio 进行仿真

使用 AVR Studio 进行仿真

插入或脱离 POD 和目标电源仿真

存储器非法访问检测

使用 ICE50 仿真 LCD 输出

升级和自测

升级 ICE50 固件

为 ICE50 加载新器件

ICE50 自测

ICE50 测试适配器描述

追踪

追踪指南

追踪窗口

特殊注意事项

电气兼容性

休眠模式

目标硬件要求

电源系统描述

仿真器与器件的差别

疑难解答

疑难解答

请查阅

AVR Studio 使用手册

回到主索引


About this Manual

关于本手册
警告
本手册包含了一些重要的警告事项，以防止因为您的误操作而引起系统和 ICE50 的损害。所有的警告事项都以下面的例子给出并给予强调。
警告！
这是一条警告事项...

请您仔细阅读所有的警告事项。

重要注意事项：

为了确保您能够正确地使用 ICE，请务必阅读本手册中提到的重要注意事项。

重要注意事项：这是一条重要注意事项

提示
某些部分中包含了一些使用 ICE50 的有用的提示。所有的提示都以下例的形式给出。

提示！
这是一个提示...

小技巧！

这是一个小技巧...

清单
当您对 链接到目标板 的详细内容以及 配置 部分十分熟悉并能轻松地使用ICE50后，您可以 根据这些部分末尾所给出的清单，快速地建立一个新工程。这些清单将帮助您轻松地进行在线调试。但是，初学者请注意：在使用ICE50之前，您需要检查您的目标系统的工作环境 是否满足ICE50的工作要求。相关内容将在 链接ICE50 中加以说明。

相关文档
由 Atmel 公司提供的下列电子文档包含 AVR 单片机及相关调试工具的使用说明。您可在 ICE50 开发套件中的CD-ROM中找到这些文件。如果您想获得更详尽的信息 并且进行文件更新，请访问我们的网站：www.atmel.com。

  • AVR Studio 使用说明。
    详细说明 AVR Studio 的调试环境。
  • WAVRASM 使用说明 (AVR 汇编器)...
    详细说明如何使用 AVR 汇编器。
  • 各种不同的 AVR 器件的数据手册。
  • 各种不同的 AVR 器件的勘误手册。
  • 应用说明部分给出了各种 AVR 单片机的应用实例。详细说明如何使用 AVR Studio 调试环境。

注意！
使用ICE50 需要 AVR Studio 4.0 或更高版本的支持。AVR Studio 3.x 不支持ICE50 工作！

提示！
AVR Studio 将不断进行版本更新。请您到 www.atmel.com 查阅更新。

请查阅
    • ICE50 仿真器使用说明
    • AVR Studio 4.0 使用说明


System Requirements

系统要求
硬件要求
为了使用 ICE50，推荐使用主频为233MHz（或更高），并满足下列配置的奔腾系列个人电脑：
  • 64 M（或更多）内存
  • 100 M 空余硬盘空间
  • CD-ROM 或 因特网接口
  • VGA 显示器或更佳显示器
  • 推荐显示器分辨率1024x768
  • 16650 串行通讯接口（COM 接口）
  • 安装 AVR Studio v4.0 或更高版本
  • 安装 Acrobat Reader v4.0 或更高版本
软件要求
AVR Studio目前支持下列操作系统：
  • Windows NT Version 3.51
  • Windows NT Version 4.0
  • Windows 95
  • Windows 98 (ME)
  • Windows 2000
  • Windows XP
  • AVR Studio 将不断更新，以适合新的操作系统和不同版本的操作系统。查看 AVR Studio 使用说明获取最新信息 。
注意Windows NT 和 Windows 95 不支持 USB。

目标板硬件要求

  • 目标板必须能提供2.2－5.5伏电压，150毫安输出电流的电源

工作环境

  • 工作温度：0℃－70℃
  • 工作湿度 ：10 - 90 % RH (非冷凝状态)
  • 电压：＋9伏到＋12伏直流电
警告！
如果推荐工作环境不满足，可能引起误操作并且损坏仿真器。

主机接口
RS-232C 设置：波特率：115200bps , 1位起始位，8位数据位，1位停止位，无奇偶检验，支持硬件握手协议，使用9针母型接头。把 RTS 和 CTS 连接起来以支持硬件握手协议 。

请查阅


General Description

总体硬件描述

在这部分中将给出一份简明扼要的仿真器说明。同时给出 ICE50 各部件的更加详细的资料。

什么是在线仿真器？

ICE50 是一款在线硬件仿真器，仿真器是一款为“模仿”其他硬件执行过程而专门设计的硬件。以 ICE50 为例，它是为仿真 AVR 各种器件而设计的。所有仿真器都是以准确仿真为目标。ICE50 提供了 可能的最高的兼容性。

ICE50 仿真系统包括了下面5个模块：

  • 主仿真单元
  • POD
  • Probe
  • 个性化适配器
  • 测试适配器
  • 使用 ICE50 仿真


Main Emulator Unit

主仿真单元

主仿真单元如下图所示。该单元包括了控制逻辑，仿真 AVR 器件所必需的硬件资源两部分。

  • LED 状态指示灯
  • POD 插口
  • 扩展插口
  • USB 接口
  • RS-232C 接口
  • 复位按键
  • 电源开关
  • 电源接口
状态指示 LEDS

在 ICE50 仿真盒前面有3个 LED 灯。红色 LED 灯，红/绿双色 LED 灯，绿色 LED 灯。这些 LED 灯将指示 ICE50 的一些重要的状态信息及其工作模式。下图给出了 LED 灯的详细信息。 当开启ICE50的电源时，LED 灯的正常显示顺序如下：

  1. 红色电源 LED 灯亮
  2. 模式 LED 灯亮，先亮红色后亮橙色
  3. 绿色状态 LED 灯亮（大约15秒以后）

红色电源指示 LED

红色电源 LED 灯指示电源状态。如果 ICE50 的电源开启并且电源系统正确工作，这盏 LED 将被点亮。如果，在电源开启以后，这盏 LED 灯一直持续不亮，请确认电源系统是否满足 ICE50 的要求。如果您使用的不是 ICE50 提供的电源系统。请确认电源极性是否正确。请查阅 电源系统 部分获得更多关于电源要求的信息。

绿色状态指示 LED

ICE50 仿真准备好时，绿色 LED 将被点亮。一旦绿色 LED 灯被点亮，ICE50 可以进行仿真。在 ICE50 升级的过程中，LED 灯将闪烁。当 ICE50 装载新的仿真器件时，LED 灯将熄灭，完成装载后，LED 重新 被点亮。如果，在上电过程完成后 LED 灯未被点亮，请参考 故障排除 获取可行解决方案。

多色模式LED

多色 LED 灯显示的信息表示 ICE50 工作在哪种模式下。在启动阶段，这个 LED 灯首先是红色，然后是橙色。橙色代表仿真器处于中止状态。绿色灯代表 ICE 处于运行状态。如果 LED 灯变成红色，表明 ICE 仿真出错。一旦该情况发生，请参考 故障排除向导。

LED | 意义 | 情形 | 描述
红色 | 电源 | 暗 | 电源未连接或者 ICE50 电源未开
 |  | 亮 | 电源连接，ICE50 开启并且电压满足要求
绿色 | 状态 | 暗 | ICE50 正在初始化
 |  | 亮 | ICE50 可以仿真
 |  | 闪烁 | 进行升级时，LED 灯闪烁
多色 | 模式 | 绿色 | 运行模式
 |  | 红色 | 如果该灯一直点亮则 ICE 出错
 |  | 橙色 | 中止模式

POD 插座

将 POD 插入 POD 插座
只有原装的 ICE50 POD 才能配合 ICE50 使用，并且在安装和拆除 POD 时需要十分小心。在正常的使用时，没有必要将 POD 从插座上移除。如果，由于某些原因造成 POD 没有连接好， 推荐按下列步骤插入 POD。

  1. 将 POD 接入 IEC50 POD 接口。确定公型和母型接口排列一致。
  2. 双手用力压 POD 的上半前端（在接口的顶端）。
  3. 在将接口稳固压入正确位置后，用手压 POD 的下半部分。在 POD 锁入位置后，您将听见“咔”的一声。

将 POD 从 POD 插座移出
如果由于某种原因需要将 POD 从 POD 插座中移出，参考步骤如下：

  1. 将 POD 从其前面抬起直到听见“咔”的一声。现在 POD 可以从插座上拔起。
  2. 将 POD 从 POD 插座上取出。

点击后面的链接，加深对 POD 的了解 POD 更详细的描述。

提示！
假若POD没有连接，ICE50 仍可以仿真 AVR 单片机的核心功能，例如：定时器等。在一些调试过程当中，这项功能会十分有用。如果 POD 已经插入，并且目标板未上电，ICE将处于复位状态直到目标板电源打开。 通过禁止 ICE50 其他选项对话框里的 POR 和 BOD 复位中断，即使目标板电源没有连接，ICE50 仍能正确地仿真。

扩展插座

在 POD 座上还保留了一个用于扩展的 POD 插口，该插口不支持当前版本的 ICE50 ，而是准备为以后扩展使用的。目前，置于该插口当中的 POD 是一个空的 POD ，仅用于保护扩展接口。

USB 接口

USB口如上图所示。ICE50 可以通过 USB 和 AVR Studio 进行通讯。为了获取更多关于将 ICE50 连接到 PC 机的信息，请查阅 连接 ICE50 到 PC 主机 部分。

RS-232C 接口

ICE50 可以通过标准的 RS－232C 接口与 AVR Studio 进行通讯。RS-232C 是 PC 机上 COM 接口的通讯协议。通信采用以下设置参数：波特率115200bps，8位数据位，无奇偶校验，一位停止位（8N1）。更多关于连接 ICE50 到 PC 机的信息，请查阅 连接 ICE50 到PC主机 。

复位按键

按下 ICE50 的复位键，仿真器将执行热复位。大约15秒以后，系统配置完成，同时绿色 LED 灯点亮，表明仿真器可以使用。

电源开关

电源开关是 ICE50 仿真器的主要开/关部分。将电源开关关闭，ICE50 的电源被关掉。注意，此时 ICE50 的地仍然与电源地连通的。

电源插口

ICE50 系统的电源插口是一个标准的2.1毫米中心头的圆型座。地线需接在中心头上。更多关于电源要求和工作环境的信息，请查阅 电源系统 功能描述 。


POD Description

POD 描述

ICE50 POD 如下图所示。它通过两路对接连接器与主单元相连。连接 或 断开 POD 时不要用力过度，否则会损坏 POD。

POD 包含了所有进行目标板 AVR 器件仿真所需要的模拟和数字逻辑器件。电路设计尽量具有和真正器件一样的电气特性。 POD 能够进行下列仿真：

  • 复位输入
  • 数字输入输出（Digital I/O)
  • 交流电气特性
  • 直流电气特性
  • 模拟比较器
  • 模数转化器（A/D Converter)
  • 双总线接口

ICE50 是一款无跳线设计仿真器。 所有 POD 的配置 是通过 AVR Studio 完成的。没有必要进行手动配置。

复位输入

ICE50 的复位输入与实际器件的复位输入有所区别。这一点在使用 ICE50 进行仿真时必须加以考虑。复位输入电路的原理图如下所示：

数字输入输出口（Digital I/O）

在 ICE50 上使用了带 CMOS 缓冲器和电平转化的数字输入输出口，如下图所示。

交流电气特性

ICE50 输入输出口（I/O ports）的传播延迟和实际仿真的器件相比要大一些。下面的示意图显示了仿真器输入输出口上的输出和读入信号的时序。在下面示意图中 ，数据方向寄存器假定设置为“1”。后面的表格给出了一组典型数据。

延迟时间 | 典型数值 (2伏 目标板) | 典型数值 (5伏 目标板)
tOHL | 13 ns | 10 ns
tOLH | 13 ns | 10 ns
tIHL | 13 ns | 10 ns
tILH | 13 ns | 10 ns

  • tOHL = 清除 PORT 寄存器到输出变化的时间

  • tOLH = 设定 PORT 寄存器到输出变化的时间

  • tIHL = 输入电平改变到 PIN 信号改变的时间 (高电平到低电平)

  • tILH = 输入电平改变到 PIN 信号改变的时间 (低电平到高电平)

下图显示了三态/输入输出口引脚上的时序。后面的表格给出了一组典型值。

延迟时间 | 典型数值 (2伏 目标板) | 典型数值 (5伏 目标板)
tDZL | 15 ns | 15 ns
tDLZ | 15 ns | 15 ns
tDZH | 15 ns | 15 ns
tDHZ | 15 ns | 15 ns

  • tDZL = 从设置方向寄存器到输出变为低电平的时间。

  • tDLZ = 从清除方向寄存器到输出为三态的时间。

  • tDZH = 从设置方向寄存器到输出变为高电平的时间。

  • tDHZ = 从清除方向寄存器到输出变为低电平的时间。

输出缓冲器的驱动能力是＋/－24毫安@3V VCC。这种驱动能力略超过实际器件的驱动能力。输入输出电路的工作电压范围是2VCC到5.5VCC。工作在2V VCC时，缓冲器能够吸收25毫安电流，最高输出低电平为1伏（VOLmax）。

输入缓冲器典型的门限电压为0.8v @ 3v VCC，1.2v @ 5.5v VCC。

直流电气特性

下面的结果是通过连接220欧姆负载所获得的：

目标电压 | 高电平 | I/O 脚上的源电流 | 低电平 | I/O 脚上的吸电流
5.5伏 | 4.84伏 | 21.6毫安 | 0.58伏 | 21.8毫安
5伏 | 4.40伏 | 19.6毫安 | 0.53伏 | 19.8毫安
4.5伏 | 3.95伏 | 17.6毫安 | 0.48伏 | 17.9毫安
3.3伏 | 2.88伏 | 12.9毫安 | 0.37伏 | 13.1毫安
2.7伏 | 2.35伏 | 10.5毫安 | 0.31伏 | 10.7毫安
模拟比较器

模拟比较器由一个高速比较器和一个 CMOS 输出缓冲器/电压转化器构成。模拟比较器的方框图如下图所示。信号从 AIN0 和 AIN1 脚到内部ACO的总的传播延迟时间是90纳秒，最大210纳秒。对实际器件而言，从 AIN0 和 AIN1 脚到内部 ACO 的总的传播延迟时间是500纳秒，最大750纳秒。

比较器内部比较门限电压的典型值为1mV，最大为4mV@25℃。

模数转换器

ICE50 模数转化方框图如下图所示。

模数转换部件包含多路模拟复用器，可编程增益放大器和一个10位的逐次逼近型模数转换器。该结构本应该和实际的相关器件实现了同样的功能。但是，因为模数转换部件是作为一个外部模拟器件构建在POD上的，因而更容易受到环境噪声和IO口转换时所产生的噪声的影响。

注意！ 使用该仿真器时，使用的内部模拟参考电压为2.5V。而实际器件使用2.56V作为参考电压。因此，通过仿真器仿真模数转换所得到的结果和实际器件转换的结果将有所不同。

所有的ADC输入口都串入了一个330欧姆的限流电阻。这样，当仿真器的电源关闭，但标板电源仍打开时，可以保护模数转换电路。这是因为输入多路复用器的输出钳制在电源和地之间。当串入330欧姆的限流电阻后，在目标板电源打开和仿真器电源关闭的情况下，仅会有一个近似于（模拟输入电压－0.3伏）/330欧姆的电流通过每个模数转换输入引脚。

双总线(Two Wire)接口

ICE50 的双总线(TWI)接口方框图如下图所示。

双总线接口(TWI)的输出部分含有一个高速转换(slewrate)电路，用于满足双总线(TWI)的输出规范。同时输入口带有尖峰滤波电路，小于50纳秒的输入尖峰毛刺将被过滤消除。

请查阅

  • ICE50 仿真器使用说明
  • 主仿真单元
  • POD
  • Probe
  • 个性化适配器


Power System Description

电源系统功能描述

电源

与 ICE50 配套的电源能够满足仿真器的要求。如果使用另外的电源，该电源必须能够提供9到15伏的直流电压，最小功率20瓦。通过标准的2.1毫米中心抽头线连接到主仿真单元。中心抽头连接到地。

ICE50 电源系统

ICE50 有一个内部的电压调整电路，可以为 ICE 提供稳定的电压。该电源系统不能为目标板供电。

应用目标板的电源要求

Probe 和 POD 部件是由目标板电源供电的。Probe/POD 的动态电压要求与实际器件电压要求区别不大。请查看下表所列的电压要求。POD 静态电压要求如下表所列。目标板的电源系统需要能够承受这样的电流消耗。

电压要求 |
电压伏值要求 | 9－15伏直流电
电源消耗 | < 20 瓦
目标板应用电压范围 | 2.2 - 5.5 伏
目标板电压 | ICE50 (POD/Probe)需要目标板提供的电流
 | 正常, 最大情况
2.2伏 | 5 毫安, 7 毫安
2.5伏 | 5 毫安, 7 毫安
3.3伏 | 20 毫安, 30毫安
5.0伏 | 85 毫安, 125 毫安
5.5伏 | 110 毫安, 165毫安

注意事项:
ICE50 POD 的数字输入输出口驱动能力和期望中的实际器件的驱动能力相比有细微的差距。详细说明请查阅 POD 的 数字输入输出口 描述。


Probe Description

Probe 描述

Probe 包含 ICE50 的时钟驱动电路，电压极性，电路短路保护以及配合高速操作的线性终端部件。下图所示是 Probe 的照片以及时钟驱动电路的简单框图。通过 Probe 上面的时钟驱动电路（与仿真目标板子相近），用户可以获得最佳的 AVR 时钟仿真效果。

Probe 存在两种修订版本，如下图所示。版本号可以在 Probe 电路板上找到。最新版本是A9902.3.1200.E。之前的一个版本是 A9902.3.1200.C。两个版本之间的区别是将 probe 与个性化适配器连接的连接器配置不同。.E版本使用一个连接器，然而，.C版本使用4个小一点的连接器。

重要说明: probe 上面的连接器必须和个性化适配器 的连接器相匹配。请阅读本部分，获取更多关于新版 probe 和个性化适配器的信息。新版适配器只针对 probe 的.D版本制作。

帮助主题:

  • 极性保护与 ICE50 的电源开关

  • 电流限制与过电压保护

Probe:

A9902.3.1200.E A9902.3.1200.C

可用时钟选项

当前版本的 Probe 在支持时钟选项方面存在一些限制。Probe 不支持的时钟模式通过简单解决方案进行仿真是十分简单的。该部分将在 外部晶振和外部谐振器 和 外部RC谐振器 里加以描述。Probe的版本号可以在 Probe 背面上方找到(上面右边照片的左面)。

ICE50 Probe A9902.3.1200.E 版本

Probe A9902.3.1200.E 版本支持下列时钟选项：

  • 外部时钟信号
  • AVR Studio 提供的内部时钟信号
  • 外部32KHz RTC 晶振
  • 内部校准 RC 谐振器

Probe A9902.3.1200.A 版本不支持下列时钟选项。不支持的钟模式的解决方案的描述将在下面的链接中找到：

  • 外部晶振和外部谐振器
  • 外部 RC 谐振器

外部时钟信号

外部时钟信号可以加载在 probe 仿真器上的 XTAL1 引脚上。仿真器可以被设置为使用该信号作为系统时钟信号的模式。请查阅 器件选择 获取具体操作说明。

时钟信号必须满足下列要求：

  • 频率 ： 5KHz to 20MHz

  • 占空系数 ： 50%

  • 输入电压绝对最大值 ： 1.8V to 7V

  • 推荐输入电压 ： 1.8 to 5.5V

  • 输入高电平（最小电压） ： 1.7V

  • 输入低电平（最大电压） ： 0.5V

AVR Studio 提供的内部时钟

仿真器可以设置为运行在内部可编程时钟下。可编程时钟范围从5KHz到20 MHz。但是，最大频率不能超过实际器件的最高频率。只有在某些输出频率下，仿真器可以达到最高的准确率，因为时钟发生器输出频率通常有0.1% 的误差。如果仿真目标工作在与 AVR 芯片/仿真器相同的频率下，可将内部可编程时钟施加在 XTAL2 引脚上。请查阅 器件选择 ，获取如何设置内部可编程时钟的具体描述。

外部32KHz RTC 晶振

仿真器件的异步时钟是由外部32KHz的晶振提供。这个晶振必须连接在个性化适配器的TOSC1和TOSC2引脚上。为了确保能正常工作，晶振应该尽量连接在靠近个性化适配器的位置。Probe上的振荡驱动电路可以配合使用大多数并连方式的32kHz晶体。

内部 RC 谐振器

AVR Studio 可将仿真器设置为在内部谐振器方式下运行。查阅 器件选择 获取如何设置内部RC 谐振器的详细描述。

外部晶振和外部谐振器

ICE50 Probe 不支持外部晶振和外部谐振器。可将仿真器设置为使用内部可编程时钟。XTAL1 引脚届时将处于三态。XTAL2引脚使能，并且内部可编程时钟信号将在该引脚输出。查阅 特殊选项 获取如何设置 XTAL2 时钟的详细信息。

外部 RC 谐振器

ICE50 probe 不支持外部 RC 谐振器。我们设置仿真器使用内部可编程时钟。XTAL1 和 XTAL2 引脚将处于三态。

请查阅

  • ICE50 仿真器使用说明
  • 主仿真单元
  • POD
  • Probe
  • 个性化适配器


Test Adapter Description

测试适配器

ICE50 自带一个测试适配器。和个性化适配器一样，测试适配器也有两个版本，一个是适合Probe .C的版本，一个是适合最新Probe .D的版本。请看下图。

SNR：A9902.3.1400.A, .C Probe revision SNR： A9902.3.1400.B, .D probe revision

该测试适配器包含了一个认证码，ICE50 和 AVR Studio 将使用该测试适配器进行检测。ICE50 测试适配器可以进行下列的测试：

  • 模拟比较器

  • 模拟数字转换器

  • 输入输出引脚

  • 双总线(TWI)接口

配合probe A9902.3.1200C使用测试适配器rev A

rev A 版本的测试适配器必须配合 STK500 开发板使用。对于.B版本则没有该限制。将测试适配器连接到 STK500 板的 PORTE/AUX 上。将probe连接到测试适配器。请看下图：

确保 STK500 板子被配置在目标电压=3.3v，并且电源打开。

配合probe A9902.3.1200D使用测试适配器(A9902.3.1400.B)rev B

将测试适配器连接到 probe。测试适配器将由 ICE50 Pod 提供电源 ，不需要其它的连接。

提示！
当移动或者保存 ICE50 的时候，请使用测试适配器 rev D 来保护 ICE50 probe。

注意事项！
ICE50 需要AVR Studio 4.0 或更高版本的支持。 AVR Studio 3.x 版本将不能配合ICE50工作！

提示！
AVR Studio 将不断进行版本更新。请您到 www.atmel.com查阅更新。


Mounting of ICE50 memory plugin module

ICE50 插件存储模块装配

请按照下面的说明正确安装 ICE50 存储器模块插件。

  1. 在本步骤里描述的工作必须在有静电保护的环境下进行。请您使用一条腕带，如图所示。如果因本建议被忽视而导致器件损坏，Atmel 公司不予负责。

  2. 将 POD 从 ICE50 上移出。将 ICE50 翻转放置，并将图中箭头所示位置的螺丝拧出。

  3. 将 ICE50 再次翻转并将 ICE50 的封盖移出。 此时的 ICE50 将如下图所示。注意：图中的白色长方形区域，存储器模块插件将被安装在此位置。

  4. 将存储器模块插件取出，并正确排列在3个连接口上面，对准之后将该模块压入连接口。该模块只能从一个固定的方向进行正确安装。

  5. 确保在3个连接口上使用的压力均匀。将 ICE50 存储器模块插件稳定地压入3个连接口，直到不能压入为止。

  6. 请注意： ICE50 母 PCB 板和 ICE50 存储器模块插件 PCB 板之间的的距离是8毫米左右。

  7. 安装 ICE50 的封盖并且将螺丝拧紧。在拧紧螺丝时切忌用力过度。如果使用的是电动螺丝拧紧装置，请将该装置设置在最低速和最小转距上。

  8. 重新安装 POD。

  9. 上电 ICE50，并运行自检程序。运行所有的测试程序。注意：在起初的运行过程当中某些测试可能会失败，并伴有下列错误信息：“Method '~' of object '~' failed”。如果该错误发生，请选择测试失败，并再次运行该测试。如果错误提示消失，表明 ICE 工作正常。如果仍然有错，请与 Atmel 经销商联系。

请查阅
  • ICE50 仿真器使用说明
  • 使用 ICE50 仿真
提示！
AVR Studio 将不断进行版本更新。请您到 www.atmel.com 查阅更新。


Connecting ICE50

连接 ICE50 进行仿真

这部分将描述如何将 ICE50 与 PC 主机和目标板进行正确的连接操作。本任务可以分成下列几个任务：

  1. 正确选择个性化适配器
  2. 连接 probe 到目标板
  3. 连接 ICE50 到 PC 主机
  4. 正确的上电步骤
  5. 升级 USB 驱动
ICE 正确连接后，AVR Studio 必须进行 配置。

提示！
AVR Studio 将不断进行版本更新。请您到 www.atmel.com 查阅更新。


Connecting Probe to Target

将 Probe 连接到目标板

通过提供的个性化适配器，将 Probe 连接到目标板。为确保正确的操作，请正确的参照 个性化适配器。

连接 PDIP 封装形式的适配器

将 ICE50 连接到目标应用板之前，请确定 ICE50 和目标板没有上电。移除 ICE50 时也是如此。从 PC 主机连接或断开 ICE50 时，请确保 ICE50 没有上电。
  1. 插入个性化适配器。确保个性化适配器上的1号引脚和目标板插座/封装的1号引脚应相对应。
  2. 将 Probe 安装到个性化适配器上。注意：不要用力过度；只有从某一确定位置 Probe 才可以安装到个性化适配器上。个性化适配器上的圆圈将提示您 Probe 正确的安装位置。请确保 Probe 正确地连接到 ICE50 上的 pod 接口上。

连接 TQFP 封装形式的适配器

m128 TQFP 封装形式的适配器包含上下两个部件：底部部件应该被焊接在目标应用板上，顶部是与 ICE50 Probe 连接的部件。安装 TQFP 封装形式的适配器时，请确保适配器已经焊接在目标板上并且方向正确。

  1. 将个性化适配器的底层部分焊接在目标应用板上。确保适配器上的1号引脚和目标板上的1号引脚相匹配。
  2. 将 TOFP 封装的上层模块安装在已固定的底层模块的上面。再次注意放置的方向正确性。
  3. 将 Probe 安装在个性化适配器上。
提示！

在焊接底层部分和目标板时，使用低温的焊锡和电烙铁。这将保证适配器上面的焊脚不被损坏。

警告！

  • 每一次的操作都需要时刻警惕不要出现错误的放置，以保证probe 和 ICE50 pod不被损坏。不管怎样，选择错误的适配器或者将适配器错误地放置将导致 ICE50 的损坏。
  • 如果连接或断开 POD/个性化适配器时目标板处于上电状态，这将导致 Probe 和/或 POD 损坏。

Probe 和个性化适配器连接好后，请继续 上电步骤。

提示！
AVR Studio 将不断进行版本更新。请您到 www.atmel.com 查阅更新。


Connecting ICE50 to Host PC

连接 ICE50 到 PC 主机

ICE50 能够通过串口电缆线（接到 PC 机的 COM 接口）或者 USB 与 PC 主机相连。

注意事项:
在连接或断开串口电缆线之前，请确保 ICE50 和 PC 机都处于断电状态。USB 电缆线在 PC 和 ICE 都上电时，进行连接或断开没有问题。

串行端口连接

请使用 ICE50 配套的9芯 RS232C 电缆线。将针型接口连接到 ICE50 并且将孔型接口连接到 PC 主机。RS232C 设置为：波特率115，200，无奇偶校验位，8位数据位，1位停止位（N81）并且使用硬件握手协议（RTS/CTS）。如果您使用的不是与仿真器配套的电缆线，而是其他电缆，请确保所有需要的引脚已经连接。

AVR Studio 不能强制控制 COM 接口。一旦其他器件或者驱动软件控制了 COM 接口（例如： IrDA，PDA 或者超级终端之类），那么 PC 机和 ICE50 之间的通讯将失败。请保证 ICE50 连接到的 COM 接口时，没有其他软件控制该 COM 口。

USB 连接

将 USB 电缆线连接到 ICE50 之前，请确定 ICE50 的 USB 驱动已经正确安装。查阅 USB 安装与升级 章节获取更多关于此问题的说明。

为了将 ICE50 连接到 PC 主机，将 ICE 配套的 USB 电缆线插入 ICE 和 PC 主机。扁平矩形插头插入 PC 机，几乎是正方形的插头插入 ICE.
ICE50检测

当第一次将 ICE 通过 USB 电缆线连接到 PC 主机时，PC主机上将显示信息“发现新硬件”。

在驱动程序被装载之后，ICE 就可以和AVR Studio配合工作了。

升级旧版本 USB 驱动

如果已经使用 4.07 或更老版本的 AVR Studio 进行 USB 通信，您必须 升级 您的USB驱动，以便能使用4.08或更高版本的 AVR Studio。

注意事项:
在连接或断开串口电缆线之前，请确保 ICE50 和 PC 机都处于断电状态。 USB 电缆线在 PC 和 ICE 都上电时，进行连接或断开没有问题。

注意事项:
开启 ICE 时串行通信使能。如果 USB 电缆线插入， ICE 上面的串口将被禁止。 USB 比串行通信的优先级要高。为了能够使用串行通信，请拔掉USB电缆线。

注意事项:
比较旧的PC机没有支持USB的硬件。一些比较老的操作系统(Windows 95 and NT 4.0)不支持USB。

Probe 连接

一旦将 ICE50 连接到了 PC 主机，请继续 将Probe连接到目标板。


Power up sequence

ICE50 上电步骤

将ICE50 正确连接到目标板和 PC 主机后，可以打开电源。为确保 ICE50 和 AVR Studio 之间通信正确，建议您按照下列步骤执行。

  • 为 ICE50 上电
  • 为目标板上电
  • 启动 AVR Studio

注意：如果您使用的是其它的上电时序，设备并不会被损坏，但是由于AVR Studio 启动时将自动检测外围设备，如果没有上电，ICE50 不能被检测到。

上电完成后，请启动下一步：配置 AVR Studio。

关于更多的电源要求的信息，请查阅 链接 。

提示！
AVR Studio 将不断进行版本更新。请您到 www.atmel.com 查阅更新。


Configuring AVR Studio

在 AVR Studio 中配置 ICE50

ICE50 正确地与目标连接好以后，下一步所需要做的是在 AVR Studio 里面设置正确的器件配置。第一次打开应用工程时，该步骤是必需的，并且，在以后的操作中可以在仿真器选项菜单中进行修改。配置将被保存在独立的文件当中，再次启动工程时会被自动装载。

本部分将被分为后面两部分：第一部分是在配置 AVR studio 步骤里面描述的快速入门向导，第二部分对仿真器各选项进行具体说明。

  • AVR Studio 配置快速入门向导
  • 升级 ICE50 固件
  • 为 ICE50 下载新器件
  • ICE50仿真器选项
    • 器件选择选项
    • 引导区选项
    • 其他选项
    • 中止模式选项
    • 堆栈监视器
    • 熔丝位
    • ICE 状态

注意事项!
ICE50 需要AVR Studio 4.0 或更高版本支持。 AVR Studio 3.x 版本将不能配合 ICE50 工作！

提示!
AVR Studio 将不断更新版本。请您到 www.atmel.com 查阅更新。


Quick Start Guide

AVR Studio 配置快速入门向导

请按照下列步骤配置 ICE50。

  1. 连接好 ICE50 并且启动 AVR Studio，请查阅 连接 ICE50 获取更多细节描述。
  2. 选择建立一个新工程或者打开一个已建 AVR 汇编工程文件，请看下图。
  3. 如果您已经建立了一个目标文件，您可以直接打开该文件，请看下图。

  4. 如果选择建立一个新工程，请键入工程名。如果您想要您的汇编文件和工程名相同，请确定 “Create initial file”。如果你想要建立一个和工程名相同的文件夹，请确定该选项。浏览该工程保存的地址。请看下图。

  5. 点击下一步按钮，现在选择 ICE50 作为目标然后选择需要仿真的器件。点击完成按钮结束向导。AVR Studio 现在已经可以使用，请看下图。被加载和已存在的器件将呈高亮状态显示。

如果选中“Open target options”的话，一旦开始进行调试，将打开 ICE50 选项 对话框。装载一个C/C++目标文件时，调试任务将自动开始。而当装载一个汇编工程之后，点击“开始调试”按键 [image] 将进入任务调试。

提示!
AVR Studio 将不断进行版本更新。请您到 www.atmel.com 查阅更新。


Upgrading the ICE50 Firmware

升级 ICE50 固件

AVR Studio 将会自动检测 ICE50 是否有使用最新版的固件程序。如果检测到ICE50的固件不是最新版的，系统将会询问用户是否更新版本。 ICE50 固件可在 AVR Studio 中手动更新。

重要注意事项：

ICE50 一般不能通过 USB 进行更新。请使用 UART 串口进行更新。

选择 AVR Studio 中的菜单 Tools ->ICE50 Upgrade后。系统将弹出以下窗口：

上面的窗口中有两个选择按钮。开始升级（Start Upgrade）按钮用于对 ICE50 进行升级。

如果选择了允许降级选项（Allow Downgrade），则对 ICE50 的固件进行降级处理。

ICE50 信息列表给出了所有模块和器件文件的版本信息。如下图所示：

提示！

如果在升级 COM MCU （负责ICE50与PC通信的部分）的过程中由于某种原因更新过程失败，ICE 将停止响应 AVR Studio 以及更新程序。一旦发生该问题，必须通过复位 ICE50 的自引导程序来解决。此时需要进入到编程系统菜单（单击左上角的编程（program）图标）选择‘复位自引导装载程序...’。

重要注意事项。

只有当 COM MCU 升级失败，升级程序无法与 ICE50 通信时，才需要执行“复位自引导装载”操作。一般情况时出现升级失败，请复位 ICE50并关闭升级程序，然后再次执行升级程序，重新进行升级过程。如果升级程序能够与 ICE50 通信，但还是不能升级成功，请联系Ateml公司 avr@atmel.com。

将弹出以下窗口：

请按照窗口中描述的步骤执行。

提示！
AVR Studio 将不断进行版本更新。请您到 www.atmel.com查阅更新。


Downloading New Parts for ICE50

为ICE50 加载新器件

ICE50 的固件和所支持器件的文件保存在 ICE50 目录下的 ICE50.dat 文件里面。新版本的AVR Studio带有最新版的 ICE50 固件和所支持器件的文件。如果 ICE50.dat 文件中有更新的器件文件，器件文件将自动升级。

提示！
AVR Studio 将不断进行版本更新。请您到 www.atmel.com查阅更新。


Device Selection

器件选择

  1. 在AVR Studio 当中选择 Debug->ICE50 选项。Device Selection 将呈高亮状态显示，用户可下拉菜单栏选择不同的器件。注意各器件坐边的图标，点击该图标表示该器件文件将被加载到ICE50中。ICE50 可同时加载容纳四个器件文件。某些器件文件可能携带了仿真两种 AVR 器件的功能。右边的状态栏显示了此时 ICE50 包含多少器件文件。

    使用ATmega128文件时，可选择 ATmega103 兼容模式。

  2. 在下面的时钟源里面进行选择：(该过程将涉及实际器件的熔丝位设置)

  • 内部 XTAL 谐振器

  • 内部 RC 谐振器

  • 外部时钟

  3. 在启动延时时间下拉菜单里面选择不同的启动延时时间。(该过程将涉及实际器件的熔丝位设置)

  4. 在频率下拉菜单里面可以进行器件所使用系统时钟频率的选择。

另外在左下角有两个按钮，一个是 ICE 复位按钮一个是默认值设置钮，请见上图。ICE 复位按钮用于对 ICE 进行复位，与 ICE50 后面板上的复位按键起相同的复位作用。默认值设置钮（Set Default）表示 ICE 装载确省的设置。

提示!
AVR Studio 将不断更新版本。请您到 www.atmel.com 查阅更新。


Boot Block Options

引导区选项

在AVR Studio 中进入 Debug->ICE50 选项中，选择引导区选项（Boot block options）后，将出现4种不同的下拉菜单。这些菜单仅适用于有引导区的 AVR 器件。请看下图，4个菜单项是：

  1. 引导区大小。在下拉菜单中选择可用的引导区大小。

  2. 复位向量。选择复位向量为应用程序区还是引导区。

  3. 引导锁定保护模式0 - 应用区部分设置。提供4种可选模式，请查阅实际器件的数据手册获得更多信息。

4. 引导锁定保护模式1 - 引导区部分设置。提供4种可选模式，请查阅实际器件的数据手册获得更多信息。

注意事项！
ICE50 需要AVR Studio 4.0 或更高版本支持。 AVR Studio 3.x 版本将不能配合 ICE50 工作！

提示！
AVR Studio 将不断进行版本更新。请您到 www.atmel.com 查阅更新。


Other options

其他选项

在 AVR Studio 里面可以设置其他特殊选项。

在 AVR Studio 中进入 Debug->ICE50 Options 设置框，选中 Other Options 项。现在可以设置 XRAM，复位源和时钟谐振器，请看下图。

XRAM：

  • 禁止使用： 该选择项表示器件无 XRAM 接口，或者不使用 XRAM 接口。AVR Studio 只在数据存储区视图中显示器件内部 RAM 的内容。

  • 仿真 XRAM 存储区： 该选项表示在目标板上无实际连接 RAM 器件的情形下实现对外部扩展 RAM 的仿真。AVR Studio 在数据存储区视图中将显示最大可用 RAM 空间的内容。

  • 使能 XRAM 接口：该选项表示目标板上的器件使用 XRAM 接口，板上有实际的 RAM 器件。

复位源：

  • 禁用 POR － 当目标板上电时将发生上电复位操作。选择 disable POR 表示屏蔽掉 POR 上电复位源。

  • 禁用 BOD － 当目标电源下跌到预设值时，将发生掉电检测复位。选择 disable BOD 表示将 BOD 复位屏蔽（禁止使用 BOD 功能）。该选项不适用于没有 BOD 功能的器件。

  • 禁用外部复位 － 选择 disable external reset 表示将来自外部复位引脚上所有的复位信号屏蔽掉。当仿真那些带有设置RESET引脚功能的熔丝位，并且复位引脚已经设置作为I/O引脚的器件时，外部复位是自动禁止的。

RTC谐振器：

  • 禁止使用 － 选择该选项表示用户的设计不使用RTC功能，这将释放 T1OSC 与 T2OSC 引脚，把它们作为通用I/O，或者其他功能的接口使用。

  • 内部 － 使用 ICE50 内部的RTC振荡器。选择该选项表示在 ICE50 内部，一个32.768 kHz的RTC时钟源被连接到仿真器件的 T1OSC 和 T2OSC 引脚上。

  • 外部 － 选择该选项表示 ICE50 使用外接的晶体振荡器或者谐振器作为RTC振荡源。ICE50 的 RTC时钟驱动电路已经对使用32.768KHz晶振进行了优化，但对于任何外接 10-150KHz 的晶振都可使用。

看门狗：

  • 看门狗时钟始终运行 － 该选项适用于所有具备“看门狗使能”熔丝位的器件。选择该项表示对该熔丝位编程。

  • 溢出复位 － 选择该选项表示当看门狗时钟溢出时，实施器件复位操作。该操作与实际物理器件的相关操作相同。

  • 溢出中断 － 选择该选项表示一旦看门狗时钟溢出，ICE50 将暂停当前指令的运行，此后，可以执行单步和全速执行命令。在这种情况下，当看门狗在第一次时钟溢出后，后序的时钟溢出时间将是指定的看门狗时钟溢出时间的两倍。但还是建议用户，一旦发生看门狗时钟溢出中断，最好复位仿真器，因为大多数情况下这样的溢出是不期望发生的。

BOD 电平：

  • 禁用 BOD － 选择该选项表示禁用 BOD 模块，BOD复位源将被自动屏蔽。

  • 使能 BOD － Y.XX 电压 － 选择该选项中的一个，作为指定的 BOD 检测电压值，请查阅相关器件的数据手册，了解关于 BOD 电平设定的情况。

禁用外部复位熔丝位(RSTDSBL Fuse)：

  • 选择该选项表示将复位引脚作为通用I/O引脚使用。该选项适用具有该功能的器件。

CKOUT 熔丝位：

  • 某些器件，如 Atmega162 有一个 CKOUT 熔丝位，用于设定是否将内部时钟由某个I/O引脚输出。

CLKDIVx 熔丝位：

  • 某些器件有一个时钟分频熔丝位，可以设定是否对系统时钟进行自动的预分频。例如 Atmega162，该熔丝位可设定对时钟源进行8分频作为系统时钟。

禁用 XTAL2 时钟源：

  • 选择该项将禁止在 XTAL2 引脚上输出时钟，该功能默认为有效。

使能中止非法访问 EEPROM 和 SRAM 的功能

  • 该选项默认为已选。表示当访问无效的数据存储器时，仿真器将中止工作。如果不选择该选项，当访问无效的数据存储器时，仿真器将不中止工作，仅是在信息框中给出访问无效存储器的提示信息。查阅 “无效存储器访问检测” 获取更多信息。

另外在窗口的左下角有两个按钮，一个是 ICE 复位钮，一个是默认值设置钮，请看上图。ICE 复位按用于对 ICE 进行复位操作，它和 ICE50 后面的复位键起着相同的作用。而默认值设置钮将使 ICE 恢复到默认的设置状态。。

提示!
AVR Studio 将不断进行版本更新。请您到 www.atmel.com 查阅更新。


Stop mode options

终止模式选项

ICE50 的外围输入输出设备能够被设置在中止模式下工作，在该模式下 ICE 停止运行并且不再仿真，能够被设置在中止模式下的外围设备有定时器，PWM 和通讯接口如 USART， SPI 和 TWI 。

设置“中止模式选项”在 ICE50 选项卡里面进行。如下图所示。

通讯模块

USART.

    • 一旦 USART 在中止模式当中使能，USART 将完成所有正在进行的传输尽管 ICE50 处于 中止状态。 USART 同样将接收所有的数据，并且将该数据保存在 UDDR 寄存器当中 。如果接收多个字的数据并且 USART 接收是 FIFO模式，先接收到的字符将丢失。

SPI.

    • 一旦 SPI 在中止模式当中使能，SPI将完成所有正在进行的传输尽管 ICE50 处于 中止状态。SPI同样将接受所有的数据，并且将该数据保存在数据寄存器当中。如果接收多个字的数据，先前接收到的字符将丢失。

TWI.

    • 一旦TWI在中止模式当中使能，TWI将完成所有正在进行的传输尽管 ICE50 处于 中止状态。TWI同样将接收所有的数据，并且将数据保存在数据寄存器当中。如果接收多个字的数据，先前接收到的字符将丢失。

定时器模块

大多数AVR器件拥有两种类型的定时器，一种是基于系统时钟的同步定时器，另一种是基于独立的谐振器或者外部时钟的异步定时器。异步定时器在大多数情况下都可以用作和 AVR 系统时钟同步的定时器。但是该定时器仍然被定义为异步时钟。

下列选项支持在 ICE 中止模式当中的 AVR 定时器。

  • 选择“中止模式下的异步时钟”，将所有的时钟设置为异步时钟。选择此项后同步时钟将不能运行。

  • 选择“中止模式下的同步时钟”，将所有的时钟设置为同步时钟。选择此项后异步时钟将不能运行。

  • 选择“中止模式下的异步/同步时钟”，将所有时钟设置为中止模式。

中止模式下的 PWM 输出

  • 为了使所有的 PWM 通道运行在中止模式下，PWM 的驱动时钟必须设置在中止模式。

  • 如果时钟运行在中止模式下，所有被使能并由该时钟驱动的 PWM 通道将自动工作在中止模式。

  • 每一个 PWM 通道有三种选项可以选择。

  • 普通： 单击普通单选按钮，PWM 将输出 ICE 在运行模式下的波形。

  • 强制为1：单击该单选按钮，不管在运行模式下 PWM 通道输出值为什么，皆强制输出高电平。如果连接到 PWM 通道上的外围器件不能承受 ICE 中止模式下的持续低电平 ，这个选项可以作为安全模式设置。

  • 强制为0： 单击该单选按钮，不管在运行模式下 PWM 通道输出值为什么，皆强制输出低电平。如果连接到 PWM 通道上的外围器件不能承受 ICE 中止模式下的持续高电平 ，这个选项可以作为安全模式设置。

中断禁止

检查“禁止中断”检验栏 ，将禁止设置任何时钟的中断标志。该设置的典型应用是单步执行或者再次仿真时，避免程序进入时钟中断程序。中断只在 ICE 中止模式下被禁止，ICE 运行过程中，中断正常。


Stack monitor

ICE50 堆栈监视器

什么是程序堆栈？

什么是数据堆栈？

ICE50 程序和数据堆栈监视器

建立程序和数据堆栈监视器

堆栈监视器选项

程序堆栈监视器工作情形

数据堆栈监视器工作情形

如何在汇编工程当中使用堆栈监视器

什么是程序堆栈?

程序堆栈或者程序调用堆栈是进行程序调用时，保存程序返回地址的存储器区域。所需堆栈空间的大小取决于用户的应用程序的大小并由用户自己建立。在 AVR 处理器里面，调用其他程序时程序地址保存在程序堆栈里面，并且程序指针自动减小。当执行返回指令时，堆栈指针加1并将返回地址从堆栈中弹出。

什么是数据堆栈?

数据堆栈是保存程序临时变量的区域。数据堆栈也可以用于在不同函数间传递变量值，所需堆栈空间的大小取决于用户的应用程序的大小并由用户自己建立。在 AVR 处理器中通过 PUSH/POP 指令对堆栈进行操作。大多数 AVR 的C编译器使用堆栈指针指向程序堆栈，使用 Y 寄存器指向独立的数据堆栈。

ICE50 程序和数据堆栈监视器

ICE50 拥有内置堆栈监视器，该监视器使用堆栈指针(SP)指向程序堆栈，使用 Y 寄存器指向数据堆栈。堆栈监视器的意义在于：首先，提示用户程序堆栈段或者数据堆栈段是否 向上溢出或者向下溢出，如果溢出将导致用户程序崩溃或者应用代码的误操作。其次，监视器可以告知用户程序和数据堆栈的最大需求量。这项功能使得用户能够建立适当容量的堆栈空间。

如下图所示，堆栈监视器在 AVR Studio 的输入输出可视工作区中可以视为单独的部分。

程序堆栈和数据堆栈都有一个分支。每个分支都给出了堆栈的起始地址(堆栈段栈顶)，终止地址(堆栈段栈底)，和各自堆栈段的大小。在两个分支的下面是一块独立的区域，该区域会将程序堆栈和数据堆栈需要使用的最大空间预留出来。此外，还给出了堆栈空间的最大使用百分比。

重要的注意事项：请注意：堆栈指针在初始化值指向栈顶(最高堆栈存储区地址)，之后随 着已用堆栈空间的增加，堆栈指针将不断减小。因此，栈底地址值(结束地址)总是小于栈顶地址值(开始地址)。

建立程序和数据监视器

堆栈监视器在 堆栈监视器 选项中建立。这些选项在调试菜单的 ICE50选项 部分。

所有的程序堆栈和数据堆栈监视器记录了实际应用中程序堆栈和数据堆栈的最大使用量。如果程序堆栈或者数据堆栈溢出或者向下溢出，仿真将被停止。并且在消息窗口当中将显示堆栈上溢或者 下溢的信息。

程序堆栈监视器的工作情形

程序堆栈监视器监视AVR 程序堆栈指针的值。每次使用CALL，RCALL，ICALL，PUSH 或POP，RET 或 RETI指令时，堆栈监视器检查堆栈是否处于溢出或者将要溢出的状态。如果堆栈的大小比当前值大，那么监视器将更新堆栈的大小。

数据堆栈监视器的工作情形

数据堆栈监视器监视AVR Y 寄存器的值。大多数支持 AVR 的C 编译器使用该寄存器访问数据堆栈。针对那些使用单字节数据堆栈指针的器件，AVR Studio 将自动设置 Y 寄存器的低字节作为数据堆栈指针。

如何在汇编工程中使用堆栈监视器

在汇编工程当中,使用程序堆栈监视器时没有什么需要特别说明的。数据堆栈监视器在写汇编工程时可以使用。在编写汇编代码时，必须遵守下列规则。

  • 在代码段的起始位置初始化程序堆栈段和数据堆栈指针。

  • 当向堆栈压入数据时，堆栈指针自动减小。

  • 当从堆栈中弹出数据时，堆栈指针自动增加。

  • 当数据堆栈指针为双字节时，如果执行了指令(MOV，ADD，LDI等)，Y 寄存器的值改变，并且先写Y寄存器的低字节。

  • 使用 Y 寄存器作为基堆栈指针。如果在某程序中，数据堆栈需要6字节大小的空间，那么在程序的起始位置 Y 指针值减6。然后您可以使用间接寻址指令(LD r16，y+q；ST y+q，r16；LD r16， Z； ST z， r16 当 Z = Y+q)访问堆栈中的变量。


Stack monitor options

堆栈监视器选项

堆栈监视器选项用作使能和建立 ICE50 程序和数据堆栈监视器。

对话框如下图所示：

检查"使能程序堆栈监视器"检验栏使能程序堆栈监视器，并且在堆栈上溢或下溢时中止程序堆栈。

检测"使能数据堆栈监视器"检验栏使能数据堆栈监视器，并且在数据堆栈上溢或下溢时中止数据堆栈。

在栈顶编辑栏当中，填写堆栈最高地址(栈顶)。在堆栈大小编辑栏中填写相关堆栈的大小。为了获取关于如何找到相关信息的描述请参照 该链接 中使用 IAR C语言编译器的示例。具体与您使用的C语言编译器种类有关。

重要注意事项：所有的编辑栏必须以16进制形式填写。

为IAR C-编译器建立堆栈监视器设置数据

程序堆栈段(IAR术语：RSTACK)的大小和数据堆栈(IAR术语：CSTACK)的大小在IAR 链接文件中设置。更多关于如何建立链接文件的说明请查阅www.iar.com。

为了查阅存储图，在IAR 编译器中使能"产生链接列表"和"产生段表"。下图给出了地址增加后所列出的段表。


Fuses

熔丝位和加密熔丝位

熔丝位和加密熔丝位能在 AVR Studio 里面进行查看和配置，熔丝位设置只能在“熔丝位和加密位”视图中查看，不能在其中编辑。熔丝位设置将在其它视图中进行。

在 AVR Studio 当中选择 Debug->ICE50 选项，熔丝位和加密位将呈高亮状态显示，提供4种设置模式，注意加标记“！”的熔丝位不要影响到仿真。

  1. 点击“扩展”熔丝位，从子目录菜单中查看该熔丝位的设置，“0”表示已设置，“1”表示未设置，熔丝位的设置不能在此处进行，被选部件支持扩展熔丝位，请在设置熔丝位的时候查阅相关的数据手册，在 ATmega128 情形下，扩展熔丝位支持一些特殊的性能，请看下图。

  2. 点击“低熔丝位”的子目录菜单查看该熔丝位的设置，“0”表示已设置，“1”表示未设置，熔丝位的设置不能在此处进行，请在设置熔丝位的时候查阅相关的数据手册，请看下图。

  3. 点击“高熔丝位”的子目录菜单查看该熔丝位的设置，“0”表示已设置，“1”表示未设置，熔丝位的设置不能在此处进行，请在设置该熔丝位的时候查阅相关的数据手册，注意加标记“！”的熔丝位不要影响到仿真，请看下图。

提示!

ICE50 并不支持对所有熔丝位的设置，不能设置下列熔丝位：

  • OCDEN。 ICE50 不支持片上调试。

  • SPIEN。 不支持串行编程方式。

  • EESAVE。 ICE50 不支持该熔丝位。

  • JTAGEN。 ICE50 不支持该熔丝位。

加密熔丝位

点击加密位子目录菜单查看加密位的设置，“0”表示已设置，“1”表示未设置，熔丝位的设置不能在此处进行，请在设置该熔丝位的时候查阅相关的数据手册，请看下图。

提示!
AVR Studio 将不断进行版本更新。请您到 www.atmel.com 查阅更新。


ICE Status

ICE 状态

在 AVR Studio 中选择 Debug->ICE50 选项，ICE 状态呈高亮显示，给出的报告描述了不同模块中相关软件和固件的版本，请看下图。另外在左下角有两个按键，一个是 ICE 复位键一个是默认值设置键，请看下图。ICE 复位键使仿真器热复位，并具有 ICE50 板后面的复位按键的作用，而默认值设置键将 ICE 设置为默认值。

不同的 FPGA 配置文件和PCB硬件版本将以报告的形式给出，请看下图。

提示!
AVR Studio 将不断进行版本更新。请您到 www.atmel.com 查阅更新。


Emulating with ICE50

使用 ICE50 仿真

这部分内容介绍了如何使用 ICE50 进行仿真以及 ICE50 一些特殊的调试特性。

  • 使用 AVR Studio 仿真

  • 脱离 POD 仿真

  • 脱离目标电源仿真

  • 带目标电源仿真

  • 仿真上电复位，外部复位和掉电检测复位过程

  • 使用 ICE50 上面的 Atmega169 仿真LCD

  • 存储器非法访问检测

提示！
AVR Studio 将不断进行版本更新。请您到 www.atmel.com 查阅更新。


Emulation with or without POD and target power

插入或脱离 POD 和目标电源仿真

脱离POD仿真

-即使不插入 POD，ICE50 也完全能够顺利运行。可以仿真所有的数字和模拟模块，当然是此时不会有外部中断产生，也不能进行模拟测量。

连接 ICE50 POD ，目标板电源没接通时进行仿真

-可以对 AVR 器件的上电时序进行仿真。如果 ICE50 POD 已经连接到目标板但目标电源未连接，POR 将会复位 ICE50。默认状态下，ICE50 的选项卡中的 POR 复位功能是被屏蔽的，这样能够在脱离目标电源的条件下进行调试。如果您想仿真上电复位功能，请在 ICE40 选项卡中开启该中断。 (操作说明请见 其他选项 )。请查阅更多有关仿真上电复位功能的说明。

-如果您要在不破坏主向量或复位向量的条件下使 ICE50 开始运行，首先请在目标代码载入后停止仿真器。接下去请按下 AVR Studio 中的运行按钮使仿真器运行 。现在您可以连接目标电源并运行仿真器了。

连接 ICE50 POD，目标板电源接通时进行仿真

-当目标板电源连接到 ICE50 后，仿真器就可以运行了。可以在ICE50选项卡中屏蔽所有外部复位源。请注意，在缺省下首次启动一个工程文件时，POR 与 BOD 复位源是被屏蔽的。工程文件会对复位屏蔽的设置加以记忆和保存，此后当再次打开该工程文件，上次所设置的复位屏蔽情况将随之载入。

仿真上电复位，外部复位或者掉电检测（BOD）复位

在 ICE50 上您可以仿真所有外部的复位源。请不要忘记在 ICE50 选项对话框 其他选项 中清除特殊复位选项的屏蔽寄存器。缺省情况下，启动一个新的工程时 POR 与 BOD 复位功能是被禁止的。

当进入调试模式时，ICE50 将自动检测使器件进入复位状态的条件。如下图所示：系统将弹出一个对话框询问用户是否要屏蔽这个外部复位标志。

如果您要仿真 POR 复位，BOD 复位或外部复位功能，请单击按钮“NO”。然后 AVR Studio 将使用一个黄色箭头指示在复位向量中下一步要执行的语句。现在，用户可以进行单步调试或者将ICE50 设置为全速执行模式。此时当电源连接到目标板上或外部复位源移除时，芯片将在复位之后等待一段时间（start_up period）后开始行代码。

如果您在弹出信息中单击按钮“YES”，该复位源就被屏蔽掉，此时 ICE 的仿真运行就不会受到该复位源的影响了。请注意如果您的电源未连接，所有IO将不能工作。

在 ICE50 上使用 Atmega169 仿真 LCD

-ICE50 可以仿真 LCD 接口的所有内部操作，但是当前的 ICE50 POD 不支持 LCD 接口A和B的波形输出。如果 AVR Studio LCD 插入模块已经安装好，根据选定频率，AVR Studio 4 能够按用户选定的频率间隔读取 Atmega169 LCD 数据寄存器，因此可以通过 AVR Studio 查看 LCD 的显示。请查看 AVR Studio LCD 插入模块获取相关的在线帮助。

-所有其他数字和模拟输入输出模块可以在 ICE50 上面得到完全的仿真。

请查阅

  • ICE50 仿真器使用说明

提示！
AVR Studio 将不断更新版本。请您到 www.atmel.com 查阅更新。


Detection of illegal memory access

存储器非法访问检测

ICE50 能够检测到程序对存储器的越界访问。 如果不设置这项功能，越界访问是如何处理的呢？AVR 器件可以访问 SRAM 和 EEPROM。 SRAM能够通过 X，Y，Z 寄存器来寻址。如果Z指针的值超过 SRAM 的最大地址范围，将绕回去访问位于最高地址与最低地址之间的一个 SRAM 空间。 这将使程序运行错误。对 EEPROM 的访问同样如此。EEPROM 寄存器中可以写入最高地址值，然而实际上将绕回去访问低地址空间。

如果在 ICE50 选项 当中该功能使能，所有器件的 EEPROM 和 SRAM 的地址线将为十六位。因此 ICE50 将不会完全按照 AVR 芯片那样对 SRAM 和 EEPROM 进行访问。AVR 芯片中访问 SRAM 和 EEPROM 时，如果指针地址大于 EEPROM /SRAM的最大地址，将绕回去访问低地址空间。当然最好不要使用这种功能。如果地址未越界，对 SRAM 和 EEPROM 进行访问时，ICE50 和 AVR 单片机之间不会有任何区别。

默认情况下如果出现非法访问，ICE50 将产生一次中断。您可以在 ICE50 选项->其他选项 中禁止这项功能。如果这项功能被禁止，ICE50 对越界访问的处理将与 AVR 芯片的处理方式一致。

重要说明：某些诸如 ATtiny26 和 ATtiny13 之类的 ATtiny 器件的 SRAM 和 EEPROM 少于256字节。C编译器只需要使用X，Y或者Z寄存器的低字节来间接寻址这些存储器。确保C编译器如下安装：当发现非法访问时，X，Y或者Z寄存器的高低字节皆可使用。在 IAR A90 或者 EWAVR 编译器中，选择V1版本的 AVR 内核实现该功能。V0版本的 AVR 内核将仅仅使用8位的间接寻址，并且可能导致错误的非法访问检测。对于其C他编译器，请和您的提供者联系获取如何正确使用的信息。

非法SRAM地址的定义。

对没有 XRAM 的器件，SRAM 空间后面的地址被定义为非法地址。对于有 XRAM 的器件，取决于在ICE50选项->其他选项中的设置。如果你选择不仿真 XRAM，所有的内部SRAM空间后面的地址被定义为非法地址。如果选择在ICE50内部或者目标板上仿真 XRAM，整个 SRAM 和 XRAM 空间将被视为合法地址。

非法 EEPROM 地址的定义。

EEPROM 后面的空间被视为非法地址。注意在 AVR Studio输入输出可视区中读 EEPROM 时其地址为16位，但是只有相关的数位可以从 AVR Stuido 里面写入。

请查阅

  • ICE50 选项->其他选项
  • ICE50 仿真器使用说明

提示！
AVR Studio 将不断更新版本。请您到 www.atmel.com 查阅更新。


ICE50 Upgrade and Selftest

ICE50 升级与自测

这部分内容将向您介绍如何维护和升级 ICE50。同时将向您介绍如何使用 AVR Studio 提供的 ICE50 自我检测功能。

  • ICE50 升级

  • 为 ICE50 加载新器件

  • ICE50 自我检测

  • ICE50 测试适配器

  • 降级 ICE 固件

提示!
AVR Studio 将不断进行版本更新。更多信息请查阅www.atmel.com。


ICE50 selftest

ICE50自测功能

AVR Studio 为用户提供了一个程序，它将帮助您实现 ICE50 的自我检测。该自检过程涵盖了 ICE50 中的所有基本模块和功能。有一些测试过程需要您安装一个与您的 ICE50 配套的专门测试适配器到 Probe上。更多关于安装和使用测试适配器的信息请查阅 ICE50 测试适配器。

自测

如果您要执行测试过程，请将 probe 连接到测试适配器并启动 ICE50 测试程序。请注意，在当前版本的自检软件中不使用 XTAL1 引脚。

如果您要启动该程序，请打开 AVR Studio 选择菜单 Tools->ICE Selftest 。系统将弹出下图所示窗口：

上面的清单中标出了那些需要连接测试适配器到Probe的测试过程。选择您要运行的测试程序，单击对话窗口中的“运行”按钮运行程序。最后，将显示被测程序的测试状态。

重要注意事项：请注意，要实现自测功能，测试程序需要 Aemega128 器件文件的支持。如果 AVR flash 文件系统中不包含 Atmega128 的器件文件，系统将要求您载入该文件。如果文件系统中装满了其他器件的器件文件（flash文件系统最多可容纳4个器件文件），系统将要求您删除其中一个器件文件并载入 Atmega128 的器件文件。

重要注意事项: 某些测试过程可能失败并给出下列出错信息： "Method '~' of object '~' failed"。如果发生了这种错误，请重新选择该测试过程并单独运行该测试程序。如果现在测试过程正确说明 ICE 正常工作。该错误信息是由内部软件错误引起的。这一点我们将在以后版本的 AVR Studio 中予以改进。

提示！
AVR Studio 将不断进行版本更新。请您到 www.atmel.com查阅更新。


Downgrading the ICE50 Firmware

降级 ICE50 固件

如果因为某些原因您需要降级您的 ICE 固件以获得较早期的发布内容，您需要按照下列步骤执行：

  1. 为了降级您的 ICE50 以获得一个较低的版本，您需要 ICE50.dat 文件及其支持版本的 AVR Studio。无论是降级还是升级过程，您都需要最新的升级程序。如果您拥有版本的 AVR Studio中不包含 ICE50.dat 文件，请卸载您现在使用的 AVR Studio 并安装新的版本。

  2. 备份 ICE50.dat 数据文件并命名为<AVR Studio version>.dat，它将保存在 <your program files folder>\Atmel\AVR Tools\ICE50 文件夹中。

  3. 安装最新版本的 AVR Studio 。

  4. 启动 ICE 更新程序。

  5. 使用 CTRL-O 选择您需要的 ICE50.dat文件。选择第二步中备份的文件。

  6. 在更新程序主窗口中，选择“允许降级”或者“强制升级”。

  7. 单击“开始更新”。

  8. 完成上述步骤后，卸载新版本的 AVR Studio 并安装原来版本。

  9. 您的降级过程现在完成了。


ICE50 User's Guide: Trace Buffer

ICE50 跟踪特性

ICE50 具有以下追踪特性：

  • 存储132072(128K)程序执行周期。

  • 时间戳生成器能为工作在16MHz时钟频率下长达38小时的连续程序执行生成一个独有的时间戳。

  • 预先和滞后追踪能力使跟踪进入和离开中断程序/函数更加简单方便。

  • 每一个跟踪点能被赋予63个不同 ID 值中的一个，使数据跟踪更容易筛选/分类和仿真。另外，在跟踪视图中每个ID都有自己的颜色。

  • 资源可配置和数据追踪窗口中的初级监视。

  • 可配置的选择性数据追踪。

下面给出了建立和使用 ICE50 追踪特性的简单介绍，以及有关如何在跟踪视图中使用和中断数据显示的说明。

帮助主题：

  • 追踪指南
  • 追踪窗口
  • AVR Studio 使用说明


Trace_tutorial_start

下一个链接： 建立追踪>>

追踪指南

本指南将指导您使用 AVR Studio 和 ICE40 或者 ICE50 的基本方法。

什么是追踪？

追踪是这样一种功能，该功能使用户捕捉到在设置的开始和结束断点之间所有程序运行的情况。当追踪开始后所有的程序代码和程序执行的流程将被保存在追踪缓冲区当中。当程序运行到追踪结束标识(和追踪ID相同)处追踪将结束。

为什么使用追踪？

什么时候使用追踪并且使用追踪干什么用？假如您在不太确定的事件当中有一些错误代码。追踪将很方便显示程序流程运行到什么错误地方。在某些情况下您同样必须记录您的程序运行情况。在这两种情形下追踪将给你提供很有价值的帮助。

追踪指南程序代码

在本指南当中我们将通过 STK500 和 Atmega162 实现一个小的游戏应用，代码将在下面给出。所有需要您做的仅仅是复制本代码和创建您自己的追踪工程。如果您需要帮助建立一个新的汇编工程请复习 快速启动指导 。指南的建立同样在下面显示。

;************************************************************************************

;* File: Trace_game.asm

;* A small game used in the ICE40/50 trace tutorial.

;*

;* Connect your ICE40 or ICE50 to an STK500 using the Atmega162 personality adapter.

;* Connect the LED pins on STK500 to the PORTB output pins.

;* Connect the SWITCH pins on STK500 to the PORTA output pins.

;* Led output 0 to 4 will be lit in a random sequence one LED at a time.

;* Use the corresponding SWITCH button 0 to 4 to turn the LED off.

;* Your score will be displayed on LED 5 to 7.

;* The score is displayed as follows:

;* Led7, Led6, Led5 = Off, Off, On -> 500 ms < Reaction time < indefinite -> Bad

;* Led7, Led6, Led5 = Off, On, On -> 250 ms < Reaction time < 500 ms. -> Good

;* Led7, Led6, Led5 = On, On, On -> 0 ms < Reaction time < 250 ms. -> Super

;*

;************************************************************************************

.include "m162def.inc"

.equ LED_PORT = PORTB

.equ LED_DIR = DDRB

.def LedOutput = r20

.def LedMask = r21

.def Button = r22

.def ScoreTime = r23

.def Score = r24

.equ Zero = 1

rjmp setup_stack

.org PCINT0addr

rjmp pin_change_int ;Pin change interrupt 0

.org 0x40

setup_stack:

ldi r16, LOW(RAMEND) ;Setup of stack pointer

ldi r17, HIGH(RAMEND)

out SPL, r16

out SPH, r17

call setup

MainLoop1:

call new_led_output

MainLoop2:

mov r16, LedOutput

andi r16, 0x1F

cpi r16, 0x00

breq Mainloop1

cpi Button, 0x00

breq MainLoop2End

call button_pressed

MainLoop2End:

rjmp MainLoop2

pin_change_int: ;Pin Change interrupt function

in r6, SREG

ser r18

in Button, PINA

eor Button, r18

andi Button, 0x1F

out SREG, r6

reti

Button_pressed: ;Function for checking if correct button has been pressed

cli

mov r16, Button

or r16, Score

cp LedOutput, r16 ;Compare button pressed to Led output

brne finished_button_pressed

call CalcScore ;Calculate new score

call Output ;Update output

finished_button_pressed:

sei

ret

Output:

clr LedOutput ;Generate Led output

or LedOutput, Score

ser r16

eor r16, LedOutput ;Generate correct output on STK500

out LED_PORT, r16

clr Button

ret

CalcScore:

in r16, TIFR

sbrc r16, 2

rjmp calc_max ;If timer overflow use maximum value

rjmp calc_norm

calc_max:

ldi r16, 0xff

in r17, TIFR

andi r17, (1 << TOV2)

out TIFR,r17

rjmp calc_start

calc_norm:

in r16, TCNT2 ;Load timer value

calc_start:

mov r17, ScoreTime ;Algorithm for calculating new score

lsr ScoreTime ; new score = 3/4*old_score + 1/4 new timer value

lsr r17

lsr r16

add r16, r17

lsr r16

add ScoreTime, r16

cpi ScoreTime, 64 ;Generate Score Output

brlo score_max

cpi ScoreTime, 128

brlo score_medium

ldi Score, 0x20

rjmp score_end

score_medium:

ldi Score, 0x60

rjmp score_end

score_max:

ldi Score, 0xE0

score_end:

ret

new_led_output:

cli ;Disable interrupts while generating new random Led value

clr Button

new_round:

cpi LedMask, 0x00

brne mask_inc

ldi LedMask, 0x20

mask_inc:

lsr LedMask

in r16, TCNT0 ;Generate "random" LED output

and r16, LedMask

breq new_round

mov LedOutput, r16

or LedOutput, Score

ser r16

eor r16, LedOutput

out LED_PORT, r16 ;output Ledvalue

clr r16

out TCNT2, r16

in r16, TIFR

andi r16, (1 << TOV2)

out TIFR,r16

sei

ret

setup:

clr LedOutput ;Clear game output variable

ldi LedMask, 0x20 ;Seup LED output mask

ldi ScoreTime, 0xff ;Setup score time to max

ldi Score, 0x20 ;Setup score to minimum

ldi r16, 0xFF

ldi R17, 0x00

out LED_PORT, r17

out LED_DIR, r16 ;Setup PortB as output and connect to LEDS

ldi r16, 0x1F

sts PCMSK0, r16 ;Enable pin change interrupt on lowest 5 bits of PortA

ldi r16, 0x08

ldi r17, 0x00

out GIFR, r17 ;Clear interrupt flag register

out GICR, r16 ;Enable pin change interrupt 0

call setup_timer0

call setup_async_timer2

ret

setup_timer0: ;Setup of syncronous timer 0

ldi r16, 0x01

out TCCR0, r16

ret

Setup_async_timer2: ;Setup of asynchronous timer 2

ldi r16, 0x06 ;Remember to setup internal timer oscillator in ICE50 options

ldi r17, 0x08

out ASSR, r17

out TCCR2, r16

ret

下一个链接： 建立追踪>>


Trace window

跟踪窗口

追踪功能只存在于所选的操作平台上面。在调试状态下追踪命令有自己的工具栏和菜单。

通过选择追踪形式使能追踪特性并在源代码里设置追踪断点，请参考各平台追踪类型的相关技术文档。目前只有 ICE40 和 ICE50 有跟踪功能。
功能 | 工具栏 | 菜单 | 快捷键
锁定追踪窗口 |  | 调试->追踪->追踪可视 |
选择追踪形式 |  | 调试->追踪->形式 |
锁定程序追踪断点 |  | 调试->追踪->锁定追踪断点 | F8
清除所有追踪断点 |  | 调试->追踪->清除所有追踪断点 |
复位追踪缓冲区 |  | 调试->追踪->复位追踪缓冲区 |
追踪选项 |  | 调试->追踪->选项 |
显示下一步状态 |  | 在追踪可视点击右键->下一步状态 | Alt+F12 （查阅注意事项 ）
显示之前状态 |  | 在追踪可视点击右键->之前状态 | Ctrl+F12 （查阅注意事项 ）
将追踪缓冲区的内容以文本文件形式保存 |  | 在追踪可视点击右键->保存到文本文件 |
显示源代码 |  | 在追踪可视点击右键->显示源代码 |
只显示高层代码 |  | 在追踪可视点击右键->只有高层代码 |
锁定色码 |  | 在追踪可视点击右键->作色代码编写 |
锁定工具提示 |  | 在追踪可视点击右键->显示工具提示 |
设定追踪ID |  | 调试->追踪->设置当前ID |
增加追踪ID |  | 在编辑器点击右键->增加追踪ID | Alt+F8
减少追踪ID |  | 在编辑器点击右键->减少追踪ID | Ctrl+F8

注意：
如果键分配不能正常工作，请按照工具->用户定义，键盘标签，所有重置项过程，重置键值定义。

操作
追踪缓冲区里有向上和向下箭头，滚动条或上一页/下一页，起始位置/结束位置按钮。
拖动滚动条直到松开鼠标，追踪显示刷新。
追踪缓冲区的大小和当前位置在屏幕底部的信息栏里面显示。

入栈

可以在右边菜单对入栈行为加以操作，通过开/关命令可以实现对入栈行为的锁定。

鼠标右键菜单

菜单项目 | 作用
显示源代码 | 锁定源代码开/关
变色编写代码 | 锁定追踪标示部分的变色编程
高层 | 只显示声明当中的高层部分
链接源代码 | 锁定绿色光标标记开/关
跳转到源代码 | 显示源代码当中当前追踪声明。(当前声明：点击鼠标右键的位置)
下一个声明 | 显示在源代码当中的下一个追踪记录
先前声明 | 显示源代码当中的先前追踪记录
复位追踪 | 清空追踪缓冲区并且复位追踪窗口
以文本形式保存 | 将追踪缓冲区的内容保存到文本文件
以二进制文件形式保存 | 将缓冲区的内容以二进制形式保存
显示工具提示 | 锁定工具提示开/关
入栈显示 | 锁定入栈状态窗口.该窗口必须手动移动

标题
拖动分离线改变列的宽度。双击分离线自动调整宽度。
拖动 左/右 标签改变列命令。
鼠标右键点击标题锁定列 开/关 选择显示列。

追踪选项

追踪选项菜单能在调试菜单里面找到：调试->追踪->选项。

标识符作色：

追踪显示区可以为每一个追踪标识符设置颜色。前十个标识符的颜色已经预先设定。如果要改变标志符的颜色，点击标识符，在颜色编辑栏里选择新的颜色就可以了。按下默认值按钮设置为默认颜色。

通过检查“使用作色编写代码”检验栏，作色编写代码将被使能/禁止。

中断作色：

如果您要设定追踪中断码的背景颜色，点击颜色区，并从颜色编辑栏里面选择一种新的颜色就可以了。中断作色可以通过检查“使用中断作色”检验栏使能/禁止。

追踪缓冲区满暂停:

追踪缓冲区满暂停可以通过“追踪缓冲区满暂停”选项使能或禁止。

注意事项:
如果颜色的红，绿，蓝三色的值都小于130(三元色值)，文字将设定为白色以便更好的显示。


Special Considerations

特殊注意事项

ICE50 能够准确地仿真大多数 AVR 功能。但是，存在一些细微的差别。

  • 时钟选项
  • A/D 转换精度
  • 和实际器件的区别

  • 电气兼容性

  • 休眠模式

  • 目标板硬件要求

如果你遇到的问题在本部分里面没有涉及到，请查阅 故障排除 部分获取更多的信息。

提示!
AVR Studio 将不断进行版本更新。请您到 www.atmel.com 查阅更新。


Clock Options

时钟选项

当前版本的 ICE50 Probe 在支持时钟选项方面存在一些限制。请查阅 可用时钟选项 部分了解所支持模式的概况。

其他模式在上面的模式当中可以轻易地被仿真。

提示!
AVR Studio 将不断更新版本。请您到 www.atmel.com 查阅更新。


Differences Between Emulator and Part

仿真器与实际器件的区别

概述：

  • ADC 内部参考电压是2.5伏而不是在实际器件当中的2.56伏。
  • SRAM 和 EEPROM 的地址总线是16位的以便所有的器件方便地实现 非法访问存储器中断。ATtiny13，ATtiny2313，ATtiny26 是例外，它们的 SRAM 和 EEPROM 的地址总线是8位的。
  • 实际器件和 ICE50 的复位输入有所区别。具体请查阅 复位输入。

带复位禁用熔丝位器件：

    • ICE50 POD 的复位引脚上面连接有一个上拉电阻。如果复位禁止熔丝位被编程，该复位引脚作为通用的输入输出引脚，然而上拉电阻仍然有效。

Atmega8

  • Mega8 个性化适配器 (SNR: A9902.3.1390.A) 不支持外部时钟谐振器。这一点在个性化适配器最新版本(SNR: A9902.3.1390.B)中作了修订。请注意该适配器需要新版 probe 适配器的支持。请查阅 probe 和 个性化适配器 部分以获得更多信息。

ATtiny26:

  • ATtiny26 中 PLL 时钟频率约为64MHz，在 ICE50 里面是66MHz。设置 OSCAL 寄存器对 ICE50 的 PLL 时钟没有影响。

Atmega169

  • 在 ICE50 上面不支持引脚 PG5，该引脚只能作为复位引脚使用。
  • 使用 ADC 时，选择1.23伏作为内部参考电压同时在AREF引脚上接外部电容。但是 ICE50 的内部参考电压是2.5伏而不是1.23伏。为了保证结果正确，用户必须将 ADC 所得到的结果乘以2。
  • 当前版本的 ICE50 POD 不支持 LCD 模拟波形仿真。如果 Atmega169 的 LCD 模块被使能 ，被使能的部分和一些通用引脚将输出“空白”波形，从本质上来讲，引脚输出为“0”(低电平)。

提示!
AVR Studio 将不断进行版本更新。请您到 www.atmel.com 查阅更新。


Electrical Compatibility

电气兼容性
电源

POD 拥有电源极性保护性能。另外，ICE50 电源掉电的同时 POD 电源关闭。请看下图。

输入输出线路

输入输出线路使用限流器限流，使用肖恩特基二极管限压。电路如下图所示。

提示!
AVR Studio 将不断进行版本更新。请您到 www.atmel.com 查阅更新。


Sleep Mode

休眠模式

在处于休眠模式时，和实际器件当中看到的情形一样将没有电源消耗。

提示!
AVR Studio 将不断更新版本。请您到 www.atmel.com 查阅更新。


Target Hardware Requirements

目标板硬件要求

目标板必须能够提供下表列出的电源：

目标电源 | ICE50(POD/Probe)吸电流
 | 正常情形,最差情形
2.2伏 | 5 毫安，7 毫安
2.5伏 | 5 毫安，7 毫安
3.3伏 | 20 毫安，30 毫安
5.0伏 | 85 毫安，125 毫安
5.5伏 | 110 毫安，165 毫安

提示!
AVR Studio 将不断进行版本更新。请您到 www.atmel.com 查阅更新。


Trouble Shooting

故障排除向导

升级 ICE50

  • 如果升级 ICE50 失败，重新运行升级程序确定是否总是失败。

  • 如果升级 COM MCU 的过程中升级失败，请查阅“复位引导加载”获取更多关于连接 ICE 的信息。

I CE50 测试程序：

  • 测试过程可能失败，并会弹出下列信息： "Method '~' of object '~' failed"。 如果发生此种错误，请选定发生错误的测试程序，并单独运行该测试程序。在 AVR Studio 稍后的版本中将添加这项功能。

AVR Studio 错误报告“AVR FPGA编程错误”

  • 如果 AVR Studio 给出错误报告“AVR FPGA编程错误”，并且对 FPGA 的编程总是出错，请按照下列步骤操作。

    • 在 ICE50 选项中浏览器件选择项取消对器件的选择。

    • 选择其它器件并单击OK按钮，将该器件装入 ICE 中。

    • 系统将询问您是否确定要删除编程失败的器件，回答Yes。

    • 如果系统询问是否将您所选择的器件写入 ICE50 数据 flash 中，回答No。（只有在您所选择的器件未曾存在于 ICE50 数据 flash 中时，才会出现该问题。）

    • 再次打开 ICE50 选项卡，选定编程失败的器件，单击OK。

    • 如果系统询问是否将您所选择的器件写入 ICE50 数据 flash 中，回答Yes。

  • 您也可以使用 ICE50 升级程序，并选定“强制更新” 校验栏。

LEDS

  • 红色电源指示灯未点亮。请查看 查看电源故障。
  • 多色 LED 变成红色（LED错误点亮）。请查阅 配置错误。
  • 绿色 LED 未点亮。请重新 AVR Studio 并修改器件。

电源问题

  • 请确定电源连接良好。
  • 请确定电源极性未反接。
  • 请确定电源功率满足要求。
  • 请确定电源开关能正常工作。

配置错误

  • 未选定所有模块。请查看 ICE 状态 确定是否有模块漏选。未选定的模块将向版本区返回一个零值。

通讯错误

  • 请确定串口线已连接好。
  • 请确定POD已正确连接。请查看 将POD插入POD接口。
  • 不能建立通信。请确定是否有其它设备在使用 COM 口，IrDA 等。 如果已经使用了 USB 连接，请在使用串口前复位ICE。
  • 关闭再打开电源，重新启动 AVR Studio 。
  • 请勿使用串行I/O卡或连接有串行适配器的 USB。
  • 使用USB连接，请确定 USB 驱动已正确安装 安装。


Spareparts

器件替换

在实验室中，在线仿真器工作环境比较复杂，个性化适配器可能多次插入和拔出，产生的磨损可能导致器件的移位。本页列出了 ICE50 可用的单独部分。

正如在 Probe 和个性化适配器部分描述的的那样：有2种不同版本的 Probe 可用，同样也有两种不同系列的个性化适配器可用。老版本的 Probe 和个性化适配器已经不再生产了，因此 Probe 和个性化适配器必须成对替换。下列表格说明了不同的情况下需要做的工作。

情况1：ICE50需要装备Probe 9902.3.1200.C（请看图片）

如果 Probe 或者某个个性化适配器出现错误，同时将 Probe 和个性化适配器用最新的版本代替。（请看下一部分）

情况2：ICE50需要装备Probe 9902.3.1200.D（请看图片）

库存：

ICE50 probe 9902.3.1200.D， 包括电缆线。

Winslow W106355SDF ATmega128个性化适配器

ATmega162 个性化适配器版本： A9902.3.1300.C

ATmega32 and ATmega16 个性化适配器版本： A9902.3.1310.B。

Winslow W10634SDFATmega169个性化适配器

ATmega8 个性化适配器版本 A9902.3.1390.B。

ATtiny26 个性化适配器版本 A9902.3.1370.B。


Upgrading the USB driver

升级USB驱动

AVR Studio 4.10 提供新的安装程序安装AVR Studio。在新的安装程序中，ICE50的USB 驱动程序的安装同样有所改变。AVR Studio 4.10之前版本的安装和USB驱动的升级与此有所不同（请查看旧版本AVR Studio中USB的安装资料）。

安装AVR Studio 4.10 版时，将弹出下图所示窗口。

打勾选择 USB驱动安装/升级 选择栏，USB驱动将自动安装。现在您不需要进行老版本AVR Studio中那些繁琐的安装步骤了。

注意：
ICE40 和ICE50 在器件管理器中的显示完全一样。下一章也适用于ICE40 和ICE50。

安装/升级AVR Studio 4.10之前版本的USB驱动

USB驱动安装通过一个独立的安装文件进行。AVR Studio将给出下列安装提示信息。如果不使用ICE40或者ICE50，您不必安装USB驱动。

USB 安装程序可以在下列两个路径当中找到：

开始菜单 ->程序->Atmel AVR Tools ->USB 安装

或者..\Atmel\AVR Tools\ICE50\USB\USBSetup.msi

请在将PC主机和ICE40/ICE50通过USB电缆线连接前运行该安装程序。

重要说明： 注意ICE40 和ICE50 不能通过USB升级，升级必须通过串口进行。 请查阅升级ICE50 获取更多信息。

确定安装旧版USB驱动与否。

AVR Studio 4.07 和AVR Studio 4.08的供应商不同。为了使用ICE50，旧版USB驱动程序必须被删除。请按照下列步骤执行检查您是否安装了旧版本的USB驱动。注意：必须安装AVR Studio 4.08或更高版本。

  • 将ICE电源断掉，并将ICE和PC机通过USB电缆线连接
  • 为 ICE 上电
  • 打开器件管理器：
    • Win98: 开始菜单=>控制面板=>系统=>器件管理器
    • WinME: 开始菜单=>设置=>控制面板=>系统=>器件管理器
    • Win2000: 开始菜单=>设置=>控制面板=>硬件=>器件管理器
    • WinXP:开始菜单=>控制面板=>打印机和其他硬件=>系统=>硬件=>器件管理器

如果您看到信息“AVR ICE50 仿真器”定位于“WINRT FOR USB”下面，则安装了旧版本的驱动。

如果您看到信息“AVR ICE50 仿真器”定位于“Jungo”下面，则安装了新版本的驱动。

删掉旧版驱动。

注意：您可以选择是否进行下列步骤：

  1. 通过USB电缆线将ICE40/ICE50连接到PC主机。
  2. 在AVR Studio 4.07或更早版本中通过USB连接了ICE40/ICE50。
删除 Windows 98SE 中的旧版驱动
  • 通过USB电缆线将ICE40/ICE50连接到PC主机上，并且打开ICE的电源。
  • 打开器件管理器：开始菜单＝>控制面板＝>系统＝>器件管理器
  • ICE50 出现在“WinRT for USB”节点下面（请看下图）。选择ICE50并单击“Remove”按钮。

  • 复位ICE50 － 安装新驱动。
  • 检查新的驱动是否已经正确安装。在器件管理器中，ICE50应该出现在“Jungo”节点下面（请看下图）。

删除Windows ME 中的旧版驱动
  • 通过USB电缆线将ICE40/ICE50连接到PC主机上，并打开ICE电源。
  • 打开器件管理器：开始菜单＝>设置＝>控制面板＝>系统＝>器件管理器
  • ICE50 应该出现在“WinRT for USB”节点下面（请看下图）。选择ICE50并且单击“Remove”按钮。

  • 复位ICE50 － 安装新驱动。
  • 检查新驱动是否已经正确安装。在器件管理器中，ICE50应该出现在“Jungo”节点下面（请看下图）。

删除Windows 2000 中的旧版驱动
  • 通过USB电缆线将ICE40/ICE50连接到PC主机上，并且打开ICE的电源。
  • 打开器件管理器：开始菜单＝〉设置＝〉控制面板＝〉系统＝〉硬件＝〉器件管理器
  • ICE50 应该出现在“WinRT for USB”节点下面（请看下图）。选择ICE50并且按下键盘上的Delete键。

  • 复位ICE － 安装新驱动。
  • 检查新的驱动是否已经正确安装。在器件管理器中，ICE50应该出现在“Jungo”节点下面（请看下图）。

删除Windows XP中的旧版驱动
  • 通过USB电缆线将ICE40/ICE50连接到PC主机上，并且打开ICE的电源。
  • 打开器件管理器：开始菜单＝〉设置＝〉控制面板＝〉系统＝〉硬件＝〉器件管理器
  • ICE50 应该出现在“WinRT for USB”节点下面（请看下图）。选择ICE50并且按下键盘上的Delete键。

  • 复位ICE － “发现新硬件”向导窗口将开。

  • 选择“自动安装软件（推荐）”并单击下一步按钮。驱动将被安装。
  • 检查新的驱动是否已经正确安装。在器件管理器中，ICE50应该出现在“Jungo”节点下面（请看下图）。


Simulating LCD output with ICE50

使用 ICE50 仿真 LCD 输出

ICE50 POD 不能仿真 Atmega169 和 Atmega329 的 LCD 模拟输出波形。通过安装 AVR LCD观测仪 插入模块，AVR Studio 可以对它进行仿真。ICE50 将按照用户设定的频率全速读取 LCD输入输出寄存器。AVR Studio 中有一个独立的窗口对 AVR LCD 观测器给出的 LCD 输出波形加以显示。请从 www.atmel.com 了解更多下载和安装该模块的信息。

提示！
AVR Studio 将不断进行版本更新。请您到 www.atmel.com 查阅更新。


Old personality adapters

旧版个性化适配器。

因为连接器当中存在一些缺陷，并且这些缺陷有可能导致适配器损坏，因此，这些个性化适配器将不再生产。Atmel 建议您升级您的 Probe 和个性化适配器。请查阅 个性化适配器获取 当前版本适配器的详细信息。

ICE50 开发包包括下列适配器：

t26 个性化适配器

版本号： A9902.3.1370.A, .C revision of Probe

m8 个性化适配器

版本号：A9902.3.1390.A, .C revision of Probe

m128 个性化适配器

版本号： W9646SOF I3, .C revision of Probe.

支持芯片：

  • ATtiny26

支持芯片：

  • Atmega8

支持芯片：

  • Atmega128
  • Atmega64

t28 个性化适配器

版本号： A9902.3.1350.B, .C revision of Probe

m32 个性化适配器

版本号： A9902.3.1310.A, .C revision of Probe

m162 个性化适配器

版本号： A9902.3.1300.B, .C revision of Probe

支持芯片：

  • ATtiny28

支持芯片：

  • Atmega32
  • Atmega16
  • Atmega8535

支持芯片：

  • Atmega162
  • Atmega8515

正如图片当中看到的，存在两种版本的适配器。区别是连接器的设置不同。

每种适配器对应一种引脚输出形式并且支持一种或多种 AVR 单片机。下表给出了各种个性化适配器所支持的芯片类型。

器件 | 所个性化适配器名称：
ATmega16 | m32
ATmega128 | m128
ATmega32 | m32
ATtiny28 | t28
ATtiny26 | t26
ATmega162 | m162
ATmega8 | m8
将个性化适配器连接到 Probe

连接个性化适配器和 Probe 时，请保证连接方位正确。只有从给定方位才能实现正确连接。在个性化适配器上有一个圆圈指示1号引脚。请确保 Probe 上的圆圈和个性化适配器上的圆圈相互对应。下面的图片显示了两种版本的 Probe。

A9902.3.1200.C

t26 个性化适配器

t26 个性化适配器支持器件 t26。标准的20脚0.300"宽，PDIP 封装。如果目标板是其它的封装形式，必须从第三方购买其他适配器。连接个性化适配器和 Probe 时，请确定 Probe 和个性化适配器上的圆圈相互对应，如 上图 所示。

t28 个性化适配器

t28 个性化适配器器件支持 t28。标准的28脚0.300"宽，PDIP 封装。如果板使用的是其它的封装形式，必须从第三方购买其他适配器。连接个性化适配器和Probe时，请确定 Probe 和个性化适配器上面的圆圈相互对应，如 上图 所示。

m8 个性化适配器

m8 个性化适配器支持器件 m8。标准的28脚0.300"宽，PDIP封装。如果目标板使用的是其它的封装形式，必须从第三方购买其他适配器。连接个性化适配器和 Probe 时，请确定 Probe 和个性化适配器上面的圆圈相互对应，如 上图 所示。

m32 个性化适配器

m32 个性化适配器支持器件 m32。标准的40脚0.600"宽，PDIP封装。如果目标板使用的是其它的封装形式，必须从第三方购买其他适配器。连接个性化适配器和 Probe 时，请确定 Probe 和个性化适配器上面的圆圈相互对应，如 上图 所示。

m162 个性化适配器

m162 个性化适配器支持器件 m162。标准的40脚0.600"宽，PDIP封装。如果目标板使用的是另外的封装形式，必须从第三方购买其他适配器。连接个性化适配器和 Probe 时，请确定 Probe 和个性化适配器上面的圆圈相互对应，如 上图 所示。

m128 个性化适配器

m128 个性化适配器是 TQFP64 封装形式的适配器 。并且包括两个模块。底层模块是 TOFP 封装，并且应该在目标板上固化。请确保方向正确。在板上“1”表示1号引脚。底层模块固化在目标板上后，连接上层模块。确定上层模块上的1号引脚和底层模块上的1号引脚相对应。适配器安全地安装好后，将 Probe 放置在个性化适配器上。Probe 上的圆圈应该和 m128 适配器引脚1位置相互对应。

注意！
替换适配器时，请注意适配器的引脚不要弯曲或折断。在仿真器和目标板未断电的情况下不要替换适配器。

提示！
标准的 DIP 封装插座安装在个性化适配器上以便减少损坏适配器引脚的风险，因此可以延长适配器的寿命。如果引脚被弄弯或者损坏，简单地，用一个新的 DIP 插座代替！

提示！
如果在目标板和个性化适配器之间需要更多的空间，可以使用 DIP 插座产生所需的距离。注意，但是所需的插座数目尽量最少。

请查阅

  • ICE50 仿真器使用说明
  • 主仿真单元
  • POD
  • Probe
  • 个性化适配器


ICE50 User's Guide: Trace Buffer Contents

基于指令的追踪窗口(ICE50)
正如在使能追踪所看到的，不同列内容因为不同指令的执行而不同。本部分描述如何解释基于执行指令的追踪缓冲区的内容。

一些解释使用数字，这个数字表明指令执行的周期数(只对多周期指令重要)。标号N/A在不包括一些值得注意的信息的区域使用。

算术和逻辑指令

指令INSTA[0..15] | PMem 地址[PC[A0..22] | 寄存器.变量 寄存器文件L[0..7] | 数据.变量RAM_EEADDR[0..22] | 数据变量 | 状态寄存器
ADD Rd,Rr | 指令地址 | 相加结果 | N/A | N/A | Z,C,N,V,S,H
ADC Rd, Rr | 指令地址 | 相加结果 | N/A | N/A | Z,C,N,V,S,H
ADIW Rdl,K | 1. 指令地址 2. 下一条指令地址 | 1. 相加结果, 低字节 2. 相加结果, 高字节 | 1. N/A 2. N/A | 1. N/A 2. N/A | Z,C,N,V,S
SUB Rd, Rr | 指令地址 | 相减结果 | N/A | N/A | Z,C,N,V,S,H
SUBI Rd, K | 指令地址 | 相减结果 | N/A | N/A | Z,C,N,V,S,H
SBC Rd, Rr | 指令地址 | 相减结果 | N/A | N/A | Z,C,N,V,S,H
SBCI Rd, K | 指令地址 | 相减结果 | N/A | N/A | Z,C,N,V,S,H
SBIW Rdl,K | 1. 指令地址 2. 下一条指令地址 | 1. 相减结果, 低字节 2. 相减结果, 高字节 | 1. N/A 2. N/A | 1. N/A 2. N/A | Z,C,N,V,S,H
AND Rd, Rr | 指令地址 | 逻辑与结果 | N/A | N/A | Z,N,V,S
ANDI Rd, K | 指令地址 | 逻辑或结果 | N/A | N/A | Z,N,V,S
OR Rd,Rr | 指令地址 | 逻辑或结果 | N/A | N/A | Z,N,V,S
ORI Rd, K | 指令地址 | 逻辑或结果 | N/A | N/A | Z,N,V,S
EOR Rd, Rr | 指令地址 | 逻辑异或结果 | N/A | N/A | Z,N,V,S
COM Rd | 指令地址 | 求补结果 | N/A | N/A | Z,C,N,V,S
NEG Rd | 指令地址 | 取反结果 | N/A | N/A | Z,C,N,V,S,H
SBR Rd,K | 将不会出现 (被反汇编到 ORI 指令) | N/A | N/A | N/A | Z,N,V,S
CBR Rd,K | 将不会出现 (被反汇编到 ANDI 指令) | N/A | N/A | N/A | Z,N,V,S
INC Rd | 指令地址 | 增加结果 | N/A | N/A | Z,N,V,S
DEC Rd | 指令地址 | 减少结果 | N/A | N/A | Z,N,V,S
TST Rd | 将不会出现 (被反汇编到 AND 指令) | N/A | N/A | N/A | Z,N,V,S
CLR Rd | 指令地址 | 结果(总是0x00) | N/A | N/A | Z,N,V,S
SER Rd | 将不会出现 (被反汇编到 LDI 指令) | N/A | N/A | N/A | N/A
MUL Rd, Rr | 1. 指令地址 2. 下一条指令地址 | 1. N/A 2. 乘法结果 | 1. N/A 2. N/A | 1. N/A 2. N/A | Z,C
MULS Rd, Rr | 1. 指令地址 2. 下一条指令地址 | 1. N/A 2. 乘法结果 | 1. N/A 2. N/A | 1. N/A 2. N/A | Z,C
MULSU Rd, Rr | 1. 指令地址 2. 下一条指令地址 | 1. N/A 2. 乘法结果 | 1. N/A 2. N/A | 1. N/A 2. N/A | Z,C
FMUL Rd, Rr | 1. 指令地址 2. 下一条指令地址 | 1. N/A 2. 乘法结果 | 1. N/A 2. N/A | 1. N/A 2. N/A | Z,C
FMULS Rd, Rr | 1. 指令地址 2. 下一条指令地址 | 1. N/A 2. 乘法结果 | 1. N/A 2. N/A | 1. N/A 2. N/A | Z,C
FMULSU Rd, Rr | 1. 指令地址 2. 下一条指令地址 | 1. N/A 2. 乘法结果 | 1. N/A 2. N/A | 1. N/A 2. N/A | Z,C

数据传输指令

指令INSTA[0..15] | PMem 地址[PC[A0..22] | 寄存器.变量 寄存器文件L[0..7] | 数据.变量RAM_EEADDR[0..22] | 数据变量 | 状态寄存器
MOV Rd, Rr | 指令地址 | 载如寄存器的值 | N/A | N/A | N/A
MOVW Rd, Rr | 指令地址 | 载入Rd＋1的值 | N/A | N/A | N/A
LDI Rd, K | 指令地址 | 载入寄存器的值 | N/A | N/A | N/A
LD Rd, X | 内部存储器： 1. 指令地址 2. 下一条指令地址 | 内部存储器： 1. N/A 2. 读值 | 内部存储器： 1. N/A 2. 从读入的地址 (X) | 内部存储器： 1. N/A 2. 读值 | N/A
LD Rd, X+ | 内部存储器： 1.指令地址 2. 下一条指令地址 | 内部存储器： 1. N/A 2. 读值 | 内部存储器： 1. N/A 2. 从(X)读入的地址 | 内部存储器： 1. N/A 2. 读值 | N/A
LD Rd, - X | 内部存储器： 1.指令地址 2. 下一条指令地址 | 内部存储器： 1. N/A 2. 读值 | 内部存储器： 1. N/A 2. 从(X)读入的地址 | 内部存储器： 1. N/A 2. 读值 | N/A
LD Rd, Y | 内部存储器： 1. 指令地址 2. 下一条指令地址 | 内部存储器： 1. N/A 2. 读值 | 内部存储器： 1. N/A 2. 从(Y)读入的地址 | 内部存储器： 1. N/A 2. 读值 | N/A
LD Rd, Y+ | 内部存储器： 1. 指令地址 2. 下一条指令地址 | 内部存储器： 1. N/A 2. 读值 | 内部存储器： 1. N/A 2. 从(Y)读入的地址 | 内部存储器： 1. N/A 2. 读值 | N/A
LD Rd, - Y | 内部存储器： 1. 指令地址 2. 下一条指令地址 | 内部存储器： 1. N/A 2. 读值 | 内部存储器： 1. N/A 2. 从(Y)读入的地址 | 内部存储器： 1. N/A 2. 读值 | N/A
LDD Rd,Y+q | 内部存储器： 1.指令地址 2. 下一条指令地址 | 内部存储器： 1. N/A 2. 读值 | 内部存储器： 1. N/A 2. 从(Y+q)读入的地址 | 内部存储器： 1. N/A 2. 读值 | N/A
LD Rd, Z | 内部存储器： 1. 指令地址 2. 下一条指令地址 | 内部存储器： 1. N/A 2. 读值 | 内部存储器： 1. N/A 2. 从(Z)读入的地址 | 内部存储器： 1. N/A 2. 读值 | N/A
LD Rd, Z+ | 内部存储器： 1.指令地址 2. 下一条指令地址 | 内部存储器： 1. N/A 2. 读值 | 内部存储器： 1. N/A 2. 从(Z)读入的地址 | 内部存储器： 1. N/A 2. 读值 | N/A
LD Rd, -Z | 内部存储器： 1. 指令地址 2. 下一条指令地址 | 内部存储器： 1. N/A 2. 读值 | 内部存储器： 1. N/A 2. 从读入的地址 (Z) | 内部存储器： 1. N/A 2. 读值 | N/A
LDD Rd, Z+q | 内部存储器： 1. 指令地址 2. 下一条指令地址 | 内部存储器： 1. N/A 2. 读值 | 内部存储器： 1. N/A 2. 从(Z+q)读入的地址 | 内部存储器： 1. N/A 2. 读值 | N/A
LDS Rd, k | 内部存储器： 1. 指令地址 2. 地址部分指令的地址 | 内部存储器： 1. N/A 2. 读值 | 内部存储器： 1. N/A 2. 从(k)读入的地址 | 内部存储器： 1. N/A 2. 读值 | N/A
ST X, Rr | 内部存储器： 1. 指令地址 2. 下一条指令地址 | 内部存储器： 1. N/A 2. N/A | 内部存储器： 1. N/A 2. 将地址写入 (X) | 内部存储器： 1. N/A 2. 写值 | N/A
ST X+, Rr | 内部存储器： 1. 指令地址 2. 下一条指令地址 | 内部存储器： 1. N/A 2. N/A | 内部存储器： 1. N/A 2. 将地址写入 (X) | 内部存储器： 1. N/A 2. 写值 | N/A
ST - X, Rr | 内部存储器： 1. 指令地址 2. 下一条指令地址 | 内部存储器： 1. N/A 2. N/A | 内部存储器： 1. N/A 2. 将地址写入 (X) | 内部存储器： 1. N/A 2. 写值 | N/A
ST Y, Rr | 内部存储器： 1. 指令地址 2. 下一条指令地址 | 内部存储器： 1. N/A 2. N/A | 内部存储器： 1. N/A 2. 将地址写入 (Y) | 内部存储器： 1. N/A 2. 写值 | N/A
ST Y+, Rr | 内部存储器： 1. 指令地址 2. 下一条指令地址 | 内部存储器： 1. N/A 2. N/A | 内部存储器： 1. N/A 2. 将地址写入 (Y) | 内部存储器： 1. N/A 2. 写值 | N/A
ST - Y, Rr | 内部存储器： 1. 指令地址 2. 下一条指令地址 | 内部存储器： 1. N/A 2. N/A | 内部存储器： 1. N/A 2. 将地址写入 (Y) | 内部存储器： 1. N/A 2. 写值 | N/A
STD Y+q,Rr | 内部存储器： 1. 指令地址 2. 下一条指令地址 | 内部存储器： 1. N/A 2. N/A | 内部存储器： 1. N/A 2. 将地址写入 (Y+q) | 内部存储器： 1. N/A 2. 写值 | N/A
ST Z, Rr | 内部存储器： 1. 指令地址 2. 下一条指令地址 | 内部存储器： 1. N/A 2. N/A | 内部存储器： 1. N/A 2. 将地址写入 (Z) | 内部存储器： 1. N/A 2. 写值 | N/A
ST Z+, Rr | 内部存储器： 1. 指令地址 2. 下一条指令地址 | 内部存储器： 1. N/A 2. N/A | 内部存储器： 1. N/A 2. 将地址写入 (Z) | 内部存储器： 1. N/A 2. 写值 | N/A
ST -Z, Rr | 内部存储器： 1. 指令地址 2. 下一条指令地址 | 内部存储器： 1. N/A 2. N/A | 内部存储器： 1. N/A 2. 将地址写入 (Z) | 内部存储器： 1. N/A 2. 写值 | N/A
STD Z+q,Rr | 内部存储器： 1. 指令地址 2. 下一条指令地址 | 内部存储器： 1. N/A 2. N/A | 内部存储器： 1. N/A 2. 将地址写入 (Z+q) | 内部存储器： 1. N/A 2. 写值 | N/A
STS k, Rr | 内部存储器： 1. 指令地址 2. 地址部分指令的地址 | 内部存储器： 1. N/A 2. N/A | 内部存储器： 1. N/A 2. 将地址写入（k） | 内部存储器： 1. N/A 2. 写值 | N/A
LPM | 1. 指令地址 2. 下一条指令地址 3. 数据读的双字节地址 | 1. NA 2. N/A 3. 数据读 | 1. N/A 2. N/A 3. N/A | 1. N/A 2. N/A 3. N/A | N/A
LPM Rd, Z | 1. 指令地址 2. 下一条指令地址 3. 数据读的双字节地址 | 1. NA 2. N/A 3. 数据读 | 1. N/A 2. N/A 3. N/A | 1. N/A 2. N/A 3. N/A | N/A
LPM Rd, Z+ | 1. 指令地址 2. 下一条指令地址 3. 数据读的双字节地址 | 1. NA 2. N/A 3. 数据读 | 1. N/A 2. N/A 3. N/A | 1. N/A 2. N/A 3. N/A | N/A
ELPM | 1. 指令地址 2. 下一条指令地址 3. 数据读的双字节地址 | 1. NA 2. N/A 3. 数据读 | 1. N/A 2. N/A 3. N/A | 1. N/A 2. N/A 3. N/A | N/A
ELPM Rd, Z | 1. 指令地址 2. 下一条指令地址 3. 数据读的双字节地址 | 1. NA 2. N/A 3. 数据读 | 1. N/A 2. N/A 3. N/A | 1. N/A 2. N/A 3. N/A | N/A
ELPM Rd, Z+ | 1. 指令地址 2. 下一条指令地址 3. 数据读的双字节地址 | 1. NA 2. N/A 3. 数据读 | 1. N/A 2. N/A 3. N/A | 1. N/A 2. N/A 3. N/A | N/A
SPM | 1. 指令地址 2. 下一条指令地址 3. 数据写的双字节地址 | 1. N/A 2. N/A 3. 数据写 | 1. N/A 2. N/A 3. N/A | 1. N/A 2. N/A 3. N/A | N/A
IN Rd, P | 指令地址 | 从PORT口读值 | 6 最低字节提供I/O地址 (A) | 从PORT口读值 | N/A
OUT P, Rr | 指令地址 | 写值到PORT口 | 6 最低字节提供I/O地址 (A) | 写值到PORT口 | N/A
PUSH Rr | 内部存储器： 1. 指令地址 2. 下一条指令地址 | 内部存储器： 1. N/A 2. 压入值 | 内部存储器： 1. N/A 2. 堆栈指针 | 内部存储器： 1. N/A 2. 压入值 | N/A
POP Rd | 内部存储器： 1. 指令地址 2. 下一条指令地址 | 内部存储器： 1. N/A 2. 弹出值 | 内部存储器： 1. N/A 2. 堆栈指针 | 内部存储器： 1. N/A 2. 弹出值 | N/A

分支指令

指令INSTA[0..15] | PMem 地址[PC[A0..22] | 寄存器.变量 寄存器文件L[0..7] | 数据.变量RAM_EEADDR[0..22] | 数据变量 | 状态寄存器
RJMP | 1. 指令地址 2. N/A | 1. N/A 2. N/A | 1. N/A 2. N/A | 1. N/A 2. N/A | N/A
IJMP | 1. 指令地址 2. N/A | 1. N/A 2. N/A | 1. N/A 2. 目标地址 | 1. N/A 2. N/A | N/A
JMP | 1. 指令地址 2. 地址部分指令的地址 3. N/A | 1. N/A 2. N/A 3. N/A | 1. N/A 2. N/A 3. N/A | 1. N/A 2. N/A 3. N/A | N/A
RCALL | 内部寄存器中的堆栈 1. 指令地址 2. N/A 3. 相对调用目标地址 | 内部寄存器中的堆栈 1. N/A 2. N/A 3. N/A | 内部寄存器中的堆栈 1. N/A 2. 堆栈指针 3. 堆栈指针 | 内部寄存器中的堆栈 1. N/A 2. 返回地址，低字节 3. 返回地址，高字节 | N/A
ICALL | 内部寄存器中的堆栈 1. 指令地址 2. N/A 3. 相对调用目标地址 | 内部寄存器中的堆栈 1. N/A 2. N/A 3. N/A | 内部寄存器中的堆栈 1. N/A 2. 堆栈指针 3. 堆栈指针 | 内部寄存器中的堆栈 1. N/A 2. 返回地址，低字节 3. 返回地址，高字节 | N/A
CALL | 内部寄存器中的堆栈 1. 指令地址 2. 地址部分指令的地址 3. N/A 4.调用目标地址 | 内部寄存器中的堆栈 1. N/A 2. N/A 3. N/A 4. N/A | 内部寄存器中的堆栈 1. N/A 2. N/A 3. 堆栈指针 4. 堆栈指针 | 内部寄存器中的堆栈 1. N/A 2. N/A 3. 返回地址，低字节 4. 返回地址，高字节 | N/A
RET | 内部寄存器中的堆栈 1. 指令地址 2. N/A 3. N/A 4. N/A | 内部寄存器中的堆栈 1. N/A 2. N/A 3. N/A 4. N/A | 内部寄存器中的堆栈 1. N/A 2. 堆栈指针 3. 堆栈指针 4. N/A | 内部寄存器中的堆栈 1. N/A 2. 返回地址，高字节 3. 返回地址，低字节 4. N/A | N/A
RETI | 内部寄存器中的堆栈 1. 指令地址 2. N/A 3. N/A 4. N/A | 内部寄存器中的堆栈 1. N/A 2. N/A 3. N/A 4. N/A | 内部寄存器中的堆栈 1. N/A 2. 堆栈指针 3. 堆栈指针 4. N/A | 内部寄存器中的堆栈 1. N/A 2.返回地址，高字节 3. 返回地址，低字节 4. N/A | N/A
CPSE | *没有满足的条件（没有跳过） 1. 指令地址 *满足条件，跳过一个字的指令 1. 指令地址 2. 跳过指令的地址 *满足条件，跳过两个字的指令 1. 指令地址 2. 跳过指令的地址，第一个字 3. 跳过指令的地址，第二个字 | *没有满足的条件（没有跳过） 1. N/A *满足条件，跳过一个字的指令 1. N/A 2. N/A *满足条件，跳过两个字的指令 1. N/A 2. N/A 3. N/A | *没有满足的条件（没有跳过） 1. N/A *满足条件，跳过一个字的指令 1. N/A 2. N/A *满足条件，跳过两个字的指令 1. N/A 2. N/A 3. N/A | *没有满足的条件（没有跳过） 1. N/A *满足条件，跳过一个字的指令 1. N/A 2. N/A *满足条件，跳过两个字的指令 1. N/A 2. N/A 3. N/A | N/A
CP | 指令地址 | N/A | N/A | N/A | N/A
CPC | 指令地址 | N/A | N/A | N/A | N/A
CPI | 指令地址 | N/A | N/A | N/A | N/A
SBRC | *没有满足的条件（没有跳过 ） 1. 指令地址 *满足条件，跳过一个字的指令 1. 指令地址 2. 跳过指令的地址 *满足条件，跳过两个字的指令 1. 指令地址 2. 跳过指令的地址，第一个字 3. 跳过指令的地址，第二个字" | *没有满足的条件（没有跳过） 1. N/A *满足条件，跳过一个字的指令 1. N/A 2. N/A *满足条件，跳过两个字的指令 1. N/A 2. N/A 3. N/A | *没有满足的条件（没有跳过） 1. N/A *满足条件，跳过一个字的指令 1. N/A 2. N/A *满足条件，跳过两个字的指令 1. N/A 2. N/A 3. N/A | *没有满足的条件（没有跳过） 1. N/A *满足条件，跳过一个字的指令 1. N/A 2. N/A *满足条件，跳过两个字的指令 1. N/A 2. N/A 3. N/A | N/A
SBRS | *没有满足的条件（没有跳过） 1. 指令地址 *满足条件，跳过一个字的指令 1. 指令地址 2. 跳过指令的地址 *满足条件，跳过两个字的指令 1. 指令地址 2. 跳过指令的地址，第一个字 3. 跳过指令的地址，第二个字 | *没有满足的条件（没有跳过） 1. N/A *满足条件，跳过一个字的指令 1. N/A 2. N/A *满足条件，跳过两个字的指令 1. N/A 2. N/A 3. N/A | *没有满足的条件（没有跳过） 1. N/A *满足条件，跳过一个字的指令 1. N/A 2. N/A *满足条件，跳过两个字的指令 1. N/A 2. N/A 3. N/A | *没有满足的条件（没有跳过） 1. N/A *满足条件，跳过一个字的指令 1. N/A 2. N/A *满足条件，跳过两个字的指令 1. N/A 2. N/A 3. N/A | N/A
SBIC | *没有满足的条件（没有跳过） 1. 指令地址 *满足条件，跳过一个字的指令 1. 指令地址 2. 跳过指令的地址 *满足条件，跳过两个字的指令 1. 指令地址 2. 跳过指令的地址，第一个字 3. 跳过指令的地址，第二个字 | *没有满足的条件（没有跳过） 1. N/A *满足条件，跳过一个字的指令 1. N/A 2. N/A *满足条件，跳过两个字的指令 1. N/A 2. N/A 3. N/A | *没有满足的条件（没有跳过） 1. 5 最低字节提供I/O地址 (A) *满足条件，跳过一个字的指令 1. 5 最低字节提供I/O地址 (A) 2. N/A *满足条件，跳过两个字的指令 1. 5 最低字节提供I/O地址 (A) 2. N/A 3. N/A | *没有满足的条件（没有跳过） 1. N/A *满足条件，跳过一个字的指令 1. N/A 2. N/A *满足条件，跳过两个字的指令 1. N/A 2. N/A 3. N/A | N/A
SBIS | *没有满足的条件（没有跳过） 1. 指令地址 *满足条件，跳过一个字的指令 1. 指令地址 2. 跳过指令的地址 *满足条件，跳过两个字的指令 1. 指令地址 2. 跳过指令的地址，第一个字 3. 跳过指令的地址，第二个字 | *没有满足的条件（没有跳过） 1. N/A *满足条件，跳过一个字的指令 1. N/A 2. N/A *满足条件，跳过两个字的指令 1. N/A 2. N/A 3. N/A | *没有满足的条件（没有跳过） 1. 5 最低字节提供I/O地址 (A) *满足条件，跳过一个字的指令 1. 5 最低字节提供I/O地址 (A) 2. N/A *满足条件，跳过两个字的指令 1. 5 最低字节提供I/O地址 (A) 2. N/A 3. N/A | *没有满足的条件（没有跳过） 1. N/A *满足条件，跳过一个字的指令 1. N/A 2. N/A *满足条件，跳过两个字的指令 1. N/A 2. N/A 3. N/A | N/A
BRBS | 未获取的分支： 1. 指令地址 获取的分支： 1.指令地址 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | N/A
BRBC | 未获取的分支： 1. 指令地址 获取的分支： 1.指令地址 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | N/A
BREQ | 未获取的分支： 1. 指令地址 获取的分支： 1. 指令地址 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | N/A
BRNE | 未获取的分支： 1. 指令地址 获取的分支： 1.指令地址 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | N/A
BRCS | 未获取的分支： 1. 指令地址 获取的分支： 1. 指令地址 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | N/A N/A
BRCC | 未获取的分支： 1. 指令地址 获取的分支： 1. 指令地址 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | N/A
BRSH | 未获取的分支： 1. 指令地址 获取的分支： 1. 指令地址 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | N/A
BRLO | 未获取的分支： 1. 指令地址 获取的分支： 1. 指令地址 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | N/A
BRMI | 未获取的分支： 1. 指令地址 获取的分支： 1. 指令地址 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | N/A
BRPL | 未获取的分支： 1. 指令地址 获取的分支： 1.指令地址 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | N/A N/A
BRGE | 未获取的分支： 1. 指令地址 获取的分支： 1. 指令地址 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | N/A
BRLT | 未获取的分支： 1. 指令地址 获取的分支： 1. 指令地址 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | N/A
BRHS | 未获取的分支： 1. 指令地址 获取的分支： 1. 指令地址 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | N/A
BRHC | 未获取的分支： 1. 指令地址 获取的分支： 1. 指令地址 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | N/A
BRTS | 未获取的分支： 1. 指令地址 获取的分支： 1. 指令地址 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | N/A
BRTC | 未获取的分支： 1. 指令地址 获取的分支： 1. 指令地址 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | N/A
BRVS | 未获取的分支： 1. 指令地址 获取的分支： 1.指令地址 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | N/A
BRVC | 未获取的分支： 1. 指令地址 获取的分支： 1.指令地址 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | N/A
BRIE | 未获取的分支： 1. 指令地址 获取的分支： 1. 指令地址 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | N/A
BRID | 未获取的分支： 1. 指令地址 获取的分支： 1. 指令地址 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | 未获取的分支： 1. N/A 获取的分支： 1. N/A 2. N/A | N/A

位和位测试指令

指令INSTA[0..15] | PMem 地址[PC[A0..22] | 寄存器.变量 寄存器文件L[0..7] | 数据.变量RAM_EEADDR[0..22] | 数据变量 | 状态寄存器
LSL | 指令地址 | Y/N | N/A | N/A | Z,C,N,V
LSR | 指令地址 | Y/N | N/A | N/A | Z,C,N,V
ROL | 指令地址 | Y/N | N/A | N/A | Z,C,N,V
ROR | 指令地址 | Y/N | N/A | N/A | Z,C,N,V
ASR | 指令地址 | Y/N | N/A | N/A | Z,C,N,V
SWAP | 指令地址 | Y/N | N/A | N/A | N/A
BSET | 指令地址 | N/A | N/A | N/A | Z,C,N,V,H
BCLR | 指令地址 | N/A | N/A | N/A | Z,C,N,V,H
SBI | 1. 指令地址 2. 下一条指令地址 | 1. N/A 2. N/A | 1. Y/N 2. Y/N | 1. Y/N 2. Y/N | N/A
CBI | 1. 指令地址 2. 下一条指令地址 | 1. N/A 2. N/A | 1. Y/N 2. Y/N | 1. Y/N 2. Y/N | N/A
BST | 指令地址 | N/A | N/A | N/A | T
BLD | 指令地址 | Y/N | N/A | N/A | N/A
SEC | 指令地址 | N/A | N/A | N/A | C
CLC | 指令地址 | N/A | N/A | N/A | C
SEN | 指令地址 | N/A | N/A | N/A | N
CLN | 指令地址 | N/A | N/A | N/A | N
SEZ | 指令地址 | N/A | N/A | N/A | Z
CLZ | 指令地址 | N/A | N/A | N/A | Z
SEI | 指令地址 | N/A | N/A | N/A | I
CLI | 指令地址 | N/A | N/A | N/A | I
SES | 指令地址 | N/A | N/A | N/A | S
CLS | 指令地址 | N/A | N/A | N/A | S
SEV | 指令地址 | N/A | N/A | N/A | V
CLV | 指令地址 | N/A | N/A | N/A | V
SET | 指令地址 | N/A | N/A | N/A | T
CLT | 指令地址 | N/A | N/A | N/A | T
SEH | 指令地址 | N/A | N/A | N/A | H
CLH | 指令地址 | N/A | N/A | N/A | H

MCU控制指令

指令INSTA[0..15] | PMem 地址[PC[A0..22] | 寄存器.变量 寄存器文件L[0..7] | 数据.变量RAM_EEADDR[0..22] | 数据变量 | 状态寄存器
NOP | 指令地址 | N/A | N/A | N/A | N/A
SLEEP | 指令地址 | N/A | N/A | N/A | N/A
WDR | 指令地址 | N/A | N/A | N/A | N/A
BREAK | 指令地址 | N/A | N/A | N/A | N/A

提示！
AVR Studio 将不断更新版本。请您到 www.atmel.com 查阅更新。

  • AVR 指令设置


Linking trace to source code

<< 含有快速追踪性能的正常仿真 ：上一个链接 下一个链接：保存仿真数据>>

将源代码和追踪连接

AVR Studio 能够将你追踪的代码和相应的源代码程序连接起来。为了激活追踪的代码和源代码的连接，只需要双击任何被追踪的代即可.您同样可以通过右键并且选择"连接到源代码"激活 。

在激活该连接之后,AVR Studio 将在被追踪的代码行位置放置一个绿色的箭头并且和源代码相对应。如下图所示。

您可以在被追踪的代码当中向上和向下单步执行，同时源代码窗口将同步更新相应的追踪位置，单步向下追踪的快捷键是ALT F12，单步向上追踪的快捷键是CTRL F12。您可以同样使用在追踪工具栏里的下一步状态按键和先前状态按键,正如下图所示。

下一步状态按键

先前状态按键

<< 含有快速追踪性能的正常仿真 ：上一个链接 下一个链接： 保存仿真数据


Normal trace with posttrace

<< 含有滞后追踪性能的普通仿真 ： 上一个链接 下一个链接： 连接追踪到源代码>>

含有滞后追踪性能的普通追踪方式

我们现在将把追踪方式改到含有滞后追踪性能的普通仿真，这个步骤将通过在追踪工具栏选择含有滞后追踪性能的普通仿真实现。当然可以通过执行调试->追踪菜单实现。通过按下复位追踪区按键实现复位追踪。

按下全速执行并且按下STK500上面0号到4号发光二极管之中被点亮位置的按键.中止程序的执行，您的追踪显示区将如下图所示。

注意在每一个追踪部分后的灰色的滞后追踪部分。滞后追踪部分是这样一种追踪：在程序执行的最后的16个周期，即发现结束追踪标志后执行。在追踪显示区里面，这种状态将被描述为3到16行的滞后追踪代码，这些代码是在指令形式的基础上执行的。同样取决于工程建立的形式(C/C++工程或汇编工程)，并且是否您已经选择了显示高层或者反汇编追踪显示。

注意滞后追踪区域只能覆盖16个周期范围，这表示如果在滞后追踪当中最后追踪的指令是多指令，如果他们超过16个周期的显示，那么一个或多个附属周期的指令将不能被追踪。在上面的例子里面一条4周期的调用指令作为最后的指令追踪但是只有3个时钟周期适合滞后追踪区 。为了表示指令没有完全追踪，一个惊叹号将在相应的区域显示并且逻辑描述和数据值区域将以水平线标识。如果 AVR 器件在滞后追踪时复位，滞后追踪将立即停止。

<< 含有滞后追踪性能的普通仿真 ：上一个链接 下一个链接： 连接追踪到源代码>>


Normal trace with pretrace

<< 追踪选项对话框 ： 上一个链接 下一个连接： 滞后追踪>>

含有预先追踪性能的普通追踪方式

我们现在将改变追踪模式到含有预先追踪性能的普通追踪方式，通过选择追踪工具栏里面的含有预先追踪的普通追踪方式实现。当然可以通过选择调试->追踪菜单实现。点击复位追踪显示按键复位您的追踪显示。

按下全速执行和STK500仿真器上0到4号发光二极管任意一个点亮位置的按键.终止程序执行，您的追踪显示区将如下所示。

注意在被追踪代码开始处灰色的预先追踪部分。预先追踪部分是这样一种追踪：在程序执行的最后的16个周期，即发现结束追踪标志后执行。在追踪显示区里面，这种状态将被描述为3到15行的预先追踪代码 ，这些代码是在指令形式的基础上执行的。同样取决于工程建立的形式(C/C++工程或汇编工程)，并且是否您已经选择了显示高层或者反汇编追踪显示。

同样有可能只显示反汇编追踪，这种情况下没有高层源代码.您可以通过右键点击追踪显示区并且选择如图所示的"显示源代码"选项取消选择显示源代码选项。

您的追踪显示现在如下所示。

继续了解滞后追踪，点击该链接>> 滞后追踪

<< 追踪选项对话框 ： 上一个链接 下一个链接： 滞后追踪>>


Saving traced data

<< 链接追踪到源代码 ： 上一个链接

保存被追踪的数据

被追踪的数据能够保存到文本文件和二进制文件，可以通过在追踪显示区点击鼠标右键选择"保存到文本文件"实现。

同样一个二进制文件可以被保存.在 ICE40/50 情况下，该文本文件将保存从您的调试系统当中读到的原始数据。该文本文件将包含相同的列数量和在追踪显示区里面的追踪数据。

同样可以将列数移出并且将它们转移到追踪显示区的内部，可以通过在追踪显示区列的顶部里点击右键,取消你想要移动的列。

为了移动列，简单的将它们拖动到不同的地方，如下图所示。

<< 链接追踪到源代码 ： 上一个链接


Setting up trace

<< 启动追踪指南 ：上一个链接 下一个链接： 追踪提示与技巧>>

建立追踪模式

查阅 追踪窗口 的帮助文档获取更多的关于追踪菜单的帮助，按下按键和追踪窗口。

首先我们将追踪按键标签处和 CalcSource 之间的代码。从现在开始我们将使用快捷键F8来放置追踪标签，但是追踪标签同样可以通过选择下面的调试菜单：调试->锁定追踪点放置 。

为了通知追踪系统，我们希望在标签按键按下后开始追踪，我们在按下的按键下面一行放置光标并且按下F8。为了终止追踪系统我们在代码"不相等跳转完成，按键按下"行放置光标 ，并且按下F8按键两次。注意追踪标识从"追踪进行中"改变到"追踪结束"。

现在我们必须选择希望执行的追踪形式。首先，我们将使用"普通追踪"选项.通过选择追踪工具栏里面的普通追踪实现。

下一步我们将打开追踪窗口并且将它放置在 AVR Studio 显示区里面，追踪窗口是一个可嵌入窗口，并且可以放置在 AVR Studio 显示区的任何位置.您的 AVR Studio 显示区将可能如下所示。

现在我们已经准备好了开始运行我们的程序并且执行程序普通追踪方式。按下AVR Studio 的全速执行，在STK500仿真器0号到4号按键上面的一个LED将被点亮。按下发光的二极管下面的按键。终止AVR Studio 中的程序，您的追踪显示将包含下列信息。

为了掌握更多关于追踪ID和追踪作色代码的信息，点击该链接>> 追踪ID和作色代码编写

<< 启动追踪指南： 上一个链接 下一个链接： 追踪提示与技巧>>


Trace ID and color coding

<< 追踪提示与技巧 ： 上一个链接 下一个链接： 追踪选择对话框>>

追踪ID和作色代码编写

追踪系统能够追踪相互独立的代码部分，这些代码部分拥有不同的ID并且在追踪显示区当中以不同的颜色表现出来。我们现在将在"输出"程序当中放置追踪进行和停止标签 。该程序在"输出"标签处开始并且在"CalcScore"上面的代码行结束。我们在输出标签下面放置光标并且按下F8在追踪处放置标签。注意放置标签追踪的ID和上面的追踪标签一样。

现在我们必须在追踪标识上设置一个新的ID。通过快捷键命令 ALT F8 增加追踪ID或者 CTRL F8 减小追踪ID.ID同样能够通过右键点击放置了追踪标识的代码行并且选择增加/减少追踪ID来实现。当前追踪ID同样可以通过在调试菜单里面选择调试->追踪->设置当前追踪ID改变。注意改变当前追踪ID并不能改变在当前代码行上面的ID。只是能够为新的加入到工程的追踪点设置ID。上面所有的改变追踪ID的选项将在下图当中显示。

现在我们在"CalcScore"上面的代码行上面放置光标并且按下F8两次。注意追踪ID现在和上一次的设定的追踪标签值相同。为了之后改变追踪ID使用快捷键或者菜单方式增加或减少追踪ID。您同样可以通过选择菜单"设置追踪ID"来直接设置追踪ID。您的代码窗口应该如下所示。

在开始再次调试之前通过按下复位显示区的按键复位您的追踪显示区。

按下 AVR Studio 的全速执行。在 STK500 仿真器0号到4号按键上面的一个LED将被点亮.按下发光的二极管下面的按键。中止AVR Studio 中的程序。您的追踪窗口将如下显示。注意两个独立的追踪之间的蓝色和红色线条。每一个追踪ID同样将在追踪显示区里面显示。同样注意在追踪部分之间的时间标志有些不同.这将取决于在不同的追踪当中的时钟周期数。

默认情况下作色代码编写选项关闭。通过在追踪显示区点击右键选择作色代码编写或者使用相应的菜单，如下图所示。

您的追踪显示将如下显示。

您可以继续学习在追踪选项对话框里关于不同的选项的知识，之后我们会继续其他追踪模式。

<< 追踪提示与技巧 ： 上一个链接 下一个链接： 追踪选择对话框>>


Trace options dialog

<< 追踪ID和作色代码编写I ： 上一个链接 下一个链接： 预先追踪>>

追踪选项对话框

该追踪选项对话框可以通过选择菜单当中的调试->追踪->选项打开。选择对话框如下所示。

从该菜单中您可以改变每一个追踪ID的颜色。现在改变追踪ID1和2的颜色。

作色代码编写通过检查使用作色代码编写检验栏使能。

默认状态下被追踪的任何中断将以特别的颜色表示。该颜色能通过点击绿色正方形并且从颜色对话框里面选择新的颜色。作色代码可以通过取消选择"使用中断作色"检验栏实现。

通过点击 OK 您将返回到AVR Studio 并且您的追踪ID1 和追踪ID2 的颜色将改变，可能如下面所示。

追踪选项对话框同样有使能和禁止当追踪缓冲区满中止追踪(默认：使能)。如果选择使能，仿真将在追踪缓冲区满后 中止。

注意追踪的最后一条指令，如果溢出中止使能并且该指令是一个多周期指令，那么它将有可能不被完全追踪。比如一条4周期的调用指令被追踪的过程中，一旦追踪缓冲区溢出，只有4个周期当中的3个保存。为了表示指令没有完全追踪，一个惊叹号将显示并且在逻辑描述和数值区将被用一条直线代替，如下图所示。注意这些执行对程序的运行没有任何影响，在仿真 中止之前当然所有的指令都能完全执行。

继续了解预先追踪，点击该链接>> 预先追踪

<< 追踪ID和作色代码编写 ：上一个链接 下一个连接： 预先追踪>>


Trace Tips and Tricks

<< 设置追踪 ： 上一个链接 下一个链接： 追踪ID和作色代码编写>>

追踪提示与技巧

下面将是一些关于追踪和如何使用追踪的有用的提示和技巧。

追踪开/关

不能在程序指针的当前位置通过设置追踪开标识来开始追踪。为了开始追踪，追踪开标识必须被放置在代码的下一条指令的位置。该应用同样适用于追踪关标识。如果您想从第一条指令开始追踪 ，您必须在追踪区放置追踪开标识并且按下 AVR Studio 的复位键。

休眠模式(ICE50 追踪)
如果在单片机进入休眠模式时追踪使能，休眠模式将被连接到追踪缓冲区。这项应用适合于所有的休眠模式。注意，但是在休眠模式时钟标志仍然计数，因此这项功能可以被用在记录单片机休眠的总的时间。追踪缓冲区将为每一个机器周期填写休眠指令，只要单片机处于休眠状态。
复位模式(ICE50 追踪)
外部复位模式，BOD 或看门狗复位在追踪使能时不在追踪缓冲区里面被追踪。在复位被追踪之前的最后一条指令起，追踪将从复位向量继续。注意时钟标志将显示复位状态持续的时间。
访问外部数据存储器(ICE50 追踪)
访问数据存储器的指令基于是否是外部还是内部存储器有不同的时序。对于访问外部存储器，时序再次基于等待状态的个数。

<< 设置追踪 ： 上一个链接 下一个链接： 追踪ID和作色代码编写>>