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 + -
显示快捷键?