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

📄 main.c

📁 本文以举例的方式从硬件和软件原理上阐述了如何运用SPBA01B对MCU进行IO扩展、总线扩展和级联使用.
💻 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.
//
//==============================================================

//============================================================
//  工程名称:   Record.spj
//  功能描述:    利用KF1208进行语音录放
//  IDE环境:   SUNPLUS u'nSPTM  IDE 1.8.4(or later)
//
//  涉及的库:	(a) C-Lib:  (CMacroB100.lib);
//				(b) sacmv26e.lib
//
//  组成文件:
//    			 main.c
//				 hardware.asm
//     			 isr.asm
//     			 SamsungFlashV11.asm
//     			 sram.asm
//     			 system.asm
//     			 hardware.inc
//     			 hardware.h
//     			 key.asm
//     			 key.inc
//				 dvr.h
//
//	Note:
//  1. 按键配置:       			IOA8 : 录音  
//                              IOA9 : 停止  
//                              IOA10: 播放  
//  2. 使用IOA0~IOA7作为数据IO 0~7, IOB0~IOB5 作为控制信号线
//
//  日期:        2004-4-12
//===============================================
#include "hardware.h"
#include "dvr.h"
#define	C_SamsungflashSize	0x4000000-54  //(50(队列长度)+4(FFFF 00FF))
#define MaxPage				0x1FFFF
#define MaxAddr				0x07FF

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

#define	RceMonitorOff	0
#define	RceMonitorOn	1

	
int main()
{
		int Ret;	 	
		int Key,Status;
		int Addr;    	            								// (0~512)
		long int Page;    		 									// (0~0x1FFFF)
		int Block,CurrBlock; 										// (0~1024)
	
		// 系统初始化
		//--------------------------------               
		System_Initial();			
  		SACM_DVR_Initial(Manual);
		InitSignalLine();  
	    SP_InitSamsungFlash();
		//--------------------------------               
	    
		Addr=0;
		Status = Stop;  
		while(1)
		{  
			Key = SP_GetCh();
			switch(Key){
				case 0x0000:
					break;
				case 0x0100: 										// 录音键				
			        if (Status == Record) 
			        {
		               SACM_DVR_Stop();
	                   SP_StopWriteSamsungFlash();
                    }
					Status = Record;
					
                   // Samsung Flash 初始化
                   //--------------------------------               
                   SP_InitSamsungFlash();
//			       SP_SamsungMassErase();   
SP_SamsungEraseBlock(0);     
		           SP_InitWriteSamsungFlash();
		           //--------------------------------  		             
		             
                    // 初始化 DVR
					SACM_DVR_InitQueue();
					SACM_DVR_InitEncoder(RceMonitorOff);
					break;
				case 0x0200: 										// 停止键			
					switch(Status)
					{
						case Record:    							// 还在录音
							SACM_DVR_Stop();
							while(SACM_DVR_TestQueue() != Empty )
							{  
								Ret = SACM_DVR_FetchQueue();		// 从队列中取数据
								SP_FillSamsungFlash(Ret);			// 写到Samsung Flash中
							}
//				            SP_StopWriteSamsungFlash();
							break;
						case Play:
							SACM_DVR_Stop();
							 SP_StopReadSamsungFlash();							 
							break;
					}		
					Status = Stop;
					break;
				case 0x0400: 										// 播放键				
					SP_RampUpDAC1();
					SP_RampUpDAC2();
					SACM_DVR_Stop();					
					if(Status == Record)
					{
						while(SACM_DVR_TestQueue() != Empty)
						{	
							Ret = SACM_DVR_FetchQueue();			// 从队列中取数据
							SP_FillSamsungFlash(Ret);				// 写到Samsung Flash中
						}
				        SP_StopWriteSamsungFlash();				
					}									
					Status = Play;
                    SP_InitReadSamsungFlash();   
					SACM_DVR_InitQueue();
					Status = Play;
					while(SACM_DVR_TestQueue() != Full)
					{	
						Ret=SP_ExtractSamsungFlash();				// 从Samsung Flash取数据
						SACM_DVR_FillQueue(Ret);					// 写到队列中
					}
					SACM_DVR_InitDecoder(DAC1+DAC2);										
					break;
				default:
					break;
			}
		
			switch(Status){	
				case Record:
				    Page= SP_GetPage();
				    Addr= SP_GetColAddr();
					if(Page<MaxPage-2 )
					{					
						SACM_DVR_Encode();				    		// 取数解码
						if(SACM_DVR_TestQueue() != Empty)
						{	
							Ret = SACM_DVR_FetchQueue();			// 从队列中取数据
							SP_FillSamsungFlash(Ret);				// 写到Samsung Flash中
						    Page= SP_GetPage();	
						    Addr= SP_GetColAddr();				
						}	
				
					}
					else
					{
				    	SACM_DVR_Stop();
						while(SACM_DVR_TestQueue() != Empty )
						{
							Ret = SACM_DVR_FetchQueue();			// 从队列中取数据
							SP_FillSamsungFlash(Ret);				// 写到Samsung Flash中
						}
				        SP_StopWriteSamsungFlash();
         				Status = Stop;
					}
					break;
				case Play:
					if(SACM_DVR_Status()&0x01)              		// 检查是否还在录音
					{
						if(SACM_DVR_TestQueue() != Full)
						{
							Ret=SP_ExtractSamsungFlash();			// 从Samsung Flash取数据
							SACM_DVR_FillQueue(Ret);				// 写到队列中
						}				
					}
				   	else
				   	{
						SACM_DVR_Stop();
						SP_StopReadSamsungFlash();
						SP_RampDnDAC1();
						SP_RampDnDAC2();                            						
						Status = Stop;	
					}	
			    	SACM_DVR_Decode();				
					break;
					
				case Stop:					
					break;	
			}		
			System_ServiceLoop();									// 键盘扫描
		}	 
  return 0;
}

⌨️ 快捷键说明

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