AVR1000XMEGA的C语言代码编写入门_第1页
AVR1000XMEGA的C语言代码编写入门_第2页
AVR1000XMEGA的C语言代码编写入门_第3页
AVR1000XMEGA的C语言代码编写入门_第4页
AVR1000XMEGA的C语言代码编写入门_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 8-bit 8位Microcontrollers 微处理器Application Note 应用注释班 哎AVR10胺00: G澳ettin埃g Sta肮rted 暗Writi碍ng C-搬code 班for X敖MEGA颁AVR10碍00 澳:蔼 XMEG唉A艾的耙C矮语言唉代码编写入拌门埃 隘Featu八res 特点:懊 扳Namin版g con安venti蔼ons 柏 跋命名约定疤- 摆Regis霸ter n扮ames 爸 昂寄存器名拔- 靶Bit n班ames 位名拌 版C-cod拜e nam绊es 扳 C-艾代码名败- 翱Bit a唉nd gr扒oup m斑asks 绊 澳位与组掩

2、码挨- 挨Group斑 conf把igura扳tion 昂masks背 安 澳组配置掩码扒 肮Metho靶ds fo凹r acc暗essin伴g reg敖ister百s 阿z。扮 笆访问寄存器胺的方法暗 颁Metho挨ds fo败r wri袄ting 澳reusa案ble m扮odule案 func罢tions哀 鞍Q。百 摆可多次使用袄模块功能的罢写入半方法巴1 Int拜roduc拌tion 引言啊Short deve翱lopme巴nt ti碍mes a版nd hi板gh qu盎ality翱 requ矮ireme背nts o叭n ele啊ctron佰ic pr霸oduct拜s has吧 ma

3、de凹 high芭-leve败l pro邦gramm八ing l跋angua把ges a版 requ办ireme靶nt. T背he ma癌in re版ason 背is th捌at Hi挨gh le把vel l败angua拌ges m昂ake i爱t eas按ier t斑o mai哀ntain瓣 and 芭reuse伴 code拜 due 拌to be懊tter 拔porta按bilit八y and碍 read败abili败ty. 矮I。扒由于巴电子产品的把开发时间啊短暗,巴质量要求高爸,拌因此需要盎高层次的编盎程语言。最绊主要的原因半是,高级语盎言碍具有阿更好的可移叭植性和可读邦性暗,使其懊更

4、案易于拜维护和胺重复使用哀代码。办5。败The c半hoice柏 of p百rogra暗mming矮 lang罢uage 搬alone瓣 does班 not 八ensur凹e high rea败dabil扳ity a拌nd re暗usabi疤lity;笆 good熬 codi澳ng st搬yle d般oes. 扒There吧fore 拜the X翱MEGA昂 peri氨phera跋ls, h隘eader罢 file埃s and笆 driv跋ers a安re de昂signe斑d wit摆h thi矮s in 斑mind.叭 颁b。拌编程语言的斑选择搬本身吧并暗非是能确爸保袄具有爸较高的可读袄性

5、和蔼可柏重八复使颁用性傲的唯一条件懊,笆还必须爱有良好的编耙码风格。因傲此挨 挨XMEGA罢 唉 皑的外围设备暗,头文件和版驱动程序的按设计芭都是基于这昂方面碍考虑白的瓣。傲u。板 般The m袄ost w斑idely爸 used盎 high扮-leve碍l lan懊guage板 for 吧AVR 拌micro班contr癌oller办s is 百C, an胺d thi把s app肮licat佰ion n案ote t拜heref扮ore f熬ocuse隘s on 绊C programm暗ing. 啊To su熬pport案 most坝 of t胺he AV安R C c碍ompil艾ers t熬

6、hat a吧re av耙ailab奥le败,奥 the 坝code 班examp暗les a罢re as澳 far 斑as po邦ssibl扳e written 跋in AN斑SI C.斑 A fe绊w exa啊mples背 are 拜speci胺fic t案o IAR败 Embe耙dded 拔Workb哎ench霸稗, but巴 the 俺ideas扮 and 伴metho八ds ca岸n be 隘used 哀for o笆ther 暗compi稗lers 版with 矮minor捌 chan按ges. 败IAR s版pecif跋ic ex懊ample办s are袄 clea般rly m澳ar

7、ked埃.哎m。跋AVR 白微控制器使邦用的最广泛斑的高拔级邦语言版就拌是哀 安C蔼 凹语言绊,因此本应白用般注释的埃重点蔼是昂 搬C坝 佰语言编程。疤为了支持大爸多数氨可用的版 挨AVR C巴 办语言耙编译器奥,案我们昂尽可能安把伴代码示例罢编写盎在碍 俺ANSI 巴C伴 挨语言背的傲规范中。胺有些爸例子是熬 板IAR E办mbedd澳ed Wo蔼rkben翱ch奥挨 氨专用罢的俺,但啊其蔼思路和方法啊可蔼用于扮与其他伴变化扮不大扒的编译器叭。班 IAR摆 搬专用的示耙例胺都有碍清晰的标示吧。败t。矮2 XME佰GA Modules拜 袄 吧XMEGA吧 绊模块阿An AV斑R XME胺GA

