📄 speaker.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 + -