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

📄 codec_main.c

📁 这是tms320f28***语音录放程序.
💻 C
字号:
/******************************************************************************/
/*main.c                                                   		              */
/*                                                                            */
/* This is proprietary information, not to be published -- DIGIPRO DATA   	  */
/* Copyright (C) 2002, DigiPro Information Co.,Ltd.  All Rights Reserved.     */
/*                                                                            */
/* Author: Wu DingMing & Li Fayue                                             */
/* Date: August 12-28, 2002                                                      */
/******************************************************************************/
#include <stdio.h>
#include "mmdrv.h"
#include "mcbsp.h"
#include "cpu_reg.h"    
#include "lcd_86.h"
 
ioport unsigned portefff;	
#define 	IO_374	 portefff

void init_exint1_interrupt();
void init_GPIO(void);   

void mic_bypass(void);
void line_in_bypass(void);
void mic_record(void);
void line_in_record(void);
void codec_play(void);
void DEAL_RX(unsigned int i);
unsigned int DEAL_TX(void);
void stop_interrupt();   //stop receive & tranmit interrupt

unsigned int flag=0xffff;
unsigned long secter_num;

unsigned int ping_buf1[0x2000];   
unsigned int ping_buf2[0x2000];
unsigned int enc_flag=0;  
unsigned int input_flag =0;	
unsigned int rl_flag=0;                                 
unsigned int count1=0 ;

#define max_secter_num	33
#define init_secter_num	0

void main(void)
{
unsigned int i,j;		
unsigned int key_val;
 
 	SWWSR = 0x7fff;
    SWCR = 0x0001;
    BSCR = 0x8006;	  
    CLKMD = PLL_DIV_INIT;
    waitloop( 0x0400 );
    CLKMD = PLL_LOCK_INIT_X(9);	
    waitloop( 0x0400 );        
	PMST = 0x0168;

	Init_MCBSP_codec();
	init_codec_linein();

	init_exint1_interrupt();
    init_GPIO();   
    init_lcd();
  	LCD_clear(0);
	cur_row=2;        
	cur_col=20;        
    LCD_pr_chars("RECORD_PLAY TEST",16);
	cur_row=3;        
	cur_col=1;        
    LCD_pr_chars("=======================",23);
 
	IO_374=0xffff;		//374 enable

    Close_LED_Data();
    Close_LED_Traf();
    Close_LED_sign();
    waitloop( 0x0400 );        
 	while(1)
	{
 		i=Get_Key();
        waitloop( 0x04000 );
		j=Get_Key();

        if(i==j)
         {	
			flag=0xffff;
			key_val=j;		/*Save key_val*/
			          	 		 
  	  	    switch(key_val)
	  	     {
	           default: 
	    	    break;
	           case 1:
				cur_row=4;        
				cur_col=10;        
			    LCD_pr_chars("    Mic_Bypass   ",17);
				cur_row=5;        
				cur_col=15;        
    			LCD_pr_chars("                 ",17);
     		    mic_bypass();      
	      		break;
	           case 2:
				cur_row=4;        
				cur_col=10;        
			    LCD_pr_chars(" Line_In_Bypass  ",17);
				cur_row=5;        
				cur_col=15;        
    			LCD_pr_chars("                 ",17);
  		        line_in_bypass();      
	      		break;
	           case 3:
				cur_row=4;        
				cur_col=10;        
			    LCD_pr_chars("Mic_Rec_Loopback ",17);
				cur_row=5;        
				cur_col=15;        
    			LCD_pr_chars("                 ",17);
	            mic_record();
	      		break;
	           case 4:
				cur_row=4;        
				cur_col=10;        
			    LCD_pr_chars("Line_Rec_Loopback",17);
				cur_row=5;        
				cur_col=15;        
    			LCD_pr_chars("                 ",17);
 	            line_in_record();
	      		break;
	           case 6:
				cur_row=4;        
				cur_col=10;        
			    LCD_pr_chars("    codec_play   ",17);
				cur_row=5;        
				cur_col=15;        
    			LCD_pr_chars("                 ",17);
   	            codec_play();
	      		break;
              }
         }    
 	}
}

void init_exint1_interrupt()   
{
	IFR =0xffff;
 	IMR =0x0002;		//EXINT1=IMR.1		
	asm("\trsbx\tintm ");

}    
 
