📄 aic23_lib.c
字号:
/***************************************************
模块说明 :TLV320AIC23操作库文件
作 者 :柳军胜
公 司 :杭州自由电子科技
:http://www.freefpga.com
电 话 :0571-85084089
修 改 :
日期时间 :20060523
说 明 :
TLV320AIC23各类控制函数
****************************************************/
#include <alt_types.h>
#include <tlv320aic23.h>
#include <i2c_master.h>
// 寄存器控制值保存
static alt_u16 liv;
static alt_u16 riv;
static alt_u16 lhpv;
static alt_u16 rhpv;
static alt_u16 ap;
static alt_u16 dp;
static alt_u16 pd;
static alt_u16 dif;
static alt_u16 sr;
/*********************************************
函数名:write_I2c_Aic23
功 能:写TVL320AIC23音频芯片控制寄存器
输 入:外设地址,设备地址,字节地址
返 回:
备 注:通过I2C控制总线写AIC23控制寄存器
使用了I2C库的相关函数。
**********************************************/
int write_I2C_Aic23(alt_u8 slaveAddr,alt_u16 data)
{
alt_u8 uc;
int iRet;
iRet=start_write_waitack(slaveAddr);
if(iRet<0)
return -1;
//write B15-B8
uc=(data & 0xff00)>>8;
iRet=write_waitack(uc);
if(iRet<0)
return -2;
//write B7-B0
uc=(data & 0x00ff);
iRet=write_waitack_stop(uc);
if(iRet<0)
return -3;
return 0;
}
/*********************************************
函数名:aic23_reset
功 能:TLV320AIC23音频芯片复位函数
输 入:
返 回:
备 注:
软件复位
**********************************************/
int aic23_reset()
{
int iRet;
iRet=write_I2C_Aic23(0x34,CTRL_DATA(AIC23_RST,0));
if(iRet<0){
printf("复位AIC23错误\n");
return -1;
}
return 0;
}
/*********************************************
函数名:aic23_analog_bypass
功 能:TLV320AIC23音频芯片模拟电路旁路实验函数
输 入:
返 回:
备 注:
TLV320AIC23支持模拟信号旁路,LINE IN可以通过
控制寄存器旁路到LINE OUT和HEADPHONE OUT,在旁路
状态,我们可以测试数字化增益调整,侧音增益调整,还
可以测试HEADPHONE放大增益调整。
**********************************************/
int aic23_analog_bypass_test()
{
int iRet;
aic23_reset();
liv=CTRL_DATA(AIC23_LIV, AIC23_LIV_LIV0_MSK|\
AIC23_LIV_LIV1_MSK|\
AIC23_LIV_LIV2_MSK|\
AIC23_LIV_LIV3_MSK|\
AIC23_LIV_LIV4_MSK);
iRet=write_I2C_Aic23(0x34,liv);
if(iRet<0){
printf("写left line input volume control error\n");
}
riv=CTRL_DATA(AIC23_RIV, AIC23_RIV_RIV0_MSK|\
AIC23_RIV_RIV1_MSK|\
AIC23_RIV_RIV2_MSK|\
AIC23_RIV_RIV3_MSK|\
AIC23_RIV_RIV4_MSK);
iRet=write_I2C_Aic23(0x34,riv);
if(iRet<0){
printf("写right line input volume control error\n");
}
ap=CTRL_DATA(AIC23_AP,AIC23_AP_MICM_MSK|\
AIC23_AP_BYP_MSK);
//旁路、关闭DAC、关闭MIC
iRet=write_I2C_Aic23(0x34,ap);
if(iRet<0){
printf("写analog Audio Path Control error\n");
}
//address 0000111 Power Down Control
pd=CTRL_DATA(AIC23_PD,AIC23_PD_MIC_MSK|\
AIC23_PD_ADC_MSK|\
AIC23_PD_DAC_MSK);
iRet=write_I2C_Aic23(0x34,pd);
if(iRet<0){
printf("写Power Down Control error\n");
}
return 0;
}
/*********************************************
函数名:aic23_normal_setup
功 能:TLV320AIC23音频芯片常规设置函数
输 入:
返 回:
备 注:
开启LINE,ADC,DAC,DSP数据格式,USB采样设置模式
12M MCLK。
**********************************************/
int aic23_normal_setup()
{
int iRet;
char ch;
unsigned short int reg;
aic23_reset();
liv=CTRL_DATA( AIC23_LIV, AIC23_LIV_LIV0_MSK|\
AIC23_LIV_LIV1_MSK|\
AIC23_LIV_LIV2_MSK|\
AIC23_LIV_LIV3_MSK|\
AIC23_LIV_LIV4_MSK);
iRet=write_I2C_Aic23(0x34,liv);
if(iRet<0){
printf("写left line input volume control error\n");
}
riv=CTRL_DATA( AIC23_RIV, AIC23_RIV_RIV0_MSK|\
AIC23_RIV_RIV1_MSK|\
AIC23_RIV_RIV2_MSK|\
AIC23_RIV_RIV3_MSK|\
AIC23_RIV_RIV4_MSK);
iRet=write_I2C_Aic23(0x34,riv);
if(iRet<0){
printf("写right line input volume control error\n");
}
ap=CTRL_DATA( AIC23_AP, AIC23_AP_MICM_MSK|\
AIC23_AP_DAC_MSK);
iRet=write_I2C_Aic23(0x34,ap);//0812
if(iRet<0){
printf("写analog Audio Path Control error\n");
}
dp=CTRL_DATA(AIC23_DP, 0);
iRet=write_I2C_Aic23(0x34,dp);
if(iRet<0){
printf("写analog Audio Path Control error\n");
}
pd=CTRL_DATA(AIC23_PD,AIC23_PD_MIC_MSK);
iRet=write_I2C_Aic23(0x34,pd);//0c02
if(iRet<0){
printf("写Power Down Control error\n");
}
dif=CTRL_DATA(AIC23_DIF, AIC23_DIF_FOR0_MSK|\
AIC23_DIF_FOR1_MSK|\
AIC23_DIF_LRP_MSK|\
AIC23_DIF_MS_MSK);
iRet=write_I2C_Aic23(0x34,dif);//0x0e53
if(iRet<0){
printf("写Digital Audio Interface Control error\n");
}
//ch=ShowSelect( "选择96K采样率?y OR n",'y','n' );
if(ch=='y'){
// MCLK、MCLK、96kHz、USB Mode
sr=CTRL_DATA(AIC23_SR,AIC23_SR_USBNORMAL_MSK|\
AIC23_SR_SR0_MSK|\
AIC23_SR_SR1_MSK|\
AIC23_SR_SR2_MSK);
}else{
//ch=ShowSelect( "选择48K采样率?y OR n",'y','n' );
if(ch=='y'){
// MCLK、MCLK、48kHz、USB Mode
sr=CTRL_DATA(AIC23_SR,AIC23_SR_USBNORMAL_MSK);
}else{
//ch=ShowSelect( "选择8K采样率?y OR n",'y','n' );
if(ch=='y'){
// 8khz,USB Mode
sr=CTRL_DATA(AIC23_SR,AIC23_SR_USBNORMAL_MSK|\
AIC23_SR_SR0_MSK|\
AIC23_SR_SR1_MSK);
} else
reg=0x1001;
}
}
iRet=write_I2C_Aic23(0x34,sr);
if(iRet<0){
printf("写Sample rate Control error\n");
}
reg=CTRL_DATA(AIC23_DIA,AIC23_DIA_ACT_MSK);
iRet=write_I2C_Aic23(0x34,reg);
if(iRet<0){
printf("写Sample rate Control error\n");
}
return 0;
}
/*********************************************
函数名:livc
功 能:左声道线路增益控制
输 入:声道增益控制值:11111~0000(+12db~-34db)
返 回:0 sucesses -1 error
备 注:10111=0db
**********************************************/
int livc(unsigned char value)
{
int iRet;
alt_u16 reg;
reg=value&0x1f;
liv=liv&(~0x1f);
liv=liv|reg;
iRet=write_I2C_Aic23(0x34,liv);
if(iRet<0){
printf("写left line input volume control error\n");
return -1;
}
return 0;
}
/*********************************************
函数名:rivc
功 能:右声道线路增益控制
输 入:右道增益控制值:11111~0000(+12db~-34db)
返 回:0 sucesses -1 error
备 注:10111=0db
**********************************************/
int rivc(unsigned char value)
{
int iRet;
alt_u16 reg;
reg=value&0x1f;
riv=riv&(~0x1f);
riv=riv|reg;
iRet=write_I2C_Aic23(0x34,riv);
if(iRet<0){
printf("写right line input volume control error\n");
return -1;
}
return 0;
}
/*********************************************
函数名:lim
功 能:左声道线路静音控制
输 入:
返 回:0 sucesses -1 error
备 注:
**********************************************/
int lim()
{
int iRet;
liv=liv|AIC23_LIV_LIM_MSK;
iRet=write_I2C_Aic23(0x34,liv);
if(iRet<0){
printf("写left line input volume control error\n");
return -1;
}
return 0;
}
/*********************************************
函数名:rim
功 能:右声道线路静音控制
输 入:
返 回:0 sucesses -1 error
备 注:
**********************************************/
int rim()
{
int iRet;
riv=riv|AIC23_RIV_RIM_MSK;
iRet=write_I2C_Aic23(0x34,riv);
if(iRet<0){
printf("写left line input volume control error\n");
return -1;
}
return 0;
}
/*********************************************
函数名:lhpv
功 能:左声道耳机增益控制
输 入:声道增益控制值:1111111~0000000(+6db~-73db)
返 回:0 sucesses -1 error
备 注:1111001=0db
**********************************************/
int lhpvc(unsigned char value)
{
int iRet;
alt_u16 reg;
reg=value&0x7f;
lhpv=lhpv&(~0x7f);
lhpv=lhpv|reg;
iRet=write_I2C_Aic23(0x34,lhpv);
if(iRet<0){
printf("写left headphone out volume control error\n");
return -1;
}
return 0;
}
/*********************************************
函数名:rhpv
功 能:左声道耳机增益控制
输 入:声道增益控制值:1111111~0000000(+6db~-73db)
返 回:0 sucesses -1 error
备 注:1111001=0db
**********************************************/
int rhpvc(unsigned char value)
{
int iRet;
alt_u16 reg;
reg=value&0x7f;
rhpv=rhpv&(~0x7f);
rhpv=rhpv|reg;
iRet=write_I2C_Aic23(0x34,rhpv);
if(iRet<0){
printf("写right headphone out volume control error\n");
return -1;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -