一, SPI配置AD1938寄存器,并读取寄存器数据(已实现)
如监测PLL锁存状态,能够返回0F,PLL锁存。
二、通过I2S标准协议调试一组双通道DAC输出正弦波和余弦波的模拟信号(第三组左右两声道)。(未调通)
测试要求:采样频率为48KHz,16位数据宽度,AD1938主时钟MCK为外部提供(STM32的MCO引脚提供12.288MHz作为时钟源),数据格式为Stereo立体声模式(标准I2S philips协议)。
STM32 的I2S配置为主发送模式,所以DAC的LRCLK和BCLK设置为从模式,其中I2S 的SDO引脚接AD1938的DSDATA3。
第一步,SPI配置AD1938的PLL和时钟控制寄存器如下
第二步,配置DAC寄存器如下,
其中,I2S数据格式中,DSDATA最高位是在DBCLK第二个上升沿开始采样的,认为SDATA delay 需设置为1,即一个BCLK周期延迟。
第三步,I2S配置代码如下,
I2S发送的数据代码(左右两通道分别正弦波和余弦波)如下,
三、调试j结果
(1)DAC无输出;
(2)STM32提供的12.288MHz时钟,示波器测得为12.5MHz,如下图,有误差但不知是否在误差范围内;
(3)数据格式可能也存在问题,但实际测得的数据都是标准的格式,不知道哪里会出现问题。试着随便发送两帧16位的数据进行观测,数据也能对应上。
目前处于卡壳状态,找不到突破点了,一方面怀疑数据格式,一方面怀疑AD1938寄存器配置问题,配置调整了却不管用,还望各位大佬多多指点!