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

📄 codec.c

📁 基于dm643的Fir 滤波器的设计
💻 C
字号:
/************************************************************
  Copyright (C), 2007 by SEED Electronic Technology LTD.
  FileName: CEDEC.C
  Author:  Ya.X      Version : V1.0         Date:2007-09-20
  Description:   DEC643 AIC23音频处理芯片应用程序模块 
*************************************************************/
#include <csl_mcasp.h>
#include <csl_i2c.h>
#include "codec.h"

/*MCASP配置*/
MCASP_ConfigGbl MyMCASPcfgGbl = {
	0x00000000, /* PFUNC -     All pins as McASP */
	0x00000001, /* PDIR  -     XMT DATA output, rest are inputs */
	0x00000000, /* DITCTL -    DIT mode disable */
	0x00000000, /* DLBCTL -    Loopback disabled */
	0x00000000  /* AMUTE  -    Never drive AMUTE */
};
//Set receive registers.
MCASP_ConfigRcv MyMCASPcfgRcv = {
	/* RMASK */
	0xffffffff, /* RMASK -     Use all 32 bits */
	0x000180f8, /* RFMT -      MSB first, 32-bit slots, CPU bus, 0 bit delay */
	0x00000000, /* AFSRCTL -   burst, single bit frame sync, ext FS */
	0x00000080, /* ACLKRCTL -  Sample on rising CLK, divide by 1, ext CLK */
	0x00000000, /* AHCLKRCTL - External HCLK */
	0x00000001, /* RTDM -      Slots 0-31 are active */
	0x00000000, /* RINTCTL -   No interrupts */
	0x00000000  /* RCLKCHK -   Not used */ 
};
//Set serial control.
MCASP_ConfigSrctl MyMCASPcfgSrctl = {
	0x0000000D, /* SRCTL0 -    Inactive */
	0x0000000E, /* SRCTL1 -    Inactive */
	0x00000000, /* SRCTL2 -    Inactive */
	0x00000000, /* SRCTL3 -    Inactive */
	0x00000000, /* SRCTL4 -    Inactive */
	0x00000000, /* SRCTL5 -    Inactive */
	0x00000000, /* SRCTL6 -    Receive, active high */
	0x00000000  /* SRCTL7 -    Transmit, active high */
};
//Set transmit registers.
MCASP_ConfigXmt MyMCASPcfgXmt = {
	/* XMASK */
	0xffffffff, /* XMASK -     Use all 32 bits */
	0x000180f8, /* XFMT -      MSB first, 32-bit slots, CPU bus, 0 bit delay */
	0x00000000, /* AFSXCTL -   burst, single bit frame sync, ext FS */
	0x000000c0, /* ACLKXCTL -  Sample on falling CLK, divide by 1, ext CLK */
	0x00000000, /* AHCLKXCTL - External HCLK */
	0x00000001, /* XTDM -      Slots 0-31 are active */
	0x00000000, /* XINTCTL -   No interrupts */
	0x00000000  /* XCLKCHK -   Not used */
};
MCASP_Config MyMCASPConfig = {
	&MyMCASPcfgGbl,
	&MyMCASPcfgRcv,
	&MyMCASPcfgXmt,
	&MyMCASPcfgSrctl,
};
	
