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

📄 recorder.c

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 C
字号:
/****************************************************************
**                                                              *
**  FILE         :  Recorder.C                                  *
**                                                              *
**  By : Cyb 2006.11.29                                          *
****************************************************************/
#include "includes.h"
#include "errcode.h"
#include "errtask.h"
#include "message.h"
#include "tools.h"
#include "public.h"
#include "timetask.h"
#include "sensor.h"
#include "uart_drv.h"
#include "recorder.h"
#include "audio.h"
#include "portdrv.h"
#include "hardware.h"


/*
********************************************************************************
* 录音过程描述:可以有两种办法启动录音,第一种是通过录音菜单激活,另一种是录音板将
* REC_CON引脚拉低3秒以上。录音启动后,录音板通过REC_INT引脚的负脉冲控制语音段录音,
* 相邻两个负脉冲之间为一语音段。如检测到段停止脉冲后,在15秒内未收到新的录音脉冲,
* 则认为本次录音结束。车台通过快闪绿色指示灯指示录音启动。
********************************************************************************
*/

/*
********************************************************************************
* define config parameters
********************************************************************************
*/
#define PERIOD_MONITOR1                     SECOND, 15     /* 如果收到段停止脉冲后,在15秒内未收到录音脉冲,则认为本次录音结束 */
#define PERIOD_MONITOR2                     SECOND, 120    /* 每一段语音段的时间不得超过2分钟 */
#define PERIOD_MONITOR3                     MINUTE, 3      /* 启动录音后,如3分钟内未检测到录音信号,则终止录音 */
#define _RUN                                0x01            /* 表示处于录音状态 */
#define _REC                                0x02            /* 表示正在录音中 */

#define LEDPARA_INDICATE1                   PORT_LEDGREEN,  15,  1,  1, 0
#define LEDPARA_INDICATE2                   PORT_LEDGREEN,  2,   1,  1, 0

/*
********************************************************************************
* define module variants
********************************************************************************
*/
static INT8U status, ct;
static TMR_TSK *monitortmr;



static void MonitorTmrProc(void)
{
    StopTmr(monitortmr);
    if (status & _RUN) {
        status &= ~(_RUN | _REC);
        StopAudioOP();
#if DEBUG_UARTNo_RECORD <= 1               
        PrintFromUART(DEBUG_UARTNo_RECORD, "长时间无录音信号,退出录音!\n");
#endif
        if (ct > 0) 
        {
            RecPara.recnum = ct;
            StorePubPara(RECPARA_);
        }
    }
}

static void PrepareRecorder(void)
{
    ct = 0;
    status |= _RUN;
    status &= ~_REC;
    StopTmr(monitortmr);
    PrepareRecordAudio();                       /* 通知底层语音芯片进入录音准备 */
}

static void StartRecorder(void)
{
    if (status & _RUN) {
        ct++;
        status |= _REC;
        RecordNextAudio();                      /* 开始录音 */
        StartFlashPort(LEDPARA_INDICATE2);      /* 绿色指示灯急闪指示 */
        StartTmr(monitortmr, PERIOD_MONITOR2);
    }
}

static void StopRecorder(void)
{
    if (status & _RUN) 
    {
        status &= ~_REC;
        StopAudioOP();                          /* 停止录音 */
        StartTmr(monitortmr, PERIOD_MONITOR1);
      
    }
}

void ExitRecorder(void)
{
      PrintFromUART(1, "录音结束!\n"); 
}

static void InitProc(void)
{
     #if USEIRQ2 >1
     PIO_GetIntStatus(0);                   /* 清除中断标志 */
     PIO_EnableInt(PORT_RECINT);            /* 使能录音中断 */
     #else
     AIC_Int_Enable(AT91C_ID_IRQ2);
     #endif
     
     PrepareRecorder();
      
     StartFlashPort(LEDPARA_INDICATE1);          /* 绿色指示灯急闪指示 */
     StartTmr(monitortmr, PERIOD_MONITOR3);
}



static void CreateRecorder(void)
{
     InitProc();

}

void ActivateRecorder(void)
{
#if DEBUG_UARTNo_RECORD <=1     
      PrintFromUART(DEBUG_UARTNo_RECORD, "录音准备!\n");
#endif
      CreateRecorder();
}

void IntToRecorder(void)                           /* 中断信号开始录音*/
{
    
    
    if (status & _RUN) 
    {
        if (status & _REC) 
        {
             StopRecorder();
#if DEBUG_UARTNo_RECORD <=1
             PrintFromUART(DEBUG_UARTNo_RECORD, "\n段");
             SendFromUART_HEX(DEBUG_UARTNo_RECORD,ct);
             PrintFromUART(DEBUG_UARTNo_RECORD, "完成\n");
#endif 
        } 
        else 
        {
#if DEBUG_UARTNo_RECORD <=1        
             PrintFromUART(DEBUG_UARTNo_RECORD, "\n开始录音....");
#endif 
             StartRecorder();
        }
    }   
}

void InitRecorder(void)
{
    
    status = 0;
    #if USEIRQ2 >1
    PIO_DisableInt(PORT_RECINT);                   /* 禁止录音中断 */
    #else
    AIC_Int_Disable(AT91C_ID_IRQ2);
    #endif
    monitortmr = CreateTimer(MonitorTmrProc,0);
}

#if USEIRQ2 >1
void InitRECInt(void)
{
     INT32U mode;
     INT32U mask;
     
     mode = PIO_MODE_INPUT | PIO_MODE_FILTER_ON | PIO_MODE_INPUT_IRQ_ON;
     mask = PORT_RECINT;
     InitPIO_Int(mask,mode);
     
}
#endif

⌨️ 快捷键说明

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