主题中讨论的其他部件: AM5728, TLV320ADC3101
我正在尝试通过SPI协议使用Linux用户空间应用程序对DIX4192-Q1进行编程。 音频数据通过以下元素提供给该解码器:
麦克风-> TLV320ADC3101 -> DIX4192-Q1 (数据流编码为SPDIF)-> DIX4192-Q1 (来自SPDIF的数据流解码)-> Sitara Sitam5728处理器。
音频流采样为LRCLK=4.8万 Hz和BCLK=3.072MHz。 参考时钟来自RXCKI = 24.576MHz。
我正在按下一个序列对其进行编程(其中“w”表示写入,接下来的两个数字分别是以十六进制数字格式表示的reg addr和new reg值):
/*重置并关闭所有模块*/
w 0x7f 0x00
w 0x01 0x80
w 0x01 0x00
/* DIR configure */
w 0x0d 0x00
w 0x0E 0x05
/*设置端口A */
w 0x03 0x69
w 0x04 0x0B
/*设置PLL1*/
w 0x0F 0x22
w 0x10 0x00
w 0x11 0x00
/*取消端口A静音并打开所有模块的电源,端口B和DIT */除外
w 0x03 0x29
w 0x01 0x32
编程后,我可以在示波器上看到正确的LRCLK和BCLK,DIX输出。 但是没有任何数据,也没有任何输出。
但当我首先通过绕过PLL2分频器(将0x01值写入0x0E寄存器)对其进行编程时,数据流输出和时钟不正确。 然后,在更改了所需的除法器值后,DIX输出上的数据和时钟会得到预期结果。
通过Linux用户空间应用程序对其进行编程是一种非常奇怪和不舒服的方式,因为在这种情况下,我需要绕过除法器对DIX进行编程,然后通过arecord发送数据流,写入所需的除法器,并在每次开始录制时中止aplay。
我应该做什么来避免此步骤,并在单个编程序列后使系统正常工作。