#define rGPFCON (*(volatile unsigned *)(0x7F0080A0))
#define rGPFDAT (*(volatile unsigned *)(0x7F0080A4))
#define rGPFPUD (*(volatile unsigned *)(0x7F0080A8))
#define rGPNCON (*(volatile unsigned *)(0x7F008830))
#define rGPNDAT (*(volatile unsigned *)(0x7F008834))
#define rGPNPUD (*(volatile unsigned *)(0x7F008838))
#define PCLK 66000000 //for S3C6410 66MHZ
#define HCLK 133000000 //for S3C6410 133MHZ
#define rTCFG0 (*(volatile unsigned *)(0x7F006000))
#define rTCFG1 (*(volatile unsigned *)(0x7F006004))
#define rTCON (*(volatile unsigned *)(0x7F006008))
#define rTCNTB0 (*(volatile unsigned *)(0x7F00600C))
#define rTCMPB0 (*(volatile unsigned *)(0x7F006010))
#define rTCNTO0 (*(volatile unsigned *)(0x7F006014))
#define rTCNTB1 (*(volatile unsigned *)(0x7F006018))
#define rTCMPB1 (*(volatile unsigned *)(0x7F00601c))
#define rTCNTO1 (*(volatile unsigned *)(0x7F006020))
#define rTCNTB2 (*(volatile unsigned *)(0x7F006024))
#define rTCNTO2 (*(volatile unsigned *)(0x7F00602c))
#define rTCNTB3 (*(volatile unsigned *)(0x7F006030))
#define rTCNTO3 (*(volatile unsigned *)(0x7F006038))
#define rTCNTB4 (*(volatile unsigned *)(0x7F00603c))
#define rTCNTO4 (*(volatile unsigned *)(0x7F006040))
#define rTINT_CSTAT (*(volatile unsigned *)(0x7F006044))
int p=100;
void uDelay(int usec)//微秒精确延时
{
unsigned int val = (PCLK)/1000000-1;
rTCFG0 &= ~(0xff<<8);
rTCFG0 |= 0<<8;
rTCFG1 &= ~(0xf<<8);
rTCFG1 |= 0<<8;
rTCNTB2 = val;
rTCON &= ~(0xf<<12);
rTCON |= 0xb<<12;
rTCON &= ~(2<<12);
while(usec--)
{
while(rTCNTO2>=val>>1);
while(rTCNTO2<val>>1);
}
}
void GPIO_Init(void)
{
/*-------init Beep-----*/
rGPFCON = rGPFCON & (~(0x1 << (31)));
rGPFCON = rGPFCON | (0x1 << (2*15));
rGPFPUD = rGPFPUD & (~(0x3 << (2*15))) ;
rGPFDAT = rGPFDAT | 0x8000;
/*-------init Kye------*/
rGPNCON = rGPNCON & (0xffffffff << (2*6));
}
void BeepOn(void)
{
rGPFDAT = rGPFDAT | 0x8000;
}
void BeepOff(void)
{
rGPFDAT = rGPFDAT & 0x7fff;
}
void KeyScan(void)
{
if ((rGPNDAT & 0x3f) != 0x3f)
{
if ((rGPNDAT & 0x3e) == 0x3e)//按键1增频
{
uDelay(100);
if ((rGPNDAT & 0x3e) == 0x3e)
p=p-5;
}
if ((rGPNDAT & 0x3d) == 0x3d)//按键2降频
{
uDelay(100);
if ((rGPNDAT & 0x3d) == 0x3d)
p=p+5;
}
}
}
void KeyTest(void)
{
while (p>0)//频率过小停止发声
{
int i,j;
KeyScan();
{
BeepOn();
for(i=0;i<1000;i++)
uDelay(p);
BeepOff();
for(j=0;j<1000;j++)
uDelay(p);
}
}
BeepOff();
}
void Main(void)
{
GPIO_Init();
BeepOff();
KeyTest();
}
fengmingqi.zip_arm 蜂鸣器_s3c6410 buzzer_s3c6410蜂鸣器
版权申诉
40 浏览量
2022-09-24
19:08:35
上传
评论
收藏 36KB ZIP 举报
APei
- 粉丝: 64
- 资源: 1万+