ICE40 High End Emulator 使用说明

ICE40 使用说明

绪言

关于本手册

新增功能

疑难解答

ICE40 固件历史

导言

ICE40 功能特性

ICE40 硬件资源

系统要求

订购信息

总体硬件描述

总体硬件描述

主仿真单元

POD

Probe

电源系统

个性化适配器

测试适配器

ICE40 操作说明

连接 ICE40 进行仿真

正确选择个性化适配器

连接 Probe 到目标板

连接 ICE40 到 PC 主机

ICE40 上电步骤

升级 USB 驱动

配置 AVR Studio

快速入门向导

升级 ICE40 固件

为 ICE40 加载新器件

器件选择选项

引导区选项

其 他选项

中止模式选项

堆栈监视器

堆栈监视器选项

熔丝位

ICE 状态

使用 ICE40 和 AVR Studio仿真

使用 AVR Studio 仿真

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

存储器非法访问检测

升级和自我检测

升级 ICE40 固件

为 ICE40 加载新器件

ICE40 自检

ICE40 测试适配器描述

跟踪

跟踪指南

跟踪窗口

特殊注意事项

电气兼容特性

休眠模式

目标硬件要求

电源系统描述

仿真器与器件的差别

故障解答

故障解答

附录

Probe 连接器引脚

请查阅

AVR Studio使用手册

返回主引索


About this Manual

关于该手册
警告
本手册包含了一些重要的警告事项，以防止您的误操作对您的系统和 ICE40 造成损害。所有的注意事项都以下例的形式给出并给予强调。
警告！
这是一个警告事项...

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

重要注意事项:

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

重要注意事项:这是一个重要的注意事项。

提示
部分内容包含了一些使用 ICE40 的有用的提示。所有的提示都以下例的形式给出。

提示!
这是一个提示...

小技巧!

这是一个小技巧...

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

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

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

注意!
ICE40支持AVR Studio 4.0 及更高版本，但不兼容AVR Studio 3.x。

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

请参阅
    • ICE40 仿真器使用说明
    • AVR Studio 4.0 使用说明


新增功能

下面是对该版本新增特性和所作修改的摘要。更多信息请查阅疑难解答 。

FW1.11版本 - AVR Studio4.11版本

要点

新器件 (只针对 ICE50)

  • 完全支持 ATtiny2561。 请注意您必须从 Atmel 公司购买独立的存储器插入模块，对 ICE50 的存储器加以扩充。请在备用器件清单中核对 订购信息 。装配说明请查阅 "为ICE50安装存储器插入模块"。

支持新型存储器插入模块 (只针对 ICE50)：

  • 新推出的一款存储器插入模块适用于 ICE50， 使 ICE50 能够支持 Atmega2561。 请在备用器件清单中核对 订购信息 和有关如何购买的信息。装配说明请查阅 "为ICE50安装存储器插入模块"。

ICE50 固件：

模块 | 软件版本 | 固件版本
Main | 00.4D | 00.04
MMU | 00.1F | 00.1F
OSC | 00.21 | 00.10
AVR | 00.2E |
EVENT | 00.1F | 00.18
POD | 00.0D | 00.10
TRACE | 00.19 | 01.51
TS |  | 00.0C

新器件文件版本：

File | FW ver.
Atmega8 | 01.37
ATtiny26 | 01.2C
ATtiny13 | 01.1C

有关ICE50 固件版本 v. 1.11中的修改：

未作任何修改

有关 ICE50 器件文件 v. 1.11中的修改:

  • ATtiny13, ATtiny26：对非法存储器访问问题的修改。旧的版本中使用16位RAM地址，并采用X,Y和Z寄存器作为间接指针对RAM进行访问。新版本中采用8位地址指针。

在线帮助更新：

  • 更新订购信息页

  • 印刷修正

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

请查阅
  • ICE40 仿真器使用说明


疑难解答

有关本版本的疑难解答。

ICE40

ICE50测试程序:

  • 一些测试过程可能失败并出现下述出错信息: "Method '~' of object '~' failed"。 如果发生了这种错误，请选定该测试过程并单独运行该测试过程。 如果现在测试正确，ICE将正确工作。这个错误是由内部软件错误引起的。 在新版本的 AVR Studio中，我们将对这一点加以改进。

ICE50 升级程序:

  • 如果有模块升级失败，请将 ICE50 重新上电并重复升级过程。 如果某个AVR器件编程出错，请查询问题解答部分 FPGA编程错误。

定时器振荡器:

  • 定时器的外部振荡器工作在电压3.5-5.5伏特。小技巧： 如果你要在其它电压条件下工作，您可以使用内部提供的32KHz振荡器。

外部晶振:

  • ICE50 probe 不支持外部晶振/谐振器。

小技巧1: 作为替代，您可以将仿真器配置成使用内部可编程时钟。这时 XTAL1 脚为三态。 XTAL2 引脚将被使能，内部可编程时钟信号连接到 XTAL2 引脚上。更多关于如何在 XTAL2 引脚上设置时钟信号的说明请参阅“特别说明”部分的描述。

小技巧2: 使用目标板提供的外部时钟源，并在 ICE50 选项卡中选择外部时钟选项。

带有复位禁止熔丝位的器件:

  • ICE50 POD 的复位引脚上连接有外部上拉引脚。 如果复位禁止熔丝位被设定，复位引脚作为普通的输入输出引脚使用，外部上拉依然有效。

