使用i2s遇到的问题
在使用i2s的时候原本以为用dma把数据搬运过去就万事大吉,但是搬运过去后喇叭播放听起来十分的难听。i2s主要由
SCK(串行时钟):也叫位时钟(BCLK),每个时钟脉冲对应数据线的一位数据。
WS(字选择):也叫左右声道时钟(LRCK),用于选择左右声道。标准飞利浦模式下,WS=0表示左声道,WS=1表示右声道。
SD(串行数据):用于传输实际的音频数据。
有时还有MCLK(主时钟),用于为编解码器等提供参考时钟,但并非必需。
有四种工作模式,标准飞利浦模式,LSB左声道对齐,MSB右声道对齐,PCM模式
标准飞利浦模式
L-low
LSB
L-high
、https://img2024.cnblogs.com/blog/3688973/202512/3688973-20251211130157184-972006450.png
MSB
L-high
PCM
我使用的kf32a156,标准飞利浦模式,dma1发送 16位 18k
这款芯片在启动i2s前需要先发送一时钟数据启动i2s,如果不发送就会
导致我如果直接使用音频数据会左右声道颠倒,目前解决方法是,在音频数据前添加0x0000
这里可以看到ws采样率引脚提前一个时钟周期
i2s+dma初始化
init 代码/** *@brief:I2S init *@paramNone *@param 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 收藏一下 不知道什么时候能用到 不错,里面软件多更新就更好了 喜欢鼓捣这些软件,现在用得少,谢谢分享! 感谢分享,下载保存了,貌似很强大 感谢发布原创作品,程序园因你更精彩 过来提前占个楼 这个有用。 前排留名,哈哈哈 感谢发布原创作品,程序园因你更精彩 感谢分享,学习下。 不错,里面软件多更新就更好了 这个好,看起来很实用 前排留名,哈哈哈 这个好,看起来很实用 感谢,下载保存了 感谢分享 谢谢分享,试用一下 分享、互助 让互联网精神温暖你我 热心回复!
页:
[1]
2