⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readbook.c

📁 本方案主要介绍了利用凌阳SPCE061A精简开发板作为控制核心
💻 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 + -