Nucleo ボードの USB コネクタに対応するシリアルポート受送信割込みで,複数のキャラクタ受送信をサポ-トするクラス. このライブラリを登録した際のプログラム: Demo_F446_AD_DA_Ctrl.
Dependents: F446_FunctionGenerator F446_UpSampling_GraphicEqualizer F446_UpSampling_ReverbSystem F446_UpSampling_FrqShifter_Weaver ... more
SerialTxIntr.cpp@9:a90a9abeaea0, 2019-11-23 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Sat Nov 23 07:52:11 2019 +0000
- Revision:
- 9:a90a9abeaea0
- Parent:
- 7:190d94fba10d
- Child:
- 11:7f5b88c8bd6a
10
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 | 0:6b652858f92d | 5 | // ボーレートのデフォルト値は 9,600 boud |
MikamiUitOpen | 0:6b652858f92d | 6 | // |
MikamiUitOpen | 6:8084247806a4 | 7 | // 2018/09/28, Copyright (c) 2018 MIKAMI, Naoki |
MikamiUitOpen | 0:6b652858f92d | 8 | //------------------------------------------------------------- |
MikamiUitOpen | 0:6b652858f92d | 9 | |
MikamiUitOpen | 0:6b652858f92d | 10 | #include "SerialTxIntr.hpp" |
MikamiUitOpen | 0:6b652858f92d | 11 | |
MikamiUitOpen | 4:fb847a82f735 | 12 | namespace Mikami |
MikamiUitOpen | 0:6b652858f92d | 13 | { |
MikamiUitOpen | 5:151d281afa55 | 14 | // コンストラクタ |
MikamiUitOpen | 5:151d281afa55 | 15 | SerialTxIntr::SerialTxIntr(Serial &tx) : tx_(tx) |
MikamiUitOpen | 5:151d281afa55 | 16 | { |
MikamiUitOpen | 5:151d281afa55 | 17 | tx_.attach(callback(this, &SerialTxIntr::TxIsr), Serial::TxIrq); |
MikamiUitOpen | 5:151d281afa55 | 18 | } |
MikamiUitOpen | 0:6b652858f92d | 19 | |
MikamiUitOpen | 5:151d281afa55 | 20 | // 送信データ書き込み |
MikamiUitOpen | 5:151d281afa55 | 21 | void SerialTxIntr::TxWrite(char c) |
MikamiUitOpen | 5:151d281afa55 | 22 | { |
MikamiUitOpen | 5:151d281afa55 | 23 | USART2->CR1 &= ~USART_CR1_TXEIE; // 送信割込み禁止 |
MikamiUitOpen | 5:151d281afa55 | 24 | // 送信レジスタ (DR) が空でかつ送信バッファが空かどうか調べる |
MikamiUitOpen | 5:151d281afa55 | 25 | if ( que_.empty() && // 両者が空の場合 |
MikamiUitOpen | 5:151d281afa55 | 26 | ((USART2->SR && USART_SR_TXE_Msk) == USART_SR_TXE) ) |
MikamiUitOpen | 5:151d281afa55 | 27 | USART2->DR = c; // 送信レジスタにデータを書き込む |
MikamiUitOpen | 5:151d281afa55 | 28 | else // 少なくとも一方が空ではない場合 |
MikamiUitOpen | 5:151d281afa55 | 29 | que_.push(c); // 送信バッファにデータを格納 |
MikamiUitOpen | 5:151d281afa55 | 30 | USART2->CR1 |= USART_CR1_TXEIE; // 送信割込み許可 |
MikamiUitOpen | 5:151d281afa55 | 31 | } |
MikamiUitOpen | 6:8084247806a4 | 32 | |
MikamiUitOpen | 6:8084247806a4 | 33 | // 文字列の送信 |
MikamiUitOpen | 6:8084247806a4 | 34 | void SerialTxIntr::TxString(string str) |
MikamiUitOpen | 6:8084247806a4 | 35 | { |
MikamiUitOpen | 6:8084247806a4 | 36 | for (int n=0; n<str.size(); n++) |
MikamiUitOpen | 6:8084247806a4 | 37 | TxWrite(str[n]); |
MikamiUitOpen | 6:8084247806a4 | 38 | } |
MikamiUitOpen | 4:fb847a82f735 | 39 | |
MikamiUitOpen | 5:151d281afa55 | 40 | // シリアルポート送信割込みサービスルーチン |
MikamiUitOpen | 5:151d281afa55 | 41 | void SerialTxIntr::TxIsr() |
MikamiUitOpen | 5:151d281afa55 | 42 | { |
MikamiUitOpen | 5:151d281afa55 | 43 | if (!que_.empty()) |
MikamiUitOpen | 5:151d281afa55 | 44 | { |
MikamiUitOpen | 5:151d281afa55 | 45 | USART2->DR = que_.front(); // 送信用バッファから取り出したデータを送信レジスタへ書き込む |
MikamiUitOpen | 5:151d281afa55 | 46 | que_.pop(); // 先頭のデータを消去 |
MikamiUitOpen | 5:151d281afa55 | 47 | } |
MikamiUitOpen | 5:151d281afa55 | 48 | else |
MikamiUitOpen | 5:151d281afa55 | 49 | USART2->CR1 &= ~USART_CR1_TXEIE; // 送信割込み禁止 |
MikamiUitOpen | 5:151d281afa55 | 50 | } |
MikamiUitOpen | 9:a90a9abeaea0 | 51 | } |