在使用i2s的时候原本以为用dma把数据搬运过去就万事大吉,但是搬运过去后喇叭播放听起来十分的难听。
i2s主要由
SCK(串行时钟):也叫位时钟(BCLK),每个时钟脉冲对应数据线的一位数据。
WS(字选择):也叫左右声道时钟(LRCK),用于选择左右声道。标准飞利浦模式下,WS=0表示左声道,WS=1表示右声道。
SD(串行数据):用于传输实际的音频数据。
有时还有MCLK(主时钟),用于为编解码器等提供参考时钟,但并非必需。
有四种工作模式,标准飞利浦模式,LSB左声道对齐,MSB右声道对齐,PCM模式
标准飞利浦模式
L-low
LSB
L-high
、
MSB
L-high
PCM
我使用的kf32a156,标准飞利浦模式,dma1发送 16位 18k
这款芯片在启动i2s前需要先发送一时钟数据启动i2s,如果不发送就会
导致我如果直接使用音频数据会左右声道颠倒,目前解决方法是,在音频数据前添加0x0000
这里可以看到ws采样率引脚提前一个时钟周期
i2s+dma初始化
init 代码[code]/** * @brief: I2S init * @param[in] None * @param[out] None * @retval : None */void i2s_init(void){ /*chongzhi clock*/ /*fuwei dingshiqi T0T3*/ RST_SFR->CTL1 |= (uint32_t)1 CTL1 &= ~((uint32_t)1 CTL1 |= (uint32_t)1 CTLR &= ~(3 |