带有 8/2/4K 字节系统内可编程闪存的 Atmel 8 位 AVR 微控制器
特征
- 高性能、低功耗 AVR® 8 位微控制器
- 先进的RISC架构
- 120条功能强大的指令–多数单个时钟周期执行
- 32 x 8通用工作寄存器
- 全静态操作
- 非易失性程序和数据存储器
- 2/4 / 8K字节的系统内可编程程序存储器闪存
- 耐力: 10,000 次写入/擦除周期
- 128/256/512字节系统内可编程EEPROM
- 耐力: 100,000 次写入/擦除周期
- 128/256/512字节内部SRAM
- 用于自编程闪存程序和EEPROM数据安全性的编程锁
外围功能
- 具有预分频器和两个PWM通道的8位定时器/计数器
- 具有独立预分频器的8位高速定时器/计数器
- 2个带有独立输出比较寄存器的高频PWM输出
- 可编程死区时间发生器
- USI –带有启动条件检测器的通用串行接口
- 10 位 ADC
4个单端通道
2个具有可编程增益(1x,20x)的差分ADC通道对
温度测量
带有独立片内振荡器的可编程看门狗定时器
片上模拟比较器
特殊的微控制器功能
debugWIRE片上调试系统
通过SPI端口进行系统内可编程
外部和内部中断源
低功耗空闲,ADC降噪和掉电模式
增强型上电复位电路
可编程掉电检测电路
内部校准振荡器
I / O和包装
六个可编程I / O线
8引脚PDIP,8引脚SOIC,20焊盘QFN / MLF和8引脚TSSOP(仅ATtiny45 / V)
操作量tage
– ATtiny1.8V / 5.5V / 25V为– 45 – 85V
– ATtiny2.7 / 5.5/25为45 – 85V
速度等级
– ATtiny25V / 45V / 85V:0 – 4 MHz @ 1.8 – 5.5V,0 – 10 MHz @ 2.7 – 5.5V
– ATtiny25 / 45/85:0 – 10V时为2.7 – 5.5 MHz,0 – 20V时为4.5 – 5.5 MHz
工业温度范围
低功耗
活动模式:
1 MHz,1.8V:300 µA
掉电模式:
引脚配置
引脚排列ATtiny25 / 45/85
引脚说明
VCC:供应量tage.
GND:接地。
Port B(PB5:PB0):Port B是一个6位双向I/O口,内部带有上拉电阻(为每一位选择)。 端口 B 输出缓冲器具有对称驱动特性,具有高灌电流和拉电流能力。 作为输入,如果上拉电阻被激活,外部拉低的端口 B 引脚将提供电流。 当复位条件激活时,端口 B 引脚处于三态,即使时钟未运行也是如此。
端口B还具有ATtiny25 / 45/85的各种特殊功能,如所列
在ATtiny25上,可编程I / O端口PB3和PB4(引脚2和3)在ATtiny15兼容模式下进行交换,以支持与ATtiny15的向后兼容性。
RESET:复位输入。 该引脚上的低电平持续时间超过最小脉冲长度将产生复位,即使时钟未运行且复位引脚未被禁用也是如此。 最小脉冲长度在 表 21-4 第 165 页。 不能保证较短的脉冲会产生复位。
复位引脚也可以用作(弱)I / O引脚。
超过view
ATtiny25 / 45/85是基于AVR增强RISC架构的低功耗CMOS 8位微控制器。 通过在一个时钟周期内执行功能强大的指令,ATtiny25 / 45/85的吞吐量接近每兆赫兹1 MIPS,从而使系统设计人员能够优化功耗与处理速度。
框图
AVR内核将丰富的指令集与32个通用工作寄存器结合在一起。 所有32个寄存器都直接连接到算术逻辑单元(ALU),从而允许在一个时钟周期内执行的一条指令中访问两个独立的寄存器。 最终的架构具有更高的代码效率,同时吞吐速度比传统的CISC微控制器快十倍。
ATtiny25 / 45/85提供以下功能:2/4 / 8K字节的系统内可编程闪存,128/256/512字节的EEPROM,128/256/256字节的SRAM,6个通用I / O线,32个通用专用工作寄存器,一个带比较模式的8位定时器/计数器,一个8位高速定时器/计数器,通用串行接口,内部和外部中断,一个4通道10位ADC,一个带有内部时钟的可编程看门狗定时器振荡器和三种软件可选的省电模式。 空闲模式使CPU停止运行,同时允许SRAM,定时器/计数器,ADC,模拟比较器和中断系统继续运行。 掉电模式将保存寄存器内容,并禁用所有芯片功能,直到下一次中断或硬件复位为止。 ADC降噪模式可停止CPU和除ADC外的所有I / O模块,以最大程度地减少ADC转换期间的开关噪声。
该设备使用Atmel的高密度非易失性存储技术制造。 片上ISP闪存允许程序存储器通过SPI串行接口,常规的非易失性存储器编程器或AVR内核上运行的片上启动代码在系统内重新编程。
完整的程序和系统开发工具套件支持ATtiny25 / 45/85 AVR,其中包括:C编译器,宏汇编器,程序调试器/仿真器和评估套件。
关于资源
可以从以下位置下载一套全面的开发工具,应用笔记和数据表: http://www.atmel.com/avr.
代码示例amp莱斯
本文档包含简单的代码 examp简要说明如何使用设备各个部分的文件。 这些代码例如amples 假设部分特定的标题 file 编译前包含。 请注意,并非所有 C 编译器供应商都在头文件中包含位定义 files 和 C 中的中断处理取决于编译器。 有关更多详细信息,请确认 C 编译器文档。
对于位于扩展I / O映射中的I / O寄存器,“ IN”,“ OUT”,“ SBIS”,“ SBIC”,“ CBI”和“ SBI”指令必须替换为允许访问扩展I的指令。 / O。 通常,这意味着将“ LDS”和“ STS”与“ SBRS”,“ SBRC”,“ SBR”和“ CBR”结合使用。 请注意,并非所有的AVR设备都包含扩展的I / O映射。
电容式触摸感应
Atmel QTouch 库为 Atmel AVR 微控制器上的触摸敏感界面提供了一个简单易用的解决方案。 QTouch 库包括对 QTouch® 和 QMatrix® 采集方法的支持。
通过链接QTouch库并使用库的应用程序编程接口(API)定义触摸通道和传感器,可以轻松将触摸感应添加到任何应用程序中。 然后,应用程序调用API来检索通道信息并确定触摸传感器的状态。
QTouch 库是免费的,可以从 Atmel 下载 web地点。 有关实现的更多信息和详细信息,请参阅 QTouch 库用户指南 - 也可从 Atmel web地点。
数据保留
可靠性鉴定结果表明,在1°C下20年或85°C下100年的预计数据保留失败率远小于25 PPM。
AVR CPU核心
介绍
本节通常讨论AVR核心体系结构。 CPU内核的主要功能是确保正确执行程序。 因此,CPU必须能够访问存储器,执行计算,控制外设并处理中断。
建筑结束view
为了最大限度地提高性能和并行度,AVR使用哈佛架构–带有独立的存储器和用于程序和数据的总线。 程序存储器中的指令通过单级流水线执行。 在执行一条指令时,将从程序存储器中预取下一条指令。 该概念使指令可以在每个时钟周期执行。 程序存储器是系统内可重编程闪存。
快速访问寄存器 File 包含 32 x 8 位通用工作寄存器,具有单个时钟周期访问时间。 这允许单周期算术逻辑单元 (ALU) 操作。 在典型的 ALU 运算中,寄存器输出两个操作数 File,执行操作,并将结果存回寄存器 File–在一个时钟周期内。
32个寄存器中的16个可用作数据空间寻址的16个XNUMX位间接地址寄存器指针,从而实现高效的地址计算。 这些地址指针之一也可以用作Flash程序存储器中查找表的地址指针。 这些增加的功能寄存器是XNUMX位X,Y和Z寄存器,本节稍后将进行介绍。
ALU支持寄存器之间或常量与寄存器之间的算术和逻辑运算。 单寄存器操作也可以在ALU中执行。 算术运算后,状态寄存器将更新以反映有关运算结果的信息。
程序流由有条件和无条件的跳转和调用指令提供,它们可以直接寻址整个地址空间。 大多数AVR指令具有单个16位字格式,但也有32位指令。
在中断和子程序调用期间,返回地址程序计数器(PC)存储在堆栈中。 堆栈有效地分配在通用数据SRAM中,因此堆栈大小仅受SRAM的总大小和SRAM使用的限制。 所有用户程序必须在复位例程中初始化SP(在执行子例程或中断之前)。 堆栈指针(SP)在I / O空间中可读写。 数据SRAM可以通过AVR架构支持的五种不同寻址模式轻松访问。
AVR体系结构中的存储器空间都是线性和常规存储器映射。
灵活的中断模块在I / O空间中具有其控制寄存器,在状态寄存器中具有附加的全局中断允许位。 所有中断在“中断向量”表中都有一个单独的“中断向量”。 中断的优先级根据它们的中断向量位置而定。 中断向量地址越低,优先级越高。
I/O 存储空间包含 64 个地址,用于 CPU 外围功能,如控制寄存器、SPI 和其他 I/O 功能。 I/O 存储器可以直接访问,也可以作为寄存器的数据空间位置之后的数据空间位置访问。 File, 0x20 – 0x5F。
ALU –算术逻辑单元
高性能AVR ALU与所有32个通用工作寄存器直接连接。 在单个时钟周期内,将执行通用寄存器之间或寄存器与立即数之间的算术运算。 ALU操作分为三大类-算术,逻辑和位函数。 该体系结构的某些实现还提供了强大的乘法器,支持有符号/无符号乘法和小数格式。 有关详细说明,请参见“指令集”部分。
状态寄存器
状态寄存器包含有关最近执行的算术指令的结果的信息。 该信息可用于更改程序流,以便执行条件操作。 请注意,如指令集参考中所指定的,状态寄存器在所有ALU操作之后都会更新。 在许多情况下,这将消除使用专用比较指令的需要,从而使代码更快,更紧凑。
进入中断程序时,状态寄存器不会自动存储,而从中断返回时,状态寄存器不会自动恢复。 这必须由软件处理。
SREG – AVR状态寄存器
AVR状态寄存器SREG定义为:
少量 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x3F | I | T | H | S | V | N | Z | C | 斯雷格 |
读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | |
初始值 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
位7 – I:全局中断使能
必须将全局中断允许位设置为允许中断。 然后在单独的控制寄存器中执行单独的中断使能控制。 如果清除了全局中断使能寄存器,则与各个中断使能设置无关,都不会使能任何中断。 I位在发生中断后由硬件清除,并由RETI指令设置以允许后续中断。 应用程序还可以使用SEI和CLI指令来设置和清除I位,如指令集参考中所述。
Bit 6 – T:位复制存储
位复制指令 BLD(位加载)和 BST(位存储)使用 T 位作为操作位的源或目标。 寄存器中寄存器的位 File 可以通过BST指令复制到T中,T中的一个位可以复制到Register中某个寄存器中的一个位 File 通过 BLD 指令。
Bit 5 – H:半旗
半进位标志H表示某些算术运算中的半进位。 半进位在BCD算术中很有用。 有关详细信息,请参见“指令集说明”。
Bit 4 – S:符号位,S = N ⊕ V
S位始终是互斥或负标志N与二进制补码溢出标志V之间的异或。有关详细信息,请参见“指令集说明”。
位3 – V:二进制补码溢出标志
二进制补码溢出标志V支持二进制补码算术。 有关详细信息,请参见“指令集说明”。
位2 – N:负标志
负标志N表示算术或逻辑运算中的负结果。 有关详细信息,请参见“指令集说明”。
位1 – Z:零标志
零标志Z表示算术或逻辑运算的零结果。 有关详细信息,请参见“指令集说明”。
位0 – C:进位标志
进位标志C表示算术或逻辑运算中的进位。 有关详细信息,请参见“指令集说明”。
通用寄存器 File
登记册 File 针对 AVR 增强型 RISC 指令集进行了优化。 为了实现所需的性能和灵活性,寄存器支持以下输入/输出方案 File:
8个8位输出操作数和XNUMX个XNUMX位结果输入
8个8位输出操作数和XNUMX个XNUMX位结果输入
8个16位输出操作数和XNUMX个XNUMX位结果输入
16个16位输出操作数和XNUMX个XNUMX位结果输入
图 4-2 显示了CPU中32个通用工作寄存器的结构。
如图所示 图 4-2,每个寄存器还分配了一个数据存储器地址,将它们直接映射到用户数据空间的前 32 个位置。 尽管在物理上并未实现为 SRAM 位置,但这种存储器组织在访问寄存器方面提供了极大的灵活性,因为 X、Y 和 Z 指针寄存器可以设置为索引寄存器中的任何寄存器。 file.大部分指令操作在Register上 File 可以直接访问所有寄存器,其中大部分是单周期指令。
X寄存器,Y寄存器和Z寄存器
寄存器R26..R31在其通用用途中增加了一些功能。 这些寄存器是用于数据空间间接寻址的16位地址指针。 如下所述定义了三个间接地址寄存器X,Y和Z 图 4-3.
在不同的寻址模式下,这些地址寄存器具有固定位移,自动递增和自动递减的功能(有关详细信息,请参见指令集参考)。
堆栈指针
堆栈主要用于存储临时数据,存储局部变量以及存储中断和子例程调用后的返回地址。 堆栈指针寄存器始终指向堆栈的顶部。 请注意,堆栈的实现是从较高的内存位置增长到较低的内存位置。 这意味着堆栈推命令减少堆栈指针。
堆栈指针指向子例程和中断堆栈所在的数据SRAM堆栈区域。 在执行任何子例程调用或使能中断之前,程序必须定义数据SRAM中的堆栈空间。 堆栈指针必须设置为指向0x60以上。 当使用PUSH指令将数据压入堆栈时,堆栈指针递减XNUMX;使用子程序调用或中断将返回地址压入堆栈时,堆栈指针递减XNUMX。 当使用POP指令从堆栈中弹出数据时,堆栈指针加XNUMX;当从子例程RET返回或从中断RETI返回时,从堆栈中弹出数据时,堆栈指针加XNUMX。
AVR堆栈指针被实现为I / O空间中的两个8位寄存器。 实际使用的位数取决于实现。 请注意,在AVR体系结构的某些实现中,数据空间非常小,只需要SPL。 在这种情况下,SPH寄存器将不存在。
SPH和SPL —堆栈指针寄存器
少量 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | |
0x3E | SP15 | SP14 | SP13 | SP12 | SP11 | SP10 | SP9 | SP8 | 新加坡制药公司 |
0x3D | SP7 | SP6 | SP5 | SP4 | SP3 | SP2 | SP1 | SP0 | 频率响应 |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | |
读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | |
初始值 | 拉姆德 | 拉姆德 | 拉姆德 | 拉姆德 | 拉姆德 | 拉姆德 | 拉姆德 | 拉姆德 | |
初始值 | 拉姆德 | 拉姆德 | 拉姆德 | 拉姆德 | 拉姆德 | 拉姆德 | 拉姆德 | 拉姆德 |
指令执行时间
本节介绍指令执行的一般访问时序概念。 AVR CPU 由 CPU 时钟 clkCPU 驱动,直接从为芯片选择的时钟源生成。 不使用内部时钟分频。
图 4-4 显示了由哈佛架构和快速访问寄存器启用的并行指令提取和指令执行 File 概念。 这是获得高达 1 MIPS/MHz 的基本流水线概念,并为单位成本的功能、单位时钟的功能和单位功率单元的功能提供相应的独特结果。
图 4-5。 单周期 ALU 操作
复位和中断处理
AVR提供了几种不同的中断源。 这些中断和单独的复位向量在程序存储空间中均具有单独的程序向量。 所有中断均被分配了单独的使能位,必须将这些中断与状态寄存器中的全局中断使能位一起写入逻辑XNUMX,以使能该中断。
默认情况下,程序存储空间中的最低地址被定义为复位和中断向量。 向量的完整列表显示在 第48页上的“中断”。 该列表还确定了不同中断的优先级。 地址越低,优先级越高。 RESET具有最高优先级,其次是INT0 –外部中断请求0。
发生中断时,将清除全局中断允许I位,并禁用所有中断。 用户软件可以将逻辑XNUMX写入I位以启用嵌套中断。 然后,所有允许的中断都可以中断当前的中断程序。 当执行从中断返回指令RETI时,将自动设置I位。
基本上有两种类型的中断。 第一种类型是由设置中断标志的事件触发的。 对于这些中断,程序计数器被向量到实际的中断向量,以执行中断处理程序,并且硬件清除相应的中断标志。 通过向要清除的标志位位置写入逻辑XNUMX,也可以清除中断标志。 如果在清除相应的中断允许位的同时发生了中断条件,则将设置并记住中断标志,直到允许该中断,或者该标志被软件清除。 类似地,如果在清除全局中断允许位的同时发生一个或多个中断条件,则将设置并记住相应的中断标志,直到设置全局中断允许位为止,然后将按照优先级顺序执行该中断标志。
只要存在中断条件,就会触发第二种中断。 这些中断不必具有中断标志。 如果在允许中断之前中断条件消失,则不会触发中断。
当AVR从中断中退出时,它将始终返回主程序并在执行任何未决中断之前再执行一条指令。
请注意,进入中断程序时不会自动存储状态寄存器,从中断程序返回时也不会恢复状态寄存器。 这必须由软件处理。
当使用 CLI 指令禁用中断时,中断将立即被禁用。 CLI 指令之后不会执行任何中断,即使它与 CLI 指令同时发生。 下面的前ample 显示了如何在定时 EEPROM 写入序列期间使用它来避免中断。
汇编代码前ample |
在 r16 中,SREG ; 存储 SREG 值
客户端; 在时序期间禁用中断 sbi EECR, EEMPE ; 开始写入 EEPROM sbi EECR、EEPE 输出 SREG, r16 ; 恢复 SREG 值(I 位) |
C 代码示例ample |
字符 cSREG;
cSREG = SREG; /* 存储 SREG 值 */ /* 在定时序列期间禁用中断 */ _CLI(); EECR |= (1< EECR | =(1 < SREG = cSREG; /* 恢复 SREG 值(I 位)*/ |
当使用 SEI 指令使能中断时,SEI 后面的指令将在任何挂起的中断之前执行,如下例所示amp勒。
汇编代码前ample |
精; 设置全局中断使能
睡觉; 进入睡眠,等待中断 ; 注意:将在任何未决之前进入睡眠状态 ; 中断 |
C 代码示例ample |
_SEI(); /* 设置全局中断使能 */
_睡觉(); /* 进入睡眠,等待中断 */ / *注意:将在任何未决中断之前进入睡眠状态* / |
中断响应时间
所有使能的AVR中断的中断执行响应至少为四个时钟周期。 在四个时钟周期后,将执行实际中断处理程序的程序向量地址。 在这四个时钟周期内,程序计数器被压入堆栈。 该向量通常是跳转到中断例程的过程,该跳转需要三个时钟周期。 如果在执行多周期指令期间发生中断,则该指令在中断服务之前完成。 如果MCU处于睡眠模式时发生中断,则中断执行响应时间将增加四个时钟周期。 除了来自所选睡眠模式的启动时间之外,还增加了该时间。
中断处理程序的返回需要四个时钟周期。 在这四个时钟周期内,程序计数器(两个字节)从堆栈中弹出,堆栈指针加XNUMX,并且SREG中的I位被置XNUMX。
AVR记忆
本节介绍ATtiny25 / 45/85中的不同存储器。 AVR体系结构具有两个主存储空间,即数据存储空间和程序存储空间。 此外,ATtiny25 / 45/85具有EEPROM存储器,用于数据存储。 这三个存储空间都是线性且规则的。
系统内可编程闪存程序存储器
ATtiny25 / 45/85包含2/4 / 8K字节的片上系统内可重编程闪存,用于存储程序。 由于所有AVR指令的宽度均为16或32位,因此闪存的组织方式为1024/2048/4096 x 16。
闪存的耐久性至少为10,000个写入/擦除周期。 ATtiny25 / 45/85程序计数器(PC)的宽度为10/11/12位,因此可寻址1024/2048/4096程序存储器位置。 “内存程序- ”(第147页) 包含有关使用SPI引脚下载Flash数据的详细说明。
常量表可以在整个程序存储器地址空间内分配(请参见LPM –加载程序存储器指令说明)。
图 5-1。 程序内存映射
SRAM数据存储器
图 5-2 显示了ATtiny25 / 45/85 SRAM存储器的组织方式。
较低的 224/352/607 数据存储器位置寻址寄存器 File、I/O 存储器和内部数据 SRAM。 前 32 个位置寻址寄存器 File,接下来的 64 个位置是标准 I/O 存储器,最后 128/256/512 个位置寻址内部数据 SRAM。
数据存储器的五种不同寻址模式包括:直接、带位移的间接、间接、带预减量的间接和带后增量的间接。 在注册 File, 寄存器 R26 到 R31 具有间接寻址指针寄存器。
直接寻址到达整个数据空间。
间接位移模式从Y或Z寄存器给定的基地址起可到达63个地址位置。
当使用具有自动递增和递减功能的寄存器间接寻址模式时,地址寄存器X,Y和Z会递减或递增。
ATtiny32/64/128 中的 256 个通用工作寄存器、512 个 I/O 寄存器和 25/45/85 字节的内部数据 SRAM 都可以通过所有这些寻址模式访问。 登记册 File 描述于 “ Gen- 目的寄存器 File” 第 10 页.
图 5-2。 数据内存映射
数据存储器访问 時間
本节描述了内部存储器访问的一般访问时序概念。 内部数据 SRAM 访问在两个 clkCPU 周期内执行,如中所述 图 5-3.
图 5-3。 片上数据 SRAM 访问周期 EEPROM数据存储器
ATtiny25 / 45/85包含128/256/512字节的数据EEPROM存储器。 它被组织为一个单独的数据空间,可以在其中读取和写入单个字节。 EEPROM的耐久性至少为100,000个写入/擦除周期。 下文描述了EEPROM与CPU之间的访问,并指定了EEPROM地址寄存器,EEPROM数据寄存器和EEPROM控制寄存器。 有关详细信息,请参见 第151页的“串行下载”.
EEPROM读/写访问
EEPROM访问寄存器可在I / O空间中访问。
EEPROM的写访问时间在 第5页的表1-21. 然而,自定时功能可让用户软件检测何时可以写入下一个字节。 如果用户代码包含写入 EEPROM 的指令,则必须采取一些预防措施。 在经过严格过滤的电源中,VCC 可能会缓慢上升或下降
通电/断电。 这会导致设备在一段时间内以一定的速度运行tage 低于所用时钟频率指定的最小值。 看 第19页“防止EEPROM损坏” 有关在这些情况下如何避免出现问题的详细信息。
为了防止意外写入EEPROM,必须遵循特定的写入步骤。 参考 “原子 字节编程”,第17页 和 第17页的“分割字节编程” 有关详细信息。
读取EEPROM时,在执行下一条指令之前,CPU会暂停四个时钟周期。 写入EEPROM时,在执行下一条指令之前,CPU会暂停两个时钟周期。
原子字节编程
使用原子字节编程是最简单的模式。 将字节写入EEPROM时,用户必须将地址写入EEAR寄存器,并将数据写入EEDR寄存器。 如果EEPMn位为零,则写入EEPE(在写入EEMPE之后的四个周期内)将触发擦除/写入操作。 擦除和写入周期都在一次操作中完成,总编程时间在 第5页的表1-21。 EEPE位保持设置,直到擦除和写入操作完成。 器件忙于编程时,无法执行任何其他EEPROM操作。
分割字节编程
可以在两个不同的操作中拆分擦除和写入周期。 如果系统在某个有限的时间段内需要较短的访问时间(通常如果电源电压tage 下降)。 为了抢占先机 tag这种方法要求在写操作之前已经擦除了要写的位置。 但由于擦除和写入操作是分开的,当系统允许进行时间关键操作时(通常在上电后),可以进行擦除操作。
擦除
要擦除字节,必须将地址写入EEAR。 如果EEMPn位为0b01,则写入EEPE(在写入EEMPE之后的四个周期内)将仅触发擦除操作(编程时间在 表5-1 第 21 页)。 EEPE位保持设置,直到擦除操作完成。 器件忙于编程时,无法执行任何其他EEPROM操作。
写
要写入位置,用户必须将地址写入EEAR,并将数据写入EEDR。 如果EEMPn位为0b10,则写入EEPE(在写入EEMPE之后的四个周期内)将仅触发写入操作(编程时间在 第5页的表1-21)。 EEPE位保持置位,直到写入操作完成。 如果在写入之前尚未擦除要写入的位置,则必须将存储的数据视为已丢失。 器件忙于编程时,无法执行任何其他EEPROM操作。
校准的振荡器用于对EEPROM访问进行计时。 确保振荡器频率在以下描述的要求之内 第31页上的“ OSCCAL –振荡器校准寄存器”.
以下代码例如amp文件显示了用于擦除、写入或原子写入 EEPROM 的一个程序集和一个 C 函数。 前任amp这些文件假设中断受到控制(例如,通过全局禁用中断),以便在执行这些功能期间不会发生中断。
汇编代码前ample |
EEPROM_write:
; 等待上一次写入完成 sbic EECR,EEPE rjmp EEPROM_write ; 设置编程模式 ldi r16, (0<<EEPM1)|(0<<EEPM0) 输出 EECR,r16 ; 在地址寄存器中设置地址(r18:r17) 出 EEARH,r18 出EEARL,r17 ; 将数据(r19)写入数据寄存器 出 EEDR,r19 ; 向EEMPE写逻辑一 sbi EECR,EEMPE ; 通过设置EEPE开始eeprom写入 sbi EECR、EEPE 保留 |
C 代码示例ample |
void EEPROM_write(unsigned char ucAddress, unsigned char ucData)
{ /* 等待上一次写入完成 */ while(EECR & (1< ; /* 设置编程模式 */ EECR =(0 < / *设置地址和数据寄存器* / EEAR = ucAddress; EEDR = ucData; /* 向 EEMPE 写入逻辑 XNUMX */ EECR | =(1 < / *通过设置EEPE开始eeprom写入* / EECR | =(1 < } |
下一个代码前amp文件显示了用于读取 EEPROM 的汇编和 C 函数。 前任amp假设中断受到控制,因此在执行这些功能期间不会发生中断。
汇编代码前ample |
EEPROM_read:
; 等待上一次写入完成 sbic EECR,EEPE rjmp EEPROM_read ; 在地址寄存器中设置地址(r18:r17) 出 EEARH,r18 出EEARL,r17 ; 通过编写EERE开始eeprom阅读 sbi EECR,EERE ; 从数据寄存器读取数据 在 r16 中,EEDR 保留 |
C 代码示例ample |
unsigned char EEPROM_read(unsigned char ucAddress)
{ / *等待上一次写入完成* / 而(EECR&(1 < ; / *设置地址寄存器* / EEAR = ucAddress; /* 通过写入 EERE 启动 eeprom 读取 */ EECR | =(1 < / *从数据寄存器返回数据* / 返回EEDR; } |
防止EEPROM损坏
在低 VCC 期间,EEPROM 数据可能会损坏,因为电源电压tage 太低,CPU 和 EEPROM 无法正常运行。 这些问题与使用 EEPROM 的板级系统相同,应采用相同的设计解决方案。
EEPROM 数据损坏可能由两种情况导致tage 太低了。 首先,对 EEPROM 的常规写入序列需要最小 voltage 正确操作。 其次,CPU本身可能会错误地执行指令,如果供应卷tage 太低。
遵循以下设计建议可以轻松避免EEPROM数据损坏:
在电源电压不足期间保持 AVR RESET 有效(低)tage. 这可以通过启用内部掉电检测器 (BOD) 来实现。 如果内部 BOD 的检测水平与
需要检测水平,一个外部低VCC复位保护电路可以使用。 如果在进行写操作时发生复位,则写操作将完成,前提是电源电压tage就足够了。
I / O记忆体
ATtiny25 / 45/85的I / O空间定义如下所示 第200页的“注册摘要”.
所有ATtiny25 / 45/85 I / O和外围设备都放置在I / O空间中。 LD / LDS / LDD和ST / STS / STD指令可以访问所有I / O位置,从而在32个通用工作寄存器和I / O空间之间传输数据。 使用SBI和CBI指令可直接对地址范围为0x00 – 0x1F的I / O寄存器进行位访问。 在这些寄存器中,可以使用SBIS和SBIC指令检查单个位的值。 有关更多详细信息,请参见指令集部分。 使用I / O专用命令IN和OUT时,必须使用I / O地址0x00 – 0x3F。 使用LD和ST指令将I / O寄存器作为数据空间寻址时,必须将0x20添加到这些地址。
为了与将来的设备兼容,如果访问保留位,则应将其写入零。 保留的I / O内存地址绝对不能写入。
通过向它们写入逻辑0可以清除某些状态标志。 请注意,CBI和SBI指令仅对指定的位进行操作,因此可以在包含此类状态标志的寄存器中使用。 CBI和SBI指令仅适用于寄存器00x0至1xXNUMXF。
I / O和外围设备控制寄存器将在后面的部分中介绍。
注册说明
EEARH – EEPROM地址寄存器
少量 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x1F | – | – | – | – | – | – | – | EEAR8 | 地球 |
读/写 | R | R | R | R | R | R | R | 读/写 | |
初始值 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | X/0 |
Bits 7:1 – Res:保留位
这些位保留供将来使用,并将始终读为零。
位0 – EEAR8:EEPROM地址
这是ATtiny85的最高有效EEPROM地址位。 在EEPROM较少的设备(即ATtiny25 / ATtiny45)中,该位保留,并将始终读为零。 EEPROM地址寄存器(EEAR)的初始值未定义,因此在访问EEPROM之前必须写入适当的值。
EEARL – EEPROM地址寄存器
少量
0x1E | EEAR7 | EEAR6 | EEAR5 | EEAR4 | EEAR3 | EEAR2 | EEAR1 | EEAR0 | 厄尔 |
后/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | |
初始值 | X | X | X | X | X | X | X | X |
位7 – EEAR7:EEPROM地址
这是ATtiny45的最高有效EEPROM地址位。 在EEPROM较少的设备(即ATtiny25)中,该位保留,并将始终读为零。 EEPROM地址寄存器(EEAR)的初始值不确定,因此必须在访问EEPROM之前写入适当的值。
位6:0 – EEAR [6:0]:EEPROM地址
这些是EEPROM地址寄存器的(低)位。 EEPROM数据字节在0…(128/256 / 512-1)范围内线性寻址。 EEAR的初始值是不确定的,因此必须先写入适当的值,然后才能访问EEPROM。
EEDR – EEPROM数据寄存器
少量 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x1D | 电子病历7 | 电子病历6 | 电子病历5 | 电子病历4 | 电子病历3 | 电子病历2 | 电子病历1 | 电子病历0 | 电子病历 |
读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | |
初始值 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
对于EEPROM写操作,EEDR寄存器包含EEAR寄存器给定地址中要写入EEPROM的数据。 对于EEPROM读取操作,EEDR包含从EEPROM读取的数据。
EEPROM位于EEAR给定的地址。
5.5.4 EECR – EEPROM控制寄存器 |
|||||||||
7 6 5位 | 4 | 3 | 2 | 1 | 0 | ||||
0x1C – | – | EEPM1 | EEPM0 | 怪异 | 电磁波 | EEPE | 能源效率 | 脑电图 | |
读/写R R R / W | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | ||||
初始值0 0 X | X | 0 | 0 | X | 0 |
Bit 7 – Res:保留位
该位保留供将来使用,在ATtiny0 / 25/45中将始终读为85。 为了与将来的AVR设备兼容,请始终将此位写入零。 读取后,请屏蔽掉该位。
Bit 6 – Res:保留位
该位在ATtiny25 / 45/85中保留,并将始终读为零。
位5:4 – EEPM [1:0]:EEPROM编程模式位
EEPROM编程模式位设置定义写EEPE时将触发的编程操作。 可以在一个原子操作中编程数据(擦除旧值并编程新值),也可以将擦除和写入操作拆分为两个不同的操作。 不同模式的编程时间显示在 表 5-1。 设置EEPE时,对EEPMn的任何写操作都将被忽略。 复位期间,除非EEPROM正忙于编程,否则EEPMn位将复位为0b00。
表 5-1。 EEPROM 模式位
EEPM1 | EEPM0 | 编程时间 | 手术 |
0 | 0 | 3.4 毫秒 | 一项操作中的擦除和写入(原子操作) |
0 | 1 | 1.8 毫秒 | 仅擦除 |
1 | 0 | 1.8 毫秒 | 只写 |
1 | 1 | – | 保留以供将来使用 |
位3 – EERIE:EEPROM就绪中断使能
如果将SREG中的I位置XNUMX,则将EERIE写为XNUMX将使能EEPROM就绪中断。 将EERIE写入零将禁止中断。 当非易失性存储器准备好进行编程时,EEPROM就绪中断会产生一个恒定中断。
位2 – EEMPE:EEPROM主程序使能
EEMPE位确定将EEPE写入一个是否有效。
当设置了EEMPE时,在四个时钟周期内设置EEPE将对EEPROM的选定地址进行编程。 如果EEMPE为零,则设置EEPE将无效。 通过软件将EEMPE写入XNUMX时,硬件会在四个时钟周期后将该位清除为零。
位1 – EEPE:EEPROM程序使能
EEPROM编程使能信号EEPE是到EEPROM的编程使能信号。 写入EEPE时,将根据EEPMn位设置对EEPROM进行编程。 在将逻辑XNUMX写入EEPE之前,必须将EEMPE位写入XNUMX,否则不会发生EEPROM写操作。 当写访问时间过去后,硬件将EEPE位清零。 设置EEPE后,在执行下一条指令之前,CPU会暂停两个周期。
位0 – EERE:EEPROM读取使能
EEPROM读取使能信号EERE是EEPROM的读取选通脉冲。 当在EEAR寄存器中设置了正确的地址时,必须将EERE位写入XNUMX以触发EEPROM的读取。 EEPROM读访问只有一条指令,所请求的数据立即可用。 当读取EEPROM时,在执行下一条指令之前,CPU会暂停四个周期。 用户应在开始读取操作之前轮询EEPE位。 如果正在进行写操作,则既无法读取EEPROM,也无法更改EEAR寄存器。
系统时钟和时钟选项
时钟系统及其分配
CPU时钟
CPU 时钟路由到与 AVR 内核操作相关的系统部分。 前任amp此类模块的文件是通用寄存器 File、状态寄存器和保存堆栈指针的数据存储器。 停止 CPU 时钟会禁止内核执行一般操作和计算。
I / O时钟– clkI / O
大多数I / O模块(例如定时器/计数器)都使用I / O时钟。 I / O时钟也由外部中断模块使用,但是请注意,某些外部中断是由异步逻辑检测到的,即使I / O时钟暂停,也可以检测到此类中断。
闪光时钟– clkFLASH
Flash时钟控制Flash接口的操作。 闪存时钟通常与CPU时钟同时激活。
ADC时钟– clkADC
ADC具有专用的时钟域。 这样可以暂停CPU和I / O时钟,以减少数字电路产生的噪声。 这样可以提供更准确的ADC转换结果。
内部PLL用于快速产生外设时钟– clkPCK
ATtiny25 / 45/85中的内部PLL产生的时钟频率是源输入的8倍。 默认情况下,PLL使用内部8.0 MHz RC振荡器的输出作为源。 或者,如果将PLLCSR的LSM位置64,则PLL将使用RC振荡器的输出除以1。 因此,PLL的输出,快速外设时钟为XNUMX MHz。 可以选择快速外设时钟或从中预分频的时钟作为Timer / CounterXNUMX的时钟源或系统时钟。 看 图 6-2. 当设置 PLLCSR 的 LSM 时,快速外设时钟的频率被二分频,从而产生 32 MHz 的时钟频率。 注意,如果 PLLCLK 用作系统时钟,则不能设置 LSM。
图 6-2。 PCK 时钟系统。
PLL锁定在RC振荡器上,通过OSCCAL寄存器调整RC振荡器将同时调整快速外设时钟。 但是,即使RC振荡器的频率高于8 MHz,快速外设时钟频率也会在85 MHz处饱和(最坏的情况),并且仍以最大频率振荡。 应该注意的是,在这种情况下,PLL不再被RC振荡器时钟锁定。 因此,建议不要将OSCCAL调整的频率提高到高于8 MHz的频率,以使PLL保持在正确的工作范围内。
在以下情况下,将启用内部PLL:
寄存器PLLCSR中的PLLE位置XNUMX。
CKSEL保险丝被编程为“ 0001”。
CKSEL保险丝被编程为“ 0011”。
当 PLL 被锁定时,PLLCSR 位 PLOCK 被设置。 在断电和待机睡眠模式下,内部 RC 振荡器和 PLL 都被关闭。
ATtiny15兼容模式下的内部PLL
由于ATtiny25 / 45/85是面向ATtiny15用户的迁移设备,因此存在用于向后兼容的ATtiny15兼容模式。 通过将CKSEL熔丝编程为'15',可以选择ATtiny0011兼容模式。
在ATtiny15兼容模式下,内部RC振荡器的频率低至6.4 MHz,并且PLL的倍频设置为4x。 看 图 6-3。 通过这些调整,时钟系统与ATtiny15兼容,并且所产生的快速外设时钟的频率为25.6 MHz(与ATtiny15相同)。
图 6-3。 ATtiny15 兼容模式下的 PCK 时钟系统。
时钟源
该器件具有以下时钟源选项,可由Flash Fuse位选择,如下所示。 来自选定源的时钟输入到AVR时钟发生器,并路由到适当的模块。
表 6-1。 设备时钟选项选择
设备时钟选项 | CKSEL[3:0](1) |
外部时钟 (看 第 26 页) | 0000 |
高频PLL时钟 (看 第 26 页) | 0001 |
校准内部振荡器 (看 第 27 页) | 0010(2) |
校准内部振荡器 (看 第 27 页) | 0011(3) |
内部128 kHz振荡器 (看 第 28 页) | 0100 |
低频晶体振荡器 (看 第 29 页) | 0110 |
晶体振荡器/陶瓷谐振器 (看 第 29 页) | 1000 – 1111 |
预订的 | 0101、0111 |
对于所有保险丝,“ 1”表示未编程,而“ 0”表示已编程。
设备出厂时已选中此选项。
这将选择ATtiny15兼容模式,在该模式下,系统时钟被四分频,从而产生1.6 MHz的时钟频率。 有关更多信息,请参见 第27页上的“校准的内部振荡器”.
以下各节给出了每个时钟选项的各种选择。 当CPU从掉电唤醒时,将使用选定的时钟源对启动进行计时,以确保在指令执行开始之前稳定的振荡器操作。 当CPU从复位启动时,会有一个额外的延迟,允许电源在开始正常操作之前达到稳定的水平。 看门狗振荡器用于对启动时间的实时部分进行计时。 每次超时所使用的WDT振荡器周期数如下所示: 表 6-2.
表 6-2。 看门狗振荡器周期数
典型超时 | 循环次数 |
4 毫秒 | 512 |
64 毫秒 | 8K(8,192) |
外部时钟
要从外部时钟源驱动设备,应如图所示驱动CLKI。 图 6-4。 要使用外部时钟运行设备,必须将CKSEL保险丝设置为“ 00”。
图 6-4。 外部时钟驱动配置
当选择该时钟源,启动时间由熔丝位SUT确定如图 表 6-3.
表 6-3。 外部时钟选择的启动时间
指定[1:0] | 掉电启动时间 | 额外的复位延迟 | 建议使用 |
00 | 6 CK | 14CK | BOD已启用 |
01 | 6 CK | 14CK + 4毫秒 | 快速上升的力量 |
10 | 6 CK | 14CK + 64毫秒 | 功率缓慢上升 |
11 | 预订的 |
在施加外部时钟时,需要避免所施加的时钟频率突然变化,以确保MCU的稳定运行。 从一个时钟周期到下一个时钟周期,如果频率变化超过2%,可能会导致无法预测的行为。 在时钟频率的这种变化期间,需要确保MCU保持复位状态。
请注意,系统时钟预售可用于实现内部时钟频率的运行时更改,同时仍可确保稳定的操作。 参考 第31页上的“系统时钟预分频器” 了解详情。
高频PLL时钟
有一个内部PLL提供了标称的64 MHz时钟频率,该时钟频率锁定到RC振荡器,以便使用外设定时器/计数器1和系统时钟源。 当被选作系统时钟源时,通过将CKSEL熔丝编程为'0001',可以将其除以四,如 表 6-4.
表 6-4。 高频 PLL 时钟工作模式
CKSEL[3:0] | 标称频率 |
0001 | 16兆赫 |
选择此时钟源时,启动时间由SUT保险丝确定,如下图所示 表 6-5.
表 6-5。 高频 PLL 时钟的启动时间
指定[1:0] | 掉电启动时间 | 上电复位的额外延迟 (VCC = 5.0V) | 建议使用 |
00 | 14CK + 1K(1024)CK + 4毫秒 | 4 毫秒 | BOD已启用 |
表 6-5。 高频 PLL 时钟的启动时间
指定[1:0] | 掉电启动时间 | 上电复位的额外延迟 (VCC = 5.0V) | 建议使用 |
01 | 14CK + 16K(16384)CK + 4毫秒 | 4 毫秒 | 快速上升的力量 |
10 | 14CK + 1K(1024)CK + 64毫秒 | 4 毫秒 | 功率缓慢上升 |
11 | 14CK + 16K(16384)CK + 64毫秒 | 4 毫秒 | 功率缓慢上升 |
校准内部振荡器
默认情况下,内部 RC 振荡器提供大约 8.0 MHz 的时钟。 虽然卷tage 和温度相关,该时钟可由用户非常准确地校准。 看 “校准的内部RC振荡器Accu- ”第164页 和 第192页上的“内部振荡器速度” 更多细节。 该设备出厂时已编程了CKDIV8保险丝。 看 第31页上的“系统时钟预分频器” 了解更多详情。
可以通过编程CKSEL保险丝将该时钟选择为系统时钟,如下图所示: 表6-6页面
27。 如果选择,它将在没有外部组件的情况下运行。 复位期间,硬件将预编程的校准值加载到OSCCAL寄存器中,从而自动校准RC振荡器。 此校准的精度显示为的工厂校准 第21页的表2-164.
通过从SW更改OSCCAL寄存器,请参见 第31页上的“ OSCCAL –振荡器校准寄存器”,与使用工厂校准相比,可以获得更高的校准精度。 此校准的精度显示为的用户校准 第21页的表2-164.
当该振荡器用作芯片时钟时,看门狗振荡器仍将用作看门狗定时器和复位超时。 有关预编程校准值的更多信息,请参见本节。 “ Cali- bration bytes”(第150页).
还可以通过将CKSEL保险丝写入“ 6.4”来设置内部振荡器以提供0011 MHz时钟,如图XNUMX所示。 表 6-6 以下。 该设置被称为ATtiny15兼容模式,旨在提供与ATtiny6.4相同的15 MHz校准时钟源。 在ATtiny15兼容模式下,PLL使用运行在6.4 MHz的内部振荡器为Timer / Counter25.6产生1 MHz的外设时钟信号(请参见参考资料)。 “ 8位定时器/计数器1输入 ATtiny15模式”(第95页))。 请注意,在这种工作模式下,6.4 MHz时钟信号始终被四分频,从而提供1.6 MHz的系统时钟。
表 6-6。 内部校准 RC 振荡器工作模式
CKSEL[3:0] | 标称频率 |
0010(1) | 8.0兆赫 |
0011(2) | 6.4兆赫 |
设备出厂时已选中此选项。
此设置将选择ATtiny15兼容模式,在该模式下,系统时钟被四分频,从而产生1.6 MHz的时钟频率。
当校准的8 MHz内部振荡器被选作时钟源的启动时间由熔丝位SUT确定如图 表 6-7 以下。
表 6-7。 内部校准 RC 振荡器时钟的启动时间
指定[1:0] | 掉电启动时间 | 额外的复位延迟 (VCC = 5.0V) | 建议使用 |
00 | 6 CK | 14CK(1) | BOD已启用 |
01 | 6 CK | 14CK + 4毫秒 | 快速上升的力量 |
10(2) | 6 CK | 14CK + 64毫秒 | 功率缓慢上升 |
11 | 预订的 |
1.如果对RSTDISBL保险丝进行了编程,则该启动时间将增加到14CK + 4 ms,以确保可以进入编程模式。
2.设备出厂时已选中此选项。
在ATtiny15兼容模式下,启动时间由SUT熔断器确定,如下图所示 表 6-8 以下。
表 6-8。 内部校准 RC 振荡器时钟的启动时间(在 ATtiny15 模式下)
指定[1:0] | 掉电启动时间 | 额外的复位延迟 (VCC = 5.0V) | 建议使用 |
00 | 6 CK | 14CK + 64毫秒 | |
01 | 6 CK | 14CK + 64毫秒 | |
10 | 6 CK | 14CK + 4毫秒 | |
11 | 1 CK | 14CK(1) |
注意:如果对 RSTDISBL 熔丝进行编程,则此启动时间将增加到 14CK + 4 ms,以确保可以进入编程模式。
综上所述,有关ATtiny15兼容模式的更多信息,请参见以下章节。 上的“端口B(PB5:PB0)” 第 2 页, 第15页“ ATtiny24兼容模式下的内部PLL”, 开启“ ATtiny8模式下的1位定时器/计数器15” 第 95 页, 第140页上的“ debugWIRE的限制”, 第150页上的“校准字节” 并在表中 “时钟预分频器 选择”(第33页).
内部128 kHz振荡器
128 kHz 内部振荡器是一种提供 128 kHz 时钟的低功耗振荡器。 频率在 3V 和 25°C 时标称。 通过将 CKSEL 熔丝编程为“0100”,可以选择该时钟作为系统时钟。
当选择该时钟源,启动时间由熔丝位SUT确定如图 表 6-9.
表 6-9。 128 kHz 内部振荡器的启动时间
指定[1:0] | 掉电启动时间 | 额外的复位延迟 | 建议使用 |
00 | 6 CK | 14CK(1) | BOD已启用 |
01 | 6 CK | 14CK + 4毫秒 | 快速上升的力量 |
10 | 6 CK | 14CK + 64毫秒 | 功率缓慢上升 |
11 | 预订的 |
注意:如果对 RSTDISBL 熔丝进行编程,则此启动时间将增加到 14CK + 4 ms,以确保可以进入编程模式。
低频晶体振荡器
要将32.768 kHz的手表晶振用作设备的时钟源,必须通过将CKSEL保险丝设置为'0110'来选择低频晶振。 晶体应按如下所示连接 图 6-5。 若要找到适合32.768 kHz晶振的负载电容,请查阅制造商的数据表。
选择该振荡器时,启动时间由SUT熔断器确定,如下图所示 表 6-10.
表 6-10。 低频晶体振荡器时钟选择的启动时间
指定[1:0] | 掉电启动时间 | 额外的复位延迟 (VCC = 5.0V) | 建议使用 |
00 | 1K(1024)CK(1) | 4 毫秒 | 快速上升功率或BOD已启用 |
01 | 1K(1024)CK(1) | 64 毫秒 | 功率缓慢上升 |
10 | 32K(32768)CK | 64 毫秒 | 启动时频率稳定 |
11 | 预订的 |
注意:仅当启动时的频率稳定性不重要时才应使用这些选项。
低频晶体振荡器提供内部负载电容,请参见 表 6-11 在每个TOSC引脚上。
表 6-11。 低频晶体振荡器的电容
设备 | 32 kHz振荡器类型 | 上限(Xtal1 / Tosc1) | 上限(Xtal2 / Tosc2) |
ATtiny25 / 45/85 | 系统振荡器 | 16 皮法 | 6 皮法 |
晶体振荡器/陶瓷谐振器
XTAL1 和 XTAL2 分别是反相的输入和输出 amp可以配置为片上振荡器的升压器,如图所示 图 6-5。 可以使用石英晶体或陶瓷谐振器。
对于晶体和谐振器,C1 和 C2 应始终相等。 电容器的最佳值取决于所使用的晶体或谐振器、杂散电容的大小以及环境的电磁噪声。 选择与晶体一起使用的电容器的一些初步指南在 表 6-12 以下。 对于陶瓷谐振器,应使用制造商给出的电容器值。
表 6-12。 晶体振荡器工作模式
CKSEL[3:1] | 频率范围(MHz) | 与晶体一起使用的电容器C1和C2的推荐范围(pF) |
100(1) | 0.4 – 0.9 | – |
101 | 0.9 – 3.0 | 12 – 22 |
110 | 3.0 – 8.0 | 12 – 22 |
111 | 8.0 – | 12 – 22 |
注意:此选项不应与晶体一起使用,只能与陶瓷谐振器一起使用。
振荡器可以工作在三种不同的模式下,每种模式都针对特定的频率范围进行了优化。 如图所示,通过保险丝CKSEL [3:1]选择工作模式。 表 6-12.
CKSEL0保险丝与SUT [1:0]保险丝一起选择启动时间,如下图所示 表 6-13.
表 6-13。 晶体振荡器时钟选择的启动时间
CKSEL0 | 指定[1:0] | 掉电启动时间 | 额外的复位延迟 | 建议使用 |
0 | 00 | 258 CK(1) | 14CK + 4毫秒 | 陶瓷谐振器,快速上升功率 |
0 | 01 | 258 CK(1) | 14CK + 64毫秒 | 陶瓷谐振器,功率缓慢上升 |
0 | 10 | 1K(1024)CK(2) | 14CK | 陶瓷谐振器,启用BOD |
0 | 11 | 1K(1024)CK(2) | 14CK + 4毫秒 | 陶瓷谐振器,快速上升功率 |
1 | 00 | 1K(1024)CK(2) | 14CK + 64毫秒 | 陶瓷谐振器,功率缓慢上升 |
1 | 01 | 16K(16384)CK | 14CK | 晶体振荡器,BOD使能 |
1 | 10 | 16K(16384)CK | 14CK + 4毫秒 | 晶体振荡器,快速上升功率 |
1 | 11 | 16K(16384)CK | 14CK + 64毫秒 | 晶体振荡器,功率缓慢上升 |
笔记
仅当未在接近设备最大频率的条件下工作时,并且仅在启动时的频率稳定性对应用不重要的情况下,才应使用这些选项。 这些选项不适用于晶体。
这些选项旨在与陶瓷谐振器一起使用,并确保启动时的频率稳定性。 当工作在不接近器件最大频率的情况下,并且启动时的频率稳定性对应用不重要时,它们也可以与晶体一起使用。
默认时钟源
该器件出厂时 CKSEL = “0010”,SUT = “10”,并且 CKDIV8 已编程。 因此,默认时钟源设置是内部 RC 振荡器,运行频率为 8 MHz,启动时间最长,初始系统时钟预分频为 8,从而产生 1.0 MHz 的系统时钟。 此默认设置可确保所有用户都可以使用 In-System 或 High-vol 进行所需的时钟源设置tage 程序员。
系统时钟预分频器
可以通过设置ATtiny25 / 45/85系统时钟来分频 第32页上的“ CLKPR –时钟预分频寄存器”. 当对处理能力的要求较低时,此功能可用于降低功耗。 这可以与所有时钟源选项一起使用,它会影响 CPU 和所有同步外设的时钟频率。 clkI/O、clkADC、clkCPU 和 clkFLASH 除以一个因子,如下所示 第6页的表15-33.
切换时间
在预分频器设置之间进行切换时,系统时钟预分频器可确保时钟系统中不会发生毛刺,并且确保中间频率均不会高于与先前设置相对应的时钟频率或与新设置相对应的时钟频率。
实现预分频器的纹波计数器以未分频的时钟频率运行,该频率可能比CPU的时钟频率快。 因此,无法确定预分频器的状态-即使它是可读的,也无法准确预测从一个时钟分频切换到另一时钟分频所需的确切时间。
从写入CLKPS值开始,新时钟频率生效之前,它需要T1 + T2和T1 + 2 * T2之间。 在此间隔内,将产生2个有效时钟沿。 在此,T1是前一个时钟周期,T2是与新的预分频器设置相对应的周期。
时钟输出缓冲器
器件可以在CLKO引脚上输出系统时钟(不用作XTAL2引脚时)。 为了使能输出,必须对CKOUT保险丝进行编程。 当芯片时钟用于驱动系统上的其他电路时,此模式适用。 请注意,在复位期间将不会输出时钟,并且在对保险丝进行编程时,I / O引脚的正常操作将被忽略。 当时钟在CLKO上输出时,可以选择内部RC振荡器,WDT振荡器,PLL和外部时钟(CLKI)。 晶体振荡器(XTAL1,XTAL2)不能用于CLKO上的时钟输出。 如果使用系统时钟预分频器,则输出的是分频的系统时钟。
注册说明
OSCCAL –振荡器校准寄存器
少量 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x31 | CAL7 | CAL6 | CAL5 | CAL4 | CAL3 | CAL2 | CAL1 | CAL0 | 华侨城 |
读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 |
位7:0 – CAL [7:0]:振荡器校准值
振荡器校准寄存器用于调整校准后的内部RC振荡器,以消除振荡器频率中的工艺偏差。 芯片复位期间,预编程的校准值会自动写入此寄存器,从而提供出厂校准的频率,如 第21页的表2-164。 应用软件可以写入该寄存器以更改振荡器频率。 可以将振荡器校准为指定的频率 第21页的表2-164。 不能保证超出该范围的校准。
注意,该振荡器用于对EEPROM和Flash的写访问进行计时,并且这些写时间将受到相应的影响。 如果写入了EEPROM或闪存,请勿将其校准到8.8 MHz以上。 否则,EEPROM或闪存写入可能会失败。
CAL7位确定振荡器的工作范围。 将该位设置为0将给出最低的频率范围,将该位设置为1将给出最高的频率范围。 这两个频率范围是重叠的,换句话说,OSCCAL = 0x7F的设置给出的频率高于OSCCAL = 0x80。
CAL [6:0]位用于在所选范围内调谐频率。 设置为0x00给出该范围内的最低频率,设置为0x7F给出该范围内的最高频率。
为了确保MCU的稳定运行,应将校准值更改为较小值。 从一个周期到下一个周期,如果频率变化超过2%,可能会导致无法预测的行为。 每次校准时,OSCCAL的变化不应超过0x20。 在时钟频率的这种变化期间,需要确保MCU保持复位状态
表 6-14。 内部 RC 振荡器频率范围
OSCCAL值 | 相对于标称频率的典型最低频率 | 相对于标称频率的典型最高频率 |
0x00 | 50% | 100% |
0x3F | 75% | 150% |
0x7F | 100% | 200% |
CLKPR –时钟预分频寄存器
少量 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x26 | 时钟脉冲 | – | – | – | 时钟3 | 时钟2 | 时钟1 | 时钟0 | 时钟脉冲 |
读/写 | 读/写 | R | R | R | 读/写 | 读/写 | 读/写 | 读/写 |
初始值0 0 0 0参见位描述
位7 – CLKPCE:时钟预分频器改变使能
必须将CLKPCE位写入逻辑XNUMX,以使能CLKPS位的更改。 仅当同时将CLKPR中的其他位写入零时,才会更新CLKPCE位。 CLKPCE在写入或写入CLKPS位后的四个周期内由硬件清除。 在此超时周期内重写CLKPCE位既不会延长超时周期,也不会清除CLKPCE位。
Bits 6:4 – Res:保留位
这些位是ATtiny25 / 45/85中的保留位,将始终读为零。
位3:0 – CLKPS [3:0]:时钟预分频器选择位3-0
这些位定义了选定时钟源和内部系统时钟之间的分频系数。 这些位可以在运行时写入,以改变时钟频率以适合应用需求。 当分频器将输入到MCU的主时钟分频时,使用分频因子会降低所有同步外设的速度。 除法因子在 表 6-15.
为避免意外更改时钟频率,必须遵循特殊的写入过程来更改CLKPS位:
将时钟预分频器更改使能(CLKPCE)位写入XNUMX,并将CLKPR中的所有其他位写入XNUMX。
在四个周期内,将所需的值写入CLKPS,同时将零写入CLKPCE。
更改预分频器设置时,必须禁用中断,以确保不中断写过程。
CKDIV8 熔丝确定 CLKPS 位的初始值。 如果 CKDIV8 未编程,则 CLKPS 位将重置为“0000”。 如果对 CKDIV8 进行了编程,则 CLKPS 位将重置为“0011”,从而在启动时提供 8 的分频因子。 如果所选时钟源的频率高于当前工作条件下器件的最大频率,则应使用此功能。 请注意,无论 CKDIVXNUMX 熔丝设置如何,都可以将任何值写入 CLKPS 位。 应用软件必须确保有足够的分频因子
如果所选时钟源在当前工作条件下的频率高于器件的最大频率,则选择该选项。 该设备出厂时已编程了CKDIV8保险丝。
表 6-15。 时钟预分频器选择
时钟3 | 时钟2 | 时钟1 | 时钟0 | 时钟分频系数 |
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 | 预订的 |
注意:预分频器在 ATtiny15 兼容模式下被禁用,写入 CLKPR 或编程 CKDIV8 熔丝对系统时钟(始终为 1.6 MHz)没有任何影响。
电源管理和睡眠模式
高性能和业界领先的代码效率使AVR微控制器成为低功耗应用的理想选择。 此外,睡眠模式使应用程序可以关闭MCU中未使用的模块,从而节省了功率。 AVR提供各种睡眠模式,允许用户根据应用需求调整功耗。
睡眠模式
第6页的图1-23 在ATtiny25 / 45/85中介绍了不同的时钟系统及其分布。 该图有助于选择适当的睡眠模式。 表 7-1 显示了不同的睡眠模式及其唤醒源。
表 7-1。 不同睡眠模式下的活动时钟域和唤醒源
活动时钟域 | 振荡器 | 唤醒源 | ||||||||||
睡眠模式 | 时钟CPU | 快闪 | 时钟输入输出 | 时钟ADC | 时钟时钟 | 主时钟源使能 | INT0和引脚变化 | SPM / EEPROM
准备好 |
USI启动条件 |
模数转换器 | 其他输入/输出 | 看门狗 打断 |
闲置的 | X | X | X | X | X | X | X | X | X | X | ||
ADC降噪 | X | X | X(1) | X | X | X | X | |||||
掉电 | X(1) | X | X |
注意:对于 INT0,只有电平中断。
要进入三种睡眠模式中的任何一种,必须将MCUCR中的SE位写入逻辑1,并且必须执行SLEEP指令。 MCUCR寄存器中的SM [0:XNUMX]位选择通过SLEEP指令激活哪种睡眠模式(空闲,ADC降噪或掉电)。 看 表 7-2 总结一下。
如果在 MCU 处于睡眠模式时发生允许的中断,MCU 将被唤醒。 除了启动时间外,MCU 还会暂停四个周期,执行中断程序,并从 SLEEP 之后的指令恢复执行。 登记册内容 File 当设备从睡眠中唤醒时,SRAM 和 SRAM 保持不变。 如果在睡眠模式期间发生复位,MCU 将唤醒并从复位向量执行。
注意:如果电平触发中断用于唤醒,改变的电平必须保持一段时间以唤醒 MCU(以及 MCU 进入中断服务程序)。 看 第49页“外部中断” 了解详情。
空闲模式
当 SM[1:0] 位被写入 00 时,SLEEP 指令使 MCU 进入空闲模式,停止 CPU 但允许模拟比较器、ADC、USI、定时器/计数器、看门狗和中断系统继续运行吃。 这种睡眠模式基本上停止了 clkCPU 和 clkFLASH,同时允许其他时钟运行。
空闲模式使MCU可以从外部触发的中断以及内部溢出(如定时器溢出)中唤醒。 如果不需要从模拟比较器中断唤醒,可以通过将ACD位置XNUMX来关闭模拟比较器的电源。 第120页,“ ACSR –模拟比较器控制和状态寄存器”。 这将减少空闲模式下的功耗。 如果启用了ADC,则进入该模式时将自动开始转换。
ADC降噪模式
当 SM[1:0] 位写入 01 时,SLEEP 指令使 MCU 进入 ADC 降噪模式,停止 CPU 但允许 ADC、外部中断和看门狗继续运行(如果启用)。 这种睡眠模式会停止 clkI/O、clkCPU 和 clkFLASH,同时允许其他时钟运行。
这样可以改善ADC的噪声环境,从而实现更高分辨率的测量。 如果使能了ADC,则进入该模式会自动开始转换。 除了ADC转换完成中断外,只有外部复位,看门狗复位,掉电复位,SPM / EEPROM就绪中断,INT0上的外部电平中断或引脚改变中断都可以将MCU从ADC降噪中唤醒模式。
掉电模式
当SM [1:0]位写入10时,SLEEP指令使MCU进入掉电模式。 在这种模式下,振荡器被停止,而外部中断,USI启动条件检测和看门狗继续工作(如果使能)。 只有外部复位,看门狗复位,欠压复位,USI启动条件中断,INT0上的外部电平中断或引脚更改中断都可以唤醒MCU。 该睡眠模式会暂停所有生成的时钟,仅允许异步模块运行。
软件BOD禁用
当BODLEVEL保险丝启用了欠压检测器(BOD)时(请参阅 第20页的表4-148),BOD 正在积极监控供应量tage 在睡眠期间。 在某些器件中,可以通过在掉电睡眠模式下通过软件禁用 BOD 来节省功耗。 睡眠模式功耗将与 BOD 被保险丝全局禁用时处于同一水平。
如果 BOD 被软件禁用,则 BOD 功能在进入睡眠模式后立即关闭。 从睡眠中唤醒后,BOD 会再次自动启用。 如果 VCC 电平在睡眠期间下降,这可确保安全操作。
禁用BOD时,从睡眠模式唤醒的时间将与从RESET唤醒的时间相同。 用户必须手动配置唤醒时间,以使带隙基准有时间启动,并且BOD在MCU继续执行代码之前正常工作。 请参见表中的SUT [1:0]和CKSEL [3:0]保险丝位 第149页上的“保险丝低字节”
BOD禁用由MCU控制寄存器的BODS(BOD睡眠)位控制,请参见 “ MCUCR – MCU控制 注册”(第37页)。 将该位写入XNUMX将关闭掉电模式下的BOD,而写入XNUMX则使BOD保持活动状态。 默认设置为零,即BOD处于活动状态。
写入BODS位由定时序列和使能位控制,请参见 “ MCUCR – MCU Control Regis- ter”(第37页).
限制
仅在以下设备中实现了BOD禁用功能:
ATtiny25,修订版E和更高版本
ATtiny45,修订版D,及更高版本
ATtiny85,修订版C和更高版本
修订标记在设备包装上,可以位于以下位置:
封装8P3和8S2的底面
封装20M1的顶部
节能寄存器
节能寄存器(PRR),请参阅 第38页上的“ PRR –节能寄存器”提供了一种通过停止单个外设的时钟来降低功耗的方法。 外设的当前状态被冻结,并且无法读取或写入I / O寄存器。 外设在停止时钟时使用的资源将保持占用状态,因此在大多数情况下,应在停止时钟之前禁用外设。 通过清除PRR中的位来唤醒模块,可使模块处于与关闭前相同的状态。
可以在空闲模式和活动模式下使用模块关闭功能,以显着降低整体功耗。 在所有其他睡眠模式下,时钟已经停止。 看 第177页“ I / O模块的电源电流” 例如amp莱斯。
最小化功耗
尝试最小化AVR控制系统中的功耗时,要考虑几个问题。 通常,应尽可能使用睡眠模式,并且应选择睡眠模式,以使设备功能的运行尽可能少。 应禁用所有不需要的功能。 特别是,以下模块在尝试实现最低功耗时可能需要特别考虑。
模拟数字转换器
如果使能,则将在所有睡眠模式下使能ADC。 为了节省功耗,进入任何睡眠模式之前,应先禁用ADC。 当ADC关闭并再次打开时,下一次转换将是扩展转换。 参考 第122页上的“模拟到数字转换器” 有关ADC操作的详细信息。
模拟比较器
进入空闲模式时,如果不使用模拟比较器,则应禁用。 进入 ADC 降噪模式时,应禁用模拟比较器。 在其他睡眠模式下,模拟比较器自动禁用。 但是,如果模拟比较器设置为使用内部电压tage 参考作为输入,模拟比较器应在所有睡眠模式下禁用。 否则,内部卷tage 参考将被启用,与睡眠模式无关。 参考 第119页上的“模拟比较器” 有关如何配置模拟比较器的详细信息。
掉电检测器
如果应用程序中不需要掉电检测器,则应关闭此模块。 如果BODLEVEL保险丝启用了欠压检测器,则它将在所有睡眠模式下均启用,因此始终消耗功率。 在更深的睡眠模式下,这将大大有助于总电流消耗。 看 “精疲力尽的侦探- tion”(第41页) 和 第35页上的“禁用软件BOD” 有关如何配置掉电检测器的详细信息。
内部卷tag参考资料
内部卷tag当欠压检测、模拟比较器或 ADC 需要时,将启用参考。 如果这些模块如上述部分所述被禁用,则内部卷tag参考将被禁用,并且不会消耗功率。 再次打开时,用户必须在使用输出之前允许参考启动。 如果参考在睡眠模式下保持开启,则可以立即使用输出。 参考 “内部卷tage 参考”,第 42 页 有关启动时间的详细信息。
看门狗定时器
如果应用程序中不需要看门狗定时器,则应关闭该模块。 如果启用了看门狗定时器,则它将在所有睡眠模式下都被使能,因此,总是要消耗功率。 在更深的睡眠模式下,这将大大有助于总电流消耗。 参考 第42页的“看门狗定时器” 有关如何配置看门狗定时器的详细信息。
端口引脚
进入睡眠模式时,所有端口引脚都应配置为使用最小功率。 最重要的是确保没有引脚驱动电阻负载。 在 I/O 时钟 (clkI/O) 和 ADC 时钟 (clkADC) 都停止的睡眠模式下,设备的输入缓冲器将被禁用。 这样可以确保不消耗功率
在不需要时由输入逻辑决定。 在某些情况下,需要输入逻辑来检测唤醒条件,并且
然后将启用它。 请参阅本节 第57页“数字输入使能和睡眠模式” 有关启用哪些引脚的详细信息。 如果启用输入缓冲器并且输入信号悬空或具有接近 VCC/2 的模拟信号电平,输入缓冲器将使用过多的功率。
对于模拟输入引脚,应始终禁用数字输入缓冲器。 即使在活动模式下,输入引脚上接近 VCC/2 的模拟信号电平也会产生很大的电流。 可以通过写入数字输入禁用寄存器 (DIDR0) 来禁用数字输入缓冲器。 参考 第0页上的“ DIDR0 –数字输入禁用寄存器121” 了解详情。
注册说明
MCUCR – MCU控制寄存器
MCU控制寄存器包含用于电源管理的控制位。
少量 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | 生物量 | 聚氨酯分散体 | SE | SM1 | SM0 | 证券交易所 | ISC01 | ISC00 | 微控制器 |
读/写 | R | 读/写 | 读/写 | 读/写 | 读/写 | R | 读/写 | 读/写 | |
初始值 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 7 – BODS:BOD睡眠
BOD禁用功能仅在某些设备中可用。 看 第36页上的“限制”.
为了在睡眠期间禁用BOD(请参阅 第7页的表1-34)BODS位必须写为逻辑XNUMX。 这由定时序列和MCUCR中的使能位BODSE来控制。 首先,必须将BODS和BODSE都设置为XNUMX。 其次,必须在四个时钟周期内将BODS设置为XNUMX,并将BODSE设置为零。 设置后,BODS位在三个时钟周期内处于活动状态。 当BODS处于活动状态时,必须执行睡眠指令才能关闭BOD的实际睡眠模式。 三个时钟周期后,BODS位将自动清零。
在尚未实现睡眠BOD的器件中,该位未被使用,并且始终读为零。
位5 – SE:睡眠使能
当执行 SLEEP 指令时,必须将 SE 位写入逻辑 XNUMX 以使 MCU 进入睡眠模式。 为避免 MCU 进入睡眠模式,除非是编程人员的目的,建议在执行 SLEEP 指令之前将睡眠使能 (SE) 位写入 XNUMX,并在唤醒后立即将其清除。
位4:3 – SM [1:0]:睡眠模式选择位1和0
这些位在三种可用的睡眠模式之间进行选择,如下所示: 表 7-2.
表 7-2。 睡眠模式选择
SM1 | SM0 | 睡眠模式 |
0 | 0 | 闲置的 |
0 | 1 | ADC降噪 |
1 | 0 | 掉电 |
1 | 1 | 预订的 |
位2 – BODSE:BOD休眠使能
BOD禁用功能仅在某些设备中可用。 看 第36页上的“限制”.
BODSE位使能BODS控制位的设置,如BODS位说明中所述。 BOD禁用由定时序列控制。
在尚未实现软件BOD禁用的设备中未使用此位,在这些设备中将读为零。
PRR –节能寄存器
降低功耗寄存器提供了一种方法,可以通过禁用外围时钟信号来降低功耗。
少量 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x20 | – | – | – | – | PRTIM1 | PRTIM0 | 普鲁西 | 亚太发展研究中心 | 帕金森病 |
读/写 | R | R | R | R | 读/写 | 读/写 | 读/写 | 读/写 | |
初始值 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bits 7:4 – Res:保留位
这些位是ATtiny25 / 45/85中的保留位,将始终读为零。
位3 – PRTIM1:省电定时器/计数器1
向该位写入逻辑1将关闭Timer / Counter1模块。 使能Timer / CounterXNUMX后,操作将像关机前一样继续。
位2 – PRTIM0:省电定时器/计数器0
向该位写入逻辑0将关闭Timer / Counter0模块。 使能Timer / CounterXNUMX后,操作将像关机前一样继续。
Bit 1 – PRUSI:降低功耗的USI
向该位写入逻辑XNUMX将通过停止模块时钟来关闭USI。 当再次唤醒USI时,应将USI重新初始化以确保其正常运行。
位0 – PRADC:功耗降低ADC
向该位写入逻辑XNUMX将关闭ADC。 关闭前必须禁用ADC。 请注意,模拟比较器的某些部分还使用ADC时钟,这意味着当该位为高电平时,不能使用模拟比较器。
系统控制和重置
重置AVR
复位期间,所有I / O寄存器均设置为其初始值,程序从复位向量开始执行。 放置在复位向量处的指令必须是RJMP –相对跳转–复位处理程序的指令。 如果程序从不启用中断源,则不使用中断向量,并且可以在这些位置放置常规程序代码。 中的电路图 图 8-1 显示了复位逻辑。 复位电路的电气参数在 第165页的“系统和重置特性”.
图 8-1 复位逻辑
当重置源变为活动状态时,AVR的I / O端口会立即重置为其初始状态。 这不需要运行任何时钟源。
在所有复位源都变为非活动状态之后,将调用延迟计数器,以扩展内部复位。 这样可以使电源在开始正常运行之前达到稳定的水平。 延迟计数器的超时时间由用户通过SUT和CKSEL保险丝定义。 延迟时间的不同选择显示在 “钟 来源”(第25页).
重置来源
ATtiny25 / 45/85具有四个复位源:
上电复位。 当电源电压降低时 MCU 复位tage 低于上电复位阈值 (VPOT)。
外部复位。 当RESET引脚上的低电平持续时间超过最小脉冲长度时,MCU将复位。
看门狗复位。 当看门狗定时器时间段到期并且看门狗使能时,MCU将复位。
掉电复位。 当电源电压下降时 MCU 复位tage VCC 低于欠压复位阈值 (VBOT),欠压检测器已启用。
上电复位
片上检测电路会产生上电复位(POR)脉冲。 检测级别在 “ Sys- “温度和复位特性”,第165页. 只要 VCC 低于检测电平,POR 就会被激活。 POR 电路可用于触发启动复位,以及检测电源电压故障tage.
上电复位 (POR) 电路可确保器件从上电复位。 达到上电复位阈值 voltage 调用延迟计数器,它决定了器件在 VCC 上升后保持在 RESET 状态的时间。 当 VCC 降至检测电平以下时,RESET 信号将再次激活,没有任何延迟。
图 8-2。 MCU 启动,RESET 连接到 VCC
内部复位
图 8-3。 MCU 启动,RESET 外部扩展
外部重置
如果使能,则RESET引脚上的低电平会产生外部复位。 重置脉冲长于最小脉冲宽度(请参见 第165页的“系统和重置特性”) 将产生复位,即使时钟没有运行。 较短的脉冲不能保证产生复位。 当施加的信号达到复位阈值时tage – VRST – 在其上升沿,延迟计数器在超时期限到期后启动 MCU。
图 8-4。 操作期间的外部复位
掉电检测
ATtiny25/45/85 有一个片上掉电检测 (BOD) 电路,用于通过将 VCC 电平与固定触发电平进行比较来监控运行期间的 VCC 电平。 BOD 的触发电平可以通过 BODLEVEL 保险丝选择。 触发电平具有迟滞以确保无尖峰掉电检测。 检测电平的迟滞应解释为 VBOT+ = VBOT + VHYST/2 和 VBOT- = VBOT – VHYST/2。
当 BOD 使能时,VCC 下降到低于触发电平的值(VBOT- in 图 8-5), 掉电复位立即被激活。 当 VCC 增加到高于触发电平时(VBOT+ in 图 8-5),延迟计数器在超时时间 tTOUT 到期后启动 MCU。
如果 vol,BOD 电路只会检测到 VCC 的下降tage 保持在触发水平以下的时间长于中给出的 tBOD 第165页的“系统和重置特性”.
看门狗复位
当看门狗超时时,它会产生一个 CK 周期持续时间的短复位脉冲。 在该脉冲的下降沿,延迟定时器开始计算超时时间 tTOUT。 参考 第42页的“看门狗定时器” 有关看门狗定时器操作的详细信息。
卷tage 参考使能信号和启动时间
卷tag参考的启动时间可能会影响它的使用方式。 启动时间在 第165页的“系统和重置特性”。 为了节省功率,参考并非总是打开。 在以下情况下,该参考是打开的:
使能BOD时(通过对BODLEVEL [2:0]保险丝位进行编程)。
当带隙基准连接到模拟比较器时(通过将ACSR中的ACBG位置XNUMX)。
启用ADC时。
因此,当未使能BOD时,在将ACBG位置XNUMX或使能ADC后,在使用模拟比较器或ADC的输出之前,用户必须始终允许基准电压源启动。 为了减少掉电模式下的功耗,用户可以避免上述三种情况,以确保在进入掉电模式之前已关闭基准电压源。
看门狗定时器
看门狗定时器由片内振荡器提供时钟,该片内振荡器以128 kHz的频率运行。 通过控制看门狗定时器预分频器,可以如下所示调整看门狗复位间隔: 第8页的表3-46。 WDR –看门狗复位–指令复位看门狗定时器。 当看门狗定时器被禁用并且发生芯片复位时,它也会被复位。 可以选择十个不同的时钟周期来确定复位周期。 如果复位周期在没有其他看门狗复位的情况下结束,则ATtiny25 / 45/85复位并从复位向量执行。 有关看门狗复位的时序详细信息,请参阅 第8页的表3-46.
看门狗定时器也可以配置为产生中断而不是复位。 当使用看门狗从掉电唤醒时,这可能非常有用。
为了防止意外禁用看门狗或意外更改超时时间,保险丝WDTON选择了两个不同的安全级别,如下所示: 表 8-1 參閱 “用于更改浓度的定时序列 看门狗定时器的配置”,第43页 了解详情。
表 8-1。 WDT 配置作为 WDTON 熔丝设置的函数
威顿 | 安全级别 | WDT初始状态 | 如何禁用WDT | 如何更改超时 |
未编程 | 1 | 已禁用 | 定时序列 | 无限制 |
程序 | 2 | 已启用 | 始终启用 | 定时序列 |
图 8-7。 看门狗定时器
更改看门狗定时器配置的定时序列
在两个安全级别之间,更改配置的顺序略有不同。 针对每个级别描述了单独的过程。
安全级别 1:在此模式下,看门狗定时器最初被禁用,但可以通过将 WDE 位写入 XNUMX 来启用,没有任何限制。 禁用已启用的看门狗定时器时需要定时序列。 要禁用已启用的看门狗定时器,必须遵循以下过程:
在同一操作中,将逻辑XNUMX写入WDCE和WDE。 无论WDE位的先前值如何,都必须将逻辑XNUMX写入WDE。
在接下来的四个时钟周期内,以相同的操作,根据需要写入WDE和WDP位,但将WDCE位清零。
安全级别 2:在此模式下,看门狗定时器始终启用,并且 WDE 位始终读取为 XNUMX。 更改看门狗超时周期时需要一个定时序列。 要更改看门狗超时,必须遵循以下过程:
在同一操作中,将逻辑XNUMX写入WDCE和WDE。 即使始终设置WDE,也必须将WDE写入XNUMX以启动定时序列。
在接下来的四个时钟周期内,以相同的操作,根据需要写入WDP位,但将WDCE位清零。 写入WDE位的值无关紧要。
代码示例ample
以下代码例如ample 显示了一个用于关闭 WDT 的程序集和一个 C 函数。 前任ample 假设中断受到控制(例如,通过全局禁用中断),以便在执行这些功能期间不会发生中断。
汇编代码前ample(1) |
WDT_off:
宽动态 ; 在MCUSR中清除WDRF ldi r16, (0< 出 MCUSR,r16 ; 向WDCE和WDE写入逻辑一 ; 保留旧的预分频器设置以防止意外的看门狗复位 在 r16 中,WDTCR 原点 r16, (1< 出 WDTCR,r16 ; 关闭WDT ldi r16, (0< 出 WDTCR,r16 保留 |
C 代码示例ample(1) |
void WDT_off(void)
{ _WDR(); /* 清除 MCUSR 中的 WDRF */ MCUSR = 0x00 /* 将逻辑 1 写入 WDCE 和 WDE */ WDTCR |= (1< / *关闭WDT * / WDTCR = 0x00; } |
注意:1.请参阅 “代码示例amples”(第 6 页).
注册说明
MCUSR – MCU状态寄存器
MCU状态寄存器提供有关哪个复位源导致MCU复位的信息。
少量 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x34 | – | – | – | – | WDRF | 博尔夫 | 外部RF | 磷酸二酯酶 | 微控制器 |
读/写 | R | R | R | R | 读/写 | 读/写 | 读/写 | 读/写 |
初始值0 0 0 0参见位描述
Bits 7:4 – Res:保留位
这些位是ATtiny25 / 45/85中的保留位,将始终读为零。
位3 – WDRF:看门狗复位标志
如果发生看门狗复位,则该位置XNUMX。 该位可通过上电复位或将逻辑零写入标志来复位。
Bit 2 – BORF:欠压复位标志
如果发生欠压复位,则该位置XNUMX。 该位可通过上电复位或将逻辑零写入标志来复位。
位1 – EXTRF:外部复位标志
如果发生外部复位,则该位置XNUMX。 该位可通过上电复位或将逻辑零写入标志来复位。
位0 – PORF:上电复位标志
如果发生上电复位,则该位置XNUMX。 仅通过将逻辑零写入标志来复位该位。
为了利用复位标志来识别复位条件,用户应在程序中尽早读取并复位MCUSR。 如果在另一个复位发生之前清除了寄存器,则可以通过检查复位标志来找到复位源。
WDTCR –看门狗定时器控制寄存器
少量 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x21 | WDIF | WDIE | WDP3 | 世界数据中心 | 广义相对论 | WDP2 | WDP1 | WDP0 | 看门狗 |
读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | |
初始值 | 0 | 0 | 0 | 0 | X | 0 | 0 | 0 |
位7 – WDIF:看门狗超时中断标志
当看门狗定时器发生超时且看门狗定时器配置为中断时,该位置XNUMX。 执行相应的中断处理向量时,硬件会将WDIF清零。 或者,通过向标志写入逻辑XNUMX来清除WDIF。 当设置SREG和WDIE中的I位时,将执行看门狗超时中断。
位6 – WDIE:看门狗超时中断使能
当该位写为XNUMX,WDE清零,并且状态寄存器中的I位被置XNUMX时,看门狗超时中断被使能。 在这种模式下,如果看门狗定时器超时,将执行相应的中断,而不是复位。
如果设置了WDE,则在发生超时时,硬件会自动清除WDIE。 这对于在使用中断时保持看门狗复位安全性很有用。 WDIE位清零后,下一次超时将产生一个复位。 为了避免看门狗复位,必须在每个中断后将WDIE置XNUMX。
表 8-2。 看门狗定时器配置
广义相对论 | WDIE | 看门狗定时器状态 | 超时动作 |
0 | 0 | 已停止 | 没有任何 |
0 | 1 | 跑步 | 打断 |
1 | 0 | 跑步 | 重置 |
1 | 1 | 跑步 | 打断 |
位4 – WDCE:看门狗更改使能
当WDE位写入逻辑零时,必须将该位置XNUMX。 否则,看门狗将不会被禁用。 一旦写入一个,硬件将在四个时钟周期后清除该位。 有关看门狗禁用过程,请参考WDE位的描述。 更改预分频器位时,也必须将该位置XNUMX。 看 “定时序列 第43页的“更改看门狗定时器的配置”.
位3 – WDE:看门狗使能
当WDE写入逻辑XNUMX时,看门狗定时器被启用,如果WDE被写入逻辑XNUMX,则看门狗定时器功能被禁用。 仅当WDCE位的逻辑电平为XNUMX时,才能清除WDE。 要禁用已启用的看门狗定时器,必须遵循以下步骤:
在同一操作中,将逻辑XNUMX写入WDCE和WDE。 即使在禁用操作开始之前将其设置为XNUMX,也必须将逻辑XNUMX写入WDE。
在接下来的四个时钟周期内,将逻辑0写入WDE。 这将禁用看门狗。
在安全级别2中,即使使用上述算法,也无法禁用看门狗定时器。 看 第43页,“更改看门狗定时器配置的定时序列”.
在安全级别1中,MCUSR中的WDRF覆盖WDE。 看 第44页上的“ MCUSR – MCU状态寄存器” 有关WDRF的说明。 这意味着在设置WDRF时始终设置WDE。 要清除WDE,必须在通过上述步骤禁用看门狗之前清除WDRF。 此功能可确保在导致故障的情况下多次复位,并在故障后安全启动。
注意:如果看门狗定时器不打算在应用程序中使用,那么在设备初始化时执行看门狗禁用程序很重要。 如果看门狗被意外启用,例如amp在指针失控或欠压情况下,设备将被复位,进而导致新的看门狗复位。 为避免这种情况,应用软件应始终在初始化程序中清除 WDRF 标志和 WDE 控制位。
位5、2:0 – WDP [3:0]:看门狗定时器预分频器3、2、1和0
看门狗定时器使能时,WDP [3:0]位确定看门狗定时器的预分频。 不同的预分频值及其对应的超时时间显示在 表 8-3.
表 8-3。 看门狗定时器预分频选择
WDP3 | WDP2 | WDP1 | WDP0 | WDT振荡器周期数 | VCC = 5.0V 时的典型超时 |
0 | 0 | 0 | 0 | 2K(2048)周期 | 16 毫秒 |
0 | 0 | 0 | 1 | 4K(4096)周期 | 32 毫秒 |
0 | 0 | 1 | 0 | 8K(8192)周期 | 64 毫秒 |
0 | 0 | 1 | 1 | 16K(16384)周期 | 0.125 秒 |
0 | 1 | 0 | 0 | 32K(32764)周期 | 0.25 秒 |
0 | 1 | 0 | 1 | 64K(65536)周期 | 0.5 秒 |
0 | 1 | 1 | 0 | 128K(131072)周期 | 1.0 秒 |
0 | 1 | 1 | 1 | 256K(262144)周期 | 2.0 秒 |
1 | 0 | 0 | 0 | 512K(524288)周期 | 4.0 秒 |
1 | 0 | 0 | 1 | 1024K(1048576)周期 | 8.0 秒 |
表 8-3。 看门狗定时器预分频选择(续)
WDP3 | WDP2 | WDP1 | WDP0 | WDT振荡器周期数 | VCC = 5.0V 时的典型超时 |
1 | 0 | 1 | 0 | 预订的(1) | |
1 | 0 | 1 | 1 | ||
1 | 1 | 0 | 0 | ||
1 | 1 | 0 | 1 | ||
1 | 1 | 1 | 0 | ||
1 | 1 | 1 | 1 |
注意:1. 如果选中,将使用 0b1010 以下的有效设置之一。
中断
本节描述了ATtiny25 / 45/85中执行的中断处理的详细信息。 有关AVR中断处理的一般说明,请参阅 第12页“复位和中断处理”.
ATtiny25 / 45/85中的中断向量
ATtiny25 / 45/85的中断向量在 表 9-1以下。
表 9-1。 复位和中断向量
矢量号 | 计划地址 | 来源 | 中断定义 |
1 | 0x0000 | 重置 | 外部引脚,上电复位,欠压复位,看门狗复位 |
2 | 0x0001 | INT0 | 外部中断请求0 |
3 | 0x0002 | PCINT0 | 引脚更改中断请求0 |
4 | 0x0003 | 定时器1_COMPA | 定时器/计数器1比较匹配A |
5 | 0x0004 | 定时器1_OVF | 定时器/计数器1溢出 |
6 | 0x0005 | 定时器0_OVF | 定时器/计数器0溢出 |
7 | 0x0006 | EE_RDY | EEPROM就绪 |
8 | 0x0007 | ANA_COMP | 模拟比较器 |
9 | 0x0008 | 模数转换器 | ADC转换完成 |
10 | 0x0009 | TIMER1_COMPB | 定时器/计数器1比较比赛B |
11 | 0x000A | 定时器0_COMPA | 定时器/计数器0比较匹配A |
12 | 0x000B | TIMER0_COMPB | 定时器/计数器0比较比赛B |
13 | 0x000C | 看门狗定时器 | 看门狗超时 |
14 | 0x000D | USI_START | USI开始 |
15 | 0x000E | USI_OVF | USI溢出 |
如果程序从不启用中断源,则不使用中断向量,并且可以在这些位置放置常规程序代码。
ATtiny25/45/85 中中断向量地址的典型和一般设置显示在程序 ex 中amp如下。
汇编代码前ample | ||
.org 0x0000 | ;设置下一个地址 | 陈述 |
rjmp重置 | ; 地址0x0000 | |
转入 INT0_ISR | ; 地址0x0001 | |
跳转到 PCINT0_ISR | ; 地址0x0002 | |
跳转 TIM1_COMPA_ISR | ; 地址0x0003 | |
跳转 TIM1_OVF_ISR | ; 地址0x0004 | |
跳转 TIM0_OVF_ISR | ; 地址0x0005 | |
跳转 EE_RDY_ISR | ; 地址0x0006 | |
rjmp ANA_COMP_ISR | ; 地址0x0007 | |
跳转 ADC_ISR | ; 地址0x0008 | |
跳转 TIM1_COMPB_ISR | ; 地址0x0009 | |
跳转 TIM0_COMPA_ISR | ; 地址0x000A | |
跳转 TIM0_COMPB_ISR | ; 地址0x000B | |
rjmp WDT_ISR | ; 地址0x000C | |
跳转 USI_START_ISR | ; 地址0x000D | |
跳转 USI_OVF_ISR | ; 地址0x000E | |
重置: | ; 主程序开始 | |
; 地址0x000F | ||
… |
注意:请参阅 “代码示例amples”(第 6 页).
外部中断
外部中断由INT0引脚或任何PCINT [5:0]引脚触发。 请注意,如果使能了中断,即使将INT0或PCINT [5:0]引脚配置为输出,也会触发中断。 此功能提供了一种生成软件中断的方法。 引脚更改中断如果任何使能的PCINT [5:0]引脚切换,PCI将触发。 PCMSK寄存器控制哪些引脚导致引脚更改中断。 PCINT [5:0]上的引脚更改中断被异步检测到。 这意味着这些中断也可用于从空闲模式以外的睡眠模式唤醒器件。
INT0中断可由下降沿或上升沿或低电平触发。 如MCU控制寄存器MCUCR的规范所示进行设置。 当INT0中断使能并将其配置为电平触发时,只要该引脚保持低电平,该中断就会触发。 请注意,识别INT0上的下降沿或上升沿中断需要存在一个I / O时钟,如 关于“时钟系统及其分布”的信息 第 23 页.
低电平中断
异步检测到INT0上的低电平中断。 这意味着该中断也可用于从空闲模式以外的睡眠模式唤醒器件。 I / O时钟在除空闲模式以外的所有睡眠模式下均会暂停。
请注意,如果电平触发中断用于从掉电唤醒,则所需电平必须保持足够长的时间以使 MCU 完成唤醒以触发电平中断。 如果电平在Start-up Time结束前消失,MCU仍会被唤醒,但不会产生中断。 启动时间由 SUT 和 CKSEL 熔丝定义,如中所述 第23页上的“系统时钟和时钟选项”.
如果在器件唤醒之前取消了中断引脚上的低电平,则程序执行将不会转移到中断服务程序,而是从SLEEP命令之后的指令继续执行。
引脚更改中断时序
前任amp引脚变化中断的时序文件显示在 图 9-1.
注册说明
MCUCR – MCU控制寄存器
外部中断控制寄存器A包含用于中断检测控制的控制位。
少量 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | 生物量 | 聚氨酯分散体 | SE | SM1 | SM0 | 证券交易所 | ISC01 | ISC00 | 微控制器 |
读/写 | R | 读/写 | 读/写 | 读/写 | 读/写 | R | 读/写 | 读/写 | |
初始值 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
位1:0 – ISC0 [1:0]:中断检测控制0位1和位0
如果设置了SREG I标志和相应的中断屏蔽,则外部中断INT0将激活外部中断0。 激活中断的外部INT0引脚的电平和边沿定义为 表 9-2. INT0 引脚上的值为 samp在检测边缘之前被引导。 如果选择边沿或触发中断,则持续时间超过一个时钟周期的脉冲将产生中断。 较短的脉冲不能保证产生中断。 如果选择低电平中断,则必须保持低电平直到当前执行的指令完成才能产生中断。
表 9-2。 中断 0 检测控制
ISC01 | ISC00 | 描述 |
0 | 0 | INT0的低电平产生一个中断请求。 |
0 | 1 | INT0的任何逻辑更改都会生成一个中断请求。 |
1 | 0 | INT0的下降沿产生一个中断请求。 |
1 | 1 | INT0的上升沿产生一个中断请求。 |
GIMSK –通用中断屏蔽寄存器
少量 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x3B | – | INT0 | PCIE | – | – | – | – | – | 吉姆斯克 |
读/写 | R | 读/写 | 读/写 | R | R | R | R | R | |
初始值 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
位7、4:0 – Res:保留位
这些位是ATtiny25 / 45/85中的保留位,将始终读为零。
位6 – INT0:外部中断请求0使能
当INT0位置0时,状态寄存器SREG的I位置1时,外部引脚中断使能。 MCU控制寄存器(MCUCR)中的中断检测控制0位01/00(ISC0和ISC0)定义了外部中断是在INT0引脚的上升沿和/或下降沿被激活还是在所检测的电平上被激活。 即使将INT0配置为输出,引脚上的活动也会导致中断请求。 外部中断请求XNUMX的相应中断是从INTXNUMX中断向量执行的。
位5 – PCIE:引脚更改中断使能
当PCIE位置5时,状态寄存器SREG中的I位置0时,引脚变更中断被允许。 任何使能的PCINT [5:0]引脚上的任何变化都将引起中断。 引脚更改中断请求的相应中断是从PCI中断向量执行的。 PCINT [0:XNUMX]引脚由PCMSKXNUMX寄存器单独使能。
GIFR –通用中断标志寄存器
少量 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x3A | – | INTF0 | 国际金融联合会 | – | – | – | – | – | GIFR |
读/写 | R | 读/写 | 读/写 | R | R | R | R | R | |
初始值 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
位7、4:0 – Res:保留位
这些位是ATtiny25 / 45/85中的保留位,将始终读为零。
位6 – INTF0:外部中断标志0
当INT0引脚上的边沿或逻辑变化触发中断请求时,INTF0被置0。 如果将SREG中的I位和GIMSK中的INT0位设置为XNUMX,MCU将跳转到相应的中断向量。 当执行中断程序时,该标志被清除。 或者,可以通过向其写入逻辑XNUMX来清除该标志。 当INTXNUMX被配置为电平中断时,该标志总是被清除。
位5 – PCIF:引脚更改中断标志
当任何PCINT [5:0]引脚上的逻辑变化触发中断请求时,PCIF将被置XNUMX。 如果将SREG中的I位和GIMSK中的PCIE位置XNUMX。 当执行中断程序时,该标志被清除。 或者,可以通过向其写入逻辑XNUMX来清除该标志。
PCMSK –引脚更改屏蔽寄存器
少量 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x15 | – | – | PCINT5 | PCINT4 | PCINT3 | PCINT2 | PCINT1 | PCINT0 | 相变相移键控 |
读/写 | R | R | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | |
初始值 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bits 7:6 – Res:保留位
这些位是ATtiny25 / 45/85中的保留位,将始终读为零。
位5:0 – PCINT [5:0]:引脚更改使能掩码5:0
每个PCINT [5:0]位选择是否在相应的I / O引脚上使能引脚更改中断。 如果将PCINT [5:0]置5,并将GIMSK中的PCIE位置0,则在相应的I / O引脚上使能了引脚更改中断。 如果PCINT [XNUMX:XNUMX]被清除,则相应I / O引脚上的引脚更改中断被禁止。
I/O 端口
介绍
当用作通用数字 I/O 端口时,所有 AVR 端口都具有真正的读-修改-写功能。 这意味着可以改变一个端口引脚的方向,而不会无意中通过 SBI 和 CBI 指令改变任何其他引脚的方向。 这同样适用于更改驱动值(如果配置为输出)或启用/禁用上拉电阻(如果配置为输入)。 每个输出缓冲器都具有对称的驱动特性,同时具有高吸收能力和源能力。 引脚驱动器足够强大,可以直接驱动 LED 显示屏。 所有端口引脚都有单独可选的上拉电阻tage 不变电阻。 所有 I/O 引脚都有连接到 VCC 和地的保护二极管,如中所示 图 10-1. 请参阅 第161页的“电气特性” 一个完整的参数列表。
图 10-1。 I/O 引脚等效原理图
本节中的所有寄存器和位引用均以通用形式编写。 小写“x”代表端口编号字母,小写“n”代表位数。 但是,在程序中使用寄存器或位定义时,必须使用精确的形式。 前任ample, PORTB3 表示位号。 3 在端口 B,这里一般记录为 PORTxn。 物理 I/O 寄存器和位位置列于 上的“注册说明” 第 64 页.
每个端口分配三个I / O存储器地址位置,数据寄存器-PORTx,数据方向寄存器-DDRx和端口输入引脚-PINx一个。 端口输入引脚的I / O位置是只读的,而数据寄存器和数据方向寄存器是可读写的。 但是,在PINx寄存器的某位写入逻辑XNUMX将导致数据寄存器中相应位的切换。 此外,设置后,MCUCR中的上拉禁用-PUD位会禁用所有端口中所有引脚的上拉功能。
有关将I / O端口用作通用数字I / O的说明,请参见 第53页“作为通用数字量I / O的端口”。 大多数端口引脚与设备的外围功能复用,具有备用功能。 每个替代功能如何与端口引脚发生干扰,请参见 第57页上的“备用端口功能”。 有关替代功能的完整说明,请参见各个模块部分。
请注意,启用某些端口引脚的备用功能不会影响将端口中的其他引脚用作通用数字I / O。
端口作为通用数字I / O
这些端口是带有可选内部上拉电阻的双向I / O端口。 图 10-2 显示了一个I / O端口引脚的功能描述,此处统称为Pxn。
图 10-2。 通用数字 I/O(1)
配置引脚
每个端口引脚均包含三个寄存器位:DDxn,PORTxn和PINxn。 如图所示 上的“注册说明” 第 64 页,在DDRx I / O地址访问DDxn位,在PORTx I / O地址访问PORTxn位,在PINx I / O地址访问PINxn位。
DDRx寄存器中的DDxn位选择该引脚的方向。 如果DDxn被写为逻辑XNUMX,则Pxn被配置为输出引脚。 如果将DDxn写入逻辑零,则Pxn被配置为输入引脚。
如果当该引脚配置为输入引脚时PORTxn被写为逻辑XNUMX,则上拉电阻被激活。 要关闭上拉电阻,必须将PORTxn写入逻辑零或将该引脚配置为输出引脚。 复位条件变为活动状态时,即使没有时钟在运行,端口引脚也处于三态。
如果当该引脚配置为输出引脚时PORTxn被写为逻辑XNUMX,则该端口引脚被驱动为高电平(一个)。 如果当该引脚配置为输出引脚时PORTxn被写为逻辑零,则该端口引脚被驱动为低电平(零)。
切换图钉
向PINxn写入逻辑XNUMX将独立于DDRxn的值切换PORTxn的值。 注意,SBI指令可用于切换端口中的一位。
在输入和输出之间切换
在三态 ({DDxn, PORTxn} = 0b00) 和输出高电平 ({DDxn, PORTxn} = 0b11) 之间切换时,上拉使能的中间状态 {DDxn, PORTxn} = 0b01) 或输出低电平({DDxn, PORTxn} = 0b10) 必须发生。 通常,上拉启用状态是完全可以接受的,因为高阻抗环境不会注意到强高驱动器和上拉之间的区别。 如果不是这种情况,可以将 MCUCR 寄存器中的 PUD 位设置为禁用所有端口中的所有上拉电阻。
在上拉输入和输出低电平之间切换会产生相同的问题。 用户必须使用三态({DDxn,PORTxn} = 0b00)或输出高电平({DDxn,PORTxn} = 0b10)作为中间步骤。
表 10-1 总结了引脚值的控制信号。
表 10-1。 端口引脚配置
DDxn | 端口xn | 聚氨酯分散体
(在MCUCR中) |
输入/输出 | 引体向上 | 评论 |
0 | 0 | X | 输入 | 不 | 三态(Hi-Z) |
0 | 1 | 0 | 输入 | 是的 | 如果ext,Pxn将提供电流。 拉低。 |
0 | 1 | 1 | 输入 | 不 | 三态(Hi-Z) |
1 | 0 | X | 输出 | 不 | 输出低(漏) |
1 | 1 | X | 输出 | 不 | 输出高(源) |
读取固定价值
与数据方向位DDxn的设置无关,可以通过PINxn寄存器位读取端口引脚。 如图所示 图 10-2,PINxn寄存器位和前面的锁存器构成一个同步器。 如果物理引脚在内部时钟的边缘附近改变值,则需要避免亚稳态,但这也会带来延迟。 图 10-3 显示读取外部施加的引脚值时的同步时序图。 最大和最小传播延迟分别表示为 tpd,max 和 tpd,min。
考虑在系统时钟的第一个下降沿之后不久开始的时钟周期。 时钟为低电平时,锁存器关闭;时钟为高电平时,锁存器变为透明,如“ SYNC LATCH”信号的阴影区域所示。 当系统时钟变低时,信号值被锁存。 它在随后的正时钟沿被时钟输入PINxn寄存器。 如两个箭头tpd,max和tpd,min所示,该引脚上的单个信号转换将在½到1½系统时钟周期之间延迟,具体取决于触发时间。
读回软件分配的引脚值时,必须按如下所示插入nop指令 图 10-4。 输出指令在时钟的上升沿设置“ SYNC LATCH”信号。 在这种情况下,通过同步器的延迟tpd是一个系统时钟周期。
以下代码例如ample 展示了如何将端口 B 引脚 0 和 1 设置为高电平,将 2 和 3 设置为低电平,并将端口引脚 4 到 5 定义为输入,并将上拉分配给端口引脚 4。结果引脚值被再次读回,但是如前所述,包含一条 nop 指令,以便能够读回最近分配给某些引脚的值。
汇编代码前ample(1) |
…
; 定义上拉并将输出设置为高电平 ; 定义端口引脚的方向 ldi r16,(1<<PB4)|(1<<PB1)|(1<<PB0) ldi r17,(1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0) 输出 PORTB,r16 出 DDRB,r17 ; 插入 nop 进行同步 没有 ; 读取端口引脚 在 r16,PINB … |
注意:对于汇编程序,两个临时寄存器用于最小化从引脚 0、1 和 4 上设置上拉到正确设置方向位、将位 2 和 3 定义为低并重新定义位 0 和 1 的时间XNUMX 作为强大的高驱动程序。
C 代码示例ample |
无符号字符 i;
… /* 定义上拉并将输出设置为高电平 */ /* 定义端口引脚的方向 */ PORTB = (1< DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0); /* 为同步插入nop */ _NOP(); /* 读取端口引脚 */ i = PINB; … |
数字输入使能和睡眠模式
如图所示 图 10-2, 数字输入信号可以是 clamp在施密特触发器的输入端接地。 图中表示为 SLEEP 的信号,由 MCU Sleep Controller 在 Power-down 模式下设置,以避免某些输入信号悬空或具有接近 VCC/2 的模拟信号电平时的高功耗。
对于使能为外部中断引脚的端口引脚,SLEEP被覆盖。 如果未允许外部中断请求,则这些引脚的SLEEP也处于活动状态。 SLEEP也被其他各种替代功能所覆盖,如 第57页上的“备用端口功能”.
如果逻辑高电平(“XNUMX”)出现在配置为“上升沿、下降沿或引脚上的任何逻辑变化中断”的异步外部中断引脚上,而外部中断未启用,则相应的外部中断标志将当从上述休眠模式恢复时被设置为 clamp进入这些睡眠模式会产生请求的逻辑变化。
未连接的引脚
如果未使用某些引脚,建议确保这些引脚具有定义的电平。 即使如上所述,大多数数字输入在深度睡眠模式下都被禁用,但应避免使用浮动输入,以减少启用了数字输入的所有其他模式(复位,活动模式和空闲模式)下的电流消耗。
确保未使用引脚的定义电平的最简单方法是启用内部上拉。 在这种情况下,上拉将在复位期间被禁用。 如果复位期间的低功耗很重要,建议使用外部上拉或下拉。 不建议将未使用的引脚直接连接到 VCC 或 GND,因为如果引脚被意外配置为输出,这可能会导致电流过大。
备用端口功能
大多数端口引脚除了具有通用的数字I / O之外,还具有其他功能。 图 10-5 展示了如何简化来自端口引脚的控制信号 图 10-2 可以被替代功能覆盖。 上位信号可能并非在所有端口引脚中都存在,但是该图用作适用于AVR微控制器系列中所有端口引脚的一般描述。
表 10-2。 替代功能的覆盖信号的一般描述
信号名称 | 姓名 | 描述 |
聚氨酯 | 上拉优先使能 | 如果设置了此信号,则上拉使能由PUOV信号控制。 如果清除此信号,则在以下情况下启用上拉功能:
{DDxn,PORTxn,PUD} = 0b010。 |
普奥夫 | 上拉倍率值 | 如果设置了PUOE,则无论DDxn,PORTxn和PUD寄存器位的设置如何,当设置/清除PUOV时,上拉都将被使能/禁止。 |
DDOE | 数据方向覆盖启用 | 如果设置了此信号,则输出驱动器使能由DDOV信号控制。 如果清除此信号,则通过DDxn寄存器位使能输出驱动器。 |
多夫 | 数据方向替代值 | 如果设置了DDOE,则无论DDxn寄存器位的设置如何,当设置/清除DDOV时,都将启用/禁用输出驱动器。 |
聚偏氟乙烯 | 端口值覆盖启用 | 如果设置了此信号并启用了输出驱动器,则端口值由PVOV信号控制。 如果清除了PVOE,并且启用了输出驱动器,则端口值由PORTxn寄存器位控制。 |
PVOV | 端口值替代值 | 如果设置了PVOE,则无论PORTxn寄存器位的设置如何,端口值都将设置为PVOV。 |
聚四氟乙烯 | 端口切换覆盖启用 | 如果将PTOE置XNUMX,则PORTxn寄存器的位将被反转。 |
迪奥 | 数字输入使能覆盖使能 | 如果该位置XNUMX,则数字输入使能由DIEOV信号控制。 如果清除此信号,则数字输入使能取决于MCU状态(正常模式,睡眠模式)。 |
迪耶夫 | 数字输入使能改写值 | 如果设置了DIEOE,则无论MCU状态(正常模式,睡眠模式)如何,都将在设置/清除DIEOV时启用/禁用数字输入。 |
DI | 数字输入 | 这是备用功能的数字输入。 在图中,信号连接到施密特触发器的输出,但在同步器之前。 除非将数字输入用作时钟源,否则具有备用功能的模块将使用其自己的同步器。 |
航空工业 | 模拟量输入/输出 | 这是到/从备用功能的模拟输入/输出。 信号直接连接到打击垫,并且可以双向使用。 |
以下小节简要介绍了每个端口的备用功能,并将覆盖信号与备用功能相关联。 有关更多详细信息,请参见备用功能描述。
端口B的备用功能
具有备用功能的端口B引脚显示在 表 10-3.
表 10-3。 端口 B 引脚替代功能
端口引脚 | 替代功能 |
PB5 | ![]() 复位:复位引脚 dW:debugWIRE I / O ADC0:ADC输入通道0 PCINT5:引脚更改中断,源5 |
PB4 | XTAL2:晶体振荡器输出CLKO:系统时钟输出ADC2:ADC输入通道2
OC1B:定时器/计数器1比较匹配B输出PCINT4:引脚更改中断0,源4 |
PB3 | XTAL1:晶体振荡器输入 CLKI:外部时钟输入 ADC3:ADC 输入通道 3
OC1B:互补定时器/计数器1比较匹配B输出PCINT3:引脚更改中断0,源3 |
PB2 | SCK:串行时钟输入ADC1:ADC输入通道1
T0:定时器0时钟源USCK:USI时钟(三线模式)SCL:USI时钟(两线模式)INT0:外部中断0输入PCINT2:引脚变化中断0,源2 |
PB1 | MISO:SPI主数据输入/从数据输出AIN1:模拟比较器,负输入OC0B:定时器/计数器0比较匹配B输出OC1A:定时器/计数器1比较匹配A输出DO:USI数据输出(三线模式)PCINT1:引脚更改中断0,来源1 |
PB0 | MOSI :: SPI主数据输出/从数据输入AIN0:模拟比较器,正输入
OC0A:定时器/计数器 0 比较匹配 A 输出 OC1A:互补定时器/计数器1比较匹配A输出DI:USI数据输入(三线模式) SDA:USI数据输入(两线模式)AREF:外部模拟参考PCINT0:引脚更改中断0,源0 |
端口B,位5 – RESET / dW / ADC0 / PCINT5
复位:外部复位输入为低电平有效,并且通过对RSTDISBL保险丝进行编程(“ 1”)使能。 当该引脚用作RESET引脚时,上拉功能被激活,输出驱动器和数字输入被禁用。
dW:对debugWIRE使能(DWEN)保险丝进行编程并且未对Lock位进行编程时,将激活目标设备中的debugWIRE系统。 RESET端口引脚被配置为启用上拉功能的线与(漏极开路)双向I / O引脚,并成为目标与仿真器之间的通信网关。
ADC0:模数转换器,通道 0。
PCINT5:引脚更改中断源5。
端口B,位4 – XTAL2 / CLKO / ADC2 / OC1B / PCINT4
XTAL2:芯片时钟振荡器引脚2。用作所有芯片时钟源的时钟引脚,内部可校准RC振荡器和外部时钟除外。 当用作时钟引脚时,该引脚不能用作I / O引脚。 当使用内部可校准RC振荡器或外部时钟作为芯片时钟源时,PB4用作普通的I / O引脚。
CLKO:分开的系统时钟可以在PB4引脚上输出。 如果对CKOUT保险丝进行了编程,则将输出分频的系统时钟,而不管PORTB4和DDB4的设置如何。 复位期间也将输出。
ADC2:模数转换器,通道 2。
OC1B:输出比较匹配输出:当配置为输出(DDB4置1)时,PB4引脚可用作定时器/计数器1比较匹配B的外部输出。 OCXNUMXB引脚也是PWM模式定时器功能的输出引脚。
PCINT4:引脚更改中断源4。
端口B,位3 – XTAL1 / CLKI / ADC3 / OC1B / PCINT3
XTAL1:芯片时钟振荡器引脚1。用于除内部可校准RC振荡器以外的所有芯片时钟源。 当用作时钟引脚时,该引脚不能用作I / O引脚。
CLKI:来自外部时钟源的时钟输入,请参阅 第26页上的“外部时钟”.
ADC3:模数转换器,通道 3。
OC1B:反相输出比较匹配输出:当配置为输出(DDB3置1)时,PB3引脚可用作定时器/计数器1比较匹配B的外部输出。 OCXNUMXB引脚也是PWM模式定时器功能的反相输出引脚。
PCINT3:引脚更改中断源3。
端口B,位2 – SCK / ADC1 / T0 / USCK / SCL / INT0 / PCINT2
SCK:主时钟输出,SPI通道的从时钟输入引脚。 当SPI作为从机使能时,无论DDB2的设置如何,该引脚均被配置为输入。 当SPI作为主机使能时,该引脚的数据方向由DDPB2控制。 当SPI强制该引脚作为输入时,上拉仍然可以由PORTB2位控制。
ADC1:模数转换器,通道 1。
T0:Timer / Counter0计数器源。
USCK:三线模式通用串行接口时钟。
SCL:两线模式USI两线模式的串行时钟。
INT0:外部中断源0。
PCINT2:引脚更改中断源2。
端口B,位1 – MISO / AIN1 / OC0B / OC1A / DO / PCINT1
MISO:主数据输入,SPI通道的从数据输出引脚。 当SPI被用作主机时,无论DDB1的设置如何,该引脚都被配置为输入。 当SPI作为从机使能时,该引脚的数据方向由DDB1控制。 当SPI强制该引脚作为输入时,上拉仍然可以由PORTB1位控制。
AIN1:模拟比较器的负输入。 在关闭内部上拉电阻的情况下,将端口引脚配置为输入,以避免数字端口功能干扰模拟比较器的功能。
OC0B:输出比较匹配输出。 PB1引脚可以用作定时器/计数器0比较匹配B的外部输出。PB1引脚必须配置为输出(DDB1置0)以实现该功能。 OCXNUMXB引脚也是PWM模式定时器功能的输出引脚。
OC1A:输出比较匹配输出:当配置为输出(DDB1置1)时,PB1引脚可以用作Timer / Counter1比较匹配B的外部输出。 OCXNUMXA引脚也是PWM模式定时器功能的输出引脚。
DO:三线模式通用串行接口数据输出。 三线模式数据输出将覆盖PORTB1的值,并且当数据方向位DDB1设置为1时,它将被驱动至端口。 如果输入了方向并且设置了PORTB1(一个),则PORTBXNUMX仍然使能上拉。
PCINT1:引脚更改中断源1。
端口B,位0 – MOSI / AIN0 / OC0A / OC1A / DI / SDA / AREF / PCINT0
MOSI:SPI主数据输出,SPI通道的从数据输入。 当SPI作为从机使能时,无论DDB0的设置如何,该引脚均被配置为输入。 当SPI作为主机使能时,该引脚的数据方向由DDB0控制。 当SPI强制该引脚作为输入时,上拉仍然可以由PORTB0位控制。
AIN0:模拟比较器的正输入。 在内部上拉电路关闭的情况下,将端口引脚配置为输入,以避免数字端口功能干扰模拟比较器的功能。
OC0A:输出比较匹配输出。 当PB0引脚配置为输出时(DDB0置0,该引脚可以用作T / C0比较匹配A的外部输出)。 OCXNUMXA引脚也是PWM模式定时器功能的输出引脚。
OC1A:反相输出比较匹配输出:当配置为输出(DDB0置1)时,PB0引脚可用作定时器/计数器1比较匹配B的外部输出。 OCXNUMXA引脚也是PWM模式定时器功能的反相输出引脚。
SDA:两线模式串行接口数据。
AREF:ADC 的外部模拟参考。 当引脚用作外部参考或内部电压时,PB0 上的上拉和输出驱动器被禁用tage 参考 AREF 引脚上的外部电容器。
DI:USI三线模式下的数据输入。 USI三线模式不会覆盖普通端口功能,因此必须将引脚配置为DI功能的输入。
PCINT0:引脚更改中断源0。
表 10-4 和 表 10-5 将端口B的备用功能与图XNUMX中所示的覆盖信号相关联 图10-5 第 58 页.
表 10-4。 覆盖 PB[5:3] 中备用功能的信号
信号名称 | PB5 / RESET / ADC0 / PCINT5 | PB4/ADC2/XTAL2/ OC1B/PCINT4 | PB3/ADC3/XTAL1/ OC1B/PCINT3 |
聚氨酯 | ![]() |
0 | 0 |
普奥夫 | 1 | 0 | 0 |
DDOE | 串行总线接口(1) •德文(1) | 0 | 0 |
多夫 | debugWire发送 | 0 | 0 |
聚偏氟乙烯 | 0 | OC1B使能 | ![]() OC1B使能 |
PVOV | 0 | OC1B | OC1B |
聚四氟乙烯 | 0 | 0 | 0 |
迪奥 | ![]() 串行总线接口(1) +(PCINT5•PCIE + ADC0D) |
PCINT4•PCIE + ADC2D | PCINT3•PCIE + ADC3D |
迪耶夫 | ADC0D | ADC2D | ADC3D |
DI | PCINT5输入 | PCINT4输入 | PCINT3输入 |
航空工业 | RESET输入,ADC0输入 | ADC2输入 | ADC3输入 |
注意:当保险丝为“0”(已编程)时。
表 10-5。 覆盖 PB[2:0] 中备用功能的信号
信号名称 | PB2/SCK/ADC1/T0/ USCK/SCL/INT0/PCINT2 | PB1/MISO/DO/AIN1/ OC1A/OC0B/PCINT1 | PB0/MOSI/DI/SDA/AIN0/AR EF/OC1A/OC0A/
PCINT0 |
聚氨酯 | USI_TWO_WIRE | 0 | USI_TWO_WIRE |
普奥夫 | 0 | 0 | 0 |
DDOE | USI_TWO_WIRE | 0 | USI_TWO_WIRE |
多夫 | (USI_SCL_HOLD + PORTB2) • DDB2 | 0 | ![]() ![]() (SDA + PORTB0)•DDB0 |
聚偏氟乙烯 | USI_TWO_WIRE•DDB2 | OC0B使能+ OC1A使能+ USI_THREE_WIRE | ![]() OC0A使能+ OC1A使能+(USI_TWO_WIRE DDB0) |
PVOV | 0 | OC0B + OC1A + 做 | ![]() OC0A + OC1A |
聚四氟乙烯 | 美国国际贸易委员会 | 0 | 0 |
迪奥 | PCINT2•PCIE + ADC1D + USISIE | PCINT1•PCIE + AIN1D | PCINT0•PCIE + AIN0D + USISIE |
迪耶夫 | ADC1D | AIN1D | AIN0D |
DI | T0 / USCK / SCL / INT0 /
PCINT2输入 |
PCINT1输入 | DI / SDA / PCINT0输入 |
航空工业 | ADC1输入 | 模拟比较器负输入 | 模拟比较器正输入 |
注册说明
MCUCR – MCU控制寄存器
少量 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | 生物量 | 聚氨酯分散体 | SE | SM1 | SM0 | 证券交易所 | ISC01 | ISC00 | 微控制器 |
读/写 | R | 读/写 | 读/写 | 读/写 | 读/写 | R | 读/写 | 读/写 | |
初始值 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
位6 – PUD:上拉禁用
当该位写为0时,即使DDxn和PORTxn寄存器配置为使能上拉电阻({DDxn,PORTxn} = 01bXNUMX),I / O端口中的上拉电阻也会被禁用。 看 第54页的“配置引脚” 有关此功能的更多详细信息。
PORTB –端口B数据寄存器
少量 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x18 | – | – | 端口B5 | 端口B4 | 端口B3 | 端口B2 | 端口B1 | 端口B0 | 端口 |
读/写 | R | R | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | |
初始值 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
DDRB –端口B数据方向寄存器
少量 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x17 | – | – | 数据库5 | 数据库4 | 数据库3 | 数据库2 | 数据库1 | 数据库0 | 数据冗余备份系统 |
读/写 | R | R | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | |
初始值 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
PINB –端口B输入引脚地址
少量 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x16 | – | – | PINB5 | PINB4 | PINB3 | PINB2 | PINB1 | PINB0 | 个人银行 |
读/写 | R | R | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | 读/写 | |
初始值 | 0 | 0 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
带PWM的8位定时器/计数器0
特征
两个独立的输出比较单元
双缓冲输出比较寄存器
比较匹配时清除计时器(自动重新加载)
无毛刺,相位校正脉宽调制器(PWM)
可变PWM周期
频率发生器
三个独立的中断源(TOV0,OCF0A和OCF0B)
超过view
定时器/计数器0是通用的8位定时器/计数器模块,具有两个独立的输出比较单元,并支持PWM。 它允许精确的程序执行定时(事件管理)和波形生成。
8位定时器/计数器的简化框图如图所示。 图 11-1。 有关I / O引脚的实际位置,请参阅 第25页“插脚ATtiny45 / 85/2”。 CPU可访问的I / O寄存器(包括I / O位和I / O引脚)以粗体显示。 特定于设备的I / O寄存器和位的位置在 第77页上的“寄存器说明”.
定时器/计数器 (TCNT0) 和输出比较寄存器(OCR0A 和 OCR0B)是 8 位寄存器。 中断请求(图中简称为Int.Req.)信号在定时器中断标志寄存器(TIFR)中都是可见的。 所有中断都被定时器中断屏蔽寄存器 (TIMSK) 单独屏蔽。 图中未显示 TIFR 和 TIMSK。
定时器/计数器可以通过预分频器在内部计时,或通过 T0 引脚上的外部时钟源计时。 时钟选择逻辑块控制定时器/计数器使用哪个时钟源和边沿来递增(或递减)其值。 当没有选择时钟源时,定时器/计数器处于非活动状态。 时钟选择逻辑的输出称为定时器时钟 (clkT0)。
双缓冲输出比较寄存器(OCR0A和OCR0B)始终与定时器/计数器值进行比较。 比较结果可以由波形发生器用于在输出比较引脚(OC0A和OC0B)上生成PWM或可变频率输出。 请参阅第69页“输出比较单元”。 有关详细信息。 比较匹配事件还将设置比较标志(OCF0A或OCF0B),该标志可用于生成输出比较中断请求。
定义
本节中的许多寄存器和位引用均以一般形式编写。 小写字母“ n”代替定时器/计数器号,在这种情况下为0。小写字母“ x”代替输出比较单元,在这种情况下为比较单元A或比较单元B。但是,使用寄存器或位定义时在程序中,必须使用精确的形式,即TCNT0用于访问Timer / Counter0计数器值,依此类推。
中的定义 表 11-1 在整个文档中也广泛使用。
表 11-1。 定义
持续的 | 描述 |
底部 | 计数器变为0x00时达到BOTTOM |
最大限度 | 当计数器变为0xFF(十进制255)时,计数器达到其MAXimum |
顶部 | 当计数器等于计数序列中的最大值时,它便到达TOP。 可以将TOP值分配为固定值0xFF(MAX)或存储在OCR0A寄存器中的值。 分配取决于操作模式 |
定时器/计数器预分频器和时钟源
定时/计数器可以由内部或外部时钟源提供时钟。 时钟源由时钟选择逻辑选择,该逻辑由位于定时器/计数器0控制寄存器(TCCR0B)中的时钟选择(c)位控制。
带预分频器的内部时钟源
定时器/计数器 0 可以直接由系统时钟提供时钟(通过设置 CS0[2:0] = 1)。 这提供了最快的操作,最大定时器/计数器时钟频率等于系统时钟频率 (fCLK_I/O)。 或者,预分频器的四个抽头之一可用作时钟源。 预分频时钟的频率为
预分频器复位
预分频器是自由运行的,即它独立于定时器/计数器0 的时钟选择逻辑运行。 由于预分频器不受定时器/计数器时钟选择的影响,预分频器的状态将对使用预分频器的情况产生影响。 一位前任amp预分频器的一个例子是定时器/计数器被预分频器启用和计时(6 > CS0[2:0] > 1)。 从定时器启用到第一次计数发生的系统时钟周期数可以是 1 到 N+1 个系统时钟周期,其中 N 等于预分频器除数(8、64、256 或 1024)。
可以使用预分频器复位将定时器/计数器与程序执行同步。
外部时钟源
应用于 T0 引脚的外部时钟源可用作定时器 / 计数器时钟 (clkT0)。 T0 引脚为 samp由引脚同步逻辑在每个系统时钟周期引导一次。 同步 (sampled) 信号然后通过
通过边缘检测器。 图 11-2 显示了 T0 同步和边沿检测器逻辑的功能等效框图。 寄存器在内部系统时钟 (clkI/O) 的上升沿计时。 锁存器在内部系统时钟的高电平期间是透明的。
边沿检测器为它检测到的每个正边沿 (CS0[0:2] = 0) 或负边沿 (CS7[0:2] = 0) 生成一个 clkT6 脉冲。
使用任何脉冲宽度调制(PWM)模式时,OCR0x寄存器都会被双重缓冲。 对于正常和比较时清除定时器(CTC)操作模式,双缓冲被禁用。 双重缓冲将OCR0x比较寄存器的更新同步到计数序列的顶部或底部。 同步可防止出现奇长,不对称的PWM脉冲,从而使输出无毛刺。
OCR0x寄存器访问可能看起来很复杂,但事实并非如此。 启用双缓冲后,CPU可以访问OCR0x缓冲寄存器,如果禁用了双缓冲,则CPU将直接访问OCR0x。
力输出比较
在非PWM波形生成模式下,可以通过将0写入强制输出比较(FOC0x)位来强制比较器的匹配输出。 强制比较匹配不会设置OCF0x标志或不重新加载/清除定时器,但是OC0x引脚将被更新,就好像发生了真正的比较匹配一样(COM1x [0:0]位的设置定义了是否设置了OCXNUMXx引脚,将其清零了)。或切换)。
比较按TCNT0写入的匹配阻止
所有对TCNT0寄存器的CPU写操作都将阻止在下一个定时器时钟周期发生的任何比较匹配,即使定时器停止也是如此。 当定时器/计数器时钟使能时,该功能允许将OCR0x初始化为与TCNT0相同的值,而不会触发中断。
使用输出比较单元
由于以任何一种操作模式写入TCNT0都会阻塞一个定时器时钟周期内的所有比较匹配,因此在使用输出比较单元时更改TCNT0会涉及到风险,而与定时器/计数器是否运行无关。 如果写入TCNT0的值等于OCR0x值,则将丢失比较匹配,从而导致错误的波形生成。 同样,当计数器递减计数时,也不要写入等于BOTTOM的TCNT0值。
OC0x的设置应在将数据方向寄存器设置为端口引脚输出之前执行。 设置OC0x值的最简单方法是在正常模式下使用强制输出比较(FOC0x)选通位。 即使在波形生成模式之间进行更改,OC0x寄存器也会保留其值。
请注意,COM0x [1:0]位不会与比较值一起被双重缓冲。 更改COM0x [1:0]位将立即生效。
比较匹配输出单位
比较输出模式(COM0x [1:0])位具有两个功能。 波形发生器使用COM0x [1:0]位定义下一个比较匹配时的输出比较(OC0x)状态。 同样,COM0x [1:0]位控制OC0x引脚的输出源。 图 11-6 显示了受COM0x [1:0]位设置影响的逻辑的简化示意图。 图中的I / O寄存器,I / O位和I / O引脚以粗体显示。 仅显示了受COM0x [1:0]位影响的通用I / O端口控制寄存器的部分(DDR和PORT)。 当涉及到OC0x状态时,该参考是针对内部OC0x寄存器的,而不是针对OC0x引脚的。 如果发生系统复位,则OC0x寄存器将复位为“ 0”。
当OC0A / OC0B连接到I / O引脚时,COM0A [1:0] / COM0B [1:0]位的功能取决于WGM0 [2:0]位的设置。 表 11-2 显示WGM0 [1:0]位设置为普通模式或CTC模式(非PWM)时的COM0x [2:0]位功能。
表 11-2。 比较输出模式,非 PWM 模式
COM0A1 COM0B1 | COM0A0 COM0B0 | 描述 |
0 | 0 | 正常端口操作,OC0A / OC0B断开连接。 |
0 | 1 | 比较匹配时切换OC0A / OC0B |
1 | 0 | 比较匹配时清除OC0A / OC0B |
1 | 1 | 在比较匹配上设置OC0A / OC0B |
表 11-3 WGM0 [1:0]位设置为快速PWM模式时,显示COM0x [2:0]位的功能。
表 11-3。 比较输出模式,快速 PWM 模式(1)
COM0A1 COM0B1 | COM0A0 COM0B0 | 描述 |
0 | 0 | 正常端口操作,OC0A / OC0B断开连接。 |
0 | 1 | 预订的 |
1 | 0 | 在比较匹配时清除OC0A / OC0B,将BOTTOM设置为OC0A / OC0B(同相模式) |
1 | 1 | 将OC0A / OC0B设置为Compare Match,将BOTTOM的OC0A / OC0B清除(反转模式) |
注意:当 OCR0A 或 OCR0B 等于 TOP 并且设置了 COM0A1/COM0B1 时,会出现一种特殊情况。 在这种情况下,比较匹配被忽略,但设置或清除在 BOTTOM 完成。 看 第73页上的“快速PWM模式” 了解更多详情。
表 11-4 WGM0 [1:0]位设置为相位校正PWM模式时,显示COM0x [2:0]位的功能。
表 11-4。 比较输出模式、相位校正 PWM 模式(1)
COM0A1 COM0B1 | COM0A0 COM0B0 | 描述 |
0 | 0 | 正常端口操作,OC0A / OC0B断开连接。 |
0 | 1 | 预订的 |
1 | 0 | 向上计数时,在比较匹配上清除OC0A / OC0B。 递减计数时,将OC0A / OC0B设置为“比较匹配”。 |
1 | 1 | 向上计数时,将OC0A / OC0B设置为“比较匹配”。 递减计数时,在比较匹配上清除OC0A / OC0B。 |
注意: 1. 当 OCR0A 或 OCR0B 等于 TOP 且 COM0A1/COM0B1 被置位时,会出现一种特殊情况。 在这种情况下,比较匹配被忽略,但设置或清除在 TOP 完成。 看 第74页上的“相位校正PWM模式” 了解更多详情。
Bits 3:2 – Res:保留位
这些位是ATtiny25 / 45/85中的保留位,将始终读为零。
位1:0 – WGM0 [1:0]:波形生成模式
这些位与TCCR02B寄存器中的WGM0位结合使用,可控制计数器的计数顺序,最大(TOP)计数器值的来源以及使用哪种类型的波形生成,请参见 表 11-5。 定时器/计数器单元支持的操作模式为:正常模式(计数器),比较匹配时清除定时器(CTC)模式和两种类型的脉冲宽度调制(PWM)模式(请参见 “操作模式” 第 71 页).
表 11-5。 波形生成模式位描述
模式 | 工作会议 02 | 工作会议 01 | 工作会议 00 | 定时器/计数器操作模式 | 顶部 | OCRx更新于 | 设置TOV标志 |
0 | 0 | 0 | 0 | 普通的 | 0xFF | 即时 | 最大限度(1) |
1 | 0 | 0 | 1 | PWM,相位校正 | 0xFF | 顶部 | 底部(2) |
2 | 0 | 1 | 0 | 四氯化碳 | 奥卡西平 | 即时 | 最大限度(1) |
3 | 0 | 1 | 1 | 快速脉宽调制 | 0xFF | 底部(2) | 最大限度(1) |
4 | 1 | 0 | 0 | 预订的 | – | – | – |
5 | 1 | 0 | 1 | PWM,相位校正 | 奥卡西平 | 顶部 | 底部(2) |
6 | 1 | 1 | 0 | 预订的 | – | – | – |
7 | 1 | 1 | 1 | 快速脉宽调制 | 奥卡西平 | 底部(2) | 顶部 |
位7 – FOC0A:强制输出比较A
仅当WGM位指定非PWM模式时,FOC0A位才有效。
但是,为了确保与将来的设备兼容,在PWM模式下运行时,在写入TCCR0B时必须将该位设置为零。 向FOC0A位写入逻辑0时,立即在波形生成单元上进行比较匹配。 OC0A输出根据其COM1A [0:0]位设置进行更改。 注意,FOC0A位被实现为选通脉冲。 因此,COM1A [0:XNUMX]位中的值决定了强制比较的效果。
FOC0A选通将不会产生任何中断,也不会使用OCR0A作为TOP在CTC模式下清除定时器。 FOC0A位始终读为零。
位6 – FOC0B:强制输出比较B
仅当WGM位指定非PWM模式时,FOC0B位才有效。
但是,为了确保与将来的设备兼容,在PWM模式下运行时,在写入TCCR0B时必须将该位置0。 向FOC0B位写入逻辑0时,立即在波形生成单元上进行比较匹配。 OC1B输出根据其COM0B [0:0]位设置进行更改。 注意,FOC1B位实现为选通脉冲。 因此,COM0B [XNUMX:XNUMX]位中的值决定了强制比较的效果。
FOC0B选通将不会产生任何中断,也不会在使用OCR0B作为TOP的CTC模式下清除定时器。
FOC0B位始终读为零。
Bits 5:4 – Res:保留位
这些位是ATtiny25 / 45/85中的保留位,将始终读为零。
位3 – WGM02:波形生成模式
请参阅 第0页上的“ TCCR77A –定时器/计数器控制寄存器A”.
位2:0 – CS0 [2:0]:时钟选择
三个时钟选择位选择定时器/计数器要使用的时钟源。
表 11-6。 时钟选择位说明
CS02 | CS01 | CS00 | 描述 |
0 | 0 | 0 | 无时钟源(定时器/计数器已停止) |
0 | 0 | 1 | clkI/O/(无预分频) |
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引脚上的外部时钟源。 时钟在上升沿。 |
如果定时器/计数器0使用外部引脚模式,即使该引脚配置为输出,T0引脚上的跳变也会为计数器提供时钟。 此功能允许软件控制计数。
计数器和比较单元
仅在异步模式下描述了Timer / Counter1的常规操作,仅当这两种模式之间存在差异时,才提及同步模式下的操作。 图 12-2 给出了定时/计数器1同步寄存器的框图以及寄存器之间的同步延迟。 请注意,所有时钟门控细节均未在图中显示。 Timer / Counter1寄存器的值通过内部同步寄存器,这会导致输入同步延迟,然后才影响计数器操作。 写入寄存器后,可以立即回读寄存器TCCR1,GTCCR,OCR1A,OCR1B和OCR1C。 由于输入和输出同步,延迟了对Timer / Terner1(TCNT1)寄存器和标志(OCF1A,OCF1B和TOV1)的读回值。
定时器/计数器1具有高分辨率和高精度用法,并且具有较少的预分频机会。 它还可以使用时钟速度高达8 MHz(在低速模式下为64 MHz)支持两个精确的高速32位脉宽调制器。 在该模式下,Timer1和输出比较寄存器用作双独立PWM,具有非重叠的非反相和反相输出。 参考 第 86 页 有关此功能的详细说明。 同样,高比例缩放机会使该单元可用于较低速功能或不经常执行操作的精确定时功能。
图 12-2。 定时器/计数器 1 同步寄存器框图。
当预分频器在异步模式下以1 MHz的快速PCK时钟(在低速模式下为64 MHz)运行时,Timer / Counter32和预分频器允许从任何时钟源运行CPU。
请注意,系统时钟频率必须低于PCK频率的三分之一。 当系统时钟为高电平时,异步定时器/计数器1的同步机制至少需要PCK的两个边沿。 如果系统时钟的频率太高,则可能会丢失数据或控制值。
下列 图 12-3 显示了Timer / Counter1的框图。
表 12-1。 PWM 模式下的比较模式选择
串口1x1 | 串口1x0 | 对输出比较引脚的影响 |
0 | 0 | OC1x未连接。 OC1x未连接。 |
0 | 1 | OC1x在比较匹配时清除。 当TCNT1 = $ 00时设置。 OC1x在比较匹配时设置。 当TCNT1 = $ 00时清零。 |
1 | 0 | OC1x在比较匹配时清除。 当TCNT1 = $ 00时置1。 OCXNUMXx未连接。 |
1 | 1 | OC1x在比较匹配时设置。 当TCNT1 = $ 00时清零。 OC1x未连接。 |
ADC特性
表 21-8。 ADC 特性,单端通道。 TA = -40°C 至 +85°C
象征 | 范围 | 健康)状况 | 分钟 | 类型 | 最大限度 | 单位 |
解决 | 10 | 位 | ||||
绝对精度(包括INL,DNL以及量化,增益和偏移误差) | VREF = 4V,VCC = 4V,
ADC时钟= 200 kHz |
2 | 最低有效位 | |||
VREF = 4V,VCC = 4V,
ADC时钟= 1 MHz |
3 | 最低有效位 | ||||
VREF = 4V,VCC = 4V,
ADC时钟= 200 kHz 降噪模式 |
1.5 | 最低有效位 | ||||
VREF = 4V,VCC = 4V,
ADC时钟= 1 MHz 降噪模式 |
2.5 | 最低有效位 | ||||
积分非线性(INL)(偏移和增益校准后的精度) | VREF = 4V,VCC = 4V,
ADC时钟= 200 kHz |
1 | 最低有效位 | |||
差分非线性(DNL) | VREF = 4V,VCC = 4V,
ADC时钟= 200 kHz |
0.5 | 最低有效位 | |||
增益误差 | VREF = 4V,VCC = 4V,
ADC时钟= 200 kHz |
2.5 | 最低有效位 | |||
偏移误差 | VREF = 4V,VCC = 4V,
ADC时钟= 200 kHz |
1.5 | 最低有效位 | |||
转换时间 | 自由运行转换 | 14 | 280 | 微秒 | ||
时钟频率 | 50 | 1000 | 千赫 | |||
车辆识别号 | 输入音量tage | 地线 | 参考电压 | V | ||
输入带宽 | 38.4 | 千赫 | ||||
参考文献 | 外部参考卷tage | 2.0 | 电压控制电路 | V | ||
文特 | 内部卷tag参考资料 | 1.0 | 1.1 | 1.2 | V | |
内部2.56V基准 (1) | 电压 > 3.0V | 2.3 | 2.56 | 2.8 | V | |
参考文献 | 32 | 千欧 | ||||
雨 | 模拟输入电阻 | 100 | MΩ | |||
ADC输出 | 0 | 1023 | 最低有效位 |
注:1. 数值仅供参考。
表 21-9。 ADC 特性,差分通道(单极模式)。 TA = -40°C 至 +85°C
象征 | 范围 | 健康)状况 | 分钟 | 类型 | 最大限度 | 单位 |
解决 | 增益= 1倍 | 10 | 位 | |||
增益= 20倍 | 10 | 位 | ||||
绝对精度(包括INL,DNL和
量化,增益和失调误差) |
增益= 1倍
VREF = 4V,VCC = 5V ADC时钟= 50 – 200 kHz |
10.0 | 最低有效位 | |||
增益= 20倍
VREF = 4V,VCC = 5V ADC时钟= 50 – 200 kHz |
20.0 | 最低有效位 | ||||
积分非线性(INL)(失调和增益校准后的精度) | 增益= 1倍
VREF = 4V,VCC = 5V ADC时钟= 50 – 200 kHz |
4.0 | 最低有效位 | |||
增益= 20倍
VREF = 4V,VCC = 5V ADC时钟= 50 – 200 kHz |
10.0 | 最低有效位 | ||||
增益误差 | 增益= 1倍 | 10.0 | 最低有效位 | |||
增益= 20倍 | 15.0 | 最低有效位 | ||||
偏移误差 | 增益= 1倍
VREF = 4V,VCC = 5V ADC时钟= 50 – 200 kHz |
3.0 | 最低有效位 | |||
增益= 20倍
VREF = 4V,VCC = 5V ADC时钟= 50 – 200 kHz |
4.0 | 最低有效位 | ||||
转换时间 | 自由运行转换 | 70 | 280 | 微秒 | ||
时钟频率 | 50 | 200 | 千赫 | |||
车辆识别号 | 输入音量tage | 地线 | 电压控制电路 | V | ||
VDIFF | 输入差分电压tage | VREF/增益 | V | |||
输入带宽 | 4 | 千赫 | ||||
参考文献 | 外部参考卷tage | 2.0 | 电压控制中心 - 1.0 | V | ||
文特 | 内部卷tag参考资料 | 1.0 | 1.1 | 1.2 | V | |
内部2.56V基准 (1) | 电压 > 3.0V | 2.3 | 2.56 | 2.8 | V | |
参考文献 | 参考输入电阻 | 32 | 千欧 | |||
雨 | 模拟输入电阻 | 100 | MΩ | |||
ADC转换输出 | 0 | 1023 | 最低有效位 |
注意:数值仅供参考。
表 21-10。 ADC 特性,差分通道(双极性模式)。 TA = -40°C 至 +85°C
象征 | 范围 | 健康)状况 | 分钟 | 类型 | 最大限度 | 单位 |
解决 | 增益= 1倍 | 10 | 位 | |||
增益= 20倍 | 10 | 位 | ||||
绝对精度(包括INL,DNL和
量化,增益和失调误差) |
增益= 1倍
VREF = 4V,VCC = 5V ADC时钟= 50 – 200 kHz |
8.0 | 最低有效位 | |||
增益= 20倍
VREF = 4V,VCC = 5V ADC时钟= 50 – 200 kHz |
8.0 | 最低有效位 | ||||
积分非线性(INL)(失调和增益校准后的精度) | 增益= 1倍
VREF = 4V,VCC = 5V ADC时钟= 50 – 200 kHz |
4.0 | 最低有效位 | |||
增益= 20倍
VREF = 4V,VCC = 5V ADC时钟= 50 – 200 kHz |
5.0 | 最低有效位 | ||||
增益误差 | 增益= 1倍 | 4.0 | 最低有效位 | |||
增益= 20倍 | 5.0 | 最低有效位 | ||||
偏移误差 | 增益= 1倍
VREF = 4V,VCC = 5V ADC时钟= 50 – 200 kHz |
3.0 | 最低有效位 | |||
增益= 20倍
VREF = 4V,VCC = 5V ADC时钟= 50 – 200 kHz |
4.0 | 最低有效位 | ||||
转换时间 | 自由运行转换 | 70 | 280 | 微秒 | ||
时钟频率 | 50 | 200 | 千赫 | |||
车辆识别号 | 输入音量tage | 地线 | 电压控制电路 | V | ||
VDIFF | 输入差分电压tage | VREF/增益 | V | |||
输入带宽 | 4 | 千赫 | ||||
参考文献 | 外部参考卷tage | 2.0 | 电压控制中心 - 1.0 | V | ||
文特 | 内部卷tag参考资料 | 1.0 | 1.1 | 1.2 | V | |
内部2.56V基准 (1) | 电压 > 3.0V | 2.3 | 2.56 | 2.8 | V | |
参考文献 | 参考输入电阻 | 32 | 千欧 | |||
雨 | 模拟输入电阻 | 100 | MΩ | |||
ADC转换输出 | -512 | 511 | 最低有效位 |
指令集摘要
助记符 | 操作数 | 描述 | 手术 | 标志 | #时钟 |
算术和逻辑说明 | |||||
添加 | Rd,Rr | 添加两个寄存器 | Rd ← Rd + Rr | Z,C,N,V,H | 1 |
模数转换器 | Rd,Rr | 加两个寄存器 | Rd ← Rd + Rr + C | Z,C,N,V,H | 1 |
阿迪威 | Rdl,K | 立即添加到Word | Rdh:Rdl ← Rdh:Rdl + K | Z,C,N,V,S | 2 |
子 | Rd,Rr | 减去两个寄存器 | Rd ← Rd – Rr | Z,C,N,V,H | 1 |
苏比 | 路,K | 从寄存器中减去常数 | Rd ← Rd – K | Z,C,N,V,H | 1 |
新加坡基督教学院 | Rd,Rr | 减去两个寄存器 | Rd ← Rd – Rr – C | Z,C,N,V,H | 1 |
新加坡商业联合会 | 路,K | 从Reg。中减去Carry Constant。 | Rd ← Rd – K – C | Z,C,N,V,H | 1 |
轻工工业协会 | Rdl,K | 从Word中减去立即 | Rdh:Rdl ← Rdh:Rdl – K | Z,C,N,V,S | 2 |
和 | Rd,Rr | 逻辑与寄存器 | Rd ← Rd ∙ Rr | Z,N,V | 1 |
安迪 | 路,K | 逻辑与寄存器与常数 | Rd ← Rd ∙ K | Z,N,V | 1 |
OR | Rd,Rr | 逻辑或寄存器 | Rd ← Rd v Rr | Z,N,V | 1 |
奥里 | 路,K | 逻辑或寄存器和常数 | Rd ← Rd v K | Z,N,V | 1 |
提高石油采收率 | Rd,Rr | 异或寄存器 | Rd ← Rd ⊕ Rr | Z,N,V | 1 |
串口 | Rd | 一个人的补语 | Rd ← 0xFF - Rd | Z,C,N,V | 1 |
NEG | Rd | 二进制补码 | Rd ← 0x00 - Rd | Z,C,N,V,H | 1 |
丁苯橡胶 | 路,K | 设置寄存器中的位 | Rd ← Rd v K | Z,N,V | 1 |
基建 | 路,K | 清除寄存器中的位 | Rd ← Rd ∙ (0xFF – K) | Z,N,V | 1 |
INC | Rd | 增量 | Rd ← Rd + 1 | Z,N,V | 1 |
十二月 | Rd | 减量 | Rd ← Rd - 1 | Z,N,V | 1 |
尖沙咀 | Rd | 测试零或负 | Rd ← Rd ∙ Rd | Z,N,V | 1 |
CLR | Rd | 清除注册 | Rd ← Rd ⊕ Rd | Z,N,V | 1 |
服务质量 | Rd | 设置寄存器 | 路 ← 0xFF | 没有任何 | 1 |
分支机构说明 | |||||
资源管理计划 | k | 相对跳跃 | PC ← PC + k + 1 | 没有任何 | 2 |
联合会 | 间接跳转到(Z) | 电脑←Z | 没有任何 | 2 | |
呼叫 | k | 相对子程序调用 | PC ← PC + k + 1 | 没有任何 | 3 |
我打电话 | 间接呼叫(Z) | 电脑←Z | 没有任何 | 3 | |
雷特 | 子程序返回 | PC ← 堆栈 | 没有任何 | 4 | |
可再生能源 | 中断返回 | PC ← 堆栈 | I | 4 | |
安博会 | 路,路 | 比较,等于则跳过 | 如果 (Rd = Rr) PC ← PC + 2 或 3 | 没有任何 | 1 年 2 月 3 日 |
CP | 路,路 | 比较 | Rd − Rr | Z,N,V,C,H | 1 |
每次点击费用 | 路,路 | 与携带比较 | Rd − Rr − C | Z,N,V,C,H | 1 |
消费者物价指数 | 路,K | 比较立即注册 | Rd-K | Z,N,V,C,H | 1 |
新加坡证券研究委员会 | Rr,b | 如果清除寄存器中的位,则跳过 | 如果 (Rr(b)=0) PC ← PC + 2 或 3 | 没有任何 | 1 年 2 月 3 日 |
丁苯橡胶 | Rr,b | 如果设置了寄存器中的位,则跳过 | 如果 (Rr(b)=1) PC ← PC + 2 或 3 | 没有任何 | 1 年 2 月 3 日 |
SBIC公司 | , | 如果清除I / O寄存器中的位,则跳过 | 如果 (P(b)=0) PC ← PC + 2 或 3 | 没有任何 | 1 年 2 月 3 日 |
建筑工业信息系统 | , | 如果设置了I / O寄存器中的位,则跳过 | 如果 (P(b)=1) PC ← PC + 2 或 3 | 没有任何 | 1 年 2 月 3 日 |
BRBS | s,k | 如果设置了状态标志则分支 | 如果 (SREG(s) = 1) 那么 PC←PC+k + 1 | 没有任何 | 1/2 |
英国广播公司 | s,k | 如果清除状态标志则分支 | 如果 (SREG(s) = 0) 那么 PC←PC+k + 1 | 没有任何 | 1/2 |
请求请求 | k | 如果相等则分支 | 如果 (Z = 1) 那么 PC ← PC + k + 1 | 没有任何 | 1/2 |
布朗 | k | 如果不相等则分支 | 如果 (Z = 0) 那么 PC ← PC + k + 1 | 没有任何 | 1/2 |
巴西红十字会 | k | 如果进行设置则分支 | 如果 (C = 1) 那么 PC ← PC + k + 1 | 没有任何 | 1/2 |
巴西红十字会 | k | 如果进位清除,则分支 | 如果 (C = 0) 那么 PC ← PC + k + 1 | 没有任何 | 1/2 |
BRSH | k | 如果相同或更高则分支 | 如果 (C = 0) 那么 PC ← PC + k + 1 | 没有任何 | 1/2 |
布洛 | k | 如果较低则分支 | 如果 (C = 1) 那么 PC ← PC + k + 1 | 没有任何 | 1/2 |
英国皇家医学学会 | k | 如果减则分支 | 如果 (N = 1) 那么 PC ← PC + k + 1 | 没有任何 | 1/2 |
BRPL | k | 如果加分行 | 如果 (N = 0) 那么 PC ← PC + k + 1 | 没有任何 | 1/2 |
布林带气凝胶 | k | 大于或等于,则分支,已签名 | 如果 (N ⊕ V= 0) 那么 PC ← PC + k + 1 | 没有任何 | 1/2 |
BRLT | k | 如果小于零则分支,已签名 | 如果 (N ⊕ V= 1) 那么 PC ← PC + k + 1 | 没有任何 | 1/2 |
防辐射服 | k | 如果设置一半进位标志,则分支 | 如果 (H = 1) 那么 PC ← PC + k + 1 | 没有任何 | 1/2 |
BRHC | k | 如果清除一半进位标志,则分支 | 如果 (H = 0) 那么 PC ← PC + k + 1 | 没有任何 | 1/2 |
防弹少年团 | k | 如果设置了T标志,则分支 | 如果 (T = 1) 那么 PC ← PC + k + 1 | 没有任何 | 1/2 |
布里斯托尔旅游中心 | k | 如果T标志被清除则分支 | 如果 (T = 0) 那么 PC ← PC + k + 1 | 没有任何 | 1/2 |
BRVS | k | 如果设置了溢出标志则分支 | 如果 (V = 1) 那么 PC ← PC + k + 1 | 没有任何 | 1/2 |
BRVC | k | 如果清除了溢出标志,则分支 | 如果 (V = 0) 那么 PC ← PC + k + 1 | 没有任何 | 1/2 |
布里干酪 | k | 如果启用了中断,则分支 | 如果 ( I = 1) 那么 PC ← PC + k + 1 | 没有任何 | 1/2 |
桥 | k | 如果中断禁用则分支 | 如果 ( I = 0) 那么 PC ← PC + k + 1 | 没有任何 | 1/2 |
位和位测试说明 | |||||
印度政府 | , | 设置I / O寄存器中的位 | I/O(P,b) ← 1 | 没有任何 | 2 |
英国中央调查局 | , | 清除I / O寄存器中的位 | I/O(P,b) ← 0 | 没有任何 | 2 |
最低标准 | Rd | 逻辑左移 | Rd(n+1) ← Rd(n), Rd(0) ← 0 | Z,C,N,V | 1 |
液体硅橡胶 | 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 |
罗尔斯-罗伊斯 | Rd | 向右旋转直进 | Rd(7)←C,Rd(n)←Rd(n+1),C←Rd(0) | Z,C,N,V | 1 |
自动语音识别 | Rd | 算术右移 | Rd(n) ← Rd(n+1), n=0..6 | Z,C,N,V | 1 |
助记符 | 操作数 | 描述 | 手术 | 标志 | #时钟 |
交换 | Rd | 交换半字节 | Rd(3..0)←Rd(7..4),Rd(7..4)←Rd(3..0) | 没有任何 | 1 |
基础科学教育与培训中心 | s | 标志集 | SREG ← 1 | SREG | 1 |
加拿大卑诗大学 | s | 标记清除 | SREG ← 0 | SREG | 1 |
BST | Rr,b | 从寄存器到T的位存储 | T ← Rr(b) | T | 1 |
血小板减少症 | 路,b | 从T到寄存器的位加载 | Rd(b) ← T | 没有任何 | 1 |
美国证券交易委员会 | 设定进位 | C ← 1 | C | 1 | |
中链氯乙烯 | 清除携带 | C ← 0 | C | 1 | |
森 | 设置负标记 | N ← 1 | N | 1 | |
淋巴结 | 清除负标记 | N ← 0 | N | 1 | |
经济特区 | 设置零标志 | Z ← 1 | Z | 1 | |
氯乙烯 | 清除零标志 | Z ← 0 | Z | 1 | |
瑞典电气设备公司 | 全局中断使能 | 我←1 | I | 1 | |
命令行界面 | 全局中断禁用 | 我←0 | I | 1 | |
塞拉利昂 | 设置签名的测试标志 | 小号←1 | S | 1 | |
中立证券 | 清除签名的测试标志 | 小号←0 | S | 1 | |
西弗吉尼亚 | 设置二进制补码溢出。 | V←1 | V | 1 | |
客户价值 | 清除二进制补码溢出 | V←0 | V | 1 | |
放 | 在SREG中设置T | T ← 1 | T | 1 | |
交叉语言理论 | 清除SREG中的T | T ← 0 | T | 1 | |
上海证券交易所 | 在SREG中设置一半进位标志 | 高←1 | H | 1 | |
慢性肝病 | 在SREG中清除半进位标志 | 高←0 | H | 1 | |
数据传输说明 | |||||
金属氧化物变阻器 | Rd,Rr | 在寄存器之间移动 | Rd ← Rr | 没有任何 | 1 |
摩威 | Rd,Rr | 复制注册字 | Rd+1:Rd ← Rr+1:Rr | 没有任何 | 1 |
低密度聚乙烯 | 路,K | 立即加载 | 路 ← K | 没有任何 | 1 |
LD | 路,X | 间接加载 | 路 ← (X) | 没有任何 | 2 |
LD | 路,X + | 加载间接和后递增。 | Rd ← (X), X ← X + 1 | 没有任何 | 2 |
LD | Rd – | 间接加载和预加载 | X ← X – 1, Rd ← (X) | 没有任何 | 2 |
LD | Y路 | 间接加载 | 路 ← (Y) | 没有任何 | 2 |
LD | Y +,Rd | 加载间接和后递增。 | Rd ← (Y), Y ← Y + 1 | 没有任何 | 2 |
LD | 路,– Y | 间接加载和预加载 | Y ← Y – 1, Rd ← (Y) | 没有任何 | 2 |
激光去极化 | 路,Y + q | 位移间接加载 | Rd ← (Y + q) | 没有任何 | 2 |
LD | Z,Rd | 间接加载 | 路 ← (Z) | 没有任何 | 2 |
LD | Z +,Rd | 加载间接和后递增。 | Rd ← (Z), Z ← Z+1 | 没有任何 | 2 |
LD | Rd,-Z | 间接加载和预加载 | Z ← Z – 1, Rd ← (Z) | 没有任何 | 2 |
激光去极化 | Z + q路 | 位移间接加载 | Rd ← (Z + q) | 没有任何 | 2 |
轻型结构 | 路,k | 直接从SRAM加载 | Rd ← (k) | 没有任何 | 2 |
ST | X,Rr | 间接存储 | (X) ← Rr | 没有任何 | 2 |
ST | X +,Rr | 存储间接和后递增。 | (X) ← Rr, X ← X + 1 | 没有任何 | 2 |
ST | – X,Rr | 间接存储和预装 | X ← X – 1, (X) ← Rr | 没有任何 | 2 |
ST | Y,Rr | 间接存储 | (Y) ← Rr | 没有任何 | 2 |
ST | Y +,Rr | 存储间接和后递增。 | (Y) ← Rr, Y ← Y + 1 | 没有任何 | 2 |
ST | – Y,Rr | 间接存储和预装 | Y ← Y – 1, (Y) ← Rr | 没有任何 | 2 |
性病 | Y + q,Rr | 间接存储位移 | (Y + q) ← Rr | 没有任何 | 2 |
ST | Z,Rr | 间接存储 | (Z) ← Rr | 没有任何 | 2 |
ST | Z +,Rr | 存储间接和后递增。 | (Z) ← Rr, Z ← Z + 1 | 没有任何 | 2 |
ST | -Z,Rr | 间接存储和预装 | Z ← Z – 1, (Z) ← Rr | 没有任何 | 2 |
性病 | Z + q,Rr | 间接存储位移 | (Z + q) ← Rr | 没有任何 | 2 |
船用运输系统 | , | 直接存储到SRAM | (k) ← Rr | 没有任何 | 2 |
低密度聚乙烯 | 加载程序存储器 | R0 ← (Z) | 没有任何 | 3 | |
低密度聚乙烯 | Z,Rd | 加载程序存储器 | 路 ← (Z) | 没有任何 | 3 |
低密度聚乙烯 | Z +,Rd | 加载程序存储器和后存 | Rd ← (Z), Z ← Z+1 | 没有任何 | 3 |
马来西亚教育文凭 (SPM) | 存储程序存储器 | (z) ← R1:R0 | 没有任何 | ||
IN | 路,P | 在港口 | 路←P | 没有任何 | 1 |
出去 | P,Rr | 出港 | P ← R r | 没有任何 | 1 |
推 | Rr | 在堆栈上推送寄存器 | 堆栈 ← Rr | 没有任何 | 2 |
流行音乐 | Rd | 从堆栈弹出寄存器 | 路 ← 栈 | 没有任何 | 2 |
MCU控制指令 | |||||
不适用 | 无操作 | 没有任何 | 1 | ||
睡觉 | 睡觉 | (有关睡眠功能,请参见特定说明) | 没有任何 | 1 | |
宽动态 | 看门狗复位 | (请参阅有关WDR /计时器的详细说明) | 没有任何 | 1 | |
休息 | 休息 |
速度(MHz) (1) | 供应量tag电子 (V) | 温度范围 | 包裹 (2) | 订购代码 (3) |
10 | 1.8 – 5.5 | 工业的
(-40°C 至 +85°C) (4) |
8P3 | 阁楼45V-10PU |
8S2 | ATtiny45V-10SU ATtiny45V-10SUR ATtiny45V-10SH ATtiny45V-10SHR | |||
8X | 阁楼45V-10XU 阁楼45V-10XUR | |||
20M1 | 阁楼45V-10MU阁楼45V-10MUR | |||
20 | 2.7 – 5.5 | 工业的
(-40°C 至 +85°C) (4) |
8P3 | ATtiny45-20PU |
8S2 | 阁楼45-20SU 阁楼45-20SUR
阁楼45-20SH 阁楼45-20SHR |
|||
8X | 阁楼45-20XU 阁楼45-20XUR | |||
20M1 | 阁楼45-20MU 阁楼45-20MUR |
注:1. 速度 vs. 供应量tage,见章节 21.3第163页的“速度”.
所有包装均不含铅,不含卤化物且完全绿色,并且符合欧洲有害物质限制(RoHS)指令。
代码指标
H:NiPdAu铅涂层
U:雾锡
R:卷带式
这些设备也可以晶片形式提供。 请联系您当地的Atmel销售办事处,以获取详细的订购信息和最低订购量。
勘误表
勘误表ATtiny25
本节中的修订字母是指ATtiny25设备的修订。
D – F版
没有已知的勘误表。
B版– C版
EEPROM 读取可能会在低电源电压下失败tage / 低时钟频率
EEPROM 读取可能会在低电源电压下失败tage / 低时钟频率
尝试以低时钟频率和/或低电源电压读取 EEPROMtage 可能导致无效数据。
问题修复/解决方法
当时钟频率低于 1MHz 并提供 vol 时,不要使用 EEPROMtage 低于 2V。 如果工作频率不能提高到 1MHz 以上,则提供 voltage 应大于 2V。 同样,如果供应量tage 不能升至 2V 以上,则工作频率应大于 1MHz。
已知此功能与温度有关,但尚未表征。 仅提供室温指导。
版本A
不是amp引领。
勘误表ATtiny45
本节中的修订字母是指ATtiny45设备的修订。
F – G版
没有已知的勘误
D版– E版
EEPROM 读取可能会在低电源电压下失败tage / 低时钟频率
EEPROM 读取可能会在低电源电压下失败tage / 低时钟频率
尝试以低时钟频率和/或低电源电压读取 EEPROMtage 可能导致无效数据。
问题修复/解决方法
当时钟频率低于 1MHz 并提供 vol 时,不要使用 EEPROMtage 低于 2V。 如果工作频率不能提高到 1MHz 以上,则提供 voltage 应大于 2V。 同样,如果供应量tage 不能升至 2V 以上,则工作频率应大于 1MHz。
已知此功能与温度有关,但尚未表征。 仅提供室温指导。
B版– C版
PLL未锁定
从应用程序代码读取的EEPROM在锁定位模式3下不起作用
EEPROM 读取可能会在低电源电压下失败tage / 低时钟频率
OC1B- XOC1B上的定时器计数器1 PWM输出生成无法正常工作
PLL未锁定
当频率低于6.0 MHz时,PLL将不会锁定
问题修复/解决方法
使用PLL时,请以6.0 MHz或更高的频率运行。
从应用程序代码读取的EEPROM在锁定位模式3下不起作用
当将存储器锁定位LB2和LB1编程为模式3时,无法从应用程序代码读取EEPROM。
问题解决/解决
当需要从EEPROM读取应用程序代码时,请勿设置锁定位保护模式3。
EEPROM 读取可能会在低电源电压下失败tage / 低时钟频率
尝试以低时钟频率和/或低电源电压读取 EEPROMtage 可能导致无效数据。
问题修复/解决方法
当时钟频率低于 1MHz 并提供 vol 时,不要使用 EEPROMtage 低于 2V。 如果工作频率不能提高到 1MHz 以上,则提供 voltage 应大于 2V。 同样,如果供应量tage 不能升至 2V 以上,则工作频率应大于 1MHz。
已知此功能与温度有关,但尚未表征。 仅提供室温指导。
OC1B上的定时器计数器1 PWM输出生成– XOC1B无法正常工作
定时器Counter1 PWM输出OC1B-XOC1B无法正常工作。 仅在控制位COM1B1和COM1B0分别与COM1A1和COM1A0处于相同模式的情况下,OC1B-XOC1B输出才能正常工作。
问题解决/解决
唯一的解决方法是在COM1A [1:0]和COM1B [1:0]控制位上使用相同的控制设置,请参见数据表中的表14-4。 Tiny45 rev D已解决此问题。
版本A
掉电功耗过高
单步进入中断时,DebugWIRE会失去通信
PLL未锁定
从应用程序代码读取的EEPROM在锁定位模式3下不起作用
EEPROM 读取可能会在低电源电压下失败tage / 低时钟频率
掉电功耗过高
三种情况将导致过高的掉电功耗。 这些都是:
外部时钟由保险丝选择,但I / O PORT仍作为输出启用。
进入掉电之前,将读取EEPROM。
VCC为4.5伏或更高。
免责声明:本文档中的信息与 Atmel 产品有关。 本文档或与 Atmel 产品的销售相关的任何知识产权均未以禁止反言或其他方式授予任何明示或暗示的许可。 ATMEL 上的 ATMEL 销售条款和条件中规定的除外 WEB网站、ATMEL 不承担任何责任,并否认与其产品相关的任何明示、默示或法定保证,包括但不限于适销性、特定用途适用性或非侵权的默示保证。 在任何情况下,ATMEL 均不对因使用或无法使用而引起的任何直接、间接、后果性、惩罚性、特殊或偶然的损害(包括但不限于损益损害、业务中断或信息丢失)承担责任本文档,即使 ATMEL 已被告知此类损坏的可能性。
Atmel 对本文档内容的准确性或完整性不作任何陈述或保证,并保留随时更改规格和产品说明的权利,恕不另行通知。 Atmel 不承诺更新此处包含的信息。 除非另有特别规定,否则 Atmel 产品不适合且不得用于汽车应用。 Atmel 产品无意、无授权或无担保地用作旨在支持或维持生命的应用中的组件。