11810|13

2144

帖子

3

TA的资源

五彩晶圆(中级)

楼主
 

MSP430 LaunchPad学习第二记——UART [复制链接]

 

一、摘要

本应用报告介绍了如何使用Timer_A实现UART功能。该包括例子是专门为MSP430x11x家庭,但他们能适应任何MSP430家族成员纳入Timer_A。使用硬件UART的功能在Timer_A功能和软件。执行是半双工的,事件驱动,它支持的8N1波特率协议从1200到115200或者更快。

 

二、简介

    异步串行通信,可以添加到MSP430x11x应用程序综合Timer_A模块硬件的功能。这份报告提供了一些的UART函数实例演示了一对一MSP430F1121闪存RS232接口单片机与PC机串行端口。一个描述如何使用Timer_A1硬件提供自动启动位检测,波特率生成和数据位锁存是详细。Timer_A硬件特性的软件,大大降低CPU开销通常与微控制器软件UART实现。硬件的功能也让Timer_A的 UART操作作为背景的作用,同时与其他实时系统的任务。

 


MSP430x11x Timer_A的UART描述:串行通信的MSP430F1121与另一个系统,在这报告电脑使用RS232接口。特点是两个系统之间交换通过三线:接收,传输和共同点。协议使用的字符是8N1:8个数据位,无奇偶校验,一个停止位。用户可以修改UART的功能支持其他协议和波特率,奇偶校验和包括一个9个位寻址。 UART的功能描述使用捕获比较寄存器0(CCR0),Timer_A的三个可用寄存器之一。 CCR0用于起始位检测,波特率生成和数据位锁存。另外两个捕获比较寄存器可用于其他事。该CCR0选择是任意的。任何或所有CCRx寄存器可用于UART的功能。端口引脚P1.1和P2.2是外设选项选择的相关于Timer_A CCR0。 P1.1用于传输,P2.2用于接收。外设选项选定为使用外围设备选项选择引脚寄存器,P1SEL和P2SEL。由于P1.1置为输出时,该引脚必须配置为使用输出端口方向寄存器1(P1DIR)。 P2.2作为运行需要输入。这是一个MSP430的端口引脚的默认。 Timer_A配置为运行在连续模式,允许定时器资源用于同时与UART等功能可用。中央处理器寄存器R4是为RXTXData -缓冲区使用的UART数据或出位的变化。 R5的CPU寄存器用于BitCnt,有点跟踪登记。 R4和R5的选择是任意的。任何CPU寄存器或RAM字节可以用于这些功能。

在接收模式下,捕获比较控制寄存器0(CCTL0)的初始配置,使得在下降沿接收引脚P2.2 CCR0捕获。由于接收线路空闲高,一降边指示起始位开始。当UART功能已准备好接收数据,没有开销放在CPU的功能,即使是准备接收任何一个字符时间。 CPU资源执行后,起始位下降沿上P2.2发生。下降对P2.2边沿捕获了自由运行Timer_A计数器寄存器(焦油)的电流值,CCR0与任何其他运行时的活动无关。捕获是通过Timer_A硬件,而不是由软件。同时发出一个中断给CPU。中断的延迟并不大关注确切时间的下降沿触发中断正在CCR0存储,独立其他活动。启动后位的边缘检测,软件重新配置,使CCR0的CCTL0在第一种模式的比较发生在第一个数据位的中间。一个1.5位偏移量添加到CCR0,定位比较下的第一个数据位的中间。接收到的数据是同步的捕获比较输入(SCCI)Timer_A锁存硬件。SCCI是可读的CCTL0闩锁。在UART的功能,SCCI捕获的逻辑电平同步与CCR0输入P2.2进行比较。 UART的功能是从SCCI中接收锁存的数据。软件不直接测试P2.2。

第一个数据位后,1位长的偏移量添加到CCR0定位在未来捕捉中间的每一位。八位连续的数据被锁存,并收到来自SCCI软件到RXTXData位的数据。发射模式任务是简单,因为MSP430在决定时,传输数据,没有启动位边缘检测的必要性。在缓冲区中存储的数据RXTXData传输引脚P1.1使用Timer_A CCR0输出至硬件。

CCR0是预先在比较模式下位传输使用输出模式控制位在CCTL0。模式控制位被预先配置为复位模式(逻辑0),或设置模式(逻辑1)发生在未来比较CCR0。当比较时,在一开始
位传输的数据,自动输出CCR0硬件数据配置P1.1置位并发出一个中断。随着CCR0硬件自动输出数据上P1.1置位,软件中断延迟和位定时的关注减少。这不是必要的软件准备CCR0输出锁存器在一个确切的时间内。 UART的功能软件不直接对P1.1置输出数据,而是预装在CCR0输出数据位输出至锁存器的硬件。


每个位输出之前,软件循环查询RXTXData到进位。适当的跳转提出和CCTL0输出模式准备和1位长的偏移量添加到CCR0。

 

三、波特率计算

