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.

[参考译文] SRC4392:通道状态位始终全为0

Guru**** 2481955 points
Other Parts Discussed in Thread: SRC4392

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1165376/src4392-channel-status-bits-are-always-all-0

部件号:SRC4392

我们成功地使用了该设备的每一项功能。。。 DIT 的通道状态除外。

我们正在更改页面。  我们正在读取中断。  我们正按预期接收 Tx 完成中断。   我们已经尝试添加延迟。  我们已尝试将每个字节写入通道状态和用户数据。   我们已经尝试在字节内反转位顺序.... 然而,无论我们尝试什么,通道状态位总是在传出的 AES 流中全为0 ......   请帮助!

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

    您好!

    在大多数情况   下、0指示没有错误、但如果您尝试写入该寄存器并且它不更新通道状态、则指向寄存器设置。 我列出了您 可能想要 检查的步骤列表。  

    1) 1) 请参阅表  2.寄存器页选择:

    寄存器第2页包含数字接口发送器(或 DIT)通道状态和用户数据缓冲器。 这些缓冲区对应于包含在已发送 AES3编码数据流的 C 和 U 位中的数据。 这些缓冲器的内容可通过 SPI 或 I 2C 串行主机接口写入、以配置已发送 AES3数据流的 C 和 U 位。 主机系统也可以读取缓冲区以进行验证。 有关 DIT 通道状态缓冲区映射、请参阅表7;有关 DIT 用户数据缓冲区映射、请参阅表8。

    寄存器7F:页选择寄存 器-将从三个寄存器页中选择一个、以便通过 SPI 或 I 2C 串行主机接口进行写入和/或读取访问。

    Page1=1和 PAGE0=0  将   为 DIT 通道状态和用户数据缓冲区设置第2页。    数据表中的表7和表8显示 了 DIT 通道状态和用户数据缓冲器的缓冲器映射。

    2)寄存器08:发送器控制寄存器2

    TXBTD 发送器 C 和 U 数据缓冲器传输禁用: 该位用于启用和禁用通道状态(C)和用户(U)数据的 DIT 用户访问(UA)和 DIT 发送器访问(TA)缓冲器之间的缓冲器传输。  注意:必须将控制寄存器0x09中的 TXCUS0和 TXCUS1位设置为非零值、才能更新 DIT UA 缓冲区。

    另请注意、通道状态和用户数据存储在块大小的缓冲器中、可通过 SPI 或 I 2C 串行主机接口进行访问、或直接路由到通用输出引脚(GPO1至 GPO4)。  正如 确认一样、也读取 GPO 处的通道状态。

    我将在星期二之前不上班、因此 如果这不能解决您的问题、请 您在星期二再次与我联系。

    此致、

    Arash

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

    你好。   是的、我们将更改为第2页。  每次接收到硬件中断时、我们读取寄存器0x0A 以清除 TBTI 中断标志、然后设置寄存器0x08中的 TXBTD 位、然后使用该命令 writeReg (0x7F、0b00000010)更改为第2页、然后写入所有字节、然后更改为第0页、 然后将所有0写入寄存器0x08、以便 UA 缓冲区传输可以恢复正常。  是的、我们还将 reg0x09中的 TXCUS 位设置为 01 (由 SPI 更新)。   在 reg0x07中将 BLS 设置为输出。   并且、所需的24位音频数据出现在 AES3流中... 但通道状态始终保持在所有00。  

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

    您好、Dedrick、

    Arash 目前已不在办公室、将在本周剩余时间内工作、请耐心等待、因为他的回答将会延迟。

    谢谢、

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

    你好。  有更新吗?

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

    您好!

     似乎您正在正确执行它,那么脚本中可能会有这样的原因。 我可以看一下您的脚本吗?   

      您将此器件使用哪种 GUI?

    此致、

    Arash

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

    我不知道 GUI 是什么意思…   我们在微控制器上运行代码并通过 SPI 总线寻址 SRC4392。   我们在原型中成功使用了 DIR、Tx-Bypass 多路复用器、Porta、PortB 和 SRC 函数。  我们一直在读取输入/输出采样率转换器比率.... 几乎所有东西都能正常工作,除了这个!   使用 DIT 时、我们甚至看到预期的中断

    SPI 总线以大约31MBps 的速度运行。

    为了配置模拟输入的原型、我们设置函数执行这些写入(所有这些写入均已验证工作):

    RESET();//将 nRST 引脚拉至低电平2us

    vTaskDelay (2 / portTIK_PERIOD_MS);

    writeReg (0x01、0b00111111);//删除 PDALLn;全部开机

    writeReg (0x03、0b00111001);//端口 A:输出源=SRC;主站;I2S 格式

    writeReg (0x04、0b00000000);//端口 A:MCLK;[1:0] 00/128;01/256; 10/384;11/512

    writeReg (0x05、0b00000001);//端口 B:从设备;I2S 格式

    writeReg (0x07、0b00001100);// Tx:DIT Clk=MCLK;div x 128;DIT source=PortB 输入;BLSM 输出;数据有效

    writeReg (0x09、0b00000001);// Tx:有效性位来自0x07;缓冲区应由 i2c/SPI 主机更新

    writeReg (0x0B、0b00000001);//取消屏蔽缓冲区传输完成中断

    writeReg (0x0D、0b00001011);// DIR 设置: REFCLK=MCLK;source=RX4;

    writeReg (0x0E、0b00001000);//[2:1] 00直通;01 /2;10 /4;11 /8;bit3在失锁时静音;RXCKO =禁用

    writeReg (0x0F、0b00100010);//针对 DIR 的 PLL 垃圾;将 PLL1时基设置为48kHz

    writeReg (0x10、0b00000000);//针对 DIR 的 PLL 垃圾;将 PLL1时基设置为48kHz

    writeReg (0x11、0b00000000);//针对 DIR 的 PLL 垃圾;将 PLL1时基设置为48kHz

    writeReg (0x2D、0b00000010);// SRC:source=DIR;REST 默认值

    writeReg (0x2E、0b00100000);// SRC:AutoDeEmph=开;REST 默认值

    然后、为了处理中断、我们执行以下操作:

    readReg (0x0A、&regVal、sizeof (regVal));

    writeReg (0x08、0b00001000);

    writeReg (0x7F、0b00000010); //第2页选择将 Tx AES3/IEC60958元数据加载到 DIT 块中

    writeReg (0x00、0b10100000);

    writeReg (0x01、0b10100000);

    writeReg (0x02、0b01000000);

    writeReg (0x03、0b01000000);

    writeReg (0x04、0b00110100);

    writeReg (0x05、0b00110100);

    writeReg (0x06、0b00000000);

    writeReg (0x07、0b00000001);

    writeReg (0x08、0b00011000);

    writeReg (0x09、0b00011000);

    writeReg (0x2C、0b00000011);

    writeReg (0x2D、0b00000011);

    writeReg (0x7F、0b00000000);

    writeReg (0x08、0b00000000);

    我可以验证清除中断以及对 reg0x08的最后写入是否有效(因为如果我删除这些行、中断将停止)-但我无法验证 SRC4392已更改寄存器页面、且元数据全部为00。

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

    我看不到脚本有什么问题 、似乎你正在通过书做一切事情。 此时、我唯一的建议是查看您是否可以在写入操作之间设置一些延迟、并在延迟后读回这些延迟。 您能不能先写 后读回它 、再延迟一段时间后读回 同一个寄存  器、看看它是否会在某个时间后发生变化。 类似如下:

    W 寄存器 x

    R  寄存器 x  

    延迟 10m

    R 寄存器 x  

    W 寄存器 y

    R 寄存器 y  

    延迟 10m

    R 寄存器 y

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

    是的-我们可以尝试这个....

    我还有一个关于通道状态寄存器的问题-它们是否在传输到 DIT 后复位为00?  或者、这些值是否粘滞?    如果它们每次清除、我们必须小心处理延迟、因为在通过端口 B 传入的最高采样率下、缓冲器传输完成中断每毫秒出现一次。

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

    我认为它们是粘着的寄存器。  

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

    将 SPI 总线速度降低至大约8Mbps 似乎已经解决了这个问题。  我计划在下一次测试使用连续块写入(自动递增)功能时是否会使用更快的 SPI 总线。。。 尽管如此、我认为我们可以关闭这个线程。   谢谢!

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

    Dedrick,感谢大家分享原因。