Nucleo ボードの USB コネクタに対応するシリアルポート受送信割込みで,複数のキャラクタ受送信をサポ-トするクラス. このライブラリを登録した際のプログラム: Demo_F446_AD_DA_Ctrl.
Dependents: F446_FunctionGenerator F446_UpSampling_GraphicEqualizer F446_UpSampling_ReverbSystem F446_UpSampling_FrqShifter_Weaver ... more
SerialTxIntr.cpp@13:deeef404ff49, 2020-02-05 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Wed Feb 05 08:45:08 2020 +0000
- Revision:
- 13:deeef404ff49
- Parent:
- 11:7f5b88c8bd6a
14
Who changed what in which revision?
User | Revision | Line number | New 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 | } |