📄 main.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
// 功能描述: 利用SPCE061A的IO口扩展一块HM628128A,完成录、放音功能
//
// 文件来源: 《SPCE061单片机原理及应用技术》第八章 凌阳单片机应用及开发技术,第334页
// IDE环境: SUNPLUS u'nSPTM IDE 1.8.0(or later)
//
// 涉及的库: CMacro.lib/sacmv26e.lib
//
// 组成文件: main.c
// isr.asm/key.asm/sram.asm/hardware.asm
// DVR.h/hardware.inc
// 日期: 2002-6-12
//===========================================================================================
// 程序名称: main.c
// 功能: 利用SPCE061A的IO口扩展一块HM628128A,完成录、放音功能
// 库函数: sacmv26e.lib库
// 日期: 2003/05/20
//===========================================================================
#include "dvr.h"
#define SRAM_Size 0x1ffff-4 //HM628128A容量
#define Stop 0
#define Record 1
#define Play 2
#define Full 1
#define Empty 2
#define DAC1 1 // DAC output
#define DAC2 2
#define RceMonitorOff 0
#define RceMonitorOn 1
#define Manual 0
#define Auto 1
unsigned int Ret;
unsigned int Key, Mode, Status;
unsigned long int Addr, Addr_Save;
unsigned long int Addr_Long;
unsigned long int yxh=0;
int main()
{
Mode = Manual; //手工方式
System_Initial();
SACM_DVR_Initial(Mode); //DVR初始化
Status = Stop;
while(1)
{
Key=KeyScan();
if(Key>0)
{
switch(Key)
{
case 0x00:
break;
case 0x01: // 录音键
Status = Record;
Addr = 0;
SP_InitWriteSRAM(); //写初始化
SACM_DVR_InitQueue();
SACM_DVR_InitEncoder(RceMonitorOn);
break;
case 0x02: //停止键
switch(Status)
{
case Record:
SACM_DVR_Stop();
while(SACM_DVR_TestQueue() != Empty)
{
Ret = SACM_DVR_FetchQueue();
SP_WriteSRAM(Addr,Ret); //将队列中的数据写入HM628128A
Addr += 2;
}
SP_WriteSRAM(Addr,0xFFFF); //写结束标志----连续三字节FF
Addr += 2;
SP_WriteSRAM(Addr,0x00FF);
break;
case Play:
SACM_DVR_Stop();
break;
}
Status = Stop;
break;
case 0x04: //播放键
SACM_DVR_Stop();
if(Status == Record)//如果处于录音状态,执行关闭录音处理
{
while(SACM_DVR_TestQueue() != Empty)
{
Ret = SACM_DVR_FetchQueue();
SP_WriteSRAM(Addr,Ret);
Addr += 2;
}
SP_WriteSRAM(Addr,0xFFFF);
Addr += 2;
SP_WriteSRAM(Addr,0x00FF);
}
Status = Play; //置为播放模式
Addr = 0;
SP_InitReadSRAM(); //读初始化
SACM_DVR_InitQueue();
while(SACM_DVR_TestQueue() != Full)
{
Ret = SP_ReadSRAM(Addr);
SACM_DVR_FillQueue(Ret);
Addr += 2;
}
SACM_DVR_InitDecoder(DAC1+DAC2);
break;
default:
break;
} // end of switch(Key)
}// end if(key>0)
switch(Status)
{
case Record:
if(Addr < SRAM_Size)
{
SACM_DVR_Encode();
if(SACM_DVR_TestQueue() != Empty)
{
Ret = SACM_DVR_FetchQueue();
SP_WriteSRAM(Addr,Ret);
Addr += 2;
}
}
break;
case Play:
if(SACM_DVR_Status() & 0x01)
{
if(SACM_DVR_TestQueue() != Full)
{
Ret = SP_ReadSRAM(Addr);
SACM_DVR_FillQueue(Ret);
Addr += 2;
}
}
else
{
if(SACM_DVR_TestQueue() == Empty)
{
SACM_DVR_Stop();
Status = Stop;
}
}
SACM_DVR_Decode();
break;
case Stop:
break;
}// end of switch(Status)
}// end of while(1)
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -