AVR教程系列一(8):ATmega16 简介(三).docx
ATmega1.6简介(三)ATmega16指令执行时序这一节介绍指令执行过程中的访问时序.AVRCPt1.由系统时忡C1.kcK冕动.此时仲宜按来自选定的时钟说.芯片内部不对此时怦进行分项.Fire6说明了由HarVard玷构决定的并行取指和指令执行,以及可以进行快速访何的存放文件的概念.这是个根本的流水线概念.性能高达1MIPS.UIz.具有优良的性价比'功能/时怦比.功能/功耗比.Fieure7演示的是存放涉文件内部访问时序.在一个时树横期里.A1.1.'可以同时对两个存放器渤作数进行愫作.同时将结果保存到目的存放潴中去-ATDega1.6复位与中断处理AYR仃不同的中断祝.用个中断和现位在程序空向国有独立的中断向量:.所行的中断驿件和仃自已的It低位.当他傥住置位.且状态存放器的全射中断使能位I也?(位时,中时可以发生,根械程序HsiJiM1.C的不同,在引导锁定位H1.BO2或Bun2被编程的情况R中厮可能被自动禁止,这个特性提高了软件的平安性.详见P247“存储器编程”的箱迷.程序存储区的最低地址省为如位向此和中断向球.完整的向坡列表请参见P43”中Ie.列表也决定不同中新的优先级.向(It所在的地址越怔,优先级越高.时SET具有域高的优先雄,第二个为IMO-外部中断语求”通过双位MCv控制存放器(MC1.ICR)的IVSE1.,中断向M可以格至引导FIaSh的起始处.次程再丝位Ba)TRSr也可以将亚位向Irt移至引导FmSh的起始处.具体誓见P2:M”支持引导装入探序-在。的同时可以i*K*M,Rea(HIhi1.eTriS)的自我城程能力.任一中断发生时全导中斯使能位I被济字,从而SS止了所有其他的中断.用户轨件可以在中断程序里置位I未实现中SiiK袋,此时所有的中新就可以中断当前的中断效劳程序,执行RCT1.指令后I自动置位.从根本上说仃两类型的中断.第一种田小件触发并置位中断标志.对这打中断.程序计数器跳转到.实际的中断向St以执行中断处理程序,同时硬件将去除相应的中断标志.中断标志也可以通过对其写”的方式来去除.当中新发生后,如果相应的中断使能位为-Y.则中新惊苕位五位,并一I1.保持到中断执行,或并被软件去除。类似的,如里全局中断标志搜济零,划所*已发生的中断都不会被执行.直到1Kf.然而挂起的各个中断按中断优先皴依次执行.第二种类型的中断则是只要中Iii条件满足,就会一直触发.这些中断不需要中断标志.若中断条件在中断使能之航就消失了,中斯不会被忖发.AVR退Hi中断后总是网到主程序并至少执行一条指令才可以去执行其他被拄起的中断.瞿注意的是,进入中断效劳程序时状态存放舞不会自动保存,中断返何时也不金自动恢现.这些工作翅由用户通过轨件来完成.位用Cu指令来禁止中断时.中断禁止立即生效,没有中断可以在执行CU指令后发生,即使它是在执行CU指令的同时发生的.下面的例子说明了如何在写EEPwW时使用这个指令未防止中In发生以防止对EKpWN内容的可能破坏,汇纲代岗例程inr1.6,SRHG:保存SHfiGC1.i:祭止中断sbiEECR,EEWE:启动EEPROM、操作sbiEECR1ECT1.ioutSREG1r1.:饿乂SRBG(1ft)C代码例程charcSREG:CSREG=SREG:/保存SREG/禁止中断”_C1.I():EECR=(1<<EE三):/*启动EEPRoMH操作*/EECRI=(i<<EEME);SRKG=cSRh:G;/住受SREG(I便)/使用SEI指令使能中断时,常跟大后的第条指令在执行任何中断之M-定会首先科到执行.范编代闪例程sei;双位全局中断使能标志S1.MP;进入休眠模式,等仔中断发生:注意:在执行任何被拄起的中断之前MOJ将首先进入休眠模式C代码例程SEIO:/置位全局中斯使能标志*/S1.EEPO:/*进入休眠模代.等待中断发生”/»注意:在执行任何被挂它的中断之前MtT将苜先进入休眠模式"/AVR中断响应时IBJ最少为4个时伸冏期.4个时钟冏期后,探序跳转到实际的中断处理例府.在这4个时钟期期间PC自动入栈.在JMm况下中断向It为一个践转指令此跳转需要3个时伸周期.如果中断在一个多时钟周期指令执行期间发牛.好在虻多周期指令执行完埠后Wt才会执行中断程序.若中断发生时MCU处于休账模式,中断响应时阿还需增加I个时钟屣期.此外还要考虑到不同的休眠怏式所需娈的用动时间,这个时间不包括在前面提到的时钟闷用甲.中断返网需要I个时怜,在此期向Kx两个字节)将被舛出伐,11戈拼计加二,状态存放JSSRW;的I置位.ATnega1.6F1.ash程序存储器系统内可程的F1.aiih程序存钻器ATneM1.6具右16K字节的i线加程FIaxh,用于存放程序指令代码,因为所勾的AYK指令为16位或32位,故而F1.i1.xh织浜成KKX16位的形式.用户程序的平安性要根据F1.ach程序存储器的两个区r引导(Boo1.)程序区和应用程序区,分开条考虑,FIaSh存储JS至少可以揍与10.CHX1.次.Tma16的程序计数制(PO为13位.因此可以寻址8K字的程杼存储器空向.;J1.导程侪区以及相关的软件平安镇定位语参见设3,1“支持引于裳入程序-在写的同时可以读(H",RcadfhiIeTritQ的自我编程能力”,而P217“存仙相簿程"详述了MSP1.或JTAG接”实现对F1.gh的中行下领.常数可以保存丁整个程序存储SS地址空间参考1.P)I加栽程序存依器指令的说明).取指与执行时序图请参见P1.1."指令执行时序.SOOOO$1FFFATnega1.6SRAM数据存储器SRAM数捆存北洪Figurr9给出ATmegn16SRAM空问的(Hfn第构.Figure 9 数据存储器映像j0001R2S0002M1.jDR30R31SoOIFI/ORegisters0021$005EInterna1.SRAMS0061ISO45E$045FIRef1.iscerFi1.eDataAddressSpace前H20个t据存体器包括了存放器文件、I/O存储得及内部数据SRQ1.起始的M个地址为存放器攵件与M个I/O存必疆,接箱是1024字节的内蔺数1«SRAM.数据存储得的寻址方式分为5种:戌按寻址、带偏移棚的何接寻址、问按寻址、带预战It的间接寻址和带后增量的何接寻址.存政密文件中的存放器R26jiR31.为间接寻址的指针存放睛,直接寻址范川可达整个数据区.带偏移Ift的何接寻址模式能绯寻址列由存放器丫和Z给定的珞址附近的63个地比。隹自动用减和后加的间接寻址模式中.存放JSX、丫和2白动增加或瘫少.ATnega16的全部32个通用存放捐.61个I/O存放器及1024个字节的内部线据SRM可以通过所仃上述的寻址授丈进行访何,存放邦文件的描述见P91通用存故等文件”.SRftN数据在砧:访本V说明访何内部存俅器的时序.¢1Figure10所示.内御数据SR仙访何时间为两个CIkCptWW.Figure 10 片上SRAM存取周期c1.kCPUAddressDataWRDataRD一kComputeAddressXAddressva1.idr-/皑1.5_/-1.HeJ,T1T2T3MemoryAccessInstructiNextInstruaionATmega1.6EEPROM数据存储器ATnega1.G包含512字节的EEPRoM数幅片M物.它是作为个独立的S1.tW空间而存在的,可以按字节选写.EEPRCM的寿命至少为100.000次推涿同期.EEPROM的访日由地址存放器、数超存放器和控制存放器决定.通过SPIK1.JTAG及并行电燃下载IiEPROMJt据的操作请分别叁见P260.P265及P250,EEPROM读/写访日EEPROM读/UWHEEPROM的访问存放器位于I/O空间.EEPRe1.M的巧访问时间由Tab1.e1绐出.自定时功能可以让用户攸件隘测何时可以开始写下一字唧.用户操作EEPRCM甯要注意如下何圆;在电源浊波时向常数比较大的电路中,上电/下电时VCC上升/下降速慢会比较慢此时QP可能工作于帐于品振所要求的电源电压,谙参见P20-防止EEPROM数据丧失.以防止出现EEPwW数据丧失的句理,为防IE无意识的EEPRoW与操作需瞿执行一个特定的马时序.具体黯而EEPRoM摔制存故;S的内容.IKhEEIUOM读根作时,CPU会停止工作,1个周期,然后再执行后线折I执行EEpRaM号拨作时,CPti会铮止工作2个展期,然后再执行后续指令.KEPKOW地址存放器一EHAKH(f1.HiRI.?Bits15.9-Res:保存保存位,读操作返Htf1.为零.?Bits8.0-EEAR8.0:EEPROM地址EEPROM地址存放器-EEUm和EEAR1.指定/512字节的EEpR(W空间.EEPRoM地址是线性的.从0f>511.EEAR的初始值没行走义在访问EEpKoM之肝必须为其IKf正确的数根.EEPROM数据存故备-EEDR?Bits7.0-EEDR7.0:EEPRoN数累对于EEIMn1.与操作,EEWI是需要写到EHAH单元的数粼:对于i操作EEDR是从地址EHA1.i读取的数据EEPROM冲闸存故;S-EECS?Bits7.4-Res:保存保存位.读操作返回值为W.?Bit3-EERJE:使能IniPRCM准招好中新若SREG的I为"1".明JS位EERIE将依健EEpRQM准备好中断.清&EER1.E则禁止此中断.当EEXE清零时EBPRoM准箔好中断即可发生.?Bit2-EEMVE:口PRtM主机写使能EEWE决定了EEVE区位是否可以启动EEPRON、操作.当EEWHi为"1"时,在4个时钟刑期内息位EE1.fE将把案写入EEPROM的布定地此:若EBnEJj-O-,则像作EEvE不起作用.EB1.B置位后4个周期,段件对耳清零.»EEPROM当过程中对EEE位的描述.?Bit1-EE*E:EEPROM与位悠EEWE为EEPRoM与操作的使能加8.VEEPRcWCHK和地址设置好之后,需置位E三E以便将数IK写入EEPRoM.此时EBME仍须置位,否则EEPRoM写操作物不会发生.写时序如下(第3步和第4步的次序并不如要):1 .等待EEtE位变为零2 .等待SPMCSR中的SPMEX位安为零3 .将狱的EEPWN地坟写人EEAR(可选)4 .将册的EK1.MioM数刷写入EEDR(可选)5 .对EECR存放器的E0WE写"1”,同时沽写EEnE6 .在置位EDWE的4个附期内.双位EEXE在Cpt写F1.axh存储器的时帔不能时EEIMIM进行组I程.在居功EtTROM写操作之前软件必须检代F1.Uh写操作是否已炫完成步骤(2)仅在软件包含弓I导程序并允许C叩对FIaSh进行Si%时才芍用。如果CPV永远都不会与F1.aSh,步印(2可由电请卷见P234”支持引导装入程庠-在写的同时可以注(限%RgdfhiIe-IfritQ的自我设程像力”.注点:如果花步骡5和6之如发生了中断,可I1.作将失败,因为此时EEPRoM耳使能雄作将超时.如JK一个操作EEPWN的中断打断了另一个EEPRoM操作.EEAR或EEUR存放岩可能核修改,引起即RoM操作失氏建议此时关闭全局中新标忐】.经过写访问时间之府.EEXE硬件清零.用户可以凭借这位判断”时序是否已经完成.ECTEKfiJfi.CPI:要惇止四个时钟周期才会运行下务指令.?Bit0-EERE:EIiPRCIM读使便EERE为EEraaM诙操作的使能信号.当EEPROM地址设置好之后.需WREERE以便将依据注入EEAR.EEPROM故M的掰取只甯要袈指令.且无新等待.读取EEPRCM后CP1.要停止4个时钟IM期才可以执行下一条指令.M户在读取EEpRa1.时应该检测优E0如果一个写操作正在进行,就无法读取EEI*11M,也无法改变存放擀EEftR.经过校准的片内捺带用于EEPROM定时.Tab1.e1为Cpi1.访何EEPROM的典型时间.F面的代码分别用工编和C就数说明如何实现EEPRnM的写操作.在此催设中断不会在执行这些函数的过程当中发生同时还假设软件没有Ba)I1.oader若由。I1.oader存在,则EH1.RoN”由数还塞妥需恃正在运行的SW命令的结束”近编代内例程EEPROM-Vrite:等待上一次与操作结束sbicEECR.EEWErjnpmW1writ<;设况地址存放器(r1.8:r1.7)outEEARI1.r1.8outEEAR1.r1.7;轿数据写入数据存放器(r1.6)outEtPR,r!6:KfttI-EMWEsbiEEOtEEWAE;五位KEVE以后动写操作sbiEBdtEEVEretC代用例程voidI*1HI,IK)Mwritc(unsignedintuiAddrrxs.unxignadcharurDntn)(*等待上次写操作结束*/vhiIe(EECRt(1.<<EEW)*/设置地址和数据存放婚”EEAR=UiAddress:EEDR=ucDtita:WKfEEwM:/EECRI=<K<EE三);2巴位EEIrE以启动'操作”EECRI=<1<<EEIE):下面的例子说明如何用汇埼和C由数来读取EKPRaM,在此假设中断不会在执行这些南t的过程当中发生.近编代内例程EEPRO1.1.read:等待上一次与操作结束sbicEECR.EEWErjnpIOiPWMread;设况地址存放器(r1.8:r1.7)outEEARI1.r1.8outEEAR1.r1.7:设NEERE以H动波掇作sbiEKR1EERE:自如K存放JS读取数维inr16.EEDRretC代秘例印unsignedcharEI-J1RONread(unsignediniuiAddress)(等待上一次写拨作结束*/UhiIZEECR*(I«EEXE)/设置地址存放器*/EEftR=UiAddress;/»S1.EERE以启动读正作*/EECRI=<i<<EERE);/自数第存放器返网数据*/returnEEDR:在押电休眠模式下的KHWM写掾作若程序执行绰电指令时EEPROM的”操作正在进行.EEPROM的”悌作相继续,并在指定的"访何时间之前完成.但写换作结束后.探苗器还将继续运行.单片机并拿处丁克仝的掉电模式.因此在执行掉电指令之前应结束EEPROM的巧操作.防止EEPRoM数据丧失若电源电垢过低,CP1.和EEPROM有可能工作不正常.造成EEPRON依据的我坏(丧失).这种情况在使用独立的EEPROM器件时也会泄到.因而需要使用相同的保护方案.由于电压过低造成EEPROM数幅损坏“两舛可能I火电压低于EEPROM写操作所需要的Ai低电£;二是CKA号已经无法正常工作.KEPKOW数据桢坏的何Ia可以通过以下方法帆决:当电IK过低时保持AVRRESET信号为低,这可以通过使能芯片的掉电检冽电路BOD来实现.1!½JWD电无法满足要求则可以使阳外部北位电路.若“操作过程当中发生了女位,只要:电压足够5.”操作仍将正常结束.ATnega1.6I/O存储器AT1.wXa16所有的I/O及外设筮被放置I/O空间.所有的1/0位置都可以通过IN与如指令来访何.在32个通用工作存放器和I/O之向传输数第”堆址为DXw-OXIFW1/0存放器还可用SB1.和CB1.指令巴接进行位寻址,而SB1.S和SHIC则用来拴伤某一位的值.更多内容请咨见指令象,使用IN和QIT指令时地址必须在0x000x3F之间,如果要象SRNTf通过1.D和STffi今访问I/O在放拓.相展的地址要加上0x20.为了与后桂产品兼容,保存未用的未应写”(T,而保存的I/O存放器则不应进行写操作,W状态标志位的去除足通过。"】"来实现的.要注意的是.与其他大多数AVR不同.CBI和SB1.指令只能对某些特定的它进行撵作.因而可以用丁包含这包状志标志的存放器.81与SB1.指令只对OXOo«Ox1.F的存故器仃效.I/O和外设控制存故洪在B线其他章节进行介绍.Tab1.e1.EEPRoM煽程时间符号校准的RC提蔼0周期数典型的靖程时间EEPROM写徵作(CPU)84488.5msNote:1.使用时钟冢率为1MHz,不倚/CKSE1.珞纹位的设II。B*7854321OEECR*/WRRRRRZWfVWRTfVRW初均值OOOOOOXOBrt6543210jMSB1.SBIEEDR/EMVRWR'MtiRRRW初M1.OOOOOOOOBit_15_14131211109_8_一-EEARHIEEAR7EEARGEEAR5EEAR4EEAR3EEAR2EEARIEEAR1.654321«/wRRRRRRRRWRWWR/WRWRVR/WRM'RM初站值