main.c

来自「非常有用的vc5509 c语言入门程序3,对于初学者非常有帮助」· C语言 代码 · 共 93 行

C
93
字号
#include "myapp.h"
#include "ICETEK-VC5509-EDU.h"
#include "scancode.h"
// :-- Define Timer 0 's Registers ---//
    ioport unsigned int *tim0; 
    ioport unsigned int *prd0; 
    ioport unsigned int *tcr0; 
    ioport unsigned int *prsc0;  
// :-- End of Define -----------------//

void InitMcBSP();
main()
{
	int nMusicCount;
	unsigned char dbScanCode;
	int nWork;
 	CLK_init();
	SDRAM_init();
	InitCTR();
	InitMcBSP();
   

    CTRGR=8;		// BUZZE=1 打开蜂鸣器, 见ICETEK-CTR的全局控制寄存器描述

    // 设置合适的音长和音高
    for ( nWork=0;nWork<nMusicNumber;nWork++ )
    {
    	music[nWork][0]*=10;
    	music[nWork][1]*=3;
    	music[nWork][1]/=12;
    }

    // 设置DX0管脚为通用输出管脚以驱动蜂鸣器
//    SPCR0&=0x0fffeffff;	//  /XRST=0
//    PCR0|=0x2000;		// RIOEN=1
    InitInterrupt();
	TIME_init();
    nMusicCount=0;
    while ( 1 )
    {
		nMusicCount++;
		nMusicCount%=nMusicNumber;
		if ( music[nMusicCount][0]==0 )
			*tcr0&=0x0fffffcff;		// 静音
		else
		{
			*prd0=music[nMusicCount][0];	// 切换音符
			*tcr0=0xe0;		
		}
		dbScanCode=GetKey();
		if ( dbScanCode==SCANCODE_Enter )	break;
		Delay(music[nMusicCount][1]);
    }
	CloseCTR();
    exit(0);
}

void InitInterrupt(void)
{
	// 设置中断控制寄存器
	IVPD=0x80;
	IVPH=0x80;
	IER0=0x10;
	DBIER0 =0x10;
	IFR0=0xffff;
	asm(" BCLR INTM");
}

void interrupt Timer()	//中断响应函数
{
   	PCR0^=0x20;
}

void InitMcBSP()
{
	// IOPin: McBSP1.FSX S15  
	//SPCR2.XRST_=0,PCR.XIOEN=1,PCR.FSXM=1,PCR.FSXP=0/1
	SPCR2_1&=0x0fffe;
	PCR1|=0x2800;
}
void TIME_init(void)
{
	tim0  =  (unsigned int *)0x1000;
	prd0  =  (unsigned int *)0x1001;
	tcr0  =  (unsigned int *)0x1002;
	prsc0 =  (unsigned int *)0x1003;
   *tcr0 = 0x04f0;
   *tim0 = 0;
   *prd0 = 0xffff;
   *prsc0 = 2;
   *tcr0 = 0x00e0;
}

⌨️ 快捷键说明

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