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

📄 main.c

📁 spce061单片机的一些程序!C语言和汇编语言都有
💻 C
字号:
//========================================================
//	The information contained herein is the exclusive property of
//	Sunnnorth Technology Co. And shall not be distributed, reproduced,
//	or disclosed in whole in part without prior written permission.
//	(C) COPYRIGHT 2003 SUNNORTH TECHNOLOGY CO.
//	ALL RIGHTS RESERVED
//	The entire notice above must be reproduced on all authorized copies.
//========================================================

//========================================================
//	工程名称:	ex1_A2000_Manual
//	功能描述:	《实验指导书》语音部分第一个实验
//				通过手动方式播放两段语音资源
//	涉及的库:	CMacro1016.lib
//				sacmv26e.lib
//	组成文件:	main.c
//				hardware.asm  isr.asm
//				hardware.inc  a2000.inc
//				a2000.h
//	硬件连接:	DAC跳线短接,选择语音输出
//	维护记录:	2005-09-12	v1.0
//				2005-10-25	规范化
//========================================================

//========================================================
//	文件名称:	main.c
//	功能描述:	通过手动方式播放两段语音资源
//	维护记录:	2005-09-12	v1.0
//========================================================

#include "a2000.h"

#define P_Watchdog_Clear		(volatile unsigned int *)0x7012

void PlaySnd_Manual(unsigned int SndIndex,unsigned int DAC_Channel);

//========================================================
//	语法格式:	int main(void)
//	实现功能:	调用语音播放函数,通过手动方式播放两段语音资源
//	参数:		无
//	返回值:	无
//========================================================

int main(void)
{
	while(1)
	{
		PlaySnd_Manual(0,3);
		PlaySnd_Manual(1,3);
		*P_Watchdog_Clear = 0x0001;
	}
}

//========================================================
//	语法格式:	void PlaySnd_Manual(unsigned int uiSndIndex,
//								unsigned int uiDAC_Channel)
//	实现功能:	通过手动方式播放语音资源
//	参数:		1.uiSndIndex:语音资源序号 
//				2.uiDAC_Channel:语音播放通道
//	返回值:	无
//========================================================
unsigned int SP_GetResource(unsigned long ulAddr);	//define of hardware.asm
void PlaySnd_Manual(unsigned int uiSndIndex,unsigned int uiDAC_Channel)
{
	extern unsigned long RES_Table;					//语音资源列表,在Resource.asm当中定义
	unsigned long ulAddr,ulEndAddr;
	unsigned int uiRet;
	
	ulAddr = *(&RES_Table + (uiSndIndex<<1));		//获取要播放的语音的首地址
	ulEndAddr = *(&RES_Table + (uiSndIndex<<1) + 1);//获取要播放的语音的结束地址
	
	SACM_A2000_Initial(0);							//播放的初始化,手动方式
	SACM_A2000_InitQueue();							//初始化播放队列
	SACM_A2000_InitDecoder(uiDAC_Channel);			//初始化解码器
	
	while(1)
	{
		while(SACM_A2000_TestQueue()!= 1)			//播放队列是否为空
		{
			if(ulAddr >= ulEndAddr)
			{										//地址超出,则退出队列填充操作
				break;
			}
			uiRet = SP_GetResource(ulAddr);			//从存储器当中获取语音资源
			SACM_A2000_FillQueue(uiRet);			//填充队列
			ulAddr++;
		}
		if((SACM_A2000_Status()&0x0001)!=0)
		{											//当前还处到播放状态,则进行解码
			SACM_A2000_Decoder();
		}
		else
		{
			SACM_A2000_Stop();						//否则,停止播放
			break;									//退出播放循环
		}
		*P_Watchdog_Clear = 1;
	}
}

⌨️ 快捷键说明

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