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

📄 6-2.c

📁 《DSP嵌入式系统开发典型案例》此书的源代码
💻 C
字号:
void main () {
  initBiosConst();       							// 初始化DSP/BIOS
  CST_bssInit();         							// 初始化CST 内部数据段
  CertainBoardInit (BIOS_APPLICATION, EVM5406_118MHZ_MULT,2); 																		// 初始化PLL 时钟
  CSTAction_Init(&Ch0,BIOS_APPLICATION,MyCallback); // 初始化CST 固件
  CSL_init();            							// 初始化 CSL
  CertainPeriphInit(BIOS_APPLICATION,1); 			// 初始化EVM 片内外设
  MyInitialization();    							// 初始化用户设定参数
}

void MyInitialization()  
{
  UartPutString(&Ch0,"Voice echo toy\r\n");
  pVoiceLoopBuffer=CSTMemManager.allocate (IALG_EXTERNAL,VOICE_LOOP_BUF_SIZE,0); 
   											// 分配语音缓冲区
  VoiceBufIndex=VOICE_LOOP_BUF_SIZE;       		// 清除缓冲区内存
  while ( VoiceBufIndex )
    pVoiceLoopBuffer[--VoiceBufIndex]=0;
  TurnOff(1);  									// 禁止所有的标志,并进入待机状态
}

static void TurnOff(void) 
{
  MainState=ms_BEGIN;
  RingCounter=0;
  Timer=0;
  DefaultSettings();
 }

static void DefaultSettings()  
{
  SetRegister(srd_VAD, 0);       					// 禁止VAD 
  SetRegister(srd_AGC, 0);       					// 禁止AGC 
  SetRegister(srd_VOICE_GAIN,0); 					// 设置语音增益为0dB
  SetRegister(srd_VOICE_BPS,2);  					// G.726 16 kbps
  SetRegister(srd_ECAN,ecm_NLP); 					// 使能回音相消器
}

static void SetRegister(int InternalSReg, int Value) 
{
  tCSTAction Action;
  Action.ActionType=cat_SET_REGISTER;
  Action.Action.CSTConfigCommand.InternalSReg=InternalSReg;
  Action.Action.CSTConfigCommand.Value=Value;
  CSTAction(&Ch0, &Action);
}

void MyPeriodicThread() {
  CSTAction_Process(&Ch0);
  switch ( MainState )  {
    case ms_TRIPLE_RING:
      if ( 
   		DoStandardOperation(sot_OFF_HOOK,0) ) {
        TimerLimit=60*ONE_SECOND;
        SetMainState(ms_INIT_VOICE);
        UartPutString(&Ch0,"Voice Toy Started!\r\n");
      }
      break;
    case ms_INIT_VOICE:
      if ( DoStandardOperation(sot_TURNON_VOICE_RXTXDATA,0) ) {
        SetMainState(ms_VOICE);
        UartPutString(&Ch0,"(Re)Init voice\r\n");
      }
      break;
case ms_VOICE:
      if ( Timer>TimerLimit-ONE_SECOND ) {
        SetMainState(ms_JUST_HELP_MUSIC);
        UartPutString(&Ch0,"Minute without any DTMF commands\r\n");
      }
      break;
    case ms_JUST_HELP_MUSIC:
      if ( DoDTMFMusic() )
      {
        SetMainState(ms_INIT_VOICE);
        UartPutString(&Ch0,"Listen to the help " " (all available DTMF keys)\r\n");
      }
      break;
  }
}

static bool MyCallback (tCSTChannel* pChannel,
  tCSTExternalMsgEvent CSTExternalMsgEvent,int Data,int16 *pData)
{
  int ITemp;
  switch ( CSTExternalMsgEvent )  {
    case eme_PERIPH_DATA:
      if ( Data==cpe_RING ) {
        UartPutString(&Ch0,"Ring detected\r\n");
        if ( ++RingCounter>=2 )
          SetMainState(ms_TRIPLE_RING);
      }
      break;
    case eme_CPTD_DATA:
      if ( Data!=ICPTDDET_BUSY )
        break;
    case eme_AUTOTURNOFF_ALL:
      TurnOff();
      UartPutString(&Ch0,"Bye\r\n");
      break;
case eme_DTMF_DATA:
   switch ( Data ) {
        case '*': 										// 静音器
          ITemp=GetRegister(srd_VOICE_GAIN);
          if ( ITemp<30 ) ITemp++;
          SetRegister(srd_VOICE_GAIN,ITemp);
          break;
        case '#': 										// 扬声器
          ITemp=GetRegister(srd_VOICE_GAIN);
          if ( ITemp>0 ) ITemp--;
          SetRegister(srd_VOICE_GAIN,ITemp);
          break;
        case '1': 										// 禁止回音相消
          SetRegister(srd_ECAN,ecm_DISABLED); break;
        case '3': 										// 使能回音相消
          SetRegister(srd_ECAN,ecm_NLP); break;
        case '5': 										// 使能回音相消
          TurnOff();  break;
      }
      break; 

case eme_VOICE_DATA:
      												// 数据以字节存储在 pData
      if ( MainState==ms_VOICE )  {
        while( Data-- ) {
          ITemp=pVoiceLoopBuffer[VoiceBufIndex];
          pVoiceLoopBuffer[VoiceBufIndex++]=*pData++;
          SendVoiceData(&ITemp,1);
          if ( VoiceBufIndex>=VOICE_LOOP_BUF_SIZE )
            VoiceBufIndex=0;
        }
      }
      break;
    case eme_TICK:
      Timer+=Data;
      break;
  }
  return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -