新聞中心

【UART】USCI:UART模式

作者: 時(shí)間:2016-11-25 來源:網(wǎng)絡(luò) 收藏


msp430f541x、msp430f543x多達(dá)4個(gè)通用串行通信接口(USCI)模塊,支持多種串行通信模式,不同的 USCI 模塊支持不同的模式。

本文引用地址:http://m.butianyuan.cn/article/201611/321230.htm

USCI_Ax模塊支持:

  • UART模式;
  • IrDA通信的脈沖整形;
  • LIN通信的自動(dòng)波特率檢測;
  • SPI模式;

USCI_Bx模塊支持:

  • IIC模式;
  • SPI模式;

UART模式:


在異步模式下,USCI_Ax模塊通過兩個(gè)外部引腳UCAxRXD和UCAxTXD將芯片連接到外部系統(tǒng)。當(dāng)UCSYNC

位清零時(shí),選擇UART模式。




UART模塊特征包括:

  • 帶奇校驗(yàn)、偶校驗(yàn)或非奇偶校驗(yàn)的7或8位數(shù)據(jù);
  • 獨(dú)立的發(fā)送和接收移位寄存器;
  • 獨(dú)立的發(fā)送和接受緩沖寄存器;
  • 發(fā)送和接收的獨(dú)立中斷能力;
  • 最低位優(yōu)先或最高位優(yōu)先的數(shù)據(jù)發(fā)送和接收;
  • 多處理器系統(tǒng)的內(nèi)置空閑線路和地址位通信協(xié)議;
  • 用于自動(dòng)從LPMx模式喚醒的接收機(jī)起始邊沿檢測;
  • 波特率可編程控制,支持小數(shù)波特率調(diào)制;
  • 用于錯(cuò)誤檢測和抑制的狀態(tài)標(biāo)志;
  • 用于地址檢測的狀態(tài)標(biāo)志;

一、USCI初始化和復(fù)位

PUC或置位UCSWRST,可以使USCI復(fù)位。PUC后,UCSWRST位自動(dòng)置位,這使 USCI保持在復(fù)位狀態(tài)。UCSWRST位置位,將使UCRXIE,UCTXIE,UCRXIFG,UCRXERR,UCBRK,UCPE,UCOE,UCFE,UCSTOE 和 UCBTOE 位復(fù)位,UCTXIFG 位置位。清除 UCSWRST 將釋放 USCI,使其進(jìn)入操作狀態(tài)。



推薦使用以下過程,進(jìn)行初始化或重新配置:

1.置位UCSWRST (BIS.B #UCSWRST,&UCAxCTL1);

2.2設(shè)置UCSWRST=1,初始化所有的USCI寄存器(包括UCAxCTL1);

3.配置端口;

4.軟件清除UCSWRST(BIC.B #UCSWRST,&UCAxCTL1);

5.通過UCRXIE和/或UCTXIE使能中斷(可選);

例:串口助手發(fā)什么就返回什么.

#include "msp430x54x.h"

// ACLK = REFO = 32768Hz, MCLK = SMCLK = default DCO/2 = 1048576Hz

// P3.4,5——USCI_A0 TXD/RXD;P9.4,5——USCI_A2 TXD/RXD;P10.4,5——USCI_A3 TXD/RXD;

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT

P5SEL = 0xc0; // P5.6,7 = USCI_A1 TXD/RXD
UCA1CTL1 |= UCSWRST; // **Put state machine in reset**
UCA1CTL1 |= UCSSEL_2; // SMCLK
UCA1BR0 = 9; // 1MHz 115200 (see Users Guide)
UCA1BR1 = 0; // 1MHz 115200
UCA1MCTL |= UCBRS_1 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0
UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA1IE |= UCRXIE; // Enable USCI_A1 RX interrupt

__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
}

// Echo back RXed character, confirm TX buffer is ready first,發(fā)送數(shù)據(jù)之前確定發(fā)送緩存準(zhǔn)備好

#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
switch(__even_in_range(UCA1IV,4))
{
case 0:break; // Vector 0 - no interrupt
case 2: // Vector 2 - RXIFG
while (!(UCA1IFG&UCTXIFG)); // USCI_A1 TX buffer ready?
UCA1TXBUF = UCA1RXBUF; // TX -> RXed character
break;
case 4:break; // Vector 4 - TXIFG
default: break;
}
}

