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

📄 echo.c

📁 CCS下调试通过
💻 C
字号:
/////////////////////////////////////////////////
//  Example For ICETEK-VC5416-EDU              //
//          CTR Version : V4                   //
//  Filename: Echo.c                           //
//  Project : Echo.pjt                         //
//  Version : 2.00                             //
//  Write by: Daniel Hawk                      //
//  Company : Realtimedsp Co.Ltd.              //
//                                             //
//  All Rights opened & no Onus  2005.06       //
/////////////////////////////////////////////////
#include "myapp.h"
int ioport port8000;
int ioport port3002;
ioport unsigned int port3005;
#define DataBuffSize 8192  // 设置缓冲区大小
#define DELAYTIME 6134
int iLeftIn [DataBuffSize]; // 设置左声道输入缓冲区
int iTempBuff[DataBuffSize];
int nTime,nTime1,nCount;
unsigned int bEcho=0,bCodec=0;

unsigned int G711ALawEncode(int nLeft,int nRight);
unsigned char IntToALaw(int nInput);
int ALawToInt(unsigned char nInput);
void main( void )
{
   long   int i,k;
   port3005=1;
   initCLK(CPU_SPEED_160M);
   initMcBSP1();
   initAIC23();
   initMcBSP0();
   nCount=DELAYTIME;
   nTime1=DELAYTIME/2;
   nTime=0;
  
   // 缓冲区初始化
   for(i=0;i<DataBuffSize;i++)
   {
     iLeftIn[i]=0;
	 iTempBuff[i]=0;
   }
   initInterrupt();
   port8000=0;
   port8000=0x8888;
   port8000=0;
   bEcho=0;
   for(;;)
   {
   
   }

}
interrupt void rxData( void )
{
   int i,j;
    int left, right;
    unsigned int uWork;
    unsigned char cWork;

   i=DRR10;
   j=DRR20;
   
   left=i;
   right=j;
 //  iLeftIn[nCount]=i;
   // 回声效果,2级回声
         
         
//   DXR10=i;
   if(bEcho)
   {
        if ( bCodec )
        {
        	uWork=G711ALawEncode(left,right);
        	iLeftIn[nCount]=uWork;
        	cWork=uWork>>8;
        	left=ALawToInt(cWork);
        	cWork=uWork&0x0ff;
        	right=ALawToInt(cWork);
		}
   
//  	iTempBuff[nCount]=iLeftIn[nCount]/2+
//  		 iLeftIn[nTime1]/4 + 
//         iLeftIn[nTime]/4;
     DXR10=i;
     DXR20=right;
   }
   else
     DXR20=j;
     DXR10=i;

}

unsigned int G711ALawEncode(int nLeft,int nRight)
{
	unsigned char cL,cR;
	unsigned int uWork;

	cL=IntToALaw(nLeft);
	cR=IntToALaw(nRight);
	uWork=cL; uWork<<=8; uWork|=cR;
	return(uWork);
}
    
unsigned char IntToALaw(int nInput)
{
	char segment;
	unsigned int i, sign,quant;
	unsigned int absol, temp;
	int nOutput;
	unsigned char cOutput;

	temp=absol=abs(nInput);
	sign=(nInput >= 0)?1:0;
	for(i=0;i<16;i++){
	nOutput=temp&0x8000;
	if(nOutput)break;
	temp<<=1;
	}
	segment=11-i;
	if(segment<=0){
	segment=0;
	quant=(absol>>1)&0x0F;
	}
	else
	quant=(absol>>segment)&0x0F;
	segment<<=4;
	nOutput=segment+quant;
	if(absol>4095) nOutput=0x7F;
	if(sign)
		nOutput^=0xD5;
	else
		nOutput^=0x55;
	cOutput=(unsigned char)nOutput;
	return cOutput;
}

int ALawToInt(unsigned char nInput)
{
	int sign, segment;
	int temp, quant,nOutput;
	
	temp=nInput^0xD5;
	sign=(temp&0x80)>>7;
	segment=(temp&0x70)>>4;
	quant=temp&0x0F;
	quant<<=1;
	if(!segment)
	quant+=1;
	else{
	quant+=33;
	quant<<=segment-1;
	}
	if ( sign )
		nOutput=-quant;
	else
		nOutput=quant;
	return nOutput;
}

⌨️ 快捷键说明

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