1. 程式人生 > >小結UART驅動過程

小結UART驅動過程

URAT工作流程:
1.配置傳送和接收口線資訊來實現訪問方式
  具體使用IO的埠及讀寫方式即配置GPIOx的PC0 PC1 PC2暫存器
2.開啟UART_CR中的RUN位開啟波特率發生器使UART啟用
3.配置佇列機制這個機制是接收和傳送公用的配置
  選擇關閉佇列機制即不使用FIFO中的其他15個數據矢能
  選擇開啟佇列機制則使用16個數據矢能在移位前可以儲存16位元組傳送或接收資料
  操作置或者清除UARTn_CR.Fifo Enable位來實現
4.清空佇列兩個接收和傳送佇列。
  寫UARTn_TxRSTR 和 UARTn_RxRSTR暫存器0xFFFF來實現
5.配置UART傳輸模式
  關閉LoopBack位,置零使用正常傳送和接收模式[LoopBack功能不詳]
6.配置資料傳輸的屬性包括髮送模式,波特率設定,奇偶校驗設定,停止位設定
  傳送模式配置UARTn_Mode[1.0]來配置7位8位+校驗等設定
  波特率設定:設定波特率UART_BR按照計算公式PCLK2/(16*設定波特率)
  奇偶檢驗設定: 設定UART_CR.ParityOdd為1或者0來表示奇或者偶
  停止位設定: UART_CR.StopBits[3.4]檢測停止位
  以上配置資訊均由ARM硬體封裝完成和51自行檢測不同 
7.配置傳送快取為空的檢測週期,用於產生TxEmpty標誌及必要的中斷
  UART_GTR.GuardTime[7.0]:裝載檢測週期數目。 
8.配置超時時間暫存器 用於產生TimeOut及必要的中斷
  UART_TOR.TimeOut[7.0]:確保在完成接收兩個位元組資料的間隔不超過此時間
9.配置接收允許位
  UART_CR.RxEnable來允許或者禁止接收功能
到此UART本身的基本配置已經完成
實現接受和傳送功能
1.非中斷採用輪尋傳送接受標誌位來實現
  實現過程不需要配置相應UART中斷的優先順序及中斷向量任何與UART有關的中斷資訊
  連續傳送資料只要判當年的FIFO屬性來決定相關裝入的時序。
  關閉FIFO則輪尋TxEmpty為空裝入,開啟佇列則輪尋佇列不滿時裝入資料
  接收由於不使用中斷必須死迴圈輪尋接收佇列不為空標誌位有資料則讀入
優缺點:似乎沒有什麼好處這種方法用出來不宕機已經大幸了,除非只是等待接受資料業務
       否則這種方法不可取。
2.中斷則使用觸發UART中斷分派UART相應具體中斷訊息分別處理
  需要設定EIC相應內容
  a.設定當前中斷向量優先順序配置EIC_SIR[向量]的私有優先順序資訊
  b.開啟EIC中UART中斷允許位設定EIC_IER0中斷相應向量的位
  c.設定具體UART觸發中斷的具體標誌位
    比如配置接收中斷位,則配置UARTn_IER.NotEmptyIE位
    表示一旦接收佇列有資料產生UARTn的中斷。使用某一功能時只開其中一箇中斷位
    以防止在產生中斷時無法準確分派相應中斷訊息。
    同樣可以配置傳送完成,接收超時等具體使用時有實際用處的中斷來使用。
優缺點:這樣不需要同步操作,CPU可以得到更多的空閒時間在執行其他操作
       只要在完成一次傳送或者接收或者其他操作時在中斷時處理,繼續執行主程式。
       程式不用等待可以非同步進行。很實用通用的做法。
      
PS:另外在程式執行使用UART時需要通過RCCU來配置主頻 外設一 外設二的頻率
   其程式及UART波特率發生才能工作。