//UCTXIFG=0x02,UCA1IFG&UCTXIFG,當(dāng)UCA1IFG的UCTXIFG位為1時(shí),說明UCA1TXBUF為空,跳出while循環(huán)循環(huán);當(dāng)UCTXIFG位為0時(shí)UCA1TXBUF不為空,停在循環(huán)。


二、USCI中斷

USCI只有一個(gè)發(fā)送和接收共用的中斷向量,USCI_Ax和USC_Bx不共用中斷向量。

2.1 USCI 發(fā)送中斷操作

發(fā)射機(jī)置位 UCTXIFG 中斷標(biāo)志,這表明 UCAxTXBUF 已經(jīng)準(zhǔn)備好接收另一個(gè)字符(即UCAxTXBUF 為空)如果UCTXIE 和GIE 也置位的話,將產(chǎn)生中斷請求。如果將字符寫入,UCAxTXBUF、UCTXIFG將自動(dòng)復(fù)位而無需軟件復(fù)位。PUC之后或UCSWRST = 1時(shí),UCTXIFG 置位、UCTXIE 復(fù)位。

2.2 USCI 接收中斷操作

每接收到1個(gè)字符并將其載入到 UCAxRXBUF 時(shí),UCRXIFG 中斷標(biāo)志置位,如果 UCTXIE 和 GIE 也置位的話,將產(chǎn)生中斷請求。UCRXIFG 和UCRXIE 可以通過系統(tǒng)復(fù)位PUC信號或 UCSWRST = 1復(fù)位。當(dāng)讀取UCAxRXBUF時(shí),UCRXIFG 自動(dòng)復(fù)位。

2.3 UCAxIV,中斷向量發(fā)生器

USCI 中斷標(biāo)志具有一定的優(yōu)先次序,組合使用一個(gè)中斷向量。中斷向量寄存器 UCAxIV 用于確定產(chǎn)生中斷的標(biāo)志。使能的具有最高優(yōu)先級的中斷在 UCAxIV寄存器內(nèi)產(chǎn)生一個(gè)數(shù)值,該數(shù)值可以加到程序計(jì)數(shù)器上,從而自動(dòng)跳轉(zhuǎn)到相應(yīng)的軟件子程序處。禁止中斷不會(huì)影響 UCAxIV的值。

對UCAxIV寄存器的任何訪問,讀或?qū)?,將?huì)自動(dòng)復(fù)位掛起的優(yōu)先級最高的中斷標(biāo)志。如果另一個(gè)中斷標(biāo)志置位,在響應(yīng)完第一個(gè)中斷后,立即產(chǎn)生另一個(gè)中斷。

三、寄存器

3.1




此寄存器主要是定義數(shù)據(jù)通信的字符格式,UART 的字符格式包括一個(gè)起始位,7 或 8 位數(shù)據(jù)位,一個(gè)奇/偶/非奇偶校驗(yàn)位,地址位(地址位模式),以及1或2個(gè)停止位,UCMSB位控制傳送方向,選擇低位或高位優(yōu)先,UART 通訊的典型選擇是低位優(yōu)先。

PUC之后全為0,即 字符長度8、1個(gè)停止位、無奇偶校驗(yàn)、低位優(yōu)先,UART模式。

UCMODEx Bits2_1位:

兩個(gè)芯片進(jìn)行異步通信時(shí),對協(xié)議來說,不需要多處理器格式。當(dāng)3 個(gè)或更多個(gè)芯片通信時(shí),USCI 支
持線路空閑和地址位多處理器通信格式。


上一頁 1 2 下一頁

關(guān)鍵詞: UARTUSCIUART模

評論


技術(shù)專區(qū)

關(guān)閉