This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TLV320AIC3105:将左侧 DAC 路由到 HPLOT/HPLCOM、将右侧 DAC 路由到 HPROUT/HPRCOM 问题

Guru**** 657500 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1233269/tlv320aic3105-routing-left-dac-to-hplout-hplcom-and-right-dac-to-hprout-hprcom-issue

器件型号:TLV320AIC3105

您好!  

我执行以下命令。  

  //======PHONES OUT ========//
  //Table 53. Page 0/Register 47: DAC_L1 to HPLOUT Volume Control Register
  writeRegister(wires, dev, Page_00, 47, 0x80);
  //Table 70. Page 0/Register 64: DAC_R1 to HPROUT Volume Control Register
  writeRegister(wires, dev, Page_00, 64, 0x80);
  // Table 57. Page 0/Register 51: HPLOUT Output Level Control Register
  writeRegister(wires, dev, Page_00, 51, 0b10011101);
  // Table 71. Page 0/Register 65: HPROUT Output Level Control Register
  writeRegister(wires, dev, Page_00, 65, 0b10011101);


  //===========RCA OUT===============//
  //Table 60. Page 0/Register 54: DAC_L1 to HPLCOM Volume Control Register
  writeRegister(wires, dev, Page_00, 54, 0b10000000);
  // Table 77. Page 0/Register 71: DAC_R1 to HPRCOM Volume Control Register
  writeRegister(wires, dev, Page_00, 71, 0b10000000);
  //Table 64. Page 0/Register 58: HPLCOM Output Level Control Register
  writeRegister(wire1, 0x18, Page_00, 58, 0b10011101);
  //Table 78. Page 0/Register 72: HPRCOM Output Level Control Register
  writeRegister(wire1, 0x18, Page_00, 72, 0b10011101);

但出于某种原因、我只能在 HPLOT/HPROUT 上看到左侧、只能在 HPLCOM/HPRCOM 上看到右侧。 你能想象我做错了什么吗?

我知道我在 DAC>DACVolume 寄存器上得到立体声分离、因为我可以在左侧和右侧确认。 不是每对都是左/右...

有没有人可以查看我可以查看的内容?  谢谢!