/***********************************************************
  Function:       DEC643_AIC23_OpenCodec
  Description:    打开音频编解码器AIC23
				  配置AXR1[0]为接收口;AXR1[1]为发送口
  Calls:          No
  Called By:      main
  Input:          No
  Output:         No
  Return:         MCASP_Handle
  Others:         No
************************************************************/
MCASP_Handle DEC643_AIC23_OpenCodec()
{
	MCASP_Handle DEC643_AIC23_DATAHANDLE;
	Uint32 gblctl;
		
	DEC643_AIC23_DATAHANDLE = MCASP_open(MCASP_DEV0,MCASP_OPEN_RESET);
	
	/* Reset MCASP to default values by setting GBLCTL = 0.*/
	MCASP_reset(DEC643_AIC23_DATAHANDLE);
	
	MCASP_config(DEC643_AIC23_DATAHANDLE,&MyMCASPConfig);
	
	/* Clear transmit and receive status ,清除发送与接收状态*/
	MCASP_RSETH(DEC643_AIC23_DATAHANDLE,XSTAT,0xFFFF);
	MCASP_RSETH(DEC643_AIC23_DATAHANDLE,RSTAT,0xFFFF);
	
	gblctl = 0;
    MCASP_RSETH(DEC643_AIC23_DATAHANDLE, GBLCTL, gblctl);
    gblctl = 0x404;
    /*使能发送与接收的串行寄存器*/    
    MCASP_RSETH(DEC643_AIC23_DATAHANDLE, GBLCTL, 0x404);
            
	/* Enable transmit/receive state machines */
    MCASP_RSETH(DEC643_AIC23_DATAHANDLE, XBUF0, 0);
    gblctl = 0x0c0c;
    MCASP_RSETH(DEC643_AIC23_DATAHANDLE, GBLCTL, gblctl);
	
	return(DEC643_AIC23_DATAHANDLE);
}

/***********************************************************
  Function:       DEC643_AIC23_CloseCodec
  Description:    关闭McASP
  Calls:          No
  Called By:      main
  Input:          HMcASP:待关闭的McASP句柄
  Output:         No
  Return:         No
  Others:         No
************************************************************/
void DEC643_AIC23_CloseCodec(MCASP_Handle HMcASP)
{
	MCASP_close(HMcASP);
}

/***********************************************************
  Function:       DEC643_AIC23_OpenRxCodec
  Description:    单独开启McASP接收通道
  Calls:          No
  Called By:      main
  Input:          No
  Output:         No
  Return:         MCASP_Handle
  Others:         No
************************************************************/
MCASP_Handle DEC643_AIC23_OpenRxCodec()
{
	MCASP_Handle DEC643_AIC23_DATAHANDLE;
	Uint32 gblctl;
		
	DEC643_AIC23_DATAHANDLE = MCASP_open(MCASP_DEV0,MCASP_OPEN_RESET);
	
	/* Reset MCASP to default values by setting GBLCTL = 0.*/
	MCASP_resetRcv(DEC643_AIC23_DATAHANDLE);
		
	MCASP_config(DEC643_AIC23_DATAHANDLE,&MyMCASPConfig);
	
	/*Start HF serial clocks */	
	
	/* Clear  receive status ,清除发送与接收状态*/
	MCASP_RSETH(DEC643_AIC23_DATAHANDLE,RSTAT,0xFFFF);
	
	/* Take the respetive serializer out of reset */
	gblctl = 0x04;
    MCASP_RSETH(DEC643_AIC23_DATAHANDLE, RGBLCTL, gblctl);
    	
	/* Enable transmit/receive state machines */
    gblctl = 0x0c;
    MCASP_RSETH(DEC643_AIC23_DATAHANDLE, RGBLCTL, gblctl);
    
    gblctl = 0x1c;
    MCASP_RSETH(DEC643_AIC23_DATAHANDLE, RGBLCTL, gblctl);
	

	return(DEC643_AIC23_DATAHANDLE);
}

