Quantcast
Channel: Microchip Taiwan :: 論壇
Viewing full articles (4647 articles)
Browse article index
↧

Re: PIC32MX370F512L UART1 TX flag 清除無效 [發表者 Ryang]

$
0
0
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 ,但原理事一樣的。


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;        // 啟動傳輸中斷
}
↧

Viewing full articles (4647 articles)
Browse article index

Latest Images

Trending Articles



Latest Images