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

Dependencies:   BSP_DISCO_F746NG_patch_fixed mbed

Committer:
nanase
Date:
Fri Dec 25 17:55:24 2015 +0000
Revision:
0:1d5b62d757e2
First commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nanase 0:1d5b62d757e2 1 #include "mbed.h"
nanase 0:1d5b62d757e2 2 #include "stm32746g_discovery_audio.h"
nanase 0:1d5b62d757e2 3
nanase 0:1d5b62d757e2 4 #define PI ((double)3.1415926535897932384626433832795028)
nanase 0:1d5b62d757e2 5 #define SamplingFreq I2S_AUDIOFREQ_16K
nanase 0:1d5b62d757e2 6 #define BufferSize (SamplingFreq * DEFAULT_AUDIO_IN_CHANNEL_NBR)
nanase 0:1d5b62d757e2 7
nanase 0:1d5b62d757e2 8 #define AudioVolume ((uint8_t)8)
nanase 0:1d5b62d757e2 9 #define Amplifier ((double)0.25)
nanase 0:1d5b62d757e2 10 #define SineFreq ((double)440.0)
nanase 0:1d5b62d757e2 11
nanase 0:1d5b62d757e2 12 /* 注意:
nanase 0:1d5b62d757e2 13 * AudioVolume で AudioOut のボリュームが設定できるはずだが、
nanase 0:1d5b62d757e2 14 * 現時点のライブラリだと、たとえば 0 だと大音量で再生される。
nanase 0:1d5b62d757e2 15 */
nanase 0:1d5b62d757e2 16
nanase 0:1d5b62d757e2 17 DigitalOut led1(LED1);
nanase 0:1d5b62d757e2 18 int16_t buffer[BufferSize];
nanase 0:1d5b62d757e2 19
nanase 0:1d5b62d757e2 20 void error_trap()
nanase 0:1d5b62d757e2 21 {
nanase 0:1d5b62d757e2 22 while(1) {
nanase 0:1d5b62d757e2 23 led1 = !led1;
nanase 0:1d5b62d757e2 24 wait_ms(250);
nanase 0:1d5b62d757e2 25 }
nanase 0:1d5b62d757e2 26 }
nanase 0:1d5b62d757e2 27
nanase 0:1d5b62d757e2 28 void init_audio()
nanase 0:1d5b62d757e2 29 {
nanase 0:1d5b62d757e2 30 if (BSP_AUDIO_OUT_Init(OUTPUT_DEVICE_BOTH, AudioVolume, SamplingFreq) == AUDIO_ERROR)
nanase 0:1d5b62d757e2 31 error_trap();
nanase 0:1d5b62d757e2 32
nanase 0:1d5b62d757e2 33 BSP_AUDIO_OUT_SetAudioFrameSlot(CODEC_AUDIOFRAME_SLOT_02);
nanase 0:1d5b62d757e2 34 }
nanase 0:1d5b62d757e2 35
nanase 0:1d5b62d757e2 36 void play_audio()
nanase 0:1d5b62d757e2 37 {
nanase 0:1d5b62d757e2 38 /* Generate sine wave */
nanase 0:1d5b62d757e2 39 for (int i = 0; i < SamplingFreq; i++) {
nanase 0:1d5b62d757e2 40 buffer[i * 2 + 1] =
nanase 0:1d5b62d757e2 41 buffer[i * 2 + 0] =
nanase 0:1d5b62d757e2 42 (int16_t)(Amplifier * sin(2.0 * PI * SineFreq * i / SamplingFreq) * 32767.5);
nanase 0:1d5b62d757e2 43 }
nanase 0:1d5b62d757e2 44
nanase 0:1d5b62d757e2 45 if (BSP_AUDIO_OUT_Play((uint16_t*)&buffer, BufferSize * AUDIODATA_SIZE) == AUDIO_ERROR)
nanase 0:1d5b62d757e2 46 error_trap();
nanase 0:1d5b62d757e2 47 }
nanase 0:1d5b62d757e2 48
nanase 0:1d5b62d757e2 49 int main()
nanase 0:1d5b62d757e2 50 {
nanase 0:1d5b62d757e2 51 init_audio();
nanase 0:1d5b62d757e2 52 play_audio();
nanase 0:1d5b62d757e2 53
nanase 0:1d5b62d757e2 54 while(1)
nanase 0:1d5b62d757e2 55 wait(1);
nanase 0:1d5b62d757e2 56 }