/***********************************************************
  Function:       DEC643_AIC23_OpenTxCodec
  Description:    单独开启McASP发送通道
  Calls:          No
  Called By:      main
  Input:          No
  Output:         No
  Return:         MCASP_Handle
  Others:         No
************************************************************/
MCASP_Handle DEC643_AIC23_OpenTxCodec()
{
	MCASP_Handle DEC643_AIC23_DATAHANDLE;
	Uint32 gblctl;
		
	DEC643_AIC23_DATAHANDLE = MCASP_open(MCASP_DEV0,MCASP_OPEN_RESET);
	
	/* Reset MCASP to default values by setting GBLCTL = 0.*/
	MCASP_resetXmt(DEC643_AIC23_DATAHANDLE);
	
	
	MCASP_config(DEC643_AIC23_DATAHANDLE,&MyMCASPConfig);
	
	/* Clear transmit and receive status ,清除发送与接收状态*/
	MCASP_RSETH(DEC643_AIC23_DATAHANDLE,XSTAT,0xFFFF);
	
	gblctl = 0;
    MCASP_RSETH(DEC643_AIC23_DATAHANDLE, XGBLCTL, gblctl);
    gblctl = 0x400;
    /*使能发送与接收的串行寄存器*/    
    MCASP_RSETH(DEC643_AIC23_DATAHANDLE, XGBLCTL, gblctl);
            
	
	/* Enable transmit/receive state machines */
    MCASP_RSETH(DEC643_AIC23_DATAHANDLE, XBUF7, 0);
    gblctl = 0x0c00;
    MCASP_RSETH(DEC643_AIC23_DATAHANDLE, XGBLCTL, gblctl);
    
	gblctl = 0x1c00;
    MCASP_RSETH(DEC643_AIC23_DATAHANDLE, XGBLCTL, gblctl);

	return(DEC643_AIC23_DATAHANDLE);
}

/***********************************************************
  Function:       DEC643_AIC23_Config
  Description:    配置AIC23的寄存器
  Calls:          No
  Called By:      main
  Input:          No
  Output:         No
  Return:         No
  Others:         No
************************************************************/
void DEC643_AIC23_Config()
{
	I2C_Handle hI2C;

	/* Initialize I2C0. */
	/* Open I2C0. */
	hI2C = I2C_open(I2C_PORT0,I2C_OPEN_RESET);
	
	/* If i2c model clock frequency is lower, perhaps timer delay should be 
	   added between aic23 registers writting */
	/* Set all parts of AIC23 begin to work. */
	I2C_write16(hI2C,Power_Down_Control,0x00);
	/* Set digital interface for AIC23. */
	I2C_write16(hI2C,Digital_Audio_Interface_Format,0x53);//0x52
	/* Set analog channel for AIC23. */
	I2C_write16(hI2C,Analog_Audio_Path_Control,0x10);
	/* Set digital channel for AIC23. */
	I2C_write16(hI2C,Digital_Audio_Path_Control,0x01);
	/* Set sample rate for AIC23. */
	I2C_write16(hI2C,Sample_Rate_Control,0x02);
	/* Set volume for headphone. */
	I2C_write16(hI2C,Left_Channel_Headphone_Volume_Control,0xF9);
	/* Set volume for line in. */
	I2C_write16(hI2C,Left_Line_Input_Channel_Volume_Control,0x17);
	I2C_write16(hI2C,Right_Line_Input_Channel_Volume_Control,0x17);
	/* Start AIC23. */
	I2C_write16(hI2C,Digital_Interface_Activation,0x01);

	DEC643_wait(1000);
	I2C_close(hI2C);
}

/***********************************************************
  Function:       codec_headhponeout_gain
  Description:    AIC23音频输出增益控制
  Calls:          No
  Called By:      main
  Input:          gain;增益值[0-255]
  Output:         No
  Return:         No
  Others:         No
************************************************************/
void codec_headhponeout_gain(unsigned int gain)
{
	I2C_Handle hI2C;
	unsigned int aingain;

	/* Initialize I2C0. */
	/* Open I2C0. */
	hI2C = I2C_open(I2C_PORT0,I2C_OPEN_RESET);

	aingain = 0x80 + gain;

	I2C_write16(hI2C,Left_Channel_Headphone_Volume_Control,aingain);
	I2C_write16(hI2C,Right_Channel_Headphone_Volume_Control,aingain);

	DEC643_wait(1000);
	I2C_close(hI2C);
}
/********************************************************************************/
/* End of CODEC.C */
/********************************************************************************/


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -