msp430f541x、msp430f543x多達(dá)4個(gè)通用串行通信接口(USCI)模塊,支持多種串行通信模式,不同的 USCI 模塊支持不同的模式。
USCI_Ax模塊支持:
UART模式;
IrDA通信的脈沖整形;
LIN通信的自動(dòng)波特率檢測(cè);
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ī)起始邊沿檢測(cè);
波特率可編程控制,支持小數(shù)波特率調(diào)制;
用于錯(cuò)誤檢測(cè)和抑制的狀態(tài)標(biāo)志;
用于地址檢測(cè)的狀態(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 User's 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,即 字符長(zhǎng)度8、1個(gè)停止位、無奇偶校驗(yàn)、低位優(yōu)先,UART模式。
UCMODEx Bits2_1位:
兩個(gè)芯片進(jìn)行異步通信時(shí),對(duì)協(xié)議來說,不需要多處理器格式。當(dāng)3 個(gè)或更多個(gè)芯片通信時(shí),USCI 支
持線路空閑和地址位多處理器通信格式。
3.11 線路空閑多處理器模式(待續(xù))
3.12 地址位多處理器模式(待續(xù))
3.13 自動(dòng)波特率檢測(cè)(待續(xù))
3.2
此寄存器主要是配置USCI,PUC后時(shí)鐘選擇外部時(shí)鐘,所以初始化時(shí)除了置位 UCSWRST 位外還需配置時(shí)鐘源。其它的默認(rèn)就行。
四、低功耗 UART模式下使用 USCI模塊
USCI 模塊提供低功耗模式下的自動(dòng)時(shí)鐘激活功能。當(dāng) USCI 時(shí)鐘源由于設(shè)備處于低功耗模式不活動(dòng)時(shí),無論時(shí)鐘源的控制位如何設(shè)置,USCI 模塊會(huì)在需要時(shí)激活時(shí)鐘源,時(shí)鐘將保持活動(dòng)狀態(tài)直到 USCI模塊返回空閑狀態(tài)。USCI模塊返回到閑狀態(tài)后,將反轉(zhuǎn)時(shí)鐘源控制位的設(shè)置。
eg.
void InitUARTA1(void)
{
UCA1CTL1 |= UCSWRST;// PUC后,UCSWRST位自動(dòng)置位,這使 USCI保持在復(fù)位狀態(tài)
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機(jī)發(fā)送的命令幀是否已完
{
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的調(diào)制控制寄存器
五、波特率的產(chǎn)生
USCI 波特率發(fā)生器可以從非標(biāo)準(zhǔn)源頻率中產(chǎn)生標(biāo)準(zhǔn)的波特率,可以通過UCOS16位選擇系統(tǒng)提供的兩種操作模式。波特率可以通過使用BRCLK 產(chǎn)生,根據(jù) UCSSELx設(shè)置,BRCLK 可以作為外部時(shí)鐘 UCAxCLK或內(nèi)部時(shí)鐘ACLK 或SMCLK 的時(shí)鐘源。
5.1 低頻波特率
當(dāng)UCOS16=0 時(shí)選擇低頻模式。該模式允許從低頻時(shí)鐘源產(chǎn)生波特率(例如從32768Hz 晶振產(chǎn)生9600波特)。通過使用較低的輸入頻率,可以降低模塊的功耗。在高頻和高分頻設(shè)置下使用這種模式,將會(huì)使多數(shù)表決在逐漸縮小的窗口中執(zhí)行,因此會(huì)降低多數(shù)表決法的優(yōu)勢(shì)(下面的例子都是這種模式)。
在低頻模式下,波特率發(fā)生器使用1個(gè)預(yù)分頻器和1個(gè)調(diào)制器產(chǎn)生位時(shí)鐘時(shí)序。這種組合下,產(chǎn)生波特率時(shí)支持小數(shù)分頻;在這種模式下,最大的 USCI波特率是UART 源時(shí)鐘頻率 BRCLK的1/3 。
每一位的時(shí)序如圖所示,對(duì)于接收的每一位,為了確定該位的值,采用多數(shù)表決法。這些采樣點(diǎn)發(fā)生在N/2-1/2,N/2 和N/2 + 1/2 個(gè)BRCLK 周期處,這里N 是每個(gè)BITCLK 時(shí)鐘中 BRCLKs 的數(shù)值。
調(diào)制是建立在如表15-2 所示的 UCBRSx 設(shè)置基礎(chǔ)上的。表中1個(gè)1 表示m= 1,相應(yīng)的BITCLK 周期是一個(gè)BRCLK 周期,它比m=0 時(shí)的BITCLK 周期長(zhǎng)。調(diào)制在8位后進(jìn)行,但以新的開始位重新啟動(dòng)。
5.2 過采樣波特率的產(chǎn)生
當(dāng)UCOS16=1時(shí),選擇過采樣模式。該模式支持在較高輸入時(shí)鐘頻率下對(duì)UART 位流采樣。在多數(shù)表決方法的結(jié)果總是一個(gè)位時(shí)鐘周期的1/16位置。當(dāng)使能IrDA 編碼器和解碼器時(shí),這種模式也支持帶有3/16位時(shí)間的IrDA脈沖。
該模式使用一個(gè)預(yù)分頻器和調(diào)制器產(chǎn)生BITCLK16 時(shí)鐘,該時(shí)鐘比 BITCLK 快16倍。這種組合方式支持波特率產(chǎn)生時(shí) BITCLK16 和BITCLK 的小數(shù)分頻。在這種情況下,最大的USCI 波特率是 UART源時(shí)鐘頻率BRCLK的1/16。當(dāng)UCBRx 設(shè)置為0或1時(shí),將忽略第一級(jí)分頻器和調(diào)制器,BRCLK等于 BITCLK16—在這種情況下BITCLK16沒有調(diào)制,因此將忽略 UCBRFx位。
BITCLK16 調(diào)制是建立在如表15-3 所示的 UCBRFx 設(shè)置基礎(chǔ)上的。表中1個(gè)1 表示相應(yīng)的 BITCLK16 周期一個(gè)BRCLK周期,它比m=0 時(shí)的BITCLK16周期長(zhǎng)。以每一個(gè)新位時(shí)序開始調(diào)制;BITCLK調(diào)制是建立在如前所述的 UCBRSx設(shè)置(見表15-2)基礎(chǔ)上的。
5.3 設(shè)置波特率
430的波特率設(shè)置用三個(gè)寄存器實(shí)現(xiàn):
UxBR0:波特率發(fā)生器分頻系數(shù)低8位;
UxBR1:波特率發(fā)生器分頻系數(shù)高8位;
UxMCTL:波特率發(fā)生器分頻系數(shù)的小數(shù)部分實(shí)現(xiàn);
對(duì)于給定的BRCLK時(shí)鐘源,所使用的波特率將決定分頻因子 N: N = fBRCLK/波特率。分頻因子N 通常不是一個(gè)整數(shù)值,因此至少需要一個(gè)分頻器和一個(gè)調(diào)制器來盡可能接近分頻因子,如果N 值等于或大于16,可以通過置位UCOS16 選擇過采樣波特率產(chǎn)生模式。
在低頻模式下,分頻因子的整數(shù)部分通過預(yù)分頻器實(shí)現(xiàn) UCBRx = INT(N);
小數(shù)部分由帶有下面nominal公式的調(diào)制器實(shí)現(xiàn): UCBRSx = round((N–INT(N))× 8),(round表示舍入)
UCBRSx計(jì)數(shù)值增1或減1,對(duì)任何給定的位給一個(gè)較小的最大比特誤差。為了檢測(cè)是不是這種情況,對(duì)于每個(gè)UCBRSx設(shè)置的每一位都必須經(jīng)過詳細(xì)的誤差計(jì)算;
在過采樣模式下,預(yù)分頻器設(shè)置為:UCBRx = INT(N/16),第一階調(diào)制器設(shè)置為:UCBRFx = round(((N/16)– INT(N/16) ) × 16 ),當(dāng)需要更高精度時(shí),UCBRSx調(diào)制器可以實(shí)現(xiàn)從 0到7 的值。對(duì)于給定位,為了找到最低的最大誤碼率設(shè)置,對(duì)于帶有初始UCBRFx設(shè)置和增1 或減 1的 UCBRFx設(shè)置的 UCBRSx從0到7的所有設(shè)置,都必須經(jīng)過詳細(xì)的誤差計(jì)算。
下面詳解上例中的四條語(yǔ)句:
UCA1CTL1 |= UCSSEL_2; // SMCLK
UCA1BR0 = 216; // 24MHz 115200
UCA1BR1 = 0; // 24MHz 115200
UCA1MCTL = UCBRS_2 + UCBRF_0; // 0x04+0x00
這里 SMCLK 已在時(shí)鐘部分初始化,其時(shí)鐘源為: Fdcoclkdiv = (760+1)*32768 = 24.936448 MHZ;
分頻系數(shù) N = 24936448/115200 = 216.462222,UCA1BR0是分頻系統(tǒng)整數(shù)部分的低8位、UCA1BR1是高8位,所以..
UCA1MCTL 是波特率發(fā)生器分頻系數(shù)的小數(shù)部分,由于是低頻模式(UCOS16=0), UCA1MCTL 寄存器中的 UCBRFx 位忽略,而 UCBRSx = round((N–INT(N))× 8) 即 UCBRSx = 0.46×8 四舍五入取為 4。
UCBRSx 的值也可以這么解釋: 0.46*8=3.68 四舍五入為 4個(gè)1,把這4個(gè)1分成8位均勻排開 01010101 (LSB在前),對(duì)照表15-2 查得 UCBRSx=0x04。
上一篇:msp430f5419/38學(xué)習(xí)筆記之時(shí)鐘系統(tǒng)
下一篇:MSP430F5529液晶SPI通信協(xié)議
推薦閱讀
史海拾趣
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 神經(jīng)形態(tài)芯片可能是革新機(jī)器人實(shí)時(shí)電機(jī)控制的未來
- 從三個(gè)方面理解ARM嵌入式系統(tǒng)
- 自動(dòng)報(bào)警 基于MCU的家庭防盜報(bào)警系統(tǒng)的設(shè)計(jì)
- 存儲(chǔ)控制器及其訪問外設(shè)的原理
- 基于51系列單片機(jī)的智能照明控制系統(tǒng)設(shè)計(jì)方案
- 基于STM32的四旋翼飛行器控制系統(tǒng)
- 單片機(jī)應(yīng)用編程技巧解析
- 基于89C52的教室智能節(jié)能照明系統(tǒng)設(shè)計(jì)
- 一種新型的雨量光照傳感器的設(shè)計(jì)
- 誰控制了電解質(zhì),誰就為電動(dòng)汽車鋪平了道路
- 力旺電子旗下熵碼科技攜手資策會(huì)簽署合作備忘錄 共推芯片安全教育及人才培育
- 英飛凌推出XENSIV? 3D磁傳感器,為汽車、工業(yè)和消費(fèi)類應(yīng)用帶來高精度位置檢測(cè)功能
- RKDC2025 丨米爾亮相第九屆瑞芯微開發(fā)者大會(huì),共繪工業(yè)數(shù)智新圖景
- 「芯生態(tài)」杰發(fā)科技AC7870攜手IAR開發(fā)工具鏈,助推汽車電子全棧全域智能化落地
- 緊湊型PTS647輕觸開關(guān)系列增加了降噪和防塵功能
- 新型固態(tài)鋰離子電池技術(shù)提高了功率密度和可靠性標(biāo)準(zhǔn)
- 電動(dòng)汽車換電的好處
- 高壓BMS如何增強(qiáng)安全性并延長(zhǎng)電池的使用壽命
- 消息稱英偉達(dá)-聯(lián)發(fā)科 AI PC 芯片延遲除設(shè)計(jì)修改亦與微軟系統(tǒng)進(jìn)度緩慢等有關(guān)
- 【開發(fā)板試用】89美金FPGA開發(fā)板試用風(fēng)暴來襲!
- 【EEWORLD第三十五屆】2012年02月社區(qū)明星人物揭曉!
- 勇闖泰克絕密黑科技實(shí)驗(yàn)室!
- 讓是德科技帶我們一起 了解汽車電子車載系統(tǒng)解決方案 看視頻答題贏好禮!
- 下載有好禮!羅姆帶您學(xué)習(xí)電源設(shè)計(jì)應(yīng)用小技巧(功率器件篇)
- 和我一起學(xué)習(xí)ESP32的micropython
- TI有獎(jiǎng)直播|C2000™ F280013x實(shí)現(xiàn)更低成本且更高效的實(shí)時(shí)控制方案
- 與未來同行-是德科技創(chuàng)新技術(shù)峰會(huì)·北京
- Sitara™ AM335x ARM® Cortex™-A8 團(tuán)購(gòu)
- 【免費(fèi)體驗(yàn)】來這里提交申請(qǐng),有機(jī)會(huì)獲得英飛凌無人機(jī)