我在用F429进行一个1拖4数字mic的项目,基本流程4个mic采集现场的声音,arm选择音量最大的一组做处理然后通过usb传输到电脑上。现在发现录得声音全是乱的。所以用逻辑分析仪抓了一组数据。参考附件
我的SAIA发送帧时钟和位时钟,模式为主,位长时16bit,16K采样。SAIB接收mic数据,位长时16bit,16K采样。其他的配置只是把framelenth和slot的长度做了变化,帧同步有效按照手册改成了1位。其他的没变。现在看逻辑分析仪的波形看不出来什么问题,想问下论坛的朋友对这个现象有什么建议。之前用pcm格式进行放音没有问题,所以觉得其实这里的问题应该也不大但是目前没有思路。
下面是SAIB的初始化代码,我把我修改的标注出来:
void SAIB_Init(u32 mode,u32 cpol,u32 datalen)
{
HAL_SAI_DeInit(&SAI1B_Handler);
SAI1B_Handler.Instance=SAI1_Block_B;
SAI1B_Handler.Init.AudioMode=mode;
SAI1B_Handler.Init.Synchro=SAI_SYNCHRONOUS;
SAI1B_Handler.Init.OutputDrive=SAI_OUTPUTDRIVE_ENABLE;
SAI1B_Handler.Init.NoDivider=SAI_MASTERDIVIDER_ENABLE;
SAI1B_Handler.Init.FIFOThreshold=SAI_FIFOTHRESHOLD_1QF;
SAI1B_Handler.Init.ClockSource=SAI_CLKSOURCE_PLLI2S;
SAI1B_Handler.Init.MonoStereoMode=SAI_STEREOMODE;
SAI1B_Handler.Init.Protocol=SAI_FREE_PROTOCOL;
SAI1B_Handler.Init.DataSize=datalen;
SAI1B_Handler.Init.FirstBit=SAI_FIRSTBIT_MSB;
SAI1B_Handler.Init.ClockStrobing=cpol;
//è
SAI1B_Handler.FrameInit.FrameLength=64;
SAI1B_Handler.FrameInit.ActiveFrameLength=1;
SAI1B_Handler.FrameInit.FSDefinition=SAI_FS_CHANNEL_IDENTIFICATION;
SAI1B_Handler.FrameInit.FSPolarity=SAI_FS_ACTIVE_LOW;
SAI1B_Handler.FrameInit.FSOffset=SAI_FS_BEFOREFIRSTBIT;
//SLOTè
SAI1B_Handler.SlotInit.FirstBitOffset=0;
SAI1B_Handler.SlotInit.SlotSize=SAI_SLOTSIZE_16B;
SAI1B_Handler.SlotInit.SlotNumber=4;
SAI1B_Handler.SlotInit.SlotActive=SAI_SLOTACTIVE_0|SAI_SLOTACTIVE_1|SAI_SLOTACTIVE_2|SAI_SLOTACTIVE_3;
HAL_SAI_Init(&SAI1B_Handler);
SAIB_DMA_Enable();
__HAL_SAI_ENABLE(&SAI1B_Handler);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>