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

📄 speaker.c

📁 ICETEK-VC5416-EDULab瑞泰创新科技5416开发板的实验源程序
💻 C
字号:
/////////////////////////////////////////////////
//  Example For ICETEK-VC5416-EDU              //
//          CTR Version : V4                   //
//  Filename: Speaker.c                        //
//  Project : Speaker.pjt                      //
//  Version : 2.00                             //
//  Write by: Daniel Hawk                      //
//  Company : Realtimedsp Co.Ltd.              //
//                                             //
//  All Rights opened & no Onus  2005.06       //
/////////////////////////////////////////////////
#include "scancode.h"
#define	TIM		*(int *)0x24
#define	PRD     *(int *)0x25
#define	TCR		*(int *)0x26
#define	IMR		*(int *)0x0
#define	IFR		*(int *)0x1		
#define	PMST	*(int *)0x1d	
#define SPSA0 *(unsigned int *)0x38
#define SPSD0 *(unsigned int *)0x39
#define SPSA1 *(unsigned int *)0x48
#define SPSD1 *(unsigned int *)0x49
#define nMusicNumber 40

#define REGISTERCLKMD (*(unsigned int *)0x58)
#define WAITSTATUS (*(unsigned int *)0x28)

ioport unsigned char port8000;
ioport unsigned char port8001;
ioport unsigned char port8002;	
ioport unsigned char port8007;
#define CTRGR    port8000
#define CTRKEY   port8001
#define CTRCLKEY port8002
#define CTRLR    port8007	

void Delay(unsigned int nTime);
void interrupt time(void);
// 音符数据
unsigned int music[nMusicNumber][2]=
{
	{182,480},{151,480},{135,480},{121,480},{135,480},{151,480},{182,480},{0,480},
	{182,480},{151,480},{135,480},{121,480},{135,480},{151,480},{182,480},{0,480},
	{182,240},{151,240},{135,240},{121,240},{135,240},{151,240},{182,240},{0,240},
	{182,240},{151,240},{135,240},{121,240},{135,240},{151,240},{182,240},{0,240},
	{182,1920},{151,1920},{135,1920},{121,1920},{135,1920},{151,1920},{182,1920},{0,1920} 
};
unsigned int uWork;

main()
{
	unsigned int uWork1;
	int j,nCount,nCount1,nScanCode;
	nCount=nCount1=0;
	REGISTERCLKMD=0;
	CTRGR=0;
	CTRGR=0x80;
	CTRGR=8;
	CTRLR=0;			// 关闭东西方向的交通灯
	CTRLR=0x40;	        // 关闭南北方向的交通灯
	uWork1=CTRCLKEY;	// 清除键盘缓冲区

	for ( j=0;j<nMusicNumber;j++ )
		music[j][0]*=8;
	SPSA0=1;	        // set McBSP0's SPCR2
	uWork1=SPSD0;
	uWork1&=0xfffe;	    // set XRST=0
	SPSD0=uWork1;
	SPSA0=0x0e;	        // set McBSP0's PCR
	uWork1=SPSD0;
	uWork1|=0x2020;	    // set XIOEN=1, Enable IO,DX for output
	SPSD0=uWork1;
	uWork1= PMST; 		      
	PMST = uWork1&0xff;
	IMR = 0x8;
	TCR = 0x412;
	TIM = 0;
	PRD = music[nCount][0];		// 频率设置
	TCR = 0x422;
	IFR = 0x100;
	asm("	rsbx	INTM");		  
	j=0;
	while ( j<1 )
	{
		nCount1=0;
		nScanCode=CTRKEY;	// 读扫描码
		nScanCode&=0x0ff;	// 低8位
		uWork1=CTRCLKEY;	// 清除键盘缓冲区
		if ( nScanCode!=0 )
		{
			if ( nScanCode==SCANCODE_Enter )	break;
		}
		nCount1++;
		Delay(music[nCount][1]*12);	// 音长
		nCount++;
		if ( nCount>=nMusicNumber )
		{
			nCount=0; j++;
		}
		if ( music[nCount][0]==0 )
			TCR=0x412;		// 静音
		else
		{
			PRD = music[nCount][0];	// 切换音符
			TCR = 0x422;
		}
	}
}               

void Delay(unsigned int nDelay)
{
	int i,j,k=0;
	for ( i=0;i<nDelay;i++ )
		for ( j=0;j<64;j++ )
			k++;
}

void interrupt time(void)
{
		SPSA0=1;	// set McBSP0's SPCR2
		uWork=SPSD0;
		uWork&=0xfffe;	// set XRST=0
		SPSD0=uWork;
		SPSA0=0x0e;	// set McBSP0's PCR
		uWork=SPSD0;
		uWork|=0x2000;	// set XIOEN=1, Enable IO,DX for output
		uWork^=0x20;	// DX=^DX
		SPSD0=uWork;
}

⌨️ 快捷键说明

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