音頻開發-----STM32配置CODEC之WM8721

STM32配置CODEC之WM8721

一、簡介

因一個USB聲卡項目使用到WM8721 Codec芯片.花了一天的時間調試代碼.最終完成.可以輸入跟輸出.網上找到的資料基本是FPGA配置的.沒有找到用MCU配置的代碼.所以才自己動手寫一個.做好後方便使用.同時也分享出來,方便大家使用.

以下是芯片的幾個特點:

  1. WM8731,是一款低功耗的高音質音頻器。
  2. 立體聲輸入輸出.LINE IN , MIC IN可選.
  3. 時鐘配置兩種模式,Normal模式USB模式.
  4. 支持4種IIS數據格式,:左對齊右對齊IIS模式DSP模式

二、芯片框圖

芯片框圖

三、WM8731寄存器

芯片總共有11個寄存器.具體的細節要看數據手冊.

WM8731寄存器
  • R0寄存器:LRINBOTH: 用左聲道參數控制右聲道裝載控制 LINMUTE:靜音控制 LINVOL:音量控制
  • R1寄存器:RLINBOTH:用右聲道參數控制左聲道裝載控制 RINMUTE:靜音控制 RINVOL:音量控制
  • R2寄存器:LRHPBOTH:用左通道耳機參數控制右通道耳機輸出 LZCEN:左通道過零檢測使能 LHPVOL:左通道耳機輸出音量控制
  • R3寄存器:RRHPBOTH:用右通道耳機參數控制左通道耳機輸出 RZCEN:右通道過零檢測使能 RHPVOL:右通道耳機輸出音量控制
  • R4寄存器:MICBOOST:麥克風輸入推子使能 MUTEMIC:麥克風靜音控制。INSEL:ADC輸入選擇(LININ MIC)BYPASS:直通模式使能。DACSEL:DAC輸出選擇,這裏應該跟使能一個意思。SIDETONE:側音控制使能,應該跟回聲抑制相關。SIDEATT:抑制值。
  • R5寄存器:ADCHPD:ADC高通濾波器的使能。DEEMP:去加重控制 DCAMU:DAC軟靜音控制。HPOR 當高通濾波器禁用時存儲直流偏移
  • R6寄存器:電源管理相關。具體就不細說了。
  • R7寄存器:FORMAT:控制IIS通訊接口的時序。IWL:數據寬度。LRP:控制LRCK信號的相位。 LRSWAP:DAC左右聲音時鐘交換。MS:主從模式選擇。BCLKINV:BCLK反相。
  • R8寄存器:USB/NORMAL:模式選擇 BOSR:選擇時LRCK跟BCLK時鐘關係 SR:採樣率控制 CLKIDV2:分頻器控制 CLKODIV2:分頻器控制
  • R9寄存器:激活接口
  • R15寄存器:軟件復位芯片寄存器

四、關於IIC配置

下面的配置的代碼:

#define WM8731_ADDR				0X1A      //WM8731的器件地址,固定爲0X1A 


/*
*********************************************************************************************************************

@ Brief  : WM8731寫寄存器

@ Param  : reg:寄存器地址 val:寄存器的值

@ Return : NONE

@ Author : YWJ(QQ:872180981)

@ Data   : 2020-06-21 12:21

*********************************************************************************************************************
*/
uint8_t WM8731_Write_Reg(uint8_t reg,uint16_t val)
{ 
    uint8_t rest=0;
    xBSP_I2C_Simu_Start(); 
    xBSP_I2C_Simu_Send_Byte((WM8731_ADDR<<1)|0);//發送器件地址+寫命令		
    if(xBSP_I2C_Simu_Wait_Ack())return 1;	//等待應答

    xBSP_I2C_Simu_Send_Byte((reg<<1)|((val>>8)&0X01));//寫寄存器地址+數據的最高位
    if(xBSP_I2C_Simu_Wait_Ack())return 2;	

    xBSP_I2C_Simu_Send_Byte(val&0XFF);	//發送數據
    if(xBSP_I2C_Simu_Wait_Ack())return 3;	
    xBSP_I2C_Simu_Stop();
    return 0;	
} 

/*
*********************************************************************************************************************

@ Brief  : WM8731初始化函數

@ Param  : NONE

@ Return : NONE

@ Author : YWJ(QQ:872180981)

@ Data   : 2020-06-21 12:23

*********************************************************************************************************************
*/
uint8_t WM8731_Init(void)
{
	uint8_t res;

    //I2C_Send_Byte(0X1E00);//復位WM8731
    res=WM8731_Write_Reg(0x0F,0);	//軟復位WM8731
    if(res)return 1;			//WM8731異常
	
	WM8731_Write_Reg(0X00,0X017);
	WM8731_Write_Reg(0X01,0X017);
	//WM8731_Write_Reg(0X02,0X028);//左聲道輸出音量
	//WM8731_Write_Reg(0X03,0X028);//右聲道輸出音量
	
	WM8731_Write_Reg(0X04,0X010);
	WM8731_Write_Reg(0X05,0X000);
	WM8731_Write_Reg(0X06,0X002);//硬件中只使用到LINEIN,因此關掉了MICIN,根據實際需要配置
	WM8731_Write_Reg(0X07,0X049);
	WM8731_Write_Reg(0X08,0X000);
	WM8731_Write_Reg(0X09,0X001);
	

	return 0;
}

五、資料下載

以上相關的資料,我會整理放到網盤.包括 : 模擬IIC代碼 WM8731配置代碼 芯片數據手冊

由於百度網盤會更新,可以進羣看QQ公告.所以資料都會在同一個地址分享.

QQ:872180981

羣號:339420387

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章