8、 is扮 comp霸osed 氨of se傲veral凹 buil扳ding 懊block斑s: An耙 AVR 挨CPU c疤ore, 蔼SRAM,搬 Flas靶h, EE鞍PROM 颁and a爸 numb凹er of扮 peri澳phera霸l mod安ules.靶 Thes爸e bui颁lding艾 bloc胺ks ar盎e cal笆led “碍modul鞍e typ唉es”. 霸An XM背EGA c邦an ha背ve on按e or 皑more 捌insta跋nces 哀of a 摆given凹 modu哀le ty鞍pe. A扮ll in办stanc背es of叭 a mo蔼du

9、le 癌type 俺have 皑the s奥ame f暗eatur板es an耙d fun芭ction吧s. 搬R。蔼一个班 百AVR X吧MEGA巴 阿由哀数个啊结构块拌组成:一个埃AVR C按PU佰 案芯片板,罢一个熬 SRAM盎,绊一个芭闪存,懊 搬一个芭 拌EEPRO败M疤 艾以及若干八外设模块。笆这些爱结构块熬被称为斑“袄模块类型奥”矮。柏XMEGA坝可以有一个哀或多个蔼给定模块类扒型的笆实例。埃一个搬模块类型的柏所有实例都爱具有相同的靶特性和功能办。挨U。背Some 拜modul敖e typ奥es ca捌n be 跋a sub芭set o绊f oth奥er mo奥dule 碍typ

10、es傲. The伴se in碍herit搬 a su熬bset 肮of th背e fea扳tures办 (and挨 regi癌sters爸) of 肮the s翱uper 胺type,扳 all 背inher佰ited 挨featu绊res a扒re fu啊lly c罢ompat稗ible.袄 This盎 appl傲ies t熬o e.g傲. tim暗ers a扳nd IO癌 port霸s. Th澳e sub靶set o凹f a m癌odule挨 type埃 can 靶for a吧 time澳r mea爱n tha捌t it 败has f碍ewer 白compa般re an颁d cap背tur

11、e 摆chann斑els t笆han a唉 full靶 timer mod按ule. 岸Simil板arly,傲 an I拌O por叭t may暗 have癌 less笆 than板 eigh扳t pins. 氨q。哀有些模块类型艾可以是其他隘模块奥类型的澳子集啊。这些隘(模块类型颁)版继承败了特大模块哎类型的拜某懊个子集的板特征斑(和寄存器俺),矮其伴继承的所有办特征都绊完全兼容。扳这适用于按比如计八时器和稗IO耙端口。疤用于计时器盎的把模块类型的拜子集可能意把味着它跋所能得到的绊比较和癌捕获通道翱比完整的跋计时器模块昂的要斑少。同样,一背个艾 安IO哎 案端口哎的管脚肮可能疤不足疤八绊个

12、碍。扳e。坝A mod盎ule t叭ype c邦an be矮 a “U岸SART”把, whi坝le th疤e mod熬ule i扳nstan瓣ce is把 e.g.扳 “USA安RTC0”笆, whe般re th奥e “C0俺” suf俺fix i爱ndica拜tes t佰he in巴stanc霸e is 佰“USAR按T num袄ber 0跋 on p氨ort C皑”. Fo昂r sim懊plici伴ty, a败 modu般le in伴stanc敖e wil绊l be 佰refer八red t巴o as 版a mod哀ule t鞍hroug岸hout 按this 挨docum八ent, 疤

13、unles瓣s the啊re is耙 a ne巴ed to哎 diff熬erent爱iate.袄 昂1。癌一个澳模块类型可靶以是稗“案USART按”懊的,阿如果这个隘模块实例案比皑如阿是哀“巴USART癌C0吧”半,癌其中的“埃C0蔼”袄后缀表示哎这个白实例是靶“背端口班 绊C罢 佰上吧的吧 肮USART瓣 耙编号为翱 笆0八”叭。为了肮简单起见翱,蔼一个模块实凹例坝将被称为坝这吧整个文件班中矮的绊一个摆模块,除非瓣是有必要肮另作蔼区分。艾B。哀Each 把modul盎e has隘 a nu氨mber 败of re巴giste哎rs th盎at co矮ntain叭 cont隘rol o傲r s

14、ta白tus b办its. 俺All m啊odule氨s of 叭a giv摆en ty俺pe co百ntain昂 the 安same 氨set (拌or su八bset)扳 of r傲egist埃ers, 巴and a氨ll th敖ese regist办ers c跋ontai绊n the伴 same扳 set 凹(or subset哎) of 隘contr班ol an耙d sta颁tus b百its. 摆E。百每个模块都爱有若干寄存靶器岸,这些寄存坝器都摆包含控制位伴或状态位。把一个给定类颁型的所有模胺块都包含相般同的寄存器捌集合(或子扒集),袄并且坝所有这些寄扳存器包含相鞍同的控制位胺和状

15、态位埃的拔集合(或子安集)皑 拌。懊y。Figur傲e 2-1扳.搬 坝Modul百e typ拌es, i埃nstan柏ces, 斑regis岸ters 敖and b柏its. 奥x。靶图扒2-1. 罢模块类型,氨实例,寄存懊器和位奥Each 爱modul半e has搬 a fi拌xed b啊ase a爸ddres笆s in 百the I盎O mem背ory m瓣ap an奥d all奥 regi敖sters挨 cont啊ained挨 in t俺he mo板dule 埃have 笆fixed埃 offs疤et ad挨dress埃es re斑lativ癌e to 颁the m埃odule啊 ba

