?? readbook.c
字號:
//==========================================================================
//文件名稱:Readbook.c
//功能:朗讀語音
//參數:無
//返回值:無
//日期:2005.04.07
//===========================================================================
#include "hardware.h"
#include "A2000.h"
#define SPEECH_1 0
#define DAC1 1
#define DAC2 2
#define Ramp_UpDn_Off 0
#define Ramp_UpDn_On 3
#define Manual 0
#define Auto 1
#define Full 1
#define Empty 2
#define Mode 1
#define ROOT_ADDR 196608
#define P_Watchdog_Clear (unsigned int *)Port_Watchdog_Clear
#define P_SystemClock (unsigned int *)Port_SystemClock
unsigned int i;
unsigned int Page;
unsigned int Block;
unsigned int Column;
unsigned int Ret;
long int Addr;
long int Addr_end;
extern int KeyValue;
extern int pno,bno;
unsigned long Flash_ReadDWord(long Addr);
unsigned SearchSnd(unsigned uiBookIdx ,unsigned uiPageIdx,long *Text_StartAddr,long *Text_EndAddr,long *Voice_StartAddr,long *Voice_EndAddr);
//=====================================================================================
//函數名稱:Readbook()
//功能:朗讀當前也的內容
//日期:2005.04.06
//=====================================================================================
Readbook()
{
unsigned int Addr_flash;
long Text_StartAddr,Text_EndAddr,Voice_StartAddr,Voice_EndAddr;
unsigned int data;
//-----------------------------------------------------------------------
//初始化
//-----------------------------------------------------------------------
System_Initial();
InitSignalLine();
SP_InitSamsungFlash();
//-----------------------------------------------------------------------
SearchSnd(bno,pno,&Text_StartAddr,&Text_EndAddr,&Voice_StartAddr,&Voice_EndAddr);
KeyValue==0;
Addr = Voice_StartAddr - 2;
Addr_end = Voice_EndAddr - 2;
Block = (unsigned int)(Addr>>14); //
Page = (unsigned int)((Addr&0x3fff)>>9); //
Column = (unsigned int)(Addr&0x1ff); //根據地址計算出塊頁和當前頁內地址
SP_InitReadSamsungFlash_1(Column,Page,Block);
SACM_A2000_Initial(0); //非自動方式播放的初始化
SACM_A2000_InitDecoder(DAC1); //開始對A2000的語音數據以非自動方式解碼
while(SACM_A2000_TestQueue()!=Full) //測試并獲取語音隊列的狀態
{
Ret = Flash_ReadWord(Addr); //從flash讀出數據
SACM_A2000_FillQueue(Ret); //獲取語音編碼數據并填入語音隊列等候解碼
Addr += 2;
if((Addr&0x3fff)==0)
{
Block++;
Page = 0;
Column = 0;
SP_InitReadSamsungFlash_1(Column,Page,Block); //當一塊讀完時,換塊讀取資源
}
}
while(1)
{
if(SACM_A2000_TestQueue()!=Full)
{
Ret = Flash_ReadWord(Addr);
SACM_A2000_FillQueue(Ret);
Addr += 2;
if((Addr&0x3fff)==0)
{
Block++;
Page = 0;
Column = 0;
SP_StopReadSamsungFlash();
SP_InitReadSamsungFlash_1(Column,Page,Block);
}
}
if(KeyValue!=0&&KeyValue!=0x1000) //是否有鍵值按下
{
SACM_A2000_Stop(); //是,打斷停止播放
break;
}
if(Addr< Addr_end) //如果該段語音未播完,即未到達末地址時
{
SACM_A2000_Decoder(); //獲取資源并進行解碼,再通過中斷服務子程序送入DAC通道播放
}
else
{
SACM_A2000_Stop(); //否則,停止播放
}
Clear_Watch_Dog(); //清看門狗
}
for(i=0;i<0x0fff;i++)
{
*P_Watchdog_Clear = 0x0001;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -