具有1KB系统内,产品特性•

保存文件 3
高性能、低功耗的8位AVR®微处理器•高级RISC结构 –120条指令–大多数指令执行时间为单个时钟周期–32个8位通用工作寄存器–全静态工作–工作于20MHz时性能高达20MIPS•非易失性程序和数据存储器–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-4MHz@1.8-5.5V,0-10MHz@2.7-5.5V –ATtiny13:0-10MHz@2.7-5.5V,0-20MHz@4.5-5.5V•工业级温度范围•低功耗 –正常模式:1MHz,1.8V:240µ
A –掉电模式:<0.1µAat1.8V 引脚配置 Figure1.ATtiny13芯片引脚PDIP/SOIC (PCINT5/RESET/ADC0/dW)PB51(PCINT3/CLKI/ADC3)PB32(PCINT4/ADC2)PB43GND4 8VCC7PB2(SCK/ADC1/T0/PCINT2)6PB1(MISO/AIN1/OC0B/INT0/PCINT1)5PB0(MOSI/AIN0/OC0A/PCINT0) 具有1KB系统内 可编程Flash的 8位 微 控制器 ATtiny13 初稿 本文是英文数据手册的中文翻译,其目的是方便中国用户的阅读。
它无法自动跟随原稿的更新,同时也可能存在翻译上的错误。
读者应该以英文原稿为参考以获得更准确的信息。
Rev.2535D–AVR–04/04 综述 方框图 ATtiny13是基于增强的AVRRISC结构的低功耗8位CMOS微控制器。
由于其先进的指令集以及单时钟周期指令执行时间,ATtiny13的数据吞吐率高达1MIPS/MHz,从而可以缓减系统在功耗和处理速度之间的矛盾。
Figure2.ATtiny13结构框图 VCC GND INSTRUCTIONREGISTER INSTRUCTIONDECODERCONTROLLINES 8-BITDATABUS STACKPOINTER SRAM PROGRAMCOUNTER PROGRAMFLASH GENERALPURPOSEREGISTERS XYZ ALU WATCHDOGOSCILLATOR WATCHDOGTIMER MCUCONTROLREGISTER MCUSTATUSREGISTER TIMER/COUNTER0 INTERRUPTUNIT PROGRAMMINGLOGIC DATAEEPROM STATUSREGISTER CALIBRATEDINTERNAL OSCILLATOR TIMINGANDCONTROL ADC/ANALOGCOMPARATOR DATAREGISTERPORTB DATADIR.REG.PORTB PORTBDRIVERSPB0-PB5 RESETCLKI 2ATtiny13 2535D–AVR–04/04 引脚说明 VCCGND端口B(PB5..PB0) RESET 代码例子 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串行接口可对程序存储器进行系统内编程。
ATtiny13AVR具有一整套的编程与系统开发工具,包括:C语言编译器、宏汇编、程序调试器/软件仿真器、仿真器及评估板。
数字电路的电源 地 端口B为6位双向I/O口,具有可编程的内部上拉电阻。
其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。
作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。
在复位过程中,即使系统时钟还未起振,端口B处于高阻状态。
端口B也可以用做其他不同的特殊功能,请参见P48。
复位输入引脚。
持续时间超过最小门限时间的低电平将引起系统复位。
门限时间见P30Table12。
持续时间小于门限时间的脉冲不能保证可靠复位。
本数据手册包含了一些简单的代码例子以说明如何使用芯片各个不同的功能模块。
这些例子都假定在编译之前已经包含了正确的头文件。
有些C编译器在头文件里并没有包含位定义,而且各个C编译器对中断处理有自己不同的处理方式。
请注意查阅相关文档以获取具体的信息。
3 2535D–AVR–04/04 AVRCPU内核 介绍结构综述 本节从总体上讨论AVR内核的结构。
CPU的主要任务是保证程序的正确执行。
因此它必须能够访问存储器、执行运算、控制外设以及处理中断。
Figure3.AVR结构的方框图 DataBus8-bit FlashProgramMemory InstructionRegister InstructionDecoder ControlLines ProgramCounter StatusandControl 32x8GeneralPurposeRegistrers ALU InterruptUnit WatchdogTimer AnalogComparator DirectAddressingIndirectAddressing DataSRAM EEPROM I/OModule1I/OModule2I/OModulen I/OLines 为了获得最高的性能以及并行性,AVR采用了Harvard结构,具有独立的数据和程序总线。
程序存储器里的指令通过一级流水线运行。
CPU在执行一条指令的同时读取下一条指令(在本文称为预取)。
这个概念实现了指令的单时钟周期运行。
程序存储器是可以在线编程的Flash。
快速访问寄存器文件包括32个8位通用工作寄存器,访问时间为一个时钟周期。
从而实现了单时钟周期的ALU操作。
在典型的ALU操作中,两个位于寄存器文件中的操作数同时被访问,然后执行运算,结果再被送回到寄存器文件。
整个过程仅需一个时钟周期。
寄存器文件里有6个寄存器可以用作3个16位的间接寻址寄存器指针以寻址数据空间,实现高效的地址运算。
其中一个指针还可以作为程序存储器查询表的地址指针。
这些附加的功能寄存器即为16位的
X、Y、Z寄存器。
4ATtiny13 2535D–AVR–04/04 ALU-算术逻辑单元 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。
AVRALU与32个通用工作寄存器直接相连。
寄存器与寄存器之间、寄存器与立即数之间的ALU运算只需要一个时钟周期。
ALU操作分为3类:算术、逻辑和位操作。
此外还提供了支持无/有符号数和分数乘法的乘法器。
具体请参见指令集。
5 2535D–AVR–04/04 状态寄存器 通用寄存器文件 6ATtiny13 状态寄存器包含了最近执行的算术指令的结果信息。
这些信息可以用来改变程序流程以实现条件操作。
如指令集所述,所有ALU运算都将影响状态寄存器的内容。
这样,在许多情况下就不需要专门的比较指令了,从而使系统运行更快速,代码效率更高。
在进入中断服务程序时状态寄存器不会自动保存,中断返回时也不会自动恢复。
这些工作需要软件来处理。
AVR中断寄存器SREG定义如下: Bit 读/写初始值
7 6
5 4
3 2
1 0
I T
H S
V N
Z C SREG R/W R/W R/W R/W R/W R/W R/W R/W
0 0
0 0
0 0
0 0 •
Bit7–I:全局中断使能 I置位时使能全局中断。
单独的中断使能由其他独立的控制寄存器控制。
如果I清零,则不论单独中断标志置位与否,都不会产生中断。
任意一个中断发生后I清零,而执行RETI指令后I恢复置位以使能中断。
I也可以通过SEI和CLI指令来置位和清零。
•Bit6–T:位拷贝存储 位拷贝指令BLD和BST利用T作为目的或源地址。
BST把寄存器的某一位拷贝到
T,而BLD把T拷贝到寄存器的某一位。
•Bit5–H:半进位标志 半进位标志H表示算术操作发生了半进位。
此标志对于BCD运算非常有用。
详见指令集的说明。
•Bit4–S:符号位,S=N⊕
V S为负数标志N与2的补码溢出标志V的异或。
详见指令集的说明。
•Bit3–V:2的补码溢出标志 支持2的补码运算。
详见指令集的说明。
•Bit2–N:负数标志 表明算术或逻辑操作结果为负。
详见指令集的说明。
•Bit1–Z:零标志 表明算术或逻辑操作结果为零。
详见指令集的说明。
•Bit0–C:进位标志 表明算术或逻辑操作发生了进位。
详见指令集的说明。
寄存器文件针对AVR增强型RISC指令集做了优化。
为了获得需要的性能和灵活性,寄存器文件支持以下的输入/输出方案:•输出一个8位操作数,输入一个8位结果•输出两个8位位操作数,输入一个8位结果•输出两个8位位操作数,输入一个16位结果•输出一个16位位操作数,输入一个16位结果 Figure4为CPU32个通用工作寄存器的结构。
Figure4.AVRCPU通用工作寄存器
7 0 R0R1 Addr.0x000x01 2535D–AVR–04/04 ATtiny13 通用工作寄存器 R2 0x02 … R13 0x0D R14 0x0E R15 0x0F R16 0x10 R17 0x11 … R26 0x1A X寄存器,低字节 R27 0x1B X寄存器,高字节 R28 0x1C Y寄存器,低字节 R29 0x1D Y寄存器,高字节 R30 0x1E Z寄存器,低字节 R31 0x1F Z寄存器,高字节 大多数操作寄存器文件的指令都可以直接访问所有的寄存器,而且多数这样的指令的执行时间为单个时钟周期。
如Figure4所示,每个寄存器都有一个数据内存地址,将他们直接映射到用户数据空间的头32个地址。
虽然寄存器文件的物理实现不是SRAM,这种内存组织方式在访问寄存器方面具有极大的灵活性,因为
X、Y、Z寄存器可以设置为指向任意寄存器的指针。
7 2535D–AVR–04/04
X、Y、Z寄存器 堆栈指针 寄存器R26..R31除了用作通用寄存器外,还可以作为数据间接寻址用的地址指针。
这三个间接寻址寄存器示于Figure5。
Figure5.X、
Y、Z寄存器 15 XH XL
0 X寄存器
7 07
0 R27(0x1B) R26(0x1A) 15 YH YL
0 Y寄存器
7 07
0 R29(0x1D) R28(0x1C) Z寄存器 15 ZH
7 0 R31(0x1F) ZL
0 7
0 R30(0x1E) 在不同的寻址模式中,这些地址寄存器可以实现固定偏移量,自动加一和自动减一功能。
具体细节请参见指令集。
堆栈指针主要用来保存临时数据、局部变量和中断/子程序的返回地址。
堆栈指针总是指向堆栈的顶部。
要注意AVR的堆栈是向下生长的,即新数据推入堆栈时,堆栈指针的数值将减小。
堆栈指针指向数据SRAM堆栈区。
在此聚集了子程序堆栈和中断堆栈。
调用子程序和使能中断之前必须定义堆栈空间,且堆栈指针必须指向高于0x60的地址空间。
使用PUSH指令将数据推入堆栈时指针减一;而子程序或中断返回地址推入堆栈时指针将减
二。
使用POP指令将数据弹出堆栈时,堆栈指针加一;而用RET或RETI指令从子程序或中断返回时堆栈指针加
二。
AVR的堆栈指针由I/O空间中的两个8位寄存器实现。
实际使用的位数与具体器件有关。
请注意某些AVR器件的数据区太小,用SPL就足够了。
此时将不给出SPH寄存器。
Bit 读/写初始值 15 14 13 12 11 10
9 8 SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0 SPL
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 8
ATtiny13 2535D–AVR–04/04 指令执行时序 复位与中断处理 2535D–AVR–04/04 ATtiny13 这一节介绍指令执行过程中的访问时序。
AVRCPU由系统时钟clkCPU驱动。
此时钟直接来自选定的时钟源。
芯片内部不对此时钟进行分频。
Figure6说明了由Harvard结构决定的并行取指和指令执行,以及可以进行快速访问的寄存器文件的概念。
这是一个基本的流水线概念,性能高达1MIPS/MHz,具有优良的性价比、功能/时钟比、功能/功耗比。
Figure6.并行取指和指令执行 T1 T2 T3 T4 clkCPU 1stInstructionFetch 1stInstructionExecute2ndInstructionFetch 2ndInstructionExecute3rdInstructionFetch 3rdInstructionExecute4thInstructionFetch Figure7演示的是寄存器文件内部访问时序。
在一个时钟周期里,ALU可以同时对两个寄存器操作数进行操作,同时将结果保存到目的寄存器中去。
Figure7.单时钟周期ALU操作 T1 T2 T3 T4 clkCPUTotalExecutionTimeRegisterOperandsFetchALUOperationExecute ResultWriteBack AVR有不同的中断源。
每个中断和复位在程序空间都有独立的中断向量。
所有的中断事件都有自己的使能位。
当使能位置位,且状态寄存器的全局中断使能位I也置位时,中断可以发生。
程序存储区的最低地址缺省为复位向量和中断向量。
完整的向量列表请参见P40“中断”。
列表也决定了不同中断的优先级。
向量所在的地址越低,优先级越高。
RESET具有最高的优先级,第二个为INT0–外部中断请求
0。
任一中断发生时全局中断使能位I被清零,从而禁止了所有其他的中断。
用户软件可以在中断程序里置位I来实现中断嵌套。
此时所有的中断都可以中断当前的中断服务程序。
执行RETI指令后I自动置位。
从根本上说有两种类型的中断。
第一种由事件触发并置位中断标志。
对于这些中断,程序计数器跳转到实际的中断向量以执行中断处理程序,同时硬件将清除相应的中断标志。
中断标志也可以通过对其写”1”的方式来清除。
当中断发生后,如果相应的中断使能位为"0",则中断标志位置位,并一直保持到中断执行,或者被软件清除。
类似的,如果全局中断标志被清零,则所有已发生的中断都不会被执行,直到I置位。
然后挂起的各个中断按中断优先级依次执行。

