S3C2410芯片有5个16位定时器,除timer4外均具有PWM功能。
工作原理
定时器与计数器工作原理相同,只不过是16位计数器的脉冲来源不同,如下图所示。 主要介绍定时器功能:PCLK经过预分频和分隔后产生定时器的脉冲信号,计数器在每个脉冲周期内减1,当减至0时产生定时器归零中断并且自动重载TCNTn为缓冲寄存器的值(若自动重载位置1)。
S3C2410定时器
S3C2410有5个16位定时器,即TCNTn寄存器最大值为65335。
定时器 | 对应IO接口 | PWM |
---|
Timer0 | TOUT0(GPB0) | 是 | Timer1 | TOUT1(GPB1) | 是 | Timer2 | TOUT2(GPB2) | 是 | Timer3 | TOUT3(GPB3) | 是 | Timer4 | 仅有计数功能 | 否 |
定时器输入时钟频率:
f
T
C
L
K
=
f
P
C
L
K
/
(
预
分
频
+
1
)
/
分
割
系
数
f_{TCLK}=f_{PCLK}/(预分频+1)/分割系数
fTCLK?=fPCLK?/(预分频+1)/分割系数 定时器计数频率:
f
0
=
f
T
C
L
K
/
T
C
N
T
B
n
f_0=f_{TCLK}/TCNTBn
f0?=fTCLK?/TCNTBn 设置好预分频值,分频系数,TCNTBn的值,一些相关控制寄存器,编写定时器中断处理函数即可使用。
- timer0,timer1,timer2共用一个预分频值,timer3,timer4共用一个预分频值
- 每个定时器的分割系数可以单独设置
- 启动时先设置好两个缓冲寄存器的值,然后置为手动更新(此时不启动),芯片自动将缓冲寄存器写入递减寄存器和比较寄存器;然后设置为自动更新并启动寄存器。后续需要修改直接改缓冲寄存器即可。
PWM设置
PWM可以控制输出的占空比,即某一周期内高/低电平的比例,进而控制电机转速、LED亮度等。 PWM的运行过程涉及两个寄存器TCMPn:比较寄存器,TCMPBn:比较计数器的缓冲寄存器。当TCNTn的值递减到与TCMPn的值相等时,定时器改变输出电平(可通过翻转器决定电平的高低)。 同样,若设置自动重载,当TCNTn归零时,会自动将TCMPBn的值写入TCMPn用于下一计数周期。通过这种双缓冲设置,S3C2410可以在当前周期修改下一周期的定时器运行状态。 PWM输出频率:
f
P
W
M
=
f
0
f_{PWM}=f_0
fPWM?=f0? PWM输出信号占空比:
占
空
比
=
T
C
M
P
B
n
/
T
C
N
T
B
n
占空比=TCMPBn/TCNTBn
占空比=TCMPBn/TCNTBn
定时器控制寄存器
- TCFG0配置寄存器0,用于设置与分频系数和死区值。
- TCFG1配置寄存器1,设置分割器值和哪个定时器产生DMA请求
- TCON定时器控制寄存器,控制每一个定时器的手动更新/自动更新,启动/停止
- 每个寄存器都有一个递减寄存器的缓冲寄存器TCNTBn
- 前四个定时器有比较寄存器的缓冲寄存器TCMPBn
- 每个定时器都有一个观察寄存器TCNTOn用于查看当前定时器计数值,共5个。
|