硬件集成電路設計熱門培訓內容之單片機MSP430精準配置高速串口波特率的方法

時間:2018-03-23 10:28:38

 1 原因分析
    在異步通信中,波特率是很重要的指標,表示為每秒傳送二進制數碼的位數,反映了異步串行通信的速度。MSP430的波特率發生器使用一個分頻計數器和一個調整器來構成分頻因子,此方法能夠用較低時鐘頻率實現高速通信,從而在系統低功耗的情況下,實現高性能的串行通信。MSP430波特率發生器的時鐘源可以為通用時鐘(Universal CLOCk,UCLK)、輔助時鐘(Auxiliary Clock,ACLK),子系統時鐘Subsystem Master Clock,SMCLK)。其中,ACLK通常為32 768 Hz,穩定但無法滿足高速串口通信;SMCLK為可配置的系統頻率,可滿足高速串口通信,但不穩定。SMCLK是由數字控制振蕩器(DigitallycontrolLED Oscillator,DCO)的調節器模塊混合兩個頻率Fdco和Fdco+,用以產生介于Fdco和Fdco+1之間的頻率。從本質上來說,這種調制將時鐘能量擴散到一個寬帶中,減少了電磁干擾(EMI)。但這樣得到的平均頻率的調制時鐘,其負面影響的表現形式就是頻率的抖動。
    DCO頻率會隨著溫度和電壓的變化而有所波動,在fDCO=1 MHz時,飄移頻率隨漂移溫度變化的比例為0.1%/℃,飄移頻率隨漂移電壓變化的比例為1.9%/V。因此使用SMCLK作為串口時鐘源時,用理論頻率計算的分頻因子和實際頻率分頻因子有差異,導致串口無法通信。

2 解決方案
2.1 方案1——自動波特率檢測模式
    MSP430串口通信支持自動波特率檢測,在這種通信模式下,在數據幀前面會有一個包含打斷/同步域的同步序列,如圖1所示。為了LIN的一致性,該模式下字符格式應為8個數據位,低位優先,沒有奇偶校驗位和停止位,且地址位不可用。在接收打斷/同步域時,串口是不能發送數據的,如果在幀錯誤下接收到一個0H字節,那么此時發送的任何數據都會遭到破壞。由此可見其通信過程較復雜,使用不便。


    
2.2 方案2——外接高頻晶振
    MSP430可外接穩定的高速晶振,但該系列芯片設計為超低功耗的單片機,如外接高頻晶振,與該系列低功耗設計理念相違背。即MCU進入低功耗模式(Low-Power Mode,LPM)下晶振并不進入低功耗模式,且會一直耗電,因此會增加系統的耗電量,減少續航時間。
2.3 方案3——根據時鐘源自動計算波特率
    可使用內部低頻晶振,通常為32 768 Hz。經過DCO調節器,產生較高的可供串口高速通信的頻率FSMCLK。該頻率是由DCO調節器模塊在32個DCO時鐘周期內混合Fdco和Fdco+1產生的介于Fdco和Fdco+1之間的頻率,該調節模式從本質上減小了電磁干擾。并且FSMCLK會在MCU進入LPM模式后自動關閉以節電,直至MCU退出低功耗模式。得到高頻時鐘后,可通過兩個定時器精準計算出FSMCLK,并根據該值設置波特率,此方法可消除器件差異性,以保證單片機串口在不同溫度和電壓下正常工作。該方案簡單、易實現、抗電磁干擾強、省電效果好,并且從一定程度上消除了系統頻率隨溫度、電壓變化所帶來的影響。該方案優于方案1和方案2;其實現流程如圖2所示。


3 系統工作頻率計算
    對于定時器A0,其時鐘源頻率為F0,使定時器A0工作在計數器模式下并設置每計數T0次產生一次中斷,即每中斷一次的時間t0為:
    
    對于定時器A1,其時鐘源頻率為F1,使定時器A1工作在計數器模式下并設置每計數T1次產生一次中斷,即每中斷一次的時問t1為:
    


4 波特率設置
    對于給定串口時鐘源BRCLK,分頻因子N滿足:
    N=BRCLK/Baudrate
    分頻因子N常常不是整數,因此,至少需要一個分頻計數器和一個調整器來產生一個近似于分頻因子N的數。
    在低頻模式下,整數部分分頻因子滿足:
    UCBRx=INT(N)
    且分數部分滿足下列公式:
    UCBRSx=round[(N-INT(N))×8]
    設置波特率程序如下:
    division_factor=f_smclk/(Baudrate*1.0);
    UCA0BR0=(int)division_factor;
    UCA0BR1=((int)division_factor)>>8;
    UCA0MCTL"=(int)((division_factor_(int)division_factor)*8);

5 方案驗證
    如方案3所述,先測出串口時鐘源的當前頻率,再根據該頻率設置波特率寄存器及調整器的值。將修改后的程序下載到串口能通信和串口不能通信的多個設備進行驗證。通過示波器測試發現,被測設備的時鐘頻率存在差異,各設備之間的頻率不一定相同,同時發現串口的實際波特率與理論波特率一致,其表現形式為串口能正常通信。至此,方案3通過驗證,該方案可有效避免因串口時鐘源時鐘偏移導致不能通信的問題。

結語
    實踐證明,計算出內部時鐘經過倍頻后的高頻時鐘,再根據該時鐘頻率設置串口波特率的方法可行。該方法從純軟件的角度有效地解決了單片機內部時鐘頻率不穩定,單片機因環境溫度、氣壓、電磁等導致系統時鐘頻率偏差,以及單片機器件之間的差異性等因素導致串口通信失敗的問題。

? 江苏快3号码表