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

📄 tds6713evm_codec.c

📁 6713音频的代码
💻 C
字号:

#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:  ; 
}



⌨️ 快捷键说明

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