2016年8月2日 星期二

DIY - PIC24:通用非同步收發器 UART 波特率(三十一):

DIY - PIC24:通用非同步收發器 UART 波特率(三十一): 

PIC24FJ64GA008 內置通用非同步收發器(Universal Asynchronous Receiver TransmitterUART)要作有效數據信號傳輸時,需要傳送和接收相方有共同的傳輸速率,才可以作無錯誤數據的交換,而這個傳輸速率是稱為波特率/鮑率(Baud RateBaud per second),單位是鮑(Baud,單位符號:Bd),1鮑即指每秒傳輸 1個符號,典型的波特率/鮑率是 30012002400 960019200115200等。

通用非同步收發器的波特率/鮑率(Baud RateBaud per second
PIC24FJ64GA008 MCU UART 波特率(BRG = 1
UART 波特率(Baud Rate)發生器(BRG): 
UART 模組包含一個專用的 16位元波特率發生器。UxBRG 寄存器控制一個自由運的 16位計時器的週期。公式給出了 BRGH = 0 時計算波特率的公式。


例:給出了如下條件下的串列傳輸速率誤差計算:
FCY = 4 MHz  
•目標波特率 = 9600

能得到的最大波特率(BRGH = 0)是 FCY/16UxBRG=0時),最小波特率是 FCY/(16 * 65536)。公式給出了 BRGH = 1 時計算波特率的公式 

最大波特率(BRGH = 1)是 FCY/4UxBRG=0時),最小波特率是 FCY/(4 * 65536)。向 UxBRG 寄存器寫入新值會使 BRG 計時器復位(清零)。這可以確保 BRG 無需等待計時器溢出就可以產生新的波特率。

自動波特率支援:
要允許系統確定所接收字元的波特率,可以使能 ABAUD 位。如果使能自動波特率檢測(ABAUD=1),則在接收到啟動位時,UART 會開始自動波特率測量序列。波特率計算採用自平均的方式。該功能只有在禁止自動喚醒(WAKE=0)時才有效。此外,對於自動波特率操作,LPBACK 必須等於0ABAUD1後,BRG 計數器值將被清零,並開始檢測一個啟動位;在此時,啟動位規定為高電平到低電平變換後跟隨一個低電平到高電平變換。

在啟動位元之後,自動波特率功能需要接收一個 ASCII U”(55h),以計算相應的位元速率。為了儘量減少輸入信號不對稱造成的影響,測量時段內要包含一個高位和一個低位元時間。在啟動位(上升沿)結束時,BRG 計數器開始使用 TCY/8 時鐘計數。在第 5UxRX 引腳上升沿,統計相應 BRG 總週期數的累計 BRG 計數器值被傳送到 UxBR 寄存器。ABAUD 位被自動清零。如果用戶在序列完成之前清零 ABAUD位,則可能導致意外的模組行為。關於 ABD 序列的資訊,請參見下圖。


2016年 8月 2日 天氣報告
氣溫:26.1@ 12:50
相對濕度:百分之 86%
天氣:雨
※ 香港天文台於 2016年 08月 02日 12時 40分三號熱帶氣旋警告信號現正生效。 

沒有留言:

張貼留言