AVR教程系列一(12):ATmega16 简介(六).docx
ATmega1.6简介(六)ATnega1.6控制和状态存放器MCuCSRAVR梓刖和状态存故JS提供/仃关引起AVR红竹的夏付淑的伯息.?Bit4-JTRF:JTAG位标志通过JTAG指令AVKRESin可以使JTAG复位存放器?I收,并引发Ma或也,井使JTKF同位.上电红位将ItJtt消军,也可以通过写,0,来去除.?Bit3-f1.>RF:希门狗/位标志才门利复位发生时置也上电复位彝使其清写,也可也18过写o来去除.?Bit2-BOJiF:评电检君复位标志拉电松测乂位发生时双位,上电复位将使其济学.也可以通过写“0,来去除.?Bit1-EXIRF:外部双位标志外部盟位发生时置位.Jt电复位将使其沛格.也可以通过耳”(T来去除.?BitO-POHF:上电复位标志上电4位发生时贸位.只能通过写"O-朱去除为了使用这些复位标忐来识别2位条件,用户应该尽早读取此存放擀的数1%然后将其女位.幻果在共他女位发生之前将此存放戕纭位,则府续乂位源可以通过检代乂位标志家了解,ATnega1.6基准电压使能信号和启动时间ATwgn1.6具仃片内能以牧法源,用于掉电检将,成衣是作为根报比孜睛或ADC的输入,ADC的2.56V4准电IE由此片内僮S(M准源产生.电压某准的启动时间可能出响其工作方式.旧功时阿列于Tnb】。16,为了降低功耗,可以控制选准源仅在如下情况觐开:1. BOD使僮(馅修位BoDEN被编程)2. 他照坛准激连接到他拟比较SS(MSR存放戕的ACBG殿位)3. ADC使像因此,当BOO被禁止时,置位MHG或使能AOC后空店动用准源,为了降低拉电模式的功耗,用户可以禁止上述一二种条件,并在进入棹电极代之游关闭基准源.ATnega1.6看门狗定时器石门狗定时静由独立的IMhZ片内振荡密柴动。这是VCC-5V时的典型值谛卷见特性Ik据以了髀其他VCC电下下的电北旗,通过设况行门狗定时5«的预分嫉然可以调节有门拊经位的时间间隔,如P4ITab1.e17所示.而门狗乂位指令NDR用来双位肝门狗定时器.It外,禁止用11物定时M或发生复位时定时多也械震位复位时间有8相爨如梁没有及时复位定时器.H.时间赳过复位周期,ATnea1.6就复位,井执行旦位向京指向的程序,其体的百门狗发位时序在113»有说明.为了防止无意之间桀止圻门狗定时潜.在看门狗禁用后必须嵬个特定的境改序列.详见看门狗定时SS柱M在故器.Figure21.看门狗定时器石门拘定时发控制存放港KDICRBit7654321dTab1.e17.看门狗定时加预分频器选项WDP2WDP1WDPOn狗榻in周期VCC=3.0V时典型的溢出周期VCC=5.0V时典奥的溢出周期00016K(16,384)17.1ms16.3ms00132K(32,768)34.3ms32.5ms01064K(65,53)685ms65ms011128K(131.072)0.14s0.13S100256K(262,144)0.27s0.26s101512K(524.288)0.55S0.52S1101.024K(1.048,576)1.1S1.0S1112.048K(2.097,152)22s21S下面的例子分别用汇编和C语言实现了大例VIy1.的操作。在此假定中断处于用户控制之下(比方禁止全局中断),因而在执行下面程序时中断不会发生。汇编代码例程*D,off::*DT复位WR:置位UDTCe和1.Einr1.6.VIyTeRoririft.(1<<WOTXM:)(IyI*:)outVPTCR1r1.6:关闭11Idiri.(0<<WDE)outWiritR.r1.«retC代码例程voidND1.off(VOid)(TOT复位/TOO;/»置位DTOE和»DE*/WDTCRI=(1.<<VDT0e)(IyDE);/关闭TOT/TOTCR=0x00:ATmega1.6中断向量本旨描述ATmg«16的中断处理向号程序地址中断源中断定义1SOOO1RESET外部引郸电平引发的复位.上电复位.棹电检夏位,看门狗亶位,以及JTAGAVR复位2S002INTO外部中断清求03$004INT1外部中断清求14$006TIMER2COMP定时器/计数器2比较匹配5$008TIMER2OVF定时需/计数器2温出6SOOATIMER1CAPT定时益/计数HiI密件捕捉7SOOCTIMERICOMPA定时舒/计数器I比较匹配A8SOOETIMER1COMPB定时器/计数器1比较匹配B9SOIOTIMER1OVF定时制/计数器1溢出10S012TIMEROOVF定时制/计数器0送出11S014SPI.STCSPI采行传输结束12S016USART.RXCUSART,RX结束13$018USART1UDREUSART数报寄存器空14S01AUSART1TXCUSART,TX结束15S01CADCADC转换结束16S01EEE_RDYEEPROM就绪17$020ANA_COMP模操比较iS18$022TWI两姣串行接口19$024INT2外部中断谓求220S026T1.MEROCOMP定时制/计数器0比较匹配21S028SPM_RDY保存程序存储器内容就绪Notes:1.熔纹位BooTRST桩编程时.MCU复位后程序跳转到BoOt1.Oader。调谷见P234“支持引导装入程序-在写的同时可以读(RWW,Read-Whi1.e-Write)的臼我墉程能力,2当寄存iSGICR的IVSEIiIf位时,中断向转移到BOot区的起始地址。此时各个中断向的实际地址力泰中地址与BOOt区起始地址之和。Tab1.e19给出了不同的BOOrRSIVIVSE1.谀置下的复位和中断向量的位J1.如果程序永远不便能中断,中断向收就没仃意义.M户可以在此宜按写程序,同择,如!R红位向量位于应用区,而其也中断向量位于Boot区,则亚位向G之后可以H接写程序.反过未亦是如此.BOOTRSTIVSE1.星位地址中断向,起始地址10S0000S000211S0000Boot区复位地址+S000200BootResetAddressS000201BootResetAddressBOOt区复位地址+$0002Note:1.BoOt区复位地址列于P244Tab1.e1000对于熔丝位BOoTRST.T表示未境程,PW示己拷程。ATaXW1.6典型的延位和中断设理如下:地址符号代码说明$000jpRESET:复位中断向量$002J叩EXTIWO;IRQO中断向量$0(EXIXH;IKO1.中断向量$006japTIM2.COMP:Tiaert比较中断向量S008j(pTIM2OVF:Timr2溢出中断向量$00AJI1.PT1.M1.CAPT;iuor1.捕捉中断向总:$00CjmTIMICOIPA;Tinur1.比较A中断向量JOOEjpTBI1.CONPB;Tiner1.比较B中断向量$010j叩TIM1.OVF:Tiosr1.溢出中断向量$012JwTIMO.OVF:TinaiO溢出中断向量$011j1.pSPISTC;传输结束中断向量$016jwVSR1.nRXC:ItSARTRX结束中断向量$018jnpI1.SARTUME:IDR空中断向量S01,wISARTEC:USARTFX结束中断向量$01CjIiPADC:AIK:转换结束中断向量SO1.EjwEE-RDY;EEPROM就绪中断向量$020j叩ANACtMP:模拟比较器中断向量$022JWTUSI:两线串行接口中断向&$021jj>EXT闾2;IiM中断句量$026jnpTWOCOMP;定时器0比较中断向量S028jpSPMRDY:SPM就绪中断向量$024IihSKI:1.<iir1.6,hiuh<RAMKD):主程序S02BoutSpI1.E5:设置堆栈指针为RAN的顶部$02CIdir1.6.Iot(IUNEND)$02»outSPt.r16$02Esci;使能中断$02F<instr>XXX当熔丝位MontSr未编程,B<×>t区为2K字节,且存放器G1.CR的IVSEI,置位时,典型的复位和中断设置如下:地址符号代码说明$000RESET;Mir1.6,hih(RAMESD);主程序$001outSPII.r1.6:设置堆栈指针为RAM的顶部$002Idir1.6.1.w(R1VIENW$003outSP1.rI6»004sei;使能中断$005<instr>xxx.orgSIC025)002j11pEXrIVTO:IRQO中断向量JJCO1.j11pEXTIWT1.:IRQ1.中断向量J1C28,i11pSPMRDY:SPM就绪中断向fit当熔丝位1三RST已编程,且区为2K字节时,典型的豆位和中断设置如下:地址符号代码说明.org$002$002jpEXT1X10;IRQO中断向f$001jwEXT_1N11:IRQ1.中断向量$028j.pSPMRDY.SPM就绪中断向量*.orgS1.COOJ1.COORESET:Idir1.6,high(RAMEXA;主程.序J1.CO1.cutSM1.rie:设置堆栈指针为附I的顶部$1CO2Idir1.,Joir(KAMKM)$1003«11SP1.r1.6S1.COtsei:使能中断J1.COS<instr>xxx当熔丝位BnnTRsr已编程,Boot区为2K字节,且存放器GICR的IrSE1.置位时,典型的复位和中断设置加理地址符号代码说明.rgS1.COOS1000japRESET;Reset中断向量$1002j11pEXTIWro;IRQO中断向量S1.COtJnpEXTWT1.:IRQ1.中断向员S)C28j11pSPMRDY:SPN就绪中断向量$1C2ARESET:Idir1.high(RAEND):主程序$1C2BoutSPH.r16;设置堆栈指针为RAM的顶部S1C2CIdir1.6.Iov(RAMEM)1C2DoutSP1.,r!6$1C2Esei;使能中断$1C2F<inxtr>xxx在应用区和Boot区之间移动中断向量通用中断控制存放器决定中断向量表的放置地址通用中断控制存放淞一GICK?Bit1.-IVSE1.:中断向量选择当3为”时,中断向量位于FMSh存储器的起始地址:当WSE1.为】“时,中断向量转移到BoOt区的起始地址.实际的BoM区起始地址由熔丝位H(H心Z确定,具体请参考P支持引导装入程序在写的同时可以读(Rf,RendVhi1.eVri1.e)的自我编程能力"。为了防止无,位识地改变中断向量表,修改IYSE1.时需要遵照如卜过程:1 .置位中断向量修改使能位IVtE2 .在鹏接的4个时钟周期里将需要的数据写入人E1.,同时对IVCE写F"执行上述序列时中断自动被禁止。其实,在置位IYCE时中断就被禁止了,并一直保持到写IVSE1.操作之后的下一条语句。如果没有IVSE1.写操作,则中断在置位IVCI.之后的4个时钟周期保持禁止。需要注意的是,虽然中断被自动禁止,但状态存放器的位I的值并不受此操作的影响。Note:若中断向兄位于BoOt区,且BnOt锁定位B1.Bo2被编程,则执行应用区的程序时中断被禁止:若中断向量位于应用区,且BOO1.锁定位IO】2被编程,则执行BWt区的程序时中断被禁止。有关MOt锁定位的细节谙参见P234“支持引导装入程序-在写的同时可以读(RW.Read-VhnIri1.e)的自我编程能力"。?Bi1.O-IVCE;中断向量修改使能改变IVSE1.时IVCE必须置位。在IVCE或IVSE1.写操作之后4个时钟周期,IVCE被硬件清零。如前面所述,置位Bo将禁止中断。代码如下:汇编代码例程:Moveinterrupts:;使能中断向量的修改Idi!瓜(1.<<nwoutGI(Kr1.:将中断向量转移到boot区Idir1.6.(1«IVSE1.)outGICH.r!6retC代码例程voidMoveinterrupts(void)(使能中断向量的修改”G1.CR=(1<<IVCE):/*将中断向量转移到boot区*/G1.CK=(i<<IVSEI.);AT三ega1.6通用中断控制存放器G1.CRB<M1.I6S43210IG1.CRINroWU2|IVSE1.|IVCEj拿EFvwRM;FWdRRRRWRW初W(I00000000,?Bit1-IvSE1.:中断向选择SIVSE1.为”“时,中断向IK位于F1.aSh存估落的起始地址当IYSE1.V1.-时.中断向Ift代移到BOo1.区的起始地址.实际的Bgt区起始地R由络统位BoOTSZ确定.R体请窗部P2M”支持引导装入程序-在写的同时可以i<RVIf,Read-VhiIeTrite)的自膜程能力”.为了防止无意识地改变中断向求我修以IYSE1.时需要建照如下过程:1.1位中断向it修改使能位IVCE2.在晚报的4个时钟熄朝照将需要的数据写入1丫死3同时对IYCE写“0"执行上述庠列时中断自动被禁止.其实.在贸位IYCE时中断就被禁止了.并次保持到当WSE1.嫌作之后的下条语句.如果没有IVSE1.4抵作.则中修在位WCE之后的4个时钟周期保持禁止.需要注意的是.溟烧中断被力动禁1匕但状态存放Sa的位I的伊井不受此操作的彰响,Note:若中断向情位于BOOt区,E1.BxIH1.定位Iiuw2被i程,则执行应用区的程序时中断被禁I匕若中断向Ift位于应用区,BoOttft定位B1.BI2被编的.如执行BOOtK的枳序时中断被禁止.有关BOo1.债定位的如节请参见P234”支持引导装入程序-在写的同时可以读(m,Rcad-Ihi1.e-Write)的自我编程能力”.?BiIO-IVCE;中断向M修改使侵改变IVSE1.MIVCEfitH(.在IVCE>>£IVSE1."操作之B4个时钟收期.IVCE被便件清零.如前面所述.HfIVCE将瘠止中断.代码如下:汇编代闪例程:Moveinterrupts::使能中断向量的修改Idir1.6,(K<IVCE>outGICR.r!6;将中断向M传移到b<x>1.KIdir1.>(1<<1VSE1.)OU1.GICR.r1.retC代码例程voidVhve_interrvpts(void)(/使能中断向fit的修改“/GICR=(1.<<IVCE);/«将中断向值转移到boot区»/G1.CR=(i<<IVSE1.);IWDEIWDP2IWDP1WDPOjWDTCR谩/耳RRRRWRWRWRRV»«Bf1.00000000?Bits7.S-Res:保存位ATneaI6保存位.准操作返网值为零.?Bit4-WTOE:看门狗修改使能济零VDE时必须题位*DTfiE.否则不能禁止G门脚.旦双位.侦件将在东接的4个时钟周期之后将共清零请参与有关VDE的说明来禁止行门狗.?Bit3-«i)e:tt8nnw即E为"1时,Itn狗快能,否则桁门狗将被禁止.只右在M>T0E为"1"时VDE才能洸与,以下为关同石门内的步骤I1.在同个指令内对IiDTOE和M)E*1",即使NDE己经为1”2.在紧接的4个时钟月期之内对NDE写“0”?BitX2.0-Z)»2m,1.«Wt>:石门狗定时器预分级器2.1和O的P2.WP1.HHTH1O决定看门狗定时揖的预分领推,如Tab1.e)7所示.