ATtiny26:

  • ATtiny26 的片内相逻辑时钟约为64 MHz, ICE50 为66Mhz ，对 OSCAL 寄存器加以设置，并不会对 ICE50 的 PLL 时钟产生影响。

ADC:

  • 当 ADC 的通道改变后，电荷将从当前通道转移到选定通道。这将导致 ADC 产生输入噪声。根据两个通道之间电压的差别，通道转换的建立时间相应地也会更长一些。大多数情况下，新通道第二次取样的结果在正确值的90%以内，第三次则正确。

    • 在满足您所需带宽的条件下，在 ADC 通道旁安放一个 具有最大可能值的外部电容。 例如：如果您需要的带宽为1KHz，而您的源阻抗为1kohm ，那么使用的电容值为1/(2*pi*f*R)，约160 nF。 "f" 代表所需带宽， "R"代表源阻抗。

  • 除目前新推出的 ICE50 POD 之外，所有 AVR 器件的内部参考电压都是1.1V。 当您选择了这个参考电压，2.5V将作为参考供内部使用。

    • 使用 ICE50 调试时，使用2.5v参考电压并测量其结果。

  • 在使用 ICE 前若未将目标板上电，ADC 可能会被锁定。 同样在ICE未上电的情况下，请确保 ADC 的输入引脚上没有残余电压。 如果不确定 ADC 是否被锁定( ADC 给出错误的结果)， 请关闭目标板和 ICE 的电源并按照正确的上电时序操作。

  • ADC 最大转换频率为1.3 MHz。 请注意对硅半导体器件而言，一般说来如果超过了250 kHz的转换时钟限制，将达不到10位的精度。但是，工作在最大 ADC 转换时钟频率下时，ICE50 可以达到10位的精度。

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

请查阅
  • ICE40 仿真器使用说明

问题报告

如果您发现AVR Studio存在问题，请将信息反馈到 avr@atmel.com。测试软件若存在问题，请将信息反馈到avrbeta@atmel.com。


ICE40 Firmvare history

ICE 40 固件历史

本部分内容将只对最近的五个固件版本加以说明。

新增功能

下面就是对新版本新增特性和所作修改的摘要。您也可以查阅我们列出的清单 疑难解答。

FW1.10版本 - AVR Studio4.10版本

要点

新增功能部件 (只针对 ICE50)

  • 完全支持 ATtiny2313 。您可以从 Atmel 公司订购支持 ATtiny2313 的新款个性化适配器，详情请查阅 ICE50 的订购数据清单。

  • 完全支持 Atmega165，这可以依靠与 Atmega169 配套的个性化适配器来实现。

  • 完全支持 Atmega325，这可以依靠与 Atmega169 配套的个性化适配器来实现。
  • 完全支持 Atmega649 除 LCD 输出以外的所有功能，这可以依靠与 Atmega169 配套的个性化适配器来实现。如果你要在 AVR Studio 中仿真LCD输出，您可以使用 AVR LCD观察仪 。LCD 插入模块可以从 www.atmel.com 单独下载。

ICE50 固件：

模块 | 软件版本 | 固件版本
Main | 00.4C | 00.04
MMU | 00.1E | 00.1F
OSC | 00.21 | 00.10
AVR | 00.2E |
EVENT | 00.1F | 00.18
POD | 00.0D | 00.10
TRACE | 00.19 | 01.51
TS |  | 00.0C

最新版本器件文件:

File | FW ver.
Atmega8 | 01.37
ATtiny26 | 01.2B
ATtiny13 | 01.1B

ICE50固件版本 v. 1.10中所作修改：

未作出任何修改

有关ICE50 器件文件 v. 1.10中的修改：

  • ICE40 的扩展 ADC 模块可承受高达1.3 MHz的 ADC 时钟频率。并且 ICE40 作出的这项改进适用于所有器件。详情请查阅 疑难解答。

  • Tiny26：有关定时器/计数器 TIMER1 溢出标志 TOV1 在单步执行时的清除问题所作的修正。如果在单步执行的过程中 TIMER1 溢出，溢出标志 TOV1 不会在中断服务程序中清除。 现在这一点被修正了。

  • TWI：所有带有TWI模块的器件可以进行单步执行。以前如果在 TWI 数据传送结束以前被中断或停止，一些器件并不会释放数据线。(仍保持高电平)。现在这一点被修正了。 当 TWI 被使能，SCL 和 SDA 线上有可能产生一个脉冲波形干扰。详情请查阅 疑难解答。

在线帮助更新:

  • 有关ATtiny2313, Atmega165, Atmega325, Atmega649在线帮助内容的更新。

  • 有关安装/升级 USB 驱动在线帮助内容的更新。

  • 新的订购信息页。

  • 有关堆栈监测在线帮助内容的更新和印刷修正。

  • 印刷修正。

FW 版本1.9 - AVR Studio版本4.09.

要点

新器件 (只针对 ICE50)

  • 完全支持 ATCAN1m128，这可以通过使用 Atmega128 的个性化适配器实现。

  • 除LCD 输出外，完全支持 Atmega329，这可以通过使用 Atmega169 的个性化适配器实现。如果要在 AVR Studio 中对 LCD 输出加以仿真，请使用 AVR LCD观察仪。LCD 插入模块可以从 www.atmel.com 独立下载。

