初级会员
- 积分
- 69
- 金钱
- 69
- 注册时间
- 2018-5-18
- 在线时间
- 20 小时
|
楼主 |
发表于 2020-9-25 09:41:51
|
显示全部楼层
//进入PCM 录音模式
void recoder_enter_rec_mode(void)
{
//---------------------------配置芯片功能------------------------------------------------------------
WM8978_ADDA_Cfg(0,1); //开启ADC DAC要不要也开着 然后把录入到双缓存的数据直接丢到芯片中去DAC??
WM8978_Input_Cfg(1,1,0); //开启输入通道(MIC&LINE IN) 这里就说明两个地方都使用 不管是麦克风输入 说着数据线输入都可以接收
WM8978_Output_Cfg(0,1); //开启BYPASS输出 DAC输出要不要也开着?
WM8978_MIC_Gain(46); //MIC增益设置
WM8978_SPKvol_Set(0); //关闭喇叭.
WM8978_I2S_Cfg(2,0); //飞利浦标准,16位数据长度
//---------------------------SAI_DMA_数据传输------------------------------------------------------------
MX_SAI2_Init();//SAI1 Block A,主发送,16位数据
SAIA_TX_DMA_Init();
__HAL_DMA_DISABLE_IT(&hdma_sai2_a_TX_Handler,DMA_IT_TC); //关闭传输完成中断(这里不用中断送数据)
SAIA_RX_DMA_Init();
SAI_Play_Start(); //开始SAI数据发送(主机)
SAI_Rec_Start(); //开始SAI数据接收(从机)
}
static void SAIA_RX_DMA_Init(void)
{
__HAL_RCC_DMA2_CLK_ENABLE();
__HAL_LINKDMA(&hsai_BlockB2,hdmarx,hdma_sai2_b_RX_Handler);
hdma_sai2_b_RX_Handler.Instance = DMA2_Channel4;
hdma_sai2_b_RX_Handler.Init.Request = DMA_REQUEST_1;
hdma_sai2_b_RX_Handler.Init.Direction = DMA_PERIPH_TO_MEMORY;
hdma_sai2_b_RX_Handler.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_sai2_b_RX_Handler.Init.MemInc = DMA_MINC_ENABLE;
hdma_sai2_b_RX_Handler.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;//此处需要和A block对应,多少码率采集就用多少码率播放
hdma_sai2_b_RX_Handler.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
hdma_sai2_b_RX_Handler.Init.Mode = DMA_CIRCULAR;
hdma_sai2_b_RX_Handler.Init.Priority = DMA_PRIORITY_LOW;
if (HAL_DMA_Init(&hdma_sai2_b_RX_Handler) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
// HAL_DMA_Start(&hdma_sai2_b_RX_Handler ,(uint32_t)&SAI2_Block_B->DR ,(uint32_t)SAI2_blockB_DMA_RX ,SAI_RX_DMA_BUF_SIZE*2);
HAL_SAI_Receive_DMA(&hsai_BlockA2 ,SAI2_blockB_DMA_RX ,SAI_RX_DMA_BUF_SIZE*2);
__HAL_DMA_DISABLE(&hdma_sai2_b_RX_Handler);
delay_us(10);
__HAL_DMA_ENABLE_IT(&hdma_sai2_b_RX_Handler,DMA_IT_TC);
__HAL_DMA_CLEAR_FLAG(&hdma_sai2_b_RX_Handler,DMA_FLAG_TC4);
HAL_NVIC_SetPriority(DMA2_Channel4_IRQn, 4, 0);
HAL_NVIC_EnableIRQ(DMA2_Channel4_IRQn);
}
原子哥,基本上和阿波罗开发板的例程一样,只把双缓冲改成了HAL_SAI_Transmit_DMA,但是就是不进DMA中断,这是为什么呢 |
|