Nucleo-F446RE 内蔵の AD/DA を使うためのライブラリ.DA からの出力は,標本化周波数の4倍のレートで行う. このライブラリを登録した際のプログラム: Demo_F446_AD_DA_Multirate. Library for built-in ADC and DAC in Nucleo-F446RE. Sampling rate for DAC is four times of that for ADC.
Dependents: F446_UpSampling_GraphicEqualizer F446_UpSampling_ReverbSystem F446_UpSampling_FrqShifter_Weaver Demo_F446_AD_DA_Multirate ... more
F446_Multirate.hpp
- Committer:
- MikamiUitOpen
- Date:
- 2018-05-19
- Revision:
- 2:b55ae17ffd92
- Parent:
- 0:2447a7d225b1
- Child:
- 3:285cebe5823c
File content as of revision 2:b55ae17ffd92:
//--------------------------------------------------- // 出力を 4 倍にアップサンプリングするクラス(ヘッダ) // Nucleo-F446RE 専用 // // 入力端子: A0 (PA_0) // 出力端子: A2 (PA_4) // // 2018/05/19, Copyright (c) 2018 MIKAMI, Naoki //--------------------------------------------------- #include "mbed.h" #include "F446_ADC.hpp" #include "F446_DAC.hpp" #include "IIR_Cascade.hpp" #ifndef F446_MULTIRATE_HPP #define F446_MULTIRATE_HPP namespace Mikami { class F446_Multirate { public: // コンストラクタ F446_Multirate(); virtual ~F446_Multirate() { delete adc_; delete interpolator_; } // 標本化の実行開始 // frequency: 入力の標本化周波数 void Start(int frequency); // AD変換の結果を取り出す float Input(); // 補間用フィルタを実行し,処理結果を出力用バッファへ書き込む void Output(float yn); private: static const int FACTOR_ = 4; // アップサンプリング倍率:4 倍 // この倍率は 2 のべき乗にすること static const int MASK_FACTOR_ = FACTOR_ - 1; static const int MASK_BUF_ = 2*FACTOR_ - 1; IirCascade *interpolator_; // 補間用フィルタのポインタ static AdcF446 *adc_; // AD変換器のオブジェクトのポインタ static DacF446 dac_; // DA変換器のオブジェクト static Array<float> buf_; // DA変換器に出力するデータ用バッファ int indexW_; // buf_ へ書き込む際のインデックス static int indexR_; // buf_ から読み出す際のインデックス static float xn_; // AD変換器から入力されたデータ static __IO bool okIn_; // AD変換されたデータが使える場合に true となる // 引数を 0 ~ (アップサンプリング倍率-1) の間でカウントアップ static inline int ModCounter(int &index) { index = ++index & MASK_BUF_; return index; } // ADC 変換終了割り込みに対する割り込みサービス・ルーチン static void AdcIsr(); }; } #endif // F446_MULTIRATE_HPP