ATtiny25/45/854.7指令执行时序本节说明访问时间概念指令执行.在AVRCPU是由CPU时钟CLK驱动CPU,从选定的时钟源直接产生的芯片.没有内部时钟进行分频.图4-4显示并行指令取指和由喀拉功能的指令执行VARD架构和快速访问寄存器文件的概念.这是基本的流水线概念,性能高达1每MIPS MHz与每个成本函数相应的独特的结果,每时钟功能,并且每个电源单元的功能.图4-4.并行取指和指令执行T1T2T3T4clkCPU1取指令第一指令执行2取指令第二指令执行3取指令第三指令执行4取指令图4-5演示的是寄存器文件内部访问时序.在一个单个时钟周期一个ALU执行使用两个寄存器操作数的操作,并且将结果存回到目的寄存器.图4-5.单周期ALU操作T1T2T3T4clkCPU总执行时间寄存器操作数取ALU操作执行结果回写4.8复位和中断处理AVR有不同的中断源.这些中断和复位的独立向量中的每个都有一个独立的程序向量在程序内存空间.所有中断设置独立的启用必须写入逻辑一起来的全局中断位使能位在状态寄存器,以使能中断.在程序内存空间的最低地址缺省为复位和中断向量.完整的向量列表请参见45页上的“中断”.名单中还决定了不同中断的优先级.较低的地址越高的优先级. RESET具有最高的优先权,其次是INT0 - 外部中断请求0.117598H–AVR–07/09当中断发生时,全局中断使能位I被清零,所有中断都dis-禁止.用户软件可以编写逻辑一到I位使能中断嵌套.所有已启用然后中断都可以中断当前的中断服务程序.在I位时自动设置一个从中断返回指令 - RETI - 执行.
基本上有两种类型的中断.第一种类型是由设置该事件触发
中断标志.对于这些中断,程序计数器跳转到实际的中断子程序入口器,以执行中断处理程序,同时硬件将清除相应的
中断标志.中断标志也可以通过写逻辑之一,该标志位的位置(s)被清除被清除.如果发生中断条件,而相应的中断使能位
清零,中断标志将被设置并一直保持到中断执行,或者该标志为由软件清零.同样,如果一个或多个中断条件发生时全局中断使能位被清零时,相应的中断标志位将被设置并记住,直到全局中断使能位被设置,然后会根据优先顺序来执行.
只要中断条件存在第二种类型的中断将触发.这些中断不需要中断标志.如果中断使能之前就中断条件消失了,中断不会被触发.
当从中断AVR退出时,它总是返回到主程序并执行一条指令的任何被挂起的中断之前.
请注意,状态寄存器不会自动进入中断服务程序时存储,也不从中断程序返回时恢复.这必须由软件来处理.When using the CLI instruction to disable interrupts, the interrupts will be immediatelydisabled.没有中断可以在CLI指令后执行,即使同时发生的
CLI指令.下面的例子显示了如何可以用来避免在EEPROM内容的中断..汇编代码例程
inR16,SREG
; store SREG value
cli
;在禁止中断
sbiEECR, EEMWE;启动EEPROM写sbiEECR,EEWEoutSREG,R16
;恢复SREG(I位)C代码示例
charCSREG;
CSREG = SREG;
/ *保存SREG * /
/*
在禁止中断* /
_CLI();
EECR | =(1EEMWE);/ *启动EEPROM写操作* /
EECR | =(1EEWE);SREG = CSREG;
/ *恢复SREG(I位)* /
12
ATtiny25/45/85
7598H–AVR–07/09
ATtiny25/45/85
当使用SEI指令使能中断时,紧跟其后的第一条指令将任何中断之前执行,如本例所示.汇编代码例程
sei睡眠;;中断(s)
;置位全局中断使能进入休眠模式,等待中断;注意:将任何悬而未决之前进入睡眠
C代码示例
_SEI();
/ *置位全局中断使能* /
_SLEEP();/ *进入休眠模式,等待中断* // *注意:在之前的任何未决的中断(s)进入睡眠* /
4.8.1中断响应时间
对于所有已启用AVR单片机的中断响应是四个时钟周期最小.经过四个时钟周期执行程序跳转到实际的中断处理程序.在这4个时钟周期,程序计数器被压入堆栈.
该载体通常是跳转到中断服务程序,此跳转需要3个时钟周期.如果在执行一个多周期指令执行期间发生中断,该指令被中断服务之前完成.若中断发生时MCU处于休眠模式,中断响应时间增加4个时钟周期.这种增长来自除不同的休眠模式的启动时间.
从一个中断处理程序返回需要4个时钟周期.在这四个时钟周期,程序计数器(两个字节)将被弹出堆栈回来,堆栈指针加二,和我在SREG位被置位.
5,AVR ATtiny25/45/85回忆
本节介绍在ATtiny25/45/85不同的回忆. AVR结构具有
两个主要的存储器空间,数据存储器和程序存储器空间.此外,该
ATtiny25/45/85还有EEPROM存储器以保存数据.这三个存储器空间都为线性的.
5.1在系统重新编程闪存程序存储器
该ATtiny25/45/85包含2/4/8K字节的片上系统内可编程闪存用于程序存储.因为所有的AVR指令为16位或32位,故而Flash组织为1024/2048/4096×16.
Flash存储器至少10,000写/擦除周期的耐力.该ATtiny25/45/85
程序计数器(PC)为10/11/12位,因此可以寻址1024/2048/4096程序存储器位置.
134页上的“存储器编程”包含有关Flash的详细说明
使用SPI引脚上的数据串行下载.
常数可以保存于整个程序存储器地址空间分配(见LPM - 加载程序存储器指令的说明).时序图请取指令和执行都在呈现第11页ing“.
“指令执行蒂姆 -
13
7598H–AVR–07/09
图5-1.程序存储器映射程序存储器0x00000x03FF/0x07FF5.2SRAM数据存储器图5-2显示了ATtiny25/45/85 SRAM空间的组织.较低224/352/607数据存储器包括了寄存器文件,I / O存储器和内部数据SRAM.起始的32个地址为寄存器文件,然后是64 LOCA-系统蒸发散的标准I / O内存,最后128/256/512字节的内部数据SRAM.对于数据存储器的五个不同的寻址方式:直接寻址,带偏移换货,间接寻址,带预减和间接带后增量.在登记册文件中的寄存器R26到R31为间接寻址的指针寄存器.直接寻址范围可达整个数据空间.与位移的间接模式,达到从由Y或Z寄存器给出的基地址的63个地址.当使用寄存器自动预减和后递增ment,地址寄存器X,Y和Z间接寻址模式自动增加或减少.32个通用工作寄存器,64个I / O寄存器,以及128/256/512字节的ATtiny25/45/85内部数据SRAM可以访问全部通过所有上述的寻址模式.该寄存器文件的描述第9页的“通用寄存器文件”.图5-2.数据存储器映射数据存储器32寄存器0x0000 - 0x001F64个I / O寄存器0x0020 - 0x005F0x0060内部SRAM(128/256/512 x 8)0x0DF/0x015F/0x025F14ATtiny25/45/857598H–AVR–07/09ATtiny25/45/85
5.2.1
数据存储器访问时间
本节说明访问时序内部存储器的访问.该内部数据SRAM访问时间为两个CLK进行图5-3.
片上数据SRAM访问周期
T1
T2
T3
CPU
如上述周期图5-3.
clkCPU地址
DataWRDataRD
Read
计算地址
地址有效
Write
存储器访问指令下一条指令
5.3EEPROM数据存储器
该ATtiny25/45/85包含128/256/512字节的EEPROM数据存储器.它是作为一个独立的数据空间,其中可以按字节读写. EEPROM有一个耐力至少100,000写/擦除周期. EEPROM和之间的访问的CPU是在下面描述的,指定EEPROM地址寄存器,EEPROM数据寄存器和EEPROM控制寄存器.为串行数据的详细说明下载到EEPROM中,看第138页.
5.3.1EEPROM的读/写访问
EEPROM的访问寄存器都可以访问的I / O空间.
是为EEPROM的写访问时间在给定的表5-1.自定时功能,然而,可以让用户软件检测到下一个字节可以被写入.如果用户代码包含指令系统蒸发散写入EEPROM,一些必须采取预防措施.在电源滤波电源,VCC很可能会上升或下降的power-up/down缓慢.这将导致装置的一些一段时间,以在电压大于指定的最低使用的时钟频率下运行.See第20页上的“防止EEPROM的腐败”关于如何避免这些问题的详细信息情况.
为了防止无意识的EEPROM写操作,一个特定的写程序必须遵守.请参阅第18页的“原子字节编程”and第18页的“分割字节编程”这个细节.
for
当执行EEPROM读操作时,CPU会停止工作4个时钟周期执行下一条指令之前.当执行EEPROM写入,CPU要停止两个时钟周期执行下一条指令之前.
15
7598H–AVR–07/09