Nucleo ボードの USB コネクタに対応するシリアルポート受送信割込みで,複数のキャラクタ受送信をサポ-トするクラス. このライブラリを登録した際のプログラム: Demo_F446_AD_DA_Ctrl.
Dependents: F446_FunctionGenerator F446_UpSampling_GraphicEqualizer F446_UpSampling_ReverbSystem F446_UpSampling_FrqShifter_Weaver ... more
SerialTxIntr.cpp
- Committer:
- MikamiUitOpen
- Date:
- 2021-04-12
- Revision:
- 14:268977533f95
- Parent:
- 13:deeef404ff49
File content as of revision 14:268977533f95:
//------------------------------------------------------------- // Nucleo ボードの USB コネクタに対応するシリアルポート送信割込みで // キャラクタの送信をサポ-トするクラス // // 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); } // 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++) TxChar(str[n]); } // シリアルポート送信割込みサービスルーチン void SerialTxIntr::TxIsr() { if (!que_.empty()) { WriteTDR(que_.front()); // 送信用バッファから取り出したデータを TDR へ書き込む que_.pop(); // 先頭のデータを消去 } else DisableTxIntr(); // 送信割込み禁止 } }