杰伊

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jay、

    在进一步调试之前、我想确认使用"wire"而不是"wires"作为最后两个 writeRegister 调用的第一个参数是有意的(第18行和第20行)。 由于它与其他行不匹配、我认为这可能是一个简单的复制/粘贴错误。

    此致、
    卢卡斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Lukas:  

    感谢您指出这一点、但遗憾的是、这与我的问题无关。  

    我有一个3.5mm 插孔连接到 HPLOUT 和 HPROUT、RCA 插孔连接到 HPLCOM 和 HPRCOM。 在耳机插孔上我得到了正确的和 RCA 插孔,我只得到了左边。 因此、我可以确认两个 DAC 均已启用并正常工作。 我的数据线能够正常工作。 HP 驱动程序或混频器配置错误。  

    我注意到数据表中的一些地方不正确、我想知道这可能是为什么我在努力获取正确的设置。  

    以下是更新后的相关代码。  

    bool AudioControlTLV320AIC3105::enableTLV320AIC3105(select_wire wires, device dev, AudioMode mode, int slot){
      Serial.println("AudioControlTLV320AIC3105::enableTLV320AIC3105");
      aic3105_hardReset();
      aic3105_softReset(wires, dev);
      aic3105_initCLK(wires, dev);
      aic3105_initDAC(wires, dev);
      Serial.println("====END: AudioControlTLV320AIC3105::enableTLV320AIC3105====");  Serial.println();
      return true;
    }
    
    bool AudioControlTLV320AIC3105::aic3105_hardReset() {
      // hardware reset
      Serial.println("-----Hardware reset starting-----");delay(1000);
      pinMode(RESET_PIN,OUTPUT); 
      digitalWrite(RESET_PIN,HIGH);delay(1000); //not reset
      digitalWrite(RESET_PIN,LOW);delay(1000);  //reset
        // Serial.println("-----Hardware reset, the following should fail-----");
        // writeRegister(0, 0x18, Page_00, 0x01, 0x01); 
        // Serial.println("-----now turning it back on-----");
      digitalWrite(RESET_PIN,HIGH);delay(1000);//not reset
      Serial.println("-----Hardware reset complete-----");delay(1000);
      return true;
    }
    
    bool AudioControlTLV320AIC3105::aic3105_softReset(select_wire wires, device dev) {
      // reset to defaults                    
      // wires, device, page, register, value
      writeRegister(wires, dev, Page_00, 0x01, 0x01); delay(5000);
      writeRegister(wires, dev, Page_00, 0x01, 0b00000000); delay(1000);
      if (_debugToSerial) Serial.println("-- Software Reset Complete ---");
      // wait for device to initialize
    	delay(50);
      return true;
    }
    
    bool AudioControlTLV320AIC3105::aic3105_initCLK (select_wire wires, device dev){
      // Table 14. Page 0/Register 9: Audio Serial Data Interface Control Register B
      writeRegister(wires, dev, Page_00, 0x09, 0b00000000);
      //Table 12. Page 0/Register 7: Codec Datapath Setup Register
      writeRegister(wires, dev, Page_00, 0x07, 0b10001010);
      //Table 100. Page 0/Register 102: Clock Generation Control Register
      writeRegister(wires, dev, Page_00, 0x66, 0b00000010);
      return true;
    }
    
    void AudioControlTLV320AIC3105::aic3105_initDAC (select_wire wires, device dev){
    
      //========POWER UP THE DAC==========//
      // configure the HPLCOM as single-ended. 
      //Table 42. Page 0/Register 37: DAC Power and Output Driver Control Register
      writeRegister(wires, dev, Page_00, 0x25, 0b11100000);// 10: HPLCOM configured as independent single-ended output (ERROR IN DATASHEET, THE RESET VALUE SHOULD BE 0000)
      //=======TURN ON THE HIGH POWER DRIVER, AND CONFIGURE THE SHORT CIRCUIT PROTECTION============//
      // configure the HPRCOM as single-ended. 
      //Table 43. Page 0/Register 38: High-Power Output Driver Control Register
      writeRegister(wires, dev, Page_00, 38, 0b00001100); //CONFUSING DATASHEET WITH 3 DIGIT BIT AND A : BEFORE ONE... WHY?
      //Table 45. Page 0/Register 40: High-Power Output Stage Control Register
      //writeRegister(wires, dev, Page_00, 40, 0b10000001); // TURNING UP THE COMMON-MODE VOLTAGE TO 1.65V
    
      //======UNMUTE THE DAC OUTPUT========//
      //Table 48. Page 0/Register 43: Left-DAC Digital Volume Control Register
      writeRegister(wires, dev, Page_00, 43, 0b00000000);
      //Table 49. Page 0/Register 44: Right DAC Digital Volume Control Register
      writeRegister(wires, dev, Page_00, 44, 0b00000000);
    
      //=======SET THE DAC LEFT/RIGHT TO ROUTE TO MIXER LEFT/RIGHT=====//
      //Table 46. Page 0/Register 41: DAC Output Switching Control Register
      writeRegister(wires, dev, Page_00, 41, 0b00000000);
      //00: Left-DAC output selects DAC_L1 path.
      //00: Right DAC output selects DAC_R1 path.
      
      //======SPECIFY THE CONFIG OF HP OUT (DIFFERENTIAL OR SINGLE ENDED)========//
      //Table 19. Page 0/Register 14: Headset/Button Press Detection Register B
      //writeRegister(wires, dev, Page_00, 0x0E, 0b10000000);// w 30 0E C0 P0_R14	 	 0b11000000
      //1: Programs high-power outputs for ac-coupled driver configuration
    
    
    
      //======PHONES OUT ========//
    
      //Table 53. Page 0/Register 47: DAC_L1 to HPLOUT Volume Control Register
      writeRegister(wires, dev, Page_00, 47, 0x10000000);
      //Table 70. Page 0/Register 64: DAC_R1 to HPROUT Volume Control Register
      writeRegister(wires, dev, Page_00, 64, 0x10000000);
    
      // Table 57. Page 0/Register 51: HPLOUT Output Level Control Register
      writeRegister(wires, dev, Page_00, 51, 0b10011101);
      // Table 71. Page 0/Register 65: HPROUT Output Level Control Register
      writeRegister(wires, dev, Page_00, 65, 0b10011101);
    
    
      // //===========RCA OUT===============//
      // Table 60. Page 0/Register 54: DAC_L1 to HPLCOM Volume Control Register
      writeRegister(wires, dev, Page_00, 54, 0b10011101);
      // Table 77. Page 0/Register 71: DAC_R1 to HPRCOM Volume Control Register
      writeRegister(wires, dev, Page_00, 71, 0b10011101);
      // Table 64. Page 0/Register 58: HPLCOM Output Level Control Register
      writeRegister(wires, 0x18, Page_00, 58, 0b10011101);
      // Table 78. Page 0/Register 72: HPRCOM Output Level Control Register
      writeRegister(wires, 0x18, Page_00, 72, 0b10011101);
    
    
      // Table 107. Page 0/Register 109: DAC Quiescent Current Adjustment Register
      writeRegister(wires, dev, Page_00, 109, 0b11000000); // w 30 66 A0 P0_R102 0b10100000	  Table 100. Page 0/Register 102: Clock Generation Control Register
    
      }
    }
    
    bool AudioControlTLV320AIC3105::volume(float volume) {
    	volume = max(0.0, min(1.0, volume));
      uint8_t volumeTable = (uint8_t)round((1 - volume) * 127);
      if (_debugToSerial) {Serial.print("Volume Value: ");Serial.println(volumeTable);}
      
      //Table 53. Page 0/Register 47: DAC_L1 to HPLOUT Volume Control Register
      writeRegister(wire1, 0x18, Page_00, 47, 0b10000000 | volumeTable);
      //Table 70. Page 0/Register 64: DAC_R1 to HPROUT Volume Control Register
      writeRegister(wire1, 0x18, Page_00, 64, 0b10000000 | volumeTable);
      //Table 60. Page 0/Register 54: DAC_L1 to HPLCOM Volume Control Register
      writeRegister(wire1, 0x18, Page_00, 54, 0b10000000 | volumeTable);
      //Table 77. Page 0/Register 71: DAC_R1 to HPRCOM Volume Control Register
      writeRegister(wire1, 0x18, Page_00, 71, 0b10000000 | volumeTable);
      //Table 82. Page 0/Register 82: DAC_L1 to LEFT_LOP/M Volume Control Register
      writeRegister(wire1, 0x18, Page_00, 82, 0b10000000 | volumeTable);
      //Table 92. Page 0/Register 92: DAC_R1 to RIGHT_LOP/M Volume Control Register
      writeRegister(wire1, 0x18, Page_00, 92, 0b10000000 | volumeTable);
    	return true;
    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jay、

    您是对的;这个数据表表格有点混乱。 我将提交一份修订请求。

    同时、我已经从此处下载了 EVM GUI、以便检查寄存器表配置: https://www.ti.com/tool/TLV320AIC3105EVM-K

    您也可以下载此文件并验证寄存器配置、如果您没有 EVM、则可以在演示模式下运行软件。

    您是否愿意尝试这些更改并查看它是否能解决您的问题?:

    页0/寄存器38:00010000 (或 00010100使用短路保护)。


    此致、
    卢卡斯·哈赞-布什贝克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我一直在对 PDF 进行"评论"、因为我发现了不一致之处。  

    表42. 页0/寄存器37:DAC 功率和输出驱动器控制寄存器

    D3-D0 |计数4位、显示3位"000"。

    表43。 页0/寄存器38:高功率输出驱动器控制寄存器

    D5–D3 |位的指定方式令人困惑。 需要101还是001???

    表95。 页0/寄存器95:输出驱动器短路检测状态寄存器

    D1-D0 |应为2位、显示为一个"0"。  

    我希望这对文档有所帮助。  

    我还想展示我正在经历的其他事情。 出于某种原因 、P0_R47 发生故障(当其他任何东西都不发生时)。  

     

    START: AudioControlTLV320AIC3105::volume
    Volume Value: 52
    Write: 	 Wire:1	 TLV320AIC3105:24	 P0_R47	 P0x00_R0x2F	 Value: 0xB4	 180	 0b10110100
    controlTLV320AIC3105: Received Error During writePage(): Error = 4
    controlTLV320AIC3105: Received Error During writePage(): Error = 4
    Write: 	 Wire:1	 TLV320AIC3105:24	 P0_R64	 P0x00_R0x40	 Value: 0xB4	 180	 0b10110100
    Go to Page Successful.
    Write Reigster Successful.
    Write: 	 Wire:1	 TLV320AIC3105:24	 P0_R71	 P0x00_R0x47	 Value: 0xB4	 180	 0b10110100
    Go to Page Successful.
    Write Reigster Successful.
    Write: 	 Wire:1	 TLV320AIC3105:24	 P0_R82	 P0x00_R0x52	 Value: 0xB4	 180	 0b10110100
    Go to Page Successful.
    Write Reigster Successful.
    Write: 	 Wire:1	 TLV320AIC3105:24	 P0_R92	 P0x00_R0x5C	 Value: 0xB4	 180	 0b10110100
    Go to Page Successful.
    Write Reigster Successful.
    END: AudioControlTLV320AIC3105::volume
    START AudioControlTLV320AIC3105::readFlags
    Table 94. Page 0/Register 94: Module Power Status Register
    Read:	 Wire:1	 TLV320AIC3105:24	 P0_R94	 P0x00_R0x5E	 Value: 0x0	 0	 0b0
    Table 95. Page 0/Register 95: Output Driver Short-Circuit Detection Status Register
    Read:	 Wire:1	 TLV320AIC3105:24	 P0_R95	 P0x00_R0x5F	 Value: 0x0	 0	 0b0
    Table 96. Page 0/Register 96: Sticky Interrupt Flags Register
    Read:	 Wire:1	 TLV320AIC3105:24	 P0_R96	 P0x00_R0x60	 Value: 0x0	 0	 0b0
    Table 97. Page 0/Register 97: Real-Time Interrupt Flags Register
    Read:	 Wire:1	 TLV320AIC3105:24	 P0_R97	 P0x00_R0x61	 Value: 0x0	 0	 0b0
    Table 7. Page 0/Register 2: Codec Sample Rate Select Register
    Read:	 Wire:1	 TLV320AIC3105:24	 P0_R2	 P0x00_R0x2	 Value: 0x0	 0	 0b0
    Table 8. Page 0/Register 3: PLL Programming Register A
    Read:	 Wire:1	 TLV320AIC3105:24	 P0_R3	 P0x00_R0x3	 Value: 0x10	 16	 0b10000
    Table 9. Page 0/Register 4: PLL Programming Register B
    Read:	 Wire:1	 TLV320AIC3105:24	 P0_R4	 P0x00_R0x4	 Value: 0x4	 4	 0b100
    Table 10. Page 0/Register 5: PLL Programming Register C (1)
    Read:	 Wire:1	 TLV320AIC3105:24	 P0_R11	 P0x00_R0xB	 Value: 0x1	 1	 0b1
    Table 20. Page 0/Register 15: Left-ADC PGA Gain Control Register
    Read:	 Wire:1	 TLV320AIC3105:24	 P0_R15	 P0x00_R0xF	 Value: 0x80	 128	 0b10000000
    Table 21. Page 0/Register 15: Left-ADC PGA Gain Control Register
    Read:	 Wire:1	 TLV320AIC3105:24	 P0_R16	 P0x00_R0x10	 Value: 0x80	 128	 0b10000000
    Table 24. Page 0/Register 19: LINE1L to Left-ADC Control Register
    Read:	 Wire:1	 TLV320AIC3105:24	 P0_R19	 P0x00_R0x13	 Value: 0x0	 0	 0b0
    Table 25. Page 0/Register 20: LINE2L to Left (1)-ADC Control Register
    Read:	 Wire:1	 TLV320AIC3105:24	 P0_R20	 P0x00_R0x14	 Value: 0x0	 0	 0b0
    END AudioControlTLV320AIC3105::readFlags

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您也可以下载此文件并验证寄存器配置、如果您没有 EVM、则可以在演示模式下运行软件。

    [/报价]

    我在开发过程中一直使用它。 我有一个有关此项目的单独线程、我在其中定向到了此工具。 我希望该工具对页码使用十进制、对值使用二进制数字。 与从十六进制转换为二进制或十进制相比(正如我在代码中所做的用于调试目的)、读取操作要容易得多。 除了抽取值外、我还希望数据表中列出了每个寄存器##的 Hex 值。 不管怎样,我使它工作,工具是非常有帮助的。 我只是坚持这一点。 我显然 DAC 工作正常,只是将它们路由到 L1>HPL 和 R1>HPR 似乎对我不起作用。 我将继续测试。 感谢你的帮助。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Lukas:  

    我很高兴地宣布、在您的帮助下、我已经解决了我的问题。 结果表明您提到的注册表设置(注册表38至 0b00010000)。 这固定了 RCA 输出(LCOM/RCOM)。

    我还将其中一个输出引脚(HPL)短路、这是固定的。 现在它开始工作了。

    谢谢!

    杰伊