?? 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 + -