Skip to content
This repository was archived by the owner on Feb 21, 2020. It is now read-only.

Commit 22210a5

Browse files
committed
added Mic Management
1 parent f69702f commit 22210a5

File tree

17 files changed

+10674
-19432
lines changed

17 files changed

+10674
-19432
lines changed

cores/arduino/BSP/OTTO/otto_audio_inout.c

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ AUDIO_DrvTypeDef *audio_drv;
123123
SAI_HandleTypeDef haudio_out_sai;
124124
SAI_HandleTypeDef haudio_in_sai;
125125
uint16_t __IO AudioInVolume = DEFAULT_AUDIO_IN_VOLUME;
126-
126+
127127
/**
128128
* @}
129129
*/
@@ -170,7 +170,6 @@ uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t Audio
170170
{
171171
uint8_t ret = AUDIO_ERROR;
172172
uint32_t deviceid = 0x00;
173-
uint8_t buffer_fake[32] = {0x00};
174173

175174
SAIx_DeInit();
176175

@@ -207,11 +206,8 @@ uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t Audio
207206
/* Resets the audio codec. */
208207
audio_drv->Reset(AUDIO_I2C_ADDRESS);
209208

210-
HAL_SAI_Transmit_DMA(&haudio_out_sai, buffer_fake, 32);
211-
212209
/* Initialize the codec internal registers */
213210
audio_drv->Init(AUDIO_I2C_ADDRESS, OutputDevice, Volume, AudioFreq);
214-
HAL_SAI_DMAStop(&haudio_out_sai);
215211
}
216212

217213

@@ -471,7 +467,22 @@ void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai)
471467
*/
472468
void HAL_SAI_ErrorCallback(SAI_HandleTypeDef *hsai)
473469
{
474-
BSP_AUDIO_OUT_Error_CallBack();
470+
HAL_SAI_StateTypeDef audio_out_state;
471+
HAL_SAI_StateTypeDef audio_in_state;
472+
473+
audio_out_state = HAL_SAI_GetState(&haudio_out_sai);
474+
audio_in_state = HAL_SAI_GetState(&haudio_in_sai);
475+
476+
/* Determines if it is an audio out or audio in error */
477+
if ((audio_out_state == HAL_SAI_STATE_BUSY) || (audio_out_state == HAL_SAI_STATE_BUSY_TX))
478+
{
479+
BSP_AUDIO_OUT_Error_CallBack();
480+
}
481+
482+
if ((audio_in_state == HAL_SAI_STATE_BUSY) || (audio_in_state == HAL_SAI_STATE_BUSY_RX))
483+
{
484+
BSP_AUDIO_IN_Error_CallBack();
485+
}
475486
}
476487

