#include <s5pc100.h>
void timer1_int()
{
TINT_CSTAT |= 1<<6; //清除定时器1中断状态
VIC0ADDRESS = 0;
}
void do_irq()
{
( ( void(*)(void) )VIC0ADDRESS)(); //执行中断处理函数
}
void main()
{
TINT_CSTAT |= 1 << 1; //打开定时器1的中断屏蔽
TIMER.TCFG0 |= 0xff; //设置定时器0和1的预分频值为255
TIMER1.TCMPB1 = 0x7d48 / 2; //设置比较缓冲器的值
TIMER.TCON = 0x0e << 8; //手动更新,使缓冲器的值到计数器里面,双缓冲机制 起始,位为低电平
TIMER.TCON = 0x0d << 8; //清除手动更新位,并启动定时器
VIC0INTERRUPT.VIC0INTENABLE |= 1<<22; //打开定时器1的中断使能
VIC0VECTADDR.VIC0VECTADDR22 = (unsigned int)timer1_int; //注册定时器1函数
GPD.GPDCON |= 2<<4; //设置蜂鸣器引脚为TOUT1输出
while(1);
}
void timer1_int()
{
TINT_CSTAT |= 1<<6; //清除定时器1中断状态
VIC0ADDRESS = 0;
}
void do_irq()
{
( ( void(*)(void) )VIC0ADDRESS)(); //执行中断处理函数
}
void main()
{
TINT_CSTAT |= 1 << 1; //打开定时器1的中断屏蔽
TIMER.TCFG0 |= 0xff; //设置定时器0和1的预分频值为255
TIMER.TCFG1 |= 0x4 << 4;//设置定时器0和1的分频值为16 PCLK=66MHz, PCLK/(255+1)/16 = 16.1KHz
//当缓冲器的值减到与比较缓冲器的值相等时,会发生脉冲变化,当缓冲器的值继续减到0时,脉冲也会发生变化,并触发中断
TIMER1.TCMPB1 = 0x7d48 / 2; //设置比较缓冲器的值
TIMER.TCON = 0x0e << 8; //手动更新,使缓冲器的值到计数器里面,双缓冲机制 起始,位为低电平
TIMER.TCON = 0x0d << 8; //清除手动更新位,并启动定时器
VIC0INTERRUPT.VIC0INTENABLE |= 1<<22; //打开定时器1的中断使能
VIC0VECTADDR.VIC0VECTADDR22 = (unsigned int)timer1_int; //注册定时器1函数
GPD.GPDCON |= 2<<4; //设置蜂鸣器引脚为TOUT1输出
while(1);
}