SAI_IO class for using CODEC (MW8994) as analog input and output. このライブラリを登録した際のプログラム:「F746_AudioIO_Demo」

Dependencies:   Array_Matrix

Dependents:   F746_SD_WavPlayer F746_SD_GraphicEqualizer_ren0620 Joerg_turbo_ede CW_Decoder_using_FFT_on_DiscoF746NG ... more

Committer:
MikamiUitOpen
Date:
Thu May 05 11:12:45 2016 +0000
Revision:
0:eade5d3ae0eb
Child:
1:48ed86c8430a
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:eade5d3ae0eb 1 //-----------------------------------------------------------
MikamiUitOpen 0:eade5d3ae0eb 2 // SiaIO class (Header)
MikamiUitOpen 0:eade5d3ae0eb 3 // 2016/05/05, Copyright (c) 2016 MIKAMI, Naoki
MikamiUitOpen 0:eade5d3ae0eb 4 //-----------------------------------------------------------
MikamiUitOpen 0:eade5d3ae0eb 5
MikamiUitOpen 0:eade5d3ae0eb 6 #ifndef F746_SAI_IO_HPP
MikamiUitOpen 0:eade5d3ae0eb 7 #define F746_SAI_IO_HPP
MikamiUitOpen 0:eade5d3ae0eb 8
MikamiUitOpen 0:eade5d3ae0eb 9 #include "mbed.h"
MikamiUitOpen 0:eade5d3ae0eb 10 #include "stm32746g_discovery_audio.h"
MikamiUitOpen 0:eade5d3ae0eb 11 #include "BSP_AudioIn_Overwrite.hpp"
MikamiUitOpen 0:eade5d3ae0eb 12 #include "BSP_AudioOut_Overwrite.hpp"
MikamiUitOpen 0:eade5d3ae0eb 13
MikamiUitOpen 0:eade5d3ae0eb 14 namespace Mikami
MikamiUitOpen 0:eade5d3ae0eb 15 {
MikamiUitOpen 0:eade5d3ae0eb 16 class SaiIO
MikamiUitOpen 0:eade5d3ae0eb 17 {
MikamiUitOpen 0:eade5d3ae0eb 18 public:
MikamiUitOpen 0:eade5d3ae0eb 19 enum InOutBoth { INPUT, // input only
MikamiUitOpen 0:eade5d3ae0eb 20 OUTPUT, // output only
MikamiUitOpen 0:eade5d3ae0eb 21 BOTH }; // input and output
MikamiUitOpen 0:eade5d3ae0eb 22 // Constructor
MikamiUitOpen 0:eade5d3ae0eb 23 // inputDevice: INPUT_DEVICE_DIGITAL_MICROPHONE_2 or
MikamiUitOpen 0:eade5d3ae0eb 24 // INPUT_DEVICE_INPUT_LINE_1
MikamiUitOpen 0:eade5d3ae0eb 25 // inputDevice == 0 : not use input device
MikamiUitOpen 0:eade5d3ae0eb 26 SaiIO(InOutBoth ioBoth, int size, int fs,
MikamiUitOpen 0:eade5d3ae0eb 27 uint16_t inputDevice = 0);
MikamiUitOpen 0:eade5d3ae0eb 28 ~SaiIO();
MikamiUitOpen 0:eade5d3ae0eb 29
MikamiUitOpen 0:eade5d3ae0eb 30 int32_t GetLength() { return nData_; }
MikamiUitOpen 0:eade5d3ae0eb 31
MikamiUitOpen 0:eade5d3ae0eb 32 void StopAudioIn();
MikamiUitOpen 0:eade5d3ae0eb 33
MikamiUitOpen 0:eade5d3ae0eb 34 // sw = 0: DIGITAL_MICROPHONE_2
MikamiUitOpen 0:eade5d3ae0eb 35 // 1: LINE_1
MikamiUitOpen 0:eade5d3ae0eb 36 void SwitchInputDevice(int sw);
MikamiUitOpen 0:eade5d3ae0eb 37
MikamiUitOpen 0:eade5d3ae0eb 38 bool IsCaptured();
MikamiUitOpen 0:eade5d3ae0eb 39 void ResetCaptured() { captured_ = false; }
MikamiUitOpen 0:eade5d3ae0eb 40 void Input(int16_t &xL, int16_t &xR);
MikamiUitOpen 0:eade5d3ae0eb 41
MikamiUitOpen 0:eade5d3ae0eb 42 bool IsXferred();
MikamiUitOpen 0:eade5d3ae0eb 43 void ResetXferred() { xferred_ = false; }
MikamiUitOpen 0:eade5d3ae0eb 44 void Output(int16_t xL, int16_t xR);
MikamiUitOpen 0:eade5d3ae0eb 45 void Stop() { BSP_AUDIO_OUT_Stop(CODEC_PDWN_SW); }
MikamiUitOpen 0:eade5d3ae0eb 46 void Pause();
MikamiUitOpen 0:eade5d3ae0eb 47 void Resume();
MikamiUitOpen 0:eade5d3ae0eb 48
MikamiUitOpen 0:eade5d3ae0eb 49 // IF you use both input and output of SAI,
MikamiUitOpen 0:eade5d3ae0eb 50 // you can use following two functions.
MikamiUitOpen 0:eade5d3ae0eb 51 bool IsCompleted()
MikamiUitOpen 0:eade5d3ae0eb 52 { return IsCaptured() && IsXferred(); }
MikamiUitOpen 0:eade5d3ae0eb 53 void Reset()
MikamiUitOpen 0:eade5d3ae0eb 54 { captured_ = false; xferred_ = false; }
MikamiUitOpen 0:eade5d3ae0eb 55
MikamiUitOpen 0:eade5d3ae0eb 56 // Following two member functions are called from
MikamiUitOpen 0:eade5d3ae0eb 57 // callback functions in "BSP_AudioIn_Overwrite.cpp"
MikamiUitOpen 0:eade5d3ae0eb 58 static void Captured1st() { Captured(0); }
MikamiUitOpen 0:eade5d3ae0eb 59 static void Captured2nd() { Captured(bufferSize_/2); }
MikamiUitOpen 0:eade5d3ae0eb 60
MikamiUitOpen 0:eade5d3ae0eb 61 // Following two member functions are called from
MikamiUitOpen 0:eade5d3ae0eb 62 // callback functions in "BSP_AudioOut_Overwrite.cpp"
MikamiUitOpen 0:eade5d3ae0eb 63 static void FillBuffer1st() { FillBuffer(0); }
MikamiUitOpen 0:eade5d3ae0eb 64 static void FillBuffer2nd() { FillBuffer(bufferSize_/2); }
MikamiUitOpen 0:eade5d3ae0eb 65
MikamiUitOpen 0:eade5d3ae0eb 66 // Called form the functions in "BSP_AudioIn_Overwrite.cpp"
MikamiUitOpen 0:eade5d3ae0eb 67 // and "BSP_AudioOut_Overwrite.cpp"
MikamiUitOpen 0:eade5d3ae0eb 68 static void ErrorTrap();
MikamiUitOpen 0:eade5d3ae0eb 69
MikamiUitOpen 0:eade5d3ae0eb 70 private:
MikamiUitOpen 0:eade5d3ae0eb 71 const int FS_;
MikamiUitOpen 0:eade5d3ae0eb 72 const InOutBoth IOBOTH_;
MikamiUitOpen 0:eade5d3ae0eb 73
MikamiUitOpen 0:eade5d3ae0eb 74 int16_t* inBuffer_;
MikamiUitOpen 0:eade5d3ae0eb 75 static int16_t* outBuffer_;
MikamiUitOpen 0:eade5d3ae0eb 76 static int16_t* tmp_;
MikamiUitOpen 0:eade5d3ae0eb 77 __IO int32_t inIndex_;
MikamiUitOpen 0:eade5d3ae0eb 78 __IO int32_t tmpIndex_;
MikamiUitOpen 0:eade5d3ae0eb 79
MikamiUitOpen 0:eade5d3ae0eb 80 static int32_t nData_;
MikamiUitOpen 0:eade5d3ae0eb 81 static int32_t bufferSize_;
MikamiUitOpen 0:eade5d3ae0eb 82 static __IO bool captured_;
MikamiUitOpen 0:eade5d3ae0eb 83 static __IO int32_t inOffset_;
MikamiUitOpen 0:eade5d3ae0eb 84 static __IO bool xferred_;
MikamiUitOpen 0:eade5d3ae0eb 85
MikamiUitOpen 0:eade5d3ae0eb 86
MikamiUitOpen 0:eade5d3ae0eb 87 void InitCodec(uint16_t inputDevice);
MikamiUitOpen 0:eade5d3ae0eb 88 void InitInput();
MikamiUitOpen 0:eade5d3ae0eb 89 void InitOutput();
MikamiUitOpen 0:eade5d3ae0eb 90 void ClearBuffer();
MikamiUitOpen 0:eade5d3ae0eb 91
MikamiUitOpen 0:eade5d3ae0eb 92 static void Captured(int32_t offset);
MikamiUitOpen 0:eade5d3ae0eb 93 static void FillBuffer(uint32_t offset);
MikamiUitOpen 0:eade5d3ae0eb 94 };
MikamiUitOpen 0:eade5d3ae0eb 95 }
MikamiUitOpen 0:eade5d3ae0eb 96 #endif // F746_SAI_IO_HPP