@@ -148,6 +148,7 @@ void HAL_DFSDM_FilterMspInit(DFSDM_Filter_HandleTypeDef* hdfsdm_filter)
148
148
hdma_dfsdm1_flt0 .Init .Mode = DMA_CIRCULAR ;
149
149
hdma_dfsdm1_flt0 .Init .Priority = DMA_PRIORITY_LOW ;
150
150
hdma_dfsdm1_flt0 .Init .FIFOMode = DMA_FIFOMODE_DISABLE ;
151
+ HAL_DMA_DeInit (& hdma_dfsdm1_flt0 );
151
152
if (HAL_DMA_Init (& hdma_dfsdm1_flt0 ) != HAL_OK )
152
153
{
153
154
Error_Handler ();
@@ -214,7 +215,10 @@ void HAL_DFSDM_FilterMspDeInit(DFSDM_Filter_HandleTypeDef* hdfsdm_filter)
214
215
if (DFSDM1_Init == 0 )
215
216
{
216
217
/* Peripheral clock disable */
217
- __HAL_RCC_DFSDM1_CLK_DISABLE ();
218
+ if (HAL_RCC_DFSDM1_CLK_ENABLED > 0 ) {
219
+ __HAL_RCC_DFSDM1_CLK_DISABLE ();
220
+ HAL_RCC_DFSDM1_CLK_ENABLED -- ;
221
+ }
218
222
219
223
/**DFSDM1 GPIO Configuration
220
224
PD10 ------> DFSDM1_CKOUT
@@ -245,7 +249,10 @@ void HAL_DFSDM_ChannelMspDeInit(DFSDM_Channel_HandleTypeDef* hdfsdm_channel)
245
249
if (DFSDM1_Init == 0 )
246
250
{
247
251
/* Peripheral clock disable */
248
- __HAL_RCC_DFSDM1_CLK_DISABLE ();
252
+ if (HAL_RCC_DFSDM1_CLK_ENABLED > 0 ) {
253
+ __HAL_RCC_DFSDM1_CLK_DISABLE ();
254
+ HAL_RCC_DFSDM1_CLK_ENABLED -- ;
255
+ }
249
256
250
257
/**DFSDM1 GPIO Configuration
251
258
PD10 ------> DFSDM1_CKOUT
@@ -295,6 +302,7 @@ static int DFSDM_Init(uint32_t frequency)
295
302
hdfsdm1_channel2 .Init .Awd .Oversampling = 2000000 /frequency ; /* 2MHz/125 = 16kHz */
296
303
hdfsdm1_channel2 .Init .Offset = 0 ;
297
304
hdfsdm1_channel2 .Init .RightBitShift = 0 ;
305
+ HAL_DFSDM_ChannelDeInit (& hdfsdm1_channel2 );
298
306
if (HAL_OK != HAL_DFSDM_ChannelInit (& hdfsdm1_channel2 ))
299
307
{
300
308
return 0 ;
@@ -313,6 +321,7 @@ static int DFSDM_Init(uint32_t frequency)
313
321
hdfsdm1_filter0 .Init .FilterParam .SincOrder = DFSDM_FILTER_FASTSINC_ORDER ;
314
322
hdfsdm1_filter0 .Init .FilterParam .Oversampling = 2000000 /frequency ; /* 2MHz/125 = 16kHz */
315
323
hdfsdm1_filter0 .Init .FilterParam .IntOversampling = 1 ;
324
+ HAL_DFSDM_FilterDeInit (& hdfsdm1_filter0 );
316
325
if (HAL_OK != HAL_DFSDM_FilterInit (& hdfsdm1_filter0 ))
317
326
{
318
327
return 0 ;
@@ -398,13 +407,29 @@ void py_audio_gain_set(int gain_db)
398
407
399
408
void py_audio_deinit ()
400
409
{
401
- py_audio_stop_streaming ();
402
- HAL_DFSDM_FilterDeInit (& hdfsdm1_filter0 );
403
-
404
410
// Disable IRQs
411
+ HAL_NVIC_DisableIRQ (DFSDM1_FLT0_IRQn );
412
+ HAL_NVIC_DisableIRQ (DFSDM1_FLT1_IRQn );
405
413
HAL_NVIC_DisableIRQ (AUDIO_DFSDM1_DMA_IRQ );
406
414
415
+ if (hdfsdm1_channel2 .Instance != NULL ) {
416
+ HAL_DFSDM_ChannelDeInit (& hdfsdm1_channel2 );
417
+ hdfsdm1_channel2 .Instance = NULL ;
418
+ }
419
+
420
+ if (hdfsdm1_filter0 .Instance != NULL ) {
421
+ //HAL_DFSDM_FilterRegularStop_DMA(&hdfsdm1_filter0);
422
+ HAL_DFSDM_FilterDeInit (& hdfsdm1_filter0 );
423
+ hdfsdm1_filter0 .Instance = NULL ;
424
+ }
425
+
426
+ if (hdma_dfsdm1_flt0 .Instance != NULL ) {
427
+ HAL_DMA_DeInit (& hdma_dfsdm1_flt0 );
428
+ hdma_dfsdm1_flt0 .Instance = NULL ;
429
+ }
430
+
407
431
//free(g_pcmbuf);
432
+ xfer_status = 0 ;
408
433
g_pcmbuf = NULL ;
409
434
}
410
435
0 commit comments