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)的自我编程能力"