diff options
Diffstat (limited to 'Core/Src/sai.c')
| -rwxr-xr-x | Core/Src/sai.c | 54 |
1 files changed, 51 insertions, 3 deletions
diff --git a/Core/Src/sai.c b/Core/Src/sai.c index 9bd58d9..9601fc8 100755 --- a/Core/Src/sai.c +++ b/Core/Src/sai.c @@ -27,6 +27,8 @@ SAI_HandleTypeDef hsai_BlockA1;
SAI_HandleTypeDef hsai_BlockB1;
+DMA_HandleTypeDef hdma_sai1_b;
+DMA_HandleTypeDef hdma_sai1_a;
/* SAI1 init function */
void MX_SAI1_Init(void)
@@ -51,7 +53,7 @@ void MX_SAI1_Init(void) hsai_BlockA1.Init.NoDivider = SAI_MCK_OVERSAMPLING_DISABLE;
hsai_BlockA1.Init.MckOverSampling = SAI_MCK_OVERSAMPLING_DISABLE;
hsai_BlockA1.Init.FIFOThreshold = SAI_FIFOTHRESHOLD_EMPTY;
- hsai_BlockA1.Init.AudioFrequency = SAI_AUDIO_FREQUENCY_192K;
+ hsai_BlockA1.Init.AudioFrequency = SAI_AUDIO_FREQUENCY_48K;
hsai_BlockA1.Init.SynchroExt = SAI_SYNCEXT_DISABLE;
hsai_BlockA1.Init.MonoStereoMode = SAI_STEREOMODE;
hsai_BlockA1.Init.CompandingMode = SAI_NOCOMPANDING;
@@ -104,10 +106,31 @@ void HAL_SAI_MspInit(SAI_HandleTypeDef* saiHandle) GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF6_SAI1;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
+ /* Peripheral DMA init*/
+
+ hdma_sai1_a.Instance = DMA1_Stream1;
+ hdma_sai1_a.Init.Request = DMA_REQUEST_SAI1_A;
+ hdma_sai1_a.Init.Direction = DMA_MEMORY_TO_PERIPH;
+ hdma_sai1_a.Init.PeriphInc = DMA_PINC_DISABLE;
+ hdma_sai1_a.Init.MemInc = DMA_MINC_ENABLE;
+ hdma_sai1_a.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
+ hdma_sai1_a.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
+ hdma_sai1_a.Init.Mode = DMA_CIRCULAR;
+ hdma_sai1_a.Init.Priority = DMA_PRIORITY_HIGH;
+ hdma_sai1_a.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
+ if (HAL_DMA_Init(&hdma_sai1_a) != HAL_OK)
+ {
+ Error_Handler();
+ }
+
+ /* Several peripheral DMA handle pointers point to the same DMA handle.
+ Be aware that there is only one channel to perform all the requested DMAs. */
+ __HAL_LINKDMA(saiHandle,hdmarx,hdma_sai1_a);
+ __HAL_LINKDMA(saiHandle,hdmatx,hdma_sai1_a);
}
if(saiHandle->Instance==SAI1_Block_B)
{
@@ -124,10 +147,31 @@ void HAL_SAI_MspInit(SAI_HandleTypeDef* saiHandle) GPIO_InitStruct.Pin = GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF6_SAI1;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
+ /* Peripheral DMA init*/
+
+ hdma_sai1_b.Instance = DMA1_Stream0;
+ hdma_sai1_b.Init.Request = DMA_REQUEST_SAI1_B;
+ hdma_sai1_b.Init.Direction = DMA_PERIPH_TO_MEMORY;
+ hdma_sai1_b.Init.PeriphInc = DMA_PINC_DISABLE;
+ hdma_sai1_b.Init.MemInc = DMA_MINC_ENABLE;
+ hdma_sai1_b.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
+ hdma_sai1_b.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
+ hdma_sai1_b.Init.Mode = DMA_CIRCULAR;
+ hdma_sai1_b.Init.Priority = DMA_PRIORITY_HIGH;
+ hdma_sai1_b.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
+ if (HAL_DMA_Init(&hdma_sai1_b) != HAL_OK)
+ {
+ Error_Handler();
+ }
+
+ /* Several peripheral DMA handle pointers point to the same DMA handle.
+ Be aware that there is only one channel to perform all the requested DMAs. */
+ __HAL_LINKDMA(saiHandle,hdmarx,hdma_sai1_b);
+ __HAL_LINKDMA(saiHandle,hdmatx,hdma_sai1_b);
}
}
@@ -152,6 +196,8 @@ void HAL_SAI_MspDeInit(SAI_HandleTypeDef* saiHandle) */
HAL_GPIO_DeInit(GPIOE, GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6);
+ HAL_DMA_DeInit(saiHandle->hdmarx);
+ HAL_DMA_DeInit(saiHandle->hdmatx);
}
if(saiHandle->Instance==SAI1_Block_B)
{
@@ -167,6 +213,8 @@ void HAL_SAI_MspDeInit(SAI_HandleTypeDef* saiHandle) */
HAL_GPIO_DeInit(GPIOE, GPIO_PIN_3);
+ HAL_DMA_DeInit(saiHandle->hdmarx);
+ HAL_DMA_DeInit(saiHandle->hdmatx);
}
}
|
