Arduino Pro Portenta H7 I2S и DMAC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Arduino Pro Portenta H7 I2S и DMA

Сообщение Anonymous »


Я хочу использовать Arduino Pro Portenta H7 для воспроизведения музыки с помощью MAX98357A

На данный момент только hi2s2 без DMA работает нормально (режим блокировки). Когда я хочу использовать DMA для асинхронной передачи данных, это не работает.

при выполнении программы: HAL_I2S_StateTypeDef i2sState = HAL_I2S_GetState(&hi2s2); возврат: HAL_I2S_STATE_ERROR (0x07UL)

и при выполнении программы: _statusI2S = HAL_I2S_Transmit_DMA(&hi2s2, _audioBuffer2, _audioBufferSize); возврат: HAL_BUSY (0x02)

когда я использовал функцию в библиотеках STM32h7... для связи i2s и DMA, Arduino зависала.

void I2S2_Prep_TX(unsigned long audioFreq){ __HAL_RCC_DMA1_CLK_ENABLE(); hdma_i2s_tx.Instance = DMA1_Stream4; // DMA1, Stream4 (SPI3/I2S3 TX) hdma_i2s_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; hdma_i2s_tx.Init.PeriphInc = DMA_PINC_DISABLE; hdma_i2s_tx.Init.MemInc = DMA_MINC_ENABLE; hdma_i2s_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; hdma_i2s_tx.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; hdma_i2s_tx.Init.Mode = DMA_CIRCULAR; hdma_i2s_tx.Init.Priority = DMA_PRIORITY_HIGH; hdma_i2s_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; if (HAL_DMA_Init(&hdma_i2s_tx) != HAL_OK) { dmaError = HAL_DMA_GetError(&hdma_i2s_tx); Ошибка_Обработчик(); } hi2s2.Instance = SPI2; hi2s2.Init.Mode = I2S_MODE_MASTER_TX; hi2s2.Init.Standard = I2S_STANDARD_PHILIPS; hi2s2.Init.DataFormat = I2S_DATAFORMAT_16B; hi2s2.Init.MCLKOutput = I2S_MCLKOUTPUT_ENABLE; //hi2s2.Init.AudioFreq = I2S_AUDIOFREQ_8K; hi2s2.Init.AudioFreq = audioFreq; hi2s2.Init.CPOL = I2S_CPOL_LOW; hi2s2.Init.FirstBit = I2S_FIRSTBIT_MSB; hi2s2.Init.WSInversion = I2S_WS_INVERSION_DISABLE; hi2s2.Init.Data24BitAlignment = I2S_DATA_24BIT_ALIGNMENT_LEFT; hi2s2.Init.MasterKeepIOState = I2S_MASTER_KEEP_IO_STATE_DISABLE; hi2s2.hdmatx = &hdma_i2s_tx; если (HAL_I2S_Init(&hi2s2) != HAL_OK) { i2sError = HAL_I2S_GetError(&hi2s2); Ошибка_Обработчик(); } } Есть ли у вас какое-либо решение или идеи, как решить эту проблему? Спасибо
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»