16、se癌 addr班ess. This 捌way e扳ach r氨egist埃er wi扮ll no把t onl绊y hav扒e an 哀absol霸ute a八ddres巴s in 鞍the I阿O mem癌ory s邦pace,般 but 佰also 岸a rel拜ative皑 addr扮ess define矮d by 般its o稗ffset把. The耙 register 斑offse邦t add吧resse扒s are把 equa澳l for芭 all 阿insta般nces 斑of a 吧modul把e typ蔼e, si傲mplif阿ying 爸the t版ask o班f wri翱

17、ting 摆drive般rs th搬at ca背n be 耙used 岸for a把ll mo伴dules胺 of a俺 spec板ific 罢type.癌 巴Z。八在熬 百IO稗 班内存唉图里,坝每个模块都巴有一个固定唉的艾基础佰地址背,并且傲该按模块中的所爱有寄存器凹都瓣有氨固定的偏移盎地址唉(这是拌相对于模块瓣的基地址癌而言)版。把如此这样,俺每个寄存器矮不仅会在斑 澳IO昂 盎内存空间白有一个矮绝对地址,版而且还有跋一个根据其挨偏移量定义捌的碍相对地址。阿一个模块类般型的所有实熬例癌中的澳寄存器偏移巴地址把都是平等的,笆这样就爱简化按了编写能够啊适用于某个矮特定类型的班所有模块的摆驱动

18、爱程序绊的任务。癌f。拔2.1 R扳egist捌er Na埃ming 埃Conve皑ntion案2.1. 挨寄存器芭命名约定矮Regis隘ter a氨re ro俺ughly巴 spea肮king 芭divid叭ed in般to co八ntrol百, sta扒tus a邦nd da疤ta re敖giste矮rs an碍d the盎 nami矮ng of唉 regi氨sters胺 refl傲ect t矮his. 摆A gen跋eral-疤purpo颁se co邦ntrol肮 regi白ster 拔of th案e mod哀ule i拌s nam耙ed CT鞍RL. I吧f mul靶tiple八 ge

19、ne背ral-p拔urpos昂e con敖trol 疤regis柏ters 背exist把s in 蔼a mod氨ule t摆hey h斑ave a癌 suff败ix ch案aract埃er. I搬n thi袄s cas佰e the碍 cont颁rol r澳egist唉ers w碍ould 扮be na按med C隘TRLA,绊 CTRL艾B, 捌CTRLC盎 and 版so on蔼. Thi按s als搬o app叭lies 肮to ST氨ATUS 笆regis芭ters.败 翱k。拔大致说来扒,寄存器有哀控制寄存器伴、拜状态寄存器俺和数据寄存靶器坝之分,这从艾寄存器的命俺名瓣就可看出叭。阿

20、模块按的翱一个通用的扒控制寄存器捌被命名为碍CTRL版。如果在一搬个模块中存癌在多个通用敖控制寄存器岸,他们哎都凹有一个后缀暗字符。在这傲种情况下,伴控制寄存器熬将被命名为挨CTRLA办 奥、邦 CTRL傲B 哎、岸 CTRL俺C傲等。这皑方法疤也适用于状澳态寄存器。安p。拔For r跋egist肮ers t疤hat h版ave a隘 spec碍ific 靶funct埃ion t搬he na胺me re翱flect拌s thi摆s fun吧ction扒ality翱. For扳 exam扮ple, 败a con半trol 办regis爸ter t坝hat c癌ontro斑ls th伴e int艾

21、errup扮t lev肮el of伴 a mo巴dule 矮is na班med I跋NTCTR胺L. 吧i。败对于具有特拌定功能的版的斑寄存器埃,它们的命隘名会爸反映氨其碍功能扳性案。例如,一瓣个控制寄存器,控制扮一个熬模块的中断昂级稗别,它就把被命名为摆 凹INTCT般RL 敖。白U。捌Since爸 the 案AVR d哎ata b鞍us wi百dth i败s 8 b啊it, l八arger疤 regi氨sters are 按imple熬mente捌d usi挨ng se碍veral笆 8-bi鞍t reg碍ister稗s. Fo拔r a 1瓣6-bit般 regi罢ster,盎 the 捌

22、high 靶and l稗ow by昂tes a澳re ac按cesse巴d by 把appen斑ding 百“H” a搬nd “L岸” res敖pecti氨vely 背to the reg稗ister佰 name拌. For胺 exam叭ple, 八the 1傲6-bit佰 Time版r/Cou罢nter 捌count挨 regi袄ster 暗is na熬med C皑NT. T盎he tw巴o byt伴es ar摆e named CN案TL an胺d CNT皑H. 胺X。八由于埃 碍AVR按 皑的巴数据总线宽笆度为埃 埃8肮 绊位,鞍较稗大的寄存器肮得隘使用几个半 奥8哎 澳位寄存器八才能生效

23、绊。对于一个敖16柏位寄存器,瓣要斑访问盎其佰高艾8熬位元组哀和低肮8爸位元组皑,得在这个把寄存器肮的命名上邦分别爸附加背 癌“暗H八”靶 矮和稗 板“稗L斑”伴。例如,挨16拔位敖计时器奥/俺计数器的计拜数寄存器被癌命名为颁 啊CNT扳 俺,鞍其搬两个哎8坝位元组爱就唉被命名为搬 绊CNTL巴和安 安CNTH 叭。斑4。败For a笆 regi翱ster 暗large俺r tha阿n 16 鞍bit, 肮the b艾ytes 胺are n佰umber艾ed fr办om th版e lea版st si澳gnifi般cant 爸byte.拜 For 八examp俺le, t爱he 32耙-bit

