S3C2440A 有 5 个 16 位定时器。其中定时器 0、1、2 和 3 具有脉宽调制 (PWM )功能。定时器 4 是一个无输出引脚的内部定时器。
定时器 0 和 1 共用一个 8 位预分频器 ,定时器 2、3 和 4 共用另外的 8 位预分频器。每个定时器都有一个可以
生成 5 种不同分频信号 (1/2 ,1/4 ,1/8 ,1/16 和 TCLK )的时钟分频器。每个定时器模块从相应 8 位预分频器得到
时钟的时钟分频器中得到其自己的时钟信号。8 位预分频器是可编程的 ,并且按存储在 TCFG0 和 TCFG1 寄存器
中的加载值来分频 PCLK。
每个定时器有它自己的由定时器时钟驱动的 16 位递减计数器。当递减计数器到达零时 ,产生定时器中断请求
通知 CPU 定时器操作已经完成。
定时器寄存器:
*****************************************************************************************************************************************************
C示例程序(部分代码) : 实现LED每隔 0.5秒闪烁一次
void Timer0_Init(void)
{
rTCFG0 = 49; //PCLK/(49+1)
rTCFG1 = 0x03; //16分频=62500Hz
rTCNTB0 = 62500/2; //TCNTB0[15:0]=计数值
rTCMPB0 = 0;
rTCON = 0x09; //将计数值装入 TCNTB0 ,TCMPB0
ClearPending(BIT_TIMER0);
pISR_TIMER0=(U32)IRQ_Timer0_Handle;
EnableIrq(BIT_TIMER0);
}
/*定时器中断处理函数*/
static void __irq IRQ_Timer0_Handle(BIT_TIMER0)
{
ClearPending(BIT_TIMER0);
Led1_run();
}