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波特率發生才能工作。
小結UART驅動過程
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.