?? codec.c
字號:
/****************************************************************************************/
//
// Filename: codec.c
// Function: Config codec
//
/****************************************************************************************/
#include "type.h"
#include "codec.h"
#include <csl_i2c.h>
#include <csl_chip.h>
#include <csl_mcbsp.h>
#include "mcbsp.h"
#include "E2PROM_Function.h"
#undef CODEC_ADDR
#define CODEC_ADDR 0x1A
/***********************************************************************************/
// CODEC的控制接口設置
/***********************************************************************************/
// 數字音頻接口格式設置
// AIC23為主模式,數據為DSP模式,數據長度16位
Uint16 Digital_Audio_Inteface_Format[2]={
Codec_DAIF_REV,
DAIF_MS(1)+DAIF_LRSWAP(0)+DAIF_LRP(1)+DAIF_IWL(0)+DAIF_FOR(3)};
// AIC23的波特率設置,采樣率為48k,CLKIN=CLKOUT=MCLK
// 時鐘模式設為普通模式,基過采樣率為250Fs
Uint16 Sample_Rate_Control[2] = {
Codec_SRC_REV,
SRC_CLKIN(0)+SRC_CLKOUT(0)+SRC_SR(6)+SRC_BOSR(0)+SRC_USB(0)};
// AIC23寄存器復位
Uint16 Reset[2] ={
Codec_RST_REV,
RST_RES};
// AIC23節電方式設置,所有部分均處于工作狀態
Uint16 Power_Down_Control[2] ={
Codec_PDC_REV,
PDC_DEFAULT};
// AIC23模擬音頻的控制:關掉側音
// DAC使能,ADC輸入選擇為音頻輸入
Uint16 Analog_Aduio_Path_Control[2] = {
Codec_AAPC_STA2(0),
AAPC_STA10(0)+AAPC_STE(0)+AAPC_DAC(1)+AAPC_BYP(0)+AAPC_INSEL(0)+AAPC_MICM(0)+AAPC_MICB(0)};
// AIC23數字音頻通路的控制
// 使能ADC高通濾波
Uint16 Digital_Audio_Path_Control[2] ={
Codec_DAPC_REV,
DAPC_DACM(0)+DAPC_DEEMP(0)+DAPC_ADCHP(1)};
// AIC23數字接口的使能
Uint16 Digital_Interface_Activation[2] ={
Codec_DIA_REV,
DIA_ACT(1)};
// AIC23左通路音頻調節
Uint16 Left_Line_Input_Volume_Control[2] ={
Codec_LLIVC_LPS(1),
LLIVC_LIM(0)+LLIVC_LIV(23)};
// AIC23右通路音頻調節
Uint16 Right_Line_Input_Volume_Control[2] = {
Codec_RLIVC_RLS(1),
RLIVC_RIM(0)+RLIVC_RIV(23)};
// AIC23耳機左通路音頻調節
Uint16 Left_Headphone_Volume_Control[2] = {
Codec_LHPVC_LRS(1),
LHPVC_LZC(1)+LHPVC_LHV(127)};
// AIC23耳機右通路音頻調節
Uint16 Right_Headphone_Volume_Control[2] = {
Codec_RHPVC_RLS(1),
LHPVC_RZC(1)+LHPVC_RHV(127)};
/********************************************************************************/
/* */
/* Functionname: void codec_sample_rate(unsigned int sample) */
/* description: Change the sample rate of codec for 5502 */
/* */
/********************************************************************************/
extern void codec_sample_rate(unsigned int sample)
{
switch(sample)
{
case 0x0: //CODEC_FREQ_8k
{
Uint16 Sample_Rate_Control[2] = {
Codec_SRC_REV,
SRC_CLKIN(0)+SRC_CLKOUT(0)+SRC_SR(3)+SRC_BOSR(0)+SRC_USB(0)};
I2C_write( Sample_Rate_Control,//pointer to data array
2, //length of data to be transmitted
1, //master or slaver
CODEC_ADDR, //slave address to transmit to
1, //transfer mode of operation
30000 //time out for bus busy
);
break;
}
case 0x1: //CODEC_FREQ_44k
{
Uint16 Sample_Rate_Control[2] = {
Codec_SRC_REV,
SRC_CLKIN(0)+SRC_CLKOUT(0)+SRC_SR(0)+SRC_BOSR(0)+SRC_USB(0)};
I2C_write( Sample_Rate_Control,//pointer to data array
2, //length of data to be transmitted
1, //master or slaver
CODEC_ADDR, //slave address to transmit to
1, //transfer mode of operation
30000 //time out for bus busy
);
break;
}
case 0x2: //CODEC_FREQ_96k
{
Uint16 Sample_Rate_Control[2] = {
Codec_SRC_REV,
SRC_CLKIN(0)+SRC_CLKOUT(0)+SRC_SR(7)+SRC_BOSR(0)+SRC_USB(0)};
I2C_write( Sample_Rate_Control,//pointer to data array
2, //length of data to be transmitted
1, //master or slaver
CODEC_ADDR, //slave address to transmit to
1, //transfer mode of operation
30000 //time out for bus busy
);
break;
}
default: break;
}
}
/********************************************************************************/
/* */
/* Functionname: void OpenCodec(void) */
/* description: Open Codec and prepare to run */
/* */
/********************************************************************************/
extern void Open_Codec(void)
{
/*設置AIC23各部分均工作*/
MyI2C_Write( Power_Down_Control,//pointer to data array
2, //length of data to be transmitted
1, //master or slaver
CODEC_ADDR, //slave address to transmit to
1, //transfer mode of operation
30000 //time out for bus busy
);
/*設置AIC23的數字接口*/
MyI2C_Write( Digital_Audio_Inteface_Format,//pointer to data array
2, //length of data to be transmitted
1, //master or slaver
CODEC_ADDR, //slave address to transmit to
1, //transfer mode of operation
30000 //time out for bus busy
);
/*設置AIC23模擬通路*/
MyI2C_Write( Analog_Aduio_Path_Control,//pointer to data array
2, //length of data to be transmitted
1, //master or slaver
CODEC_ADDR, //slave address to transmit to
1, //transfer mode of operation
30000 //time out for bus busy
);
/*設置數字通路*/
MyI2C_Write( Digital_Audio_Path_Control,//pointer to data array
2, //length of data to be transmitted
1, //master or slaver
CODEC_ADDR, //slave address to transmit to
1, //transfer mode of operation
30000 //time out for bus busy
);
/*設置AIC23的采樣率*/
MyI2C_Write( Sample_Rate_Control,//pointer to data array
2, //length of data to be transmitted
1, //master or slaver
CODEC_ADDR, //slave address to transmit to
1, //transfer mode of operation
30000 //time out for bus busy
);
/*設置耳機音量*/
MyI2C_Write( Left_Headphone_Volume_Control,//pointer to data array
2, //length of data to be transmitted
1, //master or slaver
CODEC_ADDR, //slave address to transmit to
1, //transfer mode of operation
30000 //time out for bus busy
);
/*設置Line輸入的音量*/
MyI2C_Write( Left_Line_Input_Volume_Control,//pointer to data array
2, //length of data to be transmitted
1, //master or slaver
CODEC_ADDR, //slave address to transmit to
1, //transfer mode of operation
30000 //time out for bus busy
);
/*啟動AIC23*/
MyI2C_Write( Digital_Interface_Activation,//pointer to data array
2, //length of data to be transmitted
1, //master or slaver
CODEC_ADDR, //slave address to transmit to
1, //transfer mode of operation
30000 //time out for bus busy
);
/* Start McBSP1 */
MCBSP_start(MyMcbsp,
MCBSP_RCV_START | MCBSP_XMIT_START,
0);
}
/********************************************************************************/
/* */
/* Functionname: void CloseCodec(void) */
/* description: Open Codec and prepare to run */
/* */
/********************************************************************************/
extern void Close_Codec(void)
{
/*關閉AIC23*/
MyI2C_Write( Reset, //pointer to data array
2, //length of data to be transmitted
1, //master or slaver
CODEC_ADDR, //slave address to transmit to
1, //transfer mode of operation
30000 //time out for bus busy
);
}
/******************************************************************************/
// No more
/******************************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -