?? main.c
字號:
//======================================================
// The information contained herein is the exclusive property of
// Sunnnorth Technology Co. And shall not be distributed, reproduced,
// or disclosed in whole in part without prior written permission.
// (C) COPYRIGHT 2003 SUNNORTH TECHNOLOGY CO.
// ALL RIGHTS RESERVED
// The entire notice above must be reproduced on all authorized copies.
//========================================================
//============================================================
// 工程名稱:DVR_FLASH.scs
// 功能描述:凌陽A2000語音播放方式實現語音錄放,語音存儲空間使用SPCE061A內置的32K的FLASH空間。
// KEY1:語音錄制按鍵,按下該鍵,開始錄音。
// KEY2:錄音停止按鍵,按下該鍵,錄音停止。
// KEY3:錄音播放按鍵,按下該鍵,播放錄音。
// 文件來源:電子競賽專集---語音錄放模塊
//
// IDE環(huán)境: SUNPLUS u'nSPTM IDE 1.8.0
//
// 涉及的庫:
// SACMV25.lib
// 組成文件:
// hardware.asm
// key.asm
// isr.asm
// hardware.h
// dvr.h
//
// 日期: 2003-7-7
//===============================================
//============================================================
// 文件名稱:main.c
// 實現功能:利用s480格式鍵控語音播放
// 日期: 2003/7/7
//============================================================
#include "hardware.h"
#include "dvr.h"
#define C_flashSize 0xf000
#define sector 0xa000 //定義FLASH寫的起始地址
#define Stop 0
#define Record 1
#define Play 2
#define Full 1
#define Empty 2
#define DAC1 1
#define DAC2 2
#define RceMonitorOff 0
#define RceMonitorOn 1
#define Manual 0
#define Auto 1
unsigned int Status;
unsigned int Ret;
unsigned int Key;
unsigned int Addr;//, Save_Addr
//*********************************************************//
//函數:main()
//描述:主函數
//*********************************************************//
int main()
{
System_Initial();
SACM_DVR_Initial(Manual);
Status = Stop;
while(1)
{
Key = SP_GetCh(); //獲取鍵值
switch(Key)
{
case 0x0001: //KEY1
//**********************錄音(record)***********************//
//*********************************************************//
for(Addr=sector;Addr<0xf000;Addr+=256)
{
Clear_WatchDog();
F_FlashErase(Addr);
}
Status = Record;
Addr=sector;
// DVR初始化
SACM_DVR_InitQueue();
SACM_DVR_InitEncoder(RceMonitorOn);
break;
case 0x0002: // KEY2
//**********************停止(stop)*************************//
//*********************************************************//
switch(Status)
{
case Record: // 仍在錄音
SACM_DVR_Stop();
while(SACM_DVR_TestQueue() != Empty )
{
Ret = SACM_DVR_FetchQueue();// 從隊列中取數
F_FlashWrite1Word(Addr,Ret);
Addr += 1;
}
break;
case Play:
SACM_DVR_Stop();
break;
default:
break;
}
Status = Stop;
break;
case 0x0004: //KEY3
//************************回放(playback)*******************//
//*********************************************************//
SACM_DVR_Stop();
if(Status == Record)
{
while(SACM_DVR_TestQueue() != Empty)
{
Ret = SACM_DVR_FetchQueue();// Put remain dat to Queue
F_FlashWrite1Word(Addr,Ret);// save to User Storage
Addr+= 1;
}
}
// Save_Addr=Addr;
Status = Play;
Addr = sector; //播放的首地址
SACM_DVR_InitQueue();
while(SACM_DVR_TestQueue() != Full) //如果隊列不滿則繼續(xù)填
{
Ret=F_FlashRead(Addr); //從flash中讀出數據
SACM_DVR_FillQueue(Ret); //填隊列
Addr+= 1;
}
SACM_DVR_InitDecoder(DAC1+DAC2);
break;
default:
break;
}
//************************狀態(tài)判斷處理*********************//
//*********************************************************//
switch(Status)
{
case Record:
//**********************停止(stop)*************************//
//*********************************************************//
if(Addr< C_flashSize)
{
SACM_DVR_Encode(); // 取數據并編碼
if(SACM_DVR_TestQueue() != Empty) //如果隊列沒空則將數據保存
{
Ret = SACM_DVR_FetchQueue();//從隊列中取數
F_FlashWrite1Word(Addr,Ret);//將數據寫入flash
Addr+= 1;
}
}
else
{
SACM_DVR_Stop();
while(SACM_DVR_TestQueue() != Empty )
{
Ret = SACM_DVR_FetchQueue();
F_FlashWrite1Word(Addr,Ret);
Addr+= 1;
}
Status = Stop;
}
break;
case Play:
//************************回放(playback)*******************//
//*********************************************************//
if(SACM_DVR_Status()&0x01) //是否正在播放
{
if(SACM_DVR_TestQueue() != Full)
{
Ret=F_FlashRead(Addr); //讀出flash中的數據
SACM_DVR_FillQueue(Ret); // 填隊列
Addr += 1;
}
}
else
{
SACM_DVR_Stop();
Status = Stop; }
SACM_DVR_Decode(); //解碼
break;
case Stop:
break;
default:
break;
}
System_ServiceLoop(); //鍵盤掃描
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -