2016年8月8日 星期一

DIY - PIC24:通用非同步收發器 UART 中斷(三十六)

DIY - PIC24:通用非同步收發器 UART 中斷(三十六): 

PIC24FJ64GA008 通用非同步收發器 UART 收發程式程式來使用查詢方式訪問/輪詢(Polling)接收 UART 數據資料是最簡單,但缺點是要 MCU 要週期性檢查 UART 狀態,然後取得數據資料來作出需要的服務,不能夠當 UART 需要時馬上作出服務,浪費許多時間在訪問/輪詢(Polling)上面。而利用中斷(Interrupt)機制,當一個 UART 需要服務時,會發出中斷請求訊號來通知 MCUMCU 便會根據中斷的優先次序作出處理,當完成中斷程式後,便會返回中斷之前的程式繼續執行。

MCU 中斷(Interrupt)機制
PIC MCU 中斷(Interrupt)機制
UART 發送 (Transmitter)方塊圖
UART 發送中斷 (Transmit Interrupt):
發送中斷標誌(UxTXIF)位於相應的中斷標誌狀態(IFS)寄存器中。UTXISEL <1:0>控制位(UxSTA<15>)決定 UART 將何時產生一個發送中斷。 
aUTXISEL<1:0>=00,當一個字元從發送緩衝器傳輸到發送移位寄存器(UxTSR)時,UxTXIF 被置 1。這暗示發送緩衝器中至少有一個單元為空。
bTXISEL<1:0>=01,當最後一個字元移出發送移位寄存器(UxTSR)時,UxTXIF 被置 1。這表示所有發送操作都已完成。
cUTXISEL<1:0>=10,當一個字元傳輸到發送移位寄存器(UxTSR)且發送緩衝器為空時,UxTXIF 被置 1

當模組第一次使能時,UxTXIF 位將被置 1。用戶應該在 ISR 中清零 UxTXIF 位。運行時可以在兩種中斷模式間切換。 

UxTXIF 標誌位元指示 UxTXREG 寄存器的狀態,而 TRMT 位元(UxSTA<8>)表明 UxTSR 的狀態。TRMT 狀態位元是唯讀位元,當 UxTSR 寄存器為空時被置 1。因為沒有與此位元關聯的中斷邏輯,所以用戶必須查詢此位以判斷 UxTSR 是否為空。

UART 接收 (Receiver)方塊圖
UART 接收中斷(Receive Interrupt): 
UART 接收中斷標誌(UxRXIF)位於相應的中斷標誌狀態(IFS)寄存器中。URXISEL<1:0>UxSTA<7:6>)控制位決定 UART 接收器何時將產生一個中斷。 
a如果 URXISEL<1:0> = 0001,每當一個資料字從接收移位寄存器(UxRSR)傳輸到接收緩衝器後,就會產生中斷。接收緩衝器中可以有一個或多個字元。
b如果 URXISEL<1:0> = 10,當一個字從接收移位寄存器(UxRSR)傳輸到接收緩衝器時就會產生中斷,其結果是接收緩衝器中有 3 4個字元。 
c如果 URXISEL<1:0> = 11,當一個字從接收移位寄存器(UxRSR)傳輸到接收緩衝器時就會產生中斷,其結果是接收緩衝器中有4個字元(即,緩衝器滿)。運行時可以在三種中斷模式間切換。
 
URXDA UxRXIF 標誌位元指示 UxRXREG 寄存器的狀態,而 RIDLE 位元(UxSTA<4>)表明 UxRSR 寄存器的狀態。RIDLE 狀態位元是唯讀位元,在接收器空閒時(即,UxRSR 寄存器為空)時被置 1。因為沒有與此位元關聯的中斷邏輯,所以用戶必須查詢此位以判斷 UxRSR 是否空閒。URXDA 位(UxSTA<0>)指示接收緩衝器有資料還是為空。只要接收緩衝器中至少有一個可以讀出的字元,該位元就將置 1URXDA 是唯讀位。

PIC24FJ64GA008 MCU UART 模塊相關的寄存器
2016年 8月 8日 天氣報告
氣溫:29.3@ 20:50
相對濕度:百分之 79%
天氣:多雲

沒有留言:

張貼留言