void init_tx_interrupt()   //transmit interrupt
{
	IFR =0xffff;
 	IMR =0x22;			//BXINT0=IMR.5=1, BXINT0=IMR.4=0,EXINT1=IMR.1=1

	asm("\trsbx\tintm ");

}    

void init_re_interrupt()   //receive interrupt
{
	IFR =0xffff;
 	IMR =0x12;			//BXINT0=IMR.5=0, BXINT0=IMR.4=1,EXINT1=IMR.1=1
	asm("\trsbx\tintm ");

}
 
void stop_interrupt()   //stop receive & tranmit interrupt
{
	IFR =0xffff;
 	IMR =0x0002;		//EXINT1=IMR.1		
	asm("\trsbx\tintm ");

}    


interrupt void BRINT0_isr(void)
{
	unsigned int i; 
 	i = MCBSP0_DRR1;     /* DRR1 = txdata */ 
	MCBSP0_DXR1  =  i;  
	DEAL_RX(i);		
}
  	
interrupt void BXINT0_isr()
{
  	MCBSP0_DXR1  =   DEAL_TX();      
}                   

 
interrupt void EXINT1_isr()
{
unsigned int i;

	IO_374=0xffff;		//374 enable

    Close_LED_Data();
    Close_LED_Traf();
    Close_LED_sign();

	IFR =0xffff;
   	//	while(!(GPIOSR&0x01))
		 {
				asm("\tnop");
				asm("\tnop");
		 }

	flag=0;	//~flag;
	cur_row=5;        
	cur_col=15;        
    LCD_pr_chars("Codecr_Stop_play ",17);
	for(i=0;i<8;i++)
	 {
	 	Disp_LED_sign(0,i);
	 }
}

void init_GPIO(void)   
{
	GPIOCR =0xfffe;   //EXINT1=GPIO.0=input=0,nand_cs=GPIO.6=output=1
 	GPIOSR =0x0040;	  //GPIO.6=output=1			
}    

void mic_bypass(void)   
{
	unsigned int data;

	Init_MCBSP_codec();
	init_codec_mic();
	while(flag)
  	 {	
    	data=mcbsp0_codec_rx_data();
    	mcbsp0_codec_tx_data(data);	
  	 }	
	init_codec_linein();
 
}    

void line_in_bypass(void)
{
unsigned int sign_bit=0;
unsigned int sign_state=1;//1

	unsigned int data;
// 	Init_MCBSP_codec();
//	init_codec_linein();
 
 	while(flag)
  	 {	
    	data=mcbsp0_codec_rx_data();
	    mcbsp0_codec_tx_data(data);	

			Disp_LED_sign((sign_state&0x01),sign_bit);
			sign_bit++;
			if(sign_bit==0x7f0)
			 {
				sign_bit=0;  			
  				sign_state =~sign_state;
			 } 

   	 }	
}
      
void mic_record(void)
{
unsigned int sign_bit=0;
unsigned int sign_state=1;

	Init_MCBSP_codec();
	init_codec_mic();
	init_re_interrupt();   //receive interrupt

   	enc_flag=0;  
   	secter_num=init_secter_num; 
   	count1 =0;

 	MCBSP0_DXR1  =  MCBSP0_DRR1;	/* DRR1 = txdata */   

	while(flag)
	 {	
 		if(enc_flag)
	 	 {
			Disp_LED_sign((sign_state&0x01),sign_bit);
			sign_bit++;
			if(sign_bit==8)
			 {
			 	sign_bit=0;
 				sign_state =~sign_state;
			 } 

           	enc_flag=0;
			if(input_flag)
		 	 {
               	erase_nand_flash(secter_num);
				Write_nand_flash_block(secter_num,ping_buf2,0);	
  			 }
			else
			 {
               	erase_nand_flash(secter_num);
				Write_nand_flash_block(secter_num,ping_buf1,0);	
			 }
			secter_num +=32;
			if(secter_num>32*max_secter_num)
			 {                
			 	asm("\tnop");
			 	asm("\tnop");
			 	asm("\tnop");
			 	secter_num=init_secter_num;
               	break;
             }
     	 }
	 }
    Close_LED_Data();
    Close_LED_Traf();
    Close_LED_sign();
	cur_row=5;        
	cur_col=15;        
    LCD_pr_chars("Codecr_Stop_play ",17);
	stop_interrupt();   //stop receive & tranmit interrupt
	init_codec_linein();

}


void line_in_record(void)
{
unsigned int sign_bit=0;
unsigned int sign_state=1;

   	enc_flag=0;  
   	secter_num=init_secter_num; 
   	count1 =0;

	Init_MCBSP_codec();
//	init_codec_linein();
	init_re_interrupt();   //receive interrupt


 	MCBSP0_DXR1  =  MCBSP0_DRR1;	/* DRR1 = txdata */

	while(flag)
	 {	
 		if(enc_flag)
	 	 {
			Disp_LED_sign((sign_state&0x01),sign_bit);
			sign_bit++;
			if(sign_bit==8)
			 {
			 	sign_bit=0;
 				sign_state =~sign_state;
			 } 

           	enc_flag=0;
			if(input_flag)
		 	 {
               	erase_nand_flash(secter_num);
				Write_nand_flash_block(secter_num,ping_buf2,0);	
  			 }
			else
			 {
               	erase_nand_flash(secter_num);
				Write_nand_flash_block(secter_num,ping_buf1,0);	
			 }
			secter_num +=32;
			if(secter_num>32*max_secter_num)
			 {                
			 	asm("\tnop");
			 	asm("\tnop");
			 	asm("\tnop");
			 	secter_num=init_secter_num;
               	break;
             }
     	 }
	 }
 
    Close_LED_Data();
    Close_LED_Traf();
    Close_LED_sign();
	cur_row=5;        
	cur_col=15;        
    LCD_pr_chars("Codecr_Stop_play ",17);
	stop_interrupt();   //stop receive & tranmit interrupt

}

void codec_play(void)
{
unsigned int sign_bit=0;
unsigned int sign_state=1;

 
   	enc_flag=0;  
   	secter_num=init_secter_num+32;          
   	input_flag = 1;                                              
   	count1 =0;
 
	Init_MCBSP_codec();
   	read_nand_flash_block(secter_num,ping_buf2,0);	
   	secter_num +=32;    
   	count1 =0;
//	init_tx_interrupt(); 

	MCBSP0_DXR1  =  0;	/* DRR1 = txdata */

	while(flag)     
	 {
 		mcbsp0_codec_tx_data(DEAL_TX());

	 	if(enc_flag)
	  	 {
			Disp_LED_sign((sign_state&0x01),sign_bit);
			sign_bit++;
			if(sign_bit==8)
			 {
			 	sign_bit=0;
 				sign_state =~sign_state;
			 } 

           	enc_flag=0;
			if(input_flag)
			 {
               	read_nand_flash_block(secter_num,ping_buf2,0);	
  			 }
			else
			 {
 				read_nand_flash_block(secter_num,ping_buf1,0);	
 			 }
			secter_num +=32;
			if(secter_num>32*max_secter_num)
			 {                
			 	asm("\tnop");
			 	asm("\tnop");
			 	asm("\tnop");
			 	secter_num=init_secter_num;
               	break;
             }
		 }
	 }
    Close_LED_Data();
    Close_LED_Traf();
    Close_LED_sign();
     
	cur_row=5;        
	cur_col=15;        
    LCD_pr_chars("Codecr_Stop_play ",17);
	stop_interrupt();   //stop receive & tranmit interrupt
}
 
void DEAL_RX(unsigned int i)
{
    if(rl_flag&1)
    {
  			if(input_flag)
  			{
	    		ping_buf2[count1] = i;         
	    		
	    	}
  			else    
	    	{
	    		ping_buf1[count1] = i;         
	    	}
  			count1 ++;
  			if(count1 ==0x2000)
  			{   
  				if(input_flag)
  				{
  					input_flag =0; 
   				 }
  				else
  				{
  				    input_flag =1;  
   				}
  				count1 =0;
  				enc_flag=1;  //writer data to nand_flash
  			}
  	}  
  	rl_flag++;
}
unsigned int DEAL_TX(void)
{
	unsigned int i;
 	
	if(input_flag)
  	{
		i= ping_buf2[count1] ;         
   	}
	else    
   	{
   		i= ping_buf1[count1] ;         
   	}	
	if(rl_flag&1)
    {
  		count1 ++;
  		if(count1 ==0x2000)
  		{   
  			if(input_flag)
  			{
  				input_flag =0; 
   		    }
  		    else
  		    {
  				input_flag =1;
   		    }
  			count1 =0;
  			enc_flag=1;  //writer data to nand_flash	
  		}
  	}  
  	rl_flag++;	
   	return i;
}

⌨️ 快捷键说明

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