2016-07-13 09:56 AM
Hi, I am working with the STM32F4 discovery board and I'm trying to use the built in codec. I am trying to configure it to play audio from 2 alternating buffers I create. I have set up my callback function to start playing the next buffer once the previous buffer is finished. Currently for testing purposes I set all values in one buffer to 0 and all in the other to 32767, which creates a crude square wave, but I am not getting any audio out, can anyone see what I am missing?
I start audio playback in my main via:&sharpdefine MY_BUFSIZE 1024static volatile uint8_t nextbuf;static volatile uint16_t bufferNumber;static int16_t buf0[MY_BUFSIZE];static int16_t buf1[MY_BUFSIZE];int main(void){ SystemInit(); EVAL_AUDIO_SetAudioInterface(AUDIO_INTERFACE_I2S); EVAL_AUDIO_Init(OUTPUT_DEVICE_BOTH, 100, 48000); compute_buffer(buf0, MY_BUFSIZE, 0); compute_buffer(buf1, MY_BUFSIZE, 1); Audio_MAL_Play((uint32_t)buf0, MY_BUFSIZE / 2); //EVAL_AUDIO_Play((uint16_t*)buf0, MY_BUFSIZE/2); while(1){}}Here is my callback function:void EVAL_AUDIO_TransferComplete_CallBack(uint32_t pBuffer, uint32_t Size){ if(nextbuf == 0) { ; Audio_MAL_Play((uint32_t)buf0, MY_BUFSIZE); nextbuf = 1; } else { Audio_MAL_Play((uint32_t)buf1, MY_BUFSIZE); nextbuf = 0; }}Here is how I fill the buffers:void compute_buffer(int16_t *pbuf, int bufsize, uint16_t bufferNumber){ int i; for(i = 0; i < bufsize / 2; i+=2) { pbuf[i] = bufferNumber * 32767; pbuf[i + 1] = bufferNumber * 32767; }}Do I need to use the DAC instead of I2S, or is there something else I need to configure? I was having a hard time finding how the EVAL_AUDIO_TransferComplete_CallBack function is connected to the Audio_MAL_Play function. I also tried using EVAL_AUDIO_Play, with the same results. #stm32f4discovery-audio-codec