revised version of F746_SD_GraphicEqualizer

Dependencies:   BSP_DISCO_F746NG F746_GUI F746_SAI_IO FrequencyResponseDrawer LCD_DISCO_F746NG SDFileSystem_Warning_Fixed TS_DISCO_F746NG mbed

Fork of F746_SD_GraphicEqualizer by 不韋 呂

Files at this revision

API Documentation at this revision

Comitter:
MikamiUitOpen
Date:
Sat May 07 07:33:52 2016 +0000
Parent:
4:14f401cb069a
Child:
6:599229a1b06a
Commit message:
6. From this revision, using class library "F746_SAI_IO".

Changed in this revision

F746_SAI_IO.lib Show annotated file Show diff for this revision Revisions of this file
MyClasses_Functions/BSP_AudioOut_Overwrite.cpp Show diff for this revision Revisions of this file
MyClasses_Functions/BSP_AudioOut_Overwrite.hpp Show diff for this revision Revisions of this file
MyClasses_Functions/MyFunctions.cpp Show annotated file Show diff for this revision Revisions of this file
MyClasses_Functions/MyFunctions.hpp Show annotated file Show diff for this revision Revisions of this file
MyClasses_Functions/SAI_Output.cpp Show diff for this revision Revisions of this file
MyClasses_Functions/SAI_Output.hpp Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/F746_SAI_IO.lib	Sat May 07 07:33:52 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/MikamiUitOpen/code/F746_SAI_IO/#eade5d3ae0eb
--- a/MyClasses_Functions/BSP_AudioOut_Overwrite.cpp	Wed May 04 12:41:02 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,112 +0,0 @@
-//--------------------------------------------------------------
-//  Overwrite functuions and define calback functions
-//  for functions in stm32746g_discovery_audio.cpp
-//--------------------------------------------------------------
-#include "BSP_AudioOut_Overwrite.hpp"
-
-// These three callback functions are modyfied by Mikami
-void BSP_AUDIO_OUT_HalfTransfer_CallBack()
-{
-    Mikami::SaiIO_O::FillBuffer1st();
-}
-
-void BSP_AUDIO_OUT_TransferComplete_CallBack()
-{
-    Mikami::SaiIO_O::FillBuffer2nd();
-}
-
-void BSP_AUDIO_OUT_Error_CallBack()
-{
-    Mikami::SaiIO_O::ErrorTrap();
-}
-
-//--------------------------------------------------------------
-//  Followings are original by Nanase
-//--------------------------------------------------------------
-
-DMA_HandleTypeDef hdma_sai_tx;
-
-void AUDIO_OUT_SAIx_DMAx_IRQHandler()
-{
-    HAL_DMA_IRQHandler(&hdma_sai_tx);
-}
-
-void BSP_AUDIO_OUT_MspInit(SAI_HandleTypeDef *hsai, void *Params)
-{
-    //static DMA_HandleTypeDef hdma_sai_tx;
-    GPIO_InitTypeDef  gpio_init_structure;
-
-    /* Enable SAI clock */
-    AUDIO_OUT_SAIx_CLK_ENABLE();
-
-    /* Enable GPIO clock */
-    AUDIO_OUT_SAIx_MCLK_ENABLE();
-    AUDIO_OUT_SAIx_SCK_SD_ENABLE();
-    AUDIO_OUT_SAIx_FS_ENABLE();
-
-    /* CODEC_SAI pins configuration: FS, SCK, MCK and SD pins ------------------*/
-    gpio_init_structure.Pin = AUDIO_OUT_SAIx_FS_PIN;
-    gpio_init_structure.Mode = GPIO_MODE_AF_PP;
-    gpio_init_structure.Pull = GPIO_NOPULL;
-    gpio_init_structure.Speed = GPIO_SPEED_HIGH;
-    gpio_init_structure.Alternate = AUDIO_OUT_SAIx_FS_SD_MCLK_AF;
-    HAL_GPIO_Init(AUDIO_OUT_SAIx_FS_GPIO_PORT, &gpio_init_structure);
-
-    gpio_init_structure.Pin = AUDIO_OUT_SAIx_SCK_PIN;
-    gpio_init_structure.Mode = GPIO_MODE_AF_PP;
-    gpio_init_structure.Pull = GPIO_NOPULL;
-    gpio_init_structure.Speed = GPIO_SPEED_HIGH;
-    gpio_init_structure.Alternate = AUDIO_OUT_SAIx_SCK_AF;
-    HAL_GPIO_Init(AUDIO_OUT_SAIx_SCK_SD_GPIO_PORT, &gpio_init_structure);
-
-    gpio_init_structure.Pin =  AUDIO_OUT_SAIx_SD_PIN;
-    gpio_init_structure.Mode = GPIO_MODE_AF_PP;
-    gpio_init_structure.Pull = GPIO_NOPULL;
-    gpio_init_structure.Speed = GPIO_SPEED_HIGH;
-    gpio_init_structure.Alternate = AUDIO_OUT_SAIx_FS_SD_MCLK_AF;
-    HAL_GPIO_Init(AUDIO_OUT_SAIx_SCK_SD_GPIO_PORT, &gpio_init_structure);
-
-    gpio_init_structure.Pin = AUDIO_OUT_SAIx_MCLK_PIN;
-    gpio_init_structure.Mode = GPIO_MODE_AF_PP;
-    gpio_init_structure.Pull = GPIO_NOPULL;
-    gpio_init_structure.Speed = GPIO_SPEED_HIGH;
-    gpio_init_structure.Alternate = AUDIO_OUT_SAIx_FS_SD_MCLK_AF;
-    HAL_GPIO_Init(AUDIO_OUT_SAIx_MCLK_GPIO_PORT, &gpio_init_structure);
-
-    /* Enable the DMA clock */
-    AUDIO_OUT_SAIx_DMAx_CLK_ENABLE();
-
-    if(hsai->Instance == AUDIO_OUT_SAIx)
-    {
-        /* Configure the hdma_saiTx handle parameters */
-        hdma_sai_tx.Init.Channel             = AUDIO_OUT_SAIx_DMAx_CHANNEL;
-        hdma_sai_tx.Init.Direction           = DMA_MEMORY_TO_PERIPH;
-        hdma_sai_tx.Init.PeriphInc           = DMA_PINC_DISABLE;
-        hdma_sai_tx.Init.MemInc              = DMA_MINC_ENABLE;
-        hdma_sai_tx.Init.PeriphDataAlignment = AUDIO_OUT_SAIx_DMAx_PERIPH_DATA_SIZE;
-        hdma_sai_tx.Init.MemDataAlignment    = AUDIO_OUT_SAIx_DMAx_MEM_DATA_SIZE;
-        hdma_sai_tx.Init.Mode                = DMA_CIRCULAR;
-        hdma_sai_tx.Init.Priority            = DMA_PRIORITY_HIGH;
-        hdma_sai_tx.Init.FIFOMode            = DMA_FIFOMODE_ENABLE;
-        hdma_sai_tx.Init.FIFOThreshold       = DMA_FIFO_THRESHOLD_FULL;
-        hdma_sai_tx.Init.MemBurst            = DMA_MBURST_SINGLE;
-        hdma_sai_tx.Init.PeriphBurst         = DMA_PBURST_SINGLE;
-
-        hdma_sai_tx.Instance = AUDIO_OUT_SAIx_DMAx_STREAM;
-
-        /* Associate the DMA handle */
-        __HAL_LINKDMA(hsai, hdmatx, hdma_sai_tx);
-
-        /* Deinitialize the Stream for new transfer */
-        HAL_DMA_DeInit(&hdma_sai_tx);
-
-        /* Configure the DMA Stream */
-        HAL_DMA_Init(&hdma_sai_tx);
-    }
-    
-    /* SAI DMA IRQ Channel configuration */
-    HAL_NVIC_SetPriority(AUDIO_OUT_SAIx_DMAx_IRQ, AUDIO_OUT_IRQ_PREPRIO, 0);
-    HAL_NVIC_EnableIRQ(AUDIO_OUT_SAIx_DMAx_IRQ);
-}
-
-
--- a/MyClasses_Functions/BSP_AudioOut_Overwrite.hpp	Wed May 04 12:41:02 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-//--------------------------------------------------------------
-//  Overwrite functuions and define calback function (Header)
-//  for functions in stm32746g_discovery_audio.cpp
-//--------------------------------------------------------------
-
-#ifndef F746_AUDIO_OUT_OVERWRITE_HPP
-#define F746_AUDIO_OUT_OVERWRITE_HPP
-
-#include "stm32746g_discovery_audio.h"
-#include "SAI_Output.hpp"
-
-void AUDIO_OUT_SAIx_DMAx_IRQHandler();
-
-#endif  // F746_AUDIO_OUT_OVERWRITE_HPP
--- a/MyClasses_Functions/MyFunctions.cpp	Wed May 04 12:41:02 2016 +0000
+++ b/MyClasses_Functions/MyFunctions.cpp	Sat May 07 07:33:52 2016 +0000
@@ -1,13 +1,13 @@
 //--------------------------------------------------------------
 //  グラフィックイコライザ付き SD オーディオプレーヤーで使う大域関数
 //
