ICE200 In-Circuit Emulator User's Guide

在线仿真器ICE200使用说明

此用户说明可以作为在线仿真器 AVR ? ICE200™的参考手册。这一部分文件简要地介绍如何使用ICE200，同时也为高级用户提供一份详细的参考。

在本手册中，相关的AVR单片机型号都是以简称形式出现的，例如：AT90s2313简称为S2313等等。

该指南是写给已经安装了AVR Studio2.00版或更高版本，且对其用户界面相当熟悉的用户看的。

概况
关于该手册
使用说明
ICE200的特征
ICE200开发套件
系统要求
总体概述
总体概述
ICE200使用说明
ICE200的使用
硬件要求
电源和信号的运行条件
时钟参数
个性化适配器
Tiny12/13适配器的特别设置
与目标板的连接
配置
配置选项设置
特别说明
特殊注意事项
外部复位
休眠指令
看门狗定时器
EEPROM
访问I/O端口
访问16位I/O端口(定时器1和ADC)
附录
仿真AT90S1200和ATtiny10/11
故障排除


ICE200 User's Guide: Introduction

使用说明
Atmel公司的ICE200在线仿真器是最易使用的高端AVR微处理器调试系统。它能直接仿真9种不同的芯片，间接仿真3种芯片，总共支持调试仿真12种AVR和Tiny系列的芯片。

ICE200的主要原则是提供一个简单易用的调试仿真平台，减小仿真器和芯片在实际运行上的差异。ICE200使用了最新的专用仿真芯片AT90EM04，它提供与芯片相同的电气参数，这样就能像实际芯片运行过程一样运行，却不会对硬件产生影响。板上调试资源确保仿真软件不受影响。ICE200硬件提供了一套自动配置系统，这使得仿真器与目标板的连接变得很轻松。

在AVR Studio的调试环境下，ICE200提供给用户全速运行控制，无限个断点，符号化调试和完全可见存储器和寄存器。ICE200可以以多台方式同时在AVR Studio中工作，其使用数量仅受到可用串口数的限制，具有高度灵活性。

请参阅

  • 在线仿真器ICE200使用说明


ICE200 User's Guide: About this Manual

关于该手册
警告
在这个ICE200用户使用手册中介绍了一些防止破坏您的目标板系统和仿真器ICE200的重要警告，所有警告按下例所示的方式加以突出强调。
警告！
这是一个警告...

请仔细阅读所有警告。

提示
在这个ICE200用户使用手册中介绍了一些使用ICE200过程中的技巧，这些都会按下例的方式加以突出强调。

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

清单
当您已经熟悉“目标板的连接”和“配置”部分的详细情况并熟悉ICE200的使用后，您可以通过在这些部分最后的列出的清单快速的创建一个新工程。这清单对于在线调试正确运行有很大帮助。但是初学者应该确保目标板的工作状态满足ICE200使用要求，这些在ICE200使用说明详细描述了。

有关资料
下面列出的Atmel公司提供的电子文档都与AVR单片机和调试工具有关，都能够在与ICE200仿真器配套的CD中找到。欲知更多详细信息和资料更新，请关注 www.atmel.com。

  • AVR Studio用户使用说明。
    详细描述了如何使用AVR Studio调试环境。
  • WAVRASM用户使用说明(AVR Assembler)....
    详细描述了如何使用AVR汇编。
  • 各种AVR芯片的数据手册。
  • 各种AVR芯片的勘误表。
  • 描述了AVR芯片的不同应用实例的应用笔记。
    详细描述了如何使用AVR Studio的调试环境。


ICE200 User's Guide: Using the ICE200

ICE200的使用
在打开ESD保护包前，请先确保您和您的工作环境中不带静电干扰。通常在使用ICE200时要配套使用ESD保护工具和工作服。而且，接地的手腕带和防静电工作平台能起到更加有效的ESD保护效果。应将ICE200看作普通CMOS元件，如同对待CMOS芯片一样。
警告！
ICE200对ESD(静电)很敏感，请不要在没有ESD保护的环境下使用ICE200。

不使用ESD保护有可能导致永久性损坏或性能下降。


ICE200 User's Guide: Features

