【轉】串口發送中斷的概念


串口中斷方式的發送過程是怎么回事?

 

有人問過這個問題

    “用串口中斷接收比較好理解,只要接收緩存接收到數據,標志位就會置位,然后進入中斷服務程序讀取接收緩存中的數據,但是在發送時,應該是在數據發送出去之后發送標志位才會置位(我是msp430單片機),那么此時等數據發送出去之后進入中斷又有什么意義呢?到底如何通過串口中斷來發送數據呢?”

     通過閱讀 STM32 官方庫的代碼,我找到了答案。

     中斷發送方式的基本過程是:每發送一個字節,該字節發送完畢引發中斷,中斷處理程序再發送下一個字節……直到發送完成。

     這里有兩個細節問題需要注意:

  1. 第一個字節是怎樣發送的?因為發第一個字節之前,並沒有發送字節完成所觸發的中斷,那第一個字節怎么被發送出去?這關系到中斷在硬件層面的觸發方式:如果是電平觸發的中斷,在中斷式發送函數中會使能相應的中斷,因為發送緩沖區為空,其所處的電平狀態就在中斷功能被使能后會直接觸發中斷,導致第一個字節在中斷處理函數中被發送出去;如果是電平跳變觸發的中斷,為了引發中斷,只好把第一個字節在中斷式發送函數中“手動”發送出去,由此引發一個中斷的“多米諾”效應,把后面的字節依次發送出去。參考:https://www.lpcware.com/content/forum/uart-tx-interrupt-should-i-put-least-one-byte-tx-fifo
  2. 怎么才算“完成”?完成是用參數指定的欲發送字節數決定的,但發送達到指定數目,中斷處理函數中就失能相應中斷,於是中斷的“多米諾”鏈條停止。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM