📄 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 + -