新闻中心

EEPW首页>嵌入式系统>设计应用> 【UART】USCI:UART模式

【UART】USCI:UART模式

作者: 时间:2016-11-25 来源:网络 收藏

3.11 线路空闲多处理器模式(待续)

3.12 地址位多处理器模式(待续)

3.13 自动波特率检测(待续)

3.2





此寄存器主要是配置USCI,PUC后时钟选择外部时钟,所以初始化时除了置位 UCSWRST 位外还需配置时钟源。其它的默认就行。

四、低功耗 UART模式下使用 USCI模块

USCI 模块提供低功耗模式下的自动时钟激活功能。当 USCI 时钟源由于设备处于低功耗模式不活动时,无论时钟源的控制位如何设置,USCI 模块会在需要时激活时钟源,时钟将保持活动状态直到 USCI模块返回空闲状态。USCI模块返回到闲状态后,将反转时钟源控制位的设置。

eg.
void InitUARTA1(void)
{
UCA1CTL1 |= UCSWRST;// PUC后,UCSWRST位自动置位,这使 USCI保持在复位状态
UCA1CTL0 = 0x00;
UCA1CTL1 |= UCSSEL_2;// SMCLK
UCA1BR0 = 216;// 24MHz 115200
UCA1BR1 = 0;// 24MHz 115200
UCA1MCTL = UCBRS_2 + UCBRF_0;//0x04+0x00
P5SEL = 0xC0;// P5.6/7 = USCI_A0 TXD/RXD
UCA1CTL1 &= ~UCSWRST;// **Initialize USCI state machine**,。清除UCSWRST 将释放 USCI,UCA1IE |= UCRXIE;// Enable USCI_A1 RX interrupt
}
#pragma vector = USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
switch (__even_in_range(UCA1IV,4))
{
case 0:break;
case 2:
g_uartBufA[g_bufALen] = UCA1RXBUF;
if (g_uartBufA[g_bufALen]==0xFF)
{
}
if (g_uartBufA[g_bufALen++]==0xFD) //判断PC机发送的命令帧是否已完
{
g_bufALen=0;
g_uartReceive = 1;// 置位
}
break;
case 4:break;// Vector 4 - TXIFG
default: break;
}
}
void USciSend( )
{
unsigned char i;
for (i = 0; i <g_bufALen; i++)
{
while (!(UCA1IFG & UCTXIFG));
UCA1TXBUF = g_uartBufA[uartBuf1];
}
}//UCA1MCTL 是UCA1的调制控制寄存器




五、波特率的产生

USCI 波特率发生器可以从非标准源频率中产生标准的波特率,可以通过UCOS16位选择系统提供的两种操作模式。波特率可以通过使用BRCLK 产生,根据 UCSSELx设置,BRCLK 可以作为外部时钟 UCAxCLK或内部时钟ACLK 或SMCLK 的时钟源。

5.1低频波特率

当UCOS16=0 时选择低频模式。该模式允许从低频时钟源产生波特率(例如从32768Hz 晶振产生9600波特)。通过使用较低的输入频率,可以降低模块的功耗。在高频和高分频设置下使用这种模式,将会使多数表决在逐渐缩小的窗口中执行,因此会降低多数表决法的优势(下面的例子都是这种模式)。

在低频模式下,波特率发生器使用1个预分频器和1个调制器产生位时钟时序。这种组合下,产生波特率时支持小数分频;在这种模式下,最大的 USCI波特率是UART 源时钟频率 BRCLK的1/3 。

每一位的时序如图所示,对于接收的每一位,为了确定该位的值,采用多数表决法。这些采样点发生在N/2-1/2,N/2 和N/2 + 1/2 个BRCLK 周期处,这里N 是每个BITCLK 时钟中 BRCLKs 的数值。


调制是建立在如表15-2 所示的 UCBRSx 设置基础上的。表中1个1 表示m= 1,相应的BITCLK 周期是一个BRCLK 周期,它比m=0 时的BITCLK 周期长。调制在8位后进行,但以新的开始位重新启动。

5.2 过采样波特率的产生

当UCOS16=1时,选择过采样模式。该模式支持在较高输入时钟频率下对UART 位流采样。在多数表决方法的结果总是一个位时钟周期的1/16位置。当使能IrDA 编码器和解码器时,这种模式也支持带有3/16位时间的IrDA脉冲。