ICE40 固件:

模块 | 软件版本 | 固件版本
Main | 00.4A | 00.04
MMU | 00.1D | 00.1F
OSC | 00.21 | 00.10
AVR | 00.2E |
EVENT | 00.1F | 00.18
POD | 00.0D | 00.10
TRACE | 00.19 | 01.51
TS |  | 00.0C

新器件文件版本:

File | FW ver.
Atmega8 | 01.37
ATtiny26 | 01.2A
ATtiny13 | 01.1A

有关 ICE40固件版本 v. 1.9的修改:

未作出任何修改

有关 ICE40 器件文件 v. 1.9的修改:

  • ICE50 的扩展 ADC 模块可以承受高达1.3 MHz的 ADC 时钟频率。详情请查阅 疑难解答 。

  • 所有带有异步定时器的器件：保证了单步执行过程中ASSR寄存器中定时器更新繁忙标志位的正确。

在线帮助更新:

  • 印刷修正。

  • 有关上电复位(POR)，掉电检测(BOD）复位，和外部复位的在线帮助内容更新。详情请查阅 使用 ICE40 仿真。

FW 版本1.7 - AVR Studio版本4.08

要点

USB

  • ICE40 USB 已经升级，同时还将 DMA 存储器直接传送功能包含了进来。这明显加快了加载新工程的速度和跟踪存储器的读出速度。

  • 如果您要使用新的 USB 固件，必须首先安装新的 USB 驱动。请确定您已经升级并正确地安装了新的 USB 驱动， 请阅读: 关于升级USB的重要说明。

跟踪

  • ICE40 的跟踪功能已经完全更新。增加了滤波，色码和源同步在内的众多新特性。更多信息请查阅 跟踪指南 。
  • 新的跟踪窗口中增加了预先和滞后跟踪功能。

堆栈监测器

  • ICE40 支持堆栈监测。堆栈监测功能使您可以监测数据和程序堆栈，并在溢出或即将溢出时中断它们。更多信息请查阅 堆栈监视器 。

停止模式选项

  • ICE40 扩展中止模式选项。在中止模式下，您可以使能/禁止定时器，通讯模块和 PWM 输出功能。更多信息请查阅 中止模式选项 。

新建工程向导

  • 您可以在 AVR Studio 的工程菜单中启动新建工程向导。现在在工程被加载以前，您就可以选择 ICE40 选项了。在某些情况下，这使工程的建立更方便。更多信息请查阅 快速入门向导 。

  • 在所有器件中，用户都可以中断休眠模式。

ICE40 固件：

模块 | 软件版本 | 固件版本
Main | 00.49 | 00.04
MMU | 00.1D | 00.1F
OSC | 00.20 | 00.10
AVR | 00.2B |
EVENT | 00.1F | 00.18
POD | 00.0D | 00.10
TRACE | 00.19 | 01.51
TS |  | 00.0C

新器件文件版本：

File | FW ver.
Atmega8 | 01.35
ATtiny26 | 01.2A
ATtiny13 | 01.19

有关ICE40 固件版本 v. 1.7的修改：

所有器件

  • 有关 ICE50 跟踪速度问题的改进。

  • 有关中断休眠模式的改进。

  • 当 BOD 被禁止时，BOD 复位功能被禁止。

  • 如果已经被使能，同步时钟将继续运行，并能将器件从休眠模式下唤醒。

  • 进行 SPM 页擦除时并不擦除它的暂时缓存器。

  • 与芯片一样，OSCAL IO寄存器的值为器件复位后的默认值。

  • 器件可以中断休眠模式。

ATtiny26

  • ICE50 的 ADC 模快功能得到提高，可以工作在高达1.3MHz的 ADC 时钟频率下。请注意在如此高的时钟频率下，一般器件不能达到10位的精度。但是 ICE50 却能够达到10位精度而不出错。

在线帮助更新：

  • 根据 ICE40 的新特性所作的更新。

FW 版本 1.6：

ICE40固件：

模块 | 软件版本 | 固件版本
Main | 00.2D | 00.04
MMU | 00.17 | 00.0E
OSC | 00.16 | 00.07
AVR | 00.21 |
EVENT | 00.1A | 00.0D
POD | 00.0A | 00.0C
TRACE | 00.10 | 01.03
TS |  | 00.0C

新器件文件版本：

File | FW ver.
Atmega8 | 01.24
ATtiny26 | 01.1D

有关ICE40 固件版本 v. 1.6更新：

  • ICE40 使用与 ICE50 相同的固件，在该固件版本中所作的改进适用于 ICE50 的相关部件。

在线帮助更新：

  • 一些印刷上的修订。

FW 版本1.5：

ICE40 固件：

模块 | 软件版本 | 固件版本
Main | 00.2D | 00.04
MMU | 00.17 | 00.0E
OSC | 00.16 | 00.07
AVR | 00.21 |
EVENT | 00.1A | 00.0D
POD | 00.0A | 00.0C
TRACE | 00.10 | 01.03
TS |  | 00.0C

新器件文件版本：

File | FW ver.
Atmega8 | 01.24
ATtiny26 | 01.1D

ICE40 固件版本v. 1.5的新特性：

  • 所有器件新增了检测非法存储器访问的功能。 更多信息请查阅更新文档。

有关 ICE40 固件版本 v. 1.5的修改：

所有带有8x8硬件乘法器的器件

  • 在固件版本1.4包含的所有器件中，硬件乘法器会给出错误的结果。现在所有器件包含的8x8位硬件乘法器都作了修正。

所有不带有 XRAM 接口的器件：

  • 在固件版本1.4中，对所有器件而言，如果不带有 XRAM 接口，而所访问的 SRAM 的地址超过了 EEPROM 的最大地址，将发生 SRAM 非法访问中断。 在这个版本中这一点得到了改进。

  • 所有带有引导装载区的器件

  • 所有器件的 SPM 暂时缓存器可以从 SPM 暂时缓存器窗口中直接进行读写。

  • 所有器件的 SPM 仿真已经被修正。 所作的修正包括下面几个方面：

    • 在页写入和 SPMCR 的 RWWSE 被写入后，可以擦除 SPM 的缓冲区。

    • 在不重新使能RWW区的情况下，RWW部分的代码可以被执行。这一点已经被修正。

    • 有关读取熔丝位和加密位的修正。

    • 在进行页写入和页擦除时能够正确地忽略 SPM 地址处的字部分。

所有器件 (写 EEPROM 时间)：

  • 所有器件的写 EEprom 时间已经更正 (写 EEprom 时间为 8 ms)。

以16MHz工作的单步跟踪指令

    • 当以16MHz的时钟频率单步执行时将跟踪出错。这一点在该版本中得到了修正。

ICE40 升级程序：

  • 为使升级程序更加稳定并在 ICE40 升级过程中不出错，对升级程序作了几处修正和更新。

ICE40 自测程序:

  • 对发生在 SRAM 自测功能运行过程中错误的修正。

  • 为使自测程序更加稳定和可靠并能正确地为自测过程装载器件，对自测程序作了一些修正和更新。

在线帮助更新

  • 有关“ICE40 options”中“other options”选项的帮助内容更新 。

  • 为“使用 ICE40 仿真”添加新内容。

  • 为“更新和自测”添加新内容。

  • 一些印刷上的修正。

  • ICE40 仿真器使用说明


contents

ICE40 套件

ATICE40 套件包括下列物件：

  • ICE40 主模块/ pod / 两根FPC (通用印刷电路)电缆和 Probe
  • 适配器支持：
    • ATmega8
    • ATtiny26
  • 九针 RS232C 电缆
  • USB电缆
  • 电源
  • 欧式电源传输电缆
  • 美式电源传输电缆
  • 包含下述 Atmel AVR 技术资料的 CD ROM:
    • AVR数据手册
    • 应用说明
    • AVR Studio 4.00或更高版本
  • ICE40 快速入门手册

提示!
 AVR Studio 将不断进行版本更新。更多信息请访问我们的网站www.atmel.com。

请参阅


features

ICE40 功能特性

ICE40 在线仿真器是 Atme l公司推出的一款可以对多种 AVR 器件进行仿真的高端仿真器。使用 AVR Studio 4.0 或更高版本对 ICE40 加以控制。目前 ICE40 支持下列器件：

  • ATtiny26
  • Atmega8
  • ATtiny13

ICE40 具有下列功能特性：

  • 能够仿真所有数字和模拟的外围设备
  • 目标电压为2.2V - 5.5V
  • 满足所支持器件的频率要求
  • 监测功能
  • 跟踪缓存
  • 支持无限数目断点
  • 支持符号调试
  • 寄存器文件，SP，PC 和存储器完全可见并能访问它们
  • 能够访问所有 I/O 寄存器
  • 中止模式下可将 I/O 配置为运行或停止状态
  • 周期计数器


System Requirements

系统要求
硬件要求
为了使用 ICE40 ，需要主频233MHz（或更高），满足下列配置的奔腾系列个人电脑：
  • 64 M（或更大）内存
  • 用于安装 AVR Studio 的100 M 空余硬盘空间
  • CD-ROM 或 因特网接口
  • VGA 或更佳显示器
  • 显示器分辨率推荐1024x768
  • 16650 串行通讯接口（COM 接口）
  • AVR Studio v4.0 或更高版本
  • Acrobat Reader v4.0 或更高版本
软件要求
下列操作系统目前支持 AVR Studio：
  • Windows NT 版本 3.51
  • Windows NT 版本 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 设置为 波特率：115200 ，1位起始位，8位数据位，1位停止位，无奇偶检验，支持硬件握手协议，使用9针母型接头，并把 RTS 和 CTS 连接起来以支持硬件握手协议 。
  • USB 1.1，全速


General Description

总体硬件描述

这部分将给出一份简明扼要的仿真器描述，同时给出 ICE40 各部件更加详细的资料。

什么是在线仿真器？

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

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

  • 主仿真单元
  • POD 功能描述
  • Probe 功能描述
  • 个性化适配器
  • 测试适配器
请查阅
  • ICE40 仿真器使用说明
  • ICE40使用须知


Main Emulator Unit

主仿真单元

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

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

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

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

红色电源指示灯

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

绿色状态LED

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

多色模式LED

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

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

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

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

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

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

点击后面的链接获取关于 POD 的深入了解 POD 更详细的描述。

提示！
假若 POD 没有连接，ICE40 仍可以仿真 AVR 单片机的核心功能，例如：定时器。在一些调试过程当中，这项功能会十分有用。如果插入 POD 并且没有提供目标硬件电源，ICE 将保持复位状态知道目标电源打开。通过关闭在 ICE40 其他选项对话框里的 POR 和 BOD 复位选项，即使目标电源没有连接， ICE40 仍能正确地仿真。

扩展插口

扩展插口留作以后使用，不支持当前版本的 ICE40 。置于插口当中的 POD 是中空的 POD，用于保护扩展接口。

USB 接口

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

RS-232C 接口

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

复位按键

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

电源开关

电源开关是 ICE40 仿真器的主要开/关部分。将它键入关这档， ICE40 的电源关掉。但是 ICE40 将仍然与电源地连通。

电源接头

ICE40 系统的电源接头是标准的2，1毫米中心头的圆型座。地线需要接在中心头上。为了获取更多关于电源要求和工作环境的信息，请查阅 电源系统功能描述 部分。

  • ICE40 仿真器说明


个性化适配器 Description

个性化适配器功能描述

ICE40 支持所有种类的个性化适配器。这些适配器将 ICE40 POD 的引脚连线与它所支持的器件引脚联系起来。每个适配器都有其独有的认证码供 ICE40 和 AVR Studio 进行器件自动检测时使用。ICE40 包含下述几种个性化适配器：

t26 个性化适配器

m8 个性化适配器

SNR: A9902.3.1370.A

支持下列器件:

  • ATtiny26

SNR: A9902.3.1390.A

支持下列器件:

  • ATmega8

t13 个性化适配器

SNR: A9902.3.1430.A, .D revision of Probe

支持下列器件:

  • ATtiny13

重要提示:

ATtiny13 个性化适配器并未包含在 ICE50 套件中。该适配器必须单独订购。

每种适配器都有相应的插脚引线形式并且能够支持一种或多种AVR微控制器。下面的表格给出了每种个性化适配器能够支持的器件种类。

器件 | 所用个性化适配器名称:
ATtiny26 | t26
Atmega8 | m8
ATtiny13 | t13
将个性化适配器连接到 Probe

在将个性化适配器与 Probe 连接时，请确保 Probe 连接方位的正确性。连接器只有在板的方位正确时才能正确工作。在个性化适配器上有一个圈指出1脚的位置。如下图所示，请确保 Probe 上的圈与个性化适配器上的圈位置相对应。

t13 个性化适配器

t13 个性化适配器支持器件t13。标准的8脚0.300"宽，PDIP 封装。如果使用了其它封装形式的目标板，您需要从第三方购买其它符合要求的适配器。如 上图 所示，将个性化适配器与 Probe 连接时，请确保Probe上的圈与个性化适配器上的圈相对应。

t26 个性化适配器

t26 个性化适配器支持器件t26。标准的20脚0.300"宽，PDIP 封装。如果使用了其它封装形式的目标板，您需要从第三方购买其它符合要求的适配器。如 上图 所示，将个性化适配器与 Probe 连接时，请确保 Probe 上的圈与个性化适配器上的圈相对应。

m8 个性化适配器

m8 个性化适配器支持器件m8。标准的28脚0.300"宽，PDIP 封装。 如果使用了其它封装形式的目标板，您需要从第三方购买其它符合要求的适配器。如 上图 所示，将个性化适配器与 Probe 连接时，请确保 Probe 上的圈与个性化适配器上的圈相对应。

注意!
在改换适配器时，注意不要将个性化适配器的引脚弯曲或折断。仿真器和目标板的电源未关闭之前也不要进行个性化适配器的替换。

提示!
为了避免损坏适配器的引脚，我们将个性化适配器安装在一个标准的 DIP 插座上，这可以延长设配器的寿命。如果引脚弯曲或折断了，只要将插座替换掉就行了！

提示!
如果在目标应用板与个性化适配器之间需要更大的空间，这个 DIP 插座也可以提供您所需要的距离。注意尽量少使用插座。

请查阅

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


POD Description

POD 功能描述

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

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

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

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

复位输入

ICE50 的复位输入不同于真实器件的复位输入。这一点在使用 ICE50 进行仿真时是必须考虑的。复位输入电路的原理图如下所示：

数字输入输出口

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

交流电气特性

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

延迟时间 | 典型值(2V 目标板) | 典型值(5V 目标板)
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信号改变的时间 (高电平到低电平)

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

下图显示了三态/输入输出引脚上的时序。示意图下面的表格将给出一组典型的数据。

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

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

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

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

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

输出缓冲器的驱动能力是＋/－20毫安，3伏电压。这种驱动能力略微超过了实际器件的驱动能力。输入输出电路的工作电压范围是2VCC到5.5VCC。工作在2伏时，缓冲器能够吸收25毫安电流， 最高输出的低电平为1伏(VOLmax)。
输入缓冲器典型的门限电压为0.8v @ 3v VCC，1.2v @ 5.5v VCC。

直流电气特性

下面的结果是接220欧姆负载得到的：

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

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

常温（25℃）下，比较器内部门限电压的典型值为1毫伏，最大4毫伏。

模数转换器

下图所示是 ICE40 的模数转化方框图。

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

注意！ 使用该仿真器时，内部模拟参考电压应该设置在2.5伏。而实际器件使用2.56伏作为参考电压。因此，使用仿真器仿真模数转化时和实际器件得到的转化结果有所不同。

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

TWI 总线接口

下图所示是 ICE40 的TWI总线接口方框图。

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

请查阅

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


Power System Description

电源系统功能描述

电源

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

ICE40 电源系统

ICE40 拥有一个内部电压调整电路，为 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毫安

注意事项:
ICE40 POD 数字输入输出口的驱动能力和实际器件的驱动能力相比有细微的差距。详细信息请查阅 POD 的 数字I/O器件 描述。


Probe Description

Probe 功能描述

Probe 包含ICE40 的时钟驱动电路，电压极性，电路短路保护以及高速运行状态下的排队中止部件。下面是 Probe 的图片以及时钟驱动电路的简单框图。通过 Probe 上的时钟驱动电路（与仿真目标板相近），用户可以获得最佳的 AVR 时钟仿真效果。

注意

我们对 probe 重新进行了设计，目前有两个版本。下图所示即为当前版本。

帮助主题:

  • 极性保护与 ICE40 电源开关

  • 电流限制与过电压保护

Probe, 当前版本。支持个性化适配器m8,t126,t13。

可用时钟选项

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

ICE40 Probe A9902.3.1200.E 版本

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

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

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

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

外部时钟信号

外部时钟信号可以连接到 probe 仿真器的 XTAL1 引脚。可以设置仿真器使用该信号作为系统时钟信号的模式。请查阅 器件选择 获取更多操作说明。

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

  • 频率 ： 5KHz 到 20MHz

  • 占空系数 ： 50%

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

  • 推荐输入电压 ： 1.8 到 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 谐振器的详细描述。

外部晶振和外部谐振器

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

外部 RC 谐振器

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

请查阅

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


Connecting ICE40

连接 ICE40 进行仿真

这部分将说明如何将 ICE40 连接到 PC 主机和目标板。本任务可以分成下列几个任务：

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

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


Connecting Probe to Target

连接Probe到目标板

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

连接 PDIP 封装形式的适配器

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

将个性化适配器插在目标应用插座上。请确定个性化适配器的孔与目标板上的插针相匹配。

将 Probe 安装在个性化适配器上。Probe 上的圈与个性化适配器上的点位置应相互对应。

警告！

  • 每一次设计都需要警惕，保证 Probe 和 ICE40 pod 在错误放置时不被损坏。无论如何，选择错误的适配器或者将适配器错误地安放将导致 ICE40 的损坏。
  • 目标板处于上电状态时连接或断开 POD 或者个性化适配器将导致 Probe 和/或 POD 损坏。

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

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


Connecting ICE40 to Host PC

连接 ICE40 到 PC 主机

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

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

串行端口连接

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

AVR Studio 不能强制控制 COM 接口。一旦其他器件或者驱动软件控制了 COM 接口（例如： IrDA ，PDA 或者超级终端之类），PC 机和 ICE40 之间的通讯将失败。ICE40 连接到 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 连接

将 ICE40 连接到 PC 主机后，请继续 将Probe连接到目标板。

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


Power up sequence

ICE40 上电步骤

ICE50 正确连接到目标板和主机 PC 后就可以打开电源了。为了保证 ICE40 与 AVR Studio 之间的正确通信，我们建议您按照下列步骤操作。

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

请注意：即使您使用了其他的上电时序，器件并不会受到损坏，但是因为 AVR Studio 在启动时总是试图检测外围器件，如果此时 ICE40 未上电将不能被检测到。

当您完成上述上电过程后，您需要启动并 配置AVR Studio。

有关电源要求的更多信息请参阅 链接。

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


Configuring AVR Studio

在 AVR Studio 中配置 ICE40

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

本部分将被分为后面两部分：一部分是在设置 AVR studio 章节里面描述的快速入门指导，第二部分将在仿真器章节中进行详细说明。

  • AVR Studio 配置快速入门
  • 升级 ICE40 固件
  • 加载新器件到 ICE40
  • ICE40仿真器选项卡
    • 器件选择选项卡
    • 引导区选项卡
    • 其它选项
    • 中止模式选项
    • 堆栈监视器
    • 熔丝位
    • ICE 状态

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

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


Quick Start Guide

AVR Studio 配置快速入门向导

请按照下列步骤配置 ICE40。

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

  4. 如果一个新的工程被选中，请键入工程名。如果您想要您的汇编文件和工程名相同，请核对建立初始化文件。如果你想要建立一个和工程名相同的文件夹，请确定该选项。浏览该工程保存的地址。请看下图。

  5. 点击下一步按钮。现在选择 ICE40 作为目标然后选择需要仿真的器件。点击完成按钮结束向导。AVR Studio 现在已经可以使用。请看下图。被加载和可用的器件将呈高亮显示。如果您需要使用呈灰色显示的器件，您需要先加载它。请查阅 ICE40下载新器件相关说明。

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


Upgrading the ICE40 Firmware

升级 ICE40 固件

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

重要说明：ICE40 一般不能通过 USB 进行更新。您可以使用 UART 串口进行更新。在 AVR Studio 中选择菜单Tools ->ICE50 Upgrade。系统将弹出以下窗口：

该窗口提供两个选择按钮。‘Start Upgrade’ 按钮将启动 ICE40 的更新过程。

如果 'Skip Version check' 复选框被勾选，所有模块和器件将被升级。因为该操作将耗费30分钟甚至更多的时间才能完成，因此我们建议您在一般的升级过程中不要进行该操作。

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

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

提示！
如果在更新 COM MCU 的过程中由于某种原因更新过程失败，ICE 将停止响应 AVR Studio 以及更新程序。为了解决该问题，ICE40 引导程序必须复位。此时您需要进入程序系统菜单（单击左上角程序图标）选择‘复位引导装载程序...’

将弹出以下窗口：

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

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


Downloading New Parts for ICE40

为ICE40 加载新器件

ICE40 的固件和器件文件都保存在 ICE50目录下的 ICE50.dat 文件中。新版本的 AVR Studio 自带了最新的 ICE40 和 ICE50 的固件和器件文件。如果 ICE50 的数据文件中出现更新版本的ICE40 和 ICE50 的器件文件，器件文件将会自动更新。

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

请参阅


Device Selection

器件选择

  1. 在AVR Studio 当中选择 Debug->ICE40 选项。器件选择项将呈现高亮状态并且可以在其他器件的下拉菜单里面进行选择。注意左边各个器件的图标，点击该图标以后该器件将被装载到ICE40 里面。 ICE40 可同时容纳4个器件的器件文件。某些器件文件可能携带了两种器件的器件文件。右边的状态栏显示了此时 ICE40 包含多少器件文件。

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

  • 内部 XTAL 谐振器

  • 内部 RC 谐振器

  • 外部时钟

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

  4. 在频率下拉菜单里面可以进行器件频率选择。

另外在左下角有两个按键，一个是 ICE 复位键一个是默认设置键。请看上图。点击 ICE 复位键将进行ICE复位，而点击默认设置键将 ICE 设置为默认状态。ICE 复位键和 ICE40 板子后面的复位按键起着相同的复位作用。

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


Boot Block Options

引导区选项

在 AVR Studio 中选择调试->ICE40 选项。如下图所示：引导加载模块选项呈高亮显示。该选项卡提供4种下拉菜单。该菜单仅适用于带有引导加载模块的 AVR 器件。4种菜单分别是：

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

  2. 复位向量。提供应用或引导加载复位向量。

  3. 引导加密保护模式0，应用部分。提供4种可选模式。具体说明请参阅具体器件的数据手册。
  4. 引导加密保护模式1，引导部分。提供4种可选模式。具体说明请参阅具体器件的数据手册。

注意!
ICE40 需要AVR Studio 4.0 或更高版本支持。但不兼容AVR Studio 3.x。

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

请参阅


Other options

其他选项

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

在 AVR Studio 当中选择 Debug->ICE40 。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 检测电压值。请查阅相关手册。

复位禁止熔丝位(RSTDSBL Fuse):

  • 选择该选项将复位引脚作为通用输入输出引脚。该选项只适用于存在该熔丝位的器件。

禁用XTAL2时钟源：

  • 选择该项将禁止在 XTAL2 引脚上输出时钟。默认情况下该功能使能。

另外在左下角有两个按键，一个是 ICE 复位键一个是默认值设置键。请看上图。ICE 复位键是进行 ICE 复位，而默认值设置键将ICE设置为默认状态。ICE 复位键和 ICE40 板后面的复位按键起着相同的复位作用。

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


Stop_mode_options

中止模式选项

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

中止模式选项是在 ICE40 选项里的 “stop mode options” 选项卡里设置的。选项卡如下所示。

通讯模块

USART.

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

SPI.

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

TWI.

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

定时器模块

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

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

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

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

  • 选择“中止模式下的异步/同步时钟”使所有时钟运行在终止模式。

中止模式下的 PWM 输出

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

  • 如果时钟使能在中止模式下运行，所有被该时钟驱动的已使能 PWM 通道将被自动设置为中止模式。

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

  • 普通： 选择该选项，PWM 将输出 ICE 在运行模式下的波形。

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

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

中断禁止

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


Stack_monitor

ICE40 堆栈监视器

什么是程序堆栈？

什么是数据堆栈？

ICE40 程序和数据堆栈监视器

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

堆栈监视器选项

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

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

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

什么是程序堆栈？

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

什么是数据堆栈?

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

ICE40 程序和数据堆栈监视器

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

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

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

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

建立程序和数据监视器

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

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

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

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

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

数据堆栈监视器监视 AVR Y 寄存器的值。大多数 C 编译器使用该寄存器访问数据堆栈。针对那些使用单字节数据堆栈指针的器件，AVR Stuido 将自动设置 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

堆栈监视器选项

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

对话框如下图所示。

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

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

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

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

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

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

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


Fuses

熔丝位和加密熔丝位

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

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

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

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

提示。ICE40 并不支持所有的熔丝位设置。下面的熔丝位将不能设置：

  • OCDEN。ICE40 不支持在线芯片调试。

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

  • EESAVE。该熔丝位设置不适用于 ICE40。

  • JTAGEN。该熔丝位设置不适用于 ICE40。

加密熔丝位

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

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


ICE Status

ICE 状态

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

不同的 FPGA 设置文件和 PCB 硬件版本将以报告的形式给出。

提示!

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


Emulating with ICE40

使用 ICE40 仿真

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

  • 使用 AVR Studio 仿真

  • 脱离 POD 仿真

  • 脱离目标电源仿真

  • 带目标电源仿真

  • 复位，外部复位或者掉电复位过程仿真

  • 存储器非法访问检测

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


Emulation with or without POD and target power

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

脱离 POD 仿真

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

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

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

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

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

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

仿真上电复位，外部复位和掉电检测 （BOD）复位过程

在 ICE40 上您可以仿真所有外部复位源。 启动一个新的工程时缺省地 POR 与 BOD 复位功能被禁止。

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

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

如果您在弹出信息中单击按钮“YES”，将脱离复位源进行仿真。 请注意如果您的电源未连接，所有IO将不能工作。

请查阅

  • ICE40 仿真器使用说明

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


Detection of illegal memory access

存储器非法访问检测

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

如果您已经在 ICE40 选项卡 中设置了这项功能，所有器件的 EEPROM 和 SRAM 的地址线将为16位。现在对 SRAM 和 EEPROM 的越界访问，ICE50 将不会 与 AVR 芯片一样像上述那样处理了。当然最好不要出现越界访问。在没有出现越界访问时，设置这项功能并不会使ICE50与AVR芯片有所区别。

缺省地如果出现越界访问，ICE40 将产生一次中断。您可以在 ICE40 选项卡->其它选项 中禁止这项功能。如果这项功能被禁止，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 的器件，取决于在 ICE40 选项->其他选项中的设置。如果你选择不仿真 XRAM，所有内部 SRAM 后面的空间被定义为非法地址。如果在 ICE40 内部或者目标板上仿真 XRAM，所有的 SRAM 和 XRAM 空间将被视为合法地址。

非法 EEPROM 地址的定义。

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

请参阅

  • ICE40 选项卡->其它选项。
  • ICE40 仿真器使用说明

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


ICE40 Upgrade and Selftest

ICE40 升级与自我检测

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

  • ICE40 升级

  • 为 ICE40 加载新器件

  • ICE40 自我检测

  • ICE40 测试适配器描述

  • 降级 ICE 固件

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


ICE40 selftest

ICE40 自测功能

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

自测

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

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

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

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

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

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


Test Adapter Description

测试适配器

如下图所示：ICE40 自带有测试适配器。

SNR: A9902.3.1400.B, .D probe revision.

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

  • 模拟比较器

  • 模数转换

  • I/O引脚

  • 双总线(TWI)接口

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

将测试适配器连接到 probe。适配器将对 ICE40 Pod 供电，不需要连接其他电源。

提示！
搬运和储存时请使用测试器 rev D 以保护 ICE40 probe。

注意!
ICE40支持AVR Studio 4.0或更高版本，但不兼容版本 AVR Studio 3.x！

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

清查阅


Downgrading the ICE40 Firmware

降级 ICE40 固件

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

  1. 为了降级您的 ICE40 以获得一个较低的版本，您需要 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. 您的降级过程现在完成了。


Trace Buffer

ICE40 跟踪特性

ICE40 包括一个144位宽，128K 长的跟踪缓冲区。本文档描述的是 AVR Studio 跟踪缓冲区的内容。

帮助主题：

  • 跟踪指南
  • 跟踪窗口
请查阅
  • ICE40 仿真器使用说明
  • AVR Studio 使用说明


Special Considerations

特别说明

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

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

  • 电气兼容性

  • 休眠模式

  • 目标 板硬件要求

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

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


Clock Options

时钟选项

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

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

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


Differences Between Emulator and Part

仿真器与实际器件的差别

概述:

  • ADC 内部参考电压是2.5伏而不是在实际器件当中的2.56伏。
  • 实际器件的复位输入和 ICE40 的复位输入之间存在差别。请查阅 复位输入 的描述。
  • SRAM 和 EEPROM 的地址总线是16位的以便 Atmega8 方便地 中断非法存储器访问。ATtiny13， ATtiny26 是例外，它们的 SRAM 和 EEPROM 的地址总线是8位的。

带复位禁止熔丝位器件:

    • 在 ICE40 POD 的复位引脚上面存在一个上拉电阻。如果进行了复位禁止熔丝位烧写，那么该复位引脚将作为通用的输入输出引脚，然而上拉电阻仍然有效。

Atmega8

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

ATtiny26:

  • 在 ATtiny26 当中 PLL 时钟频率大概是64MHz，在 ICE50 里面是66MHz并且设置 OSCAL 寄存器对并不会影响 ICE50 的 PL L时钟。

提示!
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.2V | 5 mA, 7 mA
2.5V | 5 mA, 7 mA
3.3V | 20 mA, 30 mA
5.0V | 85 mA, 125 mA
5.5V | 110 mA, 165 mA

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


Trouble Shooting

故障排除向导

升级ICE50

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

  • 如果升级 COM MCU 的过程中升级失败，请查阅 "复位引导装载区" 重新了解如何连接 ICE。

ICE50测试程序

  • 测试过程可能失败，并会弹出下列信息: "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 etc。如果已经使用了 USB 连接，请在使用串口前复位ICE。
  • 关闭再打开电源，重新启动 AVR Studio。
  • 请勿使用串行 I/O 卡或连接有串行适配器的 USB。
  • 使用 USB 连接，请确定 USB 驱动已正确 安装。

请参阅


Trace Buffer Contents

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

一些解释使用数字，这个数字表明指令执行的周期数(只对多周期指令重要)。标号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查阅更新。

请查阅
  • ICE40 仿真器使用说明
  • AVR 指令设置