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:
9:a90a9abeaea0
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 "SerialRxTxIntr.hpp"
MikamiUitOpen 0:6b652858f92d 9
MikamiUitOpen 4:fb847a82f735 10 namespace Mikami
MikamiUitOpen 0:6b652858f92d 11 {
MikamiUitOpen 13:deeef404ff49 12 // コンストラクタ
MikamiUitOpen 13:deeef404ff49 13 SerialRxTxIntr::SerialRxTxIntr(int maxChar, int baud)
MikamiUitOpen 13:deeef404ff49 14 : pc_(USBTX, USBRX, baud), tx_(pc_), RX_MAX_(maxChar),
MikamiUitOpen 13:deeef404ff49 15 eol_(false), rxBuffer_(""), buffer2_(""), echoOn_(false)
MikamiUitOpen 13:deeef404ff49 16 {
MikamiUitOpen 13:deeef404ff49 17 pc_.format(); // default: 8 bits, nonparity, 1 stop bit
MikamiUitOpen 13:deeef404ff49 18 pc_.attach(callback(this, &SerialRxTxIntr::RxIsr));
MikamiUitOpen 13:deeef404ff49 19 }
MikamiUitOpen 0:6b652858f92d 20
MikamiUitOpen 13:deeef404ff49 21 // メッセージの終了であればそのメッセージを保存し true を返す
MikamiUitOpen 13:deeef404ff49 22 bool SerialRxTxIntr::IsEol()
MikamiUitOpen 13:deeef404ff49 23 {
MikamiUitOpen 13:deeef404ff49 24 if (!eol_) return false;
MikamiUitOpen 4:fb847a82f735 25
MikamiUitOpen 13:deeef404ff49 26 eol_ = false;
MikamiUitOpen 13:deeef404ff49 27 buffer2_ = rxBuffer_; // メッセージの保存
MikamiUitOpen 13:deeef404ff49 28 rxBuffer_ = ""; // 受信バッファをクリア
MikamiUitOpen 13:deeef404ff49 29 return true;
MikamiUitOpen 13:deeef404ff49 30 }
MikamiUitOpen 0:6b652858f92d 31
MikamiUitOpen 13:deeef404ff49 32 // シリアル・ポートの受信割り込みに対する割り込みサービス・ルーチン
MikamiUitOpen 13:deeef404ff49 33 void SerialRxTxIntr::RxIsr()
MikamiUitOpen 13:deeef404ff49 34 {
MikamiUitOpen 13:deeef404ff49 35 unsigned char chr = pc_.getc();
MikamiUitOpen 13:deeef404ff49 36 if (echoOn_) // エコーバックが有効な場合
MikamiUitOpen 13:deeef404ff49 37 {
MikamiUitOpen 13:deeef404ff49 38 tx_.TxChar(chr); // エコーバック
MikamiUitOpen 13:deeef404ff49 39 if (chr == '\r') tx_.TxChar('\n');
MikamiUitOpen 13:deeef404ff49 40 }
MikamiUitOpen 13:deeef404ff49 41 // "\r" を受信した場合はメッセージの終了とする
MikamiUitOpen 13:deeef404ff49 42 // "\r" は rxBuffer_ に追加されない
MikamiUitOpen 13:deeef404ff49 43 if (chr == '\r') eol_ = true;
MikamiUitOpen 13:deeef404ff49 44 else rxBuffer_ += chr;
MikamiUitOpen 5:151d281afa55 45
MikamiUitOpen 13:deeef404ff49 46 // 受信するメッセージの文字数のチェック
MikamiUitOpen 13:deeef404ff49 47 if (rxBuffer_.size() > RX_MAX_)
MikamiUitOpen 13:deeef404ff49 48 {
MikamiUitOpen 13:deeef404ff49 49 char ch[32];
MikamiUitOpen 13:deeef404ff49 50 sprintf(ch, "Exceeded %d characters", RX_MAX_);
MikamiUitOpen 13:deeef404ff49 51 mbed_assert_internal(ch, __FILE__, __LINE__);
MikamiUitOpen 13:deeef404ff49 52 }
MikamiUitOpen 13:deeef404ff49 53 }
MikamiUitOpen 9:a90a9abeaea0 54 }