环境准备
现在各类芯片都有对应的软件来配置生成一些代码,或者寄存器的值;wm8962 也一样;
进入官网:wm8962
下载软件包:WISCE Setup 并安装;
下载 WM8962B 设备包,安装;
wm8962 支持 i2c、spi 接口来进行读写控制;我使用的硬件为 i2c 控制;
wm8962 和 mcu 之间使用 iis 接口传输音频数据,mcu 提供 MCLK 给 wm8962;
wm8962 手册可以通过半导小芯来下载;
手册第 188 页:
可以知道,wm8962 i2c 地址为 0x1A;最低位为读写位,所以写时候地址为:0x34
寄存器配置
对于单片机调试声卡,就是配置一下 wm8962 的寄存器即可;
可以参考一下 wm8962 的 linux 驱动;
主要为:读 id,复位 wm8962,配置时钟,配置参数,配置通道;
运行刚刚安装的 WISCE 软件;
创建一个新的 system;
点击 accept;如果没有这个界面就是上面第二个安装包没有安装;
点击右下角的 load;选择 WM8962B 的配置文件,在安装包的 Profiles/WM8962B/Combos 目录下;
这样例子的配置就被加载进 WM8962B system 中;
可以在 Device Configuration 查看配置,包括时钟,通路等;
用文本工具打开上面的文件:48k_256fs_DAC-SPK.txt
* 48k_256fs_DAC-SPK.txt
* This text file will set-up the WM8962 with a stereo DAC to speaker
* Sample rate = 48kHz
* MCLK rate = 256fs
* Input clock = 12.288MHz
LOAD ..\Startup\Reset_and_Startup.txt
LOAD ..\Clocking\48000Hz_256fs_12288000HzMCLK.txt
LOAD ..\Playback_Path\DAC_to_SPK_0dB.txt
可以看到它将配置修改成三步:
Reset_and_Startup.txt
* Reset_and_Startup.txt
* This file does a software reset and brings up VMID
* It should be run as the first stage of any device configuration
0x0F 0x6243 SMbus_16inx_16dat Write 0x34 * Software Reset (Does not reset registers R72h-R98h)
0x7F 0x0000 SMbus_16inx_16dat Write 0x34 * PLL Software Reset (Resets registers R72h-R98h only)
0x08 0x09C4 SMbus_16inx_16dat Write 0x34 * Get full register access/control: CLKREG_OVD=1, SYSCLK_ENA-0
0x81 0x0001 SMbus_16inx_16dat Write 0x34 * Disable all PLLs and OSC
0x1C 0x001C SMbus_16inx_16dat Write 0x34 * Anti-pop(1CH): 001C STARTUP_BIAS_ENA=1, VMID_BUF_ENA=1, VMID_RAMP=1
0x19 0x01C0 SMbus_16inx_16dat Write 0x34 * Pwr Mgmt (1)(19H): 01C0 DMIC_ENA=0, OPCLK_ENA=0, VMID_SEL=11, BIAS_ENA=1, INL_ENA=0, INR_ENA=0, ADCL_ENA=0, ADCR_ENA=0, MICBIAS_ENA=0
0x19 0x00C0 SMbus_16inx_16dat Write 0x34 * Pwr Mgmt (1)(19H): 00C0 DMIC_ENA=0, OPCLK_ENA=0, VMID_SEL=01, BIAS_ENA=1, INL_ENA=0, INR_ENA=0, ADCL_ENA=0, ADCR_ENA=0, MICBIAS_ENA=0
48000Hz_256fs_12288000HzMCLK.txt
* 48000Hz_256fsMCLK.txt
* This text file is used to configure the sample rate and clocking
* Sample Rate = 48kHz
* Clocking is automatic clocking configuration from a 256fs MCLK source
0x08 0x0800 SMbus_16inx_16dat RmodW 0x34 0x0820 * CLKREG_OVD=1, SYSCLK_ENA=0
0x1B 0x0010 SMbus_16inx_16dat Write 0x34 * Set sample rate to 48kHz
0x38 0x0006 SMbus_16inx_16dat RmodW 0x34 0x001E * MCLK_RATE=0011 (256fs)
0x08 0x0020 SMbus_16inx_16dat RmodW 0x34 0x0620 * MCLK_SRC=00 (MCLK pin), SYSCLK_ENA=1
DAC_to_SPK_0dB.txt
* DAC_to_SPK_0dB.txt
* This file will load a DAC to Speaker path with 0dB gain
0x05 0x0008 SMbus_16inx_16dat RmodW 0x34 0x0008 * DAC Mute
0x1A 0x0198 SMbus_16inx_16dat RmodW 0x34 0x0198 * Enable DACs and Speaker PGAs
0x69 0x0000 SMbus_16inx_16dat Write 0x34 * DACL to SPKOUTL
0x6A 0x0000 SMbus_16inx_16dat Write 0x34 * DACR to SPKOUTR
0x33 0x0000 SMbus_16inx_16dat Write 0x34 * Class D volume = 0dB, mono-mode disabled
0x28 0x00F9 SMbus_16inx_16dat Write 0x34 * SPKL PGA volume = 0dB, Zero-cross enabled
0x29 0x01F9 SMbus_16inx_16dat Write 0x34 * SPKL PGA volume = 0dB, Zero-cross enabled, Volume update
0x31 0x00D0 SMbus_16inx_16dat Write 0x34 * Enable Class D
0x05 0x0000 SMbus_16inx_16dat RmodW 0x34 0x0008 * DAC Unmute
上面的配置,将声卡配置成了从模式,24 位;
如果要将 24 位修改为 16 位;
则直接在软件上修改,软件左下角会生成寄存器配置;
另外一个需要注意的是寄存器 R56(38h)Clocking 4 MCK_RATE 的分频配置
MCK_RATE = MCLK / fs;
参考 linux 的代码,修改如下:
对应软件的位置为:
其它寄存器的例子见 Profiles/WM8962B/ 目录下的其它文件;
寄存器具体信息见 datasheet Register Map 目录;