//通过定时器 1 中断控制 CPU 板左下角的 LED1 和 LED2 实现轮流闪烁。
//对定时器 1 初始化,并设定时器的中断时间为 1 秒
/*关于 PCLK 的介绍——在 s3c2440 中,有 2 个不同的 PLL,一个是 MPLL,另一个是
UPLL。UPLL 是给 USB 提供 48MHz。在这里,我们主要介绍 MPLL。外部时钟源经过
MPLL 处理后能够得到三个不同的系统时钟:FCLK、HCLK 和 PCLK。FCLK 是主频时钟,
用于 ARM920T 内核;HCLK 用于 AHB 总线设备,如 ARM920T,内存控制,中断控制,
LCD 控制,DMA 以及 USB 主模块;PCLK 用于 APB 总线设备,如外围设备的看门狗,
IIS,I2C,PWM,MMC 接口,ADC,UART,GPIO,RTC 以及 SPI。这三个系统时钟
(FCLK、HCLK 和 PCLK)是有一定的比例关系,这种关系是通过寄存器 CLKDIVN 中的
HDIVN 位和 PDIVN 位来控制的,因此我们只要知道了 FCLK,再通过这两位的控制,就
能确定 HCLK 和 PCLK。而 FCLK 是如何得到的呢?它是通过输入时钟(即外部时钟源)
的频率,经过一个计算公式(具体公式请查阅数据手册)得到的,这个计算公式还需要三
个参数(MDIV、PDIV、SDIV),而这三个参数是经过寄存器 //MPLLCON 配置得到的。
/*
void Timer1_init(void)
{
rGPGCON=rGPGCON&0xfff0ffff|0x00050000;
rGPGDAT=rGPGDAT|0x300;
rTCFG0=255;
??rTCFG1=0<<4;
rTCNTB1=48828;
GPG8、9 位为输出,0101xxxxxxxxxxxxxxxx
GPG8、9 高电平,xx11xxxxxxxx
TCFG 是定时器配置寄存器,[7:0]确定定时器 0、1 的预分频值
[3:0]控制定时器 0MUX 输入,[7:4]定时器 1 等等。0000--1/2;0001--1/4;0010--
1/8;0011--1/16; 01XX--1/32;
rTCNTB 是 定 时 器 的 初 始 计 数 值 , 在 pclk=50MHz 下 , 1S 的 计 数 值
rTCNTB1=50000000/4/256=48828;pclk 是定时器的时钟源,首先经过预分频器降
低频率后,进入第二个分频,可以生成 5 种不同的分频信号(1/2,1/4,1/8,1/16 和
TCLK)。预分频器值( prescaler value)在 TCFG0(0X51000000)中设置,0-7
位设置 TIMER0,TIMER1 的预分频值。8-15 位设置 TIMER2,3,4 的预分频值。第
二个分频器的值(divider value)在 TCFG1(0X5100 0004)中设置,0-3 位设置
TIMER0 的分频值,4-7 位设置 TIMER1 的分频值,8-11 位设置 TIMER2 的分频
值,12-15 位设置 TIMER3 的分频值,16-19 位设置 TIMER4 的分频值。
定时器输入频率的计算公式是:
Timer input clock Frequency = PCLK / {prescaler value+1} / {divider value}
{prescaler value} = 0~255
{divider value} = 2, 4, 8, 16
本例中:频率=50000000/256/2/48828=