📄 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.
//
//==============================================================
//============================================================
// 工程名称: 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 + -