产品特性 • 高性能、低功耗的 8 位 AVR® 微处理器 • 高级 RISC 结构 • • • • • • • • – 120 条指令 – 大多数指令执行时间为单个时钟周期 – 32 个 8 位通用工作寄存器 – 全静态工作 – 工作于 20 MHz 时性能高达 20 MIPS 非易失性程序和数据存储器 – 1K 字节的系统内可编程 Flash 擦写寿命 : 10,000 次 – 64 字节的系统内可编程 EEPROM 擦写寿命 : 100,000 次 – 64 字节的片内 SRAM – 可以对锁定位进行编程以及实现 EEPROM 数据的加密 外设特点 – 一个具有独立预分频器的 8 位定时器 / 计数器及两条 PWM 通道 – 含有片内参考电压的 4 路 10 位 ADC – 具有独立片内振荡器的可编程看门狗定时器 – 片内模拟比较器 特殊的处理器特点 – 片内调试系统 – 通过 SPI 端口在系统内可编程 – 片内 / 片外中断源 – 低功耗空闲模式、噪声抑制模式、省电模式 – 增强型上电复位 – 可编程的掉电检测 – 片内标定振荡器 I/O 和封装 – 8 引脚 PDIP/SOIC: 6 可编程 I/O 线 工作电压 : – ATtiny13V:1.8 - 5.5V – ATtiny13:2.7 - 5.5V 速度等级 – ATtiny13V: 0 - 4 MHz @ 1.8 - 5.5V, 0 - 10 MHz @ 2.7 - 5.5V – ATtiny13: 0 - 10 MHz @ 2.7 - 5.5V, 0 - 20 MHz @ 4.5 - 5.5V 工业级温度范围 低功耗 – 正常模式 : 1 MHz, 1.8V: 240µA – 掉电模式 : < 0.1µA at 1.8V 具有 1KB 系统内 可编程 Flash 的 8位 微 控制器 ATtiny13 初稿 引脚配置 Figure 1. ATtiny13 芯片引脚 PDIP/SOIC (PCINT5/RESET/ADC0/dW) PB5 (PCINT3/CLKI/ADC3) PB3 (PCINT4/ADC2) PB4 GND 1 2 3 4 8 7 6 5 VCC PB2 (SCK/ADC1/T0/PCINT2) PB1 (MISO/AIN1/OC0B/INT0/PCINT1) PB0 (MOSI/AIN0/OC0A/PCINT0) 本文是英文数据手册的中文 翻译,其目的是方便中国用 户的阅读。它无法自动跟随 原稿的更新,同时也可能存 在翻译上的错误。读者应该 以英文原稿为参考以获得更 准确的信息。 Rev. 2535D–AVR–04/04 综述 ATtiny13 是基于增强的 AVR RISC 结构的低功耗 8 位 CMOS 微控制器。由于其先进的指令 集以及单时钟周期指令执行时间, ATtiny13 的数据吞吐率高达 1 MIPS/MHz,从而可以 缓减系统在功耗和处理速度之间的矛盾。 方框图 Figure 2. ATtiny13 结构框图 8-BIT DATABUS STACK POINTER SRAM VCC PROGRAM COUNTER GND PROGRAM FLASH WATCHDOG OSCILLATOR CALIBRATED INTERNAL OSCILLATOR WATCHDOG TIMER TIMING AND CONTROL MCU CONTROL REGISTER MCU STATUS REGISTER TIMER/ COUNTER0 INSTRUCTION REGISTER INSTRUCTION DECODER CONTROL LINES GENERAL PURPOSE REGISTERS INTERRUPT UNIT X Y Z PROGRAMMING LOGIC ALU DATA EEPROM STATUS REGISTER ADC / ANALOG COMPARATOR DATA REGISTER PORT B DATA DIR. REG.PORT B PORT B DRIVERS RESET CLKI PB0-PB5 2 ATtiny13 2535D–AVR–04/04 ATtiny13 AVR 内核具有丰富的指令集和 32 个通用工作寄存器。所有的寄存器都直接与算逻单元 (ALU) 相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。这种结 构大大提高了代码效率,并且具有比普通的 CISC 微控制器最高至 10 倍的数据吞吐率。 ATtiny13 有 1K 字节 Flash,64 字节 EEPROM,64 字节 SRAM,6 个通用 I/O 口线,32 个 通用工作寄存器, 1 个具有比较模式的 8 位定时器 / 计数器,片内 / 外中断, 4 路 10 位 ADC,具有片内振荡器的可编程看门狗定时器,以及三种可以通过软件进行选择的省电模 式。 工作于空闲模式时 CPU 停止工作,而 SRAM、 T/C、 ADC、模拟比较器以及中断系 统继续工作;掉电模式时保存寄存器中值,停止除中断和硬件复位之外所有功能工作; ADC 噪声抑制模式时终止 CPU 及 ADC 以外所有 I/O 模块的工作以降低 ADC 转换噪声。 本芯片是以 Atmel 高密度非易失性存储器技术生产的。 通过 SPI 串行接口可对程序存储 器进行系统内编程。 ATtiny13 AVR 具有一整套的编程与系统开发工具,包括:C 语言编译器、宏汇编、 程序调 试器 / 软件仿真器、仿真器及评估板。 引脚说明 VCC 数字电路的电源 GND 地 端口 B (PB5..PB0) 端口 B 为 6 位双向 I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特 性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉 低时将输出电流。在复位过程中,即使系统时钟还未起振,端口 B 处于高阻状态。 端口 B 也可以用做其他不同的特殊功能,请参见 P48。 RESET 复位输入引脚。持续时间超过最小门限时间的低电平将引起系统复位。门限时间见 P30Table 12。持续时间小于门限时间的脉冲不能保证可靠复位。 代码例子 本数据手册包含了一些简单的代码例子以说明如何使用芯片各个不同的功能模块。这些 例子都假定在编译之前已经包含了正确的头文件。有些 C 编译器在头文件里并没有包含 位定义,而且各个 C 编译器对中断处理有自己不同的处理方式。请注意查阅相关文档以 获取具体的信息。 3 2535D–AVR–04/04 AVR CPU 内核 介绍 本节从总体上讨论 AVR 内核的结构。CPU 的主要任务是保证程序的正确执行。因此它必 须能够访问存储器、执行运算、控制外设以及处理中断。 结构综述 Figure 3. AVR 结构的方框图 Data Bus 8-bit Flash Program Memory Program Counter Status and Control 32 x 8 General Purpose Registrers Control Lines Direct Addressing Instruction Decoder Indirect Addressing Instruction Register Interrupt Unit Watchdog Timer ALU Analog Comparator I/O Module1 Data SRAM I/O Module 2 I/O Module n EEPROM I/O Lines 为了获得最高的性能以及并行性, AVR 采用了 Harvard 结构,具有独立的数据和程序总 线。程序存储器里的指令通过一级流水线运行。 CPU 在执行一条指令的同时读取下一条 指令 ( 在本文称为预取 )。这个概念实现了指令的单时钟周期运行。程序存储器是可以在 线编程的 Flash。 快速访问寄存器文件包括 32 个 8 位通用工作寄存器,访问时间为一个时钟周期。从而实 现了单时钟周期的 ALU 操作。在典型的 ALU 操作中,两个位于寄存器文件中的操作数同 时被访问,然后执行运算,结果再被送回到寄存器文件。整个过程仅需一个时钟周期。 寄存器文件里有 6 个寄存器可以用作 3 个 16 位的间接寻址寄存器指针以寻址数据空间, 实现高效的地址运算。其中一个指针还可以作为程序存储器查询表的地址指针。这些附加 的功能寄存器即为 16 位的 X、 Y、 Z 寄存器。 4 ATtiny13 2535D–AVR–04/04 ATtiny13 ALU支持寄存器之间以及寄存器和常数之间的算术和逻辑运算。ALU也可以执行单寄存器 操作。运算完成之后状态寄存器的内容得到更新以反映操作结果。 程序流程通过有 / 无条件的跳转指令和调用指令来控制,从而直接寻址整个地址空间。大 多数指令长度为 16 位,亦即每个程序存储器地址都包含一条 16 位或 32 位的指令。 在中断和调用子程序时返回地址的程序计数器 (PC) 保存于堆栈之中。堆栈位于通用数据 SRAM,因此其深度仅受限于 SRAM 的大小。在复位例程里用户首先要初始化堆栈指针 SP。这个指针位于 I/O 空间,可以进行读写访问。数据 SRAM 可以通过 5 种不同的寻址模 式进行访问。 AVR 存储器空间为线性的平面结构。 AVR有一个灵活的中断模块。控制寄存器位于I/O空间。状态寄存器里有全局中断使能位。 每个中断在中断向量表里都有独立的中断向量。各个中断的优先级与其在中断向量表的 位置有关,中断向量地址越低,优先级越高。 I/O 存储器空间包含 64 个可以直接寻址的地址,作为 CPU 外设的控制寄存器、SPI,以及 其他 I/O 功能。映射到数据空间即为寄存器文件之后的地址 0x20 - 0x5F。 ALU -算术逻辑单元 AVR ALU 与 32 个通用工作寄存器直接相连。寄存器与寄存器之间、寄存器与立即数之间 的 ALU 运算只需要一个时钟周期。 ALU 操作分为 3 类:算术、逻辑和位操作。此外还提 供了支持无 / 有符号数和分数乘法的乘法器。具体请参见指令集。 5 2535D–AVR–04/04 状态寄存器 状态寄存器包含了最近执行的算术指令的结果信息。这些信息可以用来改变程序流程以 实现条件操作。如指令集所述,所有 ALU 运算都将影响状态寄存器的内容。这样,在许 多情况下就不需要专门的比较指令了,从而使系统运行更快速,代码效率更高。 在进入中断服务程序时状态寄存器不会自动保存,中断返回时也不会自动恢复。这些工作 需要软件来处理。 AVR 中断寄存器 SREG 定义如下: Bit 7 6 5 4 3 2 1 0 I T H S V N Z C 读/写 R/W R/W R/W R/W R/W R/W R/W R/W 初始值 0 0 0 0 0 0 0 0 SREG • Bit 7 – I: 全局中断使能 I 置位时使能全局中断。单独的中断使能由其他独立的控制寄存器控制。如果 I 清零,则不 论单独中断标志置位与否,都不会产生中断。任意一个中断发生后 I 清零,而执行 RETI 指令后 I 恢复置位以使能中断。 I 也可以通过 SEI 和 CLI 指令来置位和清零。 • Bit 6 – T: 位拷贝存储 位拷贝指令 BLD 和 BST 利用 T 作为目的或源地址。BST 把寄存器的某一位拷贝到 T,而 BLD 把 T 拷贝到寄存器的某一位。 • Bit 5 – H: 半进位标志 半进位标志 H 表示算术操作发生了半进位。此标志对于 BCD 运算非常有用。详见指令集 的说明。 • Bit 4 – S: 符号位 , S = N ⊕V S 为负数标志 N 与 2 的补码溢出标志 V 的异或。详见指令集的说明。 • Bit 3 – V: 2 的补码溢出标志 支持 2 的补码运算。详见指令集的说明。 • Bit 2 – N: 负数标志 表明算术或逻辑操作结果为负。详见指令集的说明。 • Bit 1 – Z: 零标志 表明算术或逻辑操作结果为零。详见指令集的说明。 • Bit 0 – C: 进位标志 表明算术或逻辑操作发生了进位。详见指令集的说明。 通用寄存器文件 寄存器文件针对 AVR 增强型 RISC 指令集做了优化。为了获得需要的性能和灵活性,寄 存器文件支持以下的输入 / 输出方案: • 输出一个 8 位操作数,输入一个 8 位结果 • 输出两个 8 位位操作数,输入一个 8 位结果 • 输出两个 8 位位操作数,输入一个 16 位结果 • 输出一个 16 位位操作数,输入一个 16 位结果 Figure 4 为 CPU 32 个通用工作寄存器的结构。 Figure 4. AVR CPU 通用工作寄存器 7 6 0 Addr. R0 0x00 R1 0x01 ATtiny13 2535D–AVR–04/04 ATtiny13 R2 0x02 … R13 0x0D 通用 R14 0x0E 工作 R15 0x0F 寄存器 R16 0x10 R17 0x11 … X 寄存器,低字节 R26 0x1A R27 0x1B X 寄存器,高字节 R28 0x1C Y 寄存器,低字节 R29 0x1D Y 寄存器,高字节 R30 0x1E Z 寄存器,低字节 R31 0x1F Z 寄存器,高字节 大多数操作寄存器文件的指令都可以直接访问所有的寄存器,而且多数这样的指令的执 行时间为单个时钟周期。 如 Figure 4 所示,每个寄存器都有一个数据内存地址,将他们直接映射到用户数据空间的 头 32 个地址。虽然寄存器文件的物理实现不是 SRAM,这种内存组织方式在访问寄存器 方面具有极大的灵活性,因为 X、 Y、 Z 寄存器可以设置为指向任意寄存器的指针。 7 2535D–AVR–04/04 X、Y、Z 寄存器 寄存器 R26..R31 除了用作通用寄存器外,还可以作为数据间接寻址用的地址指针。这三 个间接寻址寄存器示于 Figure 5。 Figure 5. X、 Y、 Z 寄存器 15 X 寄存器 XH XL 7 0 R27 (0x1B) YH YL 7 0 R29 (0x1D) Z 寄存器 0 R26 (0x1A) 15 Y 寄存器 0 7 0 7 0 R28 (0x1C) 15 ZH 7 0 ZL 7 R31 (0x1F) 0 0 R30 (0x1E) 在不同的寻址模式中,这些地址寄存器可以实现固定偏移量,自动加一和自动减一功能。 具体细节请参见指令集。 堆栈指针 堆栈指针主要用来保存临时数据、局部变量和中断 / 子程序的返回地址。堆栈指针总是指 向堆栈的顶部。要注意 AVR 的堆栈是向下生长的,即新数据推入堆栈时,堆栈指针的数 值将减小。 堆栈指针指向数据 SRAM 堆栈区。在此聚集了子程序堆栈和中断堆栈。调用子程序和使 能中断之前必须定义堆栈空间,且堆栈指针必须指向高于 0x60 的地址空间。使用 PUSH 指令将数据推入堆栈时指针减一;而子程序或中断返回地址推入堆栈时指针将减二。使 用 POP 指令将数据弹出堆栈时,堆栈指针加一;而用 RET 或 RETI 指令从子程序或中断 返回时堆栈指针加二。 AVR的堆栈指针由I/O空间中的两个8位寄存器实现。实际使用的位数与具体器件有关。请 注意某些 AVR 器件的数据区太小,用 SPL 就足够了。此时将不给出 SPH 寄存器。 Bit 8 15 14 13 12 11 10 9 8 SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0 7 6 5 4 3 2 1 0 读/写 R/W R/W R/W R/W R/W R/W R/W R/W 初始值 1 0 0 1 1 1 1 1 SPL ATtiny13 2535D–AVR–04/04 ATtiny13 指令执行时序 这一节介绍指令执行过程中的访问时序。AVR CPU 由系统时钟 clkCPU 驱动。此时钟直接 来自选定的时钟源。芯片内部不对此时钟进行分频。 Figure 6 说明了由 Harvard 结构决定的并行取指和指令执行,以及可以进行快速访问的寄 存器文件的概念。这是一个基本的流水线概念,性能高达 1 MIPS/MHz,具有优良的性价 比、功能 / 时钟比、功能 / 功耗比。 Figure 6. 并行取指和指令执行 T1 T2 T3 T4 clkCPU 1st Instruction Fetch 1st Instruction Execute 2nd Instruction Fetch 2nd Instruction Execute 3rd Instruction Fetch 3rd Instruction Execute 4th Instruction Fetch Figure 7 演示的是寄存器文件内部访问时序。在一个时钟周期里,ALU 可以同时对两个寄 存器操作数进行操作,同时将结果保存到目的寄存器中去。 Figure 7. 单时钟周期 ALU 操作 T1 T2 T3 T4 clkCPU Total Execution Time Register Operands Fetch ALU Operation Execute Result Write Back 复位与中断处理 AVR 有不同的中断源。每个中断和复位在程序空间都有独立的中断向量。所有的中断事件 都有自己的使能位。当使能位置位,且状态寄存器的全局中断使能位 I 也置位时,中断可 以发生。 程序存储区的最低地址缺省为复位向量和中断向量。完整的向量列表请参见 P40“ 中断 ” 。 列表也决定了不同中断的优先级。向量所在的地址越低,优先级越高。 RESET 具有最高 的优先级,第二个为 INT0 – 外部中断请求 0。 任一中断发生时全局中断使能位 I 被清零,从而禁止了所有其他的中断。用户软件可以在 中断程序里置位 I 来实现中断嵌套。此时所有的中断都可以中断当前的中断服务程序。执 行 RETI 指令后 I 自动置位。 从根本上说有两种类型的中断。第一种由事件触发并置位中断标志。对于这些中断,程序 计数器跳转到实际的中断向量以执行中断处理程序,同时硬件将清除相应的中断标志。中 断标志也可以通过对其写 ”1” 的方式来清除。当中断发生后,如果相应的中断使能位为 "0",则中断标志位置位,并一直保持到中断执行,或者被软件清除。类似的,如果全局 中断标志被清零,则所有已发生的中断都不会被执行,直到 I 置位。然后挂起的各个中断 按中断优先级依次执行。 9 2535D–AVR–04/04 第二种类型的中断则是只要中断条件满足,就会一直触发。这些中断不需要中断标志。若 中断条件在中断使能之前就消失了,中断不会被触发。 AVR 退出中断后总是回到主程序并至少执行一条指令才可以去执行其他被挂起的中断。 要注意的是,进入中断服务程序时状态寄存器不会自动保存,中断返回时也不会自动恢 复。这些工作必须由用户通过软件来完成。 使用 CLI 指令来禁止中断时,中断禁止立即生效。没有中断可以在执行 CLI 指令后发生, 即使它是在执行 CLI 指令的同时发生的。下面的例子说明了如何在写 EEPROM 时使用这 个指令来防止中断发生以避免对 EEPROM 内容的可能破坏。 汇编代码例程 in r16, SREG cli ; 保存 SREG 值 ; 禁止中断 sbi EECR, EEMWE ; 启动 EEPROM 写操作 sbi EECR, EEWE out SREG, r16 ; 恢复 SREG (I 位 ) C 代码例程 char cSREG; cSREG = SREG; /* 保存 SREG 值 */ /* 禁止中断 */ __disable_interrupt(); EECR |= (1<<EEMWE); /* 启动 EEPROM 写操作 */ EECR |= (1<<EEWE); SREG = cSREG; /* 恢复 SREG (I 位 )*/ 10 ATtiny13 2535D–AVR–04/04 ATtiny13 使用 SEI 指令使能中断时,紧跟其后的第一条指令在执行任何中断之前一定会首先得到执 行。 汇编代码例程 sei ; 置位全局中断使能标志 sleep ; 进入休眠模式,等待中断发生 ; 注意 : 在执行任何被挂起的中断之前 MCU 将首先进入休眠模式 C 代码例程 _SEI(); /* 置位全局中断使能标志 */ _SLEEP(); /* 进入休眠模式,等待中断发生 */ /* 注意 : 在执行任何被挂起的中断之前 MCU 将首先进入休眠模式 */ 中断响应时间 AVR 中断响应时间最少为 4 个时钟周期。4 个时钟周期后,程序跳转到实际的中断处理例 程。在这 4 个时钟期期间 PC 自动入栈。在通常情况下,中断向量为一个跳转指令,此跳 转需要 3 个时钟周期。如果中断在一个多时钟周期指令执行期间发生,则在此多周期指令 执行完毕后 MCU 才会执行中断程序。若中断发生时 MCU 处于休眠模式,中断响应时间 还需增加 4 个时钟周期。此外还要考虑到不同的休眠模式所需要的启动时间。这个时间不 包括在前面提到的时钟周期里。 中断返回需要 4 个时钟。在此期间 PC( 两个字节 ) 将被弹出栈,堆栈指针加二,状态寄存 器 SREG 的 I 置位。 11 2535D–AVR–04/04 AVR ATtiny13 的存储 器 本节讲述 ATtiny13 的存储器。 AVR 结构具有两个主要的存储器空间:数据存储器空间和 程序存储器空间。此外, ATtiny13 还有 EEPROM 存储器以保存数据。这三个存储器空 间都为线性的平面结构。 系统内可编程的 Flash 程 序存储器 ATtiny13具有1K字节的在线编程Flash,用于存放程序指令代码。因为所有的AVR指令为 16 位或 32 位,故而 Flash 组织成 512 x 16 位的形式。 Flash 存储器至少可以擦写 10,000 次。ATtiny13 的程序计数器 (PC) 为 9 位,因此可以寻址 512字的程序存储器空间。P97“存储器编程” 详述了如何用SPI接口实现对Flash的串行下 载。 常数可以保存于整个程序存储器地址空间 ( 参考 LPM 加载程序存储器指令的说明 )。 取指与执行时序图请参见 P9“ 指令执行时序 ” 。 Figure 8. 程序存储器映像 Program Memory 0x0000 0x01FF 12 ATtiny13 2535D–AVR–04/04 ATtiny13 SRAM 数据存储器 Figure 9 给出了 ATtiny13 SRAM 空间的组织结构。 前 160 个数据存储器包括了寄存器文件、 I/O 存储器及内部数据 SRAM。起始的 32 个地 址为寄存器文件与 64 个标准 I/O 存储器,接着是 64 字节的内部数据 SRAM。 数据存储器的寻址方式分为 5 种:直接寻址、带偏移量的间接寻址、间接寻址、带预减量 的间接寻址和带后增量的间接寻址。寄存器文件中的寄存器 R26 到 R31 为间接寻址的指 针寄存器。 直接寻址范围可达整个数据区。 带偏移量的间接寻址模式能够寻址到由寄存器 Y 和 Z 给定的基址附近的 63 个地址。 在自动预减和后加的间接寻址模式中,寄存器 X、 Y 和 Z 自动增加或减少。 ATtiny13的全部32个通用寄存器、64个I/O寄存器及64个字节的内部数据SRAM可以通过 所有上述的寻址模式进行访问。寄存器文件的描述见 P6“ 通用寄存器文件 ” 。 Figure 9. 数据存储器映像 Data Memory 32 Registers 64 I/O Registers 0x0000 - 0x001F 0x0020 - 0x005F 0x0060 Internal SRAM (64 x 8) 0x009F 数据存储器访问时间 本节说明访问内部存储器的时序。如 Figure 10 所示,内部数据 SRAM 访问时间为两个 clkCPU 时钟。 Figure 10. 片上 SRAM 存取周期 T1 T2 T3 clkCPU Address Compute Address Address valid Write Data WR Read Data RD Memory Access Instruction Next Instruction EEPROM 数据存储器 ATtiny13 包含 64 字节的 EEPROM 数据存储器。它是作为一个独立的数据空间而存在的, 可以按字节读写。 EEPROM 的寿命至少为 100,000 次擦除周期。 EEPROM 的访问由地 址寄存器、数据寄存器和控制寄存器决定。详见 P100 中 EEPROM 的串行数据下载。 EEPROM 读 / 写访问 EEPROM 的访问寄存器位于 I/O 空间。 13 2535D–AVR–04/04 EEPROM 的写访问时间由 Table 1 给出。自定时功能可以让用户软件监测何时可以开始写 下一字节。用户操作 EEPROM 需要注意如下问题:在电源滤波时间常数比较大的电路 中,上电 / 下电时 VCC 上升 / 下降速度会比较慢。此时 CPU 可能工作于低于晶振所要求 的电源电压。请参见 P18“ 防止 EEPROM 数据丢失 ” 以避免出现 EEPROM 数据丢失的 问题。 为了防止无意识的 EEPROM 写操作,需要执行一个特定的写时序。具体参看 P15“ 基本 字节编程 ” 及 P16“ 分离字节编程 ” 。 执行 EEPROM 读操作时, CPU 会停止工作 4 个周期,然后再执行后续指令;执行 EEPROM 写操作时, CPU 会停止工作 2 个周期,然后再执行后续指令。 EEPROM 地址寄存器- EEARL Bit 7 6 5 4 3 2 1 0 – – EEAR5 EEAR4 EEAR3 EEAR2 EEAR1 EEAR0 读/写 R R R/W R/W R/W R/W R/W R/W 初始值 0 0 X X X X X X EEARL • Bits 7..6 – Res: 保留 保留位,读操作返回值为零。 • Bits 5..0 – EEAR5..0: EEPROM 地址 EEPROM 地址寄存器 EEARL 指定了 64 字节的 EEPROM 空间。EEPROM 地址是线性的, 从 0 到 63。EEAR 的初始值没有定义。在访问 EEPROM 之前必须为其赋予正确的数据。 EEPROM 数据寄存器- EEDR Bit 7 6 5 4 3 2 1 0 EEDR7 EEDR6 EEDR5 EEDR4 EEDR3 EEDR2 EEDR1 EEDR0 读/写 R/W R/W R/W R/W R/W R/W R/W R/W 初始值 X X X X X X X X EEDR • Bits 7..0 – EEDR7..0: EEPROM 数据 对于 EEPROM 写操作, EEDR 是需要写到 EEAR 单元的数据;对于读操作, EEDR 是 从地址 EEARL 读取的数据。 14 ATtiny13 2535D–AVR–04/04 ATtiny13 EEPROM 控制寄存器- EECR Bit 7 6 5 4 3 2 1 0 – – EEPM1 EEPM0 EERIE EEMPE EEPE EERE 读/写 R R R/W R/W R/W R/W R/W R/W 初始值 0 0 X X 0 0 X 0 EECR • Bit 7 – Res: 保留 保留位,读操作返回值为零。读完后,屏蔽该位。 • Bit 6 – Res: 保留 保留位,读操作返回值为零。 • Bits 5, 4 – EEPM1 与 EEPM0: EEPROM 编程模式位 设置编程模式位定义当对 EEPE 写入时触发哪种编程方式。可能在一个时钟周期中数据编 程 ( 擦除旧值写入新值 ) 或将擦除与写操作分为两步。不同模式的编程时间见 Table 1。当 EEPE 置位,对 EEPMn 的写操作将忽略。复位时,除非 EEPROM 处于编程状态,否则 EEPMn 位将复位为 0b00。 Table 1. EEPROM 模式位 EEPM1 EEPM0 编程时间 操作 0 0 3.4 ms 擦除与写入操作在一个时钟周期中完成 0 1 1.8 ms 只擦除 1 0 1.8 ms 只写入 1 1 – 保留 • Bit 3 – EERIE: EEPROM 准备好中断使能 若 SREG 的 I 为 "1",则置位 EERIE 将使能 EEPROM 准备好中断。清零 EERIE 则禁止 此中断。当 EEWE 清零时 EEPROM 准备好中断即可发生。 • Bit 2 – EEMPE: EEPROM 主机编程使能 EEMPE 位决定 EEPE 写入 "1” 是否有效。 当 EEMPE 为 "1" 时,在四个时钟周期内设置 EEPE 将会在 EEPROM 指定的位置编程; 若 EEMPE 为 "0“,设置 EEPE 无效。当 EEMPE 由软件写入 "1”,则在四个时钟周期后由 硬件清零。 • Bit 1 – EEPE: EEPROM 编程使能 EEPE 为 EEPROM 的编程使能信号。当 EEPE 为 "1",通过 EEPMn 位的设置,将会对 EEPROM编程。在EEPE写入逻辑"1"前,EEMPE位必须写入"1",否则不会出现EEPROM 写操作。当写访问时间结束, EEPE 位由硬件清零。当 EEPE 置位, CPU 在执行指令前 终止两个时钟周期。 • Bit 0 – EERE: EEPROM 读使能 EERE为EEPROM读操作的使能信号。当EEPROM地址设置好之后,需置位EERE以便将 数据读入 EEARL。 EEPROM 数据的读取只需要一条指令,且无需等待。读取 EEPROM 后 CPU 要停止 4 个时钟周期才可以执行下一条指令。用户在读取 EEPROM 时应该检测 EEPE。如果一个写操作正在进行,就无法读取 EEPROM,也无法改变寄存器 EEARL。 基本字节编程 使用基本字节编程是最简单的模式。当对 EEPROM 写入一个字节,用户必须将地址写入 EEARL 寄存器,将数据写入 EEDR 寄存器。若 EEPMn 位为零,对 EEPE 的写操作 ( 在对 EEMPE 写完后的四个时钟周期内 ) 将触发擦除 / 写入操作。擦除与写入操作在一个时钟周 期内完成,整个编程时间见 Table 1。 EEPE 位会保持置位,直到擦除与写入操作完成。 而当芯片处于编程状态时,不会进行其他 EEPROM 操作。 15 2535D–AVR–04/04 分离字节编程 可以将擦除与写入操作分为两个周期。若系统需要对一些有限的时间缩短访问时间 ( 尤其 若电源电压下降 ) 该方式有效。使用该方式时,必须在写入操作前先进行擦除操作。但由 于擦除与写入操作是分离的,有可能当系统允许进行时间临界操作时 ( 尤其在掉电后 ) 进 行擦除操作。 擦除 擦除一个字节,地址必须写入 EEARL。若 EEPMn 为 0b01,对 EEPE 写入 ( 在对 EEMPE 写完后的四个时钟周期内 ) 将只触发擦除操作 ( 编程时间见 Table 1)。 EEPE 位会保持到 擦除操作完成。而当芯片处于编程状态时,不会进行其他 EEPROM 操作。 写入 写入时,用户必须将地址写入 EEARL,将数据写入 EEDR。若 EEPMn 为 0b10,对 EEPE 写入 ( 在对 EEMPE 写完后的四个时钟周期内 ) 将只触发写入操作 ( 编程时间见 Table 1)。 EEPE 位会保持到擦除操作完成。若在写入前数据没有擦除,则认为写入数据丢失。当芯 片处于编程状态时,不会进行其他 EEPROM 操作。 EEPROM访问使用标定振荡器定时。振荡器频率见P22“振荡器标定寄存器 – OSCCAL” 。 16 ATtiny13 2535D–AVR–04/04 ATtiny13 下面的代码分别用汇编和 C 函数说明如何实现 EEPROM 的擦除、写入或基本写入。在此 假设中断不会在执行这些函数的过程当中发生。 汇编代码例程 EEPROM_write: ; 等待上一次写操作结束 sbic EECR,EEPE rjmp EEPROM_write ; 设置编程模式 ldi r16, (0<<EEPM1)|(0<<EEPM0) out EECR, r16 ; 设置地址寄存器 r17 out EEARL, r17 ; 将数据写入数据寄存器 (r16) out EEDR,r16 ; 置位 EEMWE sbi EECR,EEMWE ; 置位 EEWE 以启动写操作 sbi EECR,EEWE ret C 代码例程 void EEPROM_write(unsigned char ucAddress, unsigned char ucData) { /* 等待上一次写操作结束 */ while(EECR & (1<<EEPE)) ; /* 设置编程模式 */ EECR = (0<<EEPM1)|(0>>EEPM0) /* 设置地址与数据寄存器 */ EEARL = ucAddress; EEDR = ucData; /* 置位 EEMWE */ EECR |= (1<<EEMWE); /* 置位 EEWE 以启动写操作 */ EECR |= (1<<EEWE); } 17 2535D–AVR–04/04 下面的例子说明如何用汇编和 C 函数来读取 EEPROM,在此假设中断不会在执行这些函 数的过程当中发生。 汇编代码例程 EEPROM_read: ; 等待上一次写操作结束 sbic EECR,EEPE rjmp EEPROM_read ; 设置地址寄存器 r17 out EEARL, r17 ; 设置 EERE 以启动读操作 sbi EECR,EERE ; 自数据寄存器读取数据 in r16,EEDR ret C 代码例程 unsigned char EEPROM_read(unsigned char ucAddress) { /* 等待上一次写操作结束 */ while(EECR & (1<<EEPE)) ; /* 设置地址寄存器 */ EEARL = ucAddress; /* 设置 EERE 以启动读操作 */ EECR |= (1<<EERE); /* 自数据寄存器返回数据 */ return EEDR; } 防止 EEPROM 数据丢失 若电源电压过低,CPU 和 EEPROM 有可能工作不正常,造成 EEPROM 数据的毁坏 ( 丢 失 )。这种情况在使用独立的 EEPROM 器件时也会遇到。因而需要使用相同的保护方案。 由于电压过低造成 EEPROM 数据损坏有两种可能:一是电压低于 EEPROM 写操作所需 要的最低电压;二是 CPU 本身已经无法正常工作。 EEPROM 数据损坏的问题可以通过以下方法解决: 当电压过低时保持 AVR RESET 信号为低。这可以通过使能芯片的掉电检测电路 BOD 来 实现。如果 BOD 电平无法满足要求则可以使用外部复位电路。若写操作过程当中发生了 复位,只要电压足够高,写操作仍将正常结束。 18 ATtiny13 2535D–AVR–04/04 ATtiny13 I/O 存储器 ATtiny13 的 I/O 空间定义见 P150“ 寄存器概述 ” 。 ATtiny13 所有的 I/O 及外设都被放置于 I/O 空间。所有的 I/O 位置都可以通过 LD/LDS/LDD 与 ST/STS/STD 指令来访问,在 32 个通用工作寄存器和 I/O 之间传输数据。地址为 0x00 - 0x1F的I/O寄存器还可用SBI和CBI指令直接进行位寻址,而SBIS和SBIC则用来检查某 一位的值。更多内容请参见指令集。使用 IN 和 OUT 指令时地址必须在 0x00 - 0x3F 之 间。如果要象 SRAM 一样通过 LD 和 ST 指令访问 I/O 寄存器,相应的地址要加上 0x20。 为了与后续产品兼容,保留未用的未应写 "0",而保留的 I/O 寄存器则不应进行写操作。 一些状态标志位的清除是通过写 "1" 来实现的。要注意的是,与其他大多数 AVR 不同, CBI 和 SBI 指令只能对某些特定的位进行操作,因而可以用于包含这些状态标志的寄存 器。 CBI 与 SBI 指令只对 0x00 到 0x1F 的寄存器有效。 I/O 和外设控制寄存器在后续其他章节进行介绍。 19 2535D–AVR–04/04 系统时钟及时钟选项 时钟系统及其分布 Figure 11为AVR的主要时钟系统及其分布。这些时钟并不需要同时工作。为了降低功耗, 可以通过使用不同的睡眠模式来禁止无需工作的模块的时钟,详见 P26“ 电源管理及睡眠 模式 ” 。时钟系统详见 Figure 11。 Figure 11. 时钟分布 General I/O Modules ADC clkI/O clkADC CPU Core RAM Flash and EEPROM clkCPU AVR Clock Control Unit clkFLASH Reset Logic Source clock Clock Multiplexer Watchdog Timer Watchdog clock Watchdog Oscillator External Clock Calibrated RC Oscillator CPU 时钟- clkCPU CPU时钟与操作AVR内核的子系统相连,如通用寄存器文件、状态寄存器及保存堆栈指针 的数据存储器。终止 CPU 时钟将使内核停止工作和计算。 I/O 时钟- clkI/O I/O 时钟用于主要的 I/O 模块,如定时器 / 计数器。I/O 时钟还用于外部中断模块。要注意的 是有些外部中断由异步逻辑检测,因此即使 I/O 时钟停止了这些中断仍然可以得到监控。 Flash 时钟- clkFLASH Flash 时钟控制 Flash 接口的操作。此时钟通常与 CPU 时钟同时挂起或激活。 ADC 时钟- clkADC ADC具有专门的时钟。这样可以在ADC工作的时候停止CPU和I/O时钟以降低数字电路产 生的噪声,从而提高 ADC 转换精度。 时钟源 ATtiny13芯片有如下几种通过 Flash 熔丝位进行选择的时钟源。时钟输入到 AVR 时钟发生 器,再分配到相应的模块。 Table 2. 时钟源选择 (1) 器件时钟选项 标定的内部 RC 振荡器 01, 10 外部时钟 00 128 kHz 内部振荡器 11 Note: 20 CKSEL1..0 1. 对于所有的熔丝位, “1” 表示未编程, “0” 代表已编程。 ATtiny13 2535D–AVR–04/04 ATtiny13 不同的时钟选项将在后续部分进行介绍。当 CPU 自掉电模式或省电模式唤醒之后,被选 择的时钟源用来为启动过程定时,保证振荡器在开始执行指令之前进入稳定状态。当CPU 从复位开始工作时,还有额外的延迟时间以保证在 MCU 开始正常工作之前电源达到稳定 电平。这个启动时间的定时由看门狗振荡器完成。看门狗溢出时间所对应的 WDT 振荡器 周期数列于 Table 3。 Table 3. 看门狗振荡器周期数 缺省时钟源 典型的溢出时间 时钟周期数 4 ms 512 64 ms 8K (8,192) 器件出厂时 CKSEL = “10”, SUT = “10”,且 CKDIV8 编程。这个缺省设置的时钟源是 9.6MHz 的内部 RC 振荡器,初始系统时钟预分频为 8,启动时间为最长。这种设置保证用 户可以通过 ISP 或并行编程器得到所需的时钟源。 21 2535D–AVR–04/04 标定的片内 RC 振荡器 标定的片内 RC 振荡器提供了固定的 9.6 MHz 或 4.8 MHz 的时钟。 这些频率都是 3V、 25°C 下的标称数值。若频率超出器件标称值,必须对 CKDIV8 熔丝位编程,以在启动阶段 对内部频率 8 分频,详见 P24“ 系统时钟预分频器 ” 。这个时钟也可以作为系统时钟,只 要按照 Table 4 对熔丝位 CKSEL 进行编程即可。选择这个时钟之后就无需外部器件了。 复位时硬件将标定字节加载到 OSCCAL 寄存器,自动完成对 RC 振荡器的标定。在 3V、 25°C 时,这种标定可以提供标称频率 ± 10% 的精度。使用在 www.atmel.com/avr 中所述 的标定方法,可能会在任何电压及任何温度下使精度达到 ± 3%。当使用这个振荡器作为 系统时钟时,看门狗仍然使用自己的看门狗定时器作为溢出复位的依据。更多的有关标定 数据的信息请参见 P99“ 校准字节 ” 。 Table 4. 片内标定的 RC 振荡器工作模式 标称频率 CKSEL1..0 (1) 10 9.6 MHz 01 4.8 MHz 1. 出厂时的设置 Note: 选择了这个振荡器之后,启动时间由熔丝位 SUT 确定,如 Table 5 所示。 . Table 5. 内部标定 RC 振荡器的启动时间 SUT1..0 掉电模式的启动时间 复位时的额外延迟时间 (VCC = 5.0V) 推荐用法 00 6 CK 14CK BOD 使能 01 6 CK 14CK + 4 ms 电源快速上升 6 CK 14CK + 64 ms 电源缓慢上升 (1) 10 保留 11 振荡器标定寄存器- OSCCAL Note: 1. 出厂时的设置。 Bit 7 6 5 4 3 2 1 0 – CAL6 CAL5 CAL4 CAL3 CAL2 CAL1 CAL0 读/写 R R/W R/W R/W R/W R/W R/W R/W 初始值 0 OSCCAL 标定数据 • Bit 7 – Res: 保留 保留位,读操作返回值为零。 • Bits 6..0 – CAL6..0: 振荡器标定值 将标定数据写入这个地址可以对内部振荡器进行调节以消除由于生产工艺所带来的振荡 器频率偏差。这在复位时自动完成。当 OSCCAL 为零时振荡器以最低频率工作。当对其 写如不为零的数据时内部振荡器的频率将增长。写入 0x7F 即得到最高频率。标定的振荡 器用来为访问 EEPROM 和 Flash 定时。有写 EEPROM 和 Flash 的操作时不要将频率标 定到超过标称频率的 10%,否则写操作有可能失败。要注意振荡器只对 9.6 MHz 和 4.8 MHz 这两种频率进行了标定,其他频率则无法保证。 22 ATtiny13 2535D–AVR–04/04 ATtiny13 为保证 MCU 稳定工作,当标定内部 RC 振荡器时避免大幅度改变标称值。工作频率突变 超过 2% 将会产生异常现象。每次对 OSCCAL 寄存器中值的改变不应超过 0x20。 Table 6. 内部 RC 振荡器频率范围 外部时钟 OSCCAL 数值 最小频率,标称频率的百分比 最大频率,标称频率的百分比 0x00 50% 100% 0x3F 75% 150% 0x7F 100% 200% 为了从外部时钟源驱动芯片, CLKI 必须如 Figure 12 所示的进行连接。同时,熔丝位 CKSEL 必须编程为 “00”。 Figure 12. 外部时钟配置图 EXTERNAL CLOCK SIGNAL CLKI GND 选择了这个振荡器之后,启动时间由熔丝位 SUT 确定,如 Table 7 所示。 Table 7. 外部时钟的启动时间 SUT1..0 掉电模式和省电模式的启动时 间 复位时的额外延迟时间 推荐用法 00 6 CK 14CK BOD 使能 01 6 CK 14CK + 4 ms 电源快速上升 10 6 CK 14CK + 64 ms 电源缓慢上升 11 保留 为了保证 MCU 能够稳定工作,不能突然改变外部时钟源的振荡频率。工作频率突变超过 2% 将会产生异常现象。应该在 MCU 保持复位状态时改变外部时钟的振荡频率。 注意,系统时钟预分频器可用来实现内部时钟频率运行时间改变且保证稳定工作,详见 P24“ 系统时钟预分频器 ” 。 23 2535D–AVR–04/04 128 kHz 片内振荡器 128 kHz片内振荡器为提供时钟频率为128 kHz的低功耗振荡器。该频率为在3V、25°C下 的标定值。通过将 CKSEL 熔丝位编程为 “11”,该时钟作为系统时钟。 当选择该时钟源,启动时间由 Table 8 中所示的 SUT 熔丝位决定。 Table 8. 128 kHz 片内振荡器启动时间 SUT1..0 掉电模式和省电模式的启动时 间 复位时的额外延迟时间 推荐用法 00 6 CK 14CK BOD 使能 01 6 CK 14CK + 4 ms 电源快速上升 10 6 CK 14CK + 64 ms 电源缓慢上升 保留 11 系统时钟预分频器 时钟预分频寄存器- CLKPR ATtiny13 系统时钟可通过设置时钟预分频寄存器 CLKPR 来分频。该特性可用来降低功 耗。该分频器对所有时钟源都有效,且可影响 CPU 时钟频率及所有同步外设。 clkI/O、 clkADC、 clkCPU 及 clkFLASH 分频因子见 Table 9。 Bit 7 6 5 4 3 2 1 0 CLKPCE – – – CLKPS3 CLKPS2 CLKPS1 CLKPS0 读/写 R/W R R R R/W R/W R/W R/W 初始值 0 0 0 0 CLKPR 见位说明 • Bit 7 – CLKPCE: 时钟预分频器变化使能 CLKPCE 位必须置"1”使能 CLKPS位。只有当CLKPR寄存器的其他位同时写"0”时,CLKPCE 位改变。CLKPCE 在写入四个周期后或当 CLKPS 位写入后由硬件清零。在暂停周期 中重新写 CLKPCE 位,既不扩展暂停周期,也不清除 CLKPCE 位。 • Bits 6..4 – Res: 保留 保留位,读操作返回值为零。 • Bits 3..0 – CLKPS3..0: 时钟预分频器选择位 3 - 0 这几位定义所选时钟源与内部系统时钟所分频因子。这几位写入运行时间来改变时钟频 率以适应运行需要。当作为 MCU 主时钟输入分频器,使用分频因子时,所有同步外设速 度将会下降。分频因子见 Table 9。 为避免时钟频率的无意改变,对 CLKPS 位的写入必须按照如下步骤进行: 1. 将 CLKPCE 位写 "1”,而 CLKPR 寄存器的其他位写 "0”。 2. 在四个时钟周期内,将期望值写入 CLKPS,并在 CLKPCE 位写 "0”。 在改变预分频器设置时必须禁止中断,以保证在写入过程中不会出现中断。 CKDIV8熔丝位决定CLKPS位的初始值。若CKDIV8未编程,CLKPS位复位为“0000”;若 CKDIV8 已编程,CLKPS 位复位为 “0011”,给出启动时分频因子为 8。若所选时钟源频率 大于当前工作状态下器件最大频率时,应利用该特性分频。注意, CLKPS 位写入值不受 24 ATtiny13 2535D–AVR–04/04 ATtiny13 CKDIV8 熔丝位设置影响。若所选时钟源频率大于当前工作状态下器件最大频率,应用程 序必须保证选择一个足够大的分频因子。芯片出厂时 CKDIV8 熔丝位已编程。 Table 9. 时钟预分频器选择 转换时间 CLKPS3 CLKPS2 CLKPS1 CLKPS0 时钟分频因子 0 0 0 0 1 0 0 0 1 2 0 0 1 0 4 0 0 1 1 8 0 1 0 0 16 0 1 0 1 32 0 1 1 0 64 0 1 1 1 128 1 0 0 0 256 1 0 0 1 保留 1 0 1 0 保留 1 0 1 1 保留 1 1 0 0 保留 1 1 0 1 保留 1 1 1 0 保留 1 1 1 1 保留 当预分频器转换时,系统时钟预分频器保证时钟系统中不会出现毛刺,且频率低于转换前 后的频率。 脉动计数器使预分频器在未分频时钟频率下运行,这可能比 CPU 时钟频率快。因此即使 预分频器可读,我们也无法确定其状态,所以我们也无法得到准确的转换时间。 CLKPS 值的写入时间介于 T1 + T2 与 T1 + 2*T2 之间。在此间隔中,产生 2 个时钟边沿。其 中 T1 为前一个时钟周期, T2 为新设置后相应的时钟周期。 25 2535D–AVR–04/04 电源管理及睡眠模式 AVR 微控制器的高性能与针对工业级的有效代码使其成为低功耗器件的最佳选择。 睡眠模式可以使应用程序关闭 MCU 中没有使用的模块,从而降低功耗。 AVR 具有不同 的睡眠模式,允许用户根据自己的应用要求实施剪裁。 进入睡眠模式的条件是置位寄存器 MCUCR 的 SE,然后执行 SLEEP 指令。具体哪一种 模式 ( 空闲模式、 ADC 噪声抑制模式、掉电模式 ) 由 MCUCR 的 SM1 和 SM0 决定,如 Table 10 所示。使能的中断可以将进入睡眠模式的 MCU 唤醒。经过启动时间,外加 4 个时 钟周期后, MCU 就可以运行中断例程了。然后返回到 SLEEP 的下一条指令。唤醒时不 会改变寄存器文件和 SRAM 的内容。如果在睡眠过程中发生了复位,则 MCU 唤醒后从中 断向量开始执行。 P20Figure 11 介绍了 ATtiny13 不同的时钟系统及其分布。此图在选择合适的睡眠模式时 非常有用。 MCU 控制寄存器- MCUCR MCU 控制寄存器包含了电源管理的控制位。 Bit 7 6 5 4 3 2 1 0 – PUD SE SM1 SM0 — ISC01 ISC00 读/写 R R/W R/W R/W R/W R R/W R/W 初始值 0 0 0 0 0 0 0 0 MCUCR • Bit 5 – SE: 休眠使能 为了使 MCU 在执行 SLEEP 指令后进入休眠模式, SE 必须置位。为了确保进入休眠模 式是程序员的有意行为,建议仅在 SLEEP 指令的前一条指令置位 SE。MCU 一旦唤醒立 即清除 SE。 • Bits 4, 3 – SM1..0: 休眠模式选择位 2..0 如 Table 10 所示,这些位用于选择具体的休眠模式。 Table 10. 休眠模式选择 SM1 SM0 休眠模式 0 0 空闲模式 0 1 ADC 噪声抑制模式 1 0 掉电模式 1 1 保留 • Bit 2 – Res: 保留 保留位,读操作返回值为零。 26 ATtiny13 2535D–AVR–04/04 ATtiny13 空闲模式 当 SM1..0 为 00 时, SLEEP 指令将使 MCU 进入空闲模式。在此模式下, CPU 停止运 行,而模拟比较器、 ADC、定时器 / 计数器、看门狗和中断系统继续工作。这个休眠模式 只停止了 clkCPU 和 clkFLASH,其他时钟则继续工作。 象定时器溢出等内外部中断都可以唤醒 MCU。如果不需要从模拟比较器中断唤醒 MCU, 为了减少功耗,可以切断比较器的电源。方法是置位模拟比较器控制和状态寄存器 ACSR 的 ACD。如果 ADC 使能,进入此模式后将自动启动一次转换。 ADC 噪声抑制模式 当 SM1..0 为 01 时, SLEEP 指令将使 MCU 进入噪声抑制模式。在此模式下, CPU 停 止运行,而 ADC、外部中断和看门狗继续工作。这个睡眠模式只停止了 clkI/O、 clkCPU 和 clkFLASH,其他时钟则继续工作。 此模式提高了 ADC 的噪声环境,使得转换精度更高。 ADC 使能的时候,进入此模式将 自动启动一次 AD 转换。 ADC 转换结束中断、外部复位、看门狗复位、 BOD 复位、 SPM/EEPROM准备好中断、外部中断INT0 或引脚变化中断可以将MCU从ADC噪声抑制 模式唤醒。 掉电模式 当 SM1..0 为 10 时,SLEEP 指令将使 MCU 进入掉电模式。在此模式下,外部晶体停振, 而外部中断及看门狗 (如果使能的话)继续工作。只有外部复位、看门狗复位、 BOD 复 位、外部电平中断 INT0 或引脚变化中断可以使 MCU 脱离掉电模式。这个睡眠模式停止 了所有的时钟,只有异步模块可以继续工作。 当使用外部电平中断方式将 MCU 从掉电模式唤醒时,必须保持外部电平一定的时间。具 体请参见 P51“ 外部中断 ” 。 Table 11. 在不同睡眠模式下活动的时钟以及唤醒源 掉电模式 Note: 使能的主时钟 INT0 与 引脚变化 SPM/ EEPROM 准备好 ADC Other I/O 看门狗中断 ADC 噪声抑制 模式 唤醒源 clkADC 空闲模式 振荡器 clkIO clkFLASH 睡眠模式 clkCPU 工作的时钟 X X X X X X X X X X X(1) X X (1) X X X 1. INT0 只有电平中断 27 2535D–AVR–04/04 最小化功耗 试图降低 AVR 控制系统的功耗时需要考虑几个问题。一般来说,要尽可能利用睡眠模式, 并且使尽可能少的模块继续工作。不需要的功能必须禁止。下面的模块需要特殊考虑以达 到尽可能低的功耗。 模数转换器 使能时, ADC 在睡眠模式下继续工作。为了降低功耗,在进入睡眠模式之前需要禁止 ADC。重新启动后的第一次转换为扩展的转换。具体请参照 P76“ 模数转换器 ” 。 模拟比较器 在空闲模式时,如果没有使用模拟比较器,可以将其关闭。在 ADC 噪声抑制模式下也是 如此。在其他睡眠模式模拟比较器是自动关闭的。如果模拟比较器使用了内部电压基准 源,则不论在什么睡眠模式下都需要关闭它。否则内部电压基准源将一直使能。请参见 P73“ 模拟比较器 ” 以了解如何配置模拟比较器。 掉电检测 BOD 如果系统没有利用掉电检测器 BOD,这个模块也可以关闭。如果熔丝位 BODLEVEL 被 编程,从而使能了 BOD 功能,它将在各种休眠模式下继续工作。在深层次的休眠模式下, 这个电流将占总电流的很大比重。请参看 P32“ 掉电检测 ” 以了解如何配置 BOD。 片内基准电压 使用 BOD、模拟比较器和 ADC 时可能需要内部电压基准源。若这些模块都禁止了,则基 准源也可以禁止。重新使能后用户必须等待基准源稳定之后才可以使用它。如果基准源在 休眠过程中是使能的,其输出立即可以使用。请参见 P34“ 片内基准电压 ” 以了解基准源 启动时间的细节。 看门狗定时器 如果系统无需利用看门狗,这个模块也可以关闭。若使能,则在任何休眠模式下都持续工 作,从而消耗电流。在深层次的睡眠模式下,这个电流将占总电流的很大比重。请参看 P40“ 中断 ” 以了解如何配置看门狗定时器。 端口引脚 进入休眠模式时,所有的端口引脚都应该配置为只消耗最小的功耗。最重要的是避免驱动 电阻性负载。在休眠模式下 I/O 时钟 clkI/O 和 ADC 时钟 clkADC 都被停止了,输入缓冲器 也禁止了,从而保证输入电路不会消耗电流。在某些情况下输入逻辑是使能的,用来检测 唤醒条件。用于此功能的具体引脚请参见 P45“ 数字输入使能和休眠模式 ” 。 如果输入缓 冲器是使能的,此时输入不能悬空,信号电平也不应该接近 VCC/2,否则输入缓冲器会消 耗额外的电流。 对于模拟输入引脚,数字输入缓冲应始终禁用。即使在工作模式下,在输入引脚的接近 VCC/2 的模拟信号电平会带来明显的电流 。数字输入缓冲可通过写 DIDR0 来禁用,参见 P75“ 数字输入禁用寄存器 0 – DIDR0” 。 28 ATtiny13 2535D–AVR–04/04 ATtiny13 系统控制和复位 复位 AVR 复位时所有的 I/O 寄存器都被设置为初始值,程序从复位向量处开始执行。复位向量处的 指令必须是绝对跳转 JMP 指令,以使程序跳转到复位处理例程。如果程序永远不利用中 断功能,中断向量可以由一般的程序代码所覆盖。Figure 13 为复位逻辑的电路图。Table 12 则定义了复位电路的电气参数。 复位源有效时 I/O 端口立即复位为初始值。此时不要求任何时钟处于正常运行状态。 所有的复位信号消失之后,芯片内部的一个延迟计数器被激活,将内部复位的时间延长。 这种处理方式使得在 MCU 正常工作之前有一定的时间让电源达到稳定的电平。延迟计数 器的溢出时间通过熔丝位 SUT 与 CKSEL 设定。延迟时间的选择请参见 P20“ 时钟源 ” 。 复位源 The ATtiny13 有 4 个复位源: • 上电复位。电源电压低于上电复位门限 VPOT 时, MCU 复位。 • 外部复位。引脚 RESET 上的低电平持续时间大于最小脉冲宽度时 MCU 复位。 • 看门狗复位。看门狗使能并且看门狗定时器溢出时复位发生。 • 掉电检测复位。掉电检测复位功能使能,且电源电压低于掉电检测复位门限 VBOT 时 MCU 即复位。 Figure 13. 复位逻辑 DATA BUS PORF BORF EXTRF WDRF MCU Status Register (MCUSR) Power-on Reset Circuit Brown-out Reset Circuit BODLEVEL [1..0] Pull-up Resistor SPIKE FILTER Watchdog Oscillator Clock Generator CK Delay Counters TIMEOUT CKSEL[1:0] SUT[1:0] 29 2535D–AVR–04/04 Table 12. 复位特性 (1) 符号 参数 条件 最小值 上电复位门限电压 ( 电 压由低到高上升 ) 30 最大值 单位 1.2 V 1.1 V TA = -40 - 85°C VPOT 上电复位门限电压 ( 电 压由高到低跌落 )(2) TA = -40 - 85°C VRST RESET 门限电压 VCC = 1.8V - 5.5V tRST RESET 最小脉冲宽度 VCC = 1.8V - 5.5V Notes: 典型 值 0.1 VCC 0.9 VCC V 2.5 µs 1. 这些值仅作为参考,实际值待测试。 2. 电压下降时,只有电压低于 VPOT 时复位才会发生。 ATtiny13 2535D–AVR–04/04 ATtiny13 上电复位 上电复位 (POR) 脉冲由片内检测电路产生。检测电平请参见 Table 12。 无论何时 VCC 低 于检测电平 POR 即发生。 POR 电路可以用来触发启动复位,或者用来检测电源故障。 POR 电路保证器件在上电时复位。VCC 达到上电门限电压后触发延迟计数器。在计数器溢 出之前器件一直保持为复位状态。当 VCC 下降时,只要低于检测门限, RESET 信号立即 生效。 Figure 14. MCU 启动过程, RESET 连接到 VCC VCC RESET VPOT VRST tTOUT TIME-OUT INTERNAL RESET Figure 15. MCU 启动过程, RESET 由外电路控制 VCC RESET TIME-OUT VPOT VRST tTOUT INTERNAL RESET 31 2535D–AVR–04/04 外部复位 外部复位由外加于 RESET 引脚的低电平产生。当复位低电平持续时间大于最小脉冲宽度 时 ( 参见 Table 12) 即触发复位过程,即使此时并没有时钟信号在运行。当外加信号达到 复位门限电压 VRST( 上升沿 ) 时, tTOUT 延时周期开始。延时结束后 MCU 即启动。 Figure 16. 工作过程中发生外部复位 CC 掉电检测 ATtiny13 具有片内 BOD(Brown-out Detection) 电路,通过与固定的触发电平的对比来检 测工作过程中 VCC 的变化。此触发电平通过熔丝位 BODLEVEL 来设定。 BOD 的触发电 平 具有 迟 滞 功能 以 消除 电 源尖 峰 的 影响。这个 迟 滞功 能 可 以解 释 为 VBOT+ = VBOT + VHYST/2 以及 VBOT- = VBOT - VHYST/2。 Table 13. BODLEVEL 熔丝位编码 (1) BODLEVEL [1..0] 熔丝位 11 Note: 最小 VBOT 典型 VBOT 最大 VBOT 单位 BOD 禁用 10 1.8 01 2.7 00 4.3 V 1. 对某些芯片VBOT 可能低于其标称的最小电压。对这些芯片,在产品测试时,必须有VCC = VBOT ,以保证电压低于正常工作电压 VCC 时会有掉电复位。 Table 14. 掉电特性 最小 值 典型 值 最大 值 符号 参数 单位 VHYST BOD 迟滞 50 mV tBOD 掉电复位最小脉宽 2 µs 当 BOD 使能,一旦 VCC 下降到触发电平以下 (VBOT-, Figure 17), BOD 复位立即被激 发。当 VCC 上升到触发电平以上时 (VBOT+, Figure 17),延时计数器开始计数,一旦超过 溢出时间 tTOUT, MCU 即恢复工作。 如果 VCC 一直低于触发电平并保持如 Table 12 所示的时间 tBOD, BOD 电路将只检测电 压跌落。 32 ATtiny13 2535D–AVR–04/04 ATtiny13 Figure 17. 工作过程中的掉电复位 VCC VBOT+ VBOT- RESET tTOUT TIME-OUT INTERNAL RESET 看门狗复位 看门狗定时器溢出时将产生持续时间为 1 个 CK 周期的复位脉冲。在脉冲的下降沿,延时 定时器开始对 tTOUT 记数。请参见 P40 以了解看门狗定时器的具体操作过程。 Figure 18. 工作过程中发生看门狗复位 CC CK MCU 状态寄存器- MCUSR MCU 状态寄存器提供了有关引起 MCU 复位的复位源的信息。 Bit 7 6 5 4 3 2 1 0 – – – – WDRF BORF EXTRF PORF 读/写 R R R R R/W R/W R/W R/W 初始值 0 0 0 0 MCUSR 参见位说明 • Bits 7..4 – Res: 保留 保留位,读操作返回值为零。 • Bit 3 – WDRF: 看门狗复位标志 看门狗复位发生时置位。上电复位将使其清零,也可以通过写 ”0” 来清除。 • Bit 2 – BORF: 掉电检测复位标志 掉电检测复位发生时置位。上电复位将使其清零,也可以通过写 ”0” 来清除。 • Bit 1 – EXTRF: 外部复位标志 外部复位发生时置位。上电复位将使其清零,也可以通过写 ”0” 来清除。 • Bit 0 – PORF: 上电复位标志 上电复位发生时置位。只能通过写 ”0” 来清除。 33 2535D–AVR–04/04 为了使用这些复位标志来识别复位条件,用户应该尽早读取此寄存器的数据,然后将其复 位。如果在其他复位发生之前将此寄存器复位,则后续复位源可以通过检查复位标志来了 解。 片内基准电压 ATtiny13 具有片内能隙基准源,用于掉电检测,或者是作为模拟比较器或 ADC 的输入。 基准电压使能信号和启动时间 电压基准的启动时间可能影响其工作方式。启动时间列于 Table 15。为了降低功耗,可以 控制基准源仅在如下情况打开: 1. BOD 使能 ( 熔丝位 BODLEVEL [1..0] 被编程 ) 2. 能隙基准源连接到模拟比较器 (ACSR 寄存器的 ACBG 置位 ) 3. ADC 使能 因此,当 BOD 被禁止时,置位 ACBG 或使能 ADC 后要启动基准源。为了降低掉电模式 的功耗,用户可以禁止上述三种条件,并在进入掉电模式之前关闭基准源。 Table 15. 内部电压基准源的特性 (1) 符号 参数 VBG 能隙基准源电压 tBG IBG Note: 34 最小值 典型值 最大值 单位 1.0 1.1 1.2 V 能隙基准源启动时间 40 70 µs 能隙基准源功耗 15 µA 1. 这些值仅作为参考,实际值待测试。 ATtiny13 2535D–AVR–04/04 ATtiny13 看门狗定时器 ATtiny13 有一个增强型的看门狗定时器 (WDT),其主要特征为: • 独立的片上振荡器提供时钟 • 3 种工作模式 – 中断 – 系统复位 – 中断与系统复位 • 暂停时间从 16ms 到 8s 可选 • 看门狗熔丝始终处于故障保险模式。 128kHz OSCILLATOR WATCHDOG RESET WDE OSC/2K OSC/4K OSC/8K OSC/16K OSC/32K OSC/64K OSC/128K OSC/256K OSC/512K OSC/1024K Figure 19. 看门狗定时器 WDP0 WDP1 WDP2 WDP3 MCU RESET WDIF WDIE INTERRUPT 看门狗定时器由独立的 128 kHz 片内振荡器驱动。当计数器达到给定的溢出值时, WDT 发出中断或系统复位。在正常工作模式下,在计数器达到溢出值前,它需要系统使用看门 狗定时器复位指令来重启计数器。若系统没有重启计数器,则会出现中断或系统复位。 在中断模式下,当定时器结束 WDT 发出一个中断。该中断可将芯片从休眠状态中唤醒, 也可作为一个通用系统定时器。例如限制最大工作时间,当工作时间超出期望值时发出中 断。在系统复位模式下,当定时器结束 WDT 发出复位信号。这是为防止由于错误代码所 引起的系统挂起的典型使用。第三种模式,中断与系统复位模式,结合两种模式,首先给 出中断,然后转换到系统复位模式。使用该模式,可在系统复位前通过保存临界参数来安 全关闭。 WDTON 熔丝位编程将使看门狗定时器进入系统复位模式。对其编程时,系统复位模式位 (WDE)与中断模式位(WDTIE)分别为1和0。为保证编程安全,必须按照下面顺序来改变看 门狗设置: 1. 在一步操作中,同时对 WDCE 位与 WDE 写 "1”。无论 WDE 的初始值是多少,在此 必须对其写逻辑 ”1”。 2. 在接着的四个时钟周期内,在 WDE 与 WDP 中写入期望值,但同时要清除 WDCE 位。 35 2535D–AVR–04/04 下面的例子分别用汇编和 C 语言实现了关闭 WDT 的操作。在此假定中断处于用户控制之 下 ( 比如禁止全局中断 ) ,因而在执行下面程序时中断不会发生。 汇编代码例程 (1) WDT_off: ; 关闭全局中断 cli ; WDT 复位 wdr ; 清除 MCUSR 寄存器中 WDRF in r16, MCUSR andi r16, (0xff & (0<<WDRF)) out MCUSR, r16 ; 在 WDCE 与 WDE 中写逻辑 1 ; 保持旧预分频器设置防止无意暂停 in r16, WDTCR ori r16, (1<<WDCE) | (1<<WDE) out WDTCR, r16 ; 关闭 WDT ldi r16, (0<<WDE) out WDTCR, r16 ; 开启全局中断 sei ret C 代码例程 (1) void WDT_off(void) { __disable_interrupt(); __watchdog_reset(); /* 清除 MCUSR 寄存器中 WDRF*/ MCUSR &= ~(1<<WDRF); /* 在 WDCE 与 WDE 中写逻辑 1*/ /* 保持旧预分频器设置防止无意暂停 */ WDTCR |= (1<<WDCE) | (1<<WDE); /* 关闭 WDT */ WDTCR = 0x00; __enable_interrupt(); } Note: 1. 代码例程假设包括所需头文件。 注意:若看门狗由于错误指针或掉电状态等使看门狗出现意外使能,芯片将复位看门狗定 时器将保持使能。如果编码没有设置处理看门狗,则可能导致溢出复位出现死循环。为避 免出现这种状况,即使没有使用看门狗,应用程序在初始化时应对 WDRF 与 WDE 控制 位清零。 下面的例子分别用汇编和 C 语言实现了看门狗定时器溢出值的改变。 36 ATtiny13 2535D–AVR–04/04 ATtiny13 汇编代码例程 (1) WDT_Prescaler_Change: ; 关闭全局中断 cli ; 复位看门狗定时器 wdr ; 启动时序 in r16, WDTCR ori r16, (1<<WDCE) | (1<<WDE) out WDTCR, r16 ; -- 从此时在四个周期中设置新值 - ; 设置新预分频器值 = 64K 周期 (~0.5 s) ldi r16, (1<<WDE) | (1<<WDP2) | (1<<WDP0) out WDTCR, r16 ; -- 完成新值设置,使用 2 周期 - ; 开启全局中断 sei ret C 代码例程 (1) void WDT_Prescaler_Change(void) { __disable_interrupt(); __watchdog_reset(); /* 启动时序 */ WDTCR |= (1<<WDCE) | (1<<WDE); /* 设置新预分频器值 = 64K 周期 (~0.5 s) */ WDTCR = (1<<WDE) | (1<<WDP2) | (1<<WDP0); __enable_interrupt(); } Note: 1. 代码例程假设包括所需头文件。 注意:看门狗定时器应在 WDP 位改变前复位,因为当改变 WDP 转换到一个短溢出周期 时可能会导致暂停。 看门狗定时器控制寄存器- WDTCR Bit 7 6 5 4 3 2 1 0 WDTIF WDTIE WDP3 WDCE WDE WDP2 WDP1 WDP0 读/写 R/W R/W R/W R/W R/W R/W R/W R/W 初始值 0 0 0 0 X 0 0 0 WDTCR 37 2535D–AVR–04/04 • Bit 7 - WDTIF: 看门狗定时器中断标志 当看门狗定时器出现溢出且看门狗定时器配置为中断时,该位置位。当执行相应的中断程 序时, WDTIF 由硬件清除;或者在该位写入逻辑 "1” 来清除。当 SREG 寄存器的 I 位与 WDTIE 置位,执行看门狗溢出中断 。 • Bit 6 - WDTIE: 看门狗定时器中断使能 当该位与 SREG 寄存器的 I 位置位,看门狗中断使能。如果同时也将 WDE 清除,看门狗 定时器进入中断模式,一旦看门狗定时器程序暂停,则执行相应的中断。 若 WDE 置位,则看门狗定时器处于中断与系统复位模式。看门狗定时器的第一次溢出将 设置 WDTIF。执行相应的中断向量将会由硬件最大清除 WDTIE 与 WDTIF( 看门狗进入系 统复位模式 )。这种方式会保证使用中断时看门狗定时器的安全性。在中断与系统复位模 式下, WDTIE 在每次中断后必须设置。然而它不能在中断服务子程序中执行,因为这可 能会损害看门狗系统复位模式的安全性。如果在下一次溢出前没有程序中断,则进入系统 复位模式。 Table 16. 看门狗定时器配置 WDTON WDE WDTIE 模式 暂停活动 0 0 0 停止 无 0 0 1 中断模式 中断 0 1 0 系统复位模式 复位 0 1 1 中断与系统复位模式 中断,然后进入系统复位 模式 1 x x 系统复位模式 复位 • Bit 4 - WDCE: 看门狗修改使能 该位用在改变 WDE 与预分频位的时序中。WDCE 置位来清除 WDE 位,与 / 或改变预分 频位。 一旦置 "1”,硬件将在四个时钟周期后对 WDCE 清零。 • Bit 3 - WDE: 看门狗系统复位使能 WDE 由 MCUSR 寄存器的 WDRF 决定。这就是说当 WDRF 设置时,WDE 也设置。要清除 WDE,必须先清除 WDRF。这一特性保证状态出错时的多重复位,及出错后的安全启动。 • Bit 5, 2..0 - WDP3..0: 看门狗定时器预分频器 3, 2, 1 和 0 WDP3..0 决定看门狗定时器的预分频器。如 P39Table 17 所示。 38 ATtiny13 2535D–AVR–04/04 ATtiny13 . Table 17. 看门狗定时器预分频器选项 WDP3 WDP2 WDP1 WDP0 看门狗振荡器周期 VCC = 5.0V 时典型的溢出 周期 0 0 0 0 2K (2048) 周期 16 ms 0 0 0 1 4K (4096) 周期 32 ms 0 0 1 0 8K (8192) 周期 64 ms 0 0 1 1 16K (16384) 周期 0.125 s 0 1 0 0 32K (32768) 周期 0.25 s 0 1 0 1 64K (65536) 周期 0.5 s 0 1 1 0 128K (131072) 周期 1.0 s 0 1 1 1 256K (262144) 周期 2.0 s 1 0 0 0 512K (524288) 周期 4.0 s 1 0 0 1 1024K (1048576) 周期 8.0 s 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 保留 39 2535D–AVR–04/04 中断 本节描述 ATtiny13 的中断处理。更一般的 AVR 中断处理请参见 P9“ 复位与中断处理 ” 。 ATtiny13 的中断向量 Table 18. 复位和中断向量 向量号 程序 地址 中断源 中断定义 1 0x0000 RESET 外部引脚电平引发的复位,上电复位,掉电检测 复位,看门狗复位 2 0x0001 INT0 外部中断请求 0 3 0x0002 PCINT0 外部中断请求 1 4 0x0003 TIM0_OVF 定时器 / 计数器溢出 5 0x0004 EE_RDY EEPROM 准备好 6 0x0005 ANA_COMP 模拟比较器 7 0x0006 TIM0_COMPA 定时器 / 计数器比较匹配 A 8 0x0007 TIM0_COMPB 定时器 / 计数器比较匹配 B 9 0x0008 WDT 看门狗暂停 10 0x0009 ADC ADC 转换结束 如果程序永远不使能中断,中断向量就没有意义。用户可以在此直接写程序。 ATtiny13 复位与中断向量地址典型设置为: 地址 符号 代码 说明 0x0000 rjmp RESET ; 复位中断向量 0x0001 rjmp EXT_INT0 ; IRQ0 中断向量 0x0002 rjmp PCINT0 ; PCINT0 中断向量 0x0003 rjmp TIM0_OVF ; Timer0 溢出中断向量 0x0004 rjmp EE_RDY ; EEPROM 准备好中断向量 0x0005 rjmp ANA_COMP ; 模拟比较器中断向量 0x0006 rjmp TIM0_COMPA ; Timer0 比较 A 中断向量 0x0007 rjmp TIM0_COMPB ; Timer0 比较 B 中断向量 0x0008 rjmp WATCHDOG ; 看门狗中断向量 0x0009 rjmp ADC ; ADC 转换中断向量 ; 0x000A 0x000B out 0x000C 0x000D ... 40 r16, low(RAMEND); 主程序 RESET: ldi SPL,r16 <instr> ... ; 设置堆栈指针为 RAM 的顶部 ; 使能中断 sei xxx ... ... ATtiny13 2535D–AVR–04/04 ATtiny13 I/O 端口 介绍 作为通用数字 I/O 使用时,所有 AVR I/O 端口都具有真正的读 - 修改 - 写功能。这意味着 用 SBI 或 CBI 指令改变某些管脚的方向时不会无意地改变其他管脚的方向。输出缓冲器 具有对称的驱动能力,可以输出或吸收大电流,直接驱动 LED。所有的端口引脚都具有与 电压无关的上拉电阻。并有保护二极管与 VCC 和地相连,如 Figure 20 所示。请参见 P112“ 电气特性 ” 以了解完整的参数列表。 Figure 20. I/O 引脚等效原理图 Rpu Logic Pxn Cpin See Figure "General Digital I/O" for Details 本节所有的寄存器和位以通用格式表示:小写的 “x” 表示端口的序号,而小写的 “n” 代表 位的序号。但是在程序里要写完整。例如, PORTB3 表示端口 B 的第 3 位,而本节的通 用格式为 PORTxn。物理 I/O 寄存器和位定义列于 P50“I/O 端口寄存器说明 ” 。 每个端口都有三个 I/O 存储器地址 : 数据寄存器 – PORTx、数据方向寄存器 – DDRx 和端 口输入引脚 – PINx。数据寄存器和数据方向寄存器为读 / 写寄存器,而端口输入引脚为只 读寄存器。但是需要特别注意的是,对 PINx 寄存器某一位写入逻辑 "1“ 将造成数据寄存 器相应位的数据发生 "0“ 与 “1“ 的交替变化。当寄存器 MCUCR 的上拉禁止位 PUD 置位 时所有端口引脚的上拉电阻都被禁止。 作为通用数字 I/O 时的端口请参见 P41“ 作为通用数字 I/O 的端口 ” 。多数端口引脚是与第 二功能复用的,如 P46“ 端口的第二功能 ” 所示。请参见各个模块的具体说明以了解引脚 的第二功能。 使能某些引脚的第二功能不会影响其他属于同一端口的引脚用于通用数字 I/O 目的。 作为通用数字 I/O 的端口 端口为具有可选上拉电阻的双向 I/O 端口。 Figure 21 为一个 I/O 端口引脚的说明。 41 2535D–AVR–04/04 Figure 21. 通用数字 I/O(1) PUD Q D DDxn Q CLR WDx RESET DATA BUS RDx 1 Q Pxn D 0 PORTxn Q CLR RESET WRx SLEEP WPx RRx SYNCHRONIZER D Q L Q D RPx Q PINxn Q clk I/O PUD: SLEEP: clkI/O: Note: 配置引脚 PULLUP DISABLE SLEEP CONTROL I/O CLOCK WDx: RDx: WRx: RRx: RPx: WPx: WRITE DDRx READ DDRx WRITE PORTx READ PORTx REGISTER READ PORTx PIN WRITE PINx REGISTER 1. WRx, WPx, WDx, RRx, RPx 和 RDx 对于同一端口的所有引脚都是一样的。 clkI/O, SLEEP 和 PUD 则对所有的端口都是一样的。 每个端口引脚都具有三个寄存器位 : DDxn、 PORTxn 和 PINxn,如 P50“I/O 端口寄存器 说明 ” 所示。DDxn 位于 DDRx 寄存器,PORTxn 位于 PORTx 寄存器,PINxn 位于 PINx 寄存器。 DDxn 用来选择引脚的方向。 DDxn 为 "1“ 时, Pxn 配置为输出,否则配置为输入。 引脚配置为输入时,若 PORTxn 为 "1“,上拉电阻将使能。如果需要关闭这个上拉电阻, 可以将 PORTxn 清零,或者将这个引脚配置为输出。复位时各引脚为高阻态,即使此时 并没有时钟在运行。 当引脚配置为输出时,若 PORTxn 为 "1“,引脚输出高电平 ("1“),否则输出低电平 (“0“)。 转换引脚 在 PINxn 写逻辑 "1” 转换 PORTxn 值, 与 DDRxn 值无关。注意,SBI 指令可用来端口的 一位。 输入输出间转换 在 ( 高阻态 ) 三态 ({DDxn, PORTxn} = 0b00) 输出高电平 ({DDxn, PORTxn} = 0b11) 两种 状态之间进行切换时,上拉电阻使能 ({DDxn, PORTxn} = 0b01) 或输出低电平 ({DDxn, PORTxn} = 0b10) 这两种模式必然会有一个发生。通常,上拉电阻使能是完全可以接受 的,因为高阻环境不在意是强高电平输出还是上拉输出。如果使用情况不是这样子,可以 通过置位 MCUCR 寄存器的 PUD 来禁止所有端口的上拉电阻。 在 上拉 输入 和输 出低 电平 之间 切换 也有 同样 的问 题。用 户必 须选 择高 阻态 ({DDxn, PORTxn} = 0b00) 或输出高电平 ({DDxn, PORTxn} = 0b10) 作为中间步骤。 42 ATtiny13 2535D–AVR–04/04 ATtiny13 Table 19 总结了引脚的控制信号。 Table 19. 端口引脚配置 读取引脚上的数据 DDxn PORTxn PUD (in MCUCR) I/O 上拉电 阻 0 0 X 输入 No 高阻态 (Hi-Z) 0 1 0 输入 Yes 被外部电路拉低时将输出电流 0 1 1 输入 No 高阻态 (Hi-Z) 1 0 X 输出 No 输出低电平 ( 吸收电流 ) 1 1 X 输出 No 输出高电平 ( 输出电流 ) 说明 不论如何配置 DDxn,都可以通过读取 PINxn 寄存器来获得引脚电平。如 Figure 21 所示, PINxn 寄存器的各个位与其前面的锁存器组成了一个同步器。这样就可以避免在内部时钟 状态发生改变的短时间范围内由于引脚电平变化而造成的信号不稳定。其缺点是引入了 延迟。 Figure 22 为读取引脚电平时同步器的时序图。最大和最小传输延迟分别为 tpd,max 和 tpd,min。 Figure 22. 读取引脚数据时的同步 SYSTEM CLK INSTRUCTIONS XXX XXX in r17, PINx SYNC LATCH PINxn r17 0x00 0xFF t pd, max t pd, min 43 2535D–AVR–04/04 下面考虑第一个系统时钟下降沿之后起始的时钟周期。当时钟信号为低时锁存器是关闭 的;而时钟信号为高时信号可以自由通过,如图中 SYNC LATCH 信号的阴影区所示。时 钟为低时信号即被锁存,然后在紧接着的系统时钟上升沿锁存到 PINxn 寄存器。如 tpd,max 和 tpd,min 所示,引脚上的信号转换延迟界于 ½ ~ 1½ 个系统时钟。 如 Figure 23 所示,读取软件赋予的引脚电平时需要在赋值指令 out 和读取指令 in 之间有 一个时钟周期的间隔,如 nop 指令。 out 指令在时钟的上升沿置位 SYNC LATCH 信号。 此时同步器的延迟时间 tpd 为一个系统时钟。 Figure 23. 读取软件赋予的引脚电平的同步 SYSTEM CLK r16 INSTRUCTIONS 0xFF out PORTx, r16 nop in r17, PINx SYNC LATCH PINxn r17 0x00 0xFF t pd 44 ATtiny13 2535D–AVR–04/04 ATtiny13 下面的例子演示了如何置位端口 B 的引脚 0 和 1,清零引脚 2 和 3,以及将引脚 4 到 5 设 置为输入,并且为引脚 4 设置上拉电阻。然后将各个引脚的数据读回来。如前面讨论的那 样,我们在输出和输入语句之间插入了一个 nop 指令。 汇编代码例程 (1) ... ; 定义上拉电阻和设置高电平输出 ; 为端口引脚定义方向 ldi r16,(1<<PB4)|(1<<PB1)|(1<<PB0) ldi r17,(1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0) out PORTB,r16 out DDRB,r17 ; 为了同步插入 nop 指令 nop ; 读取端口引脚 in r16,PINB ... C 代码例程 unsigned char i; ... /* 定义上拉电阻和设置高电平输出 */ /* 为端口引脚定义方向 */ PORTB = (1<<PB4)|(1<<PB1)|(1<<PB0); DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0); /* 为了同步插入 nop 指令 */ __no_operation(); /* 读取端口引脚 */ i = PINB; ... Note: 数字输入使能和休眠模式 1. 在汇编程序里使用了两个暂存器。其目的是为了使整个操作过程的时间最短。通过拉 高引脚 0、 1 与 4,直到方向位设置正确,定义位 2、 3 为低,且重新定义为 0 与 1 为 强驱动。 如 Figure 21 所示,数字输入信号 ( 施密特触发器的输入 ) 可以钳位到地。图中的 SLEEP 信号由 MCU 休眠控制器在各种掉电模式、省电模式以及 Standby 模式下设置,以防止在 输入悬空或模拟输入电平接近 VCC/2 时消耗太多的电流。 引脚作为外部中断输入时 SLEEP 信号无效。但若外部中断没有使能, SLEEP 信号仍然 有效。引脚的第二功能使能时 SLEEP 也让位于第二功能,如 P46“ 端口的第二功能 ” 里描 述的那样。 如果逻辑高电平 (“1”) 出现在一个被设置为 " 上升沿、下降沿或任何逻辑电平变化都引起 中断 " 的外部异步中断引脚上,即使该外部中断未被使能,但从上述休眠模式唤醒时,相 应的外部中断标志位仍会被置 "1”。这是因为引脚电平在休眠模式下被钳位到 "0” 电平。唤 醒过程造成了引脚电平从 "0” 到 ”1” 的变化。 未连接引脚的处理 如果有引脚未被使用,建议给这些引脚赋予一个确定电平。虽然如上文所述,在深层休眠 模式下大多数数字输入被禁用,但还是需要避免因引脚没有确定的电平而造成悬空引脚 在其它数字输入使能模式 ( 复位、工作模式、空闲模式 ) 消耗电流。 45 2535D–AVR–04/04 最简单的保证未用引脚具有确定电平的方法是使能内部上拉电阻。但要注意的是复位时 上拉电阻将被禁用。如果复位时的功耗也有严格要求则建议使用外部上拉或下拉电阻。不 推荐直接将未用引脚与 VCC 或 GND 连接,因为这样可能会在引脚偶然作为输出时出现冲 击电流。 端口的第二功能 除了通用数字 I/O 功能之外,大多数端口引脚都具有第二功能。Figure 24 说明了由 Figure 21 简化得出的端口引脚控制信号是如何被第二功能取代的。这些被重载的信号不会出现 在所有的端口引脚,但本图可以看作是适合于AVR系列处理器所有端口引脚的一般说明。 Figure 24. 端口的第二功能 (1) PUOExn PUOVxn 1 PUD 0 DDOExn DDOVxn 1 Q D DDxn 0 Q CLR WDx PVOExn RESET RDx 1 DATA BUS PVOVxn 1 Pxn Q 0 D 0 PORTxn PTOExn Q CLR DIEOExn WPx RESET DIEOVxn WRx 1 0 RRx SLEEP SYNCHRONIZER D SET Q RPx Q D PINxn L CLR Q CLR Q clk I/O DIxn AIOxn PUOExn: PUOVxn: DDOExn: DDOVxn: PVOExn: PVOVxn: DIEOExn: DIEOVxn: SLEEP: PTOExn: Note: 46 Pxn PULL-UP OVERRIDE ENABLE Pxn PULL-UP OVERRIDE VALUE Pxn DATA DIRECTION OVERRIDE ENABLE Pxn DATA DIRECTION OVERRIDE VALUE Pxn PORT VALUE OVERRIDE ENABLE Pxn PORT VALUE OVERRIDE VALUE Pxn DIGITAL INPUT-ENABLE OVERRIDE ENABLE Pxn DIGITAL INPUT-ENABLE OVERRIDE VALUE SLEEP CONTROL Pxn, PORT TOGGLE OVERRIDE ENABLE PUD: WDx: RDx: RRx: WRx: RPx: WPx: clkI/O: DIxn: AIOxn: PULLUP DISABLE WRITE DDRx READ DDRx READ PORTx REGISTER WRITE PORTx READ PORTx PIN WRITE PINx I/O CLOCK DIGITAL INPUT PIN n ON PORTx ANALOG INPUT/OUTPUT PIN n ON PORTx 1. WPx, WDx, RLx, RPx和RDx对于同一个端口的所有引脚都是一样的。clkI/O, SLEEP和 PUD 则对所有的端口都是一样的。其他信号只对某一个引脚有效。 ATtiny13 2535D–AVR–04/04 ATtiny13 Table 20 为重载信号的简介。表中没有给出 Figure 24 的引脚和端口索引。这些重载信号 是由第二功能模块产生的。 Table 20. 第二功能重载信号的一般说明 信号名称 全称 说明 PUOE 上拉电阻 重载使能 若此信号置位,上拉电阻使能将受控于 PUOV ;若此信 号清零,则 {DDxn, PORTxn, PUD} = 0b010 时上拉电阻 使能。 PUOV 上拉电阻 重载值 若 PUOE 置位,则不论 DDxn、PORTxn 和 PUD 寄存器 各个位如何配置, PUOV 置位 / 清零时上拉电阻使能 / 禁 止 DDOE 数据方向 重载使能 如果此信号置位,则输出驱动使能由 DDOV 控制;若此 信号清零,输出驱动使能由 DDxn 寄存器控制。 DDOV 数据方向 重载值 若 DDOE 置位,则 DDOV 置位 / 清零时输出驱动使能 / 禁止,而不管 DDxn 寄存器的设置如何。 PVOE 端口数据 重载使能 如果这个信号置位,且输出驱动使能,端口数据由 PVOV 控制;若 PVOE 清零,且输出驱动使能,端口数据由寄 存器 PORTxn 控制。 PVOV 端口数据 重载值 若 PVOE 置位,端口值设置为 PVOV,而不管寄存器 PORTxn 如何设置。 PTOE 端口转换覆盖使 能 若 PTOE 置位 ,PORTxn 寄存器位转向 DIEOE 数字输入 使能覆盖使能 如果这个信号置位,数字输入使能由 DIEOV 控制;若 DIEOE 清零,数字输入使能由 MCU 的状态确定 ( 正常模 式,睡眠模式 )。 DIEOV 数字输入 使能覆盖值 若 DIEOE 置位, DIEOV 置位 / 清零时数字输入使能 / 禁 止,而不管 MCU 的状态如何 ( 正常模式,睡眠模式 )。 DI 数字输入 此信号为第二功能的数字输入。在图中,这个信号与施密 特触发相连,并且在同步器之前。除非数字输入用作时钟 源,否则第二功能模块将使用自己的同步器。 AIO 模拟信号 输入 / 输出 模拟输入 / 输出。信号直接与引脚接点相连,而且可以用 作双向端口。 下面的几小节将简单地说明每个端口的第二功能以及相关的信号。具体请参考有关第二 功能的说明。 47 2535D–AVR–04/04 MCU 控制寄存器- MCUCR Bit 7 6 5 4 3 2 1 0 – PUD SE SM1 SM0 – ISC01 ISC00 读/写 R R/W R/W R/W R/W R R/W R/W 初始值 0 0 0 0 0 0 0 0 MCUCR • Bits 7, 2– Res: 保留 保留位,读操作返回值为零。 • Bit 6 – PUD: 上拉禁用 当该位为 1,即使 DDxn 与 PORTxn 寄存器配置为使能上拉电阻 ({DDxn, PORTxn} = 0b01), I/O 端口上拉电阻禁用,详见 P42“ 配置引脚 ” 。 端口 B 的第二功能 端口 B 的第二功能列于 Table 21。 Table 21. 端口 B 的第二功能 端口引脚 Notes: 第二功能 PB5 RESET/dW/ADC0/PCINT5(1) PB4 ADC2/PCINT4(2) PB3 ADC3/CLKI/PCINT3(3) PB2 SCK/ADC1/T0/PCINT2(4) PB1 MISO/AIN1/OC0B/INT0/PCINT1/RXD(5) PB0 MOSI/AIN0/OC0A/PCINT0/TXD(6) 复位引脚,调试线 I/O, ADC 输入通道或引脚变化中断。 ADC 输入通道或引脚变化中断。 ADC 输入通道,时钟输入或引脚变化中断。 串行时钟输入,定时器 / 计数器时钟输入, ADC 输入通道 0 或引脚变化中断 串行数据输入,模拟比较器反向输入,输出比较与定时器 / 计数器的 PWM 输出 B,外部 中断 0 或引脚变化中断 6. 串行数据输入,模拟比较器正向输入,输出比较与定时器/计数器的PWM输出A或引脚 变化中断 1. 2. 3. 4. 5. Table 22 与 P49Table 23 端口 B 的第二功能的重载信号见 P46Figure 24。 48 ATtiny13 2535D–AVR–04/04 ATtiny13 Table 22. PB5..PB3 重载信号 信号 名称 PB5/RESET/ ADC0/PCINT5 (1) (1) PB4/ADC2/PCINT4 PB3/ADC3/CLKI/PCINT3 0 0 PUOE RSTDISBL PUOV 1 0 0 DDOE RSTDISBL(1) • DWEN(1) 0 0 DDOV 调试线传送 0 0 PVOE 0 0 0 PVOV 0 0 0 PTOE 0 0 0 • DWEN (1) DIEOE RSTDISBL + (PCINT5 • PCIE + ADC0D) PCINT4 • PCIE + ADC2D PCINT3 • PCIE + ADC3D DIEOV ADC0D ADC2D ADC3D DI PCINT5 输入 PCINT4 输入 PCINT3 输入 AIO RESET 输入,ADC0 输入 ADC2 输入 ADC3 输入 Note: 1. 1 当熔丝位为 “0” ( 已编程 )。 Table 23. PB2..PB0 重载信号 信号 名称 PB2/SCK/ADC1/ T0/PCINT2 PB1/MISO/AIN1/ OC0B/INT0/PCINT1 PB0/MOSI/AIN0/AREF/ OC0A/PCINT0 PUOE 0 0 0 PUOV 0 0 0 DDOE 0 0 0 DDOV 0 0 0 PVOE 0 OC0B 使能 OC0A 使能 PVOV 0 OC0B OC0A PTOE 0 0 0 DIEOE PCINT2 • PCIE + ADC1D PCINT1 • PCIE + AIN1D PCINT0 • PCIE + AIN0D DIEOV ADC1D AIN1D AIN0D DI T0/INT0/ PCINT2 输入 PCINT1 输入 PCINT0 输入 AIO ADC1 输入 模拟比较器反向输入 模拟比较器正向输入 49 2535D–AVR–04/04 I/O 端口寄存器说明 端口 B 数据寄存器- PORTB 端口 B 数据方向寄存器- DDRB 端口 B 输入引脚地址- PINB 50 Bit 7 6 5 4 3 2 1 0 – – PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0 读/写 R R R/W R/W R/W R/W R/W R/W 初始值 0 0 0 0 0 0 0 0 Bit 7 6 5 4 3 2 1 0 – – DDB5 DDB4 DDB3 DDB2 DDB1 DDB0 读/写 R R R/W R/W R/W R/W R/W R/W 初始值 0 0 0 0 0 0 0 0 Bit 7 6 5 4 3 2 1 0 – – PINB5 PINB4 PINB3 PINB2 PINB1 PINB0 读/写 R R R/W R/W R/W R/W R/W R/W 初始值 0 0 N/A N/A N/A N/A N/A N/A PORTB DDRB PINB ATtiny13 2535D–AVR–04/04 ATtiny13 外部中断 外部中断通过引脚INT0或PCINT5..0触发。只要使能了中断,即使引脚INT0或PCINT5..0 配置为输出,只要电平发生了合适的变化,中断也会触发。这个特点可以用来产生软件中 断。使能PCINT5..0引脚转换将触发引脚变化PCI。哪个引脚作为引脚变化中断由PCMSK 寄存器控制。PCINT5..0 的引脚变化中断是异步检测的。也就是说,这些中断可以用来将 器件从睡眠模式唤醒。 通过设置 MCU 控制寄存器 MCUCR,中断可以由下降沿、上升沿,或者是低电平触发。 当外部中断使能并且配置为电平触发,只要引脚电平为低,中断就会产生。若要求 INT0 在信号下降沿或上升沿触发, I/O 时钟必须工作,如 P20“ 时钟系统及其分布 ” 说明的那 样。 INT0 的中断条件检测是异步的。也就是说,这些中断可以用来将器件从睡眠模式唤 醒。在睡眠过程 ( 除了空闲模式 ) 中 I/O 时钟是停止的。 注意,通过电平方式触发中断,从而将 MCU 从掉电模式唤醒时,要保证电平保持一定的 时间。若电平在启动完成前结束, MCU 被唤醒,但不会产生中断。启动时间由 P20“ 系 统时钟及时钟选项 ” 所示的 SUT 与 CKSEL 熔丝位定义。 MCU 控制寄存器- MCUCR 外部中断控制寄存器 A 包含中断敏感控制的控制位。 Bit 7 6 5 4 3 2 1 0 – PUD SE SM1 SM0 – ISC01 ISC00 读/写 R R/W R/W R/W R/W R R/W R/W 初始值 0 0 0 0 0 0 0 0 MCUCR • Bits 1, 0 – ISC01, ISC00: 中断敏感方式控制 0 Bit1 与 Bit0 外部中断 0 由引脚 INT0 激发,如果 SREG 寄存器的 I 标志位和相应的中断屏蔽位置位的 话。触发方式如 Table 24 所示。在检测边沿前 MCU 首先采样 INT0 引脚上的电平。如果 选择了边沿触发方式或电平变化触发方式,那么持续时间大于一个时钟周期的脉冲将触 发中断,过短的脉冲则不能保证触发中断。如果选择低电平触发方式,那么低电平必须保 持到当前指令执行完成。 Table 24. 中断 0 敏感控制 说明 ISC01 ISC00 0 0 INT0 为低电平时产生中断请求 0 1 INT0 引脚上任意的逻辑电平变化都将引发中断 1 0 INT0 的下降沿产生异步中断请求 1 1 INT0 的上升沿产生异步中断请求 51 2535D–AVR–04/04 通用中断屏蔽寄存器- GIMSK Bit 7 6 5 4 3 2 1 – INT0 PCIE – – – – 0 – 读/写 R R/W R/W R R R R R 初始值 0 0 0 0 0 0 0 0 GIMSK • Bits 7, 4..0 – Res: 保留 保留位,该操作返回值为零。 • Bit 6 – INT0: 外部中断请求 0 使能 当 INT0 为 '1’,而且状态寄存器 SREG 的 I 标志置位,相应的外部引脚中断就使能了。中 断敏感电平控制 0 位 1/0 (ISC01 与 ISC00) 决定中断是由上升沿、下降沿,还是 INT0 电 平触发的。只要使能,即使 INT0 引脚被配置为输出,只要引脚电平发生了相应的变化, 中断可将产生。 • Bit 5 – PCIE: 引脚变化中断使能 当 PCIE 位为 '1’,而且状态寄存器 SREG 的 I 标志置位,引脚变化中断使能。使能的 PCINT5..0 引脚上电平变化将造成中断。执行相应的 PCI 中断程序。PCINT5..0 各引脚由 PCMSK0 寄存器单独使能。 通用中断标志寄存器- GIFR Bit 7 6 5 4 3 2 1 – INTF0 PCIF – – – – 0 – 读/写 R R/W R/W R R R R R 初始值 0 0 0 0 0 0 0 0 GIFR • Bits 7, 4..0 – Res: 保留 保留位,该操作返回值为零。 • Bit 6 – INTF0: 外部中断标志 0 INT0 引脚电平发生跳变时触发中断请求,并置位相应的中断标志 INTF0。如果 SREG 的位 I 以及 GIMSK 寄存器相应的中断使能位 INT0 为 ”1”,MCU 即跳转到相应的中断向量。进入 中断服务程序之后该标志自动清零。此外,标志位也可以通过写入 ”1” 来清零。当 INT0 配置为电平中断时,该标志始终清零。 • Bit 5 – PCIF: 引脚变化中断标志 当 PCINT5..0 任意引脚电平变化触发中断请求,PCIF 置 "1”。若 SREG 的位 I 与 GIMSK 寄存器的 PCIE 位为 "1”,MCU 即跳转到相应的中断向量。进入中断服务程序之后该标志 自动清零。此外,标志位也可以通过写入 ”1” 来清零。 52 ATtiny13 2535D–AVR–04/04 ATtiny13 引脚变化屏蔽寄存器- PCMSK Bit 7 6 5 4 3 2 1 0 – – PCINT5 PCINT4 PCINT3 PCINT2 PCINT1 PCINT0 读/写 R R R/W R/W R/W R/W R/W R/W 初始值 0 0 1 1 1 1 1 1 PCMSK • Bits 7, 6 – Res: 保留 保留位,该操作返回值为零。 • Bits 5..0 – PCINT5..0: 引脚变化使能屏蔽 5..0 每个 PCINT5..0 位选择是否使能相应的 I/O 引脚变化中断。若 PCINT5..0 与 PCIE 位设 置,使能相应的引脚变化中断。若 PCINT5..0 清除,则禁用相应的引脚变化中断。 53 2535D–AVR–04/04 具有 PWM 功能的 8 位 定时器 / 计时器 0 T/C0 是通用 8 位定时器 / 计数器模块,有两个独立的输出比较单元,且支持 PWM 功能。它 提供精确的执行时序与波形产生。其主要特点如下: • 两个独立输出比较单元 • 双缓冲输出比较寄存器 • 比较匹配发生时清除定时器 ( 自动加载 ) • 无干扰脉冲,相位正确的 PWM • 可变 PWM 周期 • 频率发生器 • 三个独立中断源 (TOV0, OCF0A 及 OCF0B) 综述 Figure 25为8位定时器/计数器的简化框图。实际引脚排列请参考P1“ATtiny13芯片引脚” 。 CPU可以访问的I/O寄存器,包括位和引脚,以粗体显示。I/O寄存器和位的位置列于P65“8 位 定时器 / 计数器寄存器的说明 ” 。 Figure 25. 8 位 T/C 方框图 Count Clear Direction TOVn (Int.Req.) Control Logic clkTn Clock Select Edge Detector TOP Tn BOTTOM ( From Prescaler ) Timer/Counter TCNTn = =0 OCnA (Int.Req.) Waveform Generation = OCnA DATA BUS OCRnA Fixed TOP Value Waveform Generation = OCnB OCRnB TCCRnA 寄存器 OCnB (Int.Req.) TCCRnB T/C(TCNT0)和输出比较寄存器(OCR0A 与 OCR0B)为 8位寄存器。中断请求 (图中简写为 Int.Req. ) 信号在定时器中断标志寄存器 TIFR0 都有反映。 所有中断都可以通过定时器中 断屏蔽寄存器 TIMSK0 单独进行屏蔽。图中没有给出 TIFR0 和 TIMSK0。 T/C可以通过预分频器由内部时钟源驱动,或者是通过T0 引脚的外部时钟源来驱动。时钟 选择逻辑模块控制使用哪一个时钟源与什么边沿来增加 ( 或降低 )T/C 的数值。如果没有 选择时钟源 T/C 就不工作。时钟选择模块的输出定义为定时器时钟 clkT0。 双缓冲的输出比较寄存器 (OCR0A 与 OCR0B) 一直与 T/C 的数值进行比较。比较的结果 可用来产生 PWM 波,或在输出比较引脚 OC0 上产生变化频率的输出,如 P56“ 输出比较 单元 ” 说明的那样。比较匹配事件还将置位比较标志 (OCF0A 或 OCF0B)。此标志可以用 来产生输出比较中断请求。 定义 54 本文的许多寄存器及其各个位以通用的格式表示。小写的 “n” 取代了 T/C 的序号,在此即 为 0。小写的 “x” 取代了输出比较单元通道,在此即为通道 A 或 B。但是在写程序时要使 用精确的格式,例如使用 TCNT0 来访问 T/C0 计数器值,等等。 ATtiny13 2535D–AVR–04/04 ATtiny13 Table 25 的定义适用于全文。 Table 25. 定义 BOTTOM 计数器计到 0x00 时即达到 BOTTOM。 MAX 计数器计到 0xFF ( 十进制的 255) 时即达到 MAX。 TOP 计数器计到计数序列的最大值时即达到 TOP。TOP 值可以为固定值 0xFF (MAX),或是存储于寄存器 OCR0A 里的数值,具体由工作模式确定 T/C 的时钟源 T/C 可以由内部同步时钟或外部时钟驱动。时钟源是由时钟选择逻辑决定的,而时钟选择 逻辑是由位于 T/C 控制寄存器 TCCR0B 的时钟选择位 CS02:0 控制的。 P71“T/C 预分频 器 ” 对时钟源与预分频有详尽的描述。 计数器单元 8 位 T/C 的主要部分为可编程的双向计数单元。Figure 26 即为计数器和周边电路的框图。 Figure 26. 计数器单元方框图 TOVn (Int.Req.) DATA BUS Clock Select count TCNTn clear Control Logic clkTn Edge Detector Tn direction ( From Prescaler ) bottom top 信号说明 ( 内部信号 ): count 使 TCNT0 加 1 或减 1。 direction 选择加操作或减操作。 clear 清除 TCNT0 ( 将所有的位清零 )。 clkTn T/C 的时钟, clkT0 。 top 表示 TCNT0 已经达到了最大值。 bottom 表示 TCNT0 已经达到了最小值 (0)。 55 2535D–AVR–04/04 根据不同的工作模式,计数器针对每一个 clkT0 实现清零、加一或减一操作。clkT0 可以由 内部时钟源或外部时钟源产生,具体由时钟选择位 CS02:0 确定。没有选择时钟源时 (CS02:0 = 0) 定时器即停止。但是不管有没有 clkT0,CPU 都可以访问 TCNT0。CPU 写操 作比计数器其他操作 ( 如清零、加减操作 ) 的优先级高。 计数序列由 T/C 控制寄存器 (TCCR0A) 的 WGM01 和 WGM00 及 (TCCR0B) 的 WGM02 位决定。计数器计数行为与输出比较 OC0A 的波形有紧密的关系。有关计数序列和波形 产生的详细信息请参考 P59“ 工作模式 ” 。 T/C溢出中断标志TOV0根据WGM01:0 设定的工作模式来设置。TOV0可以用于产生CPU 中断。 输出比较单元 8位比较器持续对TCNT0和输出比较寄存器OCR0A(与OCR0B)进行比较。一旦TCNT0等 于 OCR0A 或 OCR0B,比较器就给出匹配信号。在匹配发生的下一个定时器时钟周期输 出比较标志 OCF0A( 或 OCF0B) 置位。若此时相应中断使能, CPU 将产生输出比较中 断。执行中断服务程序时 OCF0A( 或 OCF0B) 自动清零,或者通过软件写 ”1” 的方式来清 零。根据由 WGM2:0 和 COM0x1:0 设定的不同的工作模式,波形发生器利用匹配信号产 生不同的波形。同时,波形发生器还利用 max 和 bottom 信号来处理极值条件下的特殊情 况 (P59“ 工作模式 ” )。 Figure 27 为输出比较单元的方框图。 Figure 27. 输出比较单元方框图 DATA BUS OCRnx TCNTn = (8-bit Comparator ) OCFnx (Int.Req.) top bottom Waveform Generator OCnx FOCn WGMn1:0 56 COMnX1:0 ATtiny13 2535D–AVR–04/04 ATtiny13 使用 PWM 模式时 OCR0x 寄存器为双缓冲寄存器;而在正常工作模式和匹配时清零模式 双缓冲功能是禁止的。双缓冲可以将更新 OCR0x 寄存器与 top 或 bottom 时刻同步起来, 从而防止产生不对称的 PWM 脉冲,消除了干扰脉冲。 访问 OCR0x 寄存器看起来很复杂,其实不然。使能双缓冲功能时,CPU 访问的是 OCR0x 缓冲寄存器;禁止双缓冲功能时 CPU 访问的则是 OCR0x 本身。 强制输出比较 工作于非 PWM 模式时,可以通过对强制输出比较位 FOC0x 写 ”1” 的方式来产生比较匹 配。强制比较匹配不会置位 OCF0x 标志,也不会重载 / 清零定时器,但是 OC0x 引脚将 被更新,好象真的发生了比较匹配一样 (COM01:0 决定 OC0x 是置位、清零,还是 "0“-”1” 交替变化 )。 写 TCNT0 操作将阻止比较匹配 CPU 对 TCNT0 寄存器的写操作会在下一个定时器时钟周期阻止比较匹配的发生,即使此 时定时器已经停止了。这个特性可以用来将 OCR0x 初始化为与 TCNT0 相同的数值而不 触发中断。 使用输出比较单元 由于在任意模式下写 TCNT0 都将在下一个定时器时钟周期里阻止比较匹配,在使用输出 比较时改变 TCNT0 就会有风险,不论 T/C 此时是否在运行与否。如果写入的 TCNT0 的 数值等于 OCR0x,比较匹配就被丢失了,造成不正确的波形发生结果。类似地,在计数 器进行降序计数时不要对 TCNT0 写入等于 BOTTOM 的数据。 OC0x 的设置应该在设置数据方向寄存器之前完成。最简单的设置 OC0x 的方法是在普通 模式下利用强制输出比较 FOC0x。即使在改变波形发生模式时 OC0x 寄存器也会一直保 持它的数值。 注意 COM0x1:0 和比较数据都不是双缓冲的。 COM0x1:0 的改变将立即生效。 57 2535D–AVR–04/04 比较匹配输出单元 比较匹配模式控制位 COM0x1:0 具有双重功能。波形发生器利用 COM0x1:0 来确定下一 次比较匹配发生时的输出比较状态 (OC0x) ; COM0x1:0 还控制 OC0x 引脚输出信号的来 源。 Figure 28 为受 COM0x1:0 设置影响的简化逻辑框图。 I/O 寄存器、 I/O 位和 I/O 引 脚以粗体表示。图中只给出了受 COM0x1:0 影响的通用 I/O 端口控制寄存器 (DDR 和 PORT)。谈及OC0x状态时指的是内部OC0x寄存器,而不是OC0x引脚。系统复位时OC0x 寄存器清零。 Figure 28. 比较匹配输出单元原理图 COMnx1 COMnx0 FOCn Waveform Generator D Q 1 OCnx DATA BUS D 0 OCn Pin Q PORT D Q DDR clk I/O 如果 COM0x1:0 不全为零,通用 I/O 口功能将被波形发生器的输出比较功能取代。但 OC0x 引脚为输入还是输出仍然由数据方向寄存器 DDR 控制。在使用 OC0x 功能之前首先要通 过数据方向寄存器的 DDR_OC0x 位将此引脚设置为输出。端口功能与波形发生器的工作 模式无关。 输出比较逻辑的设计允许 OC0x 状态在输出之前首先进行初始化。要注意某些 COM0x1:0 设置保留给了其他操作类型,详见 P65“8 位 定时器 / 计数器寄存器的说明 ” 。 比较输出模式和波形产生 波形发生器利用 COM0x1:0 的方法在普通模式、 CTC 模式和 PWM 模式下有所区别。对 于所有的模式,设置 COM0x1:0 = 0 表明比较匹配发生时波形发生器不会操作 OC0x 寄存 器。非 PWM 模式的比较输出请参见 P65Table 26 ;快速 PWM 的比较输出示于 P65Table 27 ;相位修正 PWM 的比较输出在 P65Table 28 有描述。 改变 COM0x1:0 将影响写入数据后的第一次比较匹配。对于非 PWM 模式,可以通过使 用 FOC0x 来立即产生效果。 58 ATtiny13 2535D–AVR–04/04 ATtiny13 工作模式 工作模式 - T/C 和输出比较引脚的行为 - 由波形发生模式 (WGM02:0) 及比较输出模式 (COM0x1:0) 的控制位决定。比较输出模式对计数序列没有影响,而波形产生模式对计数 序列则有影响。 COM0x1:0 控制 PWM 输出是否为反极性。非 PWM 模式时 COM0x1:0 控制输出是否应该在比较匹配发生时置位、清零,或是电平取反 (P58“ 比较匹配输出单元 ” )。 具体的时序信息请参考 P63“T/C 时序图 ” 之 Figure 32、 Figure 33 、Figure 34 与 Figure 35。 普通模式 普通模式 (WGM02:0 = 0) 为最简单的工作模式。在此模式下计数器不停地累加。计到 8 比特的最大值后 (TOP = 0xFF),由于数值溢出计数器简单地返回到最小值 0x00 重新开 始。在 TCNT0 为零的同一个定时器时钟里 T/C 溢出标志 TOV0 置位。此时 TOV0 有点象 第 9 位,只是只能置位,不会清零。但由于定时器中断服务程序能够自动清零 TOV0,因 此可以通过软件提高定时器的分辨率。在普通模式下没有什么需要特殊考虑的,用户可以 随时写入新的计数器数值。 输出比较单元可以用来产生中断。但是不推荐在普通模式下利用输出比较来产生波形,因 为这会占用太多的 CPU 时间。 CTC( 比较匹配时清零定时器 ) 模式 在 CTC 模式 (WGM02:0 = 2) 下 OCR0A 寄存器用于调节计数器的分辨率。当计数器的数 值 TCNT0 等于 OCR0A 时计数器清零。OCR0A 定义了计数器的 TOP 值,亦即计数器的 分辨率。这个模式使得用户可以很容易地控制比较匹配输出的频率,也简化了外部事件计 数的操作。 CTC 模式的时序图为 Figure 29。计数器数值 TCNT0 一直累加到 TCNT0 与 OCR0A 匹配, 然后 TCNT0 清零。 Figure 29. CTC 模式的时序图 OCnx Interrupt Flag Set TCNTn OCn (Toggle) Period (COMnx1:0 = 1) 1 2 3 4 利用 OCF0A 标志可以在计数器数值达到 TOP 时产生中断。在中断服务程序里可以更新 TOP的数值。由于CTC模式没有双缓冲功能,在计数器以无预分频器或很低的预分频器工 作的时候将 TOP 更改为接近 BOTTOM 的数值时要小心。如果写入的 OCR0A 数值小于 当前 TCNT0 的数值,计数器将丢失一次比较匹配。在下一次比较匹配发生之前,计数器 不得不先计数到最大值 0xFF,然后再从 0x00 开始计数到 OCF0A。 为了在 CTC 模式下得到波形输出,可以设置 OC0A 在每次比较匹配发生时改变逻辑电平。 这可以通过设置 COM0A1:0 = 1 来完成。在期望获得 OC0A 输出之前,首先要将其端口 设置为输出。波形发生器能够产生的最大频率为 fOC0 = fclk_I/O/2 (OCR0 A= 0x00)。频率由 如下公式确定: f clk_I/O f OCnx = ---------------------------------------------------2 ⋅ N ⋅ ( 1 + OCRnx ) 变量 N 代表预分频因子 (1、 8、 64、 256 或 1024)。 59 2535D–AVR–04/04 在普通模式下, TOV0 标志的置位发生在计数器从 MAX 变为 0x00 的定时器时钟周期。 快速 PWM 模式 快速 PWM 模式 (WGM02:0 = 3 或 7) 可用来产生高频的 PWM 波形。快速 PWM 模式与 其他 PWM 模式的不同之处是其单斜坡工作方式。计数器从 BOTTOM 计到 TOP,然后立 即回到 BOTTOM 重新开始。当 WGM2:0 = 3 时,TOP 值为 0xFF ;当 WGM2:0 = 7 时, TOP值为OCR0A。对于普通的比较输出模式,输出比较引脚OC0x在TCNT0与OCR0x匹 配时清零,在 BOTTOM 时置位;对于反向比较输出模式, OC0x 的动作正好相反。由于 使用了单斜坡模式,快速 PWM 模式的工作频率比使用双斜坡的相位修正 PWM 模式高一 倍。此高频操作特性使得快速 PWM 模式十分适合于功率调节,整流和 DAC 应用。高频 可以减小外部元器件 ( 电感,电容 ) 的物理尺寸,从而降低系统成本。 工作于快速 PWM 模式时,计数器的数值一直增加到 TOP,然后在后面的一个时钟周期 清零。具体的时序图为 Figure 30。图中柱状的 TCNT0 表示这是单边斜坡操作。方框图同 时包含了普通的 PWM 输出以及反向 PWM 输出。TCNT0 斜坡上的短水平线表示 OCR0x 和 TCNT0 的比较匹配。 Figure 30. 快速 PWM 模式时序图 OCRnx Interrupt Flag Set OCRnx Update and TOVn Interrupt Flag Set TCNTn OCn (COMnx1:0 = 2) OCn (COMnx1:0 = 3) Period 1 2 3 4 5 6 7 计时器数值达到 TOP 时 T/C 溢出标志 TOV0 置位。如果中断使能,在中断服务程序可以 更新比较值。 工作于快速 PWM 模式时,比较单元可以在 OC0x 引脚上输出 PWM 波形。设置 COM0x1:0 为 2 可以产生普通的 PWM 信号;为 3 则可以产生反向 PWM 波形:若 WGM02 位设置, 设置 COM0A1:0 位为 "1” 允许 AC0A 引脚转换到比较匹配。该选项对 OC0B 引脚无效 ( 参见 P65Table 27)。要想在引脚上得到输出信号还必须将 OC0x 的数据方向设置为输出。 产生 PWM 波形的机理是 OC0x 寄存器在 OCR0x 与 TCNT0 匹配时置位 ( 或清零 ),以及 在计数器清零 ( 从 TOP 变为 BOTTOM) 的那一个定时器时钟周期清零 ( 或置位 )。 输出的 PWM 频率可以通过如下公式计算得到: f clk_I/O f OCnxPWM = -----------------N ⋅ 256 变量 N 代表分频因子 (1、 8、 64、 256 或 1024)。 OCR0A 寄存器为极限值时表示快速 PWM 模式的一些特殊情况。若 OCR0A 等于 BOTTOM,输出为出现在第MAX+1个定时器时钟周期的窄脉冲;OCR0A为MAX时,根据 COM0A1:0 的设定,输出恒为高电平或低电平。 60 ATtiny13 2535D–AVR–04/04 ATtiny13 通过设定OC0x在比较匹配时进行逻辑电平取反(COM0x1:0 = 1),可以得到占空比为50% 的周期信号。 OCR0A 为 0 时信号有最高频率 foc0 = fclk_I/O/2。这个特性类似于 CTC 模式 下的 OC0A 取反操作,不同之处在于快速 PWM 模式具有双缓冲。 61 2535D–AVR–04/04 相位修正 PWM 模式 相位修正 PWM 模式 (WGM02:0 = 1 或 5) 为用户提供了一个获得高精度相位修正 PWM 波 形的方法。此模式基于双斜坡操作。计时器重复地从 BOTTOM 计到 TOP,然后又从 TOP 倒退回到 BOTTOM。当 WGM2:0 = 1 时, TOP 值为 0xFF ;当 WGM2:0 = 5 时, TOP 值为 OCR0A 。在一般的比较输出模式下,当计时器往 TOP 计数时若发生了 TCNT0 与 OCR0x 的匹配,OC0x 将清零为低电平;而在计时器往 BOTTOM 计数时若发生了 TCNT0 与 OCR0x 的匹配, OC0x 将置位为高电平。工作于反向输出比较时则正好相反。与单斜 坡操作相比,双斜坡操作可获得的最大频率要小。但由于其对称的特性,十分适合于电机 控制。 计时器不断地累加直到 TOP,然后开始减计数。在一个定时器时钟周期里 TCNT0 的值等 于 TOP。时序图可参见 Figure 31。图中 TCNT0 的数值用柱状图表示,以说明双斜坡操 作。本图同时说明了普通 PWM 的输出和反向 PWM 的输出。 TCNT0 斜坡上的小横条表 示 OCR0x 与 TCNT0 的比较匹配。 Figure 31. 相位修正 PWM 模式的时序图 OCnx Interrupt Flag Set OCRnx Update TOVn Interrupt Flag Set TCNTn OCn (COMnx1:0 = 2) OCn (COMnx1:0 = 3) Period 1 2 3 当计时器达到 BOTTOM 时 T/C 溢出标志位 TOV0 置位。此标志位可用来产生中断。 工作于相位修正 PWM 模式时,比较单元可以在 OC0x 引脚产生 PWM 波形:将 COM0x1:0 设置为 2 产生普通相位的 PWM,设置 COM0x1:0 为 3 产生反向 PWM 信号 :若 WGM02 位设置,设置 COM0A0 位为 "1” 允许 OC0A 引脚转换到比较匹配。该选项对 OC0B 引脚 无效 ( 参见 P65Table 28)。要想在引脚上得到输出信号还必须将 OC0x 的数据方向设置为 输出。 OCR0x 和 TCNT0 比较匹配发生时 OC0x 寄存器将产生相应的清零或置位操作, 从而产生 PWM 波形。工作于相位修正模式时 PWM 频率可由下式公式获得: f clk_I/O f OCnxPCPWM = -----------------N ⋅ 510 变量 N 表示预分频因子 (1、 8、 64、 256 或 1024)。 OCR0A 寄存器处于极值代表了相位修正 PWM 模式的一些特殊情况。在普通 PWM 模式 下,若 OCR0A 等于 BOTTOM,输出一直保持为低电平;若 OCR0A 等于 MAX,则输出 保持为高电平。反向 PWM 模式则正好相反。 62 ATtiny13 2535D–AVR–04/04 ATtiny13 在 Figure 31 的第 2 个周期,虽然没有发生比较匹配, OCn 也出现了一个从高到低的跳 变。其目的是保证波形在 BOTTOM 两侧的对称。没有比较匹配时有两种情况会出现跳变: T/C 时序图 • 如 Figure 31 所示,OCR0A 的值从 MAX 改变为其他数据。当 OCR0A 值为 MAX 时,引 脚 OCn 的输出应该与前面降序记数比较匹配的结果相同。为了保证波形在 BOTTOM 两侧的对称,当 T/C 的数值为 MAX 时,引脚 OCn 的输出又必须符合后面升 序记数比较匹配的结果。 • 定时器从一个比 OCR0A 高的值开始记数,并因而丢失了一次比较匹配。系统因此引 入发生 OCn 却仍然有跳变的现象。 T/C 是同步电路,因此其时钟 clkT0 可以表示为时钟使能信号,如下图所示。图中还说明了 中断标志设置的时间。 Figure 32 给出了基本的 T/C 工作时序,以及除了相位修正 PWM 模式之外其他模式接近 MAX 时的记数序列。 Figure 32. T/C 时序图,无预分频器 clkI/O clkTn (clkI/O /1) TCNTn MAX - 1 MAX BOTTOM BOTTOM + 1 BOTTOM BOTTOM + 1 TOVn Figure 33 所示为相同的工作时序,但有预分频。 Figure 33. T/C 时序图,预分频器为 fclk_I/O/8 clkI/O clkTn (clkI/O /8) TCNTn MAX - 1 MAX TOVn Figure 34 给出了各种模式下 ( 除了 CTC 模式 )OCF0x 的置位情况,其中 OCR0A 为 TOP。 Figure 34. T/C 时序图, OCF0x 置位,预分频器为 fclk_I/O/8 clkI/O clkTn (clkI/O /8) TCNTn OCRnx OCRnx - 1 OCRnx OCRnx + 1 OCRnx + 2 OCRnx Value OCFnx 63 2535D–AVR–04/04 Figure 35 给出了 CTC 模式与快速 PWM 模式下 OCF0A 置位和 TCNT0 清除的情况,其中 OCR0A 为 TOP。 Figure 35. T/C 时序图, CTC 模式,预分频器为 fclk_I/O/8 clkI/O clkTn (clkI/O /8) TCNTn (CTC) OCRnx TOP - 1 TOP BOTTOM BOTTOM + 1 TOP OCFnx 64 ATtiny13 2535D–AVR–04/04 ATtiny13 8 位定时器 / 计数器寄存器 的说明 T/C 控制寄存器 A - TCCR0A Bit 7 6 5 4 3 2 1 0 COM0A1 COM0A0 COM0B1 COM0B0 – – WGM01 WGM00 读/写 R/W R/W R/W R/W R R R/W R/W 初始值 0 0 0 0 0 0 0 0 TCCR0A • Bits 7:6 – COM01A:0: 强制输出比较 A 这两位控制输出比较引脚 (OC0A) 状态。如果 COM0A1:0 中至少有一位置位, OC0A 输 出替代与其相联的 I/O 口的普通端口功能。但要注意必须设置与 OC0A 相应的 DDR 位, 来使能输出驱动。 当 OC0A 与引脚相联,COM0A1:0 位的功能由 WGM02:0 位的设置决定。Table 26 给出 当 WGM02:0 位设为 CTC 模式 ( 非 PWM) 时 COM0A1:0 位的功能。 Table 26. 比较输出模式, 非 PWM 模式 说明 COM01 COM00 0 0 正常的端口操作,不与 OC0A 相连接 0 1 比较匹配发生时 OC0A 取反 1 0 比较匹配发生时 OC0A 清零 1 1 比较匹配发生时 OC0A 置位 Table 27 给出了当 WGM01:0 设置为快速 PWM 模式时 COM01:0 的功能。 Table 27. 比较输出模式,快速 PWM 模式 (1) 说明 COM01 COM00 0 0 正常的端口操作,不与 OC0A 相连接 0 1 WGM02 = 0: 正常的端口操作,不与 OC0A 相连接 WGM02 = 1: 比较匹配发生时 OC0A 取反 1 0 比较匹配发生时 OC0A 清零,计数到 TOP 时 OC0A 置位 1 1 比较匹配发生时 OC0A 置位,计数到 TOP 时 OC0A 清零 1. 一个特殊情况是 OCR0A 等于 TOP,且 COM01 置位。此时比较匹配将被忽略,而计数 到 TOP 时 OC0 的动作继续有效。详细信息请参见 P60“ 快速 PWM 模式 ” 。 Note: Table 28 给出了当 WGM02:0 设置为相位修正 PWM 模式时 COM0A1:0 的功能。 Table 28. 比较输出模式,相位修正 PWM 模式 (1) 说明 COM0A1 COM0A0 0 0 正常的端口操作,不与 OC0A 相连接 0 1 WGM02 = 0: 正常的端口操作,不与 OC0A 相连接 WGM02 = 1: 比较匹配发生时 OC0A 取反 1 0 在升序计数时发生比较匹配将清零 OC0A ;降序计数时发生比较 匹配将置位 OC0A 1 1 在升序计数时发生比较匹配将置位 OC0A ;降序计数时发生比较 匹配将清零 OC0A 65 2535D–AVR–04/04 1. 一个特殊情况是 OCR0A 等于 TOP,且 COM0A1 置位。此时比较匹配将被忽略,而计数 到 TOP 时 OC0A 的动作继续有效。详细信息请参见 P62“ 相位修正 PWM 模式 ” 。 Note: • Bits 5:4 – COM0B1:0: 比较匹配输出模式 B 这些位决定了比较匹配发生时输出引脚 OC0B 的电平。如果 COM0B1:0 中的一位或全部 都置位, OC0B 以比较匹配输出的方式进行工作。同时其方向控制位要设置为 1 以使能 输出驱动器。 当 OC0B 连接到物理引脚上时, COM0B1:0 的功能依赖于 WGM01:0 的设置。 Table 26 给出了当 WGM02:0 设置为普通模式或 CTC 模式时 COM0B1:0 的功能。 Table 29. 比较输出模式,非 PWM 模式 说明 COM01 COM00 0 0 正常的端口操作,不与 OC0B 相连接 0 1 比较匹配发生时 OC0B 取反 1 0 比较匹配发生时 OC0B 清零 1 1 比较匹配发生时 OC0B 置位 Table 27 给出了当 WGM02:0 设置为快速 PWM 模式时 COM0B1:0 的功能。 Table 30. 比较输出模式,快速 PWM 模式 (1) 说明 COM01 COM00 0 0 正常的端口操作,不与 OC0B 相连接 0 1 保留 1 0 比较匹配发生时 OC0A 清零,计数到 TOP 时 OC0B 置位 1 1 比较匹配发生时 OC0A 置位,计数到 TOP 时 OC0B 清零 1. 一个特殊情况是 OCR0B 等于 TOP,且 COM0B1 置位。此时比较匹配将被忽略,而计数 到 TOP 时 OC0B 的动作继续有效。详细信息请参见 P60“ 快速 PWM 模式 ” Note: Table 28 给出了当 WGM02:0 设置为相位修正 PWM 模式时 COM0B1:0 的功能。 Table 31. 比较输出模式,相位修正 PWM 模式 (1) 说明 COM0A1 COM0A0 0 0 正常的端口操作,不与 OC0B 相连接 0 1 保留 1 0 在升序计数时发生比较匹配将清零 OC0B ;降序计数时发生比较 匹配将置位 OC0B 1 1 在升序计数时发生比较匹配将置位 OC0B ;降序计数时发生比较 匹配将清零 OC0B Note: 1. 一个特殊情况是 OCR0B 等于 TOP,且 COM0B1 置位。此时比较匹配将被忽略,而计数 到 TOP 时 OC0B 的动作继续有效。详细信息请参见 P62“ 相位修正 PWM 模式 ” 。 • Bits 3, 2 – Res: 保留 保留位,该操作返回值为零。 • Bits 1:0 – WGM01:0: 波形产生模式 这两位与 TCCR0B 寄存器中的 WGM02 位一起控制计数器的计数顺序,计数器的 TOP 值 及产生哪种波形,见 Table 32。 T/C 单元支持的工作模式有:正常模式 ( 计数器 ), CTC 模式,及两种 PWM 模式 ( 见 P59“ 工作模式 ” )。 66 ATtiny13 2535D–AVR–04/04 ATtiny13 Table 32. 波形产生位说明 T/C 工作模式 TOP OCRx 更 新 TOV 标志 设置 (1)(2) 0 正常 0xFF 立即 MAX 0 1 相位修正 PWM 0xFF TOP BOTTOM 0 1 0 CTC OCRA 立即 MAX 3 0 1 1 快速 PWM 0xFF TOP MAX 4 1 0 0 保留 – – – 5 1 0 1 相位修正 PWM OCRA TOP BOTTOM 6 1 1 0 保留 – – – 7 1 1 1 快速 PWM OCRA TOP TOP Mode WGM2 WGM1 WGM0 0 0 0 1 0 2 Notes: 1. MAX = 0xFF 2. BOTTOM = 0x00 67 2535D–AVR–04/04 T/C 控制寄存器 B - TCCR0B Bit 7 6 5 4 3 2 1 0 FOC0A FOC0B – – WGM02 CS02 CS01 CS00 读/写 W W R R R/W R/W R/W R/W 初始值 0 0 0 0 0 0 0 0 TCCR0B • Bit 7 – FOC0A: 强制输出比较 A FOC0A 仅在 WGM 指明非 PWM 模式时才有效。 但是,为了保证与未来器件的兼容性,在使用 PWM 时,写 TCCR0B 要对其清零。对其 写 1 后,波形发生器将立即进行比较操作。比较匹配输出引脚 OC0A 将按照 COM0A1:0 的设置输出相应的电平。要注意 FOC0A 类似一个锁存信号,真正对强制输出比较起作用 的是 COM0A1:0 的设置。 FOC0A不会引发任何中断,也不会在利用OCR0A作为TOP的CTC模式下对定时器进行清 零的操作。 读 FOC0A 的返回值永远为 0。 • Bit 6 – FOC0B: 强制输出比较 B FOC0B 仅在 WGM 指明非 PWM 模式时才有效。 但是,为了保证与未来器件的兼容性,在使用 PWM 时,写 TCCR0B 要对其清零。对其 写 1 后,波形发生器将立即进行比较操作。比较匹配输出引脚 OC0B 将按照 COM0B1:0 的设置输出相应的电平。要注意 FOC0B 类似一个锁存信号,真正对强制输出比较起作用 的是 COM0B1:0 的设置。 FOC0B不会引发任何中断,也不会在利用OCR0B作为TOP的CTC模式下对定时器进行清 零的操作。 读 FOC0B 的返回值永远为 0。 • Bits 5:4 – Res: 保留 保留位,返回值为零。 • Bit 3 – WGM02: 波形产生模式 见 P65“T/C 控制寄存器 A – TCCR0A” 中说明。 • Bits 2:0 – CS02:0: 时钟选择 这三位用于选择 T/C 的时钟源。 Table 33. 时钟选择位说明 说明 CS02 CS01 CS00 0 0 0 无时钟, T/C 不工作 0 0 1 clkI/O/1 ( 没有预分频 ) 0 1 0 clkI/O/8 ( 来自预分频器 ) 0 1 1 clkI/O/64 ( 来自预分频器 ) 1 0 0 clkI/O/256 ( 来自预分频器 ) 1 0 1 clkI/O/1024 ( 来自预分频器 ) 1 1 0 时钟由 T0 引脚输入,下降沿触发 1 1 1 时钟由 T0 引脚输入,上升沿触发 如果 T/C0 使用外部时钟,即使 T0 被配置为输出,其上的电平变化仍然会驱动记数器。 利用这一特性可通过软件控制记数。 68 ATtiny13 2535D–AVR–04/04 ATtiny13 T/C 寄存器- TCNT0 Bit 7 6 5 4 3 2 1 0 TCNT0[7:0] TCNT0 读/写 R/W R/W R/W R/W R/W R/W R/W R/W 初始值 0 0 0 0 0 0 0 0 通过 T/C 寄存器可以直接对计数器的 8 位数据进行读写访问。对 TCNT0 寄存器的写访问 将在下一个时钟阻止比较匹配。在计数器运行的过程中修改 TCNT0 的数值有可能丢失一 次 TCNT0 和 OCR0x 的比较匹配。 输出比较寄存器 A - OCR0A Bit 7 6 5 4 3 2 1 0 OCR0A[7:0] OCR0A 读/写 R/W R/W R/W R/W R/W R/W R/W R/W 初始值 0 0 0 0 0 0 0 0 输出比较寄存器包含一个 8 位的数据,不间断地与计数器数值 TCNT0 进行比较。匹配事 件可以用来产生输出比较中断,或者用来在 OC0A 引脚上产生波形。 输出比较寄存器 B - OCR0B Bit 7 6 5 4 3 2 1 0 OCR0B[7:0] OCR0B 读/写 R/W R/W R/W R/W R/W R/W R/W R/W 初始值 0 0 0 0 0 0 0 0 输出比较寄存器包含一个 8 位的数据,不间断地与计数器数值 TCNT0 进行比较。匹配事 件可以用来产生输出比较中断,或者用来在 OC0B 引脚上产生波形。 T/C 中断屏蔽寄存器- TIMSK0 Bit 7 6 5 4 3 2 1 – – – – OCIE0B OCIE0A TOIE0 0 – 读/写 R R R R R/W R/W R/W R 初始值 0 0 0 0 0 0 0 0 TIMSK0 • Bits 7..4, 0 – Res: 保留 保留位,返回值为零。 • Bit 3 – OCIE0B: T/C 输出比较匹配 B 中断使能 当 OCIE0B 和状态寄存器的全局中断使能位 I 都为 ”1” 时,T/C 的输出比较匹配 B 中断使 能。当 T/C 的比较匹配发生,即 TIFR0 中的 OCF0B 置位时,中断服务程序得以执行。 • Bit 2 – OCIE0A: T/C0 输出比较匹配 A 中断使能 当 OCIE0A 和状态寄存器的全局中断使能位 I 都为 ”1” 时, T/C0 的输出比较匹配 A 中断 使能。当 T/C0 的比较匹配发生,即 TIFR0 中的 OCF0A 置位时,中断服务程序得以执行。 • Bit 1 – TOIE0: T/C0 溢出中断使能 当 TOIE0 和状态寄存器的全局中断使能位 I 都为 ”1” 时,T/C0 的溢出中断使能。当 T/C0 发生溢出,即 TIFR 中的 TOV0 位置位时,中断服务程序得以执行。 T/C0 中断标志寄存器- TIFR0 Bit 7 6 5 4 3 2 1 – – – – OCF0B OCF0A TOV0 0 – 读/写 R R R R R/W R/W R/W R 初始值 0 0 0 0 0 0 0 0 TIFR0 • Bits 7..4, 0 – Res: 保留 保留位,返回值为零。 69 2535D–AVR–04/04 • Bit 3 – OCF0B: 输出比较标志 0 B 当 T/C 与 OCR0B( 输出比较寄存器 0B) 的值匹配时, OCF0B 置位。此位在中断服务程 序里硬件清零,也可以对其写 1 来清零。当 SREG 中的位 I、 OCIE0B(T/C0 比较 B 匹配 中断使能 ) 和 OCF0B 都置位时,中断服务程序得到执行。 • Bit 2 – OCF0A: 输出比较标志 0 A 当 T/C0 与 OCR0A( 输出比较寄存器 0) 的值匹配时,OCF0A 置位。此位在中断服务程序 里硬件清零,也可以对其写 1 来清零。当 SREG 中的位 I、 OCIE0A(T/C0 比较匹配中断 使能 ) 和 OCF0A 都置位时,中断服务程序得到执行。 • Bit 1 – TOV0: T/C0 溢出标志 当 T/C0 溢出时, TOV0 置位。执行相应的中断服务程序时此位硬件清零。此外, TOV0 也可以通过写 1 来清零。当 SREG 中的位 I、 TOIE0(T/C0 溢出中断使能 ) 和 TOV0 都置 位时,中断服务程序得到执行。 该标志的设置决定于 WGM02:0 位的设置,参见 Table 32, P67“ 波形产生位说明 ” 。 70 ATtiny13 2535D–AVR–04/04 ATtiny13 T/C 预分频器 当 CSn2:0 = 1 时,系统内部时钟直接作为 T/C 的时钟源,这也是 T/C 最高频率的时钟源 fCLK_I/O,与系统时 钟频率相同。预分频器 可以输出 4 个不同的 时钟信号 fCLK_I/O/8、 fCLK_I/O/64、 fCLK_I/O/256 或 fCLK_I/O/1024。 预分频器复位 预分频器是独立运行的。也就是说,其操作独立于 T/C 的时钟选择逻辑。由于预分频器不 受 T/C 时钟选择的影响,预分频器的状态需要包含预分频时钟被用到何处这样的信息。一 个典型的例子发生在定时器使能并由预分频器驱动 (6 > CSn2:0 > 1) 的时候:从计时器使 能到第一次开始计数可能花费 1 到 N+1 个系统时钟周期,其中 N 等于预分频因子 (8、 64、 256 或 1024)。 通过复位预分频器来同步 T/C 与程序运行是可能的。 外部时钟源 由 T0 引脚提供的外部时钟源可以用作 T/C 时钟 clkT0。引脚同步逻辑在每个系统时钟周期 对引脚 T0 进行采样。然后将同步 ( 采样 ) 信号送到边沿检测器。 Figure 36 给出了 T0 同 步采样与边沿检测逻辑的功能等效方框图。寄存器由内部系统时钟 clkI/O 的上跳沿驱动。 当内部时钟为高时,锁存器可以看作时透明的。 CSn2:0 = 7 时边沿检测器检测到一个正跳变产生一个 clkT1 脉冲; CSn2:0 = 6 时一个负跳 变就产生一个 clkT0 脉冲。 Figure 36. T0 引脚采样 Tn D Q D Q D Tn_sync (To Clock Select Logic) Q LE clk I/O Synchronization Edge Detector 由于引脚上同步与边沿监测电路的存在,引脚 T1/T0 上的电平变化需要延时 2.5 到 3.5 个 系统时钟周期才能使计数器进行更新。 禁止或使能时钟输入必须在 T0 保持稳定至少一个系统时钟周期后才能进行,否则有产生 错误 T/C 时钟脉冲的危险。 为保证正确的采样,外部时钟脉冲宽度必须大于一个系统时钟周期。在占空比为 50% 时 外部时钟频率必须小于系统时钟频率的一半 (fExtClk < fclk_I/O/2)。由于边沿检测器使用的是 采样这一方法,它能检测到的外部时钟最多是其采样频率的一半 (Nyquist 采样定理 )。然 而,由于振荡器 ( 晶体、谐振器与电容 ) 本身误差带来的系统时钟频率及占空比的差异, 建议外部时钟的最高频率不要大于 fclk_I/O/2.5。 外部时钟源不送入预分频器。 71 2535D–AVR–04/04 Figure 37. T/C0 预分频器 clk I/O Clear PSR10 T0 Synchronization clkT0 Note: 通用 T/C 控制寄存器- GTCCR Bit 1. 输入引脚 (T0) 的同步逻辑见 Figure 36。 7 6 5 4 3 2 1 0 TSM – – – – – – PSR10 读/写 R/W R R R R R R R/W 初始值 0 0 0 0 0 0 0 0 GTCCR • Bit 7 – TSM: T/C 同步模式 TSM位置"1”激活T/C同步模式。在该模式下,保存写入PSR10位的值,从而保存未用的预 分频器复位信号。这保证 T/C 挂起,且配置时不会有提前启动的风险。当 TSM 位写 "0”, PSR10 位由硬件清零,且 T/C 开始计数。 • Bit 0 – PSR10: T/C0 预分频器复位 置位时 T/C0 的预分频器复位。在 TSM 未置位时,操作完成后这一位由硬件自动清零。 72 ATtiny13 2535D–AVR–04/04 ATtiny13 模拟比较器 模拟比较器对正极 AIN0 的值与负极 AIN1 的值进行比较。当 AIN0 上的电压比负极 AIN1 上的电压要高时,模拟比较器的输出 ACO 即置位。比较器的输出可用来触发定时器 / 计 数器 1 的输入捕捉功能。此外,比较器还可触发自己专有的、独立的中断。用户可以选择 比较器是以上升沿、下降沿还是交替变化的边沿来触发中断。 Figure 38 为比较器及其外 围逻辑电路的框图。 Figure 38. 模拟比较器框图 (2) BANDGAP REFERENCE ACBG ACME ADEN ADC MULTIPLEXER OUTPUT (1) Notes: ADC 控制及状态寄存器 B - ADCSRB Bit 1. 见 P75Table 35. 2. 模拟比较器引脚配置图见 P1Figure 1 与 P49Table 23。 7 6 5 4 3 2 1 0 – ACME – – – ADTS2 ADTS1 ADTS0 读/写 R R/W R R R R/W R/W R/W 初始值 0 0 0 0 0 0 0 0 ADCSRB • Bit 6 – ACME: 模拟比较器复用器使能 当该位写 "1” 且 ADC 关闭 ( ADCSRA 中 ADEN 为 0), ADC 复用器选择模拟比较器的负 输入。当该位写 "0”,AIN1 作为模拟比较器的负输入。详见 P75“ 模拟比较器多路输入 ” 。 模拟比较器控制及状态寄存器- ACSR Bit 7 6 5 4 3 2 1 0 ACD ACBG ACO ACI ACIE – ACIS1 ACIS0 读/写 R/W R/W R R/W R/W R R/W R/W 初始值 0 0 N/A 0 0 0 0 0 ACSR • Bit 7 – ACD: 模拟比较器禁用 ACD 置位时,模拟比较器的电源被切断。可以在任何时候设置此位来关掉模拟比较器。这 可以减少器件工作模式及空闲模式下的功耗。改变 ACD 位时,必须清零 ACSR 寄存器的 ACIE 位来禁止模拟比较器中断。否则 ACD 改变时可能会产生中断。 • Bit 6 – ACBG: 选择模拟比较器的能隙基准源 ACBG 置 "1” 后,模拟比较器的正极输入由固定能隙基准源所取代。ACBG 清零,AIN0 作 为模拟比较器的正极输入。 • Bit 5 – ACO: 模拟比较器输出 模拟比较器的输出为同步信号,直接连到 ACO。 同步加入 1 - 2 时钟周期的延迟。 • Bit 4 – ACI: 模拟比较器中断标志 73 2535D–AVR–04/04 当比较器的输出事件触发了由 ACIS1 及 ACIS0 定义的中断模式时,ACI 由硬件置位。如 果 ACIE 和 SREG 寄存器的全局中断标志 I 也置位,那么模拟比较器中断服务程序即得以 执行,同时 ACI 被硬件清零。 ACI 也可以通过写 1 来清零。 • Bit 3 – ACIE: 模拟比较器中断使能 当 ACIE 位被置 1 且状态寄存器中的全局中断标志 I 也被置位时,模拟比较器中断被激活。 否则中断被禁止。 • Bit 2 – Res: 保留 保留位,返回值为零。 • Bits 1, 0 – ACIS1, ACIS0: 模拟比较器中断模式选择 这两位确定哪个事件可以触发模拟比较器中断。 Table 34 给出了不同的设置。 Table 34. ACIS1/ACIS0 设置 中断模式 ACIS1 ACIS0 0 0 比较器输出变化即可触发中断 0 1 保留 1 0 比较器输出的下降沿产生中断 1 1 比较器输出的上升沿产生中断 当改变 ACIS1/ACIS0 位时,必须通过清除 ACSR 寄存器中断使能位禁用模拟比较中断。否则当位 变化时可能会出现中断。 74 ATtiny13 2535D–AVR–04/04 ATtiny13 模拟比较器多路输入 可选择 ADC3..0 中任意引脚作为模拟比较器的负极输入。 ADC 复用器选择输入端,使用 该功能时, ADC 必须关闭。若模拟比较器复用器使能位 (ADCSRB 寄存器中 ACME 位 ) 设置且 ADC 关闭 (ADCSRA 寄存器中 ADEN 为零 ),ADMUX 中 MUX1..0 选择模拟比较 器负极输入引脚,如 Table 35 所示。若 ACME 清零或 ADEN 置位, AIN1 作为比较器的 负极输入。 Table 35. 模拟比较输入选择 数字输入禁用寄存器 0 - DIDR0 模拟比较负极输入 ACME ADEN MUX1..0 0 x xx AIN1 1 1 xx AIN1 1 0 00 ADC0 1 0 01 ADC1 1 0 10 ADC2 1 0 11 ADC3 Bit 7 6 5 4 3 2 1 0 – – ADC0D ADC2D ADC3D ADC1D AIN1D AIN0D 读/写 R R R/W R/W R/W R/W R/W R/W 初始值 0 0 0 0 0 0 0 0 DIDR0 • Bits 1, 0 – AIN1D, AIN0D: AIN1, AIN0 数字输入禁用 当该位写 "1”, AIN1/0 引脚的数字输入缓冲禁用。相应的引脚寄存器位为零。当 AIN1/0 引脚输入为模拟信号且不使用数字输入,该位写 "1” 以降低数字输入缓冲的功耗。 75 2535D–AVR–04/04 模数转换器 特点 • • • • • • • • • • • • • 10 位精度 0.5 LSB 的非线性度 ± 2 LSB 的绝对精度 13 - 260 µs 的转换时间 最大精度达到 15 kSPS 四路复用单端输入通道 可选的向左调整 ADC 读数 0 - VCC 的 ADC 输入电压范围 可选的 1.1V ADC 参考电压 连续转换或单次转换模式 通过中断源自动触发的 ADC 转换启动 ADC 转换结束中断 基于睡眠模式的噪声抑制器 ATtiny13 有一个 10 位的逐次逼近型 ADC。ADC 与一个 4 通道的模拟多路复用器连接,能 对来自端口 B 的四路单端输入电压进行采样。单端电压输入以 0V (GND) 作为基准。 ADC 包括一个采样保持电路,以确保在转换过程中输入到 ADC 的电压保持恒定。ADC 的 框图如 Figure 39 所示。 标称值为 1.1V 的基准电压或 VCC 位于器件之内。 Figure 39. 模数转换器方框图 ADC CONVERSION COMPLETE IRQ INTERRUPT FLAGS ADTS[2:0] 15 TRIGGER SELECT ADC[9:0] ADPS0 ADPS1 ADIF ADPS2 ADATE ADEN 0 ADC DATA REGISTER (ADCH/ADCL) ADC CTRL. & STATUS REGISTER (ADCSRA) ADSC MUX1 MUX0 ADLAR REFS1 ADC MULTIPLEXER SELECT (ADMUX) ADIE ADIF 8-BIT DATA BUS MUX DECODER CHANNEL SELECTION PRESCALER VCC START CONVERSION LOGIC INTERNAL 1.1V REFERENCE SAMPLE & HOLD COMPARATOR 10-BIT DAC + ADC3 ADC2 ADC1 INPUT MUX ADC MULTIPLEXER OUTPUT ADC0 76 ATtiny13 2535D–AVR–04/04 ATtiny13 操作 ADC 通过逐次逼近的方法将输入的模拟电压转换成一个 10 位的数字量。最小值代表 GND,最大值代表 VCC 或 1.1V 参考电压。 模拟输入通道可以通过写 ADMUX 寄存器的 MUX 位来选择。任何 ADC 输入引脚,都可 以作为 ADC 的单端输入。 ADC 由 ADCSR 寄存器的 ADEN 位使能。在 ADEN 设置前,参考电压与输入通道无效。当 ADEN 清零时, ADC 没有功耗,因此建议在进入省电模式前关闭 ADC。 ADC转换结果为10位,存放于ADC数据寄存器ADCH及ADCL中。默认情况下转换结果为 右对齐,但可通过设置 ADMUX 寄存器的 ADLAR 变为左对齐。 如果要求转换结果左对齐,且最高只需 8 位的转换精度,那么只要读取 ADCH 就足够了。 否则要先读 ADCL,再读 ADCH,以保证数据寄存器中的内容是同一次转换的结果。一旦 读出 ADCL, ADC 对数据寄存器的寻址就被阻止了。也就是说,读取 ADCL 之后,即使 在读 ADCH 之前又有一次 ADC 转换结束,数据寄存器的数据也不会更新,从而保证了转 换结果不丢失。 ADCH 被读出后, ADC 即可再次访问 ADCH 及 ADCL 寄存器。 ADC转换结束可以触发中断。即使由于转换发生在读取ADCH与ADCL之间而造成ADC无 法访问数据寄存器,并因此丢失了转换数据,中断仍将触发。 启动转换 通过在 ADSC 位写入逻辑 1 来启动转换。该位在转换过程中始终为 1,当转换完成后该位 置 0。若在转换过程中选择差分数据通道, ADC 将在执行通道变换前结束转换。 转换可以由不同的源自动触发。设置 ADCSRA 寄存器的 ADATE 位使能自动触发。触发 源由 ADCSRB 寄存器的 ADTS 位的设定来决定 ( 见有关 ADTS 位的说明 )。当选择的触 发信号正边沿出现, ADC 预分频器复位,转换启动。 这样我们可以实现固定转换启动时 间间隔。若转换完成后触发信号仍然置位,将不会启动新的转换。如果在转换过程中触发 信号出现其他正边沿,则应将其忽略。注意,即使相应的中断禁用或 SREG 中 I 位清零, 中断标志仍会设置。这样可在没有中断的情况下触发转换。然而必须清除中断标志以便下 一次中断可以触发新的转换。 Figure 40. ADC 自动触发逻辑 ADTS[2:0] PRESCALER START ADIF CLKADC ADATE SOURCE 1 . . . . SOURCE n CONVERSION LOGIC EDGE DETECTOR ADSC 使用 ADC 中断标志作为触发源,可使系统在一次转换结束后立即开始新的转换。ADC 进 入连续转换模式,不断采样与更新 ADC 数据寄存器。第一次转换必须通过在 ADCSRA 寄 存器的 ADSC 位写 "1” 来启动。在该模式下,转换成功与否取决于 ADC 中断标志与 ADIF 是否清零。 如果使能自动触发,通过在 ADCSRA 寄存器的 ADSC 写 "1” 启动单次转换。ADSC 还可 用来检测是否正在进行转换。无论转换是通过何种方式启动,在转换进行时, ADSC 值 为 "1” 。 77 2535D–AVR–04/04 预分频与转换时序 Figure 41. ADC 预分频器 ADEN START Reset 7-BIT ADC PRESCALER CK/128 CK/64 CK/32 CK/16 CK/8 CK/4 CK/2 CK ADPS0 ADPS1 ADPS2 ADC CLOCK SOURCE 默认情况下,逐次逼近电路需要一个从 50 kHz 到 200 kHz 的输入时钟以获得最大精度。 若需要低于 10 位的精度, ADC 输入时钟频率要高于 200 kHz,以达到高采样率。 ADC模块包括一个预分频器,它可以产生可接受的ADC时钟。ADCSR寄存器的ADPS位 用于从片内产生一个超过 100 kHz 的适当的 ADC 时钟输入信号。预分频器从 ADCSR 寄 存器的 ADEN 位置位启动 ADC 起开始计数。ADEN 置位时预分频器保持运转,当 ADEN 为低时预分频器复位。 转换在 ADCSR 的 ADSC 位设置后的上升沿开始。如果使用差分通道,转换在 ADEN 设 置后的第二个上升沿启动。 正常转换需要 13 个 ADC 时钟周期。ADC 使能 (ADCSRA 寄存器的 ADEN 置位 ) 后的第 一次转换需要 25 个 ADC 时钟周期。 在普通的 ADC 转换过程中,采样保持在转换启动之后的 1.5 个 ADC 时钟开始;而第一次 ADC 转换的采样保持则发生在转换启动之后的 14.5 个 ADC 时钟。转换结束后,ADC 结果 被送入 ADC 数据寄存器,且 ADIF 标志置位。ADSC 同时清零 ( 单次转换模式 )。之后软 件可以再次置位 ADSC 标志,从而在 ADC 的第一个上升沿启动一次新的转换。 当使用自动触发时,当触发事件出现时,预分频器复位。这保证从触发到转换启动有一个 给定的延时。在该模式下,触发源信号上升沿后有两个 ADC 时钟周期的采样与保持时间。 为同步还需要三个额外的 CPU 时钟周期。 在连续转换模式下,当 ADSC 为 1 时,只要转换一结束,下一次转换马上开始。转换时 间见 Table 36。 78 ATtiny13 2535D–AVR–04/04 ATtiny13 Figure 42. ADC 时序图, 第一次转换 ( 单次转换模式 ) Next Conversion First Conversion Cycle Number 1 2 12 13 14 16 15 17 18 19 20 21 22 23 24 25 1 2 3 ADC Clock ADEN ADSC ADIF Sign and MSB of Result ADCH LSB of Result ADCL MUX and REFS Update Conversion Complete Sample & Hold MUX and REFS Update Figure 43. ADC 时序图,单次转换 One Conversion Cycle Number 1 2 3 4 5 6 7 8 9 Next Conversion 10 11 12 13 1 2 3 ADC Clock ADSC ADIF ADCH Sign and MSB of Result ADCL LSB of Result Sample & Hold Conversion Complete MUX and REFS Update MUX and REFS Update Figure 44. ADC 时序图,自动触发转换 One Conversion Cycle Number 1 2 3 4 5 6 7 8 9 Next Conversion 10 11 12 13 1 2 ADC Clock Trigger Source ADATE ADIF ADCH Sign and MSB of Result ADCL LSB of Result Prescaler Reset Sample & Hold Conversion Complete Prescaler Reset MUX and REFS Update 79 2535D–AVR–04/04 Figure 45. ADC 时序图,连续转换 One Conversion Cycle Number 11 12 Next Conversion 13 1 2 3 4 ADC Clock ADSC ADIF ADCH Sign and MSB of Result ADCL LSB of Result Sample & Hold Conversion Complete MUX and REFS Update Table 36. ADC 转换时间 条件 转换时间 ( 周期 ) 第一次转换 13.5 25 正常转换 1.5 13 2 13.5 自动触发转换 80 采样 & 保持 ( 启动转换后 的时钟周期数 ) ATtiny13 2535D–AVR–04/04 ATtiny13 变化通道或基准选择 ADMUX寄存器的MUXn与REFS1:0位的单缓冲为CPU可随机访问的临时寄存器。这确保 通道及基准选择只能在转换稳定时才进行。通道与基准选择在转换启动前一直更新。一旦 转换启动,通道及基准选择锁定,以保证 ADC 有效采样时间。在转换结束前的最后一个 ADC时钟周期前恢复更新。注意,在ADSC写入后的第一个ADC时钟上升沿转换启动。建 议用户在 ADSC 写入一个 ADC 时钟周期后再对 ADMUX 写入新的通道或基准选择值。 如果使用自动触发模式,无法确定触发事件的准确时间。当更新 ADMUX 寄存器时要特别 当心,以便控制由新的设置所影响的转换。 若 ADATE 与 ADEN 均为零,中断会随时发生。若此时改变 ADMUX 寄存器值,则无法 确定转换是基于哪种设置。在以下情况下可实现 ADMUX 安全更新: 1. 当 ADATE 或 ADEN 清零 2. 转换时,触发完成至少一个 ADC 时钟周期后 3. 转换完成后,在中断标志作为触发源被清除前。 当 ADMUX 在以上任一种情况下被更新后,新设置将在下一次 ADC 转换中有效。 ADC 输入通道 当改变通道选择时,用户应注意以下原则,以保证选择正确的通道: 单次转换模式下,在启动转换前选择通道。通道选择在 ADSC 写入 "1” 后一个 ADC 时钟 周期后可能会改变。 最简单的方法是等到转换结束后改变通道设置。 连续转换模式下,在启动转换前选择通道。通道选择在 ADSC 写入 "1” 后一个 ADC 时钟 周期后可能会改变。最简单的方法是等到转换结束后改变通道设置。由于下一次转换已经 自动启动,其结果也反映前面的通道选择。其后的转换将反映新的通道选择。 81 2535D–AVR–04/04 ADC 电压基准 ADC 参考电压(VREF)给出ADC转换范围。单端通道超过VREF 其结果接近0x3FF。VREF 可 为 VCC,或内部基准电压 1.1V,或外部 AREF 引脚电压。改变基准电压源后的第一次 ADC 转换结果可能不准确,建议用户舍弃。 ADC 噪声抑制器 ADC的噪声抑制器使其可以在睡眠模式下进行转换,从而降低由于CPU及外围I/O设备噪 声引入的影响。噪声抑制器可在 ADC 降噪模式及空闲模式下使用。为了使用这一特性, 应采用如下步骤: 1. 确定 ADC 已经使能,且没有处于转换状态。工作模式应该为单次转换,并且 ADC 转换结束中断使能。 2. 进入 ADC 降噪模式 ( 或空闲模式 )。一旦 CPU 被挂起, ADC 便开始转换。 3. 如果在 ADC转换结束之前没有其他中断产生,那么 ADC中断将唤醒CPU并执 行 ADC 转换结束中断服务程序。若在 ADC 转换结束前其他中断将 CPU 唤 醒,则会执行中断,当 ADC 转换结束后产生 ADC 转换结束中断请求。 CPU 在下一个休眠指令执行前将保持正常模式。 注意,当进入休眠模式时 ( 除空闲模式与 ADC 噪声抑制模式 )ADC 不会自动关闭。建议 用户在进入休眠模式前对 ADEN 写 "0”,以降低功耗。 82 ATtiny13 2535D–AVR–04/04 ATtiny13 模拟输入电路 单端通道的模拟输入电路见 Figure 46.。 不论是否用作 ADC 的输入通道,输入到 ADCn 的模拟信号都受到引脚电容及输入泄露的影响。用作 ADC 的输入通道时,模拟信号源必 须通过一个串联电阻 ( 输入通道的组合电阻 ) 驱动采样保持 (S/H) 电容。 ADC针对那些输出阻抗接近于10 kΩ或更小的模拟信号做了优化。对于这样的信号采样时 间可以忽略不计。若信号具有更高的阻抗,那么采样时间就取决于对 S/H 电容充电的时 间。这个时间可能变化很大。建议用户使用输出阻抗低且变化缓慢的模拟信号,因为这可 以减少对 S/H 电容的电荷传输。 频率高于奈奎斯特频率 (fADC/2) 的信号源不能用于任何一个通道,这样可以避免不可预知 的信号卷积造成的失真。在把信号输入到 ADC 之前最好使用一个低通滤波器来滤掉高频 信号。 Figure 46. 模拟输入电路 IIH ADCn 1..100 kΩ CS/H= 14 pF IIL VCC/2 83 2535D–AVR–04/04 模拟噪声抑制技术 设备内部及外部的数字电路都会产生电磁干扰 (EMI),从而影响模拟测量的精度。如果转 换精度要求较高,那么可以通过以下方法来减少噪声: 1. 模拟通路越短越好。保证模拟信号线位于模拟地之上,并使它们与高速切换的 数字信号线分开。 2. 使用 ADC 噪声抑制器来降低来自 CPU 的干扰噪声。 3. 如果有 ADC 端口被用作数字输出,那么必须保证在转换进行过程中它们不会 有电平的切换。 ADC 精度定义 一个 n 位的单端 ADC 将 GND 与 VREF 之间的线性电压转换成 2n 个 (LSBs) 不同的数字 量。最小的转换码为 0,最大的转换码为 2n-1。 以下几个参数描述了与理想情况之间的偏差: • 偏移:第一次转换 (0x000 到 0x001) 与理想转换 (0.5 LSB) 之间的偏差。理想情况: 0 LSB。 Figure 47. 偏移误差 Output Code Ideal ADC Actual ADC Offset Error • VREF Input Voltage 增益误差:调整偏差之后,最后一次转换 (0x3FE 到 0x3FF) 与理想情况 ( 最大值以下 1.5 LSB) 之间的偏差即为增益误差。理想值为 0 LSB。 Figure 48. 增益误差 Output Code Gain Error Ideal ADC Actual ADC VREF Input Voltage 84 ATtiny13 2535D–AVR–04/04 ATtiny13 • 整体非线性 (INL):调整偏移及增益误差之后,所有实际转换与理想转换之间的最大 误差即为 INL。理想值:0 LSB。 Figure 49. 整体非线性 (INL) Output Code INL Ideal ADC Actual ADC VREF • Input Voltage 差分非线性 (DNL):实际码宽 ( 两个邻近转换之间的码间距 ) 与理论码宽 (1 LSB) 之间的 偏差。理论值:0 LSB。 Figure 50. 差分非线性 (DNL) Output Code 0x3FF 1 LSB DNL 0x000 0 ADC 转换结果 VREF Input Voltage • 量化误差:由于输入电压被量化成有限位的数码,某个范围的输入电压 (1 LSB) 被转 换为相同的数码。量化误差总是为 ± 0.5 LSB。 • 绝对精度:所有实际转换 ( 未经调整 ) 与理论转换之间的最大偏差。由偏移、增益误 差、差分误差、非线性及量化误差构成。理想值为 ± 0.5 LSB。 转换结束后 (ADIF 为高 ),转换结果被存入 ADC 结果寄存器 (ADCL, ADCH)。 单次转换的结果如下 V IN ⋅ 1024 ADC = --------------------------V REF 85 2535D–AVR–04/04 式中, VIN 为被选中引脚的输入电压, VREF 为参考电压 ( 参见 P86Table 37 与 P86Table 38)。 0x000 代表模拟地电平, 0x3FF 代表所选参考电压的数值减去 1LSB。 ADC 多工选择寄存器- ADMUX Bit 7 6 5 4 3 2 1 0 – REFS0 ADLAR – – – MUX1 MUX0 读/写 R R/W R/W R R R R/W R/W 初始值 0 0 0 0 0 0 0 0 ADMUX • Bit 7 – Res: 保留 保留位,返回值为零。 • Bit 6 – REFS0: 参考电压选择 如 Table 37 所示,通过这几位可以选择参考电压。如果在转换过程中改变了它们的设置, 只有等到当前转换结束 (ADCSRA 寄存器的 ADIF 置位 ) 之后改变才会起作用。 Table 37. ADC 参考电压选择 参考电压选择 REFS0 0 VCC 作为模拟参考电压 1 片内基准电压 Bit 5 – ADLAR: ADC 转换结果 左对齐 • ADLAR影响ADC转换结果在ADC数据寄存器中的存放形式。ADLAR置位时转换结果为左 对齐,否则为右对齐。 ADLAR 的改变将立即影响 ADC 数据寄存器的内容,不论是否有 转换正在进行。关于这一位的完整描述请见 P87“ADC 数据寄存器 – ADCL 及 ADCH” 。 • Bits 4:2 – Res: 保留 保留位,返回值为零。 • Bits 1:0 – MUX1:0: 模拟通道选择位 通过这几位的设置,可以对连接到 ADC 的模拟输入进行选择,详见 Table 38。如果在转 换过程中改变这几位的值,那么只有到转换结束 (ADCSRA 寄存器的 ADIF 置位 ) 后新的 设置才有效。 Table 38. 输入通道选择 单端输入 MUX1..0 ADC 控制和状态寄存器 A - ADCSRA Bit 00 ADC0 (PB5) 01 ADC1 (PB2) 10 ADC2 (PB4) 11 ADC3 (PB3) 7 6 5 4 3 2 1 0 ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0 读/写 R/W R/W R/W R/W R/W R/W R/W R/W 初始值 0 0 0 0 0 0 0 0 ADCSRA • Bit 7 – ADEN: ADC 使能 ADEN置位即启动ADC,否则ADC功能关闭。在转换过程中关闭ADC将立即中止正在进行 的转换。 • Bit 6 – ADSC: ADC 开始转换 86 ATtiny13 2535D–AVR–04/04 ATtiny13 在单次转换模式下,ADSC 置位将启动一次 ADC 转换。在连续转换模式下,ADSC 置位 将启动首次转换。第一次转换 ( 在 ADC 启动之后置位 ADSC,或者在使能 ADC 的同时置 位 ADSC) 需要 25 个 ADC 时钟周期,而不是正常情况下的 13 个。第一次转换执行 ADC 初始化的工作。 在转换进行过程中读取 ADSC 的返回值为 "1”,直到转换结束。ADSC 清零不产生任何动 作。 • Bit 5 – ADATE: ADC 自动触发使能 ADATE 置位将启动 ADC 自动触发功能。触发信号的上跳沿启动 ADC 转换。触发信号源通 过 ADCSRB 寄存器的 ADC 触发信号源选择位 ADTS 设置。 • Bit 4 – ADIF: ADC 中断标志 在 ADC 转换结束,且数据寄存器被更新后, ADIF 置位。如果 ADIE 及 SREG 中的全局 中断使能位 I 也置位,ADC 转换结束中断服务程序即得以执行,同时 ADIF 硬件清零。此 外,还可以通过向此标志写 1 来清 ADIF。要注意的是,如果对 ADCSRA 进行读-修改 -写操作,那么待处理的中断会被禁止。这也适用于 SBI 及 CBI 指令。 • Bit 3 – ADIE: ADC 中断使能 若 ADIE 及 SREG 的位 I 置位, ADC 转换结束中断即被激活。 • Bits 2:0 – ADPS2:0: ADC 预分频器选择位 由这几位来确定系统时钟与 ADC 输入时钟之间的分频因子。 Table 39. ADC 预分频选择 ADPS2 ADPS1 ADPS0 分频因子 0 0 0 2 0 0 1 2 0 1 0 4 0 1 1 8 1 0 0 16 1 0 1 32 1 1 0 64 1 1 1 128 ADC 数据寄存器- ADCL 及 ADCH ADLAR = 0 Bit 读/写 初始值 15 14 13 12 11 10 9 8 – – – – – – ADC9 ADC8 ADCH ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADC1 ADC0 ADCL 7 6 5 4 3 2 1 0 R R R R R R R R R R R R R R R R 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ADLAR = 1 Bit 15 14 13 12 11 10 9 8 ADC9 ADC8 ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADCH 87 2535D–AVR–04/04 读/写 初始值 ADC1 ADC0 – – – – – – 7 6 5 4 3 2 1 0 R R R R R R R R R R R R R R R R 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ADCL ADC 转换结束后,转换结果存于这两个寄存器之中。 读取 ADCL 之后,ADC 数据寄存器一直要等到 ADCH 也被读出才可以进行数据更新。因 此,如果转换结果为左对齐,且要求的精度不高于 8 比特,那么仅需读取 ADCH 就足够 了。否则必须先读出 ADCL 再读 ADCH。 ADMUX 寄存器的 ADLAR 及 MUXn 会影响转换结果在数据寄存器中的表示方式。如果 ADLAR 为 1,那么结果为左对齐;反之 ( 系统缺省设置 ),结果为右对齐。 • ADC9:0: ADC 转换结果 ADC 转换的结果,详见 P85“ADC 转换结果 ” 。 ADC 控制与状态寄存器 B - ADCSRB Bit 7 6 5 4 3 2 1 0 – ACME – – – ADTS2 ADTS1 ADTS0 读/写 R R/W R R R R/W R/W R/W 初始值 0 0 0 0 0 0 0 0 ADCSRB • Bits 7, 5..3 – Res: 保留 保留位,返回值为零。 • Bits 2:0 – ADTS2:0: ADC 自动触发源 若 ADCSRA 寄存器的 ADATE 位写入 "1”,ADTS2:0 选择 ADC 转换的触发源 。若 ADATE 清零, ADTS2:0 的设置无效。被选中断标志的上升沿触发转换。注意,从一个触发源的 清除到另一个触发源的设置过程中,将产生一个下跳沿。一旦设置 ADCSRA 寄存器的 ADEN 位,将会启动一次转换。即使 ADC 中断标志设置,变化到连续模式 (ADTS[2:0]=0) 时不会触发转换。 Table 40. ADC 自动触发源选择 数字输入禁用寄存器 0 - DIDR0 触发源 ADTS2 ADTS1 ADTS0 0 0 0 连续转换模式 0 0 1 模拟比较器 0 1 0 外部中断请求 0 0 1 1 T/C 比较匹配 A 1 0 0 T/C 溢出 1 0 1 T/C 比较匹配 B 1 1 0 引脚变化中断请求 Bit 7 6 5 4 3 2 1 0 – – ADC0D ADC2D ADC3D ADC1D AIN1D AIN0D 读/写 R R R/W R/W R/W R/W R/W R/W 初始值 0 0 0 0 0 0 0 0 DIDR0 • Bits 5..2 – ADC3D..ADC0D: ADC3..0 数字输入禁用 88 ATtiny13 2535D–AVR–04/04 ATtiny13 当该位写 "1”,禁用相应的 ADC 引脚数字输入缓冲。此时相应的引脚寄存器始终读为 "0”。 当 ADC3..0 输入为模拟信号,且不需要数字信号时,该位应置位,以降低数字输入缓冲 器的功耗。 89 2535D–AVR–04/04 片上调试系统 特点 • • • • • • • • • • 完全的程序流控制 仿真芯片上所有的模拟和数字功能,除了 RESET 引脚 实时操作 支持符号调试 (C 与汇编级,或其它 HLL) 没有限制的程序断点数 ( 使用软件断点 ) 非插入式操作 与实际器件相同的电气特性 自动配置系统 高速操作 编程非易失性存储器 概述 debugWIRE 片上调试系统使用单线双向接口来控制程序流,在 CPU 中执行 AVR 指令,对 不同的非易失性存储器进行编程。 物理接口 当 debugWIRE 使能熔丝位 DWEN 被编程且锁定位未编程时,目标器件中的 debugWIRE 系统被激活。RESET 端口引脚配置为上拉使能的线与 ( 开漏 ) 双向 I/O,成为目标与仿真 器间的联系通路。 Figure 51. The debugWIRE 设置 1.8 - 5.5V VCC dW dW(RESET) GND Figure 51 给出 debugWIRE 使能的目标 MCU 及仿真连接器的示意图。系统时钟不受 debugWIRE 的影响,只由 CKSEL 熔丝位决定。 设计使用 debugWIRE 的系统时,必须进行下面的检查: 软件断点 90 • dW/(RESET) 的上拉电阻不得小于 10kΩ。 debugWIRE 并不需要上拉电阻 • 将 RESET 引脚与 VCC 直接连接将无法工作 • 使用 debugWIRE 时必须断开与 RESET 引脚连接的电容 • 必须断开所有的外部复位源 debugWIRE 通过 AVR 断点指令来设置程序存储器断点。在 AVR Studio® 设置一个断点将 在程序存储器中插入 BREAK 指令。被 BREAK 指令所替代的指令将被保存。程序继续运 ATtiny13 2535D–AVR–04/04 ATtiny13 行时,保存的指令得到执行,然后继续执行其他指令。断点也可以通过在程序中插入 BREAK 指令进行手工设置。 每次断点改变后 Flash 必须要重新编程。这由 AVR Studio® 通过 debugWIRE 接口自动处 理。断点的使用会降低 Flash 数据记忆时间。调试用的器件不能发给最终客户。 debugWIRE 的局限 debugWIRE 通讯引脚 (dW) 与外部复位 (RESET) 共用同一引脚。因此使能 debugWIRE 之 后,系统不支持外部复位源。 当程序在 CPU 中全速运行时, debugWIRE 系统精确的仿真所有的 I/O 口功能;当 CPU 停止工作时,通过调试器访问某些 I/O 寄存器时要注意。详见 debugWIRE 文档。 DWEN 熔丝位的编程使部分时钟系统在所有的休眠模式下都保持运行。这会增加器件休 眠模式的功耗。因此不使用 debugWire 时应该禁用 DWEN 熔丝位。 I/O 存储器中与 debugWIRE 相关的寄存器 debugWire 数据寄存器- DWDR 下面说明在 debugWire 中用到的寄存器。 Bit 7 6 5 4 3 2 1 0 DWDR[7:0] DWDR 读/写 R/W R/W R/W R/W R/W R/W R/W R/W 初始值 0 0 0 0 0 0 0 0 DWDR 寄存器为在 MCU 中运行的程序与调试器提供了通信通路。该寄存器只能由 debugWIRE 访问且不能在通常操作中作为通用寄存器使用。 91 2535D–AVR–04/04 Flash 自编程 器件为通过 MCU 本身来下载和上载程序代码提供了一个自编程机制。自编程可以使用任 何器件可用的数据接口和相关的协议来获得代码并把代码 ( 程序 ) 写入程序存储器。 程序存储器的更新以页的方式进行。在用临时页缓冲器存储的数据对一页存储器进行编 程之前首先要将这一页擦除。 SPM 指令以一次一个字的方式将数据写入临时页缓冲器。 临时页缓冲器的写入可以在页擦除命令之前完成,也可以在页擦除和页写操作之间完成。 方案 1,在页擦除前填充缓冲器 • 填充临时页缓冲器 • 执行页擦除操作 • 执行页写操作 方案 2,在页擦除之后填充缓冲器 • 执行页擦除操作 • 填充临时页缓冲器 • 执行页写操作 如果只需要改变页中的一部分,擦除前必须保存页中的其它部分 ( 例如保存于临时页缓冲 器之中 ),再重新写入。使用方案 1 时, Boot Loader 提供了有效的读 - 该 - 写操作,允 许用户先读页,做必要的改变,再写回修改后的数据;若使用方案 2,由于页已被擦除, 因此不可能在加载数据时读取旧的数据。临时页缓冲器可以进行随机访问。进行页擦除与 页写操作时要确保地址是相同的。 通过 SPM 完成页擦除 执行页擦除操作首先需要设置 Z 指针的地址信息,然后将 “00000011” 写入 SPMCSR,最 后在其后的四个时钟周期内执行 SPM。R1 和 R0 中的数据被忽略。页地址必须写入 Z 寄 存器的 PCPAGE。 Z 指针的其他位被忽略。 • 写临时缓冲区 ( 页加载 ) 在擦除操作过程中 CPU 停止 写一个指令字首先需要设置 Z 指针的地址信息,以及将指令字写入 R1:R0,然后将 “00000001” 写入 SPMCSR,最后在其后的四个时钟周期内执行 SPM。 Z 寄存器中 PCWORD 的内容用来寻址临时缓冲区。 页写操作完成,或置位 SPMCSR 寄存器的 RWWSRE 将使临时缓冲区自动擦除。系统复位也会擦除临时缓冲区。但是如果不清除临 时缓冲区就只能对每个地址进行一次写操作。 如果在 SPM 页加载操作过程中对 EEPROM 执行了写操作,则所有加载的数据都将丢失。 执行页写操作 执行页写操作首先需要设置 Z 指针的地址信息,然后将 “00000101” 写入 SPMCSR,最 后在其后的四个时钟周期内执行 SPM。R1 和 R0 中的数据被忽略。页地址必须写入 Z 寄 存器的 PCPAGE。 Z 指针的其他位被忽略。 • 92 页写过程中 CPU 停止 ATtiny13 2535D–AVR–04/04 ATtiny13 在自编程过程中寻址 Flash Z 指针用来寻址 SPM 命令。 Bit 15 14 13 12 11 10 9 8 ZH (R31) Z15 Z14 Z13 Z12 Z11 Z10 Z9 Z8 ZL (R30) Z7 Z6 Z5 Z4 Z3 Z2 Z1 Z0 7 6 5 4 3 2 1 0 由于 Flash 存储器是以页的形式组织 (P99Table 46) 起来的,程序计数器可看作由两个部 分构成:其一为实现页内寻址的低位部分;其次为实现页寻址的高位部分,如 Figure 52 所示。由于页擦除和页写操作的寻址是相互独立的,因此保证 Boot Loader 软件在页擦除 和页写操作时寻址相同的页是最重要的。 LPM指令也使用Z指针来保存地址。由于这个指令的寻址逐字节地进行,所以Z指针的LSB 位 ( 位 Z0) 也使用到了。 Figure 52. SPM(1) 的寻址 BIT 15 ZPCMSB ZPAGEMSB Z - REGISTER 1 0 0 PCMSB PROGRAM COUNTER PAGEMSB PCPAGE PAGE ADDRESS WITHIN THE FLASH PROGRAM MEMORY PAGE PCWORD WORD ADDRESS WITHIN A PAGE PAGE INSTRUCTION WORD PCWORD[PAGEMSB:0]: 00 01 02 PAGEEND Note: 1. Figure 52 中所用的不同的变量在 P99Table 46 列出。 93 2535D–AVR–04/04 存贮程序存储器 (SPM) 控制和状 SPMCSR 包括了控制 Boot Loader 操作所需的控制位。 态寄存器- SPMCSR Bit 7 6 5 4 3 2 1 0 – – – CTPB RFLB PGWRT PGERS SELFPRGEN 读/写 R R R R/W R/W R/W R/W R/W 初始值 0 0 0 0 0 0 0 0 SPMCSR • Bits 7..5 – Res: 保留 保留位,返回值为零。 • Bit 4 – CTPB: 清除临时页缓冲 当填充临时页缓冲时,若写入 CTPB 位,临时页缓冲将被清除,数据将会丢失。 • Bit 3 – RFLB: 读熔丝与锁定位 在 SPMCSR 寄存器中的 RFLB 与 SELFPRGEN 位设置后的三个时钟周期内,LPM 将锁 定位或熔丝位 ( 取决于 Z 指针的 Z0) 读入目的寄存器,详见 P95“EEPROM 写操作阻止对 SPMCSR 寄存器的写操作 ” 。 • Bit 2 – PGWRT: 页写入 如果这一位和 SELFPRGEN 同时置位,发生于紧接着的四个时钟周期内的 SPM 指令执 行页写功能,将数据存入临时缓冲器中。页地址取自 Z 指针的高位部分。 R1 和 R0 的数 据则被忽略。页写操作完成,或在四个时钟周期内没有 SPM 指令被执行时, PGWRT 自 动清零。在整个页写操作过程中 CPU 停止。 • Bit 1 – PGERS: 页擦除 如果这一位和 SELFPRGEN 同时置位,发生于紧接着的四个时钟周期内的 SPM 指令执 行页擦除功能。页地址取自 Z 指针的高位部分。 R1 和 R0 的数据则被忽略。页擦除操作 完成,或在四个时钟周期内没有 SPM 指令被执行时, PGERS 自动清零。在整个页擦除 操作过程中 CPU 停止。 • Bit 0 – SELFPRGEN: 自编程使能 这一位使能紧接着的四个时钟周期内的 SPM 指令。如果将这一位和 CTPB、 RFLB、 PGWRT 或 PGERS 之一同时置位,则如上所述,接下来的 SPM 指令将有特殊的含义。如 果只有 SELFPRGEN 置位,那么接下来的 SPM 指令将把 R1:R0 中的数据存储到由 Z 指 针确定的临时页缓冲器。Z 指针的 LSB 被忽略。SPM 指令完成,或在四个时钟周期内没 有 SPM 指令被执行时, SELFPRGEN 自动清零。在页擦除和页写过程中 SELFPRGEN 保持为高直到操作完成。 在低五位中写入除 “10001”、 “01001”、 “00101”、 “00011” 或 “00001” 之外的任何组合都 无效。 94 ATtiny13 2535D–AVR–04/04 ATtiny13 EEPROM 写操作阻止对 SPMCSR 寄存器的写操作 EEPROM 写操作会阻塞对 Flash 的编程,也会阻塞对熔丝位和锁定位的读操作。建议用户 在对 SPMCSR 寄存器进行写操作之前首先检查 EECR 寄存器的状态位 EEWE,确保此 位已被清除。 通过软件读取熔丝位和锁定位 熔丝位和锁定位可以通过软件读取。读锁定位时,需要将 0x0001 赋予给 Z 指针并且置位 SPMCSR 寄存器的 RFLB 和 SELFPRGEN。在 RFLB 操作之后的三个 CPU 周期内执行的 LPM 指令将把锁定位的值将加载到目的寄存器。 读锁定位操作结束,或者在三个 CPU 周 期内没有 执行 LPM 指令,或在四个 CPU 周期内没有执行 SPM 指令, RFLB 和 SELFPRGEN 位将自动硬件清零。RFLB 和 SELFPRGEN 清零后,LPM 将按照指令手册 中所描述的那样工作。 Bit 7 6 5 4 3 2 1 0 Rd – – – – – – LB2 LB1 读取熔丝位低字节的算法和上述读取锁定位的算法类似。要读取熔丝位低字节,需要将 0x0000赋予给Z指针并且置位SPMCSR寄存器的RFLB 和 SELFPRGEN。在SPMCSR操 作之后的三个 CPU 周期内执行的 LPM 指令将把熔丝位低位字节的值 (FLB) 加载到目的寄 存器。更详细的说明及熔丝位低位字节映射的细节请参见 P98Table 45 。 Bit 7 6 5 4 3 2 1 0 Rd FLB7 FLB6 FLB5 FLB4 FLB3 FLB2 FLB1 FLB0 类似的,读取熔丝位高位字节时,需要将 0x0003 赋予给 Z 指针并且置位 SPMCSR 寄存 器的 RFLB 和 SELFPRGEN。在 SPMCSR 操作之后的三个 CPU 周期内执行的 LPM 指 令将把熔丝位高位字节的值 (FHB) 加载到目的寄存器。更详细的说明及熔丝位高位字节映 射的细节请参见 P98Table 44 。 Bit 7 6 5 4 3 2 1 0 Rd FHB7 FHB6 FHB5 FHB4 FHB3 FHB2 FHB1 FHB0 被编程的熔丝位 / 锁定位的读返回值为 "0”。未被编程的熔丝位 / 锁定位的读返回值为 "1”。 95 2535D–AVR–04/04 防止 Flash 损毁 VCC 低于工作电压时,CPU 和 Flash 正常工作无法保证,Flash 的内容可能受到破坏。这个 问题在板级系统的独立 Flash 中一样存在。所以也要采用同样的解决方案。 电压太低时有两种情况可以破坏 Flash 内容。第一, Flash 写过程需要一个最低电压。第 二,电压太低时 CPU 本身会错误地执行指令。 通过遵循以下设计建议可以避免 Flash 被破坏 ( 采用其中之一就足够了 ): 1. 电源电压不足期间,保持 AVR RESET 为低:采用的方式为:如果工作电压与检 测电平相匹配,可以使能 BOD 功能;否则可以使用外部复位保护电路。如果在 写操作进行中发生了复位,只要电源电压足够,写操作还会完成。 2. 低电压期间保持 AVR 内核处于掉电休眠模式。这样可以防止 CPU 解码并执行指 令,有效地保护 SPMCSR 寄存器,从而保护 Flash 被无意识得修改掉。 使用 SPM 时的 Flash 编程时间 片内校准的 RC 振荡器用于 Flash 寻址时序控制。Table 41 给出了 CPU 访问 Flash 的典 型编程时间。 Table 41. SPM 编程时间 96 符号 最小编程时间 最大编程时间 Flash 写操作 ( 通过 SPM 实现页擦除、 页写、及写锁定位 ) 3.7 ms 4.5 ms ATtiny13 2535D–AVR–04/04 ATtiny13 存储器编程 本节说明 ATtiny13 存储器的不同编程方法。 程序存储器和数据存储器锁 The ATtiny13 提供了 2 个锁定位,根据其已编程 (“0”) 还是未编程 (“1”) 的情况可以获得 Table 43 列出的附加性能。锁定位只能通过芯片擦除命令擦写为 “1”。 定位 当 DWEN 熔丝位编程后,即使设置锁定位,程序存储器也可通过 debugWIRE 接口读出 。 但当锁定位有安全要求时,应将 DWEN 熔丝位清除以禁用 debugWIRE。 Table 42. 锁定位字节 (1) 锁定位字节 位号 说明 默认值 7 – 1 ( 未编程 ) 6 – 1 ( 未编程 ) 5 – 1 ( 未编程 ) 4 – 1 ( 未编程 ) 3 – 1 ( 未编程 ) 2 – 1 ( 未编程 ) LB2 1 锁定位 1 ( 未编程 ) LB1 0 锁定位 1 ( 未编程 ) 1. “1” 表示未编程,“0” 表示被编程。 Note: Table 43. 锁定位保护模式 (1)(2) 存储器锁定位 保护类型 LB 模式 LB2 LB1 1 1 1 没有使能存储器保护特性 2 1 0 在并行和串行编程模式中 Flash 和 EEPROM 的进一步编 程被禁止,熔丝位被锁定。 (1) debugWire 禁用 3 0 0 在并行和串行编程模式中 Flash 和 EEPROM 的进一步编 程及验证被禁止,锁定位和熔丝位被锁定 (1) debugWire 禁 用 Notes: 1. 在编程 LB1 和 LB2 前先编程熔丝位 2. “1” 表示未编程 , “0” 表示已编程。 97 2535D–AVR–04/04 熔丝位 ATtiny13 有两个熔丝位字节。Table 44 与 Table 45 简单地描述了所有熔丝位的功能以及 他们是如何映射到熔丝字节的。如果熔丝位被编程则读返回值为 “0”。 Table 44. 熔丝位高位字节 熔丝位高位字节 位号 说明 默认值 – 7 – 1 ( 未编程 ) – 6 – 1 ( 未编程 ) – 5 – 1 ( 未编程 ) SELFPRGEN 4 自编程使能 1 ( 未编程 ) DWEN(3) 3 debugWire 使能 1 ( 未编程 ) (1) 2 BOD 触发电平 1 ( 未编程 ) (1) BODLEVEL0 1 BOD 触发电平 1 ( 未编程 ) (4) 0 外部复位禁用 1 ( 未编程 ) BODLEVEL1 RSTDISBL Notes: 1. 2. 3. 4. BODLEVEL 熔丝位解码,见 P32Table 13 RSTDISBL 与 DWEN 熔丝位的说明,请见 P48“ 端口 B 的第二功能 ” 。 当锁定位有安全要求时,DWEN 不许编程,见 P97“ 程序存储器和数据存储器锁定位” 。 当对 RSTDISBL 熔丝位编程,必须使用高电压串行编程来改变熔丝位以执行更深层的 编程。 Table 45. 熔丝位低位字节 熔丝位低位字节 位号 (1) 说明 默认值 7 使能串行编程与数据下载 0 ( 已编程,SPI 编程使能 ) EESAVE 6 在芯片擦除时保存 EEPROM 存储器值 1 ( 未编程,EEPROM 不保 存) WDTON(2) 5 打开看门狗定时器 1 ( 未编程 ) CKDIV8(5) 4 时钟 8 分频 0 ( 已编程 ) SUT1 3 选择启动时间 1 ( 未编程 )(3) SUT0 2 选择启动时间 0 ( 已编程 )(3) CKSEL1 1 选择时钟源 1 ( 未编程 )(4) CKSEL0 0 选择时钟源 0 ( 已编程 )(4) SPIEN Notes: 在 SPI 编程模式下, SPIEN 熔丝位不可访问。 详见 P37“ 看门狗定时器控制寄存器 - WDTCR” 。 对于默认时钟源, SUT1..0 的默认值给出最大的启动时间。详细内容见 P22Table 5。 CKSEL1..0 的默认设置导致了片内 RC 振荡器运行于 9.6 MHz。详细内容见 P22Table 4。 5. 详见 P24“ 系统时钟预分频器 ” 。 1. 2. 3. 4. 熔丝位的状态不受芯片擦除命令的影响。如果锁定位 1(LB1) 被编程则熔丝位被锁定。在 编程锁定位前先编程熔丝位。 98 ATtiny13 2535D–AVR–04/04 ATtiny13 熔丝位的锁存 器件进入编程模式时熔丝位的值被锁存。其间熔丝位的改变不会生效,直到器件退出编程 模式。不过这不适用于 EESAVE 熔丝位。它一旦被编程立即起作用。在正常工作模式中 器件上电时熔丝位也被锁存。 标识字节 所有的 Atmel 微控制器都具有一个三字节的标识代码用来区分器件型号。这个代码可以通 过串行和并行模式读取,也可以在芯片被锁定时读取。这三个字节分别存储于三个独立的 地址空间。 ATtiny13 的表示字节为: 1. 0x000: 0x1E ( 表示由 Atmel 公司生产 ) 2. 0x001: 0x90 ( 表示芯片包含 1KB Flash 存储器 ) 3. 0x002: 0x07 ( 当 0x001 字节的内容为 0x90 时表示这是 ATtiny13) 校准字节 ATtiny13 内部 RC 振荡器的校准值保存于校准字节。这个字节位于标识地址空间 0x000 的 高位字节。在复位期间,该字节被自动写入 OSCCAL 寄存器以确保校准的 RC 振荡器频 率的正确性。 页尺寸 Table 46. Flash 中的页号及页中的字号 Flash 尺寸 512 字 (1K 字节 ) 页尺寸 PCWORD 页号 PCPAGE PCMSB 16 字 PC[3:0] 32 PC[8:4] 8 Table 47. EEPROM 中的页号及页中的字号 EEPROM 尺寸 页尺寸 PCWORD 页号 PCPAGE EEAMSB 64 字节 4 字节 EEA[1:0] 16 EEA[5:2] 5 99 2535D–AVR–04/04 串行下载 当 RESET 为低电平时,可以通过串行 SPI 总线对 Flash 及 EEPROM 进行编程。串行接 口包括 SCK、 MOSI( 输入 ) 及 MISO( 输出 )。 RESET 为低之后,应在执行编程/擦除 操作之前执行编程允许指令。 P100Table 48 列出了 SPI 编程所需引脚的映射。不是所有 的器件都使用 SPI 引脚专用于内部 SPI 接口。 Figure 53. 串行编程及校验 (1) +1.8 - 5.5V PB5 RESET VCC GND Notes: PB2 SCK PB1 MISO PB0 MOSI 1. 如果芯片由片内振荡器提供时钟,那么就不用在 CLKI 引脚上连接时钟源。 Table 48. 引脚映射串行编程 符号 引脚 I/O 说明 MOSI PB0 I 串行数据输入 MISO PB1 O 串行数据输出 SCK PB2 I 串行时钟 编程 EEPROM 时, MCU 在自定时的编程操作中会插入一个自动擦除周期 ( 仅在串行模 式下 ),从而无需执行芯片擦除命令。芯片擦除操作将程序存储器及 EEPROM 的内容都 擦除为 0xFF。 时钟通过 CKSEL 熔丝位确定。串行时钟 (SCK) 的最小低电平时间和最小高电平时间要满 足如下要求: 低:> fck < 12 MHz 时为 2 个 CPU 时钟周期,fck >= 12 MHz 时为 3 个 CPU 时钟周期 高:>fck < 12 MHz 时为 2 个 CPU 时钟周期, fck >= 12 MHz 时为 3 个 CPU 时钟周期 100 ATtiny13 2535D–AVR–04/04 ATtiny13 串行编程算法 向 ATtiny13 串行写入数据时,数据在 SCK 的上升沿得以锁定。 从 ATtiny13 读取数据时,数据在 SCK 的下降沿输出。时序细节见 Figure 54 与 Figure 55。 在串行编程模式下对 ATtiny13 进行编程及校验时,应遵循以下的步骤 ( 见 Table 50 中的 4 字节指令格式 ): 1. 上电顺序: 在 RESET 及 SCK 为 "0” 时,向 VCC 及 GND 供电。在一些系统中,编程器不能 保证在上电时 SCK 保持为低。在这种情况下,SCK 拉低之后应在 RESET 加一正 脉冲,而且这个脉冲至少要维持 2 个 CPU 时钟周期。 2. 上电之后等待至少 20 ms,然后向 MOSI 引脚输入串行编程使能指令以使能串行编 程。 3. 通信不同步将造成串行编程指令不工作。同步之后,在发送编程使能指令的第三 个字节时,第二个字节的内容 (0x53) 将被反馈回来。不论反馈的内容正确与否, 指令的 4 个字节必须全部传输。如果 0x53 未被反馈,则需要向 RESET 提供一个 正脉冲以开始新的编程使能指令。 4. Flash 的编程以一次一页的方式进行。 在执行加载程序存储页指令时,通过 5LSB 的地址信息,数据以字节为单位加载到存储页。为保证加载的正确性,应先向给 定地址传送数据低字节,之后是高字节。程序存储页通过地址的高 8 位以及写程 序存储器页指令获得数据。如果不使用轮询的方式,那么在操作下一页数据之前 应等待至少 tWD_FLASH 的时间 ( 见 Table 49.)。在 Flash 写操作完成之前访问串行 编程接口会导致编程错误。 5. A: 提供了地址及数据信息之后,适合的写指令将以字节为单位对 EEPROM 编程。 EEPROM 存储单元总是在写入新数据之前自动擦除。如果不使用轮询的方式,那 么在操作下一页数据之前应等待至少 tWD_EEPROM 的时间 ( 见 Table 49) 。对于全 片擦除之后的芯片,数据为 0xFF 的不需要编程。 B: EEPROM 编程是以页为单位的。存储器页通过载入 EEPROM 存储器页指令同 时得到 2 LSB 的地址与数据载入一个字节。 EEPROM 存储器页保存是通过载入 写 EEPROM 存储器页指令及 4 MSB 地址来实现。当使用 EEPROM 页访问时, 只有位于载入 EEPROM 页指令处的字节改变。其余部分不变。如果不使用查询的 方式,那么在操作下一页数据之前应等待至少 tWD_EEPROM 的时间 ( 见 Table 47.) 。 对于全片擦除之后的芯片,数据为 0xFF 的不需要编程。 6. 可通过读指令来校验任何一个存储单元的内容。数据从串行输出口 MISO 输出。 7. 编程结束后可以将 RESET 拉高开始正常操作。 8. 下电序列 ( 如果需要 ): 将 RESET 置 “1”。 切断 VCC。 101 2535D–AVR–04/04 . Table 49. 写下一个 Flash 或 EEPROM 单元之前的最小等待时间 符号 最小等待时间 tWD_FLASH 4.5 ms tWD_EEPROM 4.0 ms tWD_ERASE 4.0 ms tWD_FUSE 4.5 ms Figure 54. 串行编程波形图 SERIAL DATA INPUT (MOSI) MSB LSB SERIAL DATA OUTPUT (MISO) MSB LSB SERIAL CLOCK INPUT (SCK) SAMPLE 102 ATtiny13 2535D–AVR–04/04 ATtiny13 Table 50. 串行编程指令集 指令格式 指令 字节 1 字节 2 字节 3 字节 4 编程使能 1010 1100 0101 0011 xxxx xxxx xxxx xxxx RESET 拉低后使能串行编程 全片擦除 1010 1100 100x xxxx xxxx xxxx xxxx xxxx 擦除 EEPROM 及 Flash 读程序存储器 0010 H000 0000 000a bbbb bbbb oooo oooo 从字地址为 a:b 的程序存储器读取 H( 高 或低字节 ) 数据的 o 加载程序存储器页 0100 H000 000x xxxx xxxx bbbb iiii iiii 向字地址为 b 的程序存储页 H( 高或低 字节 ) 写入数据 i。应先写低字节再写 高字节 写程序存储器页 0100 1100 0000 000a bbbb xxxx xxxx xxxx 在地址 a:b 加载程序存储页 读 EEPROM 存储器 1010 0000 000x xxxx xxbb bbbb oooo oooo 从 EEPROM 的地址 b 处读出数据 写 EEPROM 存储器 1100 0000 000x xxxx xxbb bbbb iiii iiii 向 EEPROM 地址 b 处中写入数据 i 加载 EEPROM 存储器页 ( 页 寻址 ) 1100 0001 0000 0000 0000 00bb iiii iiii 将数据 i 加载到 EEPROM 存储器页缓 冲区。数据加载完毕后对 EEPROM 页 进行编程 写EEPROM存储器页(页寻址 ) 1100 0010 00xx xxxx xxbb bb00 xxxx xxxx 读锁定位 0101 1000 0000 0000 xxxx xxxx xxoo oooo 读锁定位。 ”0” 为已编程, "1” 为未编 程。细节见 P97Table 42 写锁定位 1010 1100 111x xxxx xxxx xxxx 11ii iiii 写锁定位。写 “0” 表示编程锁定位。细 节见 P97Table 42 读标识字节 0011 0000 000x xxxx xxxx xxbb oooo oooo 从地址 b 读取标识字节 o 写熔丝位 1010 1100 1010 0000 xxxx xxxx iiii iiii “0” 表示已编程, “1” 表示未编程 写高熔丝位 1010 1100 1010 1000 xxxx xxxx iiii iiii “0” 表示已编程, “1” 表示未编程。见 P80Table 36 读熔丝位 0101 0000 0000 0000 xxxx xxxx oooo oooo 读熔丝位。 “0” 表示已编程, “1” 表示 未编程 读高熔丝位 0101 1000 0000 1000 xxxx xxxx oooo oooo 读熔丝高位。 “0” 表示已编程, “1” 表 示未编程。细节见 P80Table 36 读校准字节 0011 1000 000x xxxx 0000 0000 oooo oooo 读校准字节 轮询 RDY/BSY 1111 0000 0000 0000 xxxx xxxx xxxx xxxo o = “1” 表示编程操作正在进行。等到它 为 “0” 后可以执行其他命令。 Note: 操作 对地址为 b 的 EEPROM 执行页写操作 a = 地址高位, b = 地址低位, H = 0 - 低字节, 1 - 高字节 ,o = 数据输出, i = 数据输入,x = 任意值 103 2535D–AVR–04/04 串行编程特性参数 Figure 55. 串行编程时序 MOSI tSHOX tOVSH SCK tSLSH tSHSL MISO tSLIV Table 51. 串行编程参数, TA = -40°C-85°C, VCC = 1.8 - 5.5V ( 如无特殊说明 ) 符号 104 最小值 1/tCLCL 振荡器频率 (ATtiny13V) 0 tCLCL 振荡器周期 (ATtiny13V) 1,000 典型 值 最大 值 单位 1 MHz ns 1/tCLCL 振荡器频率 (ATtiny13L, VCC = 2.7 - 5.5V) 0 tCLCL 振荡器周期 (ATtiny13L, VCC = 2.7 - 5.5V) 104 1/tCLCL 振荡器频率 (ATtiny13, VCC = 4.5V - 5.5V) 0 tCLCL 振荡器周期 (ATtiny13, VCC = 4.5V - 5.5V) 67 ns tSHSL SCK 脉宽高 2 tCLCL* ns tSLSH SCK 脉宽低 2 tCLCL* ns tOVSH 当 SCK 为高 MOSI 建立 tCLCL ns tSHOX SCK 为高后 MOSI 保持 2 tCLCL ns tSLIV MISO 有效 SCK 为低 TBD Note: 高电压串行编程 参数 9.6 MHz ns 16 TBD TBD MHz ns 1. fck < 12 MHz 为 2 tCLCL,fck >= 12 MHz 为 3 tCLCL 本节说明 ATtiny13 中对 Flash 程序存储器、 EEPROM 数据存储器锁定位及熔丝位的编 程与检验。 ATtiny13 2535D–AVR–04/04 ATtiny13 Figure 56. 高电压串行编程 +11.5 - 12.5V SERIAL CLOCK INPUT +1.8 - 5.5V PB5 (RESET) VCC PB3 (CLKI) PB2 SCK PB1 MISO PB0 MOSI GND Table 52. 对应引脚名称 在高电压串行编程模式下的信 号名称 引脚名称 I/O 功能 SDI PB0 I 串行数据输入 SII PB1 I 串行指令输入 SDO PB2 O 串行数据输出 SCI PB3 I 串行时钟输入 ( 最小周期 220ns) 在高电压串行编程时的串行时钟输入 (SCI) 最小周期为 220 ns。 Table 53. 进入编程模式时所用引脚值 引脚 符号 值 SDI Prog_enable[0] 0 SII Prog_enable[1] 0 SDO Prog_enable[2] 0 105 2535D–AVR–04/04 高电压串行编程算法 在高电压串行编程模式下 ATtiny13 的编程与检验,推荐次序如下 ( 指令格式见 Table 55): 进入高电压串行指令模式 按照如下算法,芯片进入高电压串行编程模式: 1. VCC 与 GND 间电压为 4.5 - 5.5V 2. 将 RESET 引脚置 “0”, SCI 至少取反 6 次 3. 将 Table 53 中列出的 Prog_enable 引脚设为 “000”,再等待至少 100 ns 4. RESET 电压为 VHVRST - 5.5V ,在提供高电压后,Prog_enable 引脚电压至少保持 tHVRST ,以保证 Prog_enable 信号锁存。 5. 锁存Prog_enable信号后,芯片将从Prog_enable[2]/SDO引脚输出数据,而因此导 致 的 驱 动 争 用 将 会 增 加 功 耗。为 最 小 化 驱 动 争 用,在 tHVRST 后释放 Prog_enable[2] 。 6. 至少在 50 µs 后,再在 SDI/SII 上使用串行指令。 Table 54. 高电压复位特性 RESET 引脚 高电压阈值 锁存 Prog_enable 的最小高电压 周期 VCC VHVRST tHVRST 4.5V 11.5V 100 ns 5.5V 11.5V 100 ns 提供电压 有效编程的几点考虑 芯片擦除 在编程过程中,载入的命令与地址还保存在芯片中,为使编程有效,应只有以下几点: • 当对复用存储器地址写入或读取时,命令只需载入一次。 • 当数据值为0xFF时可不必写入,因为整个EEPROM (除非EESAVE熔丝位已编程) 与 Flash 在芯片擦除后的值为 0xFF。 • 只有在 Flash 出现 256 字窗口或 EEPROM 有 256 字节时才需载入地址高字节。对信号 字节的读取也一样。 芯片擦除将擦去 Flash 与 EEPROM(1) 内容及锁定位。直到程序存储器完全擦除后锁定位 才会复位。熔丝位不会改变。芯片擦除必须在 Flash 与 / 或 EEPROM 重新编程前执行。 Note: 1. 若 EESAVE 熔丝位已编程, EEPROM 存储器在芯片擦除期间保存。 1. 载入命令 “ 芯片擦除 ” ( 见 Table 55)。 2. Instr. 3 后等待,直到 SDO 变高。 3. 载入命令 “ 无操作 ”。 106 ATtiny13 2535D–AVR–04/04 ATtiny13 Flash 编程 Flash 按页组织,见 P103Table 50。当对 Flash 编程,编程数据存入页缓冲器。这样可实现 一页数据同时编程。下面给出对整个 Flash 编程的步骤: 1. 载入命令 “ 写 Flash” ( 见 Table 55)。 2. 载入 Flash 页缓冲器。 3. 载入 Flash 高地址与编程页。 Instr. 3 后等待,直到 SDO 变高。 4. 重复步骤 2 到 3,直到对整个 Flash 编程或所有数据已编程。 5. 通过载入命令 “ 无操作 ” 结束页编程。 ATtiny13 中串行数据的写入或读出,是在串行时钟的上升沿进行,见 Figure 58、 Figure 59 及 Table 56。 Figure 57. 对按页组织的 Flash 寻址 PCMSB PROGRAM COUNTER PAGEMSB PCPAGE PCWORD PAGE ADDRESS WITHIN THE FLASH WORD ADDRESS WITHIN A PAGE PROGRAM MEMORY PAGE PAGE PCWORD[PAGEMSB:0]: 00 INSTRUCTION WORD 01 02 PAGEEND Figure 58. 高电压串行编程波形 SDI PB0 MSB LSB SII PB1 MSB LSB SDO PB2 SCI PB3 MSB 0 LSB 1 2 3 4 5 6 7 8 9 10 107 2535D–AVR–04/04 EEPROM 编程 EEPROM 按页组织,见 P104Table 51。当对 EEPROM 编程,编程数据存入页缓冲器。这 样可实现一页数据同时编程。下面给出对整个 EEPROM 编程的步骤 ( 参见 Table 55): 1. 载入命令 “ 写 EEPROM” 2. 载入 EEPROM 页缓冲器 3. 载入 EEPROM 高地址与编程页。 Instr. 2 后等待,直到 SDO 变高。 4. 重复步骤 2 到 3,直到对整个 EEPROM 编程或所有数据已编程。 5. 通过载入命令 “ 无操作 ” 结束页编程。 读取 Flash 读取 Flash 存储器步骤如下 ( 参见 Table 55): 1. 载入命令 " 读取 Flash"。 2. 读 Flash 低、高字节。所选地址内容在串行输出 SDO 有效。 读取 EEPROM 读取 EEPROM 存储器步骤如下 ( 参见 Table 55): 1. 载入命令 " 读取 EEPROM"。 2. 读 EEPROM 字节。所选地址内容在串行输出 SDO 有效。 对熔丝与锁定位编程与读取 对熔丝位低 / 高位及锁定位的编程与读取见 Table 55。 读取标识字节与标定字节 对标识字节与标定字节的读取见 Table 55。 掉电顺序 设置 SCI 为 “0”。设置 RESET 为 “1”。关闭 VCC 。 108 ATtiny13 2535D–AVR–04/04 ATtiny13 Table 55. ATtiny13 高电压串行编程指令集 指令格式 指令 Chip Erase Load “Write Flash” Command Load Flash Page Buffer Instr.1/5 Instr.2/6 Instr.3 SDI 0_1000_0000_00 0_0000_0000_00 0_0000_0000_00 SII 0_0100_1100_00 0_0110_0100_00 0_0110_1100_00 SDO x_xxxx_xxxx_xx x_xxxx_xxxx_xx x_xxxx_xxxx_xx SDI 0_0001_0000_00 SII 0_0100_1100_00 SDO x_xxxx_xxxx_xx SDI 0_ bbbb_bbbb _00 0_eeee_eeee_00 0_dddd_dddd_00 0_0000_0000_00 SII 0_0000_1100_00 0_0010_1100_00 0_0011_1100_00 0_0111_1101_00 SDO x_xxxx_xxxx_xx x_xxxx_xxxx_xx x_xxxx_xxxx_xx x_xxxx_xxxx_xx SDI 0_0000_0000_00 SII 0_0111_1100_00 SDO x_xxxx_xxxx_xx Load Flash High SDI Address and SII Program Page SDO Load “Read Flash” Command Load EEPROM Page Buffer Program EEPROM Page Write EEPROM Byte Load “Read EEPROM” Command 操作说明 Instr. 3 后等待,直到 SDO 变高 进入 Flash 编程码 重复 Instr. 1 - 5 直到填满整个页缓 冲器或填完所有数据,见 Note 1。 Instr 5. 0_0000_000a_00 0_0000_0000_00 0_0000_0000_00 0_0001_1100_00 0_0110_0100_00 0_0110_1100_00 x_xxxx_xxxx_xx x_xxxx_xxxx_xx x_xxxx_xxxx_xx Instr. 3 后等待,直到 SDO 变高。在 载入 Flash 页时重复 Instr. 2 - 3,直 到整个 Flash 或所有数据已编程。 对新的 256 字节,重复 Instr. 1,见 Note 1。 SDI 0_0000_0010_00 SII 0_0100_1100_00 SDO x_xxxx_xxxx_xx SDI 0_bbbb_bbbb_00 0_0000_000a_00 0_0000_0000_00 0_0000_0000_00 SII 0_0000_1100_00 0_0001_1100_00 0_0110_1000_00 0_0110_1100_00 x_xxxx_xxxx_xx x_xxxx_xxxx_xx x_xxxx_xxxx_xx q_qqqq_qqqx_xx 0_0000_0000_00 0_0000_0000_00 Read Flash Low SDO and High Bytes SDI Load “Write EEPROM” Command Instr.4 进入 Flash 读取模式 SII 0_0111_1000_00 0_0111_1100_00 SDO x_xxxx_xxxx_xx p_pppp_pppx_xx SDI 0_0001_0001_00 SII 0_0100_1100_00 SDO x_xxxx_xxxx_xx SDI 0_00bb_bbbb_00 0_eeee_eeee_00 0_0000_0000_00 0_0000_0000_00 SII 0_0000_1100_00 0_0010_1100_00 0_0110_1101_00 0_0110_1100_00 SDO x_xxxx_xxxx_xx x_xxxx_xxxx_xx x_xxxx_xxxx_xx x_xxxx_xxxx_xx SDI 0_0000_0000_00 0_0000_0000_00 SII 0_0110_0100_00 0_0110_1100_00 SDO x_xxxx_xxxx_xx x_xxxx_xxxx_xx SDI 0_00bb_bbbb_00 0_eeee_eeee_00 0_0000_0000_00 0_0000_0000_00 SII 0_0000_1100_00 0_0010_1100_00 0_0110_1101_00 0_0110_0100_00 SDO x_xxxx_xxxx_xx x_xxxx_xxxx_xx x_xxxx_xxxx_xx x_xxxx_xxxx_xx SDI 0_0000_0000_00 SII 0_0110_1100_00 SDO x_xxxx_xxxx_xx SDI 0_0000_0011_00 SII 0_0100_1100_00 SDO x_xxxx_xxxx_xx 每个新地址重复 Instr. 1, 3 - 6, 对 新的 256 字节,重复 Instr. 2 。 Instr 5 - 6. 进入 EEPROM 编程模式 重复 Instr. 1 - 4 直到填满整个页缓 冲器或填完所有数据,见 Note 2。 Instr. 2 后等待,直到 SDO 变高。每 次载入 EEPROM 页重复 Instr. 1 - 2 直到整个 EEPROM 或所有数据编 程。 对每个新地址重复 Instr. 1 - 5。 Instr. 5 后等待,直到 SDO 变高,见 Note 3。 Instr. 5 进入 EEPROM 读取模式 109 2535D–AVR–04/04 Table 55. ATtiny13 高电压串行编程指令集 (Continued) 指令格式 指令 Read EEPROM Byte Write Fuse Low Bits Instr.1/5 Instr.2/6 Instr.3 Instr.4 SDI 0_bbbb_bbbb_00 0_aaaa_aaaa_00 0_0000_0000_00 0_0000_0000_00 SII 0_0000_1100_00 0_0001_1100_00 0_0110_1000_00 0_0110_1100_00 SDO x_xxxx_xxxx_xx x_xxxx_xxxx_xx x_xxxx_xxxx_xx q_qqqq_qqq0_00 SDI 0_0100_0100_00 0_A987_6543_00 0_0000_0000_00 0_0000_0000_00 SII 0_0100_1100_00 0_0010_1100_00 0_0110_0100_00 0_0110_1100_00 SDO x_xxxx_xxxx_xx x_xxxx_xxxx_xx x_xxxx_xxxx_xx x_xxxx_xxxx_xx 0_0100_0000_00 0_000F_EDCB_00 0_0000_0000_00 0_0000_0000_00 0_0100_1100_00 0_0010_1100_00 0_0111_0100_00 0_0111_1100_00 x_xxxx_xxxx_xx x_xxxx_xxxx_xx x_xxxx_xxxx_xx x_xxxx_xxxx_xx SDI 0_0010_0000_00 0_0000_0021_00 0_0000_0000_00 0_0000_0000_00 SII 0_0100_1100_00 0_0010_1100_00 0_0110_0100_00 0_0110_1100_00 SDO x_xxxx_xxxx_xx x_xxxx_xxxx_xx x_xxxx_xxxx_xx x_xxxx_xxxx_xx SDI 0_0000_0100_00 0_0000_0000_00 0_0000_0000_00 SII 0_0100_1100_00 0_0110_1000_00 0_0110_1100_00 SDO x_xxxx_xxxx_xx x_xxxx_xxxx_xx A_9876_543x_xx 0_0000_0100_00 0_0000_0000_00 0_0000_0000_00 0_0100_1100_00 0_0111_1010_00 0_0111_1110_00 x_xxxx_xxxx_xx x_xxxx_xxxx_xx x_xxFE_DCBx_xx SDI 0_0000_0100_00 0_0000_0000_00 0_0000_0000_00 SII 0_0100_1100_00 0_0111_1000_00 0_0111_1100_00 SDO x_xxxx_xxxx_xx x_xxxx_xxxx_xx x_xxxx_x21x_xx SDI 0_0000_1000_00 0_0000_00bb_00 0_0000_0000_00 SII 0_0100_1100_00 0_0000_1100_00 0_0110_1000_00 0_0110_1100_00 SDO x_xxxx_xxxx_xx x_xxxx_xxxx_xx x_xxxx_xxxx_xx q_qqqq_qqqx_xx 0_0000_1000_00 0_0000_0000_00 0_0000_0000_00 0_0000_0000_00 0_0100_1100_00 0_0000_1100_00 0_0111_1000_00 0_0111_1100_00 x_xxxx_xxxx_xx x_xxxx_xxxx_xx x_xxxx_xxxx_xx p_pppp_pppx_xx SDI Write Fuse High SII Bits SDO Write Lock Bits Read Fuse Low Bits SDI Read Fuse High SII Bits SDO Read Lock Bits Read Signature Bytes SDI Read SII Calibration Byte SDO Load “No Operation” Command SDI 0_0000_0000_00 SII 0_0100_1100_00 SDO x_xxxx_xxxx_xx 操作说明 对每个新地址重复 Instr. 1, 3 - 4 。 对新的 256 字节页重复 Instr. 2。 Instr. 4 后等待,直到 SDO 变高。写 A - 3 = “0” 对熔丝位编程。 Instr. 4 后等待,直到 SDO 变高。写 F - B = “0” 对熔丝位编程。 Instr. 4 后等待,直到 SDO 变高。写 2 - 1 = “0” 对锁定位编程 读取 A - 3 = “0” 表示熔丝位已编程 读取 F - B = “0” 表示熔丝位已编程 读取 2, 1 = “0” 表示锁定位已编程 0_0000_0000_00 每个表示字节地址,重复 Instr 2 4 Note: a = 地址高字节, b = 地址低字节, d = 数据高位, e = 数据低位,p = 数据输出高位, q = 数据输出低位 x = 任意值,1 = 锁定位 1,2 = 锁定位 2,3 = CKSEL0 熔丝位,4 = CKSEL1 熔丝位,5 = SUT0 熔丝位,6 = SUT1 熔丝位,7 = CKDIV8 熔丝位,8 = WDTON 熔丝位,9 = EESAVE 熔丝位,A = SPIEN 熔丝位,B = RSTDISBL 熔丝位,C = BODLEVEL0 熔丝位, D= BODLEVEL1 熔丝位, E = MONEN 熔丝位, F = SELFPRGEN 熔丝位, Notes: 1. 页尺寸低于 256 字,部分地址 (bbbb_bbbb) 将作为页地址。 2. 页尺寸低于 256 字节,部分地址 (bbbb_bbbb) 将作为页地址。 3. EEPROM 以页方式写入。但只有将字节载入页,才能真正写入 EEPROM。当多字节写入同一页时,页方式 EEPROM 访问效 率更高 。注意 EEPROM 的自动擦除在高电压串行编程中无效。 110 ATtiny13 2535D–AVR–04/04 ATtiny13 高电压串行编程特性 Figure 59. 高电压串行编程时序 CC CK Table 56. 高电压串行编程特性 VCC = 5.0V ± 10% ( 无特殊说明 ) 符号 参数 r 最 小 值 tSHSL SCI (PB3) 脉宽高 110 ns tSLSH SCI (PB3) 脉宽低 110 ns tIVSH SDI (PB0)、 SII (PB1) 有效到 SCI (PB3) 高 50 ns tSHIX SCI (PB3) 高后 SDI (PB0)、 SII (PB1) 保持 50 ns tSHOV SCI (PB3) 高到 SDO (PB2) 有效 16 ns Instr. 3 后等待写熔丝位 2.5 ms tWLWH_PFB 典 型 值 最大 值 单位 111 2535D–AVR–04/04 电气特性 绝对极限值 * 工作温度 ........................................................ -55°C 到 +125°C *NOTICE: 存储温度 ........................................................ -65°C 到 +150°C 各个引脚对地的电压,除了 RESET............ -0.5V 到 VCC+0.5V RESET 引脚对地的电压.................................. -0.5V 到 +13.0V 如果强制芯片在超出 “ 绝对极限值” 表中所列的 条件之下工作可能造成器件的永久损坏。这仅是 工作应力的极限。并不表示器件可以工作于表中 所列条件之下,或是那些超越工作范围明确规定 的其他条件之下。长时间工作于绝对极限值可能 会影响器件的寿命。 最大工作电压 .................................................................... 6.0V 每个 I/O 引脚的 DC 电流 ............................................. 40.0 mA VCC 与 GND 引脚的 DC 电流.................................... 200.0 mA 直流特性 TA = -40°C -85°C, VCC = 1.8V -5.5V ( 如无特别说明 )(1) 符号 参数 条件 VIL 输入低电压 VIH 输入高电压 VIH2 输入高电压 最大值 单位 -0.5 0.2VCC V 除 RESET 引脚 0.6VCC(3) VCC +0.5 V RESET 引脚 0.9VCC(3) VCC +0.5 V VOL 输出低电压 (PB5、 PB1 与 PB0) IOL = 20 mA, VCC = 5V IOL = 10 mA, VCC = 3V 0.7 0.5 V V VOL1 输出低电压 (4) (PB4、 PB3 与 PB2) IOL = 10 mA, VCC = 5V IOL = 5 mA, VCC = 3V 0.7 0.5 V V VOH 输出高电压 (5) (PB5、 PB1 与 PB0) IOH = -20 mA, VCC = 5V IOH = -10 mA, VCC = 3V 4.2 2.5 V V VOH1 输出高电压 (5) (PB4、 PB3 与 PB2) IOH = -10 mA, VCC = 5V IOH = -5 mA, VCC = 3V 4.2 2.5 V V IIL 输入漏电流, I/O 引脚 Vcc = 5.5V, 引脚低 ( 绝对值 ) 1 µA IIH 输入漏电流, I/O 引脚 Vcc = 5.5V, 引脚高 ( 绝对值 ) 1 µA RRST Reset 引脚上拉电阻 30 80 kΩ Rpu I/O 引脚上拉电阻 20 50 kΩ 正常 1MHz, VCC = 2V 0.55 mA 正常 4MHz, VCC = 3V 3.5 mA 正常 8MHz, VCC = 5V 12 mA (4) 电源电流 ICC 掉电模式 112 最小值 典型值 空闲 1MHz, VCC = 2V 0.08 0.25 mA 空闲 4MHz, VCC = 3V 0.41 1.5 mA 空闲 8MHz, VCC = 5V 1.6 5.5 mA WDT 使能 , VCC = 3V <5 16 µA WDT 使能 , VCC = 3V < 0.5 1 µA ATtiny13 2535D–AVR–04/04 ATtiny13 Notes: 1. 本手册中所有的直流特性数据与其它 AVR 微控制器手册一样,均是基于仿真的,这些值仅是设计目标,实际值在对实际芯片 的测试后会更新。 2. “ 最大值” 表示保证引脚读取数值为低时的最高值 3. “ 最小值” 表示保证引脚读取数值为高时的最低值 4. 虽然在稳定状态条件 ( 非瞬态 ) 下每个 I/O 端口都可以吸收比测试条件下更多的电流 ( 对 PB5、PB1:0:20 mA,VCC = 5V ; 10 mA, VCC = 3V。对 PB4:2:10 mA , VCC = 5V ; 5 mA,VCC = 3V) ,但是仍需要遵循以下要求: 1] 所有端口的 IOL 总和不能超过 60 mA。 如果 IOL 超过了测试条件, VOL 可能超过相关指标。不保证引脚可以吸收比列于此处的测试条件更大的电流。 5. 虽然在稳定状态条件 ( 非瞬态 ) 下每个 I/O 端口都可以吸收比测试条件下更多的电流 ( 对 PB5、PB1:0:20 mA,VCC = 5V ; 10 mA, VCC = 3V。对 PB4:2:10 mA , VCC = 5V ; 5 mA,VCC = 3V) ,但是仍需要遵循以下要求:: 1] 所有端口的 IOL 总和不能超过 60 mA。 如果 IOL 超过了测试条件, VOL 可能超过相关指标。不保证引脚可以吸收比列于此处的测试条件更大的电流。 外部时钟驱动波形 Figure 60. 外部时钟驱动波形 V IH1 V IL1 外部时钟驱动 Table 57. 外部时钟驱动 VCC=1.8-5.5V VCC=2.7-5.5V VCC=4.5-5.5V 最小 值 最大值 最小 值 最大值 最小 值 最大值 单位 1 0 9.6 0 16 MHz 符号 参数 1/tCLCL 时钟频率 0 tCLCL 时钟周期 1000 104 62.5 ns tCHCX 高电平时间 400 50 25 ns tCLCX 低电平时间 400 50 25 ns tCLCH 上升时间 2.0 1.6 0.5 µs tCHCL 下降时间 2.0 1.6 0.5 µs ∆tCLCL 时钟周期的变化 2 2 2 % 113 2535D–AVR–04/04 最大速度与 VCC 的关系 最高频率取决于 VCC., 如图 Figure 61 与 Figure 62 所示, 1.8V < VCC < 2.7V 及 2.7V < VCC < 4.5V 时,最高频率与 VCC 为线性关系 Figure 61. ATtiny13V 中最高频率与 VCC 的关系 10 MHz Safe Operating Area 4 MHz 1.8V 2.7V 5.5V Figure 62. ATtiny13 中最高频率与 VCC 的关系 20 MHz 10 MHz Safe Operating Area 2.7V 114 4.5V 5.5V ATtiny13 2535D–AVR–04/04 ATtiny13 ADC 特性-初始参数 Table 58. ADC 特性参数,单端通道。 -40°C - 85°C 符号 参数 分辨率 最小值 (1) 单端转换 最大值 (1) 单位 10 Bits 2 LSB 单端转换 VREF = 4V,VCC = 4V ADC 时钟 = 1 MHz 3 LSB 单端转换 VREF = 4V,VCC = 4V ADC 时钟 = 200 kHz 噪声抑制模式 1.5 LSB 单端转换 VREF = 4V,VCC = 4V ADC 时钟 = 1 MHz 噪声抑制模式 2.5 LSB 整体非线性 (INL) 单端转换 VREF = 4V,VCC = 4V ADC 时钟 = 200 kHz 1 LSB 差分非线性 (DNL) 单端转换 VREF = 4V,VCC = 4V ADC 时钟 = 200 kHz 0.5 LSB 增益误差 单端转换 VREF = 4V,VCC = 4V ADC 时钟 = 200 kHz 2.5 LSB 偏移误差 单端转换 VREF = 4V,VCC = 4V ADC 时钟 = 200 kHz 1.5 LSB 转换时间 连续转换 13 260 µs 时钟频率 50 1000 kHz 输入电压 GND VREF V 输入带宽 VINT 片内参考电压 RAIN 模拟输入阻抗 Notes: 典型值 (1) 单端转换 VREF = 4V,VCC = 4V ADC 时钟 = 200 kHz 绝对精度 ( 包括 INL、 DNL、 量化误差、增益及偏置误差 ) VIN 条件 38.5 1.0 1.1 100 kHz 1.2 V MΩ 1. 值为初始值 115 2535D–AVR–04/04 ATtiny13 典型特征参数 下面的图表给出了器件的典型性能。在产生过程中并不测试这些数据。全部电流测量数据 都是在所有的 I/O 引脚配置为输入且内部上拉电阻使能的条件下测得的。时钟源为外部正 弦波发生器产生的满幅值正弦波。 掉电模式下的功耗与选择的时钟无关。 耗电流与多个因素有关:工作电压、工作频率、 I/O 的负载、 I/O 引脚开关速率、执行的 代码及环境温度。最主要的因素是工作电压和工作频率。 容性负载 I/O 的输出电流可通过公式 CL*VCC*f 进行估算, CL = 负载电容, VCC = 工作电 压, f = I/O 引脚平均开关频率。 器件的特性化是在比测试极限频率更高的频率进行的。但是不保证器件能够正常在高于 订货信息表给出的工作频率。 看门狗使能的掉电模式和看门狗禁止的掉电模式之间的电流差值即为开关看门狗定时器 所需的电流。 工作电流 Figure 63. 工作电流和工作频率 (0.1 - 1.0 MHz) 的关系 ACTIVE SUPPLY CURRENT vs. LOW FREQUENCY 0.1 - 1.0 MHz 1.2 5.5 V 1 5.0 V ICC (mA) 0.8 4.5 V 4.0 V 0.6 3.3 V 2.7 V 0.4 1.8 V 0.2 0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Frequency (MHz) 116 ATtiny13 2535D–AVR–04/04 ATtiny13 Figure 64. 工作电流和工作频率 (1 - 24 MHz) 的关系 ACTIVE SUPPLY CURRENT vs. FREQUENCY 1 - 24 MHz ICC (mA) 18 16 5.5V 14 5.0V 12 4.5V 10 4.0V 8 6 3.3V 4 2.7V 2 1.8V 0 0 2 4 6 8 10 12 14 16 18 20 22 24 Frequency (MHz) Figure 65. 工作电流和 VCC 的关系 ( 内部 RC 振荡器, 9.6MHz) ACTIVE SUPPLY CURRENT vs. VCC INTERNAL RC OSCILLATOR, 9.6 MHz 8 85 °C -40 °C 7 6 25 °C ICC (mA) 5 4 3 2 1 0 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VCC (V) 117 2535D–AVR–04/04 Figure 66. 工作电流和 VCC 的关系 ( 内部 RC 振荡器, 4.8 MHz) ACTIVE SUPPLY CURRENT vs. VCC INTERNAL RC OSCILLATOR, 4.8 MHz 4.5 25 °C -40 °C 85 °C 4 3.5 ICC (mA) 3 2.5 2 1.5 1 0.5 0 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VCC (V) Figure 67. 工作电流和 VCC 的关系 ( 内部 WDT 振荡器, 128 kHz) ACTIVE SUPPLY CURRENT vs. V CC INTERNAL WD OSCILLATOR, 128 KHz 0.14 -40 °C 25 °C 85 °C 0.12 ICC (mA) 0.1 0.08 0.06 0.04 0.02 0 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VCC (V) 118 ATtiny13 2535D–AVR–04/04 ATtiny13 Figure 68. 工作电流和 VCC 的关系 (32 kHz 外部时钟 ) ACTIVE SUPPLY CURRENT vs. V CC 32 kHz EXTERNAL CLOCK 0.04 25 °C 0.035 85 °C 0.03 ICC (mA) 0.025 0.02 0.015 0.01 0.005 0 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VCC (V) 空闲模式电流 Figure 69. 空闲模式电流和工作频率 (0.1 - 1.0 MHz) 的关系 IDLE SUPPLY CURRENT vs. LOW FREQUENCY (0.1 - 1.0 MHz) ICC (mA) 0.9 0.8 5.5 V 0.7 5.0 V 0.6 4.5 V 0.5 4.0 V 0.4 3.3 V 0.3 2.7 V 0.2 1.8 V 0.1 0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Frequency (MHz) 119 2535D–AVR–04/04 Figure 70. 空闲模式电流和工作频率 (1 - 24 MHz) 的关系 IDLE SUPPLY CURRENT vs. FREQUENCY 1 - 24 MHz 12 5.5V 5.0V 10 4.5V ICC (mA) 8 6 4.0V 4 3.3V 2.7V 2 1.8V 0 0 2 4 6 8 10 12 14 16 18 20 22 24 Frequency (MHz) Figure 71. 空闲模式电流和 VCC 的关系 ( 内部 RC 振荡器 , 9.6 MHz) IDLE SUPPLY CURRENT vs. VCC INTERNAL RC OSCILLATOR, 9.6 MHz 2.5 85 °C 25 °C -40 °C ICC (mA) 2 1.5 1 0.5 0 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VCC (V) 120 ATtiny13 2535D–AVR–04/04 ATtiny13 Figure 72. 空闲模式电流和 VCC 的关系 ( 内部 RC 振荡器 , 4.8 MHz) IDLE SUPPLY CURRENT vs. VCC INTERNAL RC OSCILLATOR, 4.8 MHz 1.2 85 °C 25 °C -40 °C 1 ICC (mA) 0.8 0.6 0.4 0.2 0 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VCC (V) Figure 73. 空闲模式电流和 VCC 的关系 ( 内部 RC 振荡器 , 128 kHz) IDLE SUPPLY CURRENT vs. VCC INTERNAL WD OSCILLATOR, 128 KHz 0.035 -40 °C 25 °C 85 °C 0.03 ICC (mA) 0.025 0.02 0.015 0.01 0.005 0 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VCC (V) 121 2535D–AVR–04/04 Figure 74. 空闲模式电流和 VCC 的关系 (32 kHz 外部时钟 ) IDLE SUPPLY CURRENT vs. VCC 32kHz EXTERNAL CLOCK 10 9 85 °C 8 25 °C -40 °C ICC (uA) 7 6 5 4 3 2 1 0 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VCC (V) 掉电模式电流 Figure 75. 掉电模式电流和 VCC 的关系 ( 看门狗定时器禁用 ) POWER-DOWN SUPPLY CURRENT vs. VCC WATCHDOG TIMER DISABLED 1.8 1.6 85 ˚C 1.4 ICC (uA) 1.2 1 0.8 -40 ˚C 25 ˚C 0.6 0.4 0.2 0 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VCC (V) 122 ATtiny13 2535D–AVR–04/04 ATtiny13 Figure 76. 掉电模式电流和 VCC 的关系 ( 看门狗定时器使能 ) POWER-DOWN SUPPLY CURRENT vs. VCC WATCHDOG TIMER ENABLED 10 -40 ˚C 85 ˚C 25 ˚C 9 8 ICC (uA) 7 6 5 4 3 2 1 0 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VCC (V) 引脚上拉 Figure 77. I/O 引脚上拉电阻电流和输入电压的关系 (VCC = 5V) I/O PIN PULL-UP RESISTOR CURRENT vs. INPUT VOLTAGE VCC = 5V 160 140 25 ˚C 85 ˚C 120 -40 ˚C IOP (uA) 100 80 60 40 20 0 0 1 2 3 4 5 6 VOP (V) 123 2535D–AVR–04/04 Figure 78. I/O 引脚上拉电阻电流和输入电压的关系 (VCC = 2.7V) I/O PIN PULL-UP RESISTOR CURRENT vs. INPUT VOLTAGE VCC = 2.7 80 25 ˚C 85 ºC 70 60 -40 ˚C IOP (uA) 50 40 30 20 10 0 0 0.5 1 1.5 2 2.5 3 VOP (V) Figure 79. 复位 (Reset) 引脚上拉电阻电流和 Reset 引脚电压的关系 (VCC = 5V) RESET PULL-UP RESISTOR CURRENT vs. RESET PIN VOLTAGE VCC = 5V 120 -40 ˚C 25 ˚C 100 85 ˚C IRESET (uA) 80 60 40 20 0 0 1 2 3 4 5 VRESET (V) 124 ATtiny13 2535D–AVR–04/04 ATtiny13 Figure 80. 复位 (Reset) 引脚上拉电阻电流和 Reset 引脚电压的关系 (VCC = 2.7V) RESET PULL-UP RESISTOR CURRENT vs. RESET PIN VOLTAGE VCC = 2.7V 60 25 ˚C -40 ˚C 50 85 ˚C IRESET (uA) 40 30 20 10 0 0 0.5 1 1.5 2 2.5 3 VRESET (V) 驱动能力 Figure 81. I/O 引脚源电流和输出电压的关系 ( 低功端口, VCC = 5V) I/O PIN SOURCE CURRENT vs. OUTPUT VOLTAGE LOW POWER PORTS, VCC = 5V 70 -40 ˚C 60 25 ˚C 50 IOH (mA) 85 ˚C 40 30 20 10 0 0 1 2 3 4 5 6 VOH (V) 125 2535D–AVR–04/04 Figure 82. I/O 引脚源电流和输出电压的关系 ( 低功端口, VCC = 2.7V) I/O PIN SOURCE CURRENT vs. OUTPUT VOLTAGE LOW POWER PORTS, VCC = 2.7V 25 -40 °C IOH (mA) 20 25 °C 85 °C 15 10 5 0 0 0.5 1 1.5 2 2.5 3 VOH (V) Figure 83. I/O 引脚源电流和输出电压的关系 ( 低功端口, VCC = 1.8V) I/O PIN SOURCE CURRENT vs. OUTPUT VOLTAGE LOW POWER PORTS, VCC = 1.8V 7 -40 ˚C 25 ˚C 6 85 ˚C IOH (mA) 5 4 3 2 1 0 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 VOH (V) 126 ATtiny13 2535D–AVR–04/04 ATtiny13 Figure 84. I/O 引脚吸收电流和输出电压的关系 ( 低功端口, VCC = 5V) I/O PIN SINK CURRENT vs. OUTPUT VOLTAGE LOW POWER PORTS, VCC = 5V 50 45 -40 ˚C 40 25 ˚C IOL (mA) 35 85 ˚C 30 25 20 15 10 5 0 0 0.5 1 1.5 2 2.5 VOL (V) Figure 85. I/O 引脚吸收电流和输出电压的关系 ( 低功端口, VCC = 2.7V) I/O PIN SINK CURRENT vs. OUTPUT VOLTAGE Low Power Ports, VCC = 2.7V 20 18 -40 ˚C 16 25 ˚C IOL (mA) 14 85 ˚C 12 10 8 6 4 2 0 0 0.5 1 1.5 2 2.5 VOL (V) 127 2535D–AVR–04/04 Figure 86. I/O 引脚吸收电流和输出电压的关系 ( 低功端口, VCC = 1.8V) I/O PIN SINK CURRENT vs. OUTPUT VOLTAGE LOW POWER PORTS, 1.8V 7 6 -40 ˚C IOL (mA) 5 25 ˚C 85 ˚C 4 3 2 1 0 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 VOL (V) Figure 87. I/O 引脚源电流和输出电压的关系 (VCC = 5V) I/O PIN SOURCE CURRENT vs. OUTPUT VOLTAGE VCC = 5V 90 80 -40 ˚C 70 25 ˚C 85 ˚C IOH (mA) 60 50 40 30 20 10 0 2 3 4 5 6 VOH (V) 128 ATtiny13 2535D–AVR–04/04 ATtiny13 Figure 88. I/O 引脚源电流和输出电压的关系 (VCC = 2.7V) I/O PIN SOURCE CURRENT vs. OUTPUT VOLTAGE VCC = 2.7V 35 30 -40 ˚C 25 ˚C 25 IOH (mA) 85 ˚C 20 15 10 5 0 0 0.5 1 1.5 2 2.5 3 VOH (V) Figure 89. I/O 引脚源电流和输出电压的关系 (VCC = 1.8V) I/O PIN SOURCE CURRENT vs. OUTPUT VOLTAGE VCC = 1.8V 10 -40 ˚C 9 25 ˚C 8 85 ˚C IOH (mA) 7 6 5 4 3 2 1 0 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 VOH (V) 129 2535D–AVR–04/04 Figure 90. I/O 引脚吸收电流和输出电压的关系 (VCC = 5V) I/O PIN SINK CURRENT vs. OUTPUT VOLTAGE VCC = 5V 100 90 -40 ˚C 80 25 ˚C IOL (mA) 70 85 ˚C 60 50 40 30 20 10 0 0 0.5 1 1.5 2 2.5 VOL (V) Figure 91. I/O 引脚吸收电流和输出电压的关系 (VCC = 2.7V) I/O PIN SINK CURRENT vs. OUTPUT VOLTAGE VCC = 2.7V 40 35 -40 ˚C 30 25 ˚C IOL (mA) 25 85 ˚C 20 15 10 5 0 0 0.5 1 1.5 2 2.5 VOL (V) 130 ATtiny13 2535D–AVR–04/04 ATtiny13 Figure 92. I/O 引脚吸收电流和输出电压的关系 (VCC = 1.8V) I/O PIN SINK CURRENT vs. OUTPUT VOLTAGE VCC = 1.8V 14 12 -40 ˚C IOL (mA) 10 25 ˚C 85 ˚C 8 6 4 2 0 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 VOL (V) Figure 93. Reset 引脚作为 I/O – 源电流和输出电压的关系 (VCC = 5V) RESET PIN AS I/O - SOURCE CURRENT vs. OUTPUT VOLTAGE VCC = 5V 1.6 1.4 -40 ˚C 1.2 25 ˚C IOH (mA) 1 85 ˚C 0.8 0.6 0.4 0.2 0 2 3 4 5 VOH (V) 131 2535D–AVR–04/04 Figure 94. Reset 引脚作为 I/O – 源电流和输出电压的关系 (VCC = 2.7V) RESET PIN AS I/O - SOURCE CURRENT vs. OUTPUT VOLTAGE VCC = 2.7V 2.5 -40 ˚C 2 IOH (mA) 25 ˚C 85 ˚C 1.5 1 0.5 0 0 0.5 1 1.5 2 2.5 3 VOH (V) Figure 95. Reset 引脚作为 I/O – 源电流和输出电压的关系 (VCC = 1.8V) RESET PIN AS I/O - SOURCE CURRENT vs. OUTPUT VOLTAGE VCC = 1.8V 2.5 -40 °C 2 IOH (mA) 25 °C 1.5 1 85 °C 0.5 0 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 VOH (V) 132 ATtiny13 2535D–AVR–04/04 ATtiny13 Figure 96. Reset 引脚作为 I/O – 吸收电流和输出电压的关系 (VCC = 5V) RESET PIN AS I/O - SINK CURRENT vs. OUTPUT VOLTAGE VCC = 5V 14 -40 ˚C 12 25 ˚C IOL (mA) 10 85 ˚C 8 6 4 2 0 0 0.5 1 1.5 2 2.5 VOL (V) Figure 97. Reset 引脚作为 I/O – 吸收电流和输出电压的关系 (VCC = 2.7V) RESET PIN AS I/O - SINK CURRENT vs. OUTPUT VOLTAGE VCC = 2.7V 4.5 -40 ˚C 4 3.5 25 ˚C IOL (mA) 3 85 ˚C 2.5 2 1.5 1 0.5 0 0 0.5 1 1.5 2 2.5 VOL (V) 133 2535D–AVR–04/04 Figure 98. Reset 引脚作为 I/O – 吸收电流和输出电压的关系 (VCC = 1.8V) RESET PIN AS I/O - SINK CURRENT vs. OUTPUT VOLTAGE VCC = 1.8V 1.6 1.4 -40 ˚C 1.2 25 ˚C IOL (mA) 1 85 ˚C 0.8 0.6 0.4 0.2 0 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 VOL (V) 引脚门限及滞后 Figure 99. I/O 引脚输入门限电压和 VCC 的关系 (VIH, I/O 引脚读出值为 '1') I/O PIN INPUT THRESHOLD VOLTAGE vs. VCC VIH, IO PIN READ AS '1' 3 85 ˚C 25 ˚C 2.5 -40 ˚C Threshold (V) 2 1.5 1 0.5 0 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VCC (V) 134 ATtiny13 2535D–AVR–04/04 ATtiny13 Figure 100. I/O 引脚输入门限电压和 VCC 的关系 (VIL, I/O 引脚读出值为 '0') I/O PIN INPUT THRESHOLD VOLTAGE vs. VCC VIL, IO PIN READ AS '0' 3 85 ˚C 25 ˚C -40 ˚C 2.5 Threshold (V) 2 1.5 1 0.5 0 1.5 2 2.5 3 3.5 4 4.5 5 5.5 5 5.5 VCC (V) Figure 101. I/O 引脚输入迟滞和 VCC 的关系 I/O PIN INPUT HYSTERESIS vs. VCC 0.45 0.4 -40 ºC Input Hysteresis (V) 0.35 0.3 25 ºC 0.25 0.2 85 ºC 0.15 0.1 0.05 0 1.5 2 2.5 3 3.5 4 4.5 VCC (V) 135 2535D–AVR–04/04 Figure 102. Reset 作为普通 I/O 输入门限电压和 VCC 的关系 (VIH,Reset 引脚读出值为 '1') RESET PIN AS I/O - THRESHOLD VOLTAGE vs. VCC VIH, IO PIN READ AS '1' 3 2.5 Threshold (V) 2 -40 ˚C 1.5 25 ˚C 1 85 ˚C 0.5 0 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VCC (V) Figure 103. Reset 作为普通 I/O 输入门限电压和 VCC 的关系 (VIL,Reset 引脚读出值为 '0') RESET PIN AS I/O - THRESHOLD VOLTAGE vs. VCC VIL, IO PIN READ AS '0' 2.5 Threshold (V) 2 1.5 85 ˚C 1 25 ˚C 0.5 -40 ˚C 0 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VCC (V) 136 ATtiny13 2535D–AVR–04/04 ATtiny13 Figure 104. Reset 输入迟滞和 VCC 的关系 RESET PIN AS IO - PIN HYSTERESIS vs. VCC 0.7 0.6 -40 ºC Input Hysteresis (V) 0.5 25 ºC 0.4 85 ºC 0.3 0.2 0.1 0 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VCC (V) Figure 105. Reset 输入门限电压和 VCC 的关系 (VIH,Reset 引脚读出值为 '1') RESET INPUT THRESHOLD VOLTAGE vs. VCC VIH, IO PIN READ AS '1' 2.5 Threshold (V) 2 1.5 -40 ˚C 1 85 ˚C 25 ˚C 0.5 0 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VCC (V) 137 2535D–AVR–04/04 Figure 106. Reset 输入门限电压和 VCC 的关系 (VIL,Reset 引脚读出值为 '0') RESET INPUT THRESHOLD VOLTAGE vs. VCC VIL, IO PIN READ AS '0' 2.5 Threshold (V) 2 1.5 1 0.5 85 ˚C 25 ˚C -40 ˚C 0 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VCC (V) Figure 107. Reset 输入迟滞和 VCC 的关系 RESET INPUT THRESHOLD VOLTAGE vs. VCC VIL, IO PIN READ AS '0' 0.5 -40 ºC Threshold (V) 0.4 0.3 85 ºC 0.2 25 ºC 0.1 0 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VCC (V) 138 ATtiny13 2535D–AVR–04/04 ATtiny13 BOD 门限值与模拟比较器偏移 量 Figure 108. BOD 门限值和温度的关系 (BOD 电平为 4.3V) BOD THRESHOLDS vs. TEMPERATURE BODLEVEL IS 4.3V 4.5 Rising VCC Threshold (V) 4.4 4.3 Falling VCC 4.2 -60 -40 -20 0 20 40 60 80 100 80 100 Temperature (C) Figure 109. BOD 门限值和温度的关系 (BOD 电平为 2.7V) BOD THRESHOLDS vs. TEMPERATURE BODLEVEL IS 2.7V 2.9 Rising V CC Threshold (V) 2.8 2.7 Falling V CC 2.6 -60 -40 -20 0 20 40 60 Temperature (C) 139 2535D–AVR–04/04 Figure 110. BOD 门限值和温度的关系 (BOD 电平为 1.8V) BOD THRESHOLDS vs. TEMPERATURE BODLEVEL IS 1.8V 1.9 Rising V CC Threshold (V) 1.85 1.8 Falling V CC 1.75 -60 -40 -20 0 20 40 60 80 100 Temperature (C) Figure 111. 能隙电压和 VCC 的关系 BANDGAP VOLTAGE vs. VCC 1.06 Bandgap Voltage (V) 1.04 1.02 85ºC 25ºC 1 0.98 -40ºC 0.96 0.94 0.92 1.5 2.5 3.5 4.5 5.5 VCC (V) 140 ATtiny13 2535D–AVR–04/04 ATtiny13 Figure 112. 模拟比较器偏置电压和共模电压的关系 (VCC = 5V) ANALOG COMPARATOR OFFSET vs. COMMON MODE VOLTAGE VCC = 5V 0.008 85 °C 25 °C -40 °C Comparator Offset Voltage (V) 0.007 0.006 0.005 0.004 0.003 0.002 0.001 0 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 Common Mode Voltage (V) Figure 113. 模拟比较器偏置电压和共模电压的关系 (VCC= 2.7V) ANALOG COMPARATOR OFFSET vs. COMMON MODE VOLTAGE VCC = 2.7V 0.003 85 °C Comparator Offset Voltage (V) 0.0025 25 °C 0.002 -40 °C 0.0015 0.001 0.0005 0 0 0.5 1 1.5 2 2.5 3 Common Mode Voltage (V) 141 2535D–AVR–04/04 内部振荡器速度 Figure 114. 标定 9.6MHz RC 振荡器频率与温度的关系 CALIBRATED 9.6 MHz RC OSCILLATOR FREQUENCY vs. TEMPERATURE 10.3 10.1 9.9 FRC (MHz) 9.7 9.5 5.5 V 9.3 4.5 V 9.1 2.7 V 8.9 1.8 V 8.7 8.5 -60 -40 -20 0 20 40 60 80 100 Temperature (C) Figure 115. 标定 9.6MHz RC 振荡器频率与 VCC 的关系 CALIBRATED 9.6 MHz RC OSCILLATOR FREQUENCY vs. VCC 11 10.5 85 ˚C FRC (MHz) 10 25 ˚C 9.5 -40 ˚C 9 8.5 8 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VCC (V) 142 ATtiny13 2535D–AVR–04/04 ATtiny13 Figure 116. 标定 9.6MHz RC 振荡器频率与 Osccal 值的关系 CALIBRATED 9.6MHz RC OSCILLATOR FREQUENCY vs. OSCCAL VALUE 18 25 ˚C 16 FRC (MHz) 14 12 10 8 6 4 2 0 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120 OSCCAL VALUE Figure 117. 标定 4.8 MHz RC 振荡器频率与温度的关系 CALIBRATED 4.8 MHz RC OSCILLATOR FREQUENCY vs. TEMPERATURE 5.1 5 F RC (MHz) 4.9 4.8 1.8 V 4.7 5.5 V 4.0 V 4.6 2.7 V 4.5 -60 -40 -20 0 20 40 60 80 100 Temperature (C) 143 2535D–AVR–04/04 Figure 118. 标定 4.8 MHz RC 振荡器频率与 VCC 的关系 CALIBRATED 4.8 MHz RC OSCILLATOR FREQUENCY vs. VCC 5.2 85 ˚C FRC (MHz) 5 4.8 25 ˚C -40 ˚C 4.6 4.4 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VCC (V) Figure 119. 标定 4.8 MHz RC 振荡器频率与 Osccal 值的关系 CALIBRATED 4.8 MHz RC OSCILLATOR FREQUENCY vs. OSCCAL VALUE 10 25 ˚C 9 8 FRC (MHz) 7 6 5 4 3 2 1 0 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120 127 OSCCAL VALUE 144 ATtiny13 2535D–AVR–04/04 ATtiny13 Figure 120. 128 kHz 看门狗振荡器频率与 VCC 的关系 128 kHz WATCHDOG OSCILLATOR FREQUENCY vs. VCC 120 -40 ˚C FRC (kHz) 115 25 ˚C 110 85 ˚C 105 100 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VCC (V) Figure 121. 128 kHz 看门狗振荡器频率与温度的关系 128 kHz WATCHDOG OSCILLATOR FREQUENCY vs. TEMPERATURE 118 116 114 FRC (kHz) 112 110 1.8 V 108 2.7 V 4.0 V 5.5 V 106 104 102 100 -60 -40 -20 0 20 40 60 80 100 Temperature (C) 145 2535D–AVR–04/04 外设电流 Figure 122. BOD 电流和 VCC 的关系 BROWNOUT DETECTOR CURRENT vs. VCC 35 -40 ˚C 25 ˚C 85 ˚C 30 ICC (uA) 25 20 15 10 5 0 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VCC (V) Figure 123. ADC 电流和 VCC 的关系 ADC CURRENT vs. VCC 350 -40 ˚C 300 25 ˚C ICC (uA) 250 85 ˚C 200 150 100 50 0 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VCC (V) 146 ATtiny13 2535D–AVR–04/04 ATtiny13 Figure 124. 模拟比较器电流和 VCC 的关系 ANALOG COMPARATOR CURRENT vs. VCC 140 ICC (uA) -40 ˚C 120 25 ˚C 100 85 ˚C 80 60 40 20 0 1.5 2 2.5 3 3.5 4 4.5 5 5.5 5 5.5 VCC (V) Figure 125. 编程电流与 VCC 的关系 PROGRAMMING CURRENT vs. Vcc 4 3.5 3 ICC (mA) 2.5 2 1.5 1 -40 °C 25 °C 0.5 85 °C 0 1.5 2 2.5 3 3.5 4 4.5 VCC (V) 147 2535D–AVR–04/04 复位电流消耗及复位脉宽 Figure 126. 复位电流和 VCC 的关系 (0.1 - 1.0 MHz,包括流经复位上拉电阻的电流 ) RESET SUPPLY CURRENT vs. VCC 0.1 - 1.0 MHz, EXCLUDING CURRENT THROUGH THE RESET PULL-UP 0.14 5.5 V 0.12 5.0 V ICC (mA) 0.1 4.5 V 0.08 4.0 V 0.06 3.3 V 2.7 V 0.04 1.8 V 0.02 0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Frequency (MHz) Figure 127. 复位电流和 VCC 的关系 (1 - 24MHz,包括流经复位上拉电阻的电流 ) RESET SUPPLY CURRENT vs. VCC 1 - 24 MHz, EXCLUDING CURRENT THROUGH THE RESET PULL-UP ICC (mA) 3.5 3 5.5V 2.5 5.0V 2 4.5V 1.5 4.0V 1 3.3V 0.5 2.7V 1.8V 0 0 2 4 6 8 10 12 14 16 18 20 22 24 Frequency (MHz) 148 ATtiny13 2535D–AVR–04/04 ATtiny13 Figure 128. 复位脉宽和 VCC 的关系 RESET PULSE WIDTH vs. V CC 2500 Pulsewidth (ns) 2000 1500 1000 500 85 ºC 25 ºC -40 ºC 0 1.8 2.1 2.5 2.7 3 3.3 3.5 4 4.5 5 5.5 6 VCC (V) 149 2535D–AVR–04/04 寄存器概述 150 地址 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 页码 0x3F SREG I T H S V N Z C P6 0x3E 保留 – – – – – – – – 0x3D SPL SP[7:0] 0x3C 保留 – P8 0x3B GIMSK – INT0 PCIE – – – – – P52 0x3A GIFR – INTF0 PCIF – – – – – P52 0x39 TIMSK0 – – – – OCIE0B OCIE0A TOIE0 – P69 0x38 TIFR0 – – – – OCF0B OCF0A TOV0 – P69 0x37 SPMCSR – – – CTPB RFLB PGWRT PGERS SELFPRGEN P94 0x36 OCR0A 0x35 MCUCR SM0 – ISC01 ISC00 P48 T/C – 输出比较寄存器 A – PUD SE SM1 P69 0x34 MCUSR – – – – WDRF BORF EXTRF PORF P33 0x33 TCCR0B FOC0A FOC0B – – WGM02 CS02 CS01 CS00 P65 0x32 TCNT0 T/C0 (8 位 ) P69 0x31 OSCCAL 振荡器标定寄存器 P22 0x30 保留 0x2F TCCR0A 0x2E DWDR DWDR[7:0] 0x2D 保留 – 0x2C 保留 – 0x2B 保留 – 0x2A 保留 – 0x29 OCR0B T/C– 输出比较寄存器 B 0x28 GTCCR – COM0A1 COM0A0 COM0B1 COM0B0 TSM – – – CLKPCE – – – – 0x27 保留 0x26 CLKPR 0x25 保留 – 0x24 保留 – 0x23 保留 – 0x22 保留 0x21 WDTCR 0x20 保留 0x1F 保留 0x1E EEARL 0x1D EEDR 0x1C EECR – WGM01 WGM00 P68 P91 P69 – – – PSR10 P72 CLKPS3 CLKPS2 CLKPS1 CLKPS0 P24 WDE WDP2 WDP1 WDP0 P37 – – WDTIF WDTIE WDP3 WDCE – – – EEPROM 地址寄存器 – P14 EEPROM 数据寄存器 – – EEPM1 EEPM0 P14 EERIE EEMWE EEWE EERE P15 0x1B 保留 – 0x1A 保留 – 0x19 保留 0x18 PORTB – – PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0 P50 0x17 DDRB – – DDB5 DDB4 DDB3 DDB2 DDB1 DDB0 P50 0x16 PINB – – PINB5 PINB4 PINB3 PINB2 PINB1 PINB0 P50 0x15 PCMSK – – PCINT5 PCINT4 PCINT3 PCINT2 PCINT1 PCINT0 P53 0x14 DIDR0 – – ADC0D ADC2D ADC3D ADC1D EIN1D AIN0D P75, P88 0x13 保留 – 0x12 保留 – 0x11 保留 – 0x10 保留 – 0x0F 保留 – 0x0E 保留 – 0x0D 保留 – 0x0C 保留 – 0x0B 保留 – 0x0A 保留 – 0x09 保留 0x08 ACSR ACD ACBG ACO ACI ACIE – ACIS1 ACIS0 P73 0x07 ADMUX – REFS0 ADLAR – – – MUX1 MUX0 P86 0x06 ADCSRA ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0 P86 0x05 ADCH ADC 数据寄存器高字节 0x04 ADCL ADC 数据寄存器低字节 0x03 ADCSRB – – – ACME – – – 0x02 保留 – 0x01 保留 – 0x00 保留 – P87 P87 ADTS2 ADTS1 ADTS0 P88 ATtiny13 2535D–AVR–04/04 ATtiny13 Note: 1. 为了和将来器件兼容,访问保留位时应该写 0。保留的 I/O 地址不可以执行写操作。 2. CBI 和 SBI 指令可使用的范围只能是地址为 0x00 - 0x1F 的寄存器。在这些寄存器中,单独位值由 SBIS 与 SBIC 指令检查。 3. 一些状态标志可以通过写入逻辑 1 来清除。需要注意的是,不同于大多数其他的 AVR,CBI 和 SBI 指令只对一些特殊位有效, 因此可以对那些包含标志位的寄存器进行操作。CBI 和 SBI 指令可使用的范围只能是地址为 0x00 - 0x1F 的寄存器。 151 2535D–AVR–04/04 指令集概述 标志 操作数 说明 操作 ADD Rd, Rr 无进位加法 Rd ← Rd + Rr Z,C,N,V,H ADC Rd, Rr 带进位加法 Rd ← Rd + Rr + C Z,C,N,V,H 1 ADIW Rdl,K 立即数与字相加 Rdh:Rdl ← Rdh:Rdl + K Z,C,N,V,S 2 SUB Rd, Rr 无进位减法 Rd ← Rd - Rr Z,C,N,V,H 1 SUBI Rd, K 减立即数 Rd ← Rd - K Z,C,N,V,H 1 SBC Rd, Rr 带进位减法 Rd ← Rd - Rr - C Z,C,N,V,H 1 SBCI Rd, K 带进位减立即数 Rd ← Rd - K - C Z,C,N,V,H 1 SBIW Rdl,K 从字中减立即数 Rdh:Rdl ← Rdh:Rdl - K Z,C,N,V,S 2 AND Rd, Rr 逻辑与 Rd ← Rd • Rr Z,N,V 1 ANDI Rd, K 与立即数的逻辑与操作 Rd ← Rd • K Z,N,V 1 OR Rd, Rr 逻辑或 Rd ← Rd v Rr Z,N,V 1 指令 # 时钟数 算数和逻辑指令 1 ORI Rd, K 与立即数的逻辑或操作 Rd ← Rd v K Z,N,V 1 EOR Rd, Rr 异或 Rd ← Rd ⊕ Rr Z,N,V 1 COM Rd 1 的补码 Rd ← 0xFF − Rd Z,C,N,V 1 NEG Rd 2 的补码 Rd ← 0x00 − Rd Z,C,N,V,H 1 SBR Rd,K 设置寄存器的位 Rd ← Rd v K Z,N,V 1 CBR Rd,K 寄存器位清零 Rd ← Rd • (0xFF - K) Z,N,V 1 INC Rd 加一操作 Rd ← Rd + 1 Z,N,V 1 DEC Rd 减一操作 Rd ← Rd − 1 Z,N,V 1 TST Rd 测试是否为零或负 Rd ← Rd • Rd Z,N,V 1 CLR Rd 寄存器清零 Rd ← Rd ⊕ Rd Z,N,V 1 SER Rd 寄存器置位 Rd ← 0xFF None 1 跳转指令 相对跳转 PC ← PC + k + 1 None 2 间接跳转到 (Z) PC ← Z None 2 相对子程序调用 PC ← PC + k + 1 None 3 ICALL 间接调用 (Z) PC ← Z None 3 RET 子程序返回 PC ← STACK None 4 RETI 中断返回 PC ← STACK I Rd,Rr 比较,相等则跳过下一条指令 if (Rd = Rr) PC ← PC + 2 or 3 None CP Rd,Rr 比较 Rd − Rr Z, N,V,C,H 1 CPC Rd,Rr 带进位比较 Rd − Rr − C Z, N,V,C,H 1 CPI Rd,K 与立即数比较 Rd − K Z, N,V,C,H SBRC Rr, b 寄存器位为 "0” 则跳过下一条指令 if (Rr(b)=0) PC ← PC + 2 or 3 None RJMP k IJMP RCALL k CPSE 4 1/2/3 1 1/2/3 SBRS Rr, b 寄存器位为 "1” 则跳过下一条指令 if (Rr(b)=1) PC ← PC + 2 or 3 None 1/2/3 SBIC P, b I/O 寄存器位为 "0” 则跳过下一条指令 if (P(b)=0) PC ← PC + 2 or 3 None 1/2/3 SBIS P, b I/O 寄存器位为 "1” 则跳过下一条指令 if (P(b)=1) PC ← PC + 2 or 3 None 1/2/3 BRBS s, k 状态寄存器位为 "1” 则跳过下一条指令 if (SREG(s) = 1) then PC←PC+k + 1 None 1/2 BRBC s, k 状态寄存器位为 "0” 则跳过下一条指令 if (SREG(s) = 0) then PC←PC+k + 1 None 1/2 BREQ k 相等则跳转 if (Z = 1) then PC ← PC + k + 1 None 1/2 BRNE k 不相等则跳转 if (Z = 0) then PC ← PC + k + 1 None 1/2 BRCS k 进位位为 "1” 则跳转 if (C = 1) then PC ← PC + k + 1 None 1/2 BRCC k 进位位为 "0” 则跳转 if (C = 0) then PC ← PC + k + 1 None 1/2 BRSH k 大于或等于则跳转 if (C = 0) then PC ← PC + k + 1 None 1/2 BRLO k 小于则跳转 if (C = 1) then PC ← PC + k + 1 None 1/2 BRMI k 负则跳转 if (N = 1) then PC ← PC + k + 1 None 1/2 BRPL k 正则跳转 if (N = 0) then PC ← PC + k + 1 None 1/2 BRGE k 有符号数大于或等于则跳转 if (N ⊕ V= 0) then PC ← PC + k + 1 None 1/2 BRLT k 有符号数负则跳转 if (N ⊕ V= 1) then PC ← PC + k + 1 None 1/2 BRHS k 半进位位为 "1” 则跳转 if (H = 1) then PC ← PC + k + 1 None 1/2 BRHC k 半进位位为 "0” 则跳转 if (H = 0) then PC ← PC + k + 1 None 1/2 BRTS k T 为 "1” 则跳转 if (T = 1) then PC ← PC + k + 1 None 1/2 BRTC k T 为 "0” 则跳转 if (T = 0) then PC ← PC + k + 1 None 1/2 BRVS k 溢出标志为 "1” 则跳转 if (V = 1) then PC ← PC + k + 1 None 1/2 BRVC k 溢出标志为 "0” 则跳转 if (V = 0) then PC ← PC + k + 1 None 1/2 BRIE k 中断使能则跳转 if ( I = 1) then PC ← PC + k + 1 None 1/2 BRID k 中断禁止则跳转 if ( I = 0) then PC ← PC + k + 1 None 1/2 位和位测试指令 SBI P,b I/O 寄存器位置位 I/O(P,b) ← 1 None 2 CBI P,b I/O 寄存器位清零 I/O(P,b) ← 0 None 2 LSL Rd 逻辑左移 Rd(n+1) ← Rd(n), Rd(0) ← 0 Z,C,N,V 1 LSR Rd 逻辑右移 Rd(n) ← Rd(n+1), Rd(7) ← 0 Z,C,N,V 1 ROL Rd 带进位循环左移 Rd(0)←C,Rd(n+1)← Rd(n),C←Rd(7) Z,C,N,V 1 152 ATtiny13 2535D–AVR–04/04 ATtiny13 标志 指令 操作数 说明 操作 ROR Rd 带进位循环右移 Rd(7)←C,Rd(n)← Rd(n+1),C←Rd(0) Z,C,N,V 1 ASR Rd 算术右移 Rd(n) ← Rd(n+1), n=0..6 Z,C,N,V 1 SWAP Rd 高低半字节交换 Rd(3..0)←Rd(7..4),Rd(7..4)←Rd(3..0) None 1 BSET s 标志置位 SREG(s) ← 1 SREG(s) 1 BCLR s 标志清零 SREG(s) ← 0 SREG(s) 1 BST Rr, b 从寄存器将位赋给 T T ← Rr(b) T 1 BLD Rd, b 将 T 赋给寄存器位 Rd(b) ← T None 1 SEC 进位位置位 C←1 C 1 CLC 进位位清零 C←0 C 1 SEN 负标志位置位 N←1 N 1 CLN 负标志位清零 N←0 N 1 SEZ 零标志位置位 Z←1 Z 1 CLZ 零标志位清零 Z←0 Z 1 SEI 全局中断使能 I←1 I 1 CLI 全局中断禁用 I←0 I 1 SES 符号测试标志位置位 S←1 S 1 CLS 符号测试标志位清零 S←0 S 1 SEV 2 的补码溢出标志置位 V←1 V 1 CLV 2 的补码溢出标志清零 V←0 V 1 SET SREG 的 T 置位 T←1 T 1 CLT SREG 的 T 清零 T←0 T 1 SEH CLH SREG 的半进位标志置位 SREG 的半进位标志清零 H←1 H←0 H H 1 None 1 None 1 # 时钟数 1 数据传送指令 MOV Rd, Rr 寄存器间复制 MOVW Rd, Rr 复制寄存器字 Rd ← Rr Rd+1:Rd ← Rr+1:Rr LDI Rd, K 加载立即数 Rd ← K None 1 LD Rd, X 加载间接寻址数据 Rd ← (X) None 2 LD Rd, X+ 加载间接寻址数据,然后地址加一 Rd ← (X), X ← X + 1 None 2 LD Rd, - X 地址减一后加载间接寻址数据 X ← X - 1, Rd ← (X) None 2 LD Rd, Y 加载间接寻址数据 Rd ← (Y) None 2 LD Rd, Y+ 加载间接寻址数据,然后地址加一 Rd ← (Y), Y ← Y + 1 None 2 LD Rd, - Y 地址减一后加载间接寻址数据 Y ← Y - 1, Rd ← (Y) None 2 LDD Rd,Y+q 加载带偏移量的间接寻址数据 Rd ← (Y + q) None 2 LD Rd, Z 加载间接寻址数据 Rd ← (Z) None 2 LD Rd, Z+ 加载间接寻址数据,然后地址加一 Rd ← (Z), Z ← Z+1 None 2 LD Rd, -Z 地址减一后加载间接寻址数据 Z ← Z - 1, Rd ← (Z) None 2 LDD Rd, Z+q 加载带偏移量的间接寻址数据 Rd ← (Z + q) None 2 LDS Rd, k 从 SRAM 加载数据 Rd ← (k) None 2 ST X, Rr 以间接寻址方式存储数据 (X) ← Rr None 2 ST X+, Rr 以间接寻址方式存储数据,然后地址加一 (X) ← Rr, X ← X + 1 None 2 ST - X, Rr 地址减一后以间接寻址方式存储数据 X ← X - 1, (X) ← Rr None 2 ST Y, Rr 加载间接寻址数据 (Y) ← Rr None 2 ST Y+, Rr 加载间接寻址数据,然后地址加一 (Y) ← Rr, Y ← Y + 1 None 2 ST - Y, Rr 地址减一后加载间接寻址数据 Y ← Y - 1, (Y) ← Rr None 2 STD Y+q,Rr 加载带偏移量的间接寻址数据 (Y + q) ← Rr None 2 ST Z, Rr 加载间接寻址数据 (Z) ← Rr None 2 ST Z+, Rr 加载间接寻址数据,然后地址加一 (Z) ← Rr, Z ← Z + 1 None 2 ST -Z, Rr 地址减一后加载间接寻址数据 Z ← Z - 1, (Z) ← Rr None 2 STD Z+q,Rr 加载带偏移量的间接寻址数据 (Z + q) ← Rr None 2 STS k, Rr 从 SRAM 加载数据 (k) ← Rr None 2 加载程序空间的数据 R0 ← (Z) None 3 LPM LPM Rd, Z 加载程序空间的数据 Rd ← (Z) None 3 LPM Rd, Z+ 加载程序空间的数据,然后地址加一 Rd ← (Z), Z ← Z+1 None 3 保存程序空间的数据 (z) ← R1:R0 None SPM IN Rd, P 从 I/O 端口读数据 Rd ← P None OUT P, Rr 想 I/O 端口输出数据 P ← Rr None 1 PUSH Rr 将寄存器推入堆栈 STACK ← Rr None 2 POP Rd 将寄存器弹出堆栈 Rd ← STACK None 2 1 MCU 控制指令 NOP 空操作 None 1 SLEEP 休眠 (see specific descr. for Sleep function) None 1 WDR BREAK 复位看门狗 终止 (see specific descr. for WDR/Timer) For On-chip Debug Only None None 1 N/A 153 2535D–AVR–04/04 产品信息 速度 (MHz) 10(3) 20(3) Notes: 所需电源 产品号 封装 工作范围 1.8 - 5.5 ATtiny13V-10PI ATtiny13V-10PJ(2) ATtiny13V-10SI ATtiny13V-10SJ(2) ATtiny13V-10SSI ATtiny13V-10SSJ(2) 8P3 8P3 8S2 8S2 S8S1 S8S1 工业级 (-40°C - 85°C) 2.7 - 5.5 ATtiny13-20PI ATtiny13-20PJ(2) ATtiny13-20SI ATtiny13-20SJ(2) ATtiny13-20SSI ATtiny13-20SSJ(2) 8P3 8P3 8S2 8S2 S8S1 S8S1 工业级 (-40°C - 85°C) 1. 产品也可以 wafer 的形式提供,订货信息细节以及最小定货量请与 Atmel 当地机构联系。 2. 可选无铅封装。 3. 速度与 VCC 间的关系,见 P114“ 最大速度与 VCC 的关系 ” 。 封装类型 8P3 8- 引线,0.300" 宽,PDIP 8S2 8- 引线,0.209" 宽, EIAJ SOIC S8S1 8- 引线,0.150" 宽, JEDEC SOIC 154 ATtiny13 2535D–AVR–04/04 ATtiny13 封装信息 8P3 E 1 E1 N Top View c eA End View COMMON DIMENSIONS (Unit of Measure = inches) D e D1 A2 A MIN NOM MAX A2 0.115 0.130 0.195 b 0.014 0.018 0.022 5 b2 0.045 0.060 0.070 6 b3 0.030 0.039 0.045 6 c 0.008 0.010 0.014 D 0.355 0.365 0.400 D1 0.005 E 0.300 0.310 0.325 4 E1 0.240 0.250 0.280 3 SYMBOL A b2 b3 b 4 PLCS Side View L 0.100 BSC eA 0.300 BSC 0.115 2 3 3 e L Notes: 0.210 NOTE 0.130 4 0.150 2 1. This drawing is for general information only; refer to JEDEC Drawing MS-001, Variation BA for additional information. 2. Dimensions A and L are measured with the package seated in JEDEC seating plane Gauge GS-3. 3. D, D1 and E1 dimensions do not include mold Flash or protrusions. Mold Flash or protrusions shall not exceed 0.010 inch. 4. E and eA measured with the leads constrained to be perpendicular to datum. 5. Pointed or rounded lead tips are preferred to ease insertion. 6. b2 and b3 maximum dimensions do not include Dambar protrusions. Dambar protrusions shall not exceed 0.010 (0.25 mm). 01/09/02 R 2325 Orchard Parkway San Jose, CA 95131 TITLE 8P3, 8-lead, 0.300" Wide Body, Plastic Dual In-line Package (PDIP) DRAWING NO. REV. 8P3 B 155 2535D–AVR–04/04 8S2 C 1 E E1 L N Top View ∅ End View e b COMMON DIMENSIONS (Unit of Measure = mm) A SYMBOL A1 D Side View NOM MAX NOTE 1.70 2.16 A1 0.05 0.25 b 0.35 0.48 5 C 0.15 0.35 5 D 5.13 5.35 E1 5.18 5.40 E 7.70 8.26 L 0.51 0.85 ∅ 0˚ 8˚ e Notes: 1. 2. 3. 4. 5. MIN A 1.27 BSC 2, 3 4 This drawing is for general information only; refer to EIAJ Drawing EDR-7320 for additional information. Mismatch of the upper and lower dies and resin burrs are not included. It is recommended that upper and lower cavities be equal. If they are different, the larger dimension shall be regarded. Determines the true geometric position. Values b and C apply to pb/Sn solder plated terminal. The standard thickness of the solder layer shall be 0.010 +0.010/−0.005 mm. 10/7/03 R 156 2325 Orchard Parkway San Jose, CA 95131 TITLE 8S2, 8-lead, 0.209" Body, Plastic Small Outline Package (EIAJ) DRAWING NO. 8S2 REV. C ATtiny13 2535D–AVR–04/04 ATtiny13 S8S1 1 E1 E N Top View e b A A1 D Side View C L End View COMMON DIMENSIONS (Unit of Measure = mm) SYMBOL MIN NOM MAX E 5.79 6.20 E1 3.81 3.99 A 1.35 1.75 A1 0.1 0.25 D 4.80 4.98 C 0.17 0.25 b 0.31 0.51 L 0.4 e NOTE 1.27 1.27 BSC 0o 8o Notes: 1. This drawing is for general information only; refer to JEDEC Drawing MS-012 for proper dimensions, tolerances, datums,etc. 7/28/03 R 2325 Orchard Parkway San Jose, CA 95131 TITLE S8S1, 8-lead, 0.150" Wide Body, Plastic Gull Wing Small Outline (JEDEC SOIC) DRAWING NO. S8S1 REV. A 157 2535D–AVR–04/04 勘误表 本节修订的为 ATtiny13 芯片。 ATtiny13 Rev. B • • • • • 在擦除操作后读返回值错误 对 Flash, EEPROM,熔丝位与锁定位的高电压串行编程可能失败 为进一步编程,芯片可能锁定 debugWIRE 通信不会被锁定位阻止 看门狗定时器中断禁用 1. 在擦除操作后读返回值错误 当电源电压低于 2.7 V 时,被擦除的 EEPROM 地址读返回值可能为 0x00,而不是 0xFF。 解决方法: 如果要在擦除操作之后进行读操作,请使用基本写操作,数据为 0xFF。这同样可以 达到擦除的目的。在任何情况下写操作都是正确的。 2. 对 Flash, EEPROM, 熔丝位与锁定位的高电压串行编程可能失败 对其写入可能会出错。 解决方法: 在 写 入 初 始 化 后,始 终 检 测 R D Y / B S Y 信 号。若 写 入 出 错,就 重 新 写 入,直 到 RDY/BSY 信号检测到正确的写入。这在修订版 D 中固定下来。 3. 为进一步编程,芯片可能锁定 特殊的熔丝位组合将锁定芯片,将其转换成 OTP 芯片。熔丝位按照下面的设定将会 得到这种效果: – 128 kHz 片内振荡器 (CKSEL[1..0] = 11),最短的启动时间 (SUT[1..0] = 00), Debugwire 使能 (DWEN = 0) 或复位禁用 RSTDISBL = 0。 – 9.6 MHz 片内振荡器 (CKSEL[1..0] = 10),最短的启动时间 (SUT[1..0] = 00), Debugwire 使能 (DWEN = 0) 或复位禁用 RSTDISBL = 0。 – 4.8 MHz 片内振荡器 (CKSEL[1..0] = 01),最短的启动时间 (SUT[1..0] = 00), Debugwire 使能 (DWEN = 0) 或复位禁用 RSTDISBL = 0。 解决方法: 避免出现上述熔丝位组合。选择长启动时间将会消除这一问题。 4. debugWIRE 通信不会被锁定位阻止 当 debugWIRE 片上调试使能 (DWEN = 0),即使锁定位设置为阻止从芯片读取,还 是能读取出程序存储器与 EEPROM 数据存储器中的内容。 解决方法: 产品出厂时,不要将片上调试使能。 5. 看门狗定时器中断禁用 在新的溢出没有出现前若看门狗定时器中断标志没有清除,看门狗将被禁用,且中断 标志自动清除。这只在中断模式中出现。如果将看门狗配置为复位模式,芯片在看门 狗溢出后有一个中断,芯片工作正常。 解决方法: 保证在新的看门狗溢出出现前有足够的时间处理前一次溢出。这就要选择一个足够长 的溢出周期。 158 ATtiny13 2535D–AVR–04/04 ATtiny13 ATtiny13 Rev. A 没有抽取修订版 A。 159 2535D–AVR–04/04 ATtiny13 数据手册改变 日志 从版本 Rev. 2535D-04/04 到版本 Rev. 2535C-02/04 的改动 从版本 Rev. 2535B-01/04 到版本 Rev. 2535C-02/04 的改动 从版本 Rev. 2535A-06/03 到版本 Rev. 2535B-01/04 的改动 本节所指的页号为本文的相关页码;修订号则为文档的修订号。 2. 3. 4. 最大速度等级改变 - 从 12MHz 到 10MHz - 从 24MHz 到 20MHz 更新 P103“ 串行编程指令集 ” 。 更新 P114“ 最大速度与 VCC 的关系 ” 。 更新 P154“ 产品信息 ” 。 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. C 代码例程更新使用合法的 IAR 语法。 由 WDTIF 替代 WDIF ; 由 WDTIE 替代 WDIE。 更新 P8“ 堆栈指针 ” 。 更新 P22“ 标定的片内 RC 振荡器 ” 。 更新 P22“ 振荡器标定寄存器 – OSCCAL” 。 更新 P35“ 看门狗定时器 ” 的介绍方式。 更新 P80“ADC 转换时间 ” 。 更新 P100“ 串行下载 ” 。 更新 P112“ 电气特性 ” 。 更新 P154“ 产品信息 ” 。 在 P158“ 勘误表 ” 中删除 rev. C。 1. 2. 3. 4. 5. 6. 更新 P2Figure 2。 更新 P30Table 12, P39Table 17, P86Table 37 及 P113Table 57。 更新 P22“ 标定的片内 RC 振荡器 ” 。 更新整个 P35“ 看门狗定时器 ” 。 更新 P100Figure 53 与 P105Figure 56。 更新 P48“MCU 控制寄存器 – MCUCR” , P68“T/C 控制寄存器 B – TCCR0B” and P75“ 数字输入禁用寄存器 0 – DIDR0” 中的寄存器。 更新 P112“ 电气特性 ” 中绝对最大速率及 DC 特性。 加入 P114“ 最大速度与 VCC 的关系 ” 更新 P115“ADC 特性-初始参数 ” 。 更新 P116“ATtiny13 典型特征参数 ” 。 更新 P154“ 产品信息 ” 。 更新 P155“ 封装信息 ” 。 更新 P158“ 勘误表 ” 。 改变 EEAR 到 EEARL 的例子。 1. 7. 8. 9. 10. 11. 12. 13. 14. 160 ATtiny13 2535D–AVR–04/04