2016年8月3日 星期三

DIY - PIC24:通用非同步收發器 UART 發送器(三十二)

DIY - PIC24:通用非同步收發器 UART 發送器(三十二): 

Microchip PIC24FJ64GA008 內通用非同步收發器(Universal Asynchronous Receiver TransmitterUART)的發送器是用作發送數據,發送器的核心是發送移位寄存器(UxTSR)。移位寄存器從發送 FIFOFirst-In, First-Out)緩衝器 UxTXREG 獲取資料,UxTXREG 寄存器中的資料由軟體寫入,在前一次裝入資料的停止位元發送前,不會向 UxTSR 寄存器裝入新資料。一旦停止位元發送完畢,UxTXREG 寄存器中的新資料(如果有)就會被裝入 UxTSR

PIC24FJ64GA008 UART 發送器框圖
通過將 UTXEN 使能位(UxSTA<10>)置1來使能發送,實際的發送要到 UxTXREG 寄存器裝入了資料並且串列傳輸速率發生器(UxBRG)產生了移位元時鐘後才發生,還可以先裝入 UxTXREG 寄存器,然後將 UTXEN 使能位置1來啟動發送。通常,第一次開始發送的時候,由於 UxTSR 寄存器為空,這樣傳輸資料到 UxTXREG 寄存器會導致該資料立即傳輸到 UxTSR,發送過程中清零 UTXEN 位將使發送中止並復位發送器。因此,UxTX 引腳將回復到一個高阻抗狀態。

為了選擇 9位發送,PDSEL<1:0> 位(UxMODE<2:1>)應設置為 11並且第 9位應該寫入 UTX8 位(UxTXREG<8>),應該向 UxTXREG 執行一個字寫操作,這樣可以同時寫入所有的 9位。
發送緩衝器(UxTXREG):發送緩衝器有 9位寬和 4級深。算上發送移位寄存器(UxTSR),用戶實際有一個5級深的緩衝器。它按先進先出(FIFO)的方式組織。一旦 UxTXREG 的內容被傳送到UxTSR寄存器,當前緩衝單元就可以寫入新的資料,下一個緩衝單元將成為 UxTSR 寄存器的資料源。無論何時,只要緩衝器滿了,UTXBFUxSTA<9>)狀態位元就會置1。如果用戶試圖向已經滿的緩衝器執行寫操作,則新資料將不會被 FIFO 接收。
FIFO 在任何器件復位時復位,但當器件進入省電模式或從省電模式喚醒時,FIFO 不受影響。

設置發送時應該遵循的步驟: 
1UxBRG 寄存器進行初始化,設置合適的串列傳輸速率(設置 “UART 串列傳輸速率發生器(BRG)”)。 
2通過寫 PDSEL<1:0>UxMODE<2:1>)和STSELUxMODE<0>)位元來設置資料位元數、停止位元數和奇偶校驗選擇。
3如果需要發送中斷,就要將相應的中斷允許控制寄存器(IEC)中的 UxTXIE 控制位置 1。使用相應的中斷優先順序控制寄存器(IPC)中的 UxTXIP<2:0> 控制位來指定發送中斷的中斷優先順序。同時,通過寫 UTXISEL<1:0>UxSTA<15>)位元來選擇發送中斷模式。 
4通過清零 UARTENUxMODE<15>)位元來使能 UART 模組。
5通過將 UTXENUxSTA<10>)置 1來使能發送,與此同時將 UxTXIF 位置 1。在 UART 發送中斷服務程式中,UxTXIF 位元應該清零。UxTXIF 位的操作由 UTXISEL<1:0> 控制位控制。 
6將資料裝入 UxTXREG 寄存器(開始發送)。如果選擇了 9位發送,則裝入一個字。如果使用了 8位發送,則裝入一個位元組。資料可以裝入緩衝器,直到 UTXBF 狀態位元(UxSTA<9>)被置 1為止。

PIC24FJ64GA008 UART發送器時序
2016年 8月 3日 天氣報告
氣溫:27.5@ 20:10
相對濕度:百分之 92%
天氣:微雨

沒有留言:

張貼留言