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

📄 parelle.c.bak

📁 单片机控制语音压缩芯片(声码器)AMBE1000
💻 BAK
📖 第 1 页 / 共 2 页
字号:
  	TMOD=0x10;	// T1为16位计数器模式,作系统时钟发生器GATE C/-T M1M0
 	TH1=0xFC;	
  	TL1=0x17;	//* 24MHZ晶振下,定时初值为0.5ms

// ======= 中断初始化( 注意开中断! ) ======

	EA=1;		// 开所有中断 
	
//INT中断触发方式
//	IT0=1;		// INT0为边沿触发 
//	IT1=1;		// INT1为边沿触发 
//中断优先权
//	PX0=1;		// INT0为高优先权 
//	PX1=1;		// INT1为高优先权 
  	PT0=1;		// T1为高优先权   
//	PT1=1;		// T0为高优先权   
//开关中断
//	EX0=1; 		// 开INT0中断 
//	EX1=1; 		// 开INT1中断 
//	ET0=1;		// 开T0中断   
   	ET1=1;		// 开T1中断   
//开关定时器
//	TR0=0;		//  启动T0    
    	TR1=1;		//  启动T1   
*/
    	
}
void ambe_ini(void)
{

/*     =====  A/D D/A 选择配置表  ======
       	u律   A律  16位线性
C_SEL2   0     1      1
C_SEL1	 0     0      1
C_SEL0   0     0      1
       
       =====   信道接口配置表   ========
帧格式: 并行被动  并行主动   串行主动	串行被动
CH_SEL2     0         0  	 0         0
CH_SEL1     0	      0		 1	   1
CH_SEL0     0	      1          0         1 

非帧格式:串行被动1 串行被动2 串行被动3  串行被动4 
CH_SEL2     1         1  	 1         1
CH_SEL1     0	      0		 1	   1
CH_SEL0     0	      1          0         1      	 
	
	======  码率设置配置表 (单位bps) ========
	     2400bps	 |     3600bps     | 4000bps |            4800bps
	2400(0)  2350(50)|3600(0) 3350(250)|3750(250)|4800(0) 4550(250) 3600(1200) 2550(2250)
BP_SEL3	   0	      0  |  0        1     |   1     |  0       0         0         1
BP_SEL2	   0	      1  |  0        0     |   1     |  0       1         0	    0 
BP_SEL1	   0	      0  |  0        0     |   1     |  1       1         1	    0	 
BP_SEL0	   0	      1  |  1        1     |   0     |  1 	1         0         0
	 6400bps  |  7200bps  |       8000bps       |   9600bps
	4150(2250)| 4400(2800)|7750(250) 4650(3350) | 9600(0) 4850(4750) 
BP_SEL3	   1	  |     1     |  1         1        |    0      0       
BP_SEL2	   0	  |     0     |  1         1        |    1      1       
BP_SEL1	   1	  |     0     |  0         0        |    0      1      
BP_SEL0	   0	  |     1     |  0         1        |    0      0 	 

        ======     特殊功能配置表  ========
                功能		    使能     禁止
VAD_EN      语音活动检测      	     1        0
ECHO_EN      回波消除     	     1        0
SLEEP_EN     标准睡眠     	     1        0
SLIP_EN     时钟滑动控制     	     1        0
*/


//========================================
//========   AMBE-1000硬件初始化  ========
//========================================
//AD/DA芯片选择
/* 	AMBE_CSEL2 = 0;		// A律
	AMBE_CSEL1 = 0;
	AMBE_CSEL0 = 0;   
*/

/*	
        AMBE_CSEL2 = 0;		// u律
	AMBE_CSEL1 = 0;
	AMBE_CSEL0 = 0;	 

//信道接口选择
 
	AMBE_CHSEL2 = 0;	//并行被动模式 帧格式
	AMBE_CHSEL1 = 0;
	AMBE_CHSEL0 = 0;

//码率选择		
	AMBE_BPSSEL3 = 0;	//9600(0)bps
	AMBE_BPSSEL2 = 1;
	AMBE_BPSSEL1 = 0;
	AMBE_BPSSEL0 = 0;

//特殊功能选择
	AMBE_VAD_EN   = 1;
	AMBE_ECHO_EN  = 0;
	AMBE_SLEEP_EN = 0;
	AMBE_SLIP_EN  = 1;
	*/
	MC5480_UASEL = 1;       //u律
//	MC5480_UASEL = 0;       //A律
        AMBE_UASEL   = 0;       //AMBE1000 u律
	delay(100);
	
	//AMBE复位
	AMBE_RESET = 1;
	delay(100);
	AMBE_RESET = 0;
	delay(255);
	delay(255);
	delay(255);
	AMBE_RESET = 1;
	//读写选通复位
	AMBE_READ_STRB  = 1;
	AMBE_WRITE_STRB = 1;
	
/*========     AMBE1000初始化控制字  ==========*/
/*
//======码率设置
	order_data[HEADER_H] = 0x13;	//帧头标志
	order_data[HEADER_L] = 0xEC;
	order_data[ID] = RATE_CONFIG;	//帧ID
	order_data[CONTROL_0] = 0x00;	//控制字0
	
	order_data[CONTROL_1H] = 0xE4;	//控制字1  9600bps
	order_data[CONTROL_1L] = 0xC0;	//控制字1
	order_data[CONTROL_2H] = 0x00;	//控制字2
	order_data[CONTROL_2L] = 0x00;	//控制字2
	order_data[CONTROL_3H] = 0x00;	//控制字3
	order_data[CONTROL_3L] = 0x00;	//控制字3

//======音量设置
	order_data[HEADER_H] = 0x13;	//帧头标志
	order_data[HEADER_L] = 0xEC;
	order_data[ID] = VOLUME_CONFIG;	//帧ID
	order_data[CONTROL_0] = 0x00;	//控制字0
	
	order_data[CONTROL_1H] = 0x00;	//控制字1  输入增益0dB (默认)
	order_data[CONTROL_1L] = 0x80;	//控制字1  输出增益1.00
	
	order_data[CONTROL_2H] = 0x01;	//控制字2
	order_data[CONTROL_2L] = 0xF4;	//控制字2
	
	order_data[CONTROL_3H] = 0x00;	//控制字3
	order_data[CONTROL_3L] = 0x00;	//控制字3
	
//=====特殊功能设置
	order_data[HEADER_H] = 0x13;	//帧头标志
	order_data[HEADER_L] = 0xEC;
	order_data[ID] = SPECIAL_CONFIG;	//帧ID
	order_data[CONTROL_0] = 0x00;	//控制字0
	
	order_data[CONTROL_1H] = 0x00;	//控制字1  输入增益0dB (默认)
	order_data[CONTROL_1L] = 0x80;	//控制字1  输出增益1.00
	
	order_data[CONTROL_2H] = 0x01;	//控制字2
	order_data[CONTROL_2L] = 0xF4;	//控制字2
	
	order_data[CONTROL_3H] = 0x00;	//控制字3
	order_data[CONTROL_3L] = 0x00;	//控制字3
//=====标准睡眠模式
	data_buffer[HEADER_H] = 0x13;	//帧头标志
	data_buffer[HEADER_L] = 0xEC;
				
	data_buffer[ID] = POWER_CONFIG ; //帧ID
	data_buffer[CONTROL_0] = 0x00;	//控制字0
	
	data_buffer[CONTROL_1H] = 0x00;	//控制字1  输入增益0dB (默认)
	data_buffer[CONTROL_1L] = 0x00;	//控制字1  输出增益1.00
	
	data_buffer[CONTROL_2H] = 0x00;	//控制字2
	data_buffer[CONTROL_2L] = 0x00;	//控制字2
	
	data_buffer[CONTROL_3H] = 0x00;	//控制字3
	data_buffer[CONTROL_3L] = 0x00;	//控制字3     
//============唤醒
	data_buffer[HEADER_H] = 0x13;	//帧头标志
	data_buffer[HEADER_L] = 0xEC;
				
	data_buffer[ID] = WAKE_UP ; //帧ID
	data_buffer[CONTROL_0] = 0x20;	//控制字0
	
	data_buffer[CONTROL_1H] = 0x00;	//控制字1  输入增益0dB (默认)
	data_buffer[CONTROL_1L] = 0x00;	//控制字1  输出增益1.00
	
	data_buffer[CONTROL_2H] = 0x00;	//控制字2
	data_buffer[CONTROL_2L] = 0x00;	//控制字2
	
	data_buffer[CONTROL_3H] = 0x00;	//控制字3
	data_buffer[CONTROL_3L] = 0x00;	//控制字3     
*/	
}

