function to reset the I2S DMA address pointer
Hello everyone.
For my application I have a DAC communicating with an STM32F4 through I2S. On the microcontroller’s side, informations are sent to the DAC through a DMA stream, with a circular buffer. On an external interrupt, I would like to pause the DMA, change some sound parameters and then resume the DMA stream.
My interrupt routine is basically like that :
void HAL_GPIO_EXTI_Callback(uint16_t pin)
{
if(pin == GPIO_PIN_13)
{
HAL_I2S_DMAPause(&hi2s2);
changeSound(&sound);
HAL_I2S_DMAResume(&hi2s2);
}
}
And I have 2 interrupt routines triggered on DMA TxHalf/TxCplt that fill each half of my DMA buffer with the sound.
What I want to avoid is to transfer some remaining samples of the old sound after my Exti interrupt. So my idea was to fill the whole buffer after changing the sound, and then reset the memory pointer of the DMA stream to the beginning of my buffer.
It would look something like that :
void HAL_GPIO_EXTI_Callback(uint16_t pin)
{
if(pin == GPIO_PIN_13)
{
HAL_I2S_DMAPause(&hi2s2);
changeSound(&sound);
fillBuffer( &buffer, &sound);
*reset_DMA(&hi2s2)*;