严重问题: tas5756m 使用GPIO口加内部PLL产生MCLK的方法

tas5756m 使用GPIO口加内部PLL产生MCLK的方法究竟是怎么样的?即PDF中的 8.3.3.2 clock Master from a non-audio rate master clock

(由于不知道怎么贴图,所以请见谅)

我看着tas5756m芯片手册文档配置对应的寄存器发现无法正常输出:

按照TAS5756M 的时钟树:

1.我将 0x0d(PLL clock source select) 设置为0x30 (GPIO口)  

2.设置0x12(GPIO Source for PLL reference clk) 设置为0x03 (GPIO 0)

3.设置0x08 (GPIO output enable) 设置为0x04 (GPIO 1输出模式 GPIO0 输入) 并将 0x52 GPIO 1的输出模式设置为 0x10(PLL/4) 

4.PLL enable 使能 0x04设置为 0x01

但是我发现GPIO 1还是没有时钟输出。我不知道是哪里错了,而且电路连接是正确的.

请问哪位大神知道怎么做的? 谢谢

程序配置如下:

{ 0x09, 0x31 },//BCLK LRCLK output
{ 0x0c, 0x7f },//exit reset
{ 0x20, 0x03 },//除以4 BCK
{ 0x21, 0x3f },//除以64 LRCLK
{ 0x28, 0x00 },//i2s 16位
{ 0x29, 0x00 },//shift 0
{ 0x04, 0x01 },//PLL Enable
{ 0x08, 0x04 },//P0入 P1出
{ 0x0d, 0x30 },//PLL参考GPIO口
{ 0x12, 0x03 },//PLL Source GPIO0
{ 0x14, 0x02 },//P
{ 0x15, 0x01 },//J
{ 0x16, 0x20 },//D
{ 0x17, 0xb7 },//D
{ 0x18, 0x01 },//R
{ 0x52, 0x10 },//GPIO1 output mode
{ 0x1b, 0x01 },//DSP Clock Divider
{ 0x1c, 0x01 },//DAC Clock Divider
{ 0x1e, 0x01 },//NCP Clock Divider
{ 0x1f, 0x01 },//OSR Clock Divider

3 个回复

  • 三线I2S配置请参考如下的步骤:
    #3-Wire I2S
    #System Clock PLL Mode with NO MCLK input. Provide supply voltages(3.3V). Don't provide I2S clocks yet.
    #Write 0x00 at address 0x00 (Go to Page 0)
    w 98 00 00
    #Write 0x10 at address 0x02 (Standby request)
    w 98 02 10
    #Write 0x0A at address 0x25 (Ignore SCK halt detection, Disable clock auto set)
    w 98 25 0A
    #Write 0x10 at address 0x0D (PLL clock source => BCLK)
    w 98 0D 10
    #Write 0x00 at address 0x14 (PLL divider : PLL P = 1)
    w 98 14 00
    #Write 0x20 (BCLK=32fs) at address 0x15 (PLL divider : PLL J = 32)
    w 98 15 20
    #Write 0x00 at address 0x16 (PLL divider : PLL D(MSB) = 0)
    w 98 16 00
    #Write 0x00 at address 0x17 (PLL divider : PLL D(LSB) = 0)
    w 98 17 00
    #Write 0x01 at address 0x18 (PLL divider : PLL R = 2)
    w 98 18 01
    #Write 0x01 at address 0x1B (DSP Clock divider = 2)
    w 98 1B 01
    #Write 0x0F at address 0x1C (DAC Clock divider = 16)
    w 98 1C 0F
    #Write 0x03 at address 0x1D (NCP Clock divider = 4)
    w 98 1D 03
    #Write 0x07 at address 0x1E (OSR Clock divider = 8)
    w 98 1E 07
    #Write 0x00 at address 0x22 (Interpolation filter = 8x, fs setting= 48kHz)
    w 98 22 00
    #Write 0x04 at address 0x23 (IDAC(MSB), IDAC = 1024 cycles)
    w 98 23 04
    #Write 0x00 at address 0x24 (IDAC(LSB), IDAC = 1024 cycles)
    w 98 24 00
    #Write 0x00 at address 0x02 (Standby release)
    w 98 02 00
    #Provide I2S clocks (MCLK : floating, LRCLK : 44.1kHz, BCLK : 32*fs = 1.414MHz)
  • 回复 Mickey Zhang:

    你好,谢谢你的回答, 你的方法应该可以. 但是我们公司现在需要通过GPIO0 引入一个12.288MHz的时钟,然后通过内部PLL进行倍频率后在gpio 1输出,然后使用这个PLL倍频的时钟引到tas5756 Mclk 做主时钟, 最后通过内部分频器分频到为的Bclk \LRCLK 输出。(tas5756做主设备)
    请问有没有对应的寄存器配置方法?
  • 回复 Mickey Zhang:

    tas5756 主设备 4线式 主时钟使用12.288 需要产生44.1khz的音频始终. 需要这方面的配置方法. 请问有例子吗?