- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
AVR073 在ATtiny261(461、861)中访问10位和16位寄存器
AVR073: 在ATtiny261/461/861中访问10位和16位寄存器
翻译:王育强 2007年1月2日
sidney_wyq@126.com
/Counter0(16位)
Timer/Counter1(10位)
定时器/计数器0
Timer/Counter0(TC0)模块能够在既8位又16位的模式下使用。在8位模式下操作时,不需要特别考虑;在16位模式下操作时,当访问TCNT0L/H和OCR0A/B时则必须进行特别考虑。
TC0有一个单独的8位寄存器,被用作在16位访问时来临时存储高字节。这个寄存器在两种情况下被使用:在以16位模式访问TCNT0时;在OCR0以16位输入捕获模式下使用时。访问低字节(TCNT0L或OCR0A)时会触发16位读写操作:当16位寄存器的低字节被CPU写时,高字节被存储到临时寄存器中,被写的低字节和临时寄存器中的高字节以同样的时钟周期被拷贝到16位寄存器中;当CPU读16位寄存器的低字节时,其高字节以与低字节被读的同一时钟周期被拷贝到临时寄存器中。
16位写操作
16位写操作能够通过首先写高字节到TCNT0H寄存器中而被执行。首先高字节被拷贝到临时寄存器中,然后TCNT0L才被写,并触发16位值在一个时钟周期里被拷贝。
16位读操作
当读低字节寄存器时(TCNT0L或OCR0A),16位读操作被初始化,这将触发高字节被拷贝到临时寄存器中,在读高字节寄存器时将返回之前被存储的高字节。
定时器/计数器1
Timer/Counter1(TC1)是10位/8位的定时器/计数器模块。在8位模式下使用时,不需要特别考虑;在10位模式下使用时,10位寄存器的访问需要使用一个公共的2位寄存器——TC1H,它用来在读写操作时存储高字节。10位TC1寄存器和它们与8位数据总线的连接见图2-1。
图2-1: Timer/Counter1 10位寄存器
10位写操作
10位写操作首先通过写最高2位到公共TC1H寄存器中。当低字节被CPU写入时,已存储在TC1H寄存器中的2位和低字节在相同的时钟周期里被拷贝到10位寄存器中。
读写操作并不清除TC1H寄存器,这使得在写多个10位TC1寄存器时只需对TC1H写一次即可。注意如果一个8位值被写到10位TC1寄存器,而TC1H没有被使用时,那么前一个读写操作的TC1H值可能被拷贝到10位目标寄存器中,所以无论什么时候写10位TC1寄存器,TC1H寄存器都应该被明确地写,除非TC1H的值是已知的。
10位读操作
10位读操作通过首先读10位寄存器的低字节而被执行,这将触发最高2位被拷贝到TC1H寄存器中。
确保多字节寄存器的原子访问
在使用中断的系统里,访问多字节寄存器可能会带来一定的风险。考虑图2-2所示的这种情况:一个10位值将要被写到OCR1A中,TC1H寄存器已经装载了高字节,低字节即将被写入。然而,这时一个中断在这两个操作之间发生了,转入执行中断服务例程(ISR),读取TCNT1寄存器的值。在TCNT1被访问时,为了完成读操作,高字节被拷贝到了TC1H寄存器中。当执行返回到中断点时,TC1H已被破坏了,但是应用程序却无法检测到这一点。当对OCR1A的第二部分写操作被执行时(低字节),错误的高字节被复制了。
图2-2: 中断破坏
通过确保10位和16位寄存器在一个原子操作被访问,我们可以防止图2-2中的情况发生,它在所有的10位和16位访问期间禁止了中断。实现原子访问最常见的方法如图2-3所示。该方法在代码的任何位置使用都是安全的,但是它增加了执行原子访问所需要的指令数,因此弄明白在多字节访问期间什么时候需要阻止中断是重要的。
通常初始化操作在中断发生之前执行,所以在这个阶段没有必要阻止中断。
当中断被执行时,AVR核心自动清除全局中断标记,因此如果在ISR中不手动设置全局中断标记,那么在ISR执行期间访问多字节寄存器也是安全的。
如果没有ISR访问任何多字节寄存器,那么在不阻止中断的情况下,对它们的访问也是安全的。
图2-3: 10位/16位寄存器的原子访问
同步问题
注意:在TC1中,由于要同步电路,个别TC1寄存器不能在被写后即时读回。更详细的信息,请参考ATtiny261/461/861数据手册中的“同步“一节。
该文档未涵盖的多字节寄存器
在ATtiny261/461/861中,一些其它的多字节寄存器在该文档中没有被涵盖到(如ADCL/H)。这些寄存器是地址连续的,允许多字节访问被编译器明确地处理,因此在本文档中没有被讨论。然而要注意,程序员仍然需要确保这些寄存器的原子访问,如2.3小节说明的那样。
包含的宏
这篇应用笔记所包含的是一份完整的ANSI C宏,它被用于执行在文档中所描述的操作。每一个操作都提供了两个宏,一个是中断安全的,另一个非
您可能关注的文档
- 6系列惨遭淘汰新酷睿E8200处理器详测_IT168.pdf
- 7-氨基-3-无-3-头孢-4-羧酸的制备方法.pdf
- 7_2步进指令简介.ppt
- 7种“神奇植物”帮你轻松吸走新屋甲醛!.pdf
- 8.2. 后备缓存.pdf
- 8.7NURBS曲线.pdf
- 8.文件归档管理.pdf
- 802《在学校的最后一天》上课课件.ppt
- 80种改进的OFDM联合时间频率快速同步算法.pdf
- 88胜率上传说无自然之力特色小德分享.pdf
- 2023年07月广东广州越秀区矿泉街招考聘用综合服务中心辅助人员笔试历年高频考点-难、易错点荟萃附答案带详解.pdf
- 2023年07月江苏淮安市淮阴区招考聘用教师10人笔试历年高频考点-难、易错点荟萃附答案带详解.pdf
- 2023年07月广东深圳市光明区消防救援大队招考聘用消防管理岗位特聘专干笔试历年高频考点-难、易错点荟萃附答案带详解.pdf
- 2023年07月天津医科大学眼科医院自主招考聘用笔试历年高频考点-难、易错点荟萃附答案带详解.pdf
- 2023年07月江苏连云港市第一人民医院连云港市儿童医院招考聘用14人笔试历年高频考点-难、易错点荟萃附答案带详解.pdf
- 2023年07月广西北海市房地产交易中心招考聘用笔试历年高频考点-难、易错点荟萃附答案带详解.pdf
- 省级优秀课件小学红色文化主题教育班会《永不褪色的红色丰碑——长津湖战役》.pptx
- 2023年06月辽宁本溪市公安局招考聘用警务辅助人员8人笔试历年高频考点-难、易错点荟萃附答案带详解.pdf
- 2023年06月陕西渭南市白水县大学生到政府机关见习(30人)笔试历年高频考点-难、易错点荟萃附答案带详解.pdf
- 2023年06月西藏自治区区直事业单位公开招考566名高校毕业生笔试历年高频考点-难、易错点荟萃附答案带详解.pdf
文档评论(0)