Post Go back to editing

STM32驱动AD1938 DAC无法输出模拟信号

一, SPI配置AD1938寄存器,并读取寄存器数据(已实现)

如监测PLL锁存状态,能够返回0FPLL锁存。

二、通过I2S标准协议调试一组双通道DAC输出正弦波和余弦波的模拟信号(第三组左右两声道)。(未调通)

测试要求:采样频率为48KHz16位数据宽度,AD1938主时钟MCK为外部提供(STM32MCO引脚提供12.288MHz作为时钟源),数据格式为Stereo立体声模式(标准I2S philips协议)

STM32 I2S配置为主发送模式,所以DACLRCLKBCLK设置为从模式,其中I2S SDO引脚接AD1938DSDATA3

第一步,SPI配置AD1938PLL和时钟控制寄存器如下

第二步,配置DAC寄存器如下,

其中,I2S数据格式中,DSDATA最高位是在DBCLK第二个上升沿开始采样的,认为SDATA delay 需设置为1,即一个BCLK周期延迟。

第三步,I2S配置代码如下,

I2S发送的数据代码(左右两通道分别正弦波和余弦波)如下,

三、调试j结果

1DAC无输出;

2STM32提供的12.288MHz时钟,示波器测得为12.5MHz,如下图,有误差但不知是否在误差范围内;

3)数据格式可能也存在问题,但实际测得的数据都是标准的格式,不知道哪里会出现问题。试着随便发送两帧16位的数据进行观测,数据也能对应上。

目前处于卡壳状态,找不到突破点了,一方面怀疑数据格式,一方面怀疑AD1938寄存器配置问题,配置调整了却不管用,还望各位大佬多多指点!