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

📄 rap.c

📁 spce061单片机的一些程序!C语言和汇编语言都有
💻 C
字号:
//======================================================================================
//
//        The information contained herein is the exclusive property of
//      Sunplus Technology Co. And shall not be distributed, reproduced,
//      or disclosed in whole in part without prior written permission.
//
//            (C) COPYRIGHT 2001   SUNPLUS TECHNOLOGY CO.
//                           ALL RIGHTS RESERVED
//
//    The entire notice above must be reproduced on all authorized copies.
//
//========================================================================================
//  工程名称: dvr.spj
//  功能描述:  SACM-DVR非自动方式录放音
//				
//  文件来源: 《SPCE061单片机原理及应用技术》第七章 凌阳音频压缩算法,第295页
//  IDE环境:  	SUNPLUS u'nSPTM  IDE 1.8.0(or later)
//
//  涉及的库:	CMacro.lib/sacmv25.lib
//
//  组成文件:	rap.c
//    	 		ISR.asm/hardware.asm
//	            hardware.inc/dvr.h
//     	
//  日期:       2002-6-12
//===========================================================================================
#define Manual	0
#define	Auto	1

#define	SRAM_Size	0xffff-2

#define	Stop	0
#define	Record	1
#define Play	2	

#define	RceMonitorOff	0
#define	RceMonitorOn	1

#define	DAC1	1	
#define	DAC2	2

#define	Full	1
#define	Empty	2

int main()
{
	
	int Ret=0, Mode;
	int Addr, Addr_Save; 
	
	Mode == Manual;							//采用手动方式
 	
		 	
  	SACM_DVR_Initial(Manual);				//手动方式初始化
    Addr = 0;                              	//定义语音存放的首址变量
    InitWriteSRAM();    
   	SACM_DVR_InitEncoder(RceMonitorOn);		//开始对A2000的语音数据以非自动方式编码	
					 
	while(Addr<SRAM_Size)					//判断存储语音的地址是否超出存储单元的大小
	{	
		SACM_DVR_Encode ();	                //获取数据并编码
		if(SACM_DVR_TestQueue()!= Empty)
		{
				Ret=SACM_DVR_FetchQueue();	// 从队列中获取数据
				WriteSRAM(Addr,Ret);		// 存入用户定义的存储单元区 
				Addr+=2;					//两个8位SRAM存储一个16位数据
		}
			
	}					 
				SACM_DVR_StopEncoder();
	 						 
	
	SACM_DVR_Initial(Manual);				//非自动方式播放的初始化
	
	InitReadSRAM();
 
	Addr=0;
    
    SACM_DVR_InitDecoder(DAC1);				//开始对A2000的语音数据以非自动方式解码
  	

     while(1)
	{
	if(SACM_DVR_TestQueue()!=Full)			//测试并获取语音队列的状态
		{
			Ret =ReadSRAM(Addr);   			//从存储区里获取一个字型语音资料
	        SACM_DVR_FillQueue(Ret);        //获取语音编码资料并填入语音队列等候译码
	        Addr+=2;
    	}
 
         if(Addr<SRAM_Size)				  	//如果该段语音播完,即到达末地址时
         SACM_DVR_Decode ();				//获取资源并进行解码,再通过中断服务子程序送入DAC通道播放
         else
         SACM_DVR_StopDecoder();			//否则,停止播放
     }  
  }
			 
 

⌨️ 快捷键说明

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