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
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:ab7a35d87173 1 //-----------------------------------------------------------
MikamiUitOpen 0:ab7a35d87173 2 // SaiIO class (Header)
MikamiUitOpen 0:ab7a35d87173 3 // 2017/03/17, Copyright (c) 2017 MIKAMI, Naoki
MikamiUitOpen 0:ab7a35d87173 4 //-----------------------------------------------------------
MikamiUitOpen 0:ab7a35d87173 5
MikamiUitOpen 0:ab7a35d87173 6 #ifndef F746_SAI_IO_HPP
MikamiUitOpen 0:ab7a35d87173 7 #define F746_SAI_IO_HPP
MikamiUitOpen 0:ab7a35d87173 8
MikamiUitOpen 0:ab7a35d87173 9 #include "mbed.h"
MikamiUitOpen 0:ab7a35d87173 10 #include "stm32746g_discovery_audio.h"
MikamiUitOpen 0:ab7a35d87173 11 #include "BSP_AudioIn_Overwrite.hpp"
MikamiUitOpen 0:ab7a35d87173 12 #include "BSP_AudioOut_Overwrite.hpp"
MikamiUitOpen 0:ab7a35d87173 13 #include "Array.hpp"
MikamiUitOpen 0:ab7a35d87173 14
MikamiUitOpen 0:ab7a35d87173 15 namespace Mikami
MikamiUitOpen 0:ab7a35d87173 16 {
MikamiUitOpen 0:ab7a35d87173 17 class SaiIO
MikamiUitOpen 0:ab7a35d87173 18 {
MikamiUitOpen 0:ab7a35d87173 19 public:
MikamiUitOpen 0:ab7a35d87173 20 enum InOutBoth { INPUT, // input only
MikamiUitOpen 0:ab7a35d87173 21 OUTPUT, // output only
MikamiUitOpen 0:ab7a35d87173 22 BOTH }; // input and output
MikamiUitOpen 0:ab7a35d87173 23 // Constructor
MikamiUitOpen 0:ab7a35d87173 24 // inputDevice: INPUT_DEVICE_DIGITAL_MICROPHONE_2 or
MikamiUitOpen 0:ab7a35d87173 25 // INPUT_DEVICE_INPUT_LINE_1
MikamiUitOpen 0:ab7a35d87173 26 // inputDevice == 0 : not use input device
MikamiUitOpen 0:ab7a35d87173 27 SaiIO(InOutBoth ioBoth, int size, int fs,
MikamiUitOpen 0:ab7a35d87173 28 uint16_t inputDevice = 0);
MikamiUitOpen 0:ab7a35d87173 29 virtual ~SaiIO() {}
MikamiUitOpen 0:ab7a35d87173 30
MikamiUitOpen 0:ab7a35d87173 31 int32_t GetLength() { return nData_; }
MikamiUitOpen 0:ab7a35d87173 32
MikamiUitOpen 0:ab7a35d87173 33 void RecordIn();
MikamiUitOpen 0:ab7a35d87173 34 // sw = 0: DIGITAL_MICROPHONE_2
MikamiUitOpen 0:ab7a35d87173 35 // 1: LINE_1
MikamiUitOpen 0:ab7a35d87173 36 void SwitchInputDevice(int sw);
MikamiUitOpen 0:ab7a35d87173 37
MikamiUitOpen 0:ab7a35d87173 38 bool IsCaptured();
MikamiUitOpen 0:ab7a35d87173 39 // Input using SAI
MikamiUitOpen 0:ab7a35d87173 40 void Input(int16_t &xL, int16_t &xR)
MikamiUitOpen 0:ab7a35d87173 41 { (this->*InputFp)(xL, xR); }
MikamiUitOpen 0:ab7a35d87173 42
MikamiUitOpen 0:ab7a35d87173 43 void StopIn() { BSP_AUDIO_IN_Stop(CODEC_PDWN_SW); }
MikamiUitOpen 0:ab7a35d87173 44 void PauseIn() { BSP_AUDIO_IN_Pause(); }
MikamiUitOpen 0:ab7a35d87173 45 void ResumeIn() { BSP_AUDIO_IN_Resume(); }
MikamiUitOpen 0:ab7a35d87173 46
MikamiUitOpen 0:ab7a35d87173 47 void PlayOut();
MikamiUitOpen 0:ab7a35d87173 48 bool IsXferred();
MikamiUitOpen 0:ab7a35d87173 49 // Output using SAI
MikamiUitOpen 0:ab7a35d87173 50 void Output(int16_t xL, int16_t xR);
MikamiUitOpen 0:ab7a35d87173 51
MikamiUitOpen 0:ab7a35d87173 52 void StopOut() { BSP_AUDIO_OUT_Stop(CODEC_PDWN_SW); }
MikamiUitOpen 0:ab7a35d87173 53 void PauseOut() { BSP_AUDIO_OUT_Pause(); }
MikamiUitOpen 0:ab7a35d87173 54 void ResumeOut() { BSP_AUDIO_OUT_Resume(); }
MikamiUitOpen 0:ab7a35d87173 55
MikamiUitOpen 0:ab7a35d87173 56 // IF you use both input and output of SAI,
MikamiUitOpen 0:ab7a35d87173 57 // you can use following function
MikamiUitOpen 0:ab7a35d87173 58 bool IsCompleted()
MikamiUitOpen 0:ab7a35d87173 59 { return IsCaptured() && IsXferred(); }
MikamiUitOpen 0:ab7a35d87173 60
MikamiUitOpen 0:ab7a35d87173 61 // Following two member functions are called from
MikamiUitOpen 0:ab7a35d87173 62 // callback functions in "BSP_AudioIn_Overwrite.cpp"
MikamiUitOpen 0:ab7a35d87173 63 static void Captured1st() { Captured(0); }
MikamiUitOpen 0:ab7a35d87173 64 static void Captured2nd() { Captured(bufferSize_/2); }
MikamiUitOpen 0:ab7a35d87173 65
MikamiUitOpen 0:ab7a35d87173 66 // Following two member functions are called from
MikamiUitOpen 0:ab7a35d87173 67 // callback functions in "BSP_AudioOut_Overwrite.cpp"
MikamiUitOpen 0:ab7a35d87173 68 static void FillBuffer1st() { FillBuffer(0); }
MikamiUitOpen 0:ab7a35d87173 69 static void FillBuffer2nd() { FillBuffer(bufferSize_/2); }
MikamiUitOpen 0:ab7a35d87173 70
MikamiUitOpen 0:ab7a35d87173 71 // Called form the functions in "BSP_AudioIn_Overwrite.cpp"
MikamiUitOpen 0:ab7a35d87173 72 // and "BSP_AudioOut_Overwrite.cpp"
MikamiUitOpen 0:ab7a35d87173 73 static void ErrorTrap();
MikamiUitOpen 0:ab7a35d87173 74
MikamiUitOpen 0:ab7a35d87173 75 private:
MikamiUitOpen 0:ab7a35d87173 76 const int FS_;
MikamiUitOpen 0:ab7a35d87173 77 const InOutBoth IOBOTH_;
MikamiUitOpen 0:ab7a35d87173 78
MikamiUitOpen 0:ab7a35d87173 79 Array<uint16_t> inBuffer_;
MikamiUitOpen 0:ab7a35d87173 80 static Array<uint16_t> outBuffer_;
MikamiUitOpen 0:ab7a35d87173 81 static Array<uint16_t> tmp_;
MikamiUitOpen 0:ab7a35d87173 82
MikamiUitOpen 0:ab7a35d87173 83 __IO int32_t inIndex_;
MikamiUitOpen 0:ab7a35d87173 84 __IO int32_t tmpIndex_;
MikamiUitOpen 0:ab7a35d87173 85
MikamiUitOpen 0:ab7a35d87173 86 static int32_t nData_;
MikamiUitOpen 0:ab7a35d87173 87 static int32_t bufferSize_;
MikamiUitOpen 0:ab7a35d87173 88 static __IO bool captured_;
MikamiUitOpen 0:ab7a35d87173 89 static __IO int32_t inOffset_;
MikamiUitOpen 0:ab7a35d87173 90 static __IO bool xferred_;
MikamiUitOpen 0:ab7a35d87173 91
MikamiUitOpen 0:ab7a35d87173 92 void InitCodec(uint16_t inputDevice);
MikamiUitOpen 0:ab7a35d87173 93 void InitInput(uint16_t inputDevice);
MikamiUitOpen 0:ab7a35d87173 94 void SetInput();
MikamiUitOpen 0:ab7a35d87173 95 void SetOutput();
MikamiUitOpen 0:ab7a35d87173 96 void ClearBuffer();
MikamiUitOpen 0:ab7a35d87173 97
MikamiUitOpen 0:ab7a35d87173 98 // This function pointer is assigned by
MikamiUitOpen 0:ab7a35d87173 99 // InputNormal() or InputReversal()
MikamiUitOpen 0:ab7a35d87173 100 void (SaiIO::*InputFp)(int16_t &, int16_t &);
MikamiUitOpen 0:ab7a35d87173 101 // For line input
MikamiUitOpen 0:ab7a35d87173 102 void InputNormal(int16_t &xL, int16_t &xR);
MikamiUitOpen 0:ab7a35d87173 103 // For MEMS microphone input
MikamiUitOpen 0:ab7a35d87173 104 void InputReversal(int16_t &xL, int16_t &xR);
MikamiUitOpen 0:ab7a35d87173 105
MikamiUitOpen 0:ab7a35d87173 106 static void Captured(int32_t offset);
MikamiUitOpen 0:ab7a35d87173 107 static void FillBuffer(uint32_t offset);
MikamiUitOpen 0:ab7a35d87173 108 };
MikamiUitOpen 0:ab7a35d87173 109 }
MikamiUitOpen 0:ab7a35d87173 110 #endif // F746_SAI_IO_HPP