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

Dependencies:   mbed Array_Matrix BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG

Committer:
MikamiUitOpen
Date:
Sat Oct 07 03:28:40 2017 +0000
Revision:
0:ab7a35d87173
Child:
1:501a83a5ee9d
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:ab7a35d87173 1 //-----------------------------------------------------------
MikamiUitOpen 0:ab7a35d87173 2 // ディジタルフィルタ実験のためのプラットフォーム
MikamiUitOpen 0:ab7a35d87173 3 // 信号処理の対象とする信号は Arduino 互換ヘッダピンの A0 に入力する
MikamiUitOpen 0:ab7a35d87173 4 // ---- 入出力信号の波形表示付き ----
MikamiUitOpen 0:ab7a35d87173 5 //
MikamiUitOpen 0:ab7a35d87173 6 // このプログラムでは,例として定数乗算器を実装している
MikamiUitOpen 0:ab7a35d87173 7 //
MikamiUitOpen 0:ab7a35d87173 8 // 使用しているライブラリのリビジョン:
MikamiUitOpen 0:ab7a35d87173 9 // mbed Rev.152
MikamiUitOpen 0:ab7a35d87173 10 // BSP_DISCO_F746NG Rev.9
MikamiUitOpen 0:ab7a35d87173 11 //
MikamiUitOpen 0:ab7a35d87173 12 // 2017/10/07, Copyright (c) 2017 MIKAMI, Naoki
MikamiUitOpen 0:ab7a35d87173 13 //-----------------------------------------------------------
MikamiUitOpen 0:ab7a35d87173 14
MikamiUitOpen 0:ab7a35d87173 15 #include "SAI_InOut.hpp"
MikamiUitOpen 0:ab7a35d87173 16 #include "LcdPanel.hpp"
MikamiUitOpen 0:ab7a35d87173 17 #include "MyFunctions.hpp" // ST32F746 内蔵の ADC を使うため
MikamiUitOpen 0:ab7a35d87173 18
MikamiUitOpen 0:ab7a35d87173 19 //-----------------------------------------------------------------
MikamiUitOpen 0:ab7a35d87173 20 // 実行するフィルタの応じて以下のインクルードファイルを変更する
MikamiUitOpen 0:ab7a35d87173 21 #include "Multiplier.hpp" // 入力を定数倍して出力する処理
MikamiUitOpen 0:ab7a35d87173 22 //-----------------------------------------------------------------
MikamiUitOpen 0:ab7a35d87173 23
MikamiUitOpen 0:ab7a35d87173 24 const int FS_ = I2S_AUDIOFREQ_48K; // 標本化周波数:48 kHz
MikamiUitOpen 0:ab7a35d87173 25 AdcDual_Intr adc_(FS_); // 内蔵 ADC 用
MikamiUitOpen 0:ab7a35d87173 26
MikamiUitOpen 0:ab7a35d87173 27 int main()
MikamiUitOpen 0:ab7a35d87173 28 {
MikamiUitOpen 0:ab7a35d87173 29 // オーディオ信号出力用
MikamiUitOpen 0:ab7a35d87173 30 SaiIO mySai(SaiIO::OUTPUT, 2048, FS_);
MikamiUitOpen 0:ab7a35d87173 31
MikamiUitOpen 0:ab7a35d87173 32 // LCD パネル表示用
MikamiUitOpen 0:ab7a35d87173 33 LcdPanel myPanel;
MikamiUitOpen 0:ab7a35d87173 34
MikamiUitOpen 0:ab7a35d87173 35 //-----------------------------------------------------------------
MikamiUitOpen 0:ab7a35d87173 36 // ここでディジタルフィルタのオブジェクト生成や初期化などを行う
MikamiUitOpen 0:ab7a35d87173 37 Multiplier df(-0.5f); // 定数乗算の処理
MikamiUitOpen 0:ab7a35d87173 38 //-----------------------------------------------------------------
MikamiUitOpen 0:ab7a35d87173 39
MikamiUitOpen 0:ab7a35d87173 40 // 内蔵 ADC を使うための初期化
MikamiUitOpen 0:ab7a35d87173 41 AdcInitialize(mySai.GetLength());
MikamiUitOpen 0:ab7a35d87173 42
MikamiUitOpen 0:ab7a35d87173 43 mySai.PlayOut(); // オーディオ信号出力開始
MikamiUitOpen 0:ab7a35d87173 44
MikamiUitOpen 0:ab7a35d87173 45 while (true) // 無限ループ
MikamiUitOpen 0:ab7a35d87173 46 {
MikamiUitOpen 0:ab7a35d87173 47 // 出力バッファへの転送完了と ADC バッファが満杯で以下の処理を行う
MikamiUitOpen 0:ab7a35d87173 48 if (mySai.IsXferred() && IsAdcBufferFull())
MikamiUitOpen 0:ab7a35d87173 49 {
MikamiUitOpen 0:ab7a35d87173 50 for (int n=0; n<mySai.GetLength(); n++)
MikamiUitOpen 0:ab7a35d87173 51 {
MikamiUitOpen 0:ab7a35d87173 52 int16_t sn, dummy;
MikamiUitOpen 0:ab7a35d87173 53 GetSignal(sn, dummy); // A0 から入力された信号を取得する
MikamiUitOpen 0:ab7a35d87173 54
MikamiUitOpen 0:ab7a35d87173 55 int16_t xn = sn << 3;
MikamiUitOpen 0:ab7a35d87173 56 //------------------------------------------------------
MikamiUitOpen 0:ab7a35d87173 57 // ディジタルフィルタなどの信号処理の実行
MikamiUitOpen 0:ab7a35d87173 58 int16_t yn = df.Execute(xn); // ディジタルフィルタの処理
MikamiUitOpen 0:ab7a35d87173 59 //------------------------------------------------------
MikamiUitOpen 0:ab7a35d87173 60 mySai.Output(xn, yn); // xn:入力(左チャンネル)
MikamiUitOpen 0:ab7a35d87173 61 // yn:出力(右チャンネル)
MikamiUitOpen 0:ab7a35d87173 62
MikamiUitOpen 0:ab7a35d87173 63 myPanel.Store(xn, yn, n); // 表示用として格納
MikamiUitOpen 0:ab7a35d87173 64 }
MikamiUitOpen 0:ab7a35d87173 65 myPanel.Display(); // 入出力信号の波形表示
MikamiUitOpen 0:ab7a35d87173 66 }
MikamiUitOpen 0:ab7a35d87173 67 myPanel.Update();
MikamiUitOpen 0:ab7a35d87173 68 }
MikamiUitOpen 0:ab7a35d87173 69 }