DISCO-F746NGのAudioOutから正弦波を出力するプログラムです。 This program outputs sine wave from AudioOut on DISCO-F746NG.

Dependencies:   BSP_DISCO_F746NG_patch_fixed mbed

main.cpp

Committer:
nanase
Date:
2015-12-25
Revision:
0:1d5b62d757e2

File content as of revision 0:1d5b62d757e2:

#include "mbed.h"
#include "stm32746g_discovery_audio.h"

#define PI              ((double)3.1415926535897932384626433832795028)
#define SamplingFreq    I2S_AUDIOFREQ_16K
#define BufferSize      (SamplingFreq * DEFAULT_AUDIO_IN_CHANNEL_NBR)

#define AudioVolume     ((uint8_t)8)
#define Amplifier       ((double)0.25)
#define SineFreq        ((double)440.0)

/* 注意:
 * AudioVolume で AudioOut のボリュームが設定できるはずだが、
 * 現時点のライブラリだと、たとえば 0 だと大音量で再生される。
 */

DigitalOut led1(LED1);
int16_t buffer[BufferSize];

void error_trap()
{
    while(1) {
        led1 = !led1;
        wait_ms(250);
    }
}

void init_audio()
{
    if (BSP_AUDIO_OUT_Init(OUTPUT_DEVICE_BOTH, AudioVolume, SamplingFreq) == AUDIO_ERROR)
        error_trap();
    
    BSP_AUDIO_OUT_SetAudioFrameSlot(CODEC_AUDIOFRAME_SLOT_02);
}

void play_audio()
{
    /* Generate sine wave */
    for (int i = 0; i < SamplingFreq; i++) {
        buffer[i * 2 + 1] =
            buffer[i * 2 + 0] =
                (int16_t)(Amplifier * sin(2.0 * PI * SineFreq * i / SamplingFreq) * 32767.5);
    }
        
    if (BSP_AUDIO_OUT_Play((uint16_t*)&buffer, BufferSize * AUDIODATA_SIZE) == AUDIO_ERROR)
        error_trap();
}

int main()
{
    init_audio();
    play_audio();

    while(1)
        wait(1);
}