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

📄 speaker.c

📁 在CCS环境下基于TMS320C5416开发的使蜂鸣器产生不同频率的声音的课程设计。
💻 C
字号:
#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 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=0;

	REGISTERCLKMD=0;
	port8000=0;
	port8000=0x80;
	port8000=8;
	port8007=0;			// 关闭东西方向的交通灯
	port8007=0x40;	// 关闭南北方向的交通灯
	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 )
	{
		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 + -