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

Dependencies:   mbed Array_Matrix BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG

Revision:
2:dd48e1e59daa
Parent:
1:501a83a5ee9d
--- a/F746_SAI_IO_New/SAI_InOut.cpp	Wed Nov 08 11:43:52 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,197 +0,0 @@
-//-----------------------------------------------------------
-//  SaiIO class
-//      BSP_DISCO_F746NG Rev.9 に合わせて変更
-//      InitInput() の内容を一部変更(変更前の部分はコメントアウト)
-//
-//  2017/09/17, Copyright (c) 2017 MIKAMI, Naoki
-//-----------------------------------------------------------
-
-#include "SAI_InOut.hpp"
-
-namespace Mikami
-{
-    // Constructor
-    SaiIO::SaiIO(InOutBoth ioBoth, int size, int fs,
-                 uint16_t inputDevice)
-        : FS_(fs), IOBOTH_(ioBoth)
-    {
-        nData_ = size;
-        bufferSize_ = (size*2)*2;
-        
-        if (ioBoth != OUTPUT)
-        {
-            inBuffer_.SetSize((size*2)*2);
-            inOffset_ = 0;
-            captured_ = false;
-        }
-        if (ioBoth != INPUT)
-        {
-            outBuffer_.SetSize((size*2)*2);
-            tmp_.SetSize(size*2);
-            tmpIndex_ = 0;
-            xferred_ = false;
-            ClearBuffer();
-        }
-        InitCodec(inputDevice);
-    }
-
-    // Input start
-    void SaiIO::RecordIn()
-    {
-        if (BSP_AUDIO_IN_Record(inBuffer_, bufferSize_) == AUDIO_ERROR)
-            ErrorTrap();
-    }
-
-    // Switching input device and run
-    void SaiIO::SwitchInputDevice(int sw)
-    {
-        uint16_t dev = (sw == 0) ?
-                        INPUT_DEVICE_DIGITAL_MICROPHONE_2
-                      : INPUT_DEVICE_INPUT_LINE_1;
-        InitInput(dev);
-        ClearBuffer();
-        RecordIn();
-        if (IOBOTH_ == BOTH) PlayOut();
-    }
-    
-    // If captured, return true
-    bool SaiIO::IsCaptured()
-    {
-        if (!captured_) return false;
-
-        inIndex_ = inOffset_;
-        captured_ = false;
-        return true;
-    }
-
-    void SaiIO::PlayOut()
-    {
-        ClearBuffer();
-        BSP_AUDIO_OUT_SetAudioFrameSlot(CODEC_AUDIOFRAME_SLOT_02);
-        if (BSP_AUDIO_OUT_Play(outBuffer_, bufferSize_*AUDIODATA_SIZE)
-            == AUDIO_ERROR)
-            ErrorTrap();
-    }
-
-    // Return true if transfer completion to output
-    bool SaiIO::IsXferred()
-    {
-        if (!xferred_) return false;
-        
-        tmpIndex_ = 0;
-        xferred_ = false;
-        return true;
-    }
-
-    void SaiIO::Output(int16_t xL, int16_t xR)
-    {
-        tmp_[tmpIndex_++] = xL; // Left
-        tmp_[tmpIndex_++] = xR; // Right
-    }
-
-    void SaiIO::ErrorTrap()
-    {
-        DigitalOut led1(LED1);
-        fprintf(stderr, "\r\n#### ERROR ####\r\n");
-        while(true)
-        {
-            led1 = !led1;
-            wait_ms(250);
-        }
-    }   
-
-    // Initialize audio input and output 
-    void SaiIO::InitCodec(uint16_t inputDevice)
-    {
-        if (inputDevice != 0) InitInput(inputDevice);
-
-        if (IOBOTH_ == OUTPUT)
-            if (BSP_AUDIO_OUT_Init(OUTPUT_DEVICE_HEADPHONE,
-                                   100, FS_) == AUDIO_ERROR)
-                ErrorTrap();
-
-        if (IOBOTH_ != OUTPUT) SetInput();
-        if (IOBOTH_ != INPUT) SetOutput();
-    }
-
-    void SaiIO::InitInput(uint16_t inputDevice)
-    {
-        int audioInVolume = (inputDevice == INPUT_DEVICE_INPUT_LINE_1) ?
-                            70 : 90;
-        InputFp = (inputDevice == INPUT_DEVICE_INPUT_LINE_1) ?
-                  &SaiIO::InputNormal : &SaiIO::InputReversal;
-        if (IOBOTH_ == BOTH)
-/*
-            if (BSP_AUDIO_IN_OUT_Init(inputDevice, OUTPUT_DEVICE_HEADPHONE,
-                                      audioInVolume, FS_) == AUDIO_ERROR)
-*/
-            if (BSP_AUDIO_IN_OUT_Init(inputDevice, OUTPUT_DEVICE_HEADPHONE,
-                                      FS_, DEFAULT_AUDIO_IN_BIT_RESOLUTION,
-                                      DEFAULT_AUDIO_IN_CHANNEL_NBR) == AUDIO_ERROR)
-                ErrorTrap();
-
-        if (IOBOTH_ == INPUT)
-            if (BSP_AUDIO_IN_Init(inputDevice,
-                                  audioInVolume, FS_) == AUDIO_ERROR)
-                ErrorTrap();
-    }
-
-    void SaiIO::SetInput()
-    {
-        NVIC_SetVector(AUDIO_IN_SAIx_DMAx_IRQ,
-                       (uint32_t)AUDIO_IN_SAIx_DMAx_IRQHandler);
-    }
-
-    void SaiIO::SetOutput()
-    {
-        NVIC_SetVector(AUDIO_OUT_SAIx_DMAx_IRQ,
-                       (uint32_t)AUDIO_OUT_SAIx_DMAx_IRQHandler);
-        BSP_AUDIO_OUT_SetAudioFrameSlot(CODEC_AUDIOFRAME_SLOT_02);
-    }
-
-    void SaiIO::ClearBuffer()
-    {
-        if (IOBOTH_ != OUTPUT)
-            for (int n=0; n<bufferSize_; n++) inBuffer_[n] = 0;
-        for (int n=0; n<bufferSize_; n++) outBuffer_[n] = 0;
-        for (int n=0; n<nData_*2; n++) tmp_[n] = 0;
-    }
-
-    // For line input
-    void SaiIO::InputNormal(int16_t &xL, int16_t &xR)
-    {
-        xL = inBuffer_[inIndex_++];
-        xR = inBuffer_[inIndex_++];
-    }
-
-    // For MEMS microphone input
-    void SaiIO::InputReversal(int16_t &xL, int16_t &xR)       
-    {
-        xR = inBuffer_[inIndex_++];
-        xL = inBuffer_[inIndex_++];
-    }
-
-    void SaiIO::Captured(int32_t offset)
-    {
-        captured_ = true;
-        inOffset_ = offset;
-    }
-
-    void SaiIO::FillBuffer(uint32_t offset)
-    {
-        int k = offset;
-        for (int n=0; n<nData_*2; n++)
-             outBuffer_[k++] = tmp_[n];
-        xferred_ = true;
-    }
-
-    int32_t SaiIO::nData_;
-    int32_t SaiIO::bufferSize_;
-
-    __IO bool SaiIO::captured_;
-    __IO int32_t SaiIO::inOffset_;
-
-    Array<uint16_t> SaiIO::outBuffer_;
-    Array<uint16_t> SaiIO::tmp_;       
-    __IO bool SaiIO::xferred_;
-}