//====================================================
//===================并行输入输出=====================
//====================================================

void parellel_read(uchar input_data[])
{
	uchar i;
	for(i=0;i<34;i++)
	{
		AMBE_READ_STRB = 0; 	//开始读入数据
		input_data[i] = P1;	//从AMBE1000读入数据到缓冲区
		AMBE_READ_STRB = 1;
		
	}
	delay(10);
}		


void parellel_write(uchar output_data[])
{		
	uchar i;
	for(i=0;i<34;i++)
	{
		AMBE_WRITE_STRB = 0; 		//开始写入数据
		P1 = output_data[i];		//从缓冲区写数据到AMBE1000
		AMBE_WRITE_STRB = 1;
		
	}
	delay(10);
}     

/*===============================================================================*/
/*  			         主程序区    			    		 */
/*===============================================================================*/
void main(void)		/*---   main函数 ----  */
{
	uchar data  i = 0,
		    j = 0,
//		    k = 1,		    
	      	    counter1 = 0,
	            counter2 = 0,
	            counter3 = 0;
	uchar  data  data_buffer[34];	//并行数据交换区

//系统初始化
	system_ini();			// 调用系统初始化程序
//AMBE1000初始化
	ambe_ini();
//主循环
	while(1)		
	{	
		
		
		if(AMBE_EPR == 1)  	//编码包准备好,AMBE可以向外发送数据
		{
		      parellel_read( data_buffer );	
		          
		      //指示灯闪烁
		      
		      counter1++;
		      if (counter1 >= 20)
		      {
			 
			  counter1 = 0;
			   LED1 = ~LED1;
		      	      
		    	  if ( (data_buffer[0] == 0x13) && (data_buffer[1]== 0xEC))
		     	   {
			  		LED3 = ~LED3;
 		           } 
 			 /*  
			  if ( (data_buffer[3]&0xF0)==0x00 )
			  {
					LED2=~LED2;
			  }
			  if ( (data_buffer[3]&0x0F)==0x00 )
                          {
					LED3=~LED3;
			  }  
		     */	
			 
			
		       } 
		      
			
			 
		 }//if(EPR) end	
	
		if( AMBE_DPE == 1 )//等待解码包空,AMBE可以接收数据
		{
			parellel_write( data_buffer );
			counter2++;
		      if (counter2 >= 20)
		      {
			 
			  counter2 = 0;
			   LED2 = ~LED2;
	               }
		}
      		      
		
	}//while end
}//main end

⌨️ 快捷键说明

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