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

📄 dvr.c

📁 电压控制程序,符合各种设备需要,核心程序,IBm专属
💻 C
字号:
//========================================================
//	文件名称:	dvr.c
//	功能描述:	语音录制与播放
//	维护记录:	2005-09-12	v1.0
//========================================================

#include "dvr.h"
#include "flash.h"

#define P_Watchdog_Clear	(unsigned int *)0x7012

#define START_ADDR			0xA000			//定义录音开始地址
#define END_ADDR			0xBFFF			//定义录音结束地址

//========================================================
//	语法格式:	void Record(void)
//	实现功能:	语音录制
//	参数:		无
//	返回值:	无
//========================================================

void Record(void)
{
	unsigned int uiAddr;
	unsigned int uiStatus,uiRet;
	
	for(uiAddr = START_ADDR;uiAddr <= END_ADDR;uiAddr += 0x0100)//擦除从录音开始地址到录音结束地址FLASH
	{
		F_FlashErase(uiAddr);
		*P_Watchdog_Clear = 0x0001;                              //清看门狗
	}
	
	SACM_DVR_Initial(0);                                         //初始化DVR为手动方式
	SACM_DVR_InitQueue();                                        //初始化队列
	SACM_DVR_InitEncoder(1);                                     //初始化编码器
	
	uiAddr = START_ADDR;                                         //地址变量为录音起始地址
	uiStatus = 1;
	
	while(uiStatus)     
	{
		if(uiAddr <= END_ADDR)                                   //判断是否到录音结束地址
		{
			SACM_DVR_Encoder();                                  //编码
			if(SACM_DVR_TestQueue() != 2)                        //录音语音队列是否为空
			{
				uiRet = SACM_DVR_FetchQueue();                   //从录音队列中取语音资源
				F_FlashWrite1Word(uiAddr,uiRet);                 //写到FLASH中
				uiAddr++;                                        //地址变量加1
			}
		}
		else
		{
			uiStatus = 0;                                       //录音状态清零
			SACM_DVR_Stop();                                    //停止录音
		}
		*P_Watchdog_Clear = 0x0001;                             //清看门狗
	}
}

//========================================================
//	语法格式:	void PlayRecord(void)
//	实现功能:	语音播放
//	参数:		无
//	返回值:	无
//========================================================

void PlayRecord(unsigned int DAC_Channel)
{
	unsigned int uiAddr;
	unsigned int uiRet;
	
	SACM_DVR_Initial(0);                                //初始化为手动方式
	SACM_DVR_InitQueue();                               //初始化队列
	SACM_DVR_InitDecoder(DAC_Channel);                  //初始化译码队列
	
	uiAddr = START_ADDR;                                //把录音起始地址赋给地址变量
	
	while(1)
	{
		while(SACM_DVR_TestQueue() != 1)                //语音队列是否满
		{
			if(uiAddr <= END_ADDR)                      //是否到录音结束地址
			{
				uiRet = F_FlashRead(uiAddr);            //读FLASH取语音资源
				SACM_DVR_FillQueue(uiRet);              //填充语音队列
				uiAddr++;                               //地址变量加1
			}
			else break;
		}
		if(SACM_DVR_TestQueue() != 2)                   //语音队列是否不为空
			SACM_DVR_Decoder();                         //是,译码
		else
		{
			SACM_DVR_Stop();                            //否,停止播放
			break;
		}
		*P_Watchdog_Clear = 0x0001;                     //清看门狗
	}
}

⌨️ 快捷键说明

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