?? main.c
字號:
//*******************************************************************************************/
// 名稱: dvr
// 來源:《SPCE061A單片機(jī)原理及應(yīng)用技術(shù)》,"第七章程序7_10"
// 描述: DVR有兩種錄放音方式,即自動方式和非自動方式,我們可以通
// 過改變Mode的值來切換這兩種方式:當(dāng)Mode=0時(shí)以非自動方式錄放音,
// 當(dāng)Mode=1時(shí),以自動方式錄放音,而且中斷中分別用FIQ中斷實(shí)現(xiàn)語音的
// 播放,用IRQ1中斷實(shí)現(xiàn)語音的錄制。這里我們給出非自動方式的例子:
// 日期: 2002/12/11
//*******************************************************************************************/
#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
//===============================================================================================
// 函數(shù): main()
// 描述:主函數(shù)
//============================================================================================
int main()
{
int Ret=0, Mode;
int Addr, Addr_Save;
Mode == Manual; //采用手動方式
SACM_DVR_Initial(Manual); //手動方式初始化
Addr = 0; //定義語音存放的首址變量
InitWriteSRAM();
SACM_DVR_InitEncoder(RceMonitorOn); //開始對A2000的語音數(shù)據(jù)以非自動方式編碼
while(Addr<SRAM_Size) //判斷存儲語音的地址是否超出存儲單元的大小
{
SACM_DVR_Encode (); //獲取數(shù)據(jù)并編碼
if(SACM_DVR_TestQueue()!= Empty)
{
Ret=SACM_DVR_FetchQueue(); // 從隊(duì)列中獲取數(shù)據(jù)
WriteSRAM(Addr,Ret); // 存入用戶定義的存儲單元區(qū)
Addr+=2; //兩個(gè)8位SRAM存儲一個(gè)16位數(shù)據(jù)
}
}
SACM_DVR_StopEncoder();
SACM_DVR_Initial(Manual); //非自動方式播放的初始化
InitReadSRAM();
Addr=0;
SACM_DVR_InitDecoder(DAC1); //開始對A2000的語音數(shù)據(jù)以非自動方式解碼
while(1)
{
if(SACM_DVR_TestQueue()!=Full)
{
Ret =ReadSRAM(Addr);
SACM_DVR_FillQueue(Ret);
Addr+=2;
}
if(Addr<SRAM_Size) //如果該段語音播完,即到達(dá)末地址時(shí)
SACM_DVR_Decode (); //獲取資源并進(jìn)行解碼,再通過中斷服務(wù)子程序送入DAC通道播放
else
SACM_DVR_StopDecoder(); //否則,停止播放
}
}
//*******************************************************************************************/
// void SACM_ DVR _Initial(int Init_Index); 來自于sacmv25.lib,API接口函數(shù)。SACM_ DVR語音播放
// 之前的初始化:設(shè)置中斷源、定時(shí)器以及播放方式(自動、手動);Init_Index=0 表示手動方式;
// Init_Index=1 則表示自動方式,無返回值。
// void SACM_DVR_Encode(void);來自于acmv25.lib,API接口函數(shù)。開始以自動方式錄制聲音資料到外接
// SRAM中。無入口出口參數(shù)。
// void SACM_DVR_InitDecode(int Channel); 來自于sacmv25.lib,API接口函數(shù)。開始對SACM_DVR語音
// 資料以非自動方式(編程控制)進(jìn)行譯碼。Channel=1,2,3;分別表示使用DAC1、DAC2信道以及
// DAC1和DAC2雙通道;無返回值。
// SACM_DVR_StopDecoder(); 來自于sacmv25.lib,API接口函數(shù)。無出口入口參數(shù)。
// SP_GetResource(Addr);來自于Hardware.asm,F_SP_GetCh.從資源文件里獲取一個(gè)字型語音數(shù)據(jù)
// main.c 結(jié)束
//*******************************************************************************************/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -