Nucleo ボードの USB コネクタに対応するシリアルポート受送信割込みで,複数のキャラクタ受送信をサポ-トするクラス. このライブラリを登録した際のプログラム: Demo_F446_AD_DA_Ctrl.
Dependents: F446_FunctionGenerator F446_UpSampling_GraphicEqualizer F446_UpSampling_ReverbSystem F446_UpSampling_FrqShifter_Weaver ... more
Diff: SerialTxIntr.cpp
- Revision:
- 4:fb847a82f735
- Parent:
- 0:6b652858f92d
- Child:
- 5:151d281afa55
--- a/SerialTxIntr.cpp Fri Sep 07 12:55:52 2018 +0000 +++ b/SerialTxIntr.cpp Tue Sep 18 00:13:29 2018 +0000 @@ -4,41 +4,44 @@ // // ボーレートのデフォルト値は 9,600 boud // -// 2018/05/29, Copyright (c) 2018 MIKAMI, Naoki +// 2018/09/18, Copyright (c) 2018 MIKAMI, Naoki //------------------------------------------------------------- #include "SerialTxIntr.hpp" -// コンストラクタ -SerialTxIntr::SerialTxIntr(Serial &tx) : tx_(tx) -{ - tx_.attach(callback(this, &SerialTxIntr::TxIsr), Serial::TxIrq); -} - -// 送信データ書き込み -void SerialTxIntr::TxWrite(char c) +namespace Mikami { - USART2->CR1 &= ~USART_CR1_TXEIE; // 送信割込み禁止 - // 送信レジスタ (DR) が空でかつ送信バッファが空かどうか調べる - if ( que_.empty() && // 両者が空の場合 - ((USART2->SR && USART_SR_TXE_Msk) == USART_SR_TXE) ) - USART2->DR = c; // 送信レジスタにデータを書き込む - else // 少なくとも一方が空ではない場合 - que_.push(c); // 送信バッファにデータを格納 - USART2->CR1 |= USART_CR1_TXEIE; // 送信割込み許可 -} + // コンストラクタ + SerialTxIntr::SerialTxIntr(Serial &tx) : tx_(tx) + { + tx_.attach(callback(this, &SerialTxIntr::TxIsr), Serial::TxIrq); + } -// シリアルポート送信割込みサービスルーチン -void SerialTxIntr::TxIsr() -{ - if (!que_.empty()) + // 送信データ書き込み + void SerialTxIntr::TxWrite(char c) { - USART2->DR = que_.front(); // 送信用バッファから取り出したデータを送信レジスタへ書き込む - que_.pop(); // 先頭のデータを消去 + USART2->CR1 &= ~USART_CR1_TXEIE; // 送信割込み禁止 + // 送信レジスタ (DR) が空でかつ送信バッファが空かどうか調べる + if ( que_.empty() && // 両者が空の場合 + ((USART2->SR && USART_SR_TXE_Msk) == USART_SR_TXE) ) + USART2->DR = c; // 送信レジスタにデータを書き込む + else // 少なくとも一方が空ではない場合 + que_.push(c); // 送信バッファにデータを格納 + USART2->CR1 |= USART_CR1_TXEIE; // 送信割込み許可 } - else - USART2->CR1 &= ~USART_CR1_TXEIE; // 送信割込み禁止 + + // シリアルポート送信割込みサービスルーチン + void SerialTxIntr::TxIsr() + { + if (!que_.empty()) + { + USART2->DR = que_.front(); // 送信用バッファから取り出したデータを送信レジスタへ書き込む + que_.pop(); // 先頭のデータを消去 + } + else + USART2->CR1 &= ~USART_CR1_TXEIE; // 送信割込み禁止 + } + + // static メンバの実体の宣言/初期化 + queue<char> SerialTxIntr::que_; } - -// static メンバの実体の宣言/初期化 -queue<char> SerialTxIntr::que_;