24、盎ADC c挨alibr啊ation百 regi拌ster 般is named C班AL. T佰he fo巴ur by挨tes a搬re na啊med C霸AL0, 斑CAL1,唉 CAL2半 and CAL3 芭(from爱 leas拌t to 氨most 胺signi癌fican拔t byt爸e).吧1。隘对于大于肮16般位的寄存器板,佰其哀8矮位元组啊的编号是版从最瓣低颁有效啊的癌8稗位元组案开始懊。例如,盎32颁位的隘 奥ADC皑 办校准寄存器班被命名为稗 白CAL柏,其笆四个板8吧位元组(从最低到傲最高有效皑8办位元组矮)氨就办被袄分别爱命名为捌 俺CAL0 啊,岸 CAL1版 俺,

25、癌 CAL2板 稗和白 八CAL3 俺 懊。柏 挨H。阿Most 蔼C com挨piler疤s off般er au办tomat扒ic ha笆ndlin般g of 埃acces把s to 耙multi百-byte伴 regi拔sters俺. In 耙that 百case 稗the n扒ame C半NT, w般ithou绊t “H”懊 or “佰L” su叭ffix,矮 coul叭d be 暗used 半to pe阿rform澳 a 16罢-bit 邦acces般s to 耙the T挨imer/跋Count隘er 瓣count懊 regi盎ster.爱 This唉 is a碍lso t白he c

26、a佰se fo懊r 32-胺bit r绊egist搬ers. 袄Y。盎大多数埃 扳C唉 扳语言颁编译器袄都隘提供了自动爸处理多鞍8啊位元组佰寄存器的访皑问。在这种情况下,般 CNT挨 岸的命名半没有哎加搬“ H”邦或扒“ L”艾后缀的,可绊以用来执行袄16凹位的癌计摆时器绊/俺计数器的计案数寄存器的班访问。这柏方法版也熬同样使用于佰32罢位寄存器。版e。捌2.2 B耙it Na稗ming 八Conve败ntion半2.2 拌位命名爸约定摆Regis芭ter b伴its c碍an ha鞍ve an袄 indi败vidua坝l fun班ction柏 or b安e par斑t of 坝a bit爱

27、grou绊p tha罢t hav办e a j阿oint 氨funct胺ion: 皑An in柏divid皑ual b般it co坝uld b袄e a b熬it th扒at en伴ables搬 a mo案dule,百 e.g.岸 the 鞍USART背 ENAB半LE bi版t. A 搬bit g捌roup 爱can c碍onsis岸t of 摆two o肮f mor凹e bit隘s tha昂t joi邦ntly 按selec搬t a s稗pecif稗ic co绊nfigu盎ratio氨n of 柏the m袄odule斑 that邦 they爸 belo拔ng to拌. A b拌it gr吧o

28、up offers拔 up t绊o 2办n 矮selec氨tions芭, whe摆re n 班is th碍e num把ber o肮f bit翱s in 扒the b耙it gr把oup. 哎The t办wo bi熬ts th班at co昂ntrol胺 the 胺USART俺 Rece艾ive C癌omple矮te in盎terru八pt le暗vel, 盎RXINT稗LVL1拔:0, 癌is an斑 exam邦ple o斑f a b翱it gr伴oup. 耙These把 two 皑bits 哎offer俺 the 拔follo敖wing 搬selec八tions蔼: 叭q。班寄存器位可芭以有一

29、个单版独的函数伴,啊或爸是皑一个位组的哎一部分,有拔一个共同的靶功能:一个哎单独的位可佰以耙是埃启用坝一个模块绊的位版,如稗 跋USART澳 伴ENABL捌E柏 肮位。一个位败组可以由两懊个板或两个以上芭的稗位扒组成,这些百位按共同百选择拔了它们所隘属拜的模块背的疤特绊殊安配置。一个哀位组提供邦多达霸 瓣2扒n 鞍个背选项败,其中岸的啊 把n扒 扒是位组拔中扳位的背数量。这两安个位控制的板 澳USART绊 扮接收结束中爱断埃级别氨,笆RXINT疤LVL 瓣1:0 靶 稗,是一个位伴组的一个例邦子。这两个扒位提供以下按选项哎:阿j。霸Table坝 2-1.唉 爱RXINT安LVL b爱its a

30、澳nd co疤rresp扮ondin搬g int按errup矮t lev稗el se按lecti版on. 按3。蔼表隘 2-1.邦 绊RXINT碍LVL蔼 阿位和相应的爸中断级别选鞍项RXINTLVL1RXINTLVL0Interrupt level selection 中断级别选项00Interrupt Off 中断关闭01Low level interrupt 低级中断1 10Medium level interrupt 中级中断11High level interrupt 高级中断 盎Bits 胺that 柏are p翱art o挨f a g伴roup 跋will 靶alway坝s ha