ICE200的特征
  • 支持的芯片
    ATtiny12
    AT90S2313
    AT90S2333/4433
    AT90S4414/8515
    AT90S4434/8535
    ATtiny10/11(使用ATtiny12适配器)
    AT90S1200 (使用AT90S2313适配器)
  • 使用AT90EM04仿真芯片
  • 支持8MHz((+4.0V到+6.0V)的AT90EM04
  • 宽的目标板电压范围(+2.7V到+6.0V)
  • 仿真芯片与目标板靠近使用能提供优良的AC特性
  • 优良的抗干扰特性
  • 确保安全使用目标板电源.
  • 支持各种不同芯片的个性化适配器
  • MCU的一步一步运行可以通过主机上的32位循环计数器来计数
  • 在停止状态下(运行到断点时)I/O继续运行
  • 在单步运行代码情况下，计数器即可单步运行也可连续运行

AVR Studio调试环境有如下新增功能：

  • 运行控制：运行(run)，断点(break)，跟踪(trace into)，单步跳过(step over),单步跳出(step out)，运行到光标处( run-to-cursor)，自动单步(autostep)，多步运行
  • 无限断点数
  • 符号化调试
  • 可查看和访问寄存器，SP，PC和内存区
  • 可访问所有的I/O寄存器(请看“特殊情况考虑”的第21页)
  • 自动记录点(非实时记录/观察)


ICE200 User's Guide: Kit Contents

ICE200开发套件
ICE200开发套件：
  • ICE200主板/POD/两个FPC(柔质印刷电缆)
  • 个性化适配器：
    • ATtiny12/13 (8针DIP)
    • AT90S2313 (20针DIP)
    • AT90S2333/4433 (28针DIP)
    • AT90S4414/8515 (40针DIP)
    • AT90S4434/8535 (40针DIP)
  • 9针RS232C电缆
  • Atmel产品资料CD，包含：
    • AVR芯片的数据手册
    • 应用笔记
    • AVR Studio 2.00版本
    • WAVRASM AVR Assembler 1.30版本
  • ICE200用户使用说明
可选择的扩展件：
  • 针对SOIC和TQFP(SMD Kit)封装的个性化适配器
  • 可选择的串口/并口下载适配器(PROG Kit)


ICE200 User's Guide: System Requirements

系统要求
硬件要求
为了使用ICE200，推荐您的电脑要满足以下配置要求：
  • 64M内存及以上
  • 15M空余硬盘空间
  • CD-ROM或因特网接口
  • VGA 显示器或更好的显示器
  • 16650串行通讯接口(COM 接口)
  • 安装AVR Studio v2.00 或更高版本
  • 安装Acrobat Reader v3.01 或更高版本(可选择)
软件要求
AVR Studio在可下列操作系统支持下运行：
  • Windows NT 3.51版
  • Windows NT 4.0版
  • Windows 95
  • Windows 98
  • Windows 2000
  • Windows XP
注意：AVR Studio将不断升级以适合新的操作系统和不同版本的操作系统。查看AVR Studio使用说明获取最新信息。

工作环境

  • 工作温度：0℃－70℃
  • 工作湿度：10 - 90 % RH (非冷凝状态)
  • 工作电压：+9.0V DC，400mA
警告！
改变ICE200推荐使用的工作环境将可能引起运行错误并且损坏仿真器。

主机接口
RS-232C @ 波特率：19200 bps, 1位起始位，8位数据位，1位停止位，无奇偶检验，使用9针孔型接头。


ICE200 User's Guide: General Description

总体概述
下图给出了简单的ICE200连接目标板的方框图。其中包括电源和PC主机。

主板包含存放被仿真的应用程序存储器(重叠存储器)，以及与PC通讯的逻辑电路和断点设置电路。由于使用了电平转化电路，仿真器和目标板可使用不同电压的电源。电平转换电路也能起到保护作用，防止由于只有仿真器或目标板其中的一个通电而造成两者的损坏。鉴于此特点，仿真器和目标板就无需按照严格的上电顺序来上电。

FPC或柔质印刷电缆连接到ICE200的插座上。实际上的FPC可能与上图显示的不同。

警告！
主板和插座上的FPC接口都有使用寿命，请不要频繁的将其从主板或POD上断开。

POD板上包含AT90EM04仿真芯片。该芯片包含9种不同的AVR芯片和一些特殊的仿真资源。由于AT90EM04处在更加接近目标板的POD板上，所以电气参数能更接近于被仿真的实际芯片。请注意AT90EM04要从目标板上获得电源和时钟振荡源(例如，晶振，陶瓷振荡器，振荡器或其他时钟发生源)。

个性化适配器将AT90EM04的引脚连接到它支持的单片机插座上。适配器上有一个标识码，AVR Studio将根据该标识码自动检测仿真芯片的型号。ICE200开发套件配备五个不同的个性化适配器，适合不同的双列直插式封装(DIP)的芯片。下面是AT90S8535适配器图。


ICE200 User's Guide: Hardware Requirements

硬件要求
目标板硬件，如实际应用系统必须包含电源和时钟源。仅当以上条件满足，ICE200才能正常工作。请注意仿真器同样支持内置的RC振荡的Tiny12/13芯片。

提示！
你可以通过使用ICE200把AVR开发板(ATMCU00100 or ATSTK200)当作独立的仿真平台。

在下两节将列出推荐使用的运行条件。这些运行条件也适用于标准的AVR芯片。


ICE200 User's Guide: Power and Signal Operating Requirements

电源和信号的运行条件
推荐使用的电源和信号运行参数
符号 | 最小值 | 最大值
VCC | 2.7V | 5.5V
AVCC | VCC | VCC ± 0.3V
AGND | GND | GND
AREF | AGND | AVCC
VSI (单电源输入) | -0.5 | VCC + 0.5
VRESET | GND | VCC

注意：

  1. 当VCC < 2.3V时，AT90EM04将复位，并断开与程序存储器的连接。
  2. 使用ICE200仿真时，在复位RESET脚上不能施加编程的+12V电压（只有对实际芯片采用高压并行编程时，才能在复位RESET脚上施加+12V电压）。


ICE200 User's Guide: Clock Driver Conditions

时钟驱动参数
即使AVR芯片属于完全静态的设计，处理器的时钟可由外部停止，但AT90EM04如果没有时钟系统，仿真器将无法与ICE200主板通信。这将导致当PC主机从仿真器读取状态或变量时，串口通信的超时。请仔细阅读要仿真芯片的数据手册上的关于系统时钟选择的部分。

推荐使用的运行参数，系统时钟频率(+4.0V to + 5.5V)

符号 | 最小值 | 最大值
fosc (ATtiny12/13) | 32.768 kHz | 8 MHz
fosc (AT90S2313) | 32.768 kHz | 10 MHz
fosc (AT90S4433/2333) | 32.768 kHz | 10 MHz
fosc (AT90S8515/4414) | 32.768 kHz | 8 MHz
fosc (AT90S8535/4434) | 32.768 kHz | 8 MHz
注意： TA = 0°C to 70°C, VCC = +4.0V to + 5.5V, GND = 0V

推荐使用的运行参数，系统时钟频率(+2.7V to + 4.0V)

符号 | 最小值 | 最大值.
fosc (ATtiny12/13) | 32.768 kHz | 4 MHz
fosc (AT90S2313) | 32.768 kHz | 4 MHz
fosc (AT90S4433/2333) | 32.768 kHz | 4 MHz
fosc (AT90S8515/4414) | 32.768 kHz | 4 MHz
fosc (AT90S8535/4434) | 32.768 kHz | 4 MHz
注意： TA = 0°C to 70°C, VCC = +2.7V to +4.0V, GND = 0V
警告！
使用推荐以外的参数将可能导致运行运行错误并损坏仿真器。


ICE200 User's Guide: Personality Adapters

个性化适配器
ICE200配有五个不同的个性化适配器，每个适配器都能与一个或两个AVR芯片的引脚相对应。所有适配器上都标有引脚数和所支持的仿真芯片型号。ICE200能自动检测所连接的适配器，并正确初始化AT90EM04，是其与被仿真的芯片相一致。

提示！
您可以在适配器上增加DIP插座，以扩大适配器和目标板之间的空间。但是，外部插座的数量必须保持在最小。

如果您使用的AVR芯片是贴片封装器件（SMD），您需要有一个SMD适配器，它能将DIP转成SOIC/TQFP/PLCC形式，这种适配器有多家供应商可以提供，但最经济的方法是使用ICE200的SMD适配器套件，该套件中有多种SMD适配器，支持SMD封装的AVR芯片。

警告！
在没有关闭仿真器和目标板电源的情况下，请不要随意更换个性化适配器。

下图是AT90S8535/4434的适配器。

下表是ICE200所使用的适配器与芯片的配套参考：

适配器 | 支持芯片
ATadap3000 | AT90S4414, AT90S8515
ATadap3100 | AT90S4434, AT90S8535
ATadap3200 | AT90S4433, AT90S2333
ATadap3300 | AT90S2313
ATadap3400 | ATtiny12

清参阅


ICE200 User's Guide: Special Tiny 12/13 Personality Adapter Settings

Tiny12/13适配器的特别设置
Tiny12/13芯片具有特殊特征的振荡器引脚。由于AT90EM04要支持多种AVR芯片，所以它本身不支持特殊特征的振荡器引脚功能。然而，通过改变适配器板上两个零欧姆电阻的位置，即端口与晶振引脚间的映射关系，则可以实现对特殊的振荡器引脚的仿真。电阻的位置如下图所示。

根据所需的时钟设置来决定是否使用电阻。可以按照下面的列图表来选择电阻的设定方式。默认的出厂电阻设置为内部RC振荡。

警告！
该个性化适配器板上有另外的四个附加电阻。它们的用途是在自动配置时作为标识码，并可用于产品测试。请不要任意去除这些电阻！


ICE200 User's Guide: Special Considerations

特殊注意事项
尽管ICE200对它所支持的AVR芯片能进行很精确的仿真，但仍有一些不同的地方需要引起注意，主要的不同在于控制程序运行流程方面，如采用单步运行等等。程序运行控制其实是对MCU正常功能的扩展，以便于用户进行调试。这种扩展必须不能对正常程序的执行(运行模式)产生干扰。但当程序停止(停止模式)后再重新运行或单步运行时，在某些情况下有可能会使程序的功能受到影响。


ICE200 User's Guide: Connecting to the Target Application

目标板的连接
在这一节介绍仿真器的建立步骤，并在最后会给出一个快速安全建立起系统的检查清单。

1. 在连接ICE200和目标板前，以及将ICE200同目标板断开前，应确保ICE200和目标板都没有上电。同样这也适用于当连接和断开ICE200和PC的情况，需确保ICE200和PC都没上电。

2. 着手连接个性化适配器，请参见下图。要确保适配器上的插头与目标板上的插座对齐。

3. POD板与适配器的连接见下图。插座和适配器只有一种连接方式，不要用力插拔。

4.将柔质印刷电缆FPC连接POD板和主板，如下图所示。注意FPC有字的一面要向上。

5.关掉PC，使用9针RS232C电缆连接ICE200和PC。ICE200连接电缆的插针接头，PC连接电缆的插孔接头。注意ICE200不支持热插拔技术，例如不能将ICE200连接到已开机的PC上。

6. 打开PC，运行AVR Studio。但是在ICE200上电前不能打开任何文件，如果ICE200没有上电，AVR Studio是不能检测到仿真器并进入仿真模式的。

7. ICE200没有电源开关。将ICE200配备的电源电缆到+9V DC电源上，然后与ICE200连接(见下图)。下图中的电源稳压器在实验室中是一种很好的选择。确保电源能提供至少400mA的电流。

8.打开目标板电源。红的电源指示灯即刻点亮，表明电源已经开启，但是与PC的通信还没有建立。

硬件已经准备好了。使用下面的清单检查是否已正确连接好硬件，然后请看下一节：ICE200的配置。

清单

1. 在连接前关掉所有部分的电源。
2. 插入个性化适配器。
3. 适配器和目标板的连接要对齐。
4. 装上POD板。
5. 插入FPC。
6. 连接RS232电缆线。
7. 打开PC。
8. 打开目标板和ICE200的电源。


ICE200 User's Guide: Configuration

配置
在ICE200连接到目标板之后，下一步是对设备中你使用的部分进行配置。这在第一次打开应用程序的工程文件时是必须做得，以后也可在仿真器选项菜单栏中进行修改。配置情况保存在与应用程序同一个目录下一个单独的文件( [project name].avd )中。

快速启动
下面将具体介绍ICE200的配置步骤

1. 按前一节的介绍连接好ICE200，并启动运行AVR Studio。

2.打开目标文件。如果文件是第一次打开，AVR Studio会自动弹出配置操作窗口，见下图。这时，指示连接的红色LED灯将灭掉，说明ICE200与PC已经建立了通信。

3. 建立有效的配置。详细配置将在下一节介绍。然而在大多数情况下，由对个性化适配器自动识别功能所得到的缺省值已经足够了。

4. 按下OK键。

5. ICE200准备好了。

提示！
要改变当前工程文件的配置选项，请选择Emulator Options菜单下的Option选项。

对于高级用户，请参看配置设置一节内容，其中详细的介绍了在Option菜单中的可能设置项目。

此时软件也准备好了。使用下面清单检查确定设置的正确。接下来就可以调试了。

提示！
如果仿真器没有连接到AVR Studio上，确保串口没有被其他设备占用。

清单
1. 所选择的个性化适配器要与被仿真器件相适应。
2. 正确连接目标板和仿真器(按上面介绍的)。
3. 当打开应用程序时，AVR Studio能检测到仿真器。
4. 在打开源程序时会弹出ICE200的Option菜单(仅在第一次)。
5. 在Option菜单中显示的芯片是你要仿真的芯片类型。
6. 在AVR Studio的状态栏中（窗口的右下角）出现了仿真器图标。


ICE200 User's Guide: Configuration Settings

配置选项设置
芯片设置
有些芯片具有相同的引脚，比如AT90S8515和AT90S4414，可以使用同一个适配器来仿真。自动检测适配器的功能可以确保AT90EM04与被仿真芯片的引脚相同，但还要选择和指定特定的芯片，因此需要进入仿真器选项菜单中，从芯片列表中选择所要仿真的芯片型号。

时钟选择设置
许多AVR芯片有设定复位启动延迟时间的熔丝位，复位启动延迟时间对于时钟振荡达到稳定是必要的。时钟振荡稳定所需的时间与使用的晶振或陶瓷振荡器有关。如果使用外部时钟源，复位启动延时时间可能仅需要几个时钟周期。复位启动延时熔丝位(CKSEL/FSTART)在实际芯片中可通过并行或串行编程方式来设置或清除，在仿真器中，它们在Option菜单中设置。

欲知更多复位启动延时熔丝位的详细内容请参阅数据手册。

定时器单步调试设置
一旦选中该项，则允许对定时器进行单步的调试。如果不选择该项，即使程序由于用户中断或断点而停止，定时器仍然会继续计数(如果使能)，所有的外围功能(SPI/UART/EEPROM/PORTs)仍能继续运行。

这一特点允许对计数器一个周期一个周期的进行调试，这对事件计时是非常有用的。但是在许多情况下，在调试过程中停止计数器并不是我们所希望。例如：在使用定时器的PWM模式时，停止定时器会造成由PWM信号控制设备的损坏。

EEPROM保存设置
一些AVR芯片有片内EEPROM存储单元。ICE200通过AT90EM04芯片内的SRAM来代替仿真EEPROM。这样减少了写入EEPROM时的时间，但同时也会产生些新的问题，就是由于数据存储在SRAM中，一旦掉电数据将丢失。

掉电丢失数据的解决方案是，首先选择EEPROM保存选项。在断开电源前，通过按下EEPROM快速印象(snapshot)按键将EEPROM内的数据存储起来。当电源关掉然后又开启时，ICE200在程序运行前将存储缓冲的数据重新存入SRAM中。

复位引脚设置(仅对ATtiny12/13而言)
当选择ATtiny12芯片时，在仿真器选项对话框中会多出一条选项。ATtiny12和ATtiny13有编程熔丝位，可将RESET引脚(PB5)设定作为一个输入引脚。当RESET引脚被设置为输入引脚时，芯片仅能上电复位。关于ATtiny12/13的更多详细资料请参阅数据手册。


ICE200 User's Guide: External Reset (Special Considerations)

外部复位(特别说明)
仿真芯片AT90EM04的复位引脚必须是由ICE200主板来控制的，所以一个外部复位源必须要经过下图的逻辑电路，由POD板和主板处理和控制。

主板使用5V电源，而POD板使用目标板上的电源，因此，在两个系统之间有个一个电压转换系统。这部分转换电路的延时很小，大多数情况下可以忽略。注意电压转换器不能处理用于并行编程的RESET引脚上的+12V输入。

上电后，在配置AT90EM04期间，复位被强制有效，延迟时间为1-10ms。

注意！ICE200仿真器复位线上没有内部上拉，所以为了正确复位，必须在复位端上加上外部上拉电阻。


ICE200 User's Guide: Sleep Instrucion (Special Considerations)

休眠指令(特别说明)
如果执行休眠指令，AT90EM04将进入一种低功耗状态(掉电模式，休眠模式或空闲模式)。与实际芯片相比，这时在仿真器中电源消耗稍大些，主要是因为仿真器比实际芯片复杂。在室温(25°C)下，差别不大。

当AT90EM04进入低功耗模式时，仅可通过目标板上外部中断，或外围电路的中断(不是使用掉电模式)以及AVR Studio或复位引脚复位来唤醒休眠状态。这有个问题，就是当系统的调试没完成就不能进入中断。

注意！在AVR Studio中，目标板频率值是通过循环计数器计算后显示出的。当仿真器处于一种低功耗状态(休眠)时，计数器会停止，这时所显示的频率值是不准确的。

提示！
当调试程序时，你可是使用一条宏定义NOP指令来代替SLEEP指令。

IAR C的举例：

#ifdef SLEEPEMU
   #define SLEEP() _SLEEP()
#else
   #define SLEEP() _NOP()


ICE200 User's Guide: Watchdog Timer WDT (Special Considerations)

看门狗定时器 WDT(特别说明)
看门狗定时器能异步复位系统(它有自己的时钟)。如果看门狗定时器使能的话，清看门狗指令在停止模式下会不断执行，以防止看门狗错误溢出。ICE200不支持使用单步调试方式或使用停止方式来实现对WDT精准时间行为的仿真。

WDTTOE(关WDT使能)位用于安全可靠的关闭WDT。下面是一个关闭WDT的汇编举例，它给出了关闭WDT正确的顺序：

disableWDT:
   ldi  r16, (1<<WDTTOE) ; 关闭WDT允许位置1
  (cli)                  ; (如果有使用中断时需要使用)
   out  WDTCR, r16
   ldi  r16, (1<<WDE)    ; 在四个周期内清除WDE位
   out WDTCR, r16
done:
  (sei)                  ; (如果有使用中断时需要使用)

在停止模式下，AT90EM04是不支持关WDE的所限定的四个时钟周期时限的。这就意味着，使用单步调试方法运行这段程序时，并不能关闭WDT。

提示！
你不能使用单步运行的方式，但可以使用运行到光标处（run to cursor）的方式，一次让程序连续运行到清除WDT允许位指令以后的指令处（如上例的标号done处），或者使用下面的宏定义(只对于AVR汇编有效)。

宏定义：

.macro disableWDT
   ldi  r16, (1<<WDTTOE)
  (cli)
   out  WDTCR, r16
   ldi  r16, (0<<WDE)
   out  WDTCR, r16
  (sei )
.endmacro
使用方法：
   disableWDT


ICE200 User's Guide: EEPROM (Special Considerations)

EEPROM(特别说明)
在写数据到AVR芯片里的EEPROM时，要按照一个规定的顺序才能保证数据正确的写入。下面是个写EEPROM的汇编举例：
writeEEPROM:
   ldi   r16, (1<<EEMWE)     ; 设置EEPROM读写使能位使能
  (cli)                      ; (如果有使用中断时需要使用)
   out  EECR, r16
   ldi  r16, (1<<EEWE)       ; 在四个周期内置位EEWE
   out EECR, r16
done:
  (sei)                      ; (如果有使用中断时需要使用)
在停止模式下，AT90EM04不支持写EEPROM所限定的四个时钟周期时限，所以单步运行上述程序时，不能正确的写入EEPROM。

提示！
你不能使用单步运行的方式，而是使用运行到光标处（run to cursor）的方式，一次让程序连续运行到置位EEPROM写允许位指令以后的指令处（如上例的标号done处），或者使用下面的宏定义。定义宏时，在宏的开始处和结尾处必须使用中断控制指令定义cli和sei。

宏定义：

.macro writeEEPROM
   ldi   r16, (1<<EEMWE)
  (cli)
   out  EECR, r16
   ldi  r16, (1<<EEWE)
   out EECR, r16
  (sei)
.endmacro
使用方法：
   writeEEPROM


ICE200 User's Guide: I/O Port Access (Special Considerations)

I/O端的访问(特别说明)
单步运行时，改变PORT的值会有产生特别情况，如下例所示：
write_with_readback:
   ldi    r16, 0xFF  ; 设置所有引脚为输出
   out    DDRx,r16   ; -"-
   out    PORTx, r16 ; 设置PORTx的值
   in     r16,PINx   ; 读PINx的值
   in     r17,PINx   ; 读PINx的值
当ICE200或实际芯片全速运行上述程序时，r16中的返回值并不会马上更新为程序第一行中的所写的值，仍为对端口进行写操作的前一个周期的端口引脚值，这种情况是正常的。由于I/O引脚是同步更新的，故而必须有一个时钟周期延时来防止port端口因不稳定而产生错误，所以在上面例子中，r17回读值为有效的PORTx的值。但在单步调试运行时，一旦指令单步执行后，端口的值能立即发生变化，所以r16也能回读倒正确的值。

当ICE200停止工作时，在AVR Studio中改变I/O端口的值不会产生任何问题的。但是需要注意，在单步运行时，端口引脚值的改变是实时的。

显然，这不是一个真正意义上的问题，但弄清楚以上两种情况下所产生的影响是十分重要的。一旦忽略，一个出错的程序有可能在仿真器上运行正常，而在实际芯片上是根本不能工作的。


ICE200 User's Guide: 16-bit I/O Access (Timer1 and ADC Special Considerations)

16位I/O端口的访问(定时器1和ADC的特别说明)
直接从AVR Studio中读取或写入16位的值会引起一些问题。例如，如果要读取定时器1，16位的计数器值时，它的其中一个字节是被存储在一个临时寄存器中的。因此，当程序运行停止时，读取16位的值会造成临时寄存器里的内容被破坏。

提示！
在使用符号化调试时，可采用下面的宏定义(仅对AVR的汇编有效)来解决这一问题。在宏定义的开始和结束处加上中断控制 cli 和 sei 指令。

宏定义：

.macro outw
  (cli)
   out    @2, @0
   out    @2-1, @1
  (sei)
.endmacro
.macro inw
  (cli)
   in     @2, @0-1
   in     @1, @0
  (sei)
.endmacro
使用方法：
   inw    r17, r16, TCNT1H      ; 读计数值
   outw   TCNT1H, r17, r16      ; 写计数值
当在C中使用符号化调试时，每次执行是一个整行的C代码，所以在真实芯片中不会发生上面16位寄存器的读和写问题。


ICE200 User's Guide: Troubleshooting

故障排除(附录)
如果您在安装AVR Studio，连接或配置仿真器时出现问题，首先要根据前几小节给出的清单确保您的安装或连接步骤正确。

反馈和支持
为能获得解决问题的正确方法，在您的帮助请求中需包含以下细节：

ICE200 / AVR Studio：

  • 您使用的ICE200的版本号
  • 操作系统，内存总量等等与平台有关的信息
  • 能重复出现问题的一小段独立的代码
  • 详细说明这段程序你希望得到的结果，以及实际的结果。
  • 您使用的命令或菜单选择
  • 举例说明你所遇到的问题
  • 在AVR Studio的对话框中出现的信息(版本号)
  • 所需仿真的芯片

文件：

  • 手册标题和校正
  • 页号
  • 问题的简要说明
欢迎提出建议和意见


ICE200 User's Guide: Emulating AT90S1200 and ATtiny10/11 (Appendix)

仿真AT90S1200和ATtiny10/11(附录)
使用Include文件
在您的源代码文件中，总是应该使用包含定义I/O寄存器地址和位定义的include文件，这便于将程序从一个微处理器移植到另一个微处理器。您可以从ICE200开发板所配套的CD-ROM中找到这些文件。将include文件复制到你的工程文件目录下，并在程序代码的开头做如下引用：

(AVR汇编举例)

   .include "1200def.inc"

接下来，可以使用以下符号将值写入I/O寄存器：

(AVR汇编举例)

   ldi     r16, (1<<DDD1) + (1<<DDD4)     ; 设置端口D的引脚1和4作为输出，其他的引脚作为输入
   out     DDRD, r16
注意位定义的用法。DDD1和DDD4是引脚的位定义形式。故此必须根据引脚的对应位置进行左移，形成正确屏蔽的数值。

不同器件的中断向量的位置也可能是不同的。如果使用include文件中的中断向量定义，就能使编写中断处理过程变得简单。

(AVR汇编举例)

.include "1200def.inc"
.org   0
       rjmp    RESET_Handler
.org   INT0addr
       rjmp    INT0_Handler
.org   OVF0addr
       rjmp    OVF0_Handler
.org   ACIaddr
       rjmp    ACI_Handler
       ... ( 程序从这里开始 )
使用ATtiny12适配器仿真ATtiny10/11
ATtiny10和11都是ATtiny12的子系列。因此将ICE200配置成仿真ATtiny12芯片，则也可以支持ATtiny10或ATtiny11的仿真。这些芯片有相同的引脚输出，但ATtiny10/11不具备下列功能：
  • 掉电检测BOD功能(Brown Out Detection)
  • 没有内部RC振荡校准
  • 没有复位源寄存器
  • 比较器的能隙基准参考电压（Band-Gap Reference）
  • EEPROM中断
请注意，这些器件的复位延时启动时间也有些不同，具体情况清参阅数据手册。

使用AT90S2313适配器仿真AT90S1200
AT90S1200也可看成是AT90S2313的子系列，它们有相同的引脚输出，但AT90S1200不具备下列功能：

  • UART
  • SRAM
  • 内存单元访问指令(ld/st/lds/sts/ldd/std/lpm)
  • 16位算术指令(adiw/sbiw)
  • INT1
  • 定时器1和输入捕获
  • 指向SRAM堆栈指针(AT90S1200使用三层硬件堆栈)
当使用AT90S2313仿真AT90S1200，只能使用一半的程序存储器和EEPROM，而且要避免在程序中使用这些上述功能。

注意！
因为AT90S2313使用一个堆栈指针，因此必须对它初始化。最简单的方式就是在程序开头使用如下程序：

(AVR汇编举例)

   ldi     r16, 0xDF    ; 设置堆栈指针指向SRAM的最高地址
   out     0x3D, r16
请注意，在AT90S2312上，可以使用超出三层以上堆栈，这就意味着在仿真器使用AT90S2313仿真（AT90S1200）成功，却并不代表在实际的AT90S1200芯片上能正常工作。因此，在仿真过程中要经常检查并确保堆栈空间不超过6个字节(相当于三层)。

AT90S2313没有RC振荡器，所以AT90S1200具有的这项功能，在使用AT90S2313代替时是无法实现的。

对AT90S1200仿真时，请使用AT90S2313的include文件，以确保其中断处于正确的地址。


疑难解答

更新于2002.4.24

在使用AVR Studio2.03版或更高版本时，如果需要，您可以将您的ICE200升级到最新版本。我们推荐使用AVR Studio3.54版或更高版本。当前ICE200的版本是1.20。

ATTINY12实际器件和ICE200仿真的ATTINY12的差别

- ICE200的内部RC振荡以一固定的频率2MHz运行。这是ATtiny12芯片频率的两倍。

- ATtiny12的引脚1在仿真时作为复位或输入引脚。在实际芯片中，它有可能被作为集电极开路输出。.

- ATtiny12不支持禁止上拉使能位(PUD, MCUCR寄存器的第6位)。禁止上拉使能时，可以通过人为的清除端口B寄存器相应位实现。

中断标志位

正常情况下写“1”到中断标志位时，实际上是将中断标志位清除，因此不能人为的置位标志位。在单步运行调试定时器时，定时器1的中断标志位可以通过AVR Studio IO的观测窗口手动设置。

解决方案

-暂无有效方法

注意：

在正常情况下，写1到中断标志位不是将标志位置位，而是清除标志位，即使在单步运行时也一样。手动置位中断标志位可以通过AVR Studio IO的观测窗口来实现，且仅在单步运行时有效的。

定时器1的输出比较中断

在单步运行调试时钟时，TIFR寄存器中的输出比较标志位(Output Compare Flag 1A)的置位，是发生在当T/C1计数器的值从比较匹配值向比较匹配值+1转换的过程中。而当比较匹配时清另计数器允许位使能时，在T/C1计数器的值从比较匹配值-1向比较匹配值转换的过程中，T/C1就会被清除回到$0000，这就意味着T/C1的计数值在到达置位输出比较标志位的条件之前就被清另了。因此当比较匹配时清另计数器允许位使能时，在单步运行模式下输出比较标志位(Output Compare Flag 1A)将不可能被置位，也不能发生相应的中断事件。

注意：这种情况只在单步运行模式下才出现。如果在到达比较匹配点时，程序是连续运行2个(或多个)指令的话，输出比较标志位(Output Compare Flag 1A)将会被置位，同时执行相应的中断服务程序。所以在连续运行模式下，定时器将正常工作，不管比较匹配时清另计数器允许位是否被使能，输出比较标志位(Output Compare Flag 1A)都会置位的。

解决方案：

在单步运行时，可以通过手动的方式，将定时器中断标志位寄存器 (TIFR)中的中断标志位置位或清除。人为的将比较匹配输出标志位(Output Compare Flag 1A)置位，就可以使程序跳转到相应的中断向量处，转入执行中断服务程序。

电源

ICE200不能直接使用9V交流电源，也不能直接使用12V直流电源，因为这样会在电源稳压部分造成过多的消耗而发热。

解决方案

-使用9V直流电源

AT90S4433/2333的工作电压低于5V时

当仿真AT90S2333/4433时，如果目标板的电压低于5V，AVR Studio可能会中断与仿真器通信。

解决方案

不要设置"Ceramic Resonator"或"Crystal Oscillator"的复位延迟时间，而选择"Ceramic resonator, fast rising power"或"Crystal Oscillator, fast rising power"选项。如果由于失去与仿真器的通信而无法弹出仿真器选项对话框，可以在你的工程文件的目录下删掉.avd文件，然后重新打开工程文件，这样对话框又会再次出现。