NXP LPC55S06 USART 章節介紹及基本程式範例

  • USART 簡介

1. USART 全名為 Universal Synchronous Asynchronous Receiver Transmitter ,又稱 通用同步非同步收發傳輸器。
2. 通用非同步收發傳輸器 ( UART ),需要 Start、Stop bit 表示設備間的傳輸狀態。 通用同步收發傳輸器 ( USART ),額外透過 CLK 訊號讓設備與設備之間,進行傳輸接收訊號同步的效果,可節省掉Start、Stop bit,因此能夠更快速的傳遞資料。
3. 於一般的串列傳輸應用中。傳輸單位為鮑率 ( bps ),旨每秒可傳輸的位元資料。
4. UART 格式含義如下:
    a. 起始位:發送 1 位邏輯 0(低電平),開始傳輸數據。
    b. 數據位:先發LSB。
    c. 校驗位:奇偶校驗。校驗位元 0 為偶數校驗 ,1 為奇數校驗。由資料中的邏輯高位總計判斷應為偶 / 奇數。
    d. 停止位:停止位是數據傳輸結束的標誌,可以是 1 或 2 位的邏輯 1(高電平)。
    e. 空閒位:空閒時數據線爲高電平狀態,代表無數據傳輸。

    
    ( 圖 1 )

  • 過採樣 ( Oversampling )

1. LPC55S06 可選擇 5 ~ 16 的過採樣時鐘,其採樣方式是由中間開始,抓中間 3 個確認 bit 的狀態。如圖 2 所示,是一個 16 次的採樣。
    
    ( 圖 2 )

2. 如果在第一次採樣 ( 第3、5、7 採樣點 ) 都收集到0,而且第二次採樣 ( 第 8、9、10 採樣點 ) 也是都收集到 0,則認定已經偵測到 start bit
    
    ( 圖 3 )

  • 鮑率 & 容錯率計算

1. 如圖 4,根據 UM11424.pdf 文件說明,可得 Baud rate 的推導公式: baud rate = [FCLK / (OSRVAL+1)] / (BRGVAL + 1)

    
    ( 圖 4 )
    
    
    ( 圖 5 )

    
    ( 圖 6 )

2. Baud rate 計算範例
    
舉例來說 : FCLK 是 12 MHz,預設 baud rate 需求是 115200,取 16 次的採樣即 OSRVAL 為 0xF ( 15 ),
    依第 1 點公式可知 BRGVAL = {[FCLK / (OSRVAL+1) / baud rate} - 1,即 {[12 MHz / (15+1)] / 115200}-1 = 6.5,
    然而將 BRGVAL 取整數代入暫存器的參數便為 6,可得一 baud rate = [12 MHz/ (15+1)] / (6 + 1) = 107142,此時和預設 baud rate 115200 速率誤差為 7%
    當調整成 13 次的採樣則 OSRVAL 為 0xC ( 12 ),得到的 baud rate 為 115,385,便可獲得和預設 baud rate 115200 最小的速率誤差 0.16%

  • ERROR issue

1. 噪音錯誤 ( Noise error ) : 依採樣數的中間取樣值 3 次是否為相同數值,如果三次偵測不為相同值「000」、「111」即表示有誤。
2. 溢出錯誤 ( Overrun error ) : 如果上一筆資料還在 Receiver Data Register 中,此時又接收到一筆新資料,資料無法從 Received shift register 轉入 Receiver Data Register ,則會發生溢出錯誤。
3. Frame 錯誤 ( Frame error ) : 通常發生於傳輸端、接收端沒有同步、或傳輸線路上有大量的噪音,導致 stop 位元沒有在預期的時間內被識別出來發生錯誤。

  • 奇偶檢測 ( Parity error ) : 是用來確保傳輸資料的正確性。

1. 偶數校驗,將資料內 1 數量加總是偶數則為邏輯 0。
2. 奇數校驗,將資料內 1 數量加總是奇數則為邏輯 1。

  • 全雙功與半雙功

1. 半雙工 : 允許二台裝置之間,進行雙向資料傳輸,但不能同時進行。
2. 全雙工 : 使用兩線式達成讀寫,數據可同時進行讀寫,沒有操作上的時間延遲。

    
    ( 圖 7 )

  • LPC55S06 USART 特徵

1. 7、8 或9 個數據位和1 或2 個停止位。
2. RS-485 收發器輸出使能。
3. 奇偶校驗生成和校驗:奇數、偶數或無。
4. 軟件可選擇在異步模式下從 5 到 16 個時鐘進行過採樣。
5. 一個發送和一個接收數據緩衝區。
6. USART 功能支持單獨的發送和接收FIFO,每個FIFO 有16 個條目。

7. 中斷生成和檢測。 中斷可用於達到 FIFO 接收電平、達到 FIFO 發送電平、FIFO 上溢或下溢、發送器空閒、接收器中斷檢測變化、幀錯誤、奇偶校驗錯誤、Delta CTS 檢測和接收器樣本噪聲檢測。
8. 內置波特率發生器。
9. USART 發送和接收功能可以與系統DMA 控制器一起操作。

  • Flexcomm interface

1. 每個 Flexcomm 接口都提供了外設功能的選擇,用戶必須先選擇其中一個,然後才能配置和使用該功能。
    a. 具有異步操作或同步主機或從機操作的USART。
    b. SPI 主機或從機,最多有四個從機選擇。
    c. I2C,包括獨立的主機、從機和監控功能。
    d. I2S 主機或從機。 支持單 I2S 通道。
    e. USART、SPI 和I2S 流量的數據使用Flexcomm 接口FIFO。 I2C 功能不使用 FIFO。

    
    ( 圖 8 )

  • UART 基本程式範例

1. 啟動 Flexcomm ,透過 AHB 開啟 Flexcomm 模塊 clock,並重置 Flexcomm 模塊

    
    ( 圖 9 )

2. 透過 SYSCON 設定 FCCLKSEL 暫存器將 Flexcomm clock 來源為 FRO 12 MHz。設置 FLEXFRGCTRL 除頻器為 1 使 FCCLK 為 12 MHz

    
    ( 圖 10 )

    
    ( 圖 11 )

    
    ( 圖 12 )

    
    ( 圖 13 )

3. 初始化 USART 來選擇相關模式並開啟。此以 "非同步收發傳輸器,傳送長度為 8 bit 及 1 stop bit,無效驗檢測" 為範例

    
    ( 圖 14 )

   

    

    
    ( 圖 15 )

4. 設定 Baud rate 參數。經過計算,使用最小誤差值 0.16%,可得到 BRGVAL 是 0x7 和 OSRVAL 是 0xC 並將其代入對應暫存器

    
    ( 圖 16 )

5. 設定 FIFO,使 USART 透過 FIFO buffer 做 TX 和 RX 的發送與接收,並在發送和接收之前清除 TX 和 RX 異常錯誤以避免資料錯誤

    
    ( 圖 17 )

    
    ( 圖 18 )

    
    ( 圖 19 )

6. 此以 UART TX 發送字串為例。將字串的第一筆資料寫入 FIFOWD 後即發送,等待發送後再做下一筆的發送,直到字串結束

    
    ( 圖 20 )

  • 以示波器量測實際執行 USART 發送過程

1. Txdata 字串為 Hello,對應 hex code 是 48, 65, 6C, 6C, 6F,對比示波器波形同為 48, 65, 6C, 6C, 6F,USART 發送正確。

    
    ( 圖 21 )


參考資料
LPC55S0x/LPC550x Preliminary data sheet (nxp.com)
LPC55S0x/LPC550x User manual (nxp.com)

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論