31、v爱e a n伴umber佰 suff吧ix. B败its t案hat a柏re no扮t part of 肮a bit肮 grou瓣p wil氨l nev肮er ha挨ve a 傲numbe扒r suf背fix. 败A Tim把er/Co癌unter白 cont澳rol r八egist安er D 罢has t哎wo bi拌t gro胺ups, 霸EVACT盎 and 板EVSEL按. The搬 bits阿 in t捌hese 背group傲s hav熬e a n拌umber胺 suff唉ix, w碍hile 扳the E百VDLY 败bit, which凹 is n跋ot pa爸rt of白

32、 a bi按t 懊group颁 has 懊no nu鞍mber 熬suffi摆x.伴g。袄作为版一挨个岸组的一部分阿的澳位扒,将始终有碍一个数字后跋缀。敖不是艾一个位组的啊一部分瓣的八位瓣,永远不会矮有一个数字翱后缀。版计时器阿/敖计数器控制阿寄存器澳 哀D碍 啊有扒两个位组笆:八 EVAC班T摆 伴和拜 鞍EVSEL袄 霸。在这些埃组疤中的位盎都把有一个数字摆后缀,而奥 跋EVDLY瓣 袄位不是一个碍位组的一部白分,绊因此它捌没有翱数字隘后缀。八a。蔼Table傲 2-2.办 佰Bits 百group唉s and巴 bit 捌names肮 for bits 爸in Ti扒mer/C绊ount

33、e颁r Con翱trol 扳regis奥ter D八 CT叭RLD.背Z。拔表澳 2-叭2板.埃 哎适用于计时氨器蔼/败计数器控制芭寄存器唉 挨D - C霸TRLD 矮中的位巴的耙位组鞍和捌位名称蔼C。Bit Group 位组EVACT-EVSELBit name 位名EVACT2 EVACT1EVACT0EVDLYEVSEL3EVSEL2EVSEL1EVSEL0Bit number 位编号76543210艾3 Wri凹ting 澳C-cod拔e for唉 XMEG败A坝 昂编写案 败XMEGA奥 把的癌 C 挨语言代码办The f啊ollow笆ing s安ectio哀ns fo柏cus o办

34、n how岸 to w懊rite 懊C-cod白e for岸 the 啊XMEGA扮. The跋 exam跋ples 巴show 笆how t稗o mak芭e the扒 code懊 high爱ly re盎adabl坝e and挨 port阿able 吧betwe捌en di颁ffere埃nt XM疤EGA d挨evice罢s. Th翱e exa胺mples安 can 氨also 笆be us奥ed as癌 a gu版ideli瓣ne to阿 writ扮e cod班e tha败t is 白easy 版to ve伴rify 肮and m笆ainta胺in. 拜H。叭以下各节重碍点放在如何搬编写傲

35、绊XMEGA盎 巴的鞍 奥C靶 板语言斑代码。示例罢显示了如何叭使代码具有百很强的可读霸性霸,并能在不同的罢XMEGA霸 翱器件之间移扒植。板这些巴例子也可以爱作为百指导编写罢代码敖的澳准则芭,使其叭易于败验证和维护百。邦n。翱XMEGA盎 modu拔les a伴re lo奥cated拌 in d挨edica艾ted a矮nd co扳ntinu氨ous b挨locks颁 in t半he me般mory 版space肮 and 暗can b肮e see捌n as 埃encap摆sulat白ed un敖its. 暗This 叭refle吧cts o巴n the邦 way 坝that 伴the m版

36、odules are百 acce拜ssed 稗when 败codin昂g C: 搬modul按es ar挨e enc拌apsul拌ated 半using昂 C 澳struc肮ts扮, in 拔which哀 all 埃modul案e reg拌ister办s are拔 cont矮ained皑. Fig肮ure 3俺-1 sh安ows a矮n ill皑ustra埃tion 阿of th败is.笆2。巴XMEGA按的模块位于板内存空间埃的巴专用扳的拜连续的拌块板区域案中,吧我们碍可以凹把这些模块凹看作是被班封装的单敖元唉。这反映了耙编写吧 C 扳语言代码吧时访问哀模块爸的办路径板:模块般是半用版 阿C

37、疤 办语言跋结构版封装爱的暗,其中绊包容了隘所有扳的翱模块寄存器阿。图蔼3-1傲给出了袄这阿个绊图解。版f。疤Note 八that 懊some 哀regis扳ters 胺have 癌no di蔼rect 蔼modul白e ass罢ociat唉ion. 百These般 are 瓣not e爱ncaps般ulate败d in 拜struc吧ts肮, as 伴the 肮struc凹t阿 is u阿sed t巴o ass傲ociat柏e reg拌ister版s wit办h a m捌odule胺. 绊L。拔请注意,某矮些寄存器没霸有直接的模唉块阿相联,胺这些班寄存器昂都不是封装芭在结构疤里的办,叭因为该

38、艾结构是用来班使半寄存器皑与某个芭模块氨相爸关联的挨。疤W。百For l板arger柏 code霸 proj稗ects 埃the m拔odule办 笆struc坝ts吧 prov柏ide a啊dvant翱ages,霸 not 邦only 奥to re扮adabi熬lity,哎 but 疤also 扒becau斑se th罢e com蔼piler矮s can百 reus拔e the拔 modu埃le dr背ivers哀 and 翱there疤by ma哀ke th芭e cod拜e ver敖y com斑pact.伴 This半 is d鞍escri胺bed i肮n mor跋e det稗ails 鞍

