msp430f541x、msp430f543x多達(dá)4個(gè)通用串行通信接口(USCI)模塊,支持多種串行通信模式,不同的 USCI 模塊支持不同的模式。
本文引用地址:
http://butianyuan.cn/article/201611/321230.htm USCI_Ax模塊支持:
- UART模式;
- IrDA通信的脈沖整形;
- LIN通信的自動(dòng)波特率檢測;
- SPI模式;
USCI_Bx模塊支持:
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)生中斷請(qǐng)求。如果將字符寫入,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)生中斷請(qǐng)求。UCRXIFG 和UCRXIE 可以通過系統(tǒng)復(fù)位PUC信號(hào)或 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)先級(jí)的中斷在 UCAxIV寄存器內(nèi)產(chǎn)生一個(gè)數(shù)值,該數(shù)值可以加到程序計(jì)數(shù)器上,從而自動(dòng)跳轉(zhuǎn)到相應(yīng)的軟件子程序處。禁止中斷不會(huì)影響 UCAxIV的值。
對(duì)UCAxIV寄存器的任何訪問,讀或?qū)?,將?huì)自動(dòng)復(fù)位掛起的優(yōu)先級(jí)最高的中斷標(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í),對(duì)協(xié)議來說,不需要多處理器格式。當(dāng)3 個(gè)或更多個(gè)芯片通信時(shí),USCI 支
持線路空閑和地址位多處理器通信格式。
評(píng)論