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.

Dependencies:   Array_Matrix

Dependents:   F446_UpSampling_GraphicEqualizer F446_UpSampling_ReverbSystem F446_UpSampling_FrqShifter_Weaver Demo_F446_AD_DA_Multirate ... more

Revision:
0:2447a7d225b1
Child:
2:b55ae17ffd92
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/F446_Multirate.hpp	Wed May 16 01:40:50 2018 +0000
@@ -0,0 +1,69 @@
+//---------------------------------------------------
+//  出力を 4 倍にアップサンプリングするクラス(ヘッダ)
+//  Nucleo-F446RE 専用
+//
+//      入力端子: A0 (PA_0) 
+//      出力端子: A2 (PA_4) 
+//
+//  2018/05/15, 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_;
+        }
+
+        // AD 変換終了割り込みを使えるようにする
+        //      frequency: 入力の標本化周波数
+        void SetIntr(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