AVR307使用USI做半双工UART..docVIP

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
AVR307使用USI做半双工UART.

精选AVR应用笔记 AVR307: 使用USI做半双工UART 翻译:邵子扬 2006年7月22日 shaoziyang@ 特点: 半双工通信 使用14.75M晶体时通信速度可以达到230.4kbps 通信使用中断控制 8位数据位,1个停止位,无校验位 数据缓存 介绍 很多AVR单片机中(如ATtiny26、ATtiny2313、ATmega169等)内置了通用串行接口(USI)。USI模块的设计目的是用于TWI或SPI串行通信的,但是USI不仅仅只能用于这两种串行通信,它也可以用于UART串行通信。 使用USI进行UART通信,可以避免使用麻烦的软件UART。使用USI时,由中断来控制数据自动进行移位,这样减少了处理时间,单片机可以有更多时间处理其它的事情。 这篇应用笔记说明了怎样使用ATtiny26的USI进行UART通信,同时提供了接收和发送的源代码。只要很少的修改,代码也可以用于ATtiny2313和ATmega169。代码带有完整的接收和发送数据缓冲处理,如果需要优化资源也可以将这个特点删除。 理论 UART协议是异步串行通信标准,帧格式是一个起始位后紧跟5到9位数据位,一个校验位(可选)和1至2位停止位,数据发送是LSB(低位在前)。帧格式如图1 所示。 图1. UART通信帧格式 USI是一个基本的 8 位移位寄存器,连接到输入和输出引脚。当用于UART通信时,用一个定时器控制移入/移出数据,当一定数量的位移入/移出后产生USI计数中断。USI框图如图2。 图2 ATtiny26的USI接口 因为UART的帧格式总共是7到13位,典型是10位。USI移位寄存器的宽度小于它,不过可以使用利用USI模块回绕的特点来解决这个限制。 UART接收 接收的解决方法建议检测起始位,然后在合适时间里采样8个数据位(忽略停止位)。数据位的第一次采样位于一位的中间,然后用固定周期连续采样,采样间隔由波特率决定。因为移位寄存器只有8位,而起始位不用保存,最后一个数据位移入就完成。这个方法是从第一位数据开始采样的,因为定时器/计数器0容易使用,用来控制延时和位速率。更多关于位速率内容请参考“位速率”一节。 应当意思到AVR单片机硬件UART、软件UART通信和使用USI模块之间一个不同是输入数据是怎样采样的。硬件UART采用了三次采样多数决定,消除了噪声引起的数据错误。在大部分完全或部分软件UART中只对数据采样一次,这也是USI模块的方式,这样噪声引起数据错误的概率增加了。这也是使用校验位的重要原因之一,校验位没有在本文中探讨。另一种解决方法是使用CRC校验,它在应用笔记AVR350中信息说明。 UART发送 UART发送稍微复杂一点:帧需要分成两部分。USI移位寄存器的MSB直接连到USI的数据输出引脚,为了保证正确的时序,MSB需要保持高直到定时器开始移位数据。USI移位寄存器载入高,即起始位,以及数据的开始 6 位 LSB,然后初始化发送。当数据的前 5 位发送后重新载入移位寄存器,将数据的其余部分送入。载入/重载入 USI 寄存器(USIDR)的过程如图3 。 图3. 载入发送缓存USIDR USI模式 USI可以选择不同的通信模式,或者叫“线模式“,但是USI是为了SPI和TWI通信设计的,没有UART通信模块。线模式可以选择为“三线“(SPI)或者“两线“(TWI),UART通信选择SPI模式,因为这种模式的数据收线发是分开的。 在两种线模式下,USI都可以产生称为起始条件中断。在SPI模式下起始条件中断由 SCK 引脚的改变触发,但是说明是从 DI(数据输入)唤醒,因此最好使用引脚改变中断。AVR 单片机在各种休眠模式下都可以被引脚改变中断唤醒,所以最好使用它来检测 UART 的起始位。然后在中断程序中处理 UART 接收。SCK 引脚没有使用,可以用于其它用途。 位速率 8位的定时器/计数器用来指定串行通信的位速率。对于 ATtiny26 使用定时器溢出来触发 USI 移位寄存器,对于 ATmega169 使用比较来触发移位寄存器。定时器种子(初值)由公式1决定。 图4. 公式1 如果定时器种子接近定时器的最大值,就要意识到取整后会引入较大的误差。取整误差应当越小越好,因为总的时间误差要小于2%才能保证通信正确-它包括了系统时钟的精度和UART定时误差。 当使用高速通信时,容易出现定时器种子接近定时器最大值。这时在中断之间只有很少的时钟周期,足以引起中断服务程序发生错误。推荐仔细安排定时器中断服务程序需要的周期数,特别要注意对于存在可能阻塞定时器中断的其它中断。此外,还要将中断潜伏作为重要的的参数来考虑,并根据它来修正定时器种子。

文档评论(0)

dashewan + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档