我们成功地使用了该设备的每一项功能。。。 DIT 的通道状态除外。
我们正在更改页面。 我们正在读取中断。 我们正按预期接收 Tx 完成中断。 我们已经尝试添加延迟。 我们已尝试将每个字节写入通道状态和用户数据。 我们已经尝试在字节内反转位顺序.... 然而,无论我们尝试什么,通道状态位总是在传出的 AES 流中全为0 ...... 请帮助!
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.
您好!
在大多数情况 下、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。
我不知道 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、®Val、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