477488
/**
@@ -749,8 +760,7 @@ uint8_t BSP_AUDIO_IN_Init(uint16_t InputDevice, uint8_t Volume, uint32_t AudioFr
749760
uint8_t ret = AUDIO_ERROR;
750761
uint32_t deviceid = 0x00;
751762
uint32_t slot_active;
752-
uint8_t buffer_fake[32] = {0x00};
753-
/* Only MICROPHONE_2 input supported */
763+
/* Only MICROPHONE_2 input supported */
754764
if (InputDevice != INPUT_DEVICE_DIGITAL_MICROPHONE_2)
755765
{
756766
ret = AUDIO_ERROR;
@@ -805,7 +815,6 @@ uint8_t BSP_AUDIO_IN_Init(uint16_t InputDevice, uint8_t Volume, uint32_t AudioFr
805815
/* Reset the Codec Registers */
806816
wm8994_drv.Reset(AUDIO_I2C_ADDRESS);
807817

808-
HAL_SAI_Receive_DMA(&haudio_in_sai, buffer_fake, 32);
809818
/* Initialize the audio driver structure */
810819
audio_drv = &wm8994_drv;
811820
ret = AUDIO_OK;
@@ -973,7 +982,7 @@ __weak void BSP_AUDIO_IN_HalfTransfer_CallBack(void)
973982
/**
974983
* @brief Audio IN Error callback function.
975984
*/
976-
__weak void BSP_AUDIO_IN_Error_Callback(void)
985+
__weak void BSP_AUDIO_IN_Error_CallBack(void)
977986
{
978987
/* This function is called when an Interrupt due to transfer error on or peripheral
979988
error occurs. */
@@ -1015,6 +1024,9 @@ __weak void BSP_AUDIO_IN_MspInit(SAI_HandleTypeDef *hsai, void *Params)
10151024
/* Enable the DMA clock */
10161025
AUDIO_IN_SAIx_DMAx_CLK_ENABLE();
10171026

1027+
/* arduino internal driver init - somehow redundant with above */
1028+
dma_init(DMA2);
1029+
10181030
if(hsai->Instance == AUDIO_IN_SAIx)
10191031
{
10201032
/* Configure the hdma_sai_rx handle parameters */
@@ -1045,6 +1057,8 @@ __weak void BSP_AUDIO_IN_MspInit(SAI_HandleTypeDef *hsai, void *Params)
10451057

10461058
/* SAI DMA IRQ Channel configuration */
10471059
HAL_NVIC_SetPriority(AUDIO_IN_SAIx_DMAx_IRQ, AUDIO_IN_IRQ_PREPRIO, 0);
1060+
/* Register also the IRQ in arduino DMA driver so that correct handler is called */
1061+
dma_attach_interrupt(DMA2, DMA_STREAM3, BSP_AUDIO_IN_DMA2_Stream3_IRQHandler);
10481062
HAL_NVIC_EnableIRQ(AUDIO_IN_SAIx_DMAx_IRQ);
10491063

10501064
/* Audio INT IRQ Channel configuration */
@@ -1176,7 +1190,7 @@ static void SAIx_In_Init(uint32_t SaiOutMode, uint32_t SlotActive, uint32_t Audi
11761190
/* Configure SAI_Block_x Frame
11771191
Frame Length: 64
11781192
Frame active Length: 32
1179-
FS Definition: Start frame Channel Side identification
1193+
FS Definition: Start frame + Channel Side identification
11801194
FS Polarity: FS active Low
11811195
FS Offset: FS asserted one bit before the first bit of slot 0 */
11821196
haudio_in_sai.FrameInit.FrameLength = 64;

cores/arduino/BSP/OTTO/otto_audio_inout.h

Lines changed: 4 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -101,40 +101,6 @@
101101
#define AUDIO_SAIx_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD
102102
#define DMA_MAX_SZE 0xFFFF
103103

104-
#define AUDIO_SAIx_DMAx_IRQHandler DMA2_Stream5_IRQHandler
105-
106-
///* SAI peripheral configuration defines */
107-
//#define AUDIO_SAIx HAL_SAI1_Block_A
108-
//#define AUDIO_SAIx_CLK_ENABLE() __HAL_RCC_SAI1_CLK_ENABLE()
109-
//#define AUDIO_SAIx_CLK_DISABLE() __HAL_RCC_SAI1_CLK_DISABLE()
110-
//#define AUDIO_SAIx_MCLK_SCK_SD_FS_AF GPIO_AF6_SAI1
111-
//
112-
//#define AUDIO_SAIx_MCLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE()
113-
//#define AUDIO_SAIx_MCLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE()
114-
//
115-
//#define AUDIO_SAIx_MCK_PIN GPIO_PIN_7
116-
//#define AUDIO_SAIx_MCLK_GPIO_PORT HAL_GPIOG
117-
//
118-
//#define AUDIO_SAIx_SCK_SD_FS_ENABLE() __HAL_RCC_GPIOE_CLK_ENABLE()
119-
//#define AUDIO_SAIx_SCK_SD_FS_DISABLE() __HAL_RCC_GPIOE_CLK_DISABLE()
120-
//#define AUDIO_SAIx_FS_PIN GPIO_PIN_4
121-
//#define AUDIO_SAIx_SCK_PIN GPIO_PIN_5
122-
//#define AUDIO_SAIx_SD_PIN GPIO_PIN_6
123-
//#define AUDIO_SAIx_SCK_SD_FS_GPIO_PORT HAL_GPIOE
124-
//
125-
//
126-
///* SAI DMA Stream definitions */
127-
//#define AUDIO_SAIx_DMAx_CLK_ENABLE() __HAL_RCC_DMA2_CLK_ENABLE()
128-
//#define AUDIO_SAIx_DMAx_CLK_DISABLE() __HAL_RCC_DMA2_CLK_DISABLE()
129-
//#define AUDIO_SAIx_DMAx_STREAM HAL_DMA2_Stream3
130-
//#define AUDIO_SAIx_DMAx_CHANNEL DMA_CHANNEL_0
131-
//#define AUDIO_SAIx_DMAx_IRQ DMA2_Stream3_IRQn
132-
//#define AUDIO_SAIx_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD
133-
//#define AUDIO_SAIx_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD
134-
//#define DMA_MAX_SZE 0xFFFF
135-
//
136-
//#define AUDIO_SAIx_DMAx_IRQHandler DMA2_Stream3_IRQHandler
137-
138104
/* Select the interrupt preemption priority for the DMA interrupt */
139105
#define AUDIO_OUT_IRQ_PREPRIO 5 /* Select the preemption priority level(0 is the highest) */
140106

@@ -158,14 +124,12 @@
158124

159125
/* SAI DMA Stream definitions */
160126
#define AUDIO_IN_SAIx_DMAx_CLK_ENABLE() __HAL_RCC_DMA2_CLK_ENABLE()
161-
#define AUDIO_IN_SAIx_DMAx_STREAM HAL_DMA2_Stream1
127+
#define AUDIO_IN_SAIx_DMAx_STREAM HAL_DMA2_Stream3
162128
#define AUDIO_IN_SAIx_DMAx_CHANNEL DMA_CHANNEL_0
163-
#define AUDIO_IN_SAIx_DMAx_IRQ DMA2_Stream1_IRQn
129+
#define AUDIO_IN_SAIx_DMAx_IRQ DMA2_Stream3_IRQn
164130
#define AUDIO_IN_SAIx_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD
165131
#define AUDIO_IN_SAIx_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD
166132

167-
#define AUDIO_IN_SAIx_DMAx_IRQHandler DMA2_Stream1_IRQHandler
168-
#define AUDIO_IN_INT_IRQHandler EXTI9_5_IRQHandler
169133

170134
/* Select the interrupt preemption priority and subpriority for the IT/DMA interrupt */
171135
#define AUDIO_IN_IRQ_PREPRIO ((uint32_t)6) /* Select the preemption priority level(0 is the highest) */
@@ -298,14 +262,15 @@ void BSP_AUDIO_IN_HalfTransfer_CallBack(void);
298262

299263
/* This function is called when an Interrupt due to transfer error on or peripheral
300264
error occurs. */
301-
void BSP_AUDIO_IN_Error_Callback(void);
265+
void BSP_AUDIO_IN_Error_CallBack(void);
302266

303267
/* These function can be modified in case the current settings (e.g. DMA stream)
304268
need to be changed for specific application needs */
305269
void BSP_AUDIO_IN_ClockConfig(SAI_HandleTypeDef *hsai, uint32_t AudioFreq, void *Params);
306270
void BSP_AUDIO_IN_MspInit(SAI_HandleTypeDef *hsai, void *Params);
307271
void BSP_AUDIO_IN_MspDeInit(SAI_HandleTypeDef *hsai, void *Params);
308272

273+
309274
/**
310275
* @}
311276
*/

0 commit comments

Comments
 (0)