CQエレクトロニクス・セミナ「実習・マイコンを動かしながら学ぶディジタル・フィルタ」で使うプログラムを,入力として STM32F746 の内蔵 ADC を使うように変更したもの. http://seminar.cqpub.co.jp/ccm/ES18-0020

Dependencies:   mbed Array_Matrix BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 //-----------------------------------------------------------
00002 //  ディジタルフィルタ実験のためのプラットフォーム
00003 //  信号処理の対象とする信号は Arduino 互換ヘッダピンの A0 に入力する
00004 //      ---- 入出力信号の波形表示付き ----
00005 //
00006 //  このプログラムでは,例として定数乗算器を実装している
00007 //
00008 //  使用しているライブラリのリビジョン:
00009 //          F746_GUI            Rev.33
00010 //          F746_SAI_IO         Rev.12
00011 //          mbed                Rev.161
00012 //
00013 //  2018/03/12, Copyright (c) 2018 MIKAMI, Naoki
00014 //-----------------------------------------------------------
00015 
00016 #include "SAI_InOut.hpp"
00017 #include "LcdPanel.hpp"
00018 #include "MyFunctions.hpp"  // ST32F746 内蔵の ADC を使うため
00019 
00020 //-----------------------------------------------------------------
00021 // 実行するフィルタの応じて以下のインクルードファイルを変更する
00022 #include "Multiplier.hpp"   // 入力を定数倍して出力する処理
00023 //-----------------------------------------------------------------
00024 
00025 const int FS_ = I2S_AUDIOFREQ_48K;  // 標本化周波数:48 kHz
00026 AdcDual_Intr adc_(FS_);             // 内蔵 ADC 用
00027 
00028 int main()
00029 {
00030     // オーディオ信号出力用
00031     SaiIO mySai(SaiIO::OUTPUT, 2048, FS_);
00032 
00033     // LCD パネル表示用
00034     LcdPanel myPanel;
00035 
00036     //-----------------------------------------------------------------
00037     // ここでディジタルフィルタのオブジェクト生成や初期化などを行う
00038     Multiplier df(-0.5f);  // 定数乗算の処理
00039     //-----------------------------------------------------------------
00040 
00041     // 内蔵 ADC を使うための初期化
00042     AdcInitialize(mySai.GetLength());
00043 
00044     mySai.PlayOut();    // オーディオ信号出力開始
00045     while (true)        // 無限ループ
00046     {
00047         // 出力バッファへの転送完了と ADC バッファが満杯で以下の処理を行う
00048         if (mySai.IsXferred() && IsAdcBufferFull())
00049         {
00050             for (int n=0; n<mySai.GetLength(); n++)
00051             {
00052                 int16_t sn, dummy;
00053                 GetSignal(sn, dummy);   // A0 から入力された信号を取得する
00054 
00055                 int16_t xn = sn << 3;
00056                 //------------------------------------------------------
00057                 // ディジタルフィルタなどの信号処理の実行
00058                 int16_t yn = df.Execute(xn);    // ディジタルフィルタの処理
00059                 //------------------------------------------------------
00060                 mySai.Output(xn, yn);       // xn:入力(左チャンネル)
00061                                             // yn:出力(右チャンネル)
00062                 myPanel.Store(xn, yn, n);   // 表示用として格納
00063             }
00064             myPanel.Display();  // 入出力信号の波形表示
00065         }
00066         myPanel.Update();
00067     }
00068 }