我不确定这为什么不起作用、但我已经多次检查设置、并通过示波器查看了信号。
我将 Jetson Nano 的输出用作主设备、显示48kHz FS 和 BCLK 6.144Mhz、均非常稳定
我打开 ALSA 驱动程序、以便可以观察信号输出、然后还检查状态寄存器、以确定它应该进行流式传输
我要求具有 TDM、32位、4通道
ASI_STS 将从0x46更改为0x36再保持为0xf6。 6 =正确对于第二部分、我不明白为什么它会锁定到信号上。
IT_LTCH0显示为 c0、表示由于 FS 和 BCLK 的不良组合而触发了两个中断
DEV_STS0 = 0x0,使其关闭所有通道
DEV_STS1 =0xc0、表示全部断电。
我试图让它忽略这些错误、但在 SDOUT 上输出仍然没有改变
另一件奇怪的事情是我必须写两次唤醒。 如果我写入它一次、等待1ms、然后继续、似乎不起作用。 但是、如果我调用两次并重新检查所有寄存器、则它们都是正确的
//唤醒设备
spiADC (FD_AUD、0x02、0x81、0);//0表示最后一个元素、表示写入
spiADC (FD_AUD、0x02、0x81、0);
std::this_thread::sleep_for (std::chrono:::毫秒(10));
printf ("A Check Sleep Mode:%x\n"、spiADC (FD_AUD、0x02、0x00、1);
// TDM 和32位(I2S 仅支持2个通道、需要支持4个通道的 TDM)另外需要反转 BCLK
spiADC (FD_AUD、0x07、0x34、0);
//我们关闭总线错误检测
//spiADC (FD_AUD、0x09、0x20、0);
// 0x13我们保留默认值,设置为从模式
//设置所有4个通道的线路输入
spiADC (FD_AUD、0x3C、0xF0、0);
spiADC (FD_AUD、0x41、0xF0、0);
spiADC (FD_AUD、0x46、0xF0、0);
spiADC (FD_AUD、0x4B、0xF、0);
//启用所有4个 ADC
spiADC (FD_AUD、0x73、0xF0、0);
//启用 ASI 4输出时隙
spiADC (FD_AUD、0x74、0xF0、0);
//加电 ADC 和 PLL (不确定它们是否正确)
spiADC (FD_AUD、0x75、0x60、0);
然后从这里调用 ALSA 驱动程序。