Nucleo ボードの USB コネクタに対応するシリアルポート受送信割込みで,複数のキャラクタ受送信をサポ-トするクラス.   このライブラリを登録した際のプログラム: Demo_F446_AD_DA_Ctrl.

Dependents:   F446_FunctionGenerator F446_UpSampling_GraphicEqualizer F446_UpSampling_ReverbSystem F446_UpSampling_FrqShifter_Weaver ... more

Revision:
13:deeef404ff49
Parent:
11:7f5b88c8bd6a
--- a/SerialTxIntr.cpp	Mon Jan 27 07:43:38 2020 +0000
+++ b/SerialTxIntr.cpp	Wed Feb 05 08:45:08 2020 +0000
@@ -2,50 +2,48 @@
 //  Nucleo ボードの USB コネクタに対応するシリアルポート送信割込みで
 //  キャラクタの送信をサポ-トするクラス
 //
-//  ボーレートのデフォルト値は 9,600 boud
-//
-//  2020/01/27, Copyright (c) 2020 MIKAMI, Naoki
+//  2020/02/05, Copyright (c) 2020 MIKAMI, Naoki
 //-------------------------------------------------------------
 
 #include "SerialTxIntr.hpp"
 
 namespace Mikami
 {
-	// コンストラクタ
-	SerialTxIntr::SerialTxIntr(Serial &tx) : tx_(tx), USART_(USART2)
-	{
-    	tx_.attach(callback(this, &SerialTxIntr::TxIsr), Serial::TxIrq);
-	}
+    // コンストラクタ
+    SerialTxIntr::SerialTxIntr(Serial &tx) : tx_(tx), USART_(USART2)
+    {
+        tx_.attach(callback(this, &SerialTxIntr::TxIsr), Serial::TxIrq);
+    }
     
-	// 送信データ書き込み
-	void SerialTxIntr::TxWrite(char c)
-	{
-    	USART_->CR1 &= ~USART_CR1_TXEIE;    // 送信割込み禁止
-	    // 送信レジスタ (DR) が空でかつ送信バッファが空かどうか調べる
-    	if ( que_.empty() &&    // 両者が空の場合
-        	 ((USART_->SR && USART_SR_TXE_Msk) == USART_SR_TXE) )    
-	        Write(c);                 		// 送信レジスタにデータを書き込む
-    	else                                // 少なくとも一方が空ではない場合
-        	que_.push(c);                   // 送信バッファにデータを格納
-	    USART_->CR1 |= USART_CR1_TXEIE;     // 送信割込み許可
-	}
+    // 1文字の送信
+    void SerialTxIntr::TxChar(char c)
+    {
+        DisableTxIntr();                    // 送信割込み禁止
 
-	// 文字列の送信
+        // 送信レジスタ (TDR) が空でかつ送信バッファが空かどうか調べる
+        if ( que_.empty() && IsTdrEmpty() ) // 両者が空の場合
+            WriteTDR(c);                    // 送信レジスタにデータを書き込む
+        else                                // 少なくとも一方が空ではない場合
+            que_.push(c);                   // 送信バッファにデータを格納
+
+        EnableTxIntr();                     // 送信割込み許可
+    }
+
+    // 文字列の送信
     void SerialTxIntr::TxString(string str)
     {
-    	for (int n=0; n<str.size(); n++)
-    		TxWrite(str[n]);
+        for (int n=0; n<str.size(); n++) TxChar(str[n]);
     }
     
-	// シリアルポート送信割込みサービスルーチン
-	void SerialTxIntr::TxIsr()
-	{
-	    if (!que_.empty())
-    	{
-        	Write(que_.front());	// 送信用バッファから取り出したデータを送信レジスタへ書き込む
-	        que_.pop();             // 先頭のデータを消去
-    	}
-	    else
-    	    USART_->CR1 &= ~USART_CR1_TXEIE;    // 送信割込み禁止
-	}
+    // シリアルポート送信割込みサービスルーチン
+    void SerialTxIntr::TxIsr()
+    {
+        if (!que_.empty())
+        {
+            WriteTDR(que_.front()); // 送信用バッファから取り出したデータを TDR へ書き込む
+            que_.pop();             // 先頭のデータを消去
+        }
+        else
+            DisableTxIntr();        // 送信割込み禁止
+    }
 }
\ No newline at end of file