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

📄 rtdemo55.c

📁 TI的DSP C55X的应用程序
💻 C
字号:
/******************************************************************************/
/*   rtDemo() - Real time demo for playing continuous processed samples       */
/*                                                                            */
/*   This example plays back data in continuous (dma) pulling mode.           */
/*                                                                            */
/*   Dec. 3, 2001                                                             */
/*   updated Dec 8, 2001 - add more input selections.                         */
/*                         On C5510 EVM, inductor L505, Ferrite Bead 600 ohm  */
/*                         500mA is missing. This causes the stereo line      */
/*                         inputs fail.                                       */
/*                         To fixed this, you will need to add it, or just    */
/*                         use a wire to connect the path.                    */
/*                         If you want to fix it. The part you need is:       */
/*                         HZ0805E601R by Steward or                          */
/*                         LCB0805H-601 by Inductor supply Inc.               */
/*                                                                            */
/******************************************************************************/

#include <board.h> 
#include <aic27.h>  
//*****************************************************************************/ 
//* defines
//*****************************************************************************/

#define BUF_SIZE            160	// samples per buffer             
#define NUM_BUFFS_TO_PLAY   2000
  
#define L_MIC               1   // left mic used only 
#define R_LINE              2   // right line only 
#define L_LINE              3   // left line only (needs to fixed EVM L505 is missing) 
#define LR_LINE             4   // left and right line (right line needs board work missing L505) 
#define MIC_LINE            5   // left=line & right=mic 
#define DEFAULT             6   // default all mute  

void DSP_application(s16 *inOutBuf);

//*****************************************************************************/ 
//* globals data 
//*****************************************************************************/
#pragma DATA_ALIGN(rxBuf, 2);    // align to even word boundary for dma transfers
#pragma DATA_ALIGN(txBuf, 2);
 
s16      rxBuf[2][BUF_SIZE]; 
s16      txBuf[2][BUF_SIZE];  
s16		 inOutBuf[BUF_SIZE];

//*****************************************************************************/ 
//* MAIN 
//*****************************************************************************/ 

static s16 *status;

