《AVR1000XMEGA的C语言代码编写入门.docx》由会员分享,可在线阅读,更多相关《AVR1000XMEGA的C语言代码编写入门.docx(21页珍藏版)》请在优知文库上搜索。
1、8-bit8位Microcontro1.1ers微处理器App1.icationNote应用注释AVR1000:GettingStartedWritingC-codeforXMEGAAVR1000:XMEGA的C语言代码编写入门Features特点:NaaingconventionsRegisterDeae8存放名-BitDMM位名,C-COdenaaesC-ft码名Bitandgroupaariu位与融舞科GroupCoafi1.UrBt100auks,Method*foraccMincregister*访问存放,的方法,Methodsforwritingreusab1.eKdu1.efun
2、ctions可层次使用横映功俺的写入方法1Introduction引言ShortdevcIojmcnttinesandhighqua1.ityrcquircmcn1.sone1.ectronicproductshasmadehigh-1.eve1.rogramingIa11Raesarequirement.Thenainreasonisthat1.1.ih1.eve1.1.anguagesnakeiteasiertomaintainandreusecodeduetobetterportabi1.ityandreadabi1.ity.由于电子产品的开发时间短,质/要求高,因此需要高层次的编程语言
3、。最主要的原因是,高级语言具有更好的可移植性和可读性,使其更易于维护和理更使用代码.Thechoiceofprogra11ming1.anguagea1.onedoesnotensurehighreadabiIityandreusabi1.ity;goodcodingsty1.edoes.ThereforetheXMEGwperiphera1.s,headerfi1.esanddriversaredesignedwiththisinmind.编程语言的选择本身并非是能神保具有较高的可读性和可用会使用性的唯一条件,还必须有良好的涮码风格。因此XMEGAn的外围设备头文件和驱动程序的设计都是基干这
4、方面考虑的.Themostwide1.yusedhih1.eve1.1.anguageforAVR*microcontro1.1.ersisCandthisapp1.icationnotethereforefocusesonCprogrurnning.TosupportmostoftheAVRCCOnPi1.OrSthatareavai1.ab1.ethecodeexamp1.esareasfaraspossib1.ewritteninANSIC.Afewexa11p1.esarespecificto1KIinbeddedWorkbench,buttheideasandmethodscanbe
5、usedforotherCOmPi1.erSwithminorchanges.IARspecificexanp1.esarec1.ear1.yarkt*d.VRK微控制使用的最广泛的高级谙音就是C语音,因此本应用注释的型点是C谙吉娟程.为了支持大多数可用的AYRC语古摘译器,我们尽可能把代码例如编写在ANSIC语吉的标准中.有些例子是IREmbeddedWorkbench专用的,但其思路和方法可用于与其他变化不大的编译器,IAR专用的例如都有清晰的标示。2 XMEGAModu1.esXMEGA模块AnAVRXMHGAisconposedofsevera1.buiIdingb1.ocks:AnA
6、VRCPUcore,SRAM.F1.ash,EEPROMRndanuherofperiphera1.rr)du1.es.Thesebui1.dingb1.ocksareca1.1.ed“nodu1.etypes*.AnXMEGAcanhaveoneorrureinstancesofagivennodu1.etype.A1.1.instcincesofamodu1.etypehavethesamefeaturesandfunctions.一个VRXMIG由数个结构块组成:一个AYRCHJ芯片,一个SRAM,一个闪存,一个EKPROM以及若干外设模块:这些结构块被称为“模块类里”,XMEGA可以有
7、一个或多个给定模块类型的实例。一个模块类型的所有实例都具有相同的特性和功能,Sonenodu1.etypescanbeasubsetofOthermodu1.etypes.Theseinheritasubsetofthefeatures(andregisters)ofthesupertype,a1.1.inheritedfeaturesarefu1.1.ycompatib1.e.Thisapp1.iestoe.g.timersand10ports.Thesubsetofanodu1.e?typecanfora1.inermeanthatithasfewerconpareandcapturech
8、anne1.sthanafu1.1.titternodu1.e.SiiiiIar1.y,anIOportnayhave1.essthaneightpins.有些模块类型可以是其他模块类型的子集.这些(模块类型)继承了特大模块类型的某个子集的特征(和存放器).其继承的所有特征都完全婉容.这适用于比方计时器和IO端门.用于计时器的模块类型的子集可能意味若它所能得到的比较和捕获通道比完整的计时器模块的要少。同样,一个IO端口的管脚可能缺乏八个,Amodu1.etypecanbea*USART*,whi1.eIhCmodu1.einstanceise.g.,USARTCO*,wheretheCO*su
9、ffixindicatestheinstanceisuUSARTnunber0oinstances,registersandbits.图21.模块类型.实例.存放器和位Eachnodu1.ehasafixedbaseaddressinthe10memorymapanda1.1.registerscontainedinthemodu1.ehavefixedoffsetaddressesre1.ativetothemodu1.ebaseaddress.ThisWdyeachregisterwi1.1.noton1.yhaveanabso1.uteaddressintheIOmcnoryspace,
10、buta1.soare1.ativeaddressdefinedbyitsoffset.Theregisteroffsetaddressesareequa1.fora1.1.instancesofa11xdu1.etype,simp1.ifyingthetaskofwritingdriversthatcanbeusedfora1.1IIadU1.eSofaspecifictype.在IO内存图里,每个模块都有一个固定的基础地址,并且该模块中的所有存放器都有固定的偏移地址(这是相对于模块的基地址而言).如此这样,每个存放湍不仅会在IO内存空间有一个绝对地址,而且还有一个根据其偏移收定义的相对地址
11、.一个模块类型的所有实例中的存放器偏移地址都是平等的,这样就简化了编写能够适用于某个特定类里的所有模块的胭动程序的任务。2.1 RegisterNaaingConvention2.1. 存放器命名约定Registerarerough1.yspeakingdividedintocontro1.,statusanddataregistersandthenaningofregistersref1.ectIhisAgenera!-purposecontro1.registerofthenodu1.eisnamedCTR1.Ifmu1.tip1.egenera!-purposecontro1.regis
12、tersexistsinamodu1.etheyhaveasuffixcharacter.Inthiscasethecontro1.registerswou1.dbenamedCR1.CTK1.B,CTR1.Candsoon.Thisa1.soHpP1.iQStoSTATUSregisters.大致说来,存放器有控制存放器、状态行放涔和数据存放器之分,这从存放器的命名就Ur看出。模块的一个通用的控制存放器被命名为CTR1.如栗在一个模块中存在多个通用控制存放洪他们都有一个后缀字符.在这种情况下,控制存放器将被命名为CnnA、CTR1.B,CTR1.C等,这方法也适用于状态存放器.Forregi
13、stersthathaveaSPeeifiCfunctionthenameref1.ectsthisfunctiona1.ity.Forexamp1.e,acontro1.registerthatcontro1.stheinterrupt1.eve1.ofamodu1.eisnaedINTeTR1.-对于具有特定功能的的存放器,它们的命名会反映其功能性.例如,一个拄制存放洪拄制一个模块的中断级别.它就被命名为IOtCTR1.SincetheAVRdatabuswidthis8bit.1.argerregistersareInp1.eiientedusingsevera1.8-bitregist
14、ers.Fora16-bitregister,thehighHnd1.owbytesareaccessedbyappending*H*and-1/respective1.ytotheregisternano.Forexar11p1.ethe16bitTimerZCountercountreisterisnamedCNT.ThetwobytesarenanedCNT1.andCNTI1.由于AVR的数据总践宽度为8位,较大的存放器得使用几个8位存放器才能生效,时于一个16位存放器,要访问其高8位元姐和低8位元H1.得在这个存放器的命名上分别附加-和“I。例如,16位计时器/计数落的计数存放器被命名为CM.其两个8位元组就被命名为CNT1.和CNTH.I-oraregister1.argerthan16bit,thebytesarenumberedfromthe1.eastsignifica