在 PIC24FJ64GA008 通用非同步收發器 UART 收發程式程式來使用查詢方式訪問/輪詢(Polling)接收 UART 數據資料是最簡單,但缺點是要 MCU 要週期性檢查 UART 狀態,然後取得數據資料來作出需要的服務,不能夠當 UART 需要時馬上作出服務,浪費許多時間在訪問/輪詢(Polling)上面。而利用中斷(Interrupt)機制,當一個 UART 需要服務時,會發出中斷請求訊號來通知 MCU,MCU 便會根據中斷的優先次序作出處理,當完成中斷程式後,便會返回中斷之前的程式繼續執行。
MCU 中斷(Interrupt)機制 |
PIC MCU 中斷(Interrupt)機制 |
UART 發送 (Transmitter)方塊圖 |
發送中斷標誌(UxTXIF)位於相應的中斷標誌狀態(IFS)寄存器中。UTXISEL <1:0>1:0>控制位(UxSTA<15>15>)決定 UART 將何時產生一個發送中斷。
a)UTXISEL<1:0>=001:0>,當一個字元從發送緩衝器傳輸到發送移位寄存器(UxTSR)時,UxTXIF 被置 1。這暗示發送緩衝器中至少有一個單元為空。
b)TXISEL<1:0>=011:0>,當最後一個字元移出發送移位寄存器(UxTSR)時,UxTXIF 被置 1。這表示所有發送操作都已完成。
c)UTXISEL<1:0>=101:0>,當一個字元傳輸到發送移位寄存器(UxTSR)且發送緩衝器為空時,UxTXIF 被置 1。
當模組第一次使能時,UxTXIF 位將被置 1。用戶應該在 ISR 中清零 UxTXIF 位。運行時可以在兩種中斷模式間切換。
UxTXIF 標誌位元指示 UxTXREG 寄存器的狀態,而 TRMT 位元(UxSTA<8>8>)表明 UxTSR 的狀態。TRMT 狀態位元是唯讀位元,當 UxTSR 寄存器為空時被置 1。因為沒有與此位元關聯的中斷邏輯,所以用戶必須查詢此位以判斷 UxTSR 是否為空。
UART 接收 (Receiver)方塊圖 |
UART 接收中斷(Receive
Interrupt):
UART 接收中斷標誌(UxRXIF)位於相應的中斷標誌狀態(IFS)寄存器中。URXISEL<1:0>1:0>(UxSTA<7:6>7:6>)控制位決定 UART 接收器何時將產生一個中斷。
a)如果 URXISEL<1:0> = 001:0> 或 01,每當一個資料字從接收移位寄存器(UxRSR)傳輸到接收緩衝器後,就會產生中斷。接收緩衝器中可以有一個或多個字元。
b)如果 URXISEL<1:0> = 101:0>,當一個字從接收移位寄存器(UxRSR)傳輸到接收緩衝器時就會產生中斷,其結果是接收緩衝器中有 3 或 4個字元。
c)如果 URXISEL<1:0> = 111:0>,當一個字從接收移位寄存器(UxRSR)傳輸到接收緩衝器時就會產生中斷,其結果是接收緩衝器中有4個字元(即,緩衝器滿)。運行時可以在三種中斷模式間切換。
UART 接收中斷標誌(UxRXIF)位於相應的中斷標誌狀態(IFS)寄存器中。URXISEL<1:0>1:0>(UxSTA<7:6>7:6>)控制位決定 UART 接收器何時將產生一個中斷。
a)如果 URXISEL<1:0> = 001:0> 或 01,每當一個資料字從接收移位寄存器(UxRSR)傳輸到接收緩衝器後,就會產生中斷。接收緩衝器中可以有一個或多個字元。
b)如果 URXISEL<1:0> = 101:0>,當一個字從接收移位寄存器(UxRSR)傳輸到接收緩衝器時就會產生中斷,其結果是接收緩衝器中有 3 或 4個字元。
c)如果 URXISEL<1:0> = 111:0>,當一個字從接收移位寄存器(UxRSR)傳輸到接收緩衝器時就會產生中斷,其結果是接收緩衝器中有4個字元(即,緩衝器滿)。運行時可以在三種中斷模式間切換。
URXDA 和 UxRXIF 標誌位元指示 UxRXREG 寄存器的狀態,而 RIDLE 位元(UxSTA<4>4>)表明 UxRSR 寄存器的狀態。RIDLE 狀態位元是唯讀位元,在接收器空閒時(即,UxRSR 寄存器為空)時被置 1。因為沒有與此位元關聯的中斷邏輯,所以用戶必須查詢此位以判斷 UxRSR 是否空閒。URXDA 位(UxSTA<0>0>)指示接收緩衝器有資料還是為空。只要接收緩衝器中至少有一個可以讀出的字元,該位元就將置 1。URXDA 是唯讀位。
PIC24FJ64GA008 MCU UART 模塊相關的寄存器 |
2016年 8月 8日 天氣報告
氣溫:29.3度 @ 20:50
相對濕度:百分之 79%
天氣:多雲
沒有留言:
張貼留言