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

📄 main.c

📁 这是一个在DSP 上用C编程实现的g.723标准实现的语音通讯程序
💻 C
字号:

#include "g723_5410cfg.h"

#define 	mcbsp_init	0x71	/* if *mcbsp_init==0xaa55, then transmit INT for init 'AC01 */ 
#define		mcbsp_reg	0x72
#define		dxr10		0x23	/* McBSP0' transmit REG */ 
#define		drr10		0x21	/* McBSP0' receive REG */

int input_buf[128];		/* use to save A/D data  */
int process_buf[128];	/* use to processing function saving data  */
int wave_buf[128];		/* use to save D/A data  */
int Is_output;			/* if Is_output==1, then D/A data have been prepared */
int AD_ptr,DA_ptr; 

void init_des();
void Decod();
void Coder();

void my_sem_init()
{
     SEM_reset(&sem_coder,0);
     SEM_reset(&sem_decode,0);
}

main()
{	
   Is_output=0;
   AD_ptr=(int)input_buf;
   DA_ptr=(int)wave_buf;
   
   my_sem_init();
   init_des();
   
}

void transmit()
{
   int *ptr, *ptr_dxr,*in,*out;
   int i;

   ptr=(int *)mcbsp_init;
   ptr_dxr=(int *)dxr10;
   
   if(*ptr == 0xaa55)			// if *mcbsp_init==0xaa55, this INT for init of AC01
   {  
       in=(int *)mcbsp_reg;
       *ptr_dxr = *in;			// when init AC01, the transmit data is put into A
       if( *ptr_dxr == 0x800)	// when a=0x800, the last init data !
       {   *ptr=0; }
       return;
   }
   else
   {    
       ptr=(int *)DA_ptr;			// if not for init AC01, 
       *ptr_dxr = *ptr++ & 0x0fffc;	//      then each int send one D/A buffer
       if(ptr >= wave_buf+128)		// when D/A buffer is over, then reload it !
       {
           ptr=wave_buf;
           if(Is_output)
           {   in=process_buf; out=wave_buf; 
               for(i=0;i<128;i++)
                  *out++ = *in++;	// copy process_buf to wave_buf(D/A buffer)
               Is_output=0;
               
           }
       }
       DA_ptr=(int)ptr;			// save D/A buffer's pointer
    }   
}

void processing(int *in,int *out)
{  int i;

     for(i=0;i<128;i++)
         *out++ = *in++ ;	// copy A/D source data to process buffer !
		
}         

void receive()
{
   int *ptr,*ptr_drr;
   
   ptr_drr=(int *)drr10;
   ptr=(int *)AD_ptr;			// restore A/D data' pointer
   
   *ptr++ = *ptr_drr;			// read data from McBSP0 
   if(ptr >= input_buf+128)		// if saved 128, then post SWI processing !
   {   
       ptr=input_buf;
       SEM_ipost(&sem_coder);
       
   }    
   AD_ptr=(int)ptr;   			// save A/D data' pointer
}

/*--------------------------------------------------------------------
   G723 DeCoder Processing Function !
----------------------------------------------------------------------*/
void process_decode()
{
	while(1)
	{		
		SEM_pend(&sem_decode,SYS_FOREVER);
		processing(input_buf,process_buf);
		Decod();
		Is_output=1;		// D/A data have been prepared !
	}
}

/*--------------------------------------------------------------------
   G723 Coder Processing Function !
----------------------------------------------------------------------*/
void process_coder()
{
	while(1)
	{		
		 SEM_pend(&sem_coder,SYS_FOREVER);
		 Coder();
		 SEM_post(&sem_decode); 
	}	 
			
}


⌨️ 快捷键说明

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