39、later案. 袄A。搬模块结构斑为较半大的代码项伴目提供的优疤势不仅扮具有罢可读性,班而且笆还瓣因为编译器霸可以重复使哎用模块驱动跋程序,从而般使代码非常啊紧凑。这在皑后面会作罢更背详细的霸描述。败q。霸This 跋docum瓣ent introd搬uces 耙a nam白ing c碍onven捌tion 板and r啊egist靶er ac绊cess 爱metho柏ds th伴at ar扳e dif翱feren跋t fro肮m wha袄t AVR邦 prog安ramming ve哎teran伴s are百 used板 to, 叭but o柏ne sh案ould 佰be aw癌are t跋h

40、at t挨he “c绊lassi班c” wa扳y to 邦acces昂s reg安ister袄s is 傲still班 supp斑orted半 by t邦he he扒ader 熬files白. Thi啊s als耙o app笆lies 敖on th跋e bit白 leve八l. 百Q。昂本文档介绍坝的命名约定哀和寄存器访哎问的方法,癌不同皑于隘 盎AVR安 懊编程摆老手过去常笆用的方法耙,但扮是有一点暗应该知道扮:访问寄存器靶的败“瓣经典”澳方法跋仍然是斑要得到版头文件哎的斑支持。这吧方法隘也昂同样盎适用于对位班级别的访问按。啊m。版Figur稗e 3-1碍.埃 胺Modul俺es pl摆ac

41、ed 拌in de翱dicat鞍ed bl摆ocks 吧in IO挨 memo班ry sp唉ace. 袄N。昂图颁3-1 皑.拌放置在哀 摆IO翱 拜内存空间昂里的埃专用块区的安模块。办3.1 X柏MEGA 扳Heade绊r Fil白es颁3.1 X把MEGA蔼的头文件氨A ded案icate哀d hea袄der f俺ile i吧s ava把ilabl巴e for坝 each霸 XMEG拜A dev唉ice. 捌If th瓣e tar爸get d伴evice拜 is s靶pecif瓣ied i罢n the岸 proj暗ect s版ettin吧gs (a白ssumi瓣ng th瓣at on疤e

42、use伴s the盎 IDE 八for I伴AR EW办AVR),百 the 版IAR c版ompil傲er wi艾ll au摆tomat凹icall啊y inc巴lude 昂the c哎orrec哎t hea扮der f安ile i傲f the隘 devi鞍ce fi艾le is扒 incl搬uded 摆as sh叭own i唉n Cod爱e Lis扒ting 疤3-1. 办L。懊为每个埃XMEGA坝的设备提供半一个专用的坝头文件阿,扮如果目标设扒备是在项目挨设置中指定拔的懊(假设胺一个柏目标设备将傲 办IDE敖 百用于扮 艾IAR E版WAVR 俺),绊又氨如果该设备叭文件是包含袄在蔼如奥

43、代码凹列表案3-1唉中鞍所示疤的文件,氨那么案 叭IAR坝 胺编译器将自扳动包含绊这个伴正确的头文斑件。班e。暗Code 哀Listi跋ng 3-1.癌 皑IAR 暗heade岸r fil拔e芭 incl氨usion版. 爱m。柏代码半列表癌3-1 唉. 拜 IAR伴的头文件包巴含叭The a板dvant案age i跋s tha昂t if 柏the t哀arget艾 devi懊ce ch办anges啊, the哎re is笆 no n爱eed t版o cha捌nge t扒he so傲urce 捌files扳, onl阿y the耙 proj蔼ect s半ettin把gs. 哀r。皑它的优点是办

44、,如果目标拔设备变凹了凹,没有百必要修改般源文件,拔唯有以暗项目设置邦的为准瓣。班x。白3.2 M班odule澳s Reg疤ister般s八3.2. 耙模块寄存器拌The I埃O map拜 is l绊aid o跋ut so捌 that肮 all 拜regis背ters 柏for a懊 give叭n per碍ipher巴al mo矮dule 扮are p唉laced蔼 in o癌ne co氨ntinu熬ous m埃emory邦 bloc颁k. Re啊giste巴rs be皑longi疤ng to拌 diff百erent疤 modu案les a疤re no盎t mix百ed. T扳his m肮ak

45、es 疤it po靶ssibl凹e to 板organ版ize a半ll pe澳riphe唉ral m傲odule唉s in 拔C 矮struc拜ts绊, whe霸re th拌e add霸ress 靶of th把e 板struc唉t叭 defi隘nes t扳he ba爱se ad坝dress瓣, of 艾the m叭odule伴. All安 regi矮sters岸 belo坝nging埃 to a拜 module ar颁e ele绊ments坝 in t扳he mo伴dule 吧struc佰t瓣. 摆m。安IO氨 皑地图坝的设计皑是疤使阿一个给定的扳外设模块阿的吧所有的寄存癌器都放置在皑一个连

46、续的矮内存块半,哀属于不同模哎块的寄存器邦不坝得按混合。这使艾得摆IO颁 版地图可以哎将隘所有外设模艾块组织柏到懊 捌C扒 按语言罢结构中,吧其拌结构的地址扒定义模块的安基础傲地址,笆同捌属于一个模靶块的所有的板寄存器暗都是这个皑模块结构中靶的皑成员。岸L。澳An ex拜ample般 is t伴he Pr耙ogram唉mable哀 Mult巴i-lev百el In鞍terru瓣pt Co颁ntrol霸ler (叭PMIC)皑 modu颁le. T盎he 爸struc唉t败 decl哀arati按on fo鞍r thi案s mod案ule i稗s sho斑wn in哎 Code啊 List翱in

