#include <csl.h>
#include <csl_mcasp.h>
#include <csl_i2c.h>
#include <TDS6713EVM.h>
#include <codec.h>
#include <IIC.h>
#include "stdio.h"
extern far void vectors();
#pragma DATA_SECTION(DataBuffer, "data_codec")
#pragma DATA_ALIGN(DataBuffer, 4)
Uint32 far DataBuffer[1000000] = {0};
Uint32 i;
Uint32 TempData=0;
Uint32 Reg=0;
void main()
{
MCASP_Handle hMcasp;
I2C_Handle hI2C;
Uint32 cmd = 0;
//Configuration for DEVCFG register
CHIP_Config devCfgReg =
{
CHIP_DEVCFG_RMK(
CHIP_DEVCFG_EKSRC_SYSCLK3,
CHIP_DEVCFG_TOUT1SEL_MCASPPIN,
CHIP_DEVCFG_TOUT0SEL_MCASPPIN,
CHIP_DEVCFG_MCBSP0DIS_1,
CHIP_DEVCFG_MCBSP1DIS_1)
};
//Open I2C0
hI2C = I2C_open(I2C_DEV0,I2C_OPEN_RESET);
printf ("1: The CODEC record the Audio data!\n");
printf ("2: The CODEC playback the Audio data!\n");
printf ("Other: Exit!\n");
printf ("please select the operation!\n");
//fgets(line, sizeof(line), stdin)
while(1)
{
scanf("%d",&cmd);
switch(cmd)
{
case 1:
printf("Copying Audio data to test.dat .....\n");
// Initialize CSL
CSL_init();
// Initialize TDS6713EVM board
TDS6713EVM_init();
CSR=0x0;
CHIP_config(&devCfgReg);
/* If i2c model clock frequency is lower, perhaps timer delay should be
added between aic23 registers writting */
// reset
I2C_write16(hI2C,Reset_Register,0x00);
TDS6713EVM_wait(100);
// Set all parts of AIC23 begin to work
I2C_write16(hI2C,Power_Down_Control,0x00);
TDS6713EVM_wait(100);
// Set digital interface for AIC23
I2C_write16(hI2C,Digital_Audio_Interface_Format,0x52);//0x52
TDS6713EVM_wait(100);
// Set analog channel for AIC23
I2C_write16(hI2C,Analog_Audio_Path_Control,0x10); //对于0x14,则输入为micphone;0x10,输入为line
TDS6713EVM_wait(100);
// Set digital channel for AIC23
I2C_write16(hI2C,Digital_Audio_Path_Control,0x01);
TDS6713EVM_wait(100);
// Set sample rate for AIC23
I2C_write16(hI2C,Sample_Rate_Control,0x00);
TDS6713EVM_wait(100);
// Set volume for headphone
I2C_write16(hI2C,Left_Channel_Headphone_Volume_Control,0xF9);
TDS6713EVM_wait(100);
// Set volume for line in
I2C_write16(hI2C,Left_Line_Input_Channel_Volume_Control,0x17);
TDS6713EVM_wait(100);
I2C_write16(hI2C,Right_Line_Input_Channel_Volume_Control,0x17);
TDS6713EVM_wait(100);
// Start AIC23
I2C_write16(hI2C,Digital_Interface_Activation,0x01);
TDS6713EVM_wait(1000);
hMcasp = TDS6713EVM_AIC23_OpenCodec();
for(i=0;i<1000000;i++) //
{
while(!(MCASP_RGETH(hMcasp, SRCTL7) & 0x10)){};
MCASP_write32Cfg(hMcasp,MCASP_XBUF7,TempData);
while(!(MCASP_RGETH(hMcasp, SRCTL6) & 0x20)){};
TempData = MCASP_read32Cfg(hMcasp,MCASP_RBUF6);
DataBuffer[i] = TempData;
}
TDS6713EVM_AIC23_CloseCodec(hMcasp);
printf("Audio data save to test.dat successfully!\n");
break;
case 2:
printf("Playback the Audio data .....\n");
// Initialize CSL
CSL_init();
// Initialize TDS6713EVM board
TDS6713EVM_init();
CSR=0x0;
CHIP_config(&devCfgReg);
/* If i2c model clock frequency is lower, perhaps timer delay should be
added between aic23 registers writting */
I2C_write16(hI2C,Reset_Register,0x00); // reset
TDS6713EVM_wait(100);
// Set all parts of AIC23 begin to work
I2C_write16(hI2C,Power_Down_Control,0x00);
TDS6713EVM_wait(100);
// Set digital interface for AIC23
I2C_write16(hI2C,Digital_Audio_Interface_Format,0x52);//0x52
TDS6713EVM_wait(100);
// Set analog channel for AIC23
I2C_write16(hI2C,Analog_Audio_Path_Control,0x10); //对于0x14,则输入为micphone;0x10,输入为line
TDS6713EVM_wait(100);
// Set digital channel for AIC23
I2C_write16(hI2C,Digital_Audio_Path_Control,0x01);
TDS6713EVM_wait(100);
// Set sample rate for AIC23
I2C_write16(hI2C,Sample_Rate_Control,0x00);
TDS6713EVM_wait(100);
// Set volume for headphone
I2C_write16(hI2C,Left_Channel_Headphone_Volume_Control,0xF9);
TDS6713EVM_wait(100);
// Set volume for line in
I2C_write16(hI2C,Left_Line_Input_Channel_Volume_Control,0x17);
TDS6713EVM_wait(100);
I2C_write16(hI2C,Right_Line_Input_Channel_Volume_Control,0x17);
TDS6713EVM_wait(100);
// Start AIC23
I2C_write16(hI2C,Digital_Interface_Activation,0x01);
TDS6713EVM_wait(1000);
hMcasp = TDS6713EVM_AIC23_OpenCodec();
for(i=0;i<1000000;i++)
{
while(!(MCASP_RGETH(hMcasp, SRCTL7) & 0x10)){};
MCASP_write32Cfg(hMcasp,MCASP_XBUF7,DataBuffer[i]);
while(!(MCASP_RGETH(hMcasp, SRCTL6) & 0x20)){};
TempData = MCASP_read32Cfg(hMcasp,MCASP_RBUF6);
}
printf("Playback Audio Finished!\n");
TDS6713EVM_AIC23_CloseCodec(hMcasp);
break;
default:
printf("Exit !\n");
goto bye;
}
}
bye: ;
}