Other Parts Discussed in Thread: PCM5122
https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1630003/pcm5122-i2s-master-mode-issue
器件型号: PCM5122
您好、
我有一个振荡器连接到 36.864MHz 的 SCK 引脚、我想在 I2S 主模式下使用芯片。 它连接到我的 STMcontroller、它以 48kHz 的采样频率流式传输。
我在下面创建了用于流式传输的 init 函数、我设置了一个 DMA 流。
测量时、我在 I2S 线路上测量以下内容:
SCK:36.864MHZ(来自示波器)
BCK: 1.152MHz(我不相信是正确的)
SD:(有数据)
Ws:9kHz(我不认为正确)
我读取了只读寄存器、但我认为唯一可以得出的结论是我的时钟设置中的某个地方犯了个错误:
寄存器 0x04 - PLL:解锁、启用= 1
寄存器 0x5A — 溢出标志:L1OV=0 R1OV=0 L2OV=0 R2OV=0 SFOV=0
寄存器 0x5B — 检测到 FS:错误、SCK 比率:0
寄存器 0x5D — 检测到的 BCK 比率:每帧 128 BCKS
寄存器 0x5E — 时钟状态:CDSST=0 PLL-L=0 LRCK/bck=1 SCKval=1 FS = 1 BCKval=1 FSval=0
寄存器 0x5F — 时钟错误标志:LTSH=0 CKMF=0 CSRF=0 CERF=1
寄存器 0x6C — 模拟静音:左=0 右=0
寄存器 0x78 — 自动静音:左=0 右=0
这也是我的初始化函数的代码、我通过 I2C 控制芯片
HAL_StatusTypeDef PCM5122_Init (void)
{
HAL_StatusTypeDef 状态;
//第 0 页
状态= PCM5122_WriteRegister (0x00、0x00);
如果 (status != HAL_OK) 返回状态;
//软复位开启
状态= PCM5122_WriteRegister (0x02、0x10);
如果 (status != HAL_OK) 返回状态;
HAL_DELAY (10);
第 253 页
状态= PCM5122_WriteRegister (0x00,253);
如果 (status != HAL_OK) 返回状态;
//时钟弯曲
状态= PCM5122_WriteRegister (0x3F、0x11);
如果 (status != HAL_OK) 返回状态;
状态= PCM5122_WriteRegister (0x40、0xFF);
如果 (status != HAL_OK) 返回状态;
//第 0 页
状态= PCM5122_WriteRegister (0x00、0x00);
如果 (status != HAL_OK) 返回状态;
//主模式
状态= PCM5122_WriteRegister (0x09、0b00010001);
如果 (status != HAL_OK) 返回状态;
//禁用自动时钟
状态= PCM5122_WriteRegister (0x25、0b00000010);
如果 (status != HAL_OK) 返回状态;
//重置 BCK/LRCK 分频器
状态= PCM5122_WriteRegister (0x0C、0b00000000);
如果 (status != HAL_OK) 返回状态;
状态= PCM5122_WriteRegister (0x0C、0b00000011);
如果 (status != HAL_OK) 返回状态;
//时钟源= SCK
状态= PCM5122_WriteRegister (0x0E、0b00110000);
如果 (status != HAL_OK) 返回状态;
// DAC 时钟分频器((36.864MHz→48kHz 正确)
状态= PCM5122_WriteRegister (0x1C、(48-1));// 48-1
如果 (status != HAL_OK) 返回状态;
// I2S 格式
状态= PCM5122_WriteRegister (0x28、0b00000011);
如果 (status != HAL_OK) 返回状态;
//禁用自动静音
状态= PCM5122_WriteRegister (0x41、0x00);
如果 (status != HAL_OK) 返回状态;
//为音频内核配置 PLL (48kHz 目标、36.864MHz SCK)
状态= PCM5122_WriteRegister (0x14、(3 –1));// PLL P
如果 (status != HAL_OK) 返回状态;
状态= PCM5122_WriteRegister (0x15、1);// PLL J
如果 (status != HAL_OK) 返回状态;
状态= PCM5122_WriteRegister (0x17、8);// PLL D
如果 (status != HAL_OK) 返回状态;
状态= PCM5122_WriteRegister (0x18、(8-1));// PLL R(后分频器)
如果 (status != HAL_OK) 返回状态;
//启用 PLL
状态= PCM5122_WriteRegister (0x04、0b00000001);
如果 (status != HAL_OK) 返回状态;
HAL_delay (10);//等待 PLL 锁定
//取消 DAC 静音
状态= PCM5122_WriteRegister (0x03、0x00);
如果 (status != HAL_OK) 返回状态;
//软复位关闭
状态= PCM5122_WriteRegister (0x02、0x00);
如果 (status != HAL_OK) 返回状态;
HAL_DELAY (10);
返回 HAL_OK;
}





