diff --git a/src/omv/boards/PORTENTA/omv_boardconfig.h b/src/omv/boards/PORTENTA/omv_boardconfig.h index eae36a7e4..88a20a520 100644 --- a/src/omv/boards/PORTENTA/omv_boardconfig.h +++ b/src/omv/boards/PORTENTA/omv_boardconfig.h @@ -268,6 +268,47 @@ #define SOFT_I2C_SPIN_DELAY 64 +// SAI4 +#define AUDIO_SAI (SAI4_Block_A) + +#define AUDIO_SAI_CK_PORT (GPIOE) +#define AUDIO_SAI_CK_PIN (GPIO_PIN_2) +#define AUDIO_SAI_CK_AF (GPIO_AF10_SAI4) + +#define AUDIO_SAI_D1_PORT (GPIOB) +#define AUDIO_SAI_D1_PIN (GPIO_PIN_2) +#define AUDIO_SAI_D1_AF (GPIO_AF10_SAI4) + +#define AUDIO_SAI_DMA_STREAM BDMA_Channel1 +#define AUDIO_SAI_DMA_REQUEST BDMA_REQUEST_SAI4_A +#define AUDIO_SAI_DMA_IRQ BDMA_Channel1_IRQn +#define AUDIO_SAI_DMA_IRQHandler BDMA_Channel1_IRQHandler + +#define AUDIO_SAI_CLK_ENABLE() __HAL_RCC_SAI4_CLK_ENABLE() +#define AUDIO_SAI_CLK_DISABLE() __HAL_RCC_SAI4_CLK_DISABLE() +#define AUDIO_SAI_DMA_CLK_ENABLE() __HAL_RCC_BDMA_CLK_ENABLE() + +// SAI1 +// Set SAI1 clock source in system ex: Sai1ClockSelection = RCC_SAI1CLKSOURCE_PLL; +// #define AUDIO_SAI (SAI1_Block_A) +// +// #define AUDIO_SAI_CK_PORT (GPIOE) +// #define AUDIO_SAI_CK_PIN (GPIO_PIN_2) +// #define AUDIO_SAI_CK_AF (GPIO_AF2_SAI1) +// +// #define AUDIO_SAI_D1_PORT (GPIOB) +// #define AUDIO_SAI_D1_PIN (GPIO_PIN_2) +// #define AUDIO_SAI_D1_AF (GPIO_AF2_SAI1) +// +// #define AUDIO_SAI_DMA_STREAM DMA2_Stream6 +// #define AUDIO_SAI_DMA_REQUEST DMA_REQUEST_SAI1_A +// #define AUDIO_SAI_DMA_IRQ DMA2_Stream6_IRQn +// #define AUDIO_SAI_DMA_IRQHandler DMA2_Stream6_IRQHandler +// +// #define AUDIO_SAI_CLK_ENABLE() __HAL_RCC_SAI1_CLK_ENABLE() +// #define AUDIO_SAI_CLK_DISABLE() __HAL_RCC_SAI1_CLK_DISABLE() +// #define AUDIO_SAI_DMA_CLK_ENABLE() __HAL_RCC_DMA2_CLK_ENABLE() + // Enable additional GPIO banks for DRAM... #define OMV_ENABLE_GPIO_BANK_F #define OMV_ENABLE_GPIO_BANK_G diff --git a/src/omv/stm32fxxx_hal_msp.c b/src/omv/stm32fxxx_hal_msp.c index 3b203dd21..92cbb2c57 100644 --- a/src/omv/stm32fxxx_hal_msp.c +++ b/src/omv/stm32fxxx_hal_msp.c @@ -304,6 +304,39 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi) #endif } +#if defined(AUDIO_SAI) +void HAL_SAI_MspInit(SAI_HandleTypeDef* hsai) +{ + GPIO_InitTypeDef GPIO_InitStruct; + if (hsai->Instance == AUDIO_SAI) { + AUDIO_SAI_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AUDIO_SAI_CK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + GPIO_InitStruct.Alternate = AUDIO_SAI_CK_AF; + HAL_GPIO_Init(AUDIO_SAI_CK_PORT, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = AUDIO_SAI_D1_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + GPIO_InitStruct.Alternate = AUDIO_SAI_D1_AF; + HAL_GPIO_Init(AUDIO_SAI_D1_PORT, &GPIO_InitStruct); + } +} + +void HAL_SAI_MspDeInit(SAI_HandleTypeDef* hsai) +{ + if (hsai->Instance == SAI4_Block_A) { + AUDIO_SAI_CLK_DISABLE(); + HAL_GPIO_DeInit(AUDIO_SAI_CK_PORT, AUDIO_SAI_CK_PIN); + HAL_GPIO_DeInit(AUDIO_SAI_D1_PORT, AUDIO_SAI_D1_PIN); + } +} +#endif + void HAL_MspDeInit(void) {