该模式使用一个预分频器和调制器产生BITCLK16 时钟,该时钟比 BITCLK 快16倍。这种组合方式支持波特率产生时 BITCLK16 和BITCLK 的小数分频。在这种情况下,最大的USCI 波特率是 UART源时钟频率BRCLK的1/16。当UCBRx 设置为0或1时,将忽略第一级分频器和调制器,BRCLK等于 BITCLK16—在这种情况下BITCLK16没有调制,因此将忽略 UCBRFx位。

BITCLK16 调制是建立在如表15-3 所示的 UCBRFx 设置基础上的。表中1个1 表示相应的 BITCLK16 周期一个BRCLK周期,它比m=0 时的BITCLK16周期长。以每一个新位时序开始调制;BITCLK调制是建立在如前所述的 UCBRSx设置(见表15-2)基础上的。

5.3 设置波特率

430的波特率设置用三个寄存器实现:
UxBR0:波特率发生器分频系数低8位;
UxBR1:波特率发生器分频系数高8位;
UxMCTL:波特率发生器分频系数的小数部分实现;
对于给定的BRCLK时钟源,所使用的波特率将决定分频因子 N:N = fBRCLK/波特率。分频因子N 通常不是一个整数值,因此至少需要一个分频器和一个调制器来尽可能接近分频因子,如果N 值等于或大于16,可以通过置位UCOS16 选择过采样波特率产生模式。

在低频模式下,分频因子的整数部分通过预分频器实现UCBRx = INT(N);
小数部分由带有下面nominal公式的调制器实现:UCBRSx = round((N–INT(N))× 8),(round表示舍入)
UCBRSx计数值增1或减1,对任何给定的位给一个较小的最大比特误差。为了检测是不是这种情况,对于每个UCBRSx设置的每一位都必须经过详细的误差计算;

在过采样模式下,预分频器设置为:UCBRx = INT(N/16),第一阶调制器设置为:UCBRFx = round(((N/16)– INT(N/16) ) × 16 ),当需要更高精度时,UCBRSx调制器可以实现从 0到7 的值。对于给定位,为了找到最低的最大误码率设置,对于带有初始UCBRFx设置和增1 或减 1的 UCBRFx设置的 UCBRSx从0到7的所有设置,都必须经过详细的误差计算。

下面详解上例中的四条语句:

UCA1CTL1 |= UCSSEL_2;// SMCLK
UCA1BR0 = 216;// 24MHz 115200
UCA1BR1 = 0;// 24MHz 115200
UCA1MCTL = UCBRS_2 + UCBRF_0;//0x04+0x00

这里 SMCLK 已在时钟部分初始化,其时钟源为: Fdcoclkdiv = (760+1)*32768 = 24.936448 MHZ;
分频系数 N = 24936448/115200 = 216.462222,UCA1BR0是分频系统整数部分的低8位、UCA1BR1是高8位,所以..
UCA1MCTL 是波特率发生器分频系数的小数部分,由于是低频模式(UCOS16=0),UCA1MCTL 寄存器中的UCBRFx 位忽略,而UCBRSx = round((N–INT(N))× 8) 即 UCBRSx = 0.46×8 四舍五入取为 4。
UCBRSx 的值也可以这么解释: 0.46*8=3.68 四舍五入为 4个1,把这4个1分成8位均匀排开 01010101 (LSB在前),对照表15-2 查得UCBRSx=0x04。

3.1 串行口寄存器的初始化
MSP430 的串行口波特发生器使用1 个分频计数器 和1 个调整器, 分频因子N 由送到分频计数器的时钟 ( BRCLK ) 频率和所需的波特率来决定, N=BRCLK/波 特率。 本系统中使用8 MHz 晶振,即BRCLK = 8 MHz ,要求 串行口波特率为1.5Mbps 时,分频因子大约是5.333333。这样波特率发生器的分频计数器BRCLK 值是5 ;而调整 器UMCTL 的值为24H 。当然实际误差为1.56%,为此先采用6 MHz,12 MHz 的晶振进行接收发送测试, 证明这 个误差

上一页 1 2 下一页

关键词:UARTUSCIUART模

评论


相关推荐

技术专区

关闭