关闭

关闭

关闭

封号提示

内容

首页 ATmega16

ATmega16.pdf

ATmega16

乖乖的剑指三秦 2010-12-18 评分 0 浏览量 0 0 0 0 暂无简介 简介 举报

简介:本文档为《ATmega16pdf》,可适用于IT/计算机领域,主题内容包含G–AVR–产品特性•高性能、低功耗的位AVR微处理器•先进的RISC结构–条指令–大多数指令执行时间为单个时钟周期–个位通用工作寄存器–全静态工作符等。

G–AVR–产品特性•高性能、低功耗的位AVR微处理器•先进的RISC结构–条指令–大多数指令执行时间为单个时钟周期–个位通用工作寄存器–全静态工作–工作于MHz时性能高达MIPS–只需两个时钟周期的硬件乘法器•非易失性程序和数据存储器–K字节的系统内可编程Flash擦写寿命:,次–具有独立锁定位的可选Boot代码区通过片上Boot程序实现系统内编程真正的同时读写操作–字节的EEPROM擦写寿命:,次–K字节的片内SRAM–可以对锁定位进行编程以实现用户程序的加密•JTAG接口(与IEEE标准兼容)–符合JTAG标准的边界扫描功能–支持扩展的片内调试功能–通过JTAG接口实现对Flash、EEPROM、熔丝位和锁定位的编程•外设特点–两个具有独立预分频器和比较器功能的位定时器计数器–一个具有预分频器、比较功能和捕捉功能的位定时器计数器–具有独立振荡器的实时计数器RTC–四通道PWM–路位ADC个单端通道TQFP封装的个差分通道个具有可编程增益(x,x,或x)的差分通道–面向字节的两线接口–两个可编程的串行USART–可工作于主机从机模式的SPI串行接口–具有独立片内振荡器的可编程看门狗定时器–片内模拟比较器•特殊的处理器特点–上电复位以及可编程的掉电检测–片内经过标定的RC振荡器–片内片外中断源–种睡眠模式:空闲模式、ADC噪声抑制模式、省电模式、掉电模式、Standby模式以及扩展的Standby模式•IO和封装–个可编程的IO口–引脚PDIP封装,引脚TQFP封装,与引脚MLF封装•工作电压:–ATmegaL:V–ATmega:V•速度等级–MHzATmegaL–MHzATmega•ATmegaL在MHz,V,C时的功耗–正常模式:mA–空闲模式:mA–掉电模式:<µA具有KB系统内可编程Flash的位微控制器ATmegaATmegaL本文是英文数据手册的中文翻译其目的是方便中国用户的阅读。它无法自动跟随原稿的更新同时也可能存在翻译上的错误。读者应该以英文原稿为参考以获得更准确的信息。ATmega(L)G–AVR–引脚配置FigureATmega的引脚声明本数据手册的典型值来源于对器件的仿真以及其他基于相同产生工艺的AVR微控制器的标定特性。本器件经过特性化之后将给出实际的最大值和最小值。(XCKT)PB(T)PB(INTAIN)PB(OCAIN)PB(SS)PB(MOSI)PB(MISO)PB(SCK)PBRESETVCCGNDXTALXTAL(RXD)PD(TXD)PD(INT)PD(INT)PD(OCB)PD(OCA)PD(ICP)PDPA(ADC)PA(ADC)PA(ADC)PA(ADC)PA(ADC)PA(ADC)PA(ADC)PA(ADC)AREFGNDAVCCPC(TOSC)PC(TOSC)PC(TDI)PC(TDO)PC(TMS)PC(TCK)PC(SDA)PC(SCL)PD(OC)PA(ADC)PA(ADC)PA(ADC)PA(ADC)AREFGNDAVCCPC(TOSC)PC(TOSC)PC(TDI)PC(TDO)(MOSI)PB(MISO)PB(SCK)PBRESETVCCGNDXTALXTAL(RXD)PD(TXD)PD(INT)PD(INT)PD(OCB)PD(OCA)PD(ICP)PD(OC)PDVCCGND(SCL)PC(SDA)PC(TCK)PC(TMS)PCPB(SS)PB(AINOC)PB(AININT)PB(T)PB(XCKT)GNDVCCPA(ADC)PA(ADC)PA(ADC)PA(ADC)PDIPTQFPMLFATmega(L)G–AVR–综述ATmega是基于增强的AVRRISC结构的低功耗位CMOS微控制器。由于其先进的指令集以及单时钟周期指令执行时间ATmega的数据吞吐率高达MIPSMHz从而可以缓减系统在功耗和处理速度之间的矛盾。方框图Figure结构框图INTERNALOSCILLATOROSCILLATORWATCHDOGTIMERMCUCTRLTIMINGOSCILLATORTIMERSCOUNTERSINTERRUPTUNITSTACKPOINTEREEPROMSRAMSTATUSREGISTERUSARTPROGRAMCOUNTERPROGRAMFLASHINSTRUCTIONREGISTERINSTRUCTIONDECODERPROGRAMMINGLOGICSPIADCINTERFACECOMPINTERFACEPORTADRIVERSBUFFERSPORTADIGITALINTERFACEGENERALPURPOSEREGISTERSXYZALUPORTCDRIVERSBUFFERSPORTCDIGITALINTERFACEPORTBDIGITALINTERFACEPORTBDRIVERSBUFFERSPORTDDIGITALINTERFACEPORTDDRIVERSBUFFERSXTALXTALRESETCONTROLLINESVCCGNDMUXADCAREFPAPAPCPCPDPDPBPBAVRCPUTWIAVCCINTERNALCALIBRATEDOSCILLATORATmega(L)G–AVR–AVR内核具有丰富的指令集和个通用工作寄存器。所有的寄存器都直接与算逻单元(ALU)相连接使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。这种结构大大提高了代码效率并且具有比普通的CISC微控制器最高至倍的数据吞吐率。ATmega有如下特点:K字节的系统内可编程Flash(具有同时读写的能力即RWW)字节EEPROMK字节SRAM个通用IO口线个通用工作寄存器用于边界扫描的JTAG接口支持片内调试与编程三个具有比较模式的灵活的定时器计数器(TC),片内外中断可编程串行USART有起始条件检测器的通用串行接口路位具有可选差分输入级可编程增益(TQFP封装)的ADC具有片内振荡器的可编程看门狗定时器一个SPI串行端口以及六个可以通过软件进行选择的省电模式。工作于空闲模式时CPU停止工作而USART、两线接口、AD转换器、SRAM、TC、SPI端口以及中断系统继续工作掉电模式时晶体振荡器停止振荡所有功能除了中断和硬件复位之外都停止工作在省电模式下异步定时器继续运行允许用户保持一个时间基准而其余功能模块处于休眠状态ADC噪声抑制模式时终止CPU和除了异步定时器与ADC以外所有IO模块的工作以降低ADC转换时的开关噪声Standby模式下只有晶体或谐振振荡器运行其余功能模块处于休眠状态使得器件只消耗极少的电流同时具有快速启动能力扩展Standby模式下则允许振荡器和异步定时器继续工作。本芯片是以Atmel高密度非易失性存储器技术生产的。片内ISPFlash允许程序存储器通过ISP串行接口或者通用编程器进行编程也可以通过运行于AVR内核之中的引导程序进行编程。引导程序可以使用任意接口将应用程序下载到应用Flash存储区(ApplicationFlashMemory)。在更新应用Flash存储区时引导Flash区(BootFlashMemory)的程序继续运行实现了RWW操作。通过将位RISCCPU与系统内可编程的Flash集成在一个芯片内ATmega成为一个功能强大的单片机为许多嵌入式控制应用提供了灵活而低成本的解决方案。ATmega具有一整套的编程与系统开发工具包括:C语言编译器、宏汇编、程序调试器软件仿真器、仿真器及评估板。引脚说明VCC数字电路的电源GND地端口A(PAPA)端口A做为AD转换器的模拟输入端。端口A为位双向IO口具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性可以输出和吸收大电流。作为输入使用时若内部上拉电阻使能端口被外部电路拉低时将输出电流。在复位过程中即使系统时钟还未起振端口A处于高阻状态。端口B(PBPB)端口B为位双向IO口具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性可以输出和吸收大电流。作为输入使用时若内部上拉电阻使能端口被外部电路拉低时将输出电流。在复位过程中即使系统时钟还未起振端口B处于高阻状态。端口B也可以用做其他不同的特殊功能请参见P。端口C(PCPC)端口C为位双向IO口具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性可以输出和吸收大电流。作为输入使用时若内部上拉电阻使能端口被外部电路拉低时将输出电流。在复位过程中即使系统时钟还未起振端口C处于高阻状态。如果JTAG接口使能即使复位出现引脚PC(TDI)、PC(TMS)与PC(TCK)的上拉电阻被激活。端口C也可以用做其他不同的特殊功能请参见P。ATmega(L)G–AVR–端口D(PDPD)端口D为位双向IO口具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性可以输出和吸收大电流。作为输入使用时若内部上拉电阻使能则端口被外部电路拉低时将输出电流。在复位过程中即使系统时钟还未起振端口D处于高阻状态。端口D也可以用做其他不同的特殊功能请参见P。RESET复位输入引脚。持续时间超过最小门限时间的低电平将引起系统复位。门限时间见PTable。持续时间小于门限间的脉冲不能保证可靠复位。XTAL反向振荡放大器与片内时钟操作电路的输入端。XTAL反向振荡放大器的输出端。AVCCAVCC是端口A与AD转换器的电源。不使用ADC时该引脚应直接与VCC连接。使用ADC时应通过一个低通滤波器与VCC连接。AREFAD的模拟基准输入引脚。代码例子本数据手册包含了一些简单的代码例子以说明如何使用芯片各个不同的功能模块。这些例子都假定在编译之前已经包含了正确的头文件。有些C编译器在头文件里并没有包含位定义而且各个C编译器对中断处理有自己不同的处理方式。请注意查阅相关文档以获取具体的信息。ATmega(L)G–AVR–AVRCPU内核介绍本节从总体上讨论AVR内核的结构。CPU的主要任务是保证程序的正确执行。因此它必须能够访问存储器、执行运算、控制外设以及处理中断。结构综述FigureAVR结构的方框图为了获得最高的性能以及并行性AVR采用了Harvard结构具有独立的数据和程序总线。程序存储器里的指令通过一级流水线运行。CPU在执行一条指令的同时读取下一条指令(在本文称为预取)。这个概念实现了指令的单时钟周期运行。程序存储器是可以在线编程的FLASH。快速访问寄存器文件包括个位通用工作寄存器访问时间为一个时钟周期。从而实现了单时钟周期的ALU操作。在典型的ALU操作中两个位于寄存器文件中的操作数同时被访问然后执行运算结果再被送回到寄存器文件。整个过程仅需一个时钟周期。寄存器文件里有个寄存器可以用作个位的间接寻址寄存器指针以寻址数据空间实现高效的地址运算。其中一个指针还可以作为程序存储器查询表的地址指针。这些附加的功能寄存器即为位的X、Y、Z寄存器。ALU支持寄存器之间以及寄存器和常数之间的算术和逻辑运算。ALU也可以执行单寄存器操作。运算完成之后状态寄存器的内容得到更新以反映操作结果。程序流程通过有无条件的跳转指令和调用指令来控制从而直接寻址整个地址空间。大多数指令长度为位亦即每个程序存储器地址都包含一条位或位的指令。程序存储器空间分为两个区:引导程序区(Boot区)和应用程序区。这两个区都有专门的锁定位以实现读和读写保护。用于写应用程序区的SPM指令必须位于引导程序区。在中断和调用子程序时返回地址的程序计数器(PC)保存于堆栈之中。堆栈位于通用数据SRAM因此其深度仅受限于SRAM的大小。在复位例程里用户首先要初始化堆栈指针FlashProgramMemoryInstructionRegisterInstructionDecoderProgramCounterControlLinesxGeneralPurposeRegistrersALUStatusandControlIOLinesEEPROMDataBusbitDataSRAMDirectAddressingIndirectAddressingInterruptUnitSPIUnitWatchdogTimerAnalogComparatorIOModuleIOModuleIOModulenATmega(L)G–AVR–SP。这个指针位于IO空间可以进行读写访问。数据SRAM可以通过种不同的寻址模式进行访问。AVR存储器空间为线性的平面结构。AVR有一个灵活的中断模块。控制寄存器位于IO空间。状态寄存器里有全局中断使能位。每个中断在中断向量表里都有独立的中断向量。各个中断的优先级与其在中断向量表的位置有关中断向量地址越低优先级越高。IO存储器空间包含个可以直接寻址的地址作为CPU外设的控制寄存器、SPI以及其他IO功能。映射到数据空间即为寄存器文件之后的地址xxF。ALU算术逻辑单元AVRALU与个通用工作寄存器直接相连。寄存器与寄存器之间、寄存器与立即数之间的ALU运算只需要一个时钟周期。ALU操作分为类:算术、逻辑和位操作。此外还提供了支持无有符号数和分数乘法的乘法器。具体请参见指令集。状态寄存器状态寄存器包含了最近执行的算术指令的结果信息。这些信息可以用来改变程序流程以实现条件操作。如指令集所述所有ALU运算都将影响状态寄存器的内容。这样在许多情况下就不需要专门的比较指令了从而使系统运行更快速代码效率更高。在进入中断服务程序时状态寄存器不会自动保存中断返回时也不会自动恢复。这些工作需要软件来处理。AVR中断寄存器SREG定义如下:•Bit–I:全局中断使能I置位时使能全局中断。单独的中断使能由其他独立的控制寄存器控制。如果I清零则不论单独中断标志置位与否都不会产生中断。任意一个中断发生后I清零而执行RETI指令后I恢复置位以使能中断。I也可以通过SEI和CLI指令来置位和清零。•Bit–T:位拷贝存储位拷贝指令BLD和BST利用T作为目的或源地址。BST把寄存器的某一位拷贝到T而BLD把T拷贝到寄存器的某一位。•Bit–H:半进位标志半进位标志H表示算术操作发生了半进位。此标志对于BCD运算非常有用。详见指令集的说明。•Bit–S:符号位,S=NVS为负数标志N与的补码溢出标志V的异或。详见指令集的说明。•Bit–V:的补码溢出标志支持的补码运算。详见指令集的说明。•Bit–N:负数标志表明算术或逻辑操作结果为负。详见指令集的说明。BitITHSVNZCSREG读写RWRWRWRWRWRWRWRW初始值ATmega(L)G–AVR–•Bit–Z:零标志表明算术或逻辑操作结果为零。详见指令集的说明。•Bit–C:进位标志表明算术或逻辑操作发生了进位。详见指令集的说明。ATmega(L)G–AVR–通用寄存器文件寄存器文件针对AVR增强型RISC指令集做了优化。为了获得需要的性能和灵活性寄存器文件支持以下的输入输出方案:•输出一个位操作数输入一个位结果•输出两个位位操作数输入一个位结果•输出两个位位操作数输入一个位结果•输出一个位位操作数输入一个位结果Figure为CPU个通用工作寄存器的结构。FigureAVRCPU通用工作寄存器大多数操作寄存器文件的指令都可以直接访问所有的寄存器而且多数这样的指令的执行时间为单个时钟周期。如Figure所示每个寄存器都有一个数据内存地址将他们直接映射到用户数据空间的头个地址。虽然寄存器文件的物理实现不是SRAM这种内存组织方式在访问寄存器方面具有极大的灵活性因为X、Y、Z寄存器可以设置为指向任意寄存器的指针。AddrR$R$R$…R$D通用R$E工作R$F寄存器R$R$…R$AX寄存器低字节R$BX寄存器高字节R$CY寄存器低字节R$DY寄存器高字节R$EZ寄存器低字节R$FZ寄存器高字节ATmega(L)G–AVR–X、Y、Z寄存器寄存器RR除了用作通用寄存器外还可以作为数据间接寻址用的地址指针。这三个间接寻址寄存器示于Figure。FigureX、Y、Z寄存器在不同的寻址模式中这些地址寄存器可以实现固定偏移量自动加一和自动减一功能。具体细节请参见指令集。堆栈指针堆栈指针主要用来保存临时数据、局部变量和中断子程序的返回地址。堆栈指针总是指向堆栈的顶部。要注意AVR的堆栈是向下生长的即新数据推入堆栈时堆栈指针的数值将减小。如果在调用或中断后读程序计数器未用位(:)应屏蔽。堆栈指针指向数据SRAM堆栈区。在此聚集了子程序堆栈和中断堆栈。调用子程序和使能中断之前必须定义堆栈空间且堆栈指针必须指向高于x的地址空间。使用PUSH指令将数据推入堆栈时指针减一而子程序或中断返回地址推入堆栈时指针将减二。使用POP指令将数据弹出堆栈时堆栈指针加一而用RET或RETI指令从子程序或中断返回时堆栈指针加二。AVR的堆栈指针由IO空间中的两个位寄存器实现。实际使用的位数与具体器件有关。请注意某些AVR器件的数据区太小用SPL就足够了。此时将不给出SPH寄存器。XHXLX寄存器R($B)R($A)YHYLY寄存器R($D)R($C)ZHZLZ寄存器R($F)R($E)BitSPSPSPSPSPSPSPSPSPHSPSPSPSPSPSPSPSPSPL读写RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW初始值ATmega(L)G–AVR–指令执行时序这一节介绍指令执行过程中的访问时序。AVRCPU由系统时钟clkCPU驱动。此时钟直接来自选定的时钟源。芯片内部不对此时钟进行分频。Figure说明了由Harvard结构决定的并行取指和指令执行以及可以进行快速访问的寄存器文件的概念。这是一个基本的流水线概念性能高达MIPSMHz具有优良的性价比、功能时钟比、功能功耗比。Figure并行取指和指令执行Figure演示的是寄存器文件内部访问时序。在一个时钟周期里ALU可以同时对两个寄存器操作数进行操作同时将结果保存到目的寄存器中去。Figure单时钟周期ALU操作复位与中断处理AVR有不同的中断源。每个中断和复位在程序空间都有独立的中断向量。所有的中断事件都有自己的使能位。当使能位置位且状态寄存器的全局中断使能位I也置位时中断可以发生。根据程序计数器PC的不同在引导锁定位BLB或BLB被编程的情况下中断可能被自动禁止。这个特性提高了软件的安全性。详见P“存储器编程”的描述。程序存储区的最低地址缺省为复位向量和中断向量。完整的向量列表请参见P“中断”。列表也决定了不同中断的优先级。向量所在的地址越低优先级越高。RESET具有最高的优先级第二个为INT–外部中断请求。通过置位MCU控制寄存器(MCUCR)的IVSEL中断向量可以移至引导Flash的起始处。编程熔丝位BOOTRST也可以将复位向量移至引导Flash的起始处。具体参见P“支持引导装入程序–在写的同时可以读(RWW,ReadWhileWrite)的自我编程能力”。任一中断发生时全局中断使能位I被清零从而禁止了所有其他的中断。用户软件可以在中断程序里置位I来实现中断嵌套。此时所有的中断都可以中断当前的中断服务程序。执行RETI指令后I自动置位。clkstInstructionFetchstInstructionExecutendInstructionFetchndInstructionExecuterdInstructionFetchrdInstructionExecutethInstructionFetchTTTTCPUTotalExecutionTimeRegisterOperandsFetchALUOperationExecuteResultWriteBackTTTTclkCPUATmega(L)G–AVR–从根本上说有两种类型的中断。第一种由事件触发并置位中断标志。对于这些中断程序计数器跳转到实际的中断向量以执行中断处理程序同时硬件将清除相应的中断标志。中断标志也可以通过对其写””的方式来清除。当中断发生后如果相应的中断使能位为""则中断标志位置位并一直保持到中断执行或者被软件清除。类似的如果全局中断标志被清零则所有已发生的中断都不会被执行直到I置位。然后挂起的各个中断按中断优先级依次执行。第二种类型的中断则是只要中断条件满足就会一直触发。这些中断不需要中断标志。若中断条件在中断使能之前就消失了中断不会被触发。AVR退出中断后总是回到主程序并至少执行一条指令才可以去执行其他被挂起的中断。要注意的是进入中断服务程序时状态寄存器不会自动保存中断返回时也不会自动恢复。这些工作必须由用户通过软件来完成。使用CLI指令来禁止中断时中断禁止立即生效。没有中断可以在执行CLI指令后发生即使它是在执行CLI指令的同时发生的。下面的例子说明了如何在写EEPROM时使用这个指令来防止中断发生以避免对EEPROM内容的可能破坏。使用SEI指令使能中断时紧跟其后的第一条指令在执行任何中断之前一定会首先得到执行。中断响应时间AVR中断响应时间最少为个时钟周期。个时钟周期后程序跳转到实际的中断处理例程。在这个时钟期期间PC自动入栈。在通常情况下中断向量为一个跳转指令此跳转需要个时钟周期。如果中断在一个多时钟周期指令执行期间发生则在此多周期指令执行完毕后MCU才会执行中断程序。若中断发生时MCU处于休眠模式中断响应时间还需增加个时钟周期。此外还要考虑到不同的休眠模式所需要的启动时间。这个时间不包括在前面提到的时钟周期里。汇编代码例程inr,SREG保存SREGcli禁止中断sbiEECR,EEMWE启动EEPROM写操作sbiEECR,EEWEoutSREG,r恢复SREG(I位)C代码例程charcSREGcSREG=SREG*保存SREG**禁止中断*CLI()EECR|=(<<EEMWE)*启动EEPROM写操作*EECR|=(<<EEWE)SREG=cSREG*恢复SREG(I位)*汇编代码例程sei置位全局中断使能标志sleep进入休眠模式等待中断发生注意:在执行任何被挂起的中断之前MCU将首先进入休眠模式C代码例程SEI()*置位全局中断使能标志*SLEEP()*进入休眠模式等待中断发生**注意:在执行任何被挂起的中断之前MCU将首先进入休眠模式*ATmega(L)G–AVR–中断返回需要个时钟。在此期间PC(两个字节)将被弹出栈堆栈指针加二状态寄存器SREG的I置位。ATmega(L)G–AVR–AVRATmega的存储器本节讲述ATmega的存储器。AVR结构具有两个主要的存储器空间:数据存储器空间和程序存储器空间。此外ATmega还有EEPROM存储器以保存数据。这三个存储器空间都为线性的平面结构。系统内可编程的Flash程序存储器ATmega具有K字节的在线编程Flash用于存放程序指令代码。因为所有的AVR指令为位或位故而Flash组织成Kx位的形式。用户程序的安全性要根据Flash程序存储器的两个区:引导(Boot)程序区和应用程序区分开来考虑。Flash存储器至少可以擦写,次。ATmega的程序计数器(PC)为位因此可以寻址K字的程序存储器空间。引导程序区以及相关的软件安全锁定位请参见P“支持引导装入程序–在写的同时可以读(RWW,ReadWhileWrite)的自我编程能力”而P“存储器编程”详述了用SPI或JTAG接口实现对Flash的串行下载。常数可以保存于整个程序存储器地址空间(参考LPM加载程序存储器指令的说明)。取指与执行时序图请参见P“指令执行时序”。Figure程序存储器映像$$FFFApplicationFlashSectionBootFlashSectionATmega(L)G–AVR–SRAM数据存储器Figure给出了ATmegaSRAM空间的组织结构。前个数据存储器包括了寄存器文件、IO存储器及内部数据SRAM。起始的个地址为寄存器文件与个IO存储器接着是字节的内部数据SRAM。数据存储器的寻址方式分为种:直接寻址、带偏移量的间接寻址、间接寻址、带预减量的间接寻址和带后增量的间接寻址。寄存器文件中的寄存器R到R为间接寻址的指针寄存器。直接寻址范围可达整个数据区。带偏移量的间接寻址模式能够寻址到由寄存器Y和Z给定的基址附近的个地址。在自动预减和后加的间接寻址模式中寄存器X、Y和Z自动增加或减少。ATmega的全部个通用寄存器、个IO寄存器及个字节的内部数据SRAM可以通过所有上述的寻址模式进行访问。寄存器文件的描述见P“通用寄存器文件”。Figure数据存储器映像RegisterFileRRRRRRIORegisters$$$$D$E$F$$$$D$E$F$$$$D$E$FDataAddressSpace$$$E$FInternalSRAMATmega(L)G–AVR–数据存储器访问时间本节说明访问内部存储器的时序。如Figure所示内部数据SRAM访问时间为两个clkCPU时钟。Figure片上SRAM存取周期EEPROM数据存储器ATmega包含字节的EEPROM数据存储器。它是作为一个独立的数据空间而存在的可以按字节读写。EEPROM的寿命至少为,次擦除周期。EEPROM的访问由地址寄存器、数据寄存器和控制寄存器决定。通过SPI和JTAG及并行电缆下载EEPROM数据的操作请分别参见P、P及P。EEPROM读写访问EEPROM的访问寄存器位于IO空间。EEPROM的写访问时间由Table给出。自定时功能可以让用户软件监测何时可以开始写下一字节。用户操作EEPROM需要注意如下问题:在电源滤波时间常数比较大的电路中上电下电时VCC上升下降速度会比较慢。此时CPU可能工作于低于晶振所要求的电源电压。请参见P“防止EEPROM数据丢失”以避免出现EEPROM数据丢失的问题。为了防止无意识的EEPROM写操作需要执行一个特定的写时序。具体参看EEPROM控制寄存器的内容。执行EEPROM读操作时CPU会停止工作个周期然后再执行后续指令执行EEPROM写操作时CPU会停止工作个周期然后再执行后续指令。clkWRRDDataDataAddressAddressValidTTTComputeAddressReadWriteCPUMemoryAccessInstructionNextInstructionATmega(L)G–AVR–EEPROM地址寄存器-EEARH和EEARL•Bits–Res:保留保留位读操作返回值为零。•Bits–EEAR:EEPROM地址EEPROM地址寄存器–EEARH和EEARL指定了字节的EEPROM空间。EEPROM地址是线性的从到。EEAR的初始值没有定义。在访问EEPROM之前必须为其赋予正确的数据。EEPROM数据寄存器-EEDR•Bits–EEDR:EEPROM数据对于EEPROM写操作EEDR是需要写到EEAR单元的数据对于读操作EEDR是从地址EEAR读取的数据。EEPROM控制寄存器-EECR•Bits–Res:保留保留位读操作返回值为零。•Bit–EERIE:使能EEPROM准备好中断若SREG的I为""则置位EERIE将使能EEPROM准备好中断。清零EERIE则禁止此中断。当EEWE清零时EEPROM准备好中断即可发生。•Bit–EEMWE:EEPROM主机写使能EEMWE决定了EEWE置位是否可以启动EEPROM写操作。当EEMWE为""时在个时钟周期内置位EEWE将把数据写入EEPROM的指定地址若EEMWE为"“则操作EEWE不起作用。EEMWE置位后个周期硬件对其清零。见EEPROM写过程中对EEWE位的描述。Bit–––––––EEAREEARHEEAREEAREEAREEAREEAREEAREEAREEAREEARL读写RRRRRRRRWRWRWRWRWRWRWRWRW初始值XXXXXXXXXBitMSBLSBEEDR读写RWRWRWRWRWRWRWRW初始值Bit––––EERIEEEMWEEEWEEEREEECR读写RRRRRWRWRWRW初始值XATmega(L)G–AVR–•Bit–EEWE:EEPROM写使能EEWE为EEPROM写操作的使能信号。当EEPROM数据和地址设置好之后需置位EEWE以便将数据写入EEPROM。此时EEMWE必须置位否则EEPROM写操作将不会发生。写时序如下(第步和第步的次序并不重要):等待EEWE位变为零等待SPMCSR中的SPMEN位变为零将新的EEPROM地址写入EEAR(可选)将新的EEPROM数据写入EEDR(可选)对EECR寄存器的EEMWE写""同时清零EEWE在置位EEMWE的个周期内置位EEWE在CPU写Flash存储器的时候不能对EEPROM进行编程。在启动EEPROM写操作之前软件必须检查Flash写操作是否已经完成。步骤()仅在软件包含引导程序并允许CPU对Flash进行编程时才有用。如果CPU永远都不会写Flash步骤()可省略。请参见P“支持引导装入程序–在写的同时可以读(RWW,ReadWhileWrite)的自我编程能力”。注意:如果在步骤和之间发生了中断写操作将失败。因为此时EEPROM写使能操作将超时。如果一个操作EEPROM的中断打断了另一个EEPROM操作EEAR或EEDR寄存器可能被修改引起EEPROM操作失败。建议此时关闭全局中断标志I。经过写访问时间之后EEWE硬件清零。用户可以凭借这一位判断写时序是否已经完成。EEWE置位后CPU要停止两个时钟周期才会运行下一条指令。•Bit–EERE:EEPROM读使能EERE为EEPROM读操作的使能信号。当EEPROM地址设置好之后需置位EERE以便将数据读入EEAR。EEPROM数据的读取只需要一条指令且无需等待。读取EEPROM后CPU要停止个时钟周期才可以执行下一条指令。用户在读取EEPROM时应该检测EEWE。如果一个写操作正在进行就无法读取EEPROM也无法改变寄存器EEAR。经过校准的片内振荡器用于EEPROM定时。Table为CPU访问EEPROM的典型时间。Note:使用时钟频率为MHz不倚赖CKSEL熔丝位的设置。TableEEPROM编程时间符号校准的RC振荡器周期数()典型的编程时间EEPROM写操作(CPU)msATmega(L)G–AVR–下面的代码分别用汇编和C函数说明如何实现EEPROM的写操作。在此假设中断不会在执行这些函数的过程当中发生。同时还假设软件没有BootLoader。若BootLoader存在则EEPROM写函数还需要等待正在运行的SPM命令的结束。汇编代码例程EEPROMwrite:等待上一次写操作结束sbicEECR,EEWErjmpEEPROMwrite设置地址寄存器(r:r)outEEARH,routEEARL,r将数据写入数据寄存器(r)outEEDR,r置位EEMWEsbiEECR,EEMWE置位EEWE以启动写操作sbiEECR,EEWEretC代码例程voidEEPROMwrite(unsignedintuiAddress,unsignedcharucData){*等待上一次写操作结束*while(EECR(<<EEWE))*设置地址和数据寄存器*EEAR=uiAddressEEDR=ucData*置位EEMWE*EECR|=(<<EEMWE)*置位EEWE以启动写操作*EECR|=(<<EEWE)}ATmega(L)G–AVR–下面的例子说明如何用汇编和C函数来读取EEPROM在此假设中断不会在执行这些函数的过程当中发生。在掉电休眠模式下的EEPROM写操作若程序执行掉电指令时EEPROM的写操作正在进行EEPROM的写操作将继续并在指定的写访问时间之前完成。但写操作结束后振荡器还将继续运行单片机并非处于完全的掉电模式。因此在执行掉电指令之前应结束EEPROM的写操作。防止EEPROM数据丢失若电源电压过低CPU和EEPROM有可能工作不正常造成EEPROM数据的毁坏(丢失)。这种情况在使用独立的EEPROM器件时也会遇到。因而需要使用相同的保护方案。由于电压过低造成EEPROM数据损坏有两种可能:一是电压低于EEPROM写操作所需要的最低电压二是CPU本身已经无法正常工作。EEPROM数据损坏的问题可以通过以下方法解决:当电压过低时保持AVRRESET信号为低。这可以通过使能芯片的掉电检测电路BOD来实现。如果BOD电平无法满足要求则可以使用外部复位电路。若写操作过程当中发生了复位只要电压足够高写操作仍将正常结束。IO存储器ATmega的IO空间定义见P“寄存器概述”。ATmega所有的IO及外设都被放置于IO空间。所有的IO位置都可以通过IN与OUT指令来访问在个通用工作寄存器和IO之间传输数据。地址为xxF的IO寄存器还可用SBI和CBI指令直接进行位寻址而SBIS和SBIC则用来检查某一位的值。更多内容请参见指令集。使用IN和OUT指令时地址必须在xxF之间。如果要象SRAM一样通过LD和ST指令访问IO寄存器相应的地址要加上x。汇编代码例程EEPROMread:等待上一次写操作结束sbicEECR,EEWErjmpEEPROMread设置地址寄存器(r:r)outEEARH,routEEARL,r设置EERE以启动读操作sbiEECR,EERE自数据寄存器读取数据inr,EEDRretC代码例程unsignedcharEEPROMread(unsignedintuiAddress){*等待上一次写操作结束*while(EECR(<<EEWE))*设置地址寄存器*EEAR=uiAddress*设置EERE以启动读操作*EECR|=(<<EERE)*自数据寄存器返回数据*returnEEDR}ATmega(L)G–AVR–为了与后续产品兼容保留未用的未应写""而保留的IO寄存器则不应进行写操作。一些状态标志位的清除是通过写""来实现的。要注意的是与其他大多数AVR不同CBI和SBI指令只能对某些特定的位进行操作因而可以用于包含这些状态标志的寄存器。CBI与SBI指令只对x到xF的寄存器有效。IO和外设控制寄存器在后续其他章节进行介绍。ATmega(L)G–AVR–系统时钟及时钟选项时钟系统及其分布Figure为AVR的主要时钟系统及其分布。这些时钟并不需要同时工作。为了降低功耗可以通过使用不同的睡眠模式来禁止无需工作的模块的时钟详见P“电源管理及睡眠模式”。时钟系统详见Figure。Figure时钟分布CPU时钟-clkCPUCPU时钟与操作AVR内核的子系统相连如通用寄存器文件、状态寄存器及保存堆栈指针的数据存储器。终止CPU时钟将使内核停止工作和计算。IO时钟-clkIOIO时钟用于主要的IO模块如定时器计数器、SPI和USART。IO时钟还用于外部中断模块。要注意的是有些外部中断由异步逻辑检测因此即使IO时钟停止了这些中断仍然可以得到监控。此外USI模块的起始条件检测在没有clkIO的情况下也是异步实现的使得这个功能在任何睡眠模式下都可以正常工作。Flash时钟-clkFLASHFlash时钟控制Flash接口的操作。此时钟通常与CPU时钟同时挂起或激活。异步定时器时钟-clkASY异步定时器时钟允许异步定时器计数器与LCD控制器直接由外部kHz时钟晶体驱动。使得此定时器计数器即使在睡眠模式下仍然可以为系统提供一个实时时钟。ADC时钟-clkADCADC具有专门的时钟。这样可以在ADC工作的时候停止CPU和IO时钟以降低数字电路产生的噪声从而提高ADC转换精度。GeneralIOModulesAsynchronousTimerCounterADCCPUCoreRAMclkIOclkASYAVRClockControlUnitclkCPUFlashandEEPROMclkFLASHclkADCSourceClockWatchdogTimerWatchdogOscillator

用户评论(0)

0/200

精彩专题

上传我的资料

每篇奖励 +1积分

资料评分:

/49
仅支持在线阅读

意见
反馈

立即扫码关注

爱问共享资料微信公众号

返回
顶部

举报
资料