Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: F446_FunctionGenerator F446_UpSampling_GraphicEqualizer F446_UpSampling_ReverbSystem F446_UpSampling_FrqShifter_Weaver ... more
SerialTxIntr.cpp@0:6b652858f92d, 2018-06-11 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Mon Jun 11 10:38:25 2018 +0000
- Revision:
- 0:6b652858f92d
- Child:
- 4:fb847a82f735
1
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 | 0:6b652858f92d | 7 | // 2018/05/29, 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 | 0:6b652858f92d | 12 | // コンストラクタ |
MikamiUitOpen | 0:6b652858f92d | 13 | SerialTxIntr::SerialTxIntr(Serial &tx) : tx_(tx) |
MikamiUitOpen | 0:6b652858f92d | 14 | { |
MikamiUitOpen | 0:6b652858f92d | 15 | tx_.attach(callback(this, &SerialTxIntr::TxIsr), Serial::TxIrq); |
MikamiUitOpen | 0:6b652858f92d | 16 | } |
MikamiUitOpen | 0:6b652858f92d | 17 | |
MikamiUitOpen | 0:6b652858f92d | 18 | // 送信データ書き込み |
MikamiUitOpen | 0:6b652858f92d | 19 | void SerialTxIntr::TxWrite(char c) |
MikamiUitOpen | 0:6b652858f92d | 20 | { |
MikamiUitOpen | 0:6b652858f92d | 21 | USART2->CR1 &= ~USART_CR1_TXEIE; // 送信割込み禁止 |
MikamiUitOpen | 0:6b652858f92d | 22 | // 送信レジスタ (DR) が空でかつ送信バッファが空かどうか調べる |
MikamiUitOpen | 0:6b652858f92d | 23 | if ( que_.empty() && // 両者が空の場合 |
MikamiUitOpen | 0:6b652858f92d | 24 | ((USART2->SR && USART_SR_TXE_Msk) == USART_SR_TXE) ) |
MikamiUitOpen | 0:6b652858f92d | 25 | USART2->DR = c; // 送信レジスタにデータを書き込む |
MikamiUitOpen | 0:6b652858f92d | 26 | else // 少なくとも一方が空ではない場合 |
MikamiUitOpen | 0:6b652858f92d | 27 | que_.push(c); // 送信バッファにデータを格納 |
MikamiUitOpen | 0:6b652858f92d | 28 | USART2->CR1 |= USART_CR1_TXEIE; // 送信割込み許可 |
MikamiUitOpen | 0:6b652858f92d | 29 | } |
MikamiUitOpen | 0:6b652858f92d | 30 | |
MikamiUitOpen | 0:6b652858f92d | 31 | // シリアルポート送信割込みサービスルーチン |
MikamiUitOpen | 0:6b652858f92d | 32 | void SerialTxIntr::TxIsr() |
MikamiUitOpen | 0:6b652858f92d | 33 | { |
MikamiUitOpen | 0:6b652858f92d | 34 | if (!que_.empty()) |
MikamiUitOpen | 0:6b652858f92d | 35 | { |
MikamiUitOpen | 0:6b652858f92d | 36 | USART2->DR = que_.front(); // 送信用バッファから取り出したデータを送信レジスタへ書き込む |
MikamiUitOpen | 0:6b652858f92d | 37 | que_.pop(); // 先頭のデータを消去 |
MikamiUitOpen | 0:6b652858f92d | 38 | } |
MikamiUitOpen | 0:6b652858f92d | 39 | else |
MikamiUitOpen | 0:6b652858f92d | 40 | USART2->CR1 &= ~USART_CR1_TXEIE; // 送信割込み禁止 |
MikamiUitOpen | 0:6b652858f92d | 41 | } |
MikamiUitOpen | 0:6b652858f92d | 42 | |
MikamiUitOpen | 0:6b652858f92d | 43 | // static メンバの実体の宣言/初期化 |
MikamiUitOpen | 0:6b652858f92d | 44 | queue<char> SerialTxIntr::que_; |