Timer_A CCR0用于波特率产生。根据所需波特率,间隔Bitime的计算方法。 Bitime是Timer_A位和PC之间的计数长度时间间隔Timer_A闩锁在接收和发送出的数据位。 Bitime是为Timer_A计算时钟的波特率分源。

 

Timer_A有几个可用的时钟源和除法(参见器件表具体数据)。可用于MSP430x11x  Timer_A模块的时钟源包括辅助时钟(ACLK),子系统时钟(SMCLK)和两个外部时钟。

 

例如:考虑与Timer_A作为辅助时钟源选择9600波特率ACLK,它被配置为作为一个3.579545 MHz的的XTAL相同。Bittime = 3 5799600/545= 372.9〜373实际波特率= 3 579三百七十三分之五百四十五= 9597由于只有一个Bitime整数值可以被添加到CCR0,值373使用。假设9600波特和一个3.579545 MHz的时钟源,四舍五入到最接近的整数Bitime错误小于0.03%每位。

 

四、软件开销
    固件工程师可能会关切的是使用中UART的硬件/软件系统开销,而不是一个专用的串行端口。UART的功能在本报告所述用途timer_A硬件的功能,最大限度地减少CPU的负担。 Timer_A硬件记录起始位优势和锁存和输出自动位的数据。该软件需要有一个26位的每接收或发送的最大周期包括中断服务程序。开销是CPU的时钟(MCLK)和波特率功能。使用3.58 - MHz的9600波特率例如上面的MCLK,开销计算公式为:

软件开销=(26个CPU周期)×(9600)/ 3 579 545 = 6.9%


五、演示电路
    图1的示例电路与调控,从直接供电由一个PC串口3.3 - V的TPS76033低压降稳压器。出于演示的目的,串口接口是通过使用两个TI SN74AHC1G04逆变器。如果一个完全兼容的RS232接口是必需的,如TI的低功耗3 - V的MAX2331集成电路都可以使用。复位拉高和3.58 MHz的陶瓷谐振器用于产生时钟使用。

 

六、示例代码
    所包含的例子11x1_uart1.s43使用图1中的电路,并提供了基本的回声功能。接收到一个字符从PC和回显。在初始化过程中,端口引脚配置和所有时钟都同步到LFXT1晶体振荡器。 LFXT1是配置为在高速运行(高频)模式。如果在这个例子中,MCLK的源是一个外部高频晶体,晶体必须是稳定或振荡器故障安全模式会自动使用FOR MCLK的DCOCLK。该OSCFAULT可以查询,以确保稳定的晶体前选择此MCLK的时钟源。

 

    振荡器故障安全模式中描述的MSP430x1xx系列用户指南(SLAU049)。该主循环调用子程序RX_Ready UART接收准备,然后在低功耗模式0等待(LPM0)与CPU关闭。只有Tmer_A1和ACLK活跃。即使在CPU中关闭主循环中,UART接收中断操作功能在后台驱动。后UART功能接收到RXTXData,UART的中断处理程序的完整的字符返回到主循环活动的CPU。发送子程序被称为未来,又呼应在RXTXData回接收到的字符。循环重复,另一个字符等待收到。该示例使用的编码速度优化技术研究。内CCR0_ISR,BitCnt用于自动递增的间接寻址,直接程序流的确切节ISR的规定办理接收或发送位。软件是不需要投票登记标志或递减,以确定采取何种行动。自动递增寻址使用一个查找表,直接的方案立即流。

该自动递增寻址的优点是速度和CPU的周期计算效率在需要处理为查找表所需的费用在ISR码字。

 

(1)例如11x1_uart2.s43 -使用DOC产生波特率:
这个例子11x1_uart2.s43演示如何实现高波特率的UART MSP430的功能甚至从超低功耗模式,只使用一个32 768的晶体振荡器。 MSP430的独立片上高速数控振荡器(DCO)可用于波特率产生。DOC是一个100 - kHz至5 – MHz甚至更快,数字可调RC型振荡器启动,是在不到6μs稳定。随着快速DOC启动,高波特率是可能的,甚至从超低功耗模式,要求DOC关闭—— 当DOC不到6us时一个起始位的下降沿被用作中断。
例如11x1_uart2.s43提供了一个9600波特率波特率UART解决方案,使用DOC产生波特率。 32 768用于手表晶振的XTAL,取代了3.58 MHz的谐振器图1。DOC设置为1 228 800赫兹,用来驱动子系统时钟(SMCLK)它被配置作为Timer_A来源。DOC被调整到一个高的速度值使用软件锁频环(FLL)。该软件FLL的整合速度SMCLK(DOC时钟)以上的速度较慢ACLK(32 768 Hz的晶体衍生物)时期。该DCO时钟调整,直到达到目标频率(1 228 800赫兹)。该DCO时钟在设定的频率仍然是稳定的,只要VCC和温度的稳定。该软件FLL可以随时被调用的DOC重新调整。看到目前的数据表,MSP430x11x1混合信号微控制器。在这个例子中,主循环中等待LPM3,通常小于2微安与UART的功能充分准备接收。主循环回声操作与前面的例子一样。这个例子使用BitCnt登记只是为了跟踪字符接收进程,而不是使用自动递增,同前面的例子。

 

