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.
您好!
我执行以下命令。
//======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)短路、这是固定的。 现在它开始工作了。
谢谢!
杰伊