void main()                 
{     
    s16 inSel,i;
    u16 bufNum;
    u32 bufsPlayed;
    brd_init(160);  // initialize board at 160 mHz         
    
    CPLD_CTRL2_REG &= ~1;
    
    // select stereo output  
    //     inSel = L_MIC;      
    //     inSel = L_LINE;      
    //     inSel = R_LINE;      
           inSel = LR_LINE;           
    //     inSel = MIC_LINE; 
    //     inSel = DEFAULT;        
    
    
    // reset and open codec      
    aic27_reset();     
    aic27_open(); 
    
    aic27_write_reg(MASTER_VOL,      0x0000, 0xFFFF);   // LineOut gain none
    aic27_write_reg(PCMOUT_VOL,      0x0000, 0xFFFF);   // PCMOut front gain none
    aic27_write_reg(REC_SEL,         0x0505, 0xFFFF);   // Select Stereo mix
    aic27_write_reg(REC_GAIN,        0x0000, 0xFFFF);   // Rec gain none
    aic27_write_reg(FRONT_MIXER_VOL, 0x8000, 0xFFFF);   // Front Mixer mute
    aic27_write_reg(VENDOR_RSVD1,    0x0020, 0x0020);   // Switch to ADCNDAC
    
    switch(inSel)// input selection      
    {        
        case L_MIC: 
        aic27_write_reg(PCBEEP_VOL,  0x8000, 0xFFFF);   // PCBeep mute
        aic27_write_reg(PHONE_VOL,   0x8000, 0xFFFF);   // Phone mute
        aic27_write_reg(MIC_VOL,     0x001f, 0xFFFF);   // Mic gain full
        aic27_write_reg(LINEIN_VOL,  0x8000, 0xFFFF);   // LineIn mute
        aic27_write_reg(CD_VOL,      0x8000, 0xFFFF);   // CD mute
        aic27_write_reg(VIDE0_VOL,   0x8000, 0xFFFF);   // Video mute
        aic27_write_reg(AUX_VOL,     0x8000, 0xFFFF);   // Aux mute
        aic27_write_reg(REC_SEL,     0x0300, 0xFFFF);   // Select Mic/Aux 
        break;
      
        case R_LINE: 
        aic27_write_reg(PCBEEP_VOL,  0x8000, 0xFFFF);   // PCBeep mute
        aic27_write_reg(PHONE_VOL,   0x8000, 0xFFFF);   // Phone mute
        aic27_write_reg(MIC_VOL,     0x8000, 0xFFFF);   // Mic mute
        aic27_write_reg(LINEIN_VOL,  0x1F00, 0xFFFF);   // LineIn gain full left
        aic27_write_reg(CD_VOL,      0x8000, 0xFFFF);   // CD mute
        aic27_write_reg(VIDE0_VOL,   0x8000, 0xFFFF);   // Video mute
        aic27_write_reg(AUX_VOL,     0x8000, 0xFFFF);   // Aux mute
        aic27_write_reg(REC_SEL,     0x0305, 0xFFFF);   // Select Stereo Mix/Aux
        break; 
     
        case L_LINE: 
        aic27_write_reg(PCBEEP_VOL,  0x8000, 0xFFFF);   // PCBeep mute
        aic27_write_reg(PHONE_VOL,   0x8000, 0xFFFF);   // Phone mute
        aic27_write_reg(MIC_VOL,     0x8000, 0xFFFF);   // Mic mute
        aic27_write_reg(LINEIN_VOL,  0x001F, 0xFFFF);   // LineIn gain full right
        aic27_write_reg(CD_VOL,      0x8000, 0xFFFF);   // CD mute
        aic27_write_reg(VIDE0_VOL,   0x8000, 0xFFFF);   // Video mute
        aic27_write_reg(AUX_VOL,     0x8000, 0xFFFF);   // Aux mute
        aic27_write_reg(REC_SEL,     0x0503, 0xFFFF);   // Select Stereo Mix/Aux
        break;            
    
        case LR_LINE:
        aic27_write_reg(PCBEEP_VOL,  0x8000, 0xFFFF);   // PCBeep mute
        aic27_write_reg(PHONE_VOL,   0x8000, 0xFFFF);   // Phone mute
        aic27_write_reg(MIC_VOL,     0x8000, 0xFFFF);   // Mic mute
        aic27_write_reg(LINEIN_VOL,  0x0000, 0xFFFF);   // LineIn gain full both
        aic27_write_reg(CD_VOL,      0x8000, 0xFFFF);   // CD mute
        aic27_write_reg(VIDE0_VOL,   0x8000, 0xFFFF);   // Video mute
        aic27_write_reg(AUX_VOL,     0x8000, 0xFFFF);   // Aux mute
        break;

        default: 
        case MIC_LINE:
        aic27_write_reg(PCBEEP_VOL,  0x8000, 0xFFFF);   // PCBeep mute
        aic27_write_reg(PHONE_VOL,   0x8000, 0xFFFF);   // Phone mute
        aic27_write_reg(MIC_VOL,     0x001F, 0xFFFF);   // Mic gain full
        aic27_write_reg(LINEIN_VOL,  0x001F, 0xFFFF);   // LineIn gain full right
        aic27_write_reg(CD_VOL,      0x8000, 0xFFFF);   // CD mute
        aic27_write_reg(VIDE0_VOL,   0x8000, 0xFFFF);   // Video mute
        aic27_write_reg(AUX_VOL,     0x8000, 0xFFFF);   // Aux mute
        aic27_write_reg(REC_SEL,     0x0500, 0xFFFF);   // Select Mic/Stereo mix
        break;
    }
    
    aic27_sample_rate(AUDIO_ADC_RRATE, AIC27_8000HZ);  //set sample rate     
    aic27_sample_rate(FRONT_DAC_SRATE, AIC27_8000HZ);
    
    for (i = 0; i < BUF_SIZE; i++)  			//clear buffers, etc.      
    {                          
        txBuf[0][i] = 0;
        txBuf[1][i] = 0;
    }     
    
    bufsPlayed  = 0;
    bufNum = 0;
    
    //setup for continuous capture and play 
    aic27_cont_play(txBuf[0], txBuf[1], BUF_SIZE, 0, &status);    
 
    *status = 1;                      
    while (*status);    						// wait for buffer to be empty      
                                    	
    aic27_cont_capture(rxBuf[0], rxBuf[1], BUF_SIZE, 0, &status);          
    
    *status = 1;                                                       
    while (*status);    						// wait for buffer to be full                
   
     while (bufsPlayed++ < NUM_BUFFS_TO_PLAY)// loop through all buffers      
    {                
        *status = 1;
        while (*status);    					// wait for buffer to be empty
                    
        for (i=0; i<BUF_SIZE; i++)
        {
            inOutBuf[i] = rxBuf[bufNum][i];		// getting samples from input
        }

		//////////////////////////////////////////////////////////
		
		/////////////Your DSP Processing algorithm ///////////////
		
		DSP_application(inOutBuf); 
		
		//////////////////////////////////////////////////////////

        for (i=0; i<BUF_SIZE; i++)
        {
            txBuf[bufNum][i] = inOutBuf[i];		// passing samples to output        
        }

        bufNum ^= 1;
    }       
  
     for (i = 0; i < BUF_SIZE; i++)           
     	txBuf[bufNum][i] = 0; 					// Flash the last tx buffer

     // stop and close codec      
     aic27_stop_play();
     aic27_stop_capture();
     aic27_close();         
}

/////////////Your DSP Processing algorithm ///////////////
void DSP_application(s16 *inOutBuf)
{   
	s16 i;

	for (i=0; i< BUF_SIZE; i++)
		inOutBuf[i] = inOutBuf[i]; 

}       


⌨️ 快捷键说明

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