⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 codec.c

📁 这是个TI公司的TMS320VC5502的专门用的usb通讯程序
💻 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"

#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各部分均工作*/
    I2C_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的数字接口*/
	I2C_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模拟通路*/
	I2C_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
	    	   );

	/*设置数字通路*/
	I2C_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的采样率*/
	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
	    	   );

	/*设置耳机音量*/
	I2C_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输入的音量*/
	I2C_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*/
	I2C_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*/
	I2C_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 + -