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

Dependents:   F446_FunctionGenerator F446_UpSampling_GraphicEqualizer F446_UpSampling_ReverbSystem F446_UpSampling_FrqShifter_Weaver ... more

Committer:
MikamiUitOpen
Date:
Wed Feb 05 08:45:08 2020 +0000
Revision:
13:deeef404ff49
Parent:
11:7f5b88c8bd6a
14

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:6b652858f92d 1 //-------------------------------------------------------------
MikamiUitOpen 0:6b652858f92d 2 // Nucleo ボードの USB コネクタに対応するシリアルポート送信割込みで
MikamiUitOpen 0:6b652858f92d 3 // キャラクタの送信をサポ-トするクラス
MikamiUitOpen 0:6b652858f92d 4 //
MikamiUitOpen 13:deeef404ff49 5 // 2020/02/05, Copyright (c) 2020 MIKAMI, Naoki
MikamiUitOpen 0:6b652858f92d 6 //-------------------------------------------------------------
MikamiUitOpen 0:6b652858f92d 7
MikamiUitOpen 0:6b652858f92d 8 #include "SerialTxIntr.hpp"
MikamiUitOpen 0:6b652858f92d 9
MikamiUitOpen 4:fb847a82f735 10 namespace Mikami
MikamiUitOpen 0:6b652858f92d 11 {
MikamiUitOpen 13:deeef404ff49 12 // コンストラクタ
MikamiUitOpen 13:deeef404ff49 13 SerialTxIntr::SerialTxIntr(Serial &tx) : tx_(tx), USART_(USART2)
MikamiUitOpen 13:deeef404ff49 14 {
MikamiUitOpen 13:deeef404ff49 15 tx_.attach(callback(this, &SerialTxIntr::TxIsr), Serial::TxIrq);
MikamiUitOpen 13:deeef404ff49 16 }
MikamiUitOpen 0:6b652858f92d 17
MikamiUitOpen 13:deeef404ff49 18 // 1文字の送信
MikamiUitOpen 13:deeef404ff49 19 void SerialTxIntr::TxChar(char c)
MikamiUitOpen 13:deeef404ff49 20 {
MikamiUitOpen 13:deeef404ff49 21 DisableTxIntr(); // 送信割込み禁止
MikamiUitOpen 6:8084247806a4 22
MikamiUitOpen 13:deeef404ff49 23 // 送信レジスタ (TDR) が空でかつ送信バッファが空かどうか調べる
MikamiUitOpen 13:deeef404ff49 24 if ( que_.empty() && IsTdrEmpty() ) // 両者が空の場合
MikamiUitOpen 13:deeef404ff49 25 WriteTDR(c); // 送信レジスタにデータを書き込む
MikamiUitOpen 13:deeef404ff49 26 else // 少なくとも一方が空ではない場合
MikamiUitOpen 13:deeef404ff49 27 que_.push(c); // 送信バッファにデータを格納
MikamiUitOpen 13:deeef404ff49 28
MikamiUitOpen 13:deeef404ff49 29 EnableTxIntr(); // 送信割込み許可
MikamiUitOpen 13:deeef404ff49 30 }
MikamiUitOpen 13:deeef404ff49 31
MikamiUitOpen 13:deeef404ff49 32 // 文字列の送信
MikamiUitOpen 6:8084247806a4 33 void SerialTxIntr::TxString(string str)
MikamiUitOpen 6:8084247806a4 34 {
MikamiUitOpen 13:deeef404ff49 35 for (int n=0; n<str.size(); n++) TxChar(str[n]);
MikamiUitOpen 6:8084247806a4 36 }
MikamiUitOpen 4:fb847a82f735 37
MikamiUitOpen 13:deeef404ff49 38 // シリアルポート送信割込みサービスルーチン
MikamiUitOpen 13:deeef404ff49 39 void SerialTxIntr::TxIsr()
MikamiUitOpen 13:deeef404ff49 40 {
MikamiUitOpen 13:deeef404ff49 41 if (!que_.empty())
MikamiUitOpen 13:deeef404ff49 42 {
MikamiUitOpen 13:deeef404ff49 43 WriteTDR(que_.front()); // 送信用バッファから取り出したデータを TDR へ書き込む
MikamiUitOpen 13:deeef404ff49 44 que_.pop(); // 先頭のデータを消去
MikamiUitOpen 13:deeef404ff49 45 }
MikamiUitOpen 13:deeef404ff49 46 else
MikamiUitOpen 13:deeef404ff49 47 DisableTxIntr(); // 送信割込み禁止
MikamiUitOpen 13:deeef404ff49 48 }
MikamiUitOpen 9:a90a9abeaea0 49 }