-//  2016/05/01, Copyright (c) 2016 MIKAMI, Naoki
+//  2016/05/07, Copyright (c) 2016 MIKAMI, Naoki
 //--------------------------------------------------------------
 
 #include "MyFunctions.hpp"
 
 // 1フレーム分の信号処理 (イコライザ) の実行
-void ProcessSignal(SD_WavReader &sdReader, SaiIO_O &mySai,
+void ProcessSignal(SD_WavReader &sdReader, SaiIO &mySai,
                    int16_t sn[], BiquadGrEq hn[],
                    int stages, bool on)
 {
@@ -20,7 +20,8 @@
     for (int n=0; n<mySai.GetLength(); n++)
     {
         // 縦続形の IIR フィルタ実行
-        float xn = 0.125f*sn[n];    // 0.125 の乗算はブースとしてもクリップされないようにするため
+        float xn = 0.125f*sn[n];    // 0.125 の乗算はブースとしてもクリップ
+                                    // されないようにするため
         float yn = xn;
         for (int k=0; k<stages; k++) yn = hn[k].Execute(yn);
         int16_t value = on ? (int16_t)yn : xn;
@@ -62,20 +63,9 @@
     int sw = 0;
     if (onOff.GetTouchedNumber(sw))
         on = (sw == 0) ? true : false;
-/*
-    {
-        drawerObj.DesignAndRedraw();
-        for (int n=0; n<drawerObj.GetStages(); n++)
-            hn[n] = BiquadGrEq(drawerObj.GetCoefficient(n));
-        myBars.DrawAll(0);  // ツマミの位置を 0 dB に設定する
-        reset.Draw();
-        return;
-    }
-*/
+
     static int num = 0;
     if (!myBars.GetSlidedNumber(num)) return;
     drawerObj.DesignAndRedraw(myBars.GetValue(num), num);
     hn[num] = BiquadGrEq(drawerObj.GetCoefficient(num));
 }
-
-
--- a/MyClasses_Functions/MyFunctions.hpp	Wed May 04 12:41:02 2016 +0000
+++ b/MyClasses_Functions/MyFunctions.hpp	Sat May 07 07:33:52 2016 +0000
@@ -1,13 +1,13 @@
 //--------------------------------------------------------------
 //  グラフィックイコライザ付き SD オーディオプレーヤーで使う大域関数(ヘッダ)
 //
-//  2016/04/27, Copyright (c) 2016 MIKAMI, Naoki
+//  2016/05/07, Copyright (c) 2016 MIKAMI, Naoki
 //--------------------------------------------------------------
 
 #ifndef F746_MY_FUNCTIONS_HPP
 #define F746_MY_FUNCTIONS_HPP
 
-#include "SAI_Output.hpp"
+#include "SAI_InOut.hpp"
 #include "ButtonGroup.hpp"
 #include "FileSelectorWav.hpp"
 #include "DesignerDrawer.hpp"
@@ -18,7 +18,7 @@
 using namespace Mikami;
 
 // 1フレーム分の信号処理 (イコライザ) の実行
-void ProcessSignal(SD_WavReader &sdReader, SaiIO_O &mySai,
+void ProcessSignal(SD_WavReader &sdReader, SaiIO &mySai,
                    int16_t sn[], BiquadGrEq hn[],
                    int stages, bool on);
 
--- a/MyClasses_Functions/SAI_Output.cpp	Wed May 04 12:41:02 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-//-----------------------------------------------------------
-//  SiaIO class for output
-//  2016/05/04, Copyright (c) 2016 MIKAMI, Naoki
-//-----------------------------------------------------------
-
-#include "SAI_Output.hpp"
-
-namespace Mikami
-{
-    SaiIO_O::SaiIO_O(int size, int fs) : FS_(fs), tmpIndex_(0)
-    {
-        nData_ = size;
-        bufferSize_ = (size*2)*2;
-        outBuffer_ = new int16_t[(size*2)*2];
-        tmp_ = new int16_t[size*2];
-        xferred_ = false;
-        InitCodecOut();
-    }
-
-    SaiIO_O::~SaiIO_O()
-    {
-        delete[] tmp_;
-        delete[] outBuffer_;
-    }
-
-    bool SaiIO_O::IsXferred()
-    {
-        if (xferred_)
-        {
-            tmpIndex_ = 0;
-            return true;
-        }
-        else
-            return false;
-    }
-
-    void SaiIO_O::Output(int16_t xL, int16_t xR)
-    {
-        tmp_[tmpIndex_++] = xL; // Left
-        tmp_[tmpIndex_++] = xR; // Right
-    }
-    
-    void SaiIO_O::ErrorTrap()
-    {
-        DigitalOut led1(LED1);
-        fprintf(stderr, "\r\n### ERROR\r\n");
-        while(true)
-        {
-            led1 = !led1;
-            wait_ms(250);
-        }
-    }
-
-    void SaiIO_O::InitCodecOut()
-    {
-        if (BSP_AUDIO_OUT_Init(OUTPUT_DEVICE_HEADPHONE, VOLUME_OUT_, FS_) == AUDIO_ERROR)
-            ErrorTrap();
-        for (int n=0; n<bufferSize_; n++) outBuffer_[n] = 0;
-        for (int n=0; n<nData_*2; n++) tmp_[n] = 0;
-
-        NVIC_SetVector(AUDIO_OUT_SAIx_DMAx_IRQ, (uint32_t)AUDIO_OUT_SAIx_DMAx_IRQHandler);
-        BSP_AUDIO_OUT_SetAudioFrameSlot(CODEC_AUDIOFRAME_SLOT_02);
-
-        if (BSP_AUDIO_OUT_Play((uint16_t *)outBuffer_,
-                               bufferSize_*AUDIODATA_SIZE) == AUDIO_ERROR)
-            ErrorTrap();
-    }
-
-    void SaiIO_O::FillBuffer(uint32_t offset)
-    {
-        int k = offset;
-        for (int n=0; n<nData_*2; n++)
-             outBuffer_[k++] = tmp_[n];
-        xferred_ = true;
-    }
-
-    // Instances for static variables
-    int32_t SaiIO_O::nData_;
-    int32_t SaiIO_O::bufferSize_;
-    int16_t* SaiIO_O::outBuffer_;
-    int16_t* SaiIO_O::tmp_;       
-    __IO bool SaiIO_O::xferred_;
-}
-
--- a/MyClasses_Functions/SAI_Output.hpp	Wed May 04 12:41:02 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-//-----------------------------------------------------------
-//  SiaIO class for output (Header)
-//  2016/05/04, Copyright (c) 2016 MIKAMI, Naoki
-//-----------------------------------------------------------
-
-#ifndef F746_SAI_IO_HPP
-#define F746_SAI_IO_HPP
-
-#include "mbed.h"
-#include "stm32746g_discovery_audio.h"
-#include "BSP_AudioOut_Overwrite.hpp"
-
-namespace Mikami
-{
-    class SaiIO_O
-    {
-    public:
-        SaiIO_O(int size, int fs);
-        ~SaiIO_O();
-       
-        bool IsXferred();
-        void Output(int16_t xL, int16_t xR);
-        
-        void ResetXferred() { xferred_ = false; }
-        int32_t GetLength() { return nData_; }
-        void Stop()   { BSP_AUDIO_OUT_Stop(CODEC_PDWN_SW); }
-        void Pause()  { BSP_AUDIO_OUT_Pause(); }
-        void Resume() { BSP_AUDIO_OUT_Resume(); }
-
-        
-        // These three member functions are called from
-        // callback functions in "BSP_AudioOut_Overwrite.cpp"
-
-        // Called form BSP_AUDIO_OUT_HalfTransfer_CallBack()
-        static void FillBuffer1st() { FillBuffer(0); }
-        // Called form BSP_AUDIO_OUT_TransferComplete_CallBack()
-        static void FillBuffer2nd() { FillBuffer(bufferSize_/2); }
-        // Also called form BSP_AUDIO_OUT_Error_CallBack()
-        static void ErrorTrap();
-
-    private:
-        const int FS_;
-        static const uint8_t VOLUME_OUT_ = 90;
-
-        static int32_t nData_;
-        static int32_t bufferSize_;
-
-        static int16_t* outBuffer_;
-        static int16_t* tmp_;       
-
-        static __IO bool xferred_;
-        
-        __IO int32_t tmpIndex_;
-
-        void InitCodecOut();
-        static void FillBuffer(uint32_t offset);
-    };
-}
-#endif  // F746_SAI_IO_HPP
--- a/main.cpp	Wed May 04 12:41:02 2016 +0000
+++ b/main.cpp	Sat May 07 07:33:52 2016 +0000
@@ -5,7 +5,7 @@
 //                   上記以外の形式は扱わない
 //      出力:モノラル
 //
-//  2016/05/04, Copyright (c) 2016 MIKAMI, Naoki
+//  2016/05/07, Copyright (c) 2016 MIKAMI, Naoki
 //--------------------------------------------------------------
 
 #include "MyFunctions.hpp"
@@ -19,7 +19,7 @@
     Label myLabel2(212, 16, "---- Graphic equalizer ----", Label::CENTER, Font12);
 
     const int FS = AUDIO_FREQUENCY_44K;         // 標本化周波数: 44.1 kHz
-    SaiIO_O mySai(2048, FS);
+    SaiIO mySai(SaiIO::OUTPUT, 2048, FS);
 
     SD_WavReader sdReader(mySai.GetLength());   // SD カード読み込み用オブジェクト
     const int MAX_FILES = 7;