47、g 3靶-2 an拜d an 拔examp版le of袄 its 靶use i扮n Cod坝e Lis坝ting 罢3-3. 绊Note 疤that 哎the e艾xampl傲e in 霸Code 芭Listi败ng 3-巴3 ass傲umes 稗that 巴there矮 is a凹n ins疤tance颁 of t凹he 摆PMIC_八t暗 type佰 name挨d PMI皑C. Th拜is is凹 cove盎red l叭ater 癌in th俺is do霸cumen暗t. 皑h。班一个例子是把可编程的多罢级中断控制叭器(版 PMIC皑 拌)模块。俺申报扳此叭模块的结构绊由八代码靶列表澳 办

48、3-2 百给出白,邦其用途的傲例班子由懊代码芭列表翱 艾3-3百 邦给出芭。请注意,白在代码袄列表般 摆3-3安 伴中吧的例子挨是肮假设有一个邦 跋PMIC_安t芭 搬类型绊的癌实例敖被柏命名绊为吧PMIC傲。这翱在绊本文档后面翱还有提及稗。白b。笆Code 罢Listi邦ng 3-疤2.暗 八Modul绊e 百struc巴t巴 decl挨arati芭on.疤 暗3。把代码敖列表暗 拌3-2.按 哎模块结构阿的申报罢Code 斑Listi扒ng 3-安3.癌 敖Modul斑e 爱struc啊t俺 usag岸e.翱 伴t。矮代码列表瓣 3-3.办 暗模块结构的隘用途坝3.2.1挨 Mult扮i-

49、wor百d Reg碍ister笆s in 傲Modul岸e 哎Struc扒ts俺 艾z。碍3.2.1凹. 鞍模块结构中按的傲多词靶寄存器败Some 跋regis癌ters 拜are u癌sed i般n con捌junct八ion w哀ith o耙ther 捌regis昂ters 伴to re芭prese板nt 16百 or 3版2 bit癌 valu板es. A蔼s exa蔼mple 蔼one c稗ould 昂look 癌at th拜e ADC凹 struc鞍t唉 decl挨arati懊on sh靶own i瓣n Cod袄e Lis疤ting 扳3-4. 隘4。八将一爸些寄存器与其他奥寄存器一

50、起绊用胺来阿代表办16柏位或蔼32昂位哎的叭值。哀我们蔼可以案举一个扳例子,看看昂 半ADC蔼 熬结构爱申报的一个盎寄存器,见盎代码俺列表坝3-4扮:昂a。白Code 翱Listi疤ng 3-版4.安 俺ADC 搬struc熬t鞍 decl氨arati凹on.罢 吧k。翱代码傲列表班3-4搬. 碍ADC翱 斑结构哀申报傲In Co艾de Li氨sting扮 3-4,百 the 哎ADC c绊hanne版l res暗ult r爸egist版ers C哎H0RES八, CH1皑RES, 板CH2RE爱S, CH哎3RES 班and t肮he co俺mpare挨 regi百ster,鞍 CMP,哎

51、are 疤16-bi耙t val笆ues. 巴These昂 are 安decla伴red u把sing 爱the 艾WORDR暗EGIST氨ER 耙macro班 show伴n in 按Code 板Listi阿ng 3-佰5. Th斑e cal隘ibrat胺ion r板egist昂er, C半AL, i坝s a 3癌2-bit靶 valu捌e, de板clare霸d usi爸ng th凹e 扳DWORD爸REGIS把TER 案shown搬 in C扮ode Listin澳g 3-6哎. 凹p。哎在代码肮列表凹3-4稗中,版 ADC瓣通道的结果澳寄存器矮CH0RE跋S 版,暗 CH1R搬ES 拜,

52、矮 CH2R跋ES 矮,昂 CH3R拌ES俺和比较寄存哀器败CMP盎都是肮16案位值。这些叭寄存器都是板用爱在癌代码澳列表疤 巴3-5案 挨中颁所示爸的瓣 芭WORDR把EGIST芭ER绊 俺宏佰申报的癌。校准寄存耙器碍 凹CAL澳,是一个败32蔼位值半的坝,邦它是阿用在代码跋列表蔼3-6佰中俺所示的搬 熬DWORD昂REGIS扮TER白 板宏白来申报的。叭d。版Code 颁Listi靶ng 3-拔5.啊 扒WORDR皑EGIST奥ER Ma摆cro.八 胺Y。八代码凹列表昂 胺3-5巴. 佰WORDR碍EGIST背ER斑 昂宏办Code 佰Listing 3-暗6.罢 昂DWORD邦REGI

53、S白TER M挨acro.按 皑6。拔代码罢列表俺3-6捌. 吧DWORD疤REGIS捌TER岸 宏敖As se懊en, t安he 背WORDR柏EGIST坝ER 胺macro俺 uses芭 “颁H拔” and暗 “安L吧” suf癌fix f佰or th般e hig暗h and胺 low 败bytes埃 resp瓣ectiv暗ely. 柏The 哎DWORD敖REGIS隘TER 爱uses 矮numbe爸r suf胺fix t瓣o ind邦icate稗 the 爸byte 哎order皑. Bot安h the把 16-b笆it an吧d 32-昂bit r瓣egist蔼ers c靶an be

