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

📄 main.c

📁 电压控制程序,符合各种设备需要,核心程序,IBm专属
💻 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.
//========================================================

//========================================================
//	工程名称:	ex2_S480_Manual
//	功能描述:	《实验指导书》语音部分第四个实验
//				通过S480手动方式播放语音资源
//	涉及的库:	CMacro1016.lib
//				SacmV26e.lib
//	组成文件:	main.c
//				hardware.asm,isr.asm
//				hardware.inc,s480.inc
//				s480.h
//	硬件连接:	DAC短接,选择音频输出
//	维护记录:	2005-09-12	v1.0
//
//========================================================

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

#include "s480.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);
		PlaySnd_Manual(2,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);	//在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_S480_Initial(0);							//播放的初始化,手动方式
	SACM_S480_InitQueue();							//初始化播放队列
	SACM_S480_InitDecoder(uiDAC_Channel);			//初始化解码器
	
	while(1)
	{
		while(SACM_S480_TestQueue()!= 1)			//播放队列是否为空
		{
			if(ulAddr >= ulEndAddr)					//地址超出,则退出队列填充操作
			{
				break;
			}
			uiRet = SP_GetResource(ulAddr);			//从存储器当中获取语音资源,在hardware.asm当中定义
			SACM_S480_FillQueue(uiRet);				//填充队列
			ulAddr++;
		}
		if((SACM_S480_Status()&0x0001)!=0)			//当前还处到播放状态,则进行解码
		{
			SACM_S480_Decoder();
		}
		else
		{
			SACM_S480_Stop();						//否则,停止播放
			break;									//退出播放循环
		}	
		*P_Watchdog_Clear = 1;
	}
}

⌨️ 快捷键说明

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