32-bit PIC (請註明使用的元件標號):: PIC32MX370F512L UART1 TX flag 清除無效
UART 的接收,建議一定要用中斷接收方式。
但 UART 的傳送? 對初學者來說建議不要使用中斷傳送模式。
因為 TXIF 只要 Tx FIFO 一有空位就會設成 1 進入中斷模式要你將下一個資料填進 Tx FIFO 裡做資料的傳送。
注意: TXIF 並不是指資料已經傳送完畢才設成 1 的,TXIF 是代表我有空位可以將資料傳給 Tx 的 FIFO 。
如果要採用中斷方式來傳送資料,你必須建立一個 Ring-Buffer 的資料結構,先將資料填到 Ring-Buffer 後再啟動 TXIE做中斷的傳輸。
底下程式摘自教育訓練: MCC201 v1.00 MPLAB Code Configurator New! 的 Page 134 :euasrt1.c 傳送程式解說
範例是用 PIC18F45K22 ,但原理事一樣的。
UART 的接收,建議一定要用中斷接收方式。
但 UART 的傳送? 對初學者來說建議不要使用中斷傳送模式。
因為 TXIF 只要 Tx FIFO 一有空位就會設成 1 進入中斷模式要你將下一個資料填進 Tx FIFO 裡做資料的傳送。
注意: TXIF 並不是指資料已經傳送完畢才設成 1 的,TXIF 是代表我有空位可以將資料傳給 Tx 的 FIFO 。
如果要採用中斷方式來傳送資料,你必須建立一個 Ring-Buffer 的資料結構,先將資料填到 Ring-Buffer 後再啟動 TXIE做中斷的傳輸。
底下程式摘自教育訓練: MCC201 v1.00 MPLAB Code Configurator New! 的 Page 134 :euasrt1.c 傳送程式解說
範例是用 PIC18F45K22 ,但原理事一樣的。
void EUSART1_Write(uint8_t txData)
{
while(0 == eusart1TxBufferRemaining) // 檢查 Tx Ring Buffer 是否還有暫存資料
{ // 沒有,在這裡輸入您的程式
}
if (0 == PIE1bits.TX1IE) // 中斷傳輸模式是否開啟?
{
TX1REG = txData; // 沒有使用中斷模式傳輸,送出傳輸資料,
} // 這裡沒有做TX Busy 的檢查,所以呼叫者要做
else
{ // 使用中斷傳輸模式
PIE1bits.TX1IE = 0;
eusart1TxBuffer[eusart1TxHead++] = txData; // 資料寫到 Tx Ring Buffer 裡
if (sizeof(eusart1TxBuffer) <= eusart1TxHead) // 檢查索引值是否到頂了
{
eusart1TxHead = 0; // 索引值到頂,歸零
}
eusart1TxBufferRemaining--;
}
PIE1bits.TX1IE = 1; // 啟動傳輸中斷
}