54、昂 acce敖ssed 碍in 16矮-bit/败32-bi白t mod案e, by隘 usin八g the邦 regi阿ster 扒name 肮witho鞍ut su案ffix 艾as sh班own i巴n Cod翱e Lis绊ting 爱3-7. 拔w。把如我们所看凹到的袄,笆 WORD办REGIS芭TER背宏使用爸后缀背“H”安和笆“L”艾 蔼分别扳作俺为高阿8隘位元组般和低拔8扳位元组捌,唉 DWOR罢DREGI巴STER扮使用数字后伴缀来氨表示懊8凹位元组摆的疤顺序。在爱16/32绊位模式敖中翱,敖 俺都可以稗使用不带后案缀啊的版寄存器伴名访问岸16位和背32绊位寄存器,把见啊代码阿

55、列表岸3-7巴。鞍r。挨Code 懊Listi鞍ng 3-盎7.懊 哀Acces百sing 搬regis跋ters 瓣of va颁rying罢 size鞍.捌 板Z。蔼代码清单氨3-7 靶。访问不同芭大小的寄存懊器。耙Code 稗Listi半ng 3-吧7 sho哀ws ho翱w the把 sing办le by哎te re挨giste绊r 般CTRLA稗 按is re瓣ad, h肮ow th扮e two稗 岸CH0RE败S胺H:L 埃regis版ters 跋are r摆ead u傲sing 隘a 16-靶bit o瓣perat暗ion, 埃and h懊ow th俺e fou啊r 班CAL3案:

56、0 半regis昂ters 岸are r岸ead i凹n a 3靶2-bit班 oper隘ation拌. C c啊ompil瓣ers h稗andle吧 mult斑i-byt哀e reg爸ister氨s aut邦omati按cally奥. Not唉e how版ever 扳that 凹in so罢me ca绊ses i八t may板 be r安equir颁ed to般 read白 and 阿write奥 mult哀i-byt绊e reg澳ister扒s in 摆one a笆tomic澳 oper半ation澳 to a疤void 败corru颁ption疤. In 芭this 蔼case,暗 in

57、te胺rrupt哎s mus柏t be 搬disab摆led d阿uring胺 the 摆multi败-byte唉 acce蔼ss to按 make蔼 sure盎 that疤 an i爸nterr把upt s挨ervic俺e rou鞍tine 瓣does 扒not i埃nterf半ere w俺ith t班he mu扮lti-b皑yte a哎ccess傲. AVR阿1306 罢inclu皑des e盎xampl隘es on翱 how 敖atomi耙c acc捌ess o昂f reg碍ister熬s is 绊done 败for t芭he XM白EGA T佰imer/昂Count霸er mo搬dul

58、es按. 巴I。袄代码凹列表半3-7吧演示了如何背读取单叭个哎8扮位元组哀寄存器跋CTRLA澳,吧如何爱使用一个罢16挨位的操作盎来柏读取两个凹 艾CH0RE败S奥 H敖:拌L岸 扳寄存器,以颁及如何在背32扮位熬的爱操作熬中敖读取四个笆 CAL 把3:0胺 敖寄存器。安 C爸 哎语言鞍编译器会自斑动处理多半个版8耙位元组霸的昂寄存器。但凹是请注意,啊在某些情况哀下可能袄要求在肮一个原子操哀作跋中翱读写多耙个案8佰位元组霸的巴寄存器,以暗避免爸讹误啊。芭假如这样的唉话艾,扒在多啊个挨8傲位元组皑的访问霸期间安必须禁止中昂断,以确保班一个中断服务例程不背妨碍鞍多个捌8袄位元组俺的疤访问。翱 坝A

59、VR13懊06叭中有些啊例子把是昂关于稗寄存器昂是昂如何胺对笆XMEGA跋的瓣计时器板/扳计数器模块坝进行原子访斑问的败。按K。矮3.3 M摆odule安 Addr版esses鞍3.3 阿模块访问隘Defin佰ition八s of 班all p熬eriph八eral 澳modul癌es ar伴e fou背nd in爸 the 拔devic把e hea吧der f艾iles 唉avail摆able 矮for t白he XM碍EGA. 埃The a矮ddres白s for安 the 懊modul笆es is疤 spec把ified阿 in A邦NSI C稗 to m颁ake i敖t com半pat

60、ib啊le wi案th mo靶st av瓣ailab板le C 凹compi绊lers.俺 Code埃 笆Listi昂ng瓣 3-8 芭shows熬 how 半ADC 0笆 on p摆ort A熬 is d叭efine吧d. 阿j。扳在适用于巴XMEGA邦设备的头文八件中找到所阿有外设模块啊的定义。半这些绊模块的地址绊在白ANSI 坝C碍 阿语言标准碍中伴作了明确的哎规定斑,使其与大隘多数可用的班 昂C吧 艾语言八编译器兼容鞍。代码摆列表爸 搬3-8氨 拌显示了端口颁 A 皑上的叭 半ADC般 盎0吧 拜是靶如何罢定义艾的。皑2。跋Code 啊Listi靶ng 3-霸8.板 霸Perip伴he

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论