(2)例如11x1_uart3.s43 采用32 kHz晶振产生波特率:

在某些情况下,32 768 Hz的手表晶振用作Timer_A直接时钟源。UART功能仍然是可能的,但在传输速率较慢,以防止位定时误差。范例11x1_uart3.s43提供了一个2400波特率UART的解决方案,假设一个32 768 Hz的手表晶体是用于的XTAL(取代图1中的3.58 - MHz的谐振器)。没有软件FLL的是需要设置DOC的,因为晶振生成UART的位时间。当激活模式下,CPU配置为在执行DCO时钟速度越快,CPU的代码不在32 768赫兹执行代码。此外,在这个例子中,内存的位置用于RXTXData 和BitCnt,相对于CPU寄存器中使用的其他例子。

 


 

[ 本帖最后由 lyzhangxiang 于 2010-11-17 10:47 编辑 ]

实现带有TimerA 的UART功能.pdf

328.13 KB, 下载次数: 771

slaa078a.pdf

69.95 KB, 下载次数: 424

最新回复

非常感谢  详情 回复 发表于 2013-12-14 01:03

点评

谢谢分享 很有用呀  详情 回复 发表于 2013-4-18 12:58
 
点赞 关注

回复
举报

2144

帖子

3

TA的资源

五彩晶圆(中级)

沙发
 

MSP430 LaunchPad学习第二记——UART

MSP430G2231这个片子是没有串行口的熟悉的人应该清楚的,不过之前第一记中的温度监测采用的就是和PC进行串行通信的,而且那里采用的是2400这样的波特率,考虑到数据采集的场合这个速度不够用,才去深入了解这个uart的。在官方网站上下载了一篇E文的资料,看起来很吃力,不清楚的地方也是用了些翻译软件,不过至少还懂点电子的我,在经过整理一番现在也基本也凑合着看啦,这里也上传原始文件。
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
支持一下,学习了.谢谢楼主
 
 
 

回复

50

帖子

0

TA的资源

一粒金砂(中级)

4
 
谢谢楼主分享啊
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(初级)

5
 
多谢
 
 
 

回复

5015

帖子

12

TA的资源

裸片初长成(初级)

6
 
期待下一篇
 
 
 

回复

7228

帖子

195

TA的资源

五彩晶圆(高级)

7
 
支持+期待
 
 
 

回复

42

帖子

0

TA的资源

一粒金砂(中级)

8
 
用SPI实现uart的发送,,,原文地址:http://www.msp430launchpad.com/2010/08/using-usi-as-uart.html
//******************************************************************************
//  MSP430F2013
//
//  Description: Continuously sends a counter value over the USI in SPI which
//                                 acting as if it were a UART. The sample circuit connects an
//                                 FTDI breakout board to the transmit line and reads. The baud
//                                 rate is determined by the USI speed, which in this case is
//                                 1100000 baud (DCO = 1.1MHz).
//
//  Nicholas J. Conn
//  08-04-2010
//  Built with CCS Version: 4.1.3
//******************************************************************************

#include  "msp430F2013.h"

// Function Definitions
void transmit(unsigned int);

int main( void )
{

  WDTCTL = WDTPW + WDTHOLD;             // Stop watchdog timer
  
  //****************************
  //   Set up USI - LSB first
  //****************************
  USICTL0 |= USIPE6 + USIMST + USILSB + USIOE;        // Enable Output, SPI master, LSB first
  USICTL1 |= USIIE;                                              // Counter interrupt, flag remains set
  USICKCTL = USISSEL_3;                                        // Use SMCLK
  
  USICTL0 &= ~USISWRST;                                 // USI released for operation
  
  //*******************************************************
  //   Set initial program varibles and start peripherals
  //*******************************************************
  unsigned int i = 0;
  while(1)
  {
          transmit(i);
          i++;
  }
}

// Transmits one byte (TXData) using the USI as a UART
void transmit( unsigned int TXData )
{   
  //**********************************************
  //   Send a byte on the USI as if it were UART
  //**********************************************
  TXData = TXData << 1;             // Add start bit
  TXData |= 0xFE00;                 // Add stop bit
  
  while (!(USIIFG & USICTL1));                 // Wait if USI is busy
  USISR = TXData;                                    // Sets word to be sent
  USICNT = USI16B + 10;                   // 16 bit mode, sends 10 bits
}
 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(高级)

9
 
开始我还奇怪,明明2231只是USI,怎么还能串口输出,原来是模拟的。看来那个温度的例程还是得认真看看。
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

10
 
万能的SPI,我咋没想到
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

11
 
不懂SPI,只能慢慢学了。。。
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

12
 
谢谢了!
 
 
 

回复

42

帖子

0

TA的资源

一粒金砂(中级)

13
 

回复 楼主 lyzhangxiang 的帖子

谢谢分享  很有用呀
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

14
 
非常感谢
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表