9 第二种类型的中断则是只要中断条件满足,就会一直触发。
这些中断不需要中断标志。
若中断条件在中断使能之前就消失了,中断不会被触发。
AVR退出中断后总是回到主程序并至少执行一条指令才可以去执行其他被挂起的中断。
要注意的是,进入中断服务程序时状态寄存器不会自动保存,中断返回时也不会自动恢复。
这些工作必须由用户通过软件来完成。
使用CLI指令来禁止中断时,中断禁止立即生效。
没有中断可以在执行CLI指令后发生,即使它是在执行CLI指令的同时发生的。
下面的例子说明了如何在写EEPROM时使用这个指令来防止中断发生以避免对EEPROM内容的可能破坏。
汇编代码例程 inr16,SREGcli;禁止中断sbiEECR,EEMWEsbiEECR,EEWEoutSREG,r16 ;保存SREG值;启动EEPROM写操作;恢复SREG(I位) C代码例程 charcSREG;cSREG=SREG;/*保存SREG值*//*禁止中断*/__disable_interrupt();EECR|=(1< 汇编代码例程 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 AVRATtiny13的存储器 系统内可编程的Flash程序存储器 本节讲述ATtiny13的存储器。
AVR结构具有两个主要的存储器空间:数据存储器空间和程序存储器空间。
此外,ATtiny13还有EEPROM存储器以保存数据。
这三个存储器空间都为线性的平面结构。
ATtiny13具有1K字节的在线编程Flash,用于存放程序指令代码。
因为所有的AVR指令为16位或32位,故而Flash组织成512x16位的形式。
Flash存储器至少可以擦写10,000次。
ATtiny13的程序计数器(PC)为9位,因此可以寻址512字的程序存储器空间。
P97“存储器编程”详述了如何用SPI接口实现对Flash的串行下载。
常数可以保存于整个程序存储器地址空间(参考LPM加载程序存储器指令的说明)。
取指与执行时序图请参见P9“指令执行时序”。
Figure8.程序存储器映像 ProgramMemory 0x0000 0x01FF 12ATtiny13 2535D–AVR–04/04 SRAM数据存储器 数据存储器访问时间 EEPROM数据存储器 EEPROM读/写访问 2535D–AVR–04/04 ATtiny13 Figure9给出了ATtiny13SRAM空间的组织结构。
前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“通用寄存器文件”。
Figure9.数据存储器映像 DataMemory 32Registers64I/ORegisters 0x0000-0x001F0x0020-0x005F0x0060 InternalSRAM(64x8) 0x009F 本节说明访问内部存储器的时序。
如Figure10所示,内部数据SRAM访问时间为两个clkCPU时钟。
Figure10.片上SRAM存取周期 T1 T2 T3 Write clkCPUAddress DataWRDataRD ComputeAddress Addressvalid Read MemoryessInstruction NextInstruction ATtiny13包含64字节的EEPROM数据存储器。
它是作为一个独立的数据空间而存在的,可以按字节读写。
EEPROM的寿命至少为100,000次擦除周期。
EEPROM的访问由地址寄存器、数据寄存器和控制寄存器决定。
详见P100中EEPROM的串行数据下载。
EEPROM的访问寄存器位于I/O空间。
13 EEPROM的写访问时间由Table1给出。
自定时功能可以让用户软件监测何时可以开始写下一字节。
用户操作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 – – EEAR5EEAR4EEAR3EEAR2EEAR1EEAR0EEARL
R R R/W R/W R/W R/W R/W R/W
0 0
X X
X X
X X •Bits7..6–Res:保留 保留位,读操作返回值为零。
•Bits5..0–EEAR5..0:EEPROM地址 EEPROM地址寄存器EEARL指定了64字节的EEPROM空间。
EEPROM地址是线性的,从0到63。
EEAR的初始值没有定义。
在访问EEPROM之前必须为其赋予正确的数据。
EEPROM数据寄存器-EEDR Bit 读/写初始值 7EEDR7 R/WX 6EEDR6 R/WX 5EEDR5 R/WX 4EEDR4 R/WX 3EEDR3 R/WX 2EEDR2 R/WX 1EEDR1 R/WX 0EEDR0 R/WX EEDR •Bits7..0–EEDR7..0:EEPROM数据 对于EEPROM写操作,EEDR是需要写到EEAR单元的数据;对于读操作,EEDR是从地址EEARL读取的数据。
14ATtiny13 2535D–AVR–04/04 ATtiny13 EEPROM控制寄存器-EECR基本字节编程 Bit 读/写初始值
7 6
5 4
3 2
1 0 – – EEPM1EEPM0EERIEEEMPEEEPE EERE EECR
R R R/W R/W R/W R/W R/W R/W
0 0
X X
0 0
X 0 •Bit7–Res:保留 保留位,读操作返回值为零。
读完后,屏蔽该位。
•Bit6–Res:保留 保留位,读操作返回值为零。
•Bits5,4–EEPM1与EEPM0:EEPROM编程模式位 设置编程模式位定义当对EEPE写入时触发哪种编程方式。
可能在一个时钟周期中数据编程(擦除旧值写入新值)或将擦除与写操作分为两步。
不同模式的编程时间见Table1。
当EEPE置位,对EEPMn的写操作将忽略。
复位时,除非EEPROM处于编程状态,否则EEPMn位将复位为0b00。
Table1.EEPROM模式位 EEPM1EEPM0 编程时间
0 0 3.4ms
0 1 1.8ms
1 0 1.8ms
1 1 – 操作擦除与写入操作在一个时钟周期中完成只擦除只写入保留 •Bit3–EERIE:EEPROM准备好中断使能 若SREG的I为"1",则置位EERIE将使能EEPROM准备好中断。
清零EERIE则禁止此中断。
当EEWE清零时EEPROM准备好中断即可发生。
•Bit2–EEMPE:EEPROM主机编程使能 EEMPE位决定EEPE写入"1”是否有效。
当EEMPE为"1"时,在四个时钟周期内设置EEPE将会在EEPROM指定的位置编程;若EEMPE为"0“,设置EEPE无效。
当EEMPE由软件写入"1”,则在四个时钟周期后由硬件清零。
•Bit1–EEPE:EEPROM编程使能 EEPE为EEPROM的编程使能信号。
当EEPE为"1",通过EEPMn位的设置,将会对EEPROM编程。
在EEPE写入逻辑"1"前,EEMPE位必须写入"1",否则不会出现EEPROM写操作。
当写访问时间结束,EEPE位由硬件清零。
当EEPE置位,CPU在执行指令前终止两个时钟周期。
•Bit0–EERE:EEPROM读使能 EERE为EEPROM读操作的使能信号。
当EEPROM地址设置好之后,需置位EERE以便将数据读入EEARL。
EEPROM数据的读取只需要一条指令,且无需等待。
读取EEPROM后CPU要停止4个时钟周期才可以执行下一条指令。
用户在读取EEPROM时应该检测EEPE。
如果一个写操作正在进行,就无法读取EEPROM,也无法改变寄存器EEARL。
使用基本字节编程是最简单的模式。
当对EEPROM写入一个字节,用户必须将地址写入EEARL寄存器,将数据写入EEDR寄存器。
若EEPMn位为零,对EEPE的写操作(在对EEMPE写完后的四个时钟周期内)将触发擦除/写入操作。
擦除与写入操作在一个时钟周期内完成,整个编程时间见Table1。
EEPE位会保持置位,直到擦除与写入操作完成。
而当芯片处于编程状态时,不会进行其他EEPROM操作。
15 2535D–AVR–04/04 分离字节编程擦除写入 可以将擦除与写入操作分为两个周期。
若系统需要对一些有限的时间缩短访问时间(尤其若电源电压下降)该方式有效。
使用该方式时,必须在写入操作前先进行擦除操作。
但由于擦除与写入操作是分离的,有可能当系统允许进行时间临界操作时(尤其在掉电后)进行擦除操作。
擦除一个字节,地址必须写入EEARL。
若EEPMn为0b01,对EEPE写入(在对EEMPE写完后的四个时钟周期内)将只触发擦除操作(编程时间见Table1)。
EEPE位会保持到擦除操作完成。
而当芯片处于编程状态时,不会进行其他EEPROM操作。
写入时,用户必须将地址写入EEARL,将数据写入EEDR。
若EEPMn为0b10,对EEPE写入(在对EEMPE写完后的四个时钟周期内)将只触发写入操作(编程时间见Table1)。
EEPE位会保持到擦除操作完成。
若在写入前数据没有擦除,则认为写入数据丢失。
当芯片处于编程状态时,不会进行其他EEPROM操作。
EEPROM访问使用标定振荡器定时。
振荡器频率见P22“振荡器标定寄存器–OSCCAL”。
16ATtiny13 2535D–AVR–04/04 ATtiny13 下面的代码分别用汇编和C函数说明如何实现EEPROM的擦除、写入或基本写入。
在此假设中断不会在执行这些函数的过程当中发生。
汇编代码例程EEPROM_write:;等待上一次写操作结束sbicEECR,EEPErjmpEEPROM_write;设置编程模式ldir16,(0<>EEPM0)/*设置地址与数据寄存器*/EEARL=ucAddress;EEDR=ucData;/*置位EEMWE*/EECR|=(1< 汇编代码例程 EEPROM_read:;等待上一次写操作结束sbicEECR,EEPErjmpEEPROM_read;设置地址寄存器r17outEEARL,r17;设置EERE以启动读操作sbiEECR,EERE;自数据寄存器读取数据inr16,EEDRret C代码例程 unsignedcharEEPROM_read(unsignedcharucAddress){ /*等待上一次写操作结束*/while(EECR&(1<这种情况在使用独立的EEPROM器件时也会遇到。
因而需要使用相同的保护方案。
由于电压过低造成EEPROM数据损坏有两种可能:一是电压低于EEPROM写操作所需要的最低电压;二是CPU本身已经无法正常工作。
EEPROM数据损坏的问题可以通过以下方法解决:当电压过低时保持AVRRESET信号为低。
这可以通过使能芯片的掉电检测电路BOD来实现。
如果BOD电平无法满足要求则可以使用外部复位电路。
若写操作过程当中发生了复位,只要电压足够高,写操作仍将正常结束。
18ATtiny13 2535D–AVR–04/04 I/O存储器 ATtiny13 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 系统时钟及时钟选项 时钟系统及其分布 Figure11为AVR的主要时钟系统及其分布。
这些时钟并不需要同时工作。
为了降低功耗,可以通过使用不同的睡眠模式来禁止无需工作的模块的时钟,详见P26“电源管理及睡眠模式”。
时钟系统详见Figure11。
Figure11.时钟分布 ADC GeneralI/OModules CPUCore RAM FlashandEEPROM clkADC clkI/O AVRClockControlUnit clkCPUclkFLASH ResetLogic WatchdogTimer Sourceclock ClockMultiplexer Watchdogclock WatchdogOscillator CPU时钟-clkCPUI/O时钟-clkI/OFlash时钟-clkFLASHADC时钟-clkADC 时钟源 ExternalClock CalibratedRCOscillator CPU时钟与操作AVR内核的子系统相连,如通用寄存器文件、状态寄存器及保存堆栈指针的数据存储器。
终止CPU时钟将使内核停止工作和计算。
I/O时钟用于主要的I/O模块,如定时器/计数器。
I/O时钟还用于外部中断模块。
要注意的是有些外部中断由异步逻辑检测,因此即使I/O时钟停止了这些中断仍然可以得到监控。
Flash时钟控制Flash接口的操作。
此时钟通常与CPU时钟同时挂起或激活。
ADC具有专门的时钟。
这样可以在ADC工作的时候停止CPU和I/O时钟以降低数字电路产生的噪声,从而提高ADC转换精度。
ATtiny13芯片有如下几种通过Flash熔丝位进行选择的时钟源。
时钟输入到AVR时钟发生器,再分配到相应的模块。
Table2.时钟源选择
(1)器件时钟选项标定的内部RC振荡器外部时钟128kHz内部振荡器 CKSEL1..001,100011 Note:
1.对于所有的熔丝位,“1”表示未编程,“0”代表已编程。
20ATtiny13 2535D–AVR–04/04 缺省时钟源 ATtiny13 不同的时钟选项将在后续部分进行介绍。
当CPU自掉电模式或省电模式唤醒之后,被选择的时钟源用来为启动过程定时,保证振荡器在开始执行指令之前进入稳定状态。
当CPU从复位开始工作时,还有额外的延迟时间以保证在MCU开始正常工作之前电源达到稳定电平。
这个启动时间的定时由看门狗振荡器完成。
看门狗溢出时间所对应的WDT振荡器周期数列于Table3。
Table3.看门狗振荡器周期数典型的溢出时间4ms64ms 时钟周期数512 8K(8,192) 器件出厂时CKSEL=“10”,SUT=“10”,且CKDIV8编程。
这个缺省设置的时钟源是9.6MHz的内部RC振荡器,初始系统时钟预分频为
8,启动时间为最长。
这种设置保证用户可以通过ISP或并行编程器得到所需的时钟源。
21 2535D–AVR–04/04 标定的片内RC振荡器 振荡器标定寄存器-OSCCAL 标定的片内RC振荡器提供了固定的9.6MHz或4.8MHz的时钟。
这些频率都是3V、25°C下的标称数值。
若频率超出器件标称值,必须对CKDIV8熔丝位编程,以在启动阶段对内部频率8分频,详见P24“系统时钟预分频器”。
这个时钟也可以作为系统时钟,只要按照Table4对熔丝位CKSEL进行编程即可。
选择这个时钟之后就无需外部器件了。
复位时硬件将标定字节加载到OSCCAL寄存器,自动完成对RC振荡器的标定。
在3V、25°C时,这种标定可以提供标称频率±10%的精度。
使用在/avr中所述的标定方法,可能会在任何电压及任何温度下使精度达到±3%。
当使用这个振荡器作为系统时钟时,看门狗仍然使用自己的看门狗定时器作为溢出复位的依据。
更多的有关标定数据的信息请参见P99“校准字节”。
Table4.片内标定的RC振荡器工作模式CKSEL1..010
(1) 标称频率9.6MHz 01 4.8MHz Note:
1.出厂时的设置选择了这个振荡器之后,启动时间由熔丝位SUT确定,如Table5所示。
. Table5.内部标定RC振荡器的启动时间 SUT1..0掉电模式的启动时间 复位时的额外延迟时间(VCC=5.0V) 00 6CK 14CK 01 6CK 14CK+4ms 10
(1) 6CK 14CK+64ms 11 保留 推荐用法BOD使能电源快速上升电源缓慢上升 Note:
1.出厂时的设置。
Bit 读/写初始值
7 6
5 4
3 2
1 0 – CAL6 CAL5 CAL4 CAL3 CAL2 CAL1 CAL0OSCCAL
R R/W R/W R/W R/W R/W R/W R/W
0 标定数据 •Bit7–Res:保留 保留位,读操作返回值为零。
•Bits6..0–CAL6..0:振荡器标定值 将标定数据写入这个地址可以对内部振荡器进行调节以消除由于生产工艺所带来的振荡器频率偏差。
这在复位时自动完成。
当OSCCAL为零时振荡器以最低频率工作。
当对其写如不为零的数据时内部振荡器的频率将增长。
写入0x7F即得到最高频率。
标定的振荡器用来为访问EEPROM和Flash定时。
有写EEPROM和Flash的操作时不要将频率标定到超过标称频率的10%,否则写操作有可能失败。
要注意振荡器只对9.6MHz和4.8MHz这两种频率进行了标定,其他频率则无法保证。
22ATtiny13 2535D–AVR–04/04 外部时钟 ATtiny13 为保证MCU稳定工作,当标定内部RC振荡器时避免大幅度改变标称值。
工作频率突变超过2%将会产生异常现象。
每次对OSCCAL寄存器中值的改变不应超过0x20。
Table6.内部RC振荡器频率范围 OSCCAL数值 最小频率,标称频率的百分比 0x00 50% 0x3F 75% 0x7F 100% 最大频率,标称频率的百分比100%150%200% 为了从外部时钟源驱动芯片,CLKI必须如Figure12所示的进行连接。
同时,熔丝位CKSEL必须编程为“00”。
Figure12.外部时钟配置图 EXTERNALCLOCKSIGNAL CLKIGND 选择了这个振荡器之后,启动时间由熔丝位SUT确定,如Table7所示。
Table7.外部时钟的启动时间 SUT1..000011011 掉电模式和省电模式的启动时间 6CK 6CK 6CK 复位时的额外延迟时间14CK 14CK+4ms14CK+64ms 保留 推荐用法BOD使能电源快速上升电源缓慢上升 为了保证MCU能够稳定工作,不能突然改变外部时钟源的振荡频率。
工作频率突变超过2%将会产生异常现象。
应该在MCU保持复位状态时改变外部时钟的振荡频率。
注意,系统时钟预分频器可用来实现内部时钟频率运行时间改变且保证稳定工作,详见P24“系统时钟预分频器”。
23 2535D–AVR–04/04 128kHz片内振荡器 系统时钟预分频器 时钟预分频寄存器-CLKPR 128kHz片内振荡器为提供时钟频率为128kHz的低功耗振荡器。
该频率为在3V、25°C下的标定值。
通过将CKSEL熔丝位编程为“11”,该时钟作为系统时钟。
当选择该时钟源,启动时间由Table8中所示的SUT熔丝位决定。
Table8.128kHz片内振荡器启动时间 SUT1..0 掉电模式和省电模式的启动时间 00 6CK 01 6CK 10 6CK 11 复位时的额外延迟时间14CK 14CK+4ms14CK+64ms 保留 推荐用法BOD使能电源快速上升电源缓慢上升 ATtiny13系统时钟可通过设置时钟预分频寄存器CLKPR来分频。
该特性可用来降低功 耗。
该分频器对所有时钟源都有效,且可影响CPU时钟频率及所有同步外设。
clkI/O、clkADC、clkCPU及clkFLASH分频因子见Table9。
Bit 读/写初始值
7 6
5 4
3 2
1 0 CLKPCE – – – CLKPS3CLKPS2CLKPS1CLKPS0CLKPR R/W
R R
R R/W R/W R/W R/W
0 0
0 0 见位说明 •Bit7–CLKPCE:时钟预分频器变化使能 CLKPCE位必须置"1”使能CLKPS位。
只有当CLKPR寄存器的其他位同时写"0”时,CLKPCE位改变。
CLKPCE在写入四个周期后或当CLKPS位写入后由硬件清零。
在暂停周期中重新写CLKPCE位,既不扩展暂停周期,也不清除CLKPCE位。
•Bits6..4–Res:保留 保留位,读操作返回值为零。
•Bits3..0–CLKPS3..0:时钟预分频器选择位3-
0 这几位定义所选时钟源与内部系统时钟所分频因子。
这几位写入运行时间来改变时钟频率以适应运行需要。
当作为MCU主时钟输入分频器,使用分频因子时,所有同步外设速度将会下降。
分频因子见Table9。
为避免时钟频率的无意改变,对CLKPS位的写入必须按照如下步骤进行:
1.将CLKPCE位写"1”,而CLKPR寄存器的其他位写"0”。

2.在四个时钟周期内,将期望值写入CLKPS,并在CLKPCE位写"0”。
在改变预分频器设置时必须禁止中断,以保证在写入过程中不会出现中断。
CKDIV8熔丝位决定CLKPS位的初始值。
若CKDIV8未编程,CLKPS位复位为“0000”;若CKDIV8已编程,CLKPS位复位为“0011”,给出启动时分频因子为
8。
若所选时钟源频率大于当前工作状态下器件最大频率时,应利用该特性分频。
注意,CLKPS位写入值不受 24ATtiny13 2535D–AVR–04/04 转换时间 ATtiny13 CKDIV8熔丝位设置影响。
若所选时钟源频率大于当前工作状态下器件最大频率,应用程序必须保证选择一个足够大的分频因子。
芯片出厂时CKDIV8熔丝位已编程。
Table9.时钟预分频器选择 CLKPS3 CLKPS2
0 0
0 0
0 0
0 0
0 1
0 1
0 1
0 1
1 0
1 0
1 0
1 0
1 1
1 1
1 1
1 1 CLKPS1
0011001100110011 CLKPS00101010101010101 时钟分频因子1248163264 128256保留保留保留保留保留保留保留 当预分频器转换时,系统时钟预分频器保证时钟系统中不会出现毛刺,且频率低于转换前后的频率。
脉动计数器使预分频器在未分频时钟频率下运行,这可能比CPU时钟频率快。
因此即使预分频器可读,我们也无法确定其状态,所以我们也无法得到准确的转换时间。
CLKPS值的写入时间介于T1+T2与T1+2*T2之间。
在此间隔中,产生2个时钟边沿。
其中T1为前一个时钟周期,T2为新设置后相应的时钟周期。
25 2535D–AVR–04/04 电源管理及睡眠模式 MCU控制寄存器-MCUCR AVR微控制器的高性能与针对工业级的有效代码使其成为低功耗器件的最佳选择。
睡眠模式可以使应用程序关闭MCU中没有使用的模块,从而降低功耗。
AVR具有不同的睡眠模式,允许用户根据自己的应用要求实施剪裁。
进入睡眠模式的条件是置位寄存器MCUCR的SE,然后执行SLEEP指令。
具体哪一种模式(空闲模式、ADC噪声抑制模式、掉电模式)由MCUCR的SM1和SM0决定,如Table10所示。
使能的中断可以将进入睡眠模式的MCU唤醒。
经过启动时间,外加4个时钟周期后,MCU就可以运行中断例程了。
然后返回到SLEEP的下一条指令。
唤醒时不会改变寄存器文件和SRAM的内容。
如果在睡眠过程中发生了复位,则MCU唤醒后从中断向量开始执行。
P20Figure11介绍了ATtiny13不同的时钟系统及其分布。
此图在选择合适的睡眠模式时非常有用。
MCU控制寄存器包含了电源管理的控制位。
Bit 读/写初始值
7 6
5 4
3 2
1 0 – PUD SE SM1 SM0 — ISC01ISC00MCUCR
R R/W R/W R/W R/W
R R/W R/W
0 0
0 0
0 0
0 0 •Bit5–SE:休眠使能 为了使MCU在执行SLEEP指令后进入休眠模式,SE必须置位。
为了确保进入休眠模式是程序员的有意行为,建议仅在SLEEP指令的前一条指令置位SE。
MCU一旦唤醒立即清除SE。
•Bits4,3–SM1..0:休眠模式选择位2..0 如Table10所示,这些位用于选择具体的休眠模式。
Table10.休眠模式选择 SM1 SM0
0 0
0 1
1 0
1 1 •Bit2–Res:保留保留位,读操作返回值为零。
休眠模式空闲模式ADC噪声抑制模式掉电模式保留 26ATtiny13 2535D–AVR–04/04 空闲模式ADC噪声抑制模式掉电模式 ATtiny13 当SM1..0为00时,SLEEP指令将使MCU进入空闲模式。
在此模式下,CPU停止运行,而模拟比较器、ADC、定时器/计数器、看门狗和中断系统继续工作。
这个休眠模式只停止了clkCPU和clkFLASH,其他时钟则继续工作。
象定时器溢出等内外部中断都可以唤醒MCU。
如果不需要从模拟比较器中断唤醒MCU,为了减少功耗,可以切断比较器的电源。
方法是置位模拟比较器控制和状态寄存器ACSR的ACD。
如果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“外部中断”。
Table11.在不同睡眠模式下活动的时钟以及唤醒源 工作的时钟 振荡器 唤醒源 clkCPUclkFLASHclkIOclkADC使能的主时钟INT0与引脚变化SPM/EEPROM准备好ADCOtherI/O看门狗中断 睡眠模式空闲模式ADC噪声抑制模式掉电模式
X X
X Note:
1.INT0只有电平中断
X X
X XXX
X X
(1)
X X
X X
(1)
X 27 2535D–AVR–04/04 最小化功耗 模数转换器模拟比较器 掉电检测BOD片内基准电压 看门狗定时器端口引脚 试图降低AVR控制系统的功耗时需要考虑几个问题。
一般来说,要尽可能利用睡眠模式,并且使尽可能少的模块继续工作。
不需要的功能必须禁止。
下面的模块需要特殊考虑以达到尽可能低的功耗。
使能时,ADC在睡眠模式下继续工作。
为了降低功耗,在进入睡眠模式之前需要禁止ADC。
重新启动后的第一次转换为扩展的转换。
具体请参照P76“模数转换器”。
在空闲模式时,如果没有使用模拟比较器,可以将其关闭。
在ADC噪声抑制模式下也是如此。
在其他睡眠模式模拟比较器是自动关闭的。
如果模拟比较器使用了内部电压基准源,则不论在什么睡眠模式下都需要关闭它。
否则内部电压基准源将一直使能。
请参见P73“模拟比较器”以了解如何配置模拟比较器。
如果系统没有利用掉电检测器BOD,这个模块也可以关闭。
如果熔丝位BODLEVEL被编程,从而使能了BOD功能,它将在各种休眠模式下继续工作。
在深层次的休眠模式下,这个电流将占总电流的很大比重。
请参看P32“掉电检测”以了解如何配置BOD。
使用BOD、模拟比较器和ADC时可能需要内部电压基准源。
若这些模块都禁止了,则基准源也可以禁止。
重新使能后用户必须等待基准源稳定之后才可以使用它。
如果基准源在休眠过程中是使能的,其输出立即可以使用。
请参见P34“片内基准电压”以了解基准源启动时间的细节。
如果系统无需利用看门狗,这个模块也可以关闭。
若使能,则在任何休眠模式下都持续工作,从而消耗电流。
在深层次的睡眠模式下,这个电流将占总电流的很大比重。
请参看P40“中断”以了解如何配置看门狗定时器。
进入休眠模式时,所有的端口引脚都应该配置为只消耗最小的功耗。
最重要的是避免驱动电阻性负载。
在休眠模式下I/O时钟clkI/O和ADC时钟clkADC都被停止了,输入缓冲器也禁止了,从而保证输入电路不会消耗电流。
在某些情况下输入逻辑是使能的,用来检测唤醒条件。
用于此功能的具体引脚请参见P45“数字输入使能和休眠模式”。
如果输入缓冲器是使能的,此时输入不能悬空,信号电平也不应该接近VCC/2,否则输入缓冲器会消耗额外的电流。
对于模拟输入引脚,数字输入缓冲应始终禁用。
即使在工作模式下,在输入引脚的接近VCC/2的模拟信号电平会带来明显的电流。
数字输入缓冲可通过写DIDR0来禁用,参见P75“数字输入禁用寄存器0–DIDR0”。
28ATtiny13 2535D–AVR–04/04 系统控制和复位 复位AVR 复位源 ATtiny13 复位时所有的I/O寄存器都被设置为初始值,程序从复位向量处开始执行。
复位向量处的指令必须是绝对跳转JMP指令,以使程序跳转到复位处理例程。
如果程序永远不利用中断功能,中断向量可以由一般的程序代码所覆盖。
Figure13为复位逻辑的电路图。
Table12则定义了复位电路的电气参数。
复位源有效时I/O端口立即复位为初始值。
此时不要求任何时钟处于正常运行状态。
所有的复位信号消失之后,芯片内部的一个延迟计数器被激活,将内部复位的时间延长。
这种处理方式使得在MCU正常工作之前有一定的时间让电源达到稳定的电平。
延迟计数器的溢出时间通过熔丝位SUT与CKSEL设定。
延迟时间的选择请参见P20“时钟源”。
TheATtiny13有4个复位源: •上电复位。
电源电压低于上电复位门限VPOT时,MCU复位。
•外部复位。
引脚RESET上的低电平持续时间大于最小脉冲宽度时MCU复位。
•看门狗复位。
看门狗使能并且看门狗定时器溢出时复位发生。
•掉电检测复位。
掉电检测复位功能使能,且电源电压低于掉电检测复位门限VBOT时MCU即复位。
Figure13.复位逻辑 DATABUS BODLEVEL[1..0] Pull-upResistorSPIKEFILTER MCUStatusRegister(MCUSR) Power-onResetCircuit Brown-outResetCircuit PORFBORFEXTRFWDRF WatchdogOscillator Clock CK Generator CKSEL[1:0]SUT[1:0] DelayCounters TIMEOUT 29 2535D–AVR–04/04 Table12.复位特性
(1) 符号参数 条件 最小值 VPOT 上电复位门限电压(电压由低到高上升) 上电复位门限电压(电压由高到低跌落)
(2) TA=-40-85°CTA=-40-85°
C VRSTtRST RESET门限电压RESET最小脉冲宽度 VCC=1.8V-5.5VVCC=1.8V-5.5V 0.1VCC Notes:
1.这些值仅作为参考,实际值待测试。

2.电压下降时,只有电压低于VPOT时复位才会发生。
典型值 1.2 1.1 最大值 0.9VCC2.5 单位
V VVµs 30ATtiny13 2535D–AVR–04/04 上电复位 ATtiny13 上电复位(POR)脉冲由片内检测电路产生。
检测电平请参见Table12。
无论何时VCC低于检测电平POR即发生。
POR电路可以用来触发启动复位,或者用来检测电源故障。
POR电路保证器件在上电时复位。
VCC达到上电门限电压后触发延迟计数器。
在计数器溢出之前器件一直保持为复位状态。
当VCC下降时,只要低于检测门限,RESET信号立即生效。
Figure14.MCU启动过程,RESET连接到VCC VCC VPOT RESET VRST TIME-OUT tTOUT INTERNALRESET Figure15.MCU启动过程,RESET由外电路控制 VCC VPOT RESET VRST TIME-OUT tTOUT INTERNALRESET 31 2535D–AVR–04/04 外部复位 外部复位由外加于RESET引脚的低电平产生。
当复位低电平持续时间大于最小脉冲宽度时(参见Table12)即触发复位过程,即使此时并没有时钟信号在运行。
当外加信号达到复位门限电压VRST(上升沿)时,tTOUT延时周期开始。
延时结束后MCU即启动。
Figure16.工作过程中发生外部复位 CC 掉电检测 ATtiny13具有片内BOD(Brown-outDetection)电路,通过与固定的触发电平的对比来检 测工作过程中VCC的变化。
此触发电平通过熔丝位BODLEVEL来设定。
BOD的触发电平具有迟滞功能以消除电源尖峰的影响。
这个迟滞功能可以解释为VBOT+=VBOT+VHYST/2以及VBOT-=VBOT-VHYST/2。
Table13.BODLEVEL熔丝位编码
(1) BODLEVEL[1..0]熔丝位 最小VBOT 11 10 典型VBOT 最大VBOT BOD禁用 1.8 单位 01 2.7
V 00 4.3 Note:
1.对某些芯片VBOT可能低于其标称的最小电压。
对这些芯片,在产品测试时,必须有VCC=VBOT,以保证电压低于正常工作电压VCC时会有掉电复位。
Table14.掉电特性 符号 参数 最小典型最大 值 值 值 单位 VHYSTtBOD BOD迟滞掉电复位最小脉宽 50 mV
2 µs 当BOD使能,一旦VCC下降到触发电平以下(VBOT-,Figure17),BOD复位立即被激发。
当VCC上升到触发电平以上时(VBOT+,Figure17),延时计数器开始计数,一旦超过溢出时间tTOUT,MCU即恢复工作。
如果VCC一直低于触发电平并保持如Table12所示的时间tBOD,BOD电路将只检测电压跌落。
32ATtiny13 2535D–AVR–04/04 看门狗复位 ATtiny13 Figure17.工作过程中的掉电复位 VCC VBOT- RESET VBOT+ TIME-OUT tTOUT INTERNALRESET 看门狗定时器溢出时将产生持续时间为1个CK周期的复位脉冲。
在脉冲的下降沿,延时定时器开始对tTOUT记数。
请参见P40以了解看门狗定时器的具体操作过程。
Figure18.工作过程中发生看门狗复位 CC CK MCU状态寄存器-MCUSR MCU状态寄存器提供了有关引起MCU复位的复位源的信息。
Bit 读/写初始值
7 6
5 4
3 2
1 0 – – – – WDRFBORFEXTRFPORF
R R
R R R/W R/W R/W R/W
0 0
0 0 参见位说明 •Bits7..4–Res:保留 保留位,读操作返回值为零。
•Bit3–WDRF:看门狗复位标志 看门狗复位发生时置位。
上电复位将使其清零,也可以通过写”0”来清除。
•Bit2–BORF:掉电检测复位标志 掉电检测复位发生时置位。
上电复位将使其清零,也可以通过写”0”来清除。
•Bit1–EXTRF:外部复位标志 外部复位发生时置位。
上电复位将使其清零,也可以通过写”0”来清除。
•Bit0–PORF:上电复位标志 上电复位发生时置位。
只能通过写”0”来清除。
MCUSR 33 2535D–AVR–04/04 片内基准电压 基准电压使能信号和启动时间 为了使用这些复位标志来识别复位条件,用户应该尽早读取此寄存器的数据,然后将其复
位。
如果在其他复位发生之前将此寄存器复位,则后续复位源可以通过检查复位标志来了解。
ATtiny13具有片内能隙基准源,用于掉电检测,或者是作为模拟比较器或ADC的输入。
电压基准的启动时间可能影响其工作方式。
启动时间列于Table15。
为了降低功耗,可以控制基准源仅在如下情况打开:
1.BOD使能(熔丝位BODLEVEL[1..0]被编程)
2.能隙基准源连接到模拟比较器(ACSR寄存器的ACBG置位)
3.ADC使能 因此,当BOD被禁止时,置位ACBG或使能ADC后要启动基准源。
为了降低掉电模式的功耗,用户可以禁止上述三种条件,并在进入掉电模式之前关闭基准源。
Table15.内部电压基准源的特性
(1) 符号 参数 VBG 能隙基准源电压 tBG 能隙基准源启动时间 IBG 能隙基准源功耗 Note:
1.这些值仅作为参考,实际值待测试。
最小值典型值最大值单位 1.0 1.1 1.2
V 40 70 µs 15 µ
A 34ATtiny13 2535D–AVR–04/04 看门狗定时器 ATtiny13 ATtiny13有一个增强型的看门狗定时器(WDT),其主要特征为:•独立的片上振荡器提供时钟•3种工作模式 –中断–系统复位–中断与系统复位•暂停时间从16ms到8s可选•看门狗熔丝始终处于故障保险模式。
Figure19.看门狗定时器 128kHzOSCILLATOR OSC/2KOSC/4KOSC/8KOSC/16KOSC/32KOSC/64KOSC/128KOSC/256KOSC/512KOSC/1024K WATCHDOGRESET WDE WDP0WDP1WDP2WDP3 MCURESET WDIF WDIE INTERRUPT 看门狗定时器由独立的128kHz片内振荡器驱动。
当计数器达到给定的溢出值时,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寄存器中WDRFinr16,MCUSRandir16,(0xff&(0<(1) voidWDT_off(void){ __disable_interrupt();__watchdog_reset();/*清除MCUSR寄存器中WDRF*/MCUSR&=~(1<1.代码例程假设包括所需头文件。
注意:若看门狗由于错误指针或掉电状态等使看门狗出现意外使能,芯片将复位看门狗定时器将保持使能。
如果编码没有设置处理看门狗,则可能导致溢出复位出现死循环。
为避免出现这种状况,即使没有使用看门狗,应用程序在初始化时应对WDRF与WDE控制位清零。
下面的例子分别用汇编和C语言实现了看门狗定时器溢出值的改变。
36ATtiny13 2535D–AVR–04/04 ATtiny13 看门狗定时器控制寄存器-WDTCR 汇编代码例程
(1) WDT_Prescaler_Change:;关闭全局中断cli;复位看门狗定时器wdr;启动时序inr16,WDTCRorir16,(1<(1) voidWDT_Prescaler_Change(void){ __disable_interrupt();__watchdog_reset();/*启动时序*/WDTCR|=(1<1.代码例程假设包括所需头文件。
注意:看门狗定时器应在WDP位改变前复位,因为当改变WDP转换到一个短溢出周期时可能会导致暂停。
Bit 读/写初始值 7WDTIF R/W0 6WDTIE R/W0 5WDP3R/W
0 4WDCE R/W0 3WDER/W
X 2WDP2R/W
0 1WDP1R/W
0 0WDP0R/W
0 WDTCR 37 2535D–AVR–04/04 •Bit7-WDTIF:看门狗定时器中断标志 当看门狗定时器出现溢出且看门狗定时器配置为中断时,该位置位。
当执行相应的中断程序时,WDTIF由硬件清除;或者在该位写入逻辑"1”来清除。
当SREG寄存器的I位与WDTIE置位,执行看门狗溢出中断。
•Bit6-WDTIE:看门狗定时器中断使能 当该位与SREG寄存器的I位置位,看门狗中断使能。
如果同时也将WDE清除,看门狗定时器进入中断模式,一旦看门狗定时器程序暂停,则执行相应的中断。
若WDE置位,则看门狗定时器处于中断与系统复位模式。
看门狗定时器的第一次溢出将设置WDTIF。
执行相应的中断向量将会由硬件最大清除WDTIE与WDTIF(看门狗进入系统复位模式)。
这种方式会保证使用中断时看门狗定时器的安全性。
在中断与系统复位模式下,WDTIE在每次中断后必须设置。
然而它不能在中断服务子程序中执行,因为这可能会损害看门狗系统复位模式的安全性。
如果在下一次溢出前没有程序中断,则进入系统复位模式。
Table16.看门狗定时器配置 WDTON WDE WDTIE
0 0
0 0
0 1
0 1
0 0
1 1
1 x x 模式停止中断模式系统复位模式中断与系统复位模式 系统复位模式 暂停活动无中断复位中断,然后进入系统复位模式复位 •Bit4-WDCE:看门狗修改使能 该位用在改变WDE与预分频位的时序中。
WDCE置位来清除WDE位,与/或改变预分频位。
一旦置"1”,硬件将在四个时钟周期后对WDCE清零。
•Bit3-WDE:看门狗系统复位使能 WDE由MCUSR寄存器的WDRF决定。
这就是说当WDRF设置时,WDE也设置。
要清除WDE,必须先清除WDRF。
这一特性保证状态出错时的多重复位,及出错后的安全启动。
•Bit5,2..0-WDP3..0:看门狗定时器预分频器3,2,1和
0 WDP3..0决定看门狗定时器的预分频器。
如P39Table17所示。
38ATtiny13 2535D–AVR–04/04 ATtiny13 . Table17.看门狗定时器预分频器选项 WDP3WDP2WDP1WDP0 看门狗振荡器周期 VCC=5.0V时典型的溢出周期
0 0
0 0 2K(2048)周期 16ms
0 0
0 1 4K(4096)周期 32ms
0 0
1 0 8K(8192)周期 64ms
0 0
1 1 16K(16384)周期 0.125s
0 1
0 0 32K(32768)周期 0.25s
0 1
0 1 64K(65536)周期 0.5s
0 1
1 0 128K(131072)周期 1.0s
0 1
1 1 256K(262144)周期 2.0s
1 0
0 0 512K(524288)周期 4.0s
1 0
0 1 1024K(1048576)周期 8.0s
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
的中断向量 本节描述ATtiny13的中断处理。
更一般的AVR中断处理请参见P9“复位与中断处理”。
Table18.复位和中断向量 程序 向量号 地址 中断源
1 0x0000RESET
2 0x0001INT0
3 0x0002PCINT0
4 0x0003TIM0_OVF
5 0x0004EE_RDY
6 0x0005ANA_COMP
7 0x0006TIM0_COMPA
8 0x0007TIM0_COMPB
9 0x0008WDT 10 0x0009ADC 中断定义外部引脚电平引发的复位,上电复位,掉电检测复位,看门狗复位外部中断请求0外部中断请求1定时器/计数器溢出EEPROM准备好模拟比较器定时器/计数器比较匹配A定时器/计数器比较匹配B看门狗暂停ADC转换结束 如果程序永远不使能中断,中断向量就没有意义。
用户可以在此直接写程序。
ATtiny13复位与中断向量地址典型设置为: 地址0x00000x00010x00020x00030x00040x00050x00060x00070x00080x0009;0x000A0x000B0x000C0x000D ... 符号代码rjmpRESETrjmpEXT_INT0rjmpPCINT0rjmpTIM0_OVFrjmpEE_RDYrjmpANA_COMPrjmpTIM0_COMPArjmpTIM0_COMPBrjmpWATCHDOGrjmpADC 说明;复位中断向量;IRQ0中断向量;PCINT0中断向量;Timer0溢出中断向量;EEPROM准备好中断向量;模拟比较器中断向量;Timer0比较A中断向量;Timer0比较B中断向量;看门狗中断向量;ADC转换中断向量 RESET:ldir16,low(RAMEND);主程序 outSPL,r16 ;设置堆栈指针为RAM的顶部 sei ;使能中断 xxx ......... 40ATtiny13 2535D–AVR–04/04 I/O端口 介绍 ATtiny13 作为通用数字I/O使用时,所有AVRI/O端口都具有真正的读-修改-写功能。
这意味着用SBI或CBI指令改变某些管脚的方向时不会无意地改变其他管脚的方向。
输出缓冲器具有对称的驱动能力,可以输出或吸收大电流,直接驱动LED。
所有的端口引脚都具有与电压无关的上拉电阻。
并有保护二极管与VCC和地相连,如Figure20所示。
请参见P112“电气特性”以了解完整的参数列表。
Figure20.I/O引脚等效原理图 Pxn Cpin RpuLogic SeeFigure"GeneralDigitalI/O"for Details 作为通用数字I/O的端口 本节所有的寄存器和位以通用格式表示:小写的“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端口。
Figure21为一个I/O端口引脚的说明。
41 2535D–AVR–04/04 配置引脚 转换引脚输入输出间转换 Figure21.通用数字I/O
(1) QDDDxnQCLR RESET PUD WDxRDx DATABUS Pxn 1QD PORTxn
0 QCLR SLEEP RESETRRx WRx WPx SYNCHRONIZER DQLQ DQPINxn
Q RPxclkI/O PUD:SLEEP:clkI/O: PULLUPDISABLESLEEPCONTROLI/OCLOCK WDx:RDx:WRx:RRx:RPx:WPx: WRITEDDRxREADDDRxWRITEPORTxREADPORTxREGISTERREADPORTxPINWRITEPINxREGISTER Note:
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)作为中间步骤。
42ATtiny13 2535D–AVR–04/04 读取引脚上的数据 ATtiny13 Table19总结了引脚的控制信号。
Table19.端口引脚配置 PUDDDxnPORTxn(inMCUCR)I/O
0 0
X 输入
0 1
0 输入
0 1
1 输入
1 0
X 输出
1 1
X 输出 上拉电阻NoYesNoNoNo 说明高阻态(Hi-Z)被外部电路拉低时将输出电流高阻态(Hi-Z)输出低电平(吸收电流)输出高电平(输出电流) 不论如何配置DDxn,都可以通过读取PINxn寄存器来获得引脚电平。
如Figure21所示,PINxn寄存器的各个位与其前面的锁存器组成了一个同步器。
这样就可以避免在内部时钟状态发生改变的短时间范围内由于引脚电平变化而造成的信号不稳定。
其缺点是引入了延迟。
Figure22为读取引脚电平时同步器的时序图。
最大和最小传输延迟分别为tpd,max和tpd,min。
Figure22.读取引脚数据时的同步 SYSTEMCLKINSTRUCTIONS SYNCLATCHPINxnr17 XXX XXX inr17,PINx 0x00tpd,max tpd,min 0xFF 43 2535D–AVR–04/04 下面考虑第一个系统时钟下降沿之后起始的时钟周期。
当时钟信号为低时锁存器是关闭的;而时钟信号为高时信号可以自由通过,如图中SYNCLATCH信号的阴影区所示。
时钟为低时信号即被锁存,然后在紧接着的系统时钟上升沿锁存到PINxn寄存器。
如tpd,max和tpd,min所示,引脚上的信号转换延迟界于½~1½个系统时钟。
如Figure23所示,读取软件赋予的引脚电平时需要在赋值指令out和读取指令in之间有一个时钟周期的间隔,如nop指令。
out指令在时钟的上升沿置位SYNCLATCH信号。
此时同步器的延迟时间tpd为一个系统时钟。
Figure23.读取软件赋予的引脚电平的同步 SYSTEMCLK r16 0xFF INSTRUCTIONS outPORTx,r16 nop inr17,PINx SYNCLATCH PINxn r17 0x00 tpd 0xFF 44ATtiny13 2535D–AVR–04/04 数字输入使能和休眠模式 未连接引脚的处理 2535D–AVR–04/04 ATtiny13 下面的例子演示了如何置位端口B的引脚0和
1,清零引脚2和
3,以及将引脚4到5设 置为输入,并且为引脚4设置上拉电阻。
然后将各个引脚的数据读回来。
如前面讨论的那样,我们在输出和输入语句之间插入了一个nop指令。
汇编代码例程
(1) ...;定义上拉电阻和设置高电平输出;为端口引脚定义方向ldir16,(1<1.在汇编程序里使用了两个暂存器。
其目的是为了使整个操作过程的时间最短。
通过拉高引脚0、1与
4,直到方向位设置正确,定义位2、3为低,且重新定义为0与1为强驱动。
如Figure21所示,数字输入信号(施密特触发器的输入)可以钳位到地。
图中的SLEEP信号由MCU休眠控制器在各种掉电模式、省电模式以及Standby模式下设置,以防止在输入悬空或模拟输入电平接近VCC/2时消耗太多的电流。
引脚作为外部中断输入时SLEEP信号无效。
但若外部中断没有使能,SLEEP信号仍然有效。
引脚的第二功能使能时SLEEP也让位于第二功能,如P46“端口的第二功能”里描述的那样。
如果逻辑高电平(“1”)出现在一个被设置为"上升沿、下降沿或任何逻辑电平变化都引起中断"的外部异步中断引脚上,即使该外部中断未被使能,但从上述休眠模式唤醒时,相应的外部中断标志位仍会被置"1”。
这是因为引脚电平在休眠模式下被钳位到"0”电平。
唤醒过程造成了引脚电平从"0”到”1”的变化。
如果有引脚未被使用,建议给这些引脚赋予一个确定电平。
虽然如上文所述,在深层休眠模式下大多数数字输入被禁用,但还是需要避免因引脚没有确定的电平而造成悬空引脚在其它数字输入使能模式(复位、工作模式、空闲模式)消耗电流。
45 端口的第二功能 最简单的保证未用引脚具有确定电平的方法是使能内部上拉电阻。
但要注意的是复位时 上拉电阻将被禁用。
如果复位时的功耗也有严格要求则建议使用外部上拉或下拉电阻。
不 推荐直接将未用引脚与
VCC或GND连接,因为这样可能会在引脚偶然作为输出时出现冲击电流。
除了通用数字I/O功能之外,大多数端口引脚都具有第二功能。
Figure24说明了由Figure21简化得出的端口引脚控制信号是如何被第二功能取代的。
这些被重载的信号不会出现在所有的端口引脚,但本图可以看作是适合于AVR系列处理器所有端口引脚的一般说明。
Figure24.端口的第二功能
(1) PUOExn PUOVxn 1
0 PUD DATABUS DDOExnDDOVxn 10 PVOExnPVOVxn QDDDxnQCLR RESET WDxRDx
1 1 Pxn0 QD
0 PORTxn PTOExn DIEOExn QCLR DIEOVxn
1 0 SLEEP RESET RRx WRx WPx SYNCHRONIZER DSETQLCLRQ DQPINxn CLRQ RPx clkI/O DIxn AIOxn PUOExn:PUOVxn:DDOExn:DDOVxn:PVOExn:PVOVxn:DIEOExn:DIEOVxn:SLEEP: PTOExn: PxnPULL-UPOVERRIDEENABLEPxnPULL-UPOVERRIDEVALUEPxnDATADIRECTIONOVERRIDEENABLEPxnDATADIRECTIONOVERRIDEVALUEPxnPORTVALUEOVERRIDEENABLEPxnPORTVALUEOVERRIDEVALUEPxnDIGITALINPUT-ENABLEOVERRIDEENABLEPxnDIGITALINPUT-ENABLEOVERRIDEVALUESLEEPCONTROL Pxn,PORTTOGGLEOVERRIDEENABLE PUD:WDx:RDx:RRx:WRx:RPx:WPx:clkI/O:DIxn:AIOxn: PULLUPDISABLEWRITEDDRxREADDDRxREADPORTxREGISTERWRITEPORTxREADPORTxPINWRITEPINxI/OCLOCKDIGITALINPUTPINnONPORTxANALOGINPUT/OUTPUTPINnONPORTx Note:
1.WPx,WDx,RLx,RPx和RDx对于同一个端口的所有引脚都是一样的。
clkI/O,SLEEP和PUD则对所有的端口都是一样的。
其他信号只对某一个引脚有效。
46ATtiny13 2535D–AVR–04/04 ATtiny13 Table20为重载信号的简介。
表中没有给出Figure24的引脚和端口索引。
这些重载信号是由第二功能模块产生的。
Table20.第二功能重载信号的一般说明 信号名称 全称 说明 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端口B的第二功能 Bit 读/写初始值
7 6
5 4
3 2
1 0 – PUD SE SM1 SM0 – ISC01ISC00MCUCR
R R/W R/W R/W R/W
R R/W R/W
0 0
0 0
0 0
0 0 •Bits7,2–Res:保留 保留位,读操作返回值为零。
•Bit6–PUD:上拉禁用 当该位为
1,即使DDxn与PORTxn寄存器配置为使能上拉电阻({DDxn,PORTxn}=0b01),I/O端口上拉电阻禁用,详见P42“配置引脚”。
端口B的第二功能列于Table21。
Table21.端口B

的第二功能 端口引脚 第二功能 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) Notes:
1.

复位引脚,调试线I/O,ADC输入通道或引脚变化中断。

2.ADC输入通道或引脚变化中断。

3.ADC输入通道,时钟输入或引脚变化中断。

4.串行时钟输入,定时器/计数器时钟输入,ADC输入通道0或引脚变化中断
5.串行数据输入,模拟比较器反向输入,输出比较与定时器/计数器的PWM输出
B,外部 中断0或引脚变化中断
6.串行数据输入,模拟比较器正向输入,输出比较与定时器/计数器的PWM输出A或引脚 变化中断 Table22与P49Table23端口B的第二功能的重载信号见P46Figure24。
48ATtiny13 2535D–AVR–04/04 ATtiny13 Table22.PB5..PB3重载信号 信号PB5/RESET/名称ADC0/PCINT5PUOERSTDISBL
(1)•DWEN
(1) PB4/ADC2/PCINT40 PUOV1
0 DDOERSTDISBL
(1)•DWEN
(1)
0 DDOV调试线传送
0 PVOE0
0 PVOV0
0 PTOEDIEOE
0 RSTDISBL
(1)+(PCINT5•PCIE+ADC0D) 0PCINT4•PCIE+ADC2D DIEOVADC0D ADC2D DI PCINT5输入 PCINT4输入 AIO RESET输入,ADC0输入ADC2输入 Note:1.1当熔丝位为“0”(已编程)。
Table23.PB2..PB0重载信号 信号PB2/SCK/ADC1/名称T0/PCINT2 PB1/MISO/AIN1/OC0B/INT0/PCINT1 PUOE0
0 PUOV0
0 DDOE0
0 DDOV0
0 PVOE0 OC0B使能 PVOV0 OC0B PTOE0
0 DIEOEPCINT2•PCIE+ADC1DPCINT1•PCIE+AIN1D DIEOVADC1D AIN1D DI T0/INT0/ PCINT2输入 AIO ADC1输入 PCINT1输入模拟比较器反向输入 PB3/ADC3/CLKI/PCINT30000000PCINT3•PCIE+ADC3D ADC3DPCINT3输入ADC3输入 PB0/MOSI/AIN0/AREF/OC0A/PCINT00000OC0A使能OC0A0PCINT0•PCIE+AIN0DAIN0DPCINT0输入 模拟比较器正向输入 49 2535D–AVR–04/04 I/O端口寄存器说明 端口B数据寄存器-PORTB Bit 读/写初始值 端口B数据方向寄存器-DDRB Bit 读/写初始值 端口B输入引脚地址-PINB Bit 读/写初始值
7 6
5 4
3 2
1 0 – – PORTB5PORTB4PORTB3PORTB2PORTB1PORTB0PORTB
R R R/W R/W R/W R/W R/W R/W
0 0
0 0
0 0
0 0
7 6
5 4
3 2
1 0 – – DDB5 DDB4 DDB3 DDB2 DDB1 DDB0 DDRB
R R R/W R/W R/W R/W R/W R/W
0 0
0 0
0 0
0 0
7 6
5 4
3 2
1 0 – – PINB5
PINB4PINB3PINB2PINB1PINB0 PINB
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 50ATtiny13 2535D–AVR–04/04 ATtiny13 外部中断 MCU控制寄存器-MCUCR 外部中断通过引脚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熔丝位定义。
外部中断控制寄存器A包含中断敏感控制的控制位。
Bit 读/写初始值
7 6
5 4
3 2
1 0 – PUD SE SM1 SM0 – ISC01ISC00MCUCR
R R/W R/W R/W R/W
R R/W R/W
0 0
0 0
0 0
0 0 •Bits1,0–ISC01,ISC00:中断敏感方式控制0Bit1与Bit0 外部中断0由引脚INT0激发,如果SREG寄存器的I标志位和相应的中断屏蔽位置位的话。
触发方式如Table24所示。
在检测边沿前MCU首先采样INT0引脚上的电平。
如果选择了边沿触发方式或电平变化触发方式,那么持续时间大于一个时钟周期的脉冲将触发中断,过短的脉冲则不能保证触发中断。
如果选择低电平触发方式,那么低电平必须保持到当前指令执行完成。
Table24.中断0敏感控制 ISC01 ISC00说明
0 0 INT0为低电平时产生中断请求
0 1 INT0引脚上任意的逻辑电平变化都将引发中断
1 0 INT0的下降沿产生异步中断请求
1 1 INT0的上升沿产生异步中断请求 51 2535D–AVR–04/04 通用中断屏蔽寄存器-GIMSK通用中断标志寄存器-GIFR Bit 读/写初始值
7 6
5 4
3 2
1 0 – INT0 PCIE – – – – – GIMSK
R R/W R/W
R R
R R
R 0
0 0
0 0
0 0
0
Bits7,4..0–Res:保留 保留位,该操作返回值为零。
•Bit6–INT0:外部中断请求0使能 当INT0为'1’,而且状态寄存器SREG的I标志置位,相应的外部引脚中断就使能了。
中断敏感电平控制0位1/0(ISC01与ISC00)决定中断是由上升沿、下降沿,还是INT0电平触发的。
只要使能,即使INT0引脚被配置为输出,只要引脚电平发生了相应的变化,中断可将产生。
•Bit5–PCIE:引脚变化中断使能 当PCIE位为'1’,而且状态寄存器SREG的I标志置位,引脚变化中断使能。
使能的PCINT5..0引脚上电平变化将造成中断。
执行相应的PCI中断程序。
PCINT5..0各引脚由PCMSK0寄存器单独使能。
Bit 读/写初始值
7 6
5 4
3 2
1 0 – INTF0 PCIF – – – – – GIFR
R R/W R/W
R R
R R
R 0
0 0
0 0
0 0
0
Bits7,4..0–Res:保留 保留位,该操作返回值为零。
•Bit6–INTF0:外部中断标志
0 INT0引脚电平发生跳变时触发中断请求,并置位相应的中断标志INTF0。
如果SREG的位I以及GIMSK寄存器相应的中断使能位INT0为”1”,MCU即跳转到相应的中断向量。
进入中断服务程序之后该标志自动清零。
此外,标志位也可以通过写入”1”来清零。
当INT0配置为电平中断时,该标志始终清零。
•Bit5–PCIF:引脚变化中断标志 当PCINT5..0任意引脚电平变化触发中断请求,PCIF置"1”。
若SREG的位I与GIMSK寄存器的PCIE位为"1”,MCU即跳转到相应的中断向量。
进入中断服务程序之后该标志自动清零。
此外,标志位也可以通过写入”1”来清零。
52ATtiny13 2535D–AVR–04/04 ATtiny13 引脚变化屏蔽寄存器-PCMSK Bit 读/写初始值
7 6
5 4
3 2
1 0 – – PCINT5PCINT4PCINT3PCINT2PCINT1PCINT0PCMSK
R R R/W R/W R/W R/W R/W R/W
0 0
1 1
1 1
1 1 •Bits7,6–Res:保留 保留位,该操作返回值为零。
•Bits5..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) 综述 Figure25为8位定时器/计数器的简化框图。
实际引脚排列请参考P1“ATtiny13芯片引脚”。
CPU可以访问的I/O寄存器,包括位和引脚,以粗体显示。
I/O寄存器和位的位置列于P65“8位定时器/计数器寄存器的说明”。
Figure25.8位T/C方框图 CountClearDirection ControlLogic clkTn Timer/CounterTCNTn TOPBOTTOM = =
0 = TOVn(Int.Req.)ClockSelect EdgeDetector (FromPrescaler) OCnA(Int.Req.) WaveformGeneration TnOCnA DATABUS OCRnA = OCRnB FixedTOPValue OCnB(Int.Req.) WaveformGeneration OCnB TCCRnA 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)。
此标志可以用来产生输出比较中断请求。
本文的许多寄存器及其各个位以通用的格式表示。
小写的“n”取代了T/C的序号,在此即为
0。
小写的“x”取代了输出比较单元通道,在此即为通道A或
B。
但是在写程序时要使用精确的格式,例如使用TCNT0来访问T/C0计数器值,等等。
54ATtiny13 2535D–AVR–04/04 T/C的时钟源计数器单元 ATtiny13 Table25的定义适用于全文。
Table25.定义BOTTOM计数器计到0x00时即达到BOTTOM。
MAX 计数器计到0xFF(十进制的255)时即达到MAX。
TOP 计数器计到计数序列的最大值时即达到TOP。
TOP值可以为固定值0xFF(MAX),或是存储于寄存器OCR0A里的数值,具体由工作模式确定 T/C可以由内部同步时钟或外部时钟驱动。
时钟源是由时钟选择逻辑决定的,而时钟选择逻辑是由位于T/C控制寄存器TCCR0B的时钟选择位CS02:0控制的。
P71“T/C预分频器”对时钟源与预分频有详尽的描述。
8位T/C的主要部分为可编程的双向计数单元。
Figure26即为计数器和周边电路的框图。
Figure26.计数器单元方框图DATABUS TOVn(Int.Req.) TCNTn countcleardirection ControlLogic clkTn bottom top ClockSelect Edge Tn Detector (FromPrescaler) 信号说明(内部信号): 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“工作模式”)。
Figure27为输出比较单元的方框图。
Figure27.输出比较单元方框图DATABUS OCRnx =(8-bitComparator) topbottomFOCn WaveformGenerator TCNTnOCFnx(Int.Req.)OCnx WGMn1:0COMnX1:
0 56ATtiny13 2535D–AVR–04/04 ATtiny13 强制输出比较写TCNT0操作将阻止比较匹配使用输出比较单元 使用PWM模式时OCR0x寄存器为双缓冲寄存器;而在正常工作模式和匹配时清零模式双缓冲功能是禁止的。
双缓冲可以将更新OCR0x寄存器与或bottom时刻同步起来,从而防止产生不对称的PWM脉冲,消除了干扰脉冲。
访问OCR0x寄存器看起来很复杂,其实不然。
使能双缓冲功能时,CPU访问的是OCR0x缓冲寄存器;禁止双缓冲功能时CPU访问的则是OCR0x本身。
工作于非PWM模式时,可以通过对强制输出比较位FOC0x写”1”的方式来产生比较匹配。
强制比较匹配不会置位OCF0x标志,也不会重载/清零定时器,但是OC0x引脚将被更新,好象真的发生了比较匹配一样(COM01:0决定OC0x是置位、清零,还是"0“-”1”交替变化)。
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引脚输出信号的来源。
Figure28为受COM0x1:0设置影响的简化逻辑框图。
I/O寄存器、I/O位和I/O引脚以粗体表示。
图中只给出了受COM0x1:0影响的通用I/O端口控制寄存器(DDR和PORT)。
谈及OC0x状态时指的是内部OC0x寄存器,而不是OC0x引脚。
系统复位时OC0x寄存器清零。
Figure28.比较匹配输出单元原理图 COMnx1COMnx0FOCn WaveformGenerator DQ 1OCn OCnx0Pin DQ DATABUS PORTDQ clkI/O DDR 如果COM0x1:0不全为零,通用I/O口功能将被波形发生器的输出比较功能取代。
但OC0x引脚为输入还是输出仍然由数据方向寄存器DDR控制。
在使用OC0x功能之前首先要通过数据方向寄存器的DDR_OC0x位将此引脚设置为输出。
端口功能与波形发生器的工作模式无关。
输出比较逻辑的设计允许OC0x状态在输出之前首先进行初始化。
要注意某些COM0x1:0设置保留给了其他操作类型,详见P65“8位定时器/计数器寄存器的说明”。
波形发生器利用COM0x1:0的方法在普通模式、CTC模式和PWM模式下有所区别。
对于所有的模式,设置COM0x1:0=0表明比较匹配发生时波形发生器不会操作OC0x寄存器。
非PWM模式的比较输出请参见P65Table26;快速PWM的比较输出示于P65Table27;相位修正PWM的比较输出在P65Table28有描述。
改变COM0x1:0将影响写入数据后的第一次比较匹配。
对于非PWM模式,可以通过使用FOC0x来立即产生效果。
58ATtiny13 2535D–AVR–04/04 ATtiny13 工作模式 普通模式 CTC(比较匹配时清零定时器)模式 工作模式-T/C和输出比较引脚的行为-由波形发生模式(WGM02:0)及比较输出模式(COM0x1:0)的控制位决定。
比较输出模式对计数序列没有影响,而波形产生模式对计数序列则有影响。
COM0x1:0控制PWM输出是否为反极性。
非PWM模式时COM0x1:0控制输出是否应该在比较匹配发生时置位、清零,或是电平取反(P58“比较匹配输出单元”)。
具体的时序信息请参考P63“T/C时序图”之Figure32、Figure33、Figure34与Figure35。
普通模式(WGM02:0=0)为最简单的工作模式。
在此模式下计数器不停地累加。
计到8比特的最大值后(TOP=0xFF),由于数值溢出计数器简单地返回到最小值0x00重新开始。
在TCNT0为零的同一个定时器时钟里T/C溢出标志TOV0置位。
此时TOV0有点象第9位,只是只能置位,不会清零。
但由于定时器中断服务程序能够自动清零TOV0,因此可以通过软件提高定时器的分辨率。
在普通模式下没有什么需要特殊考虑的,用户可以随时写入新的计数器数值。
输出比较单元可以用来产生中断。
但是不推荐在普通模式下利用输出比较来产生波形,因为这会占用太多的CPU时间。
在CTC模式(WGM02:0=2)下OCR0A寄存器用于调节计数器的分辨率。
当计数器的数值TCNT0等于OCR0A时计数器清零。
OCR0A定义了计数器的TOP值,亦即计数器的分辨率。
这个模式使得用户可以很容易地控制比较匹配输出的频率,也简化了外部事件计数的操作。
CTC模式的时序图为Figure29。
计数器数值TCNT0一直累加到TCNT0与OCR0A匹配,然后TCNT0清零。
Figure29.CTC模式的时序图 OCnxInterruptFlagSet

标签: #文件 #电子版 #文件 #换行 #文件 #压缩文件 #众生 #文件