如果对PWM有疑惑的请看:脉宽调制PWM基本原理
概述
S3C2440A 有5 个16位定时器。其中定时器 0、1、2 和3 具有脉宽调制(PWM)功能。定时器 4 是一个无
输出引脚的内部定时器。定时器 0 还包含用于大电流驱动的死区发生器。
定时器0 和1 共用一个 8 位预分频器,定时器 2 、3 和4 共用另外的 8 位预分频器。每个定时器都有一个可以
生成5 种不同分频信号(1/2,1/4,1/8,1/ 16和TCLK)的时钟分频器。每个定时器模块从相应 8 位预分频器得到
时钟的时钟分频器中得到其自己的时钟信号。8 位预分频器是可编程的,并且按存储在 TCFG0 和TCFG 1 寄存器
中的加载值来分频 PCLK。
定时计数缓冲寄存器(Timer Count Buffer register,TCNTBn )
包含了一个当使能了定时器时的被加载到递减计数器中的初始值。
定时比较缓冲寄存器(timer compare buffer register,TCMPBn)
包含了一个被加载到比较寄存器中的与递减计数器相比较的初始值。
这种TCNTBn 和TCMPBn的双缓冲特征保证了改变频率和占空比时定时器产生稳定的输出。
定时器计数监视寄存器(Timer Count Observation register,TCNTOn )是只读寄存器,
可以从中读取当前定时器的计数值,即当前 定时计数缓冲寄存器(TCNTBn )的值。
每个定时器有它自己的由定时器时钟驱动的 16位递减计数器。当递减计数器到达零时,产生定时器中断请求
通知CPU定时器操作已经完成。当定时器计数器到达零时,相应的 TCNTBn 的值将自动被加载到递减计数器以继
续下一次操作。然而,如果定时器停止了,例如,在定时器运行模式期间清除 TCONn 的定时器使能位,TCNTBn
的值将不会被重新加载到计数器中。
TCMPBn的值是用于脉宽调制(PWM)。当递减计数器的值与定时器控制逻辑中的比较寄存器的值相匹配时定
时器控制逻辑改变输出电平。因此,比较寄存器决定 PWM 输出的开启时间(或关闭时间)。
特性
– 五个16位定时器
– 两个8 位预分频器和两个 4 位分频器
– 可编程输出波形的占空比控制(PWM)
– 自动重载模式或单稳脉冲模式
– 不灵敏区(电波不能到达的地区)发生

PWM 定时器操作
基本时序操作

自动重载和双缓冲
arm920t的 PWM 定时器包含双缓冲功能,允许在不停止当前定时器操作的情况下为下次定时器操作改变重载值。
所以即使设置了新的定时器值,当前定时器操作仍然顺利的被完成。
定时器值可以被写入到定时器计数缓冲寄存器(TCNTBn )中并且可以从定时器计数监视寄存器(TCNTOn )
中读取当前定时器的计数值。如果读取 TCNTBn ,读出的值不是指示当前计数器的状态而是下次定时器持续时间的重载值。
自动重载操作在 TCNTn到达 0 时复制 TCNTBn 到TCNTn。写入到 TCNTBn 的该值,只有在 TCNTn到达 0
并且使能了自动重载时才被加载到 TCNTn。如果 TCNTn变为 0 并且自动重载位为 0,TCNTn不会进一步任何操作。

如何启动一个定时器:
1) 初始值写入到 TCNTBn 和TCMPBn中。
2) 设置相应定时器的手动更新位。推荐你配制变相开/关位。(无论是否使用变换极性)
3) 设置相应定时器的开始位来启动定时器(并且清除手动更新位)。
如果定时器被强制停止,TCNTn保持计数器值并且不会从 TCNTBn 重载。如果需要设置一个新值,执行手动更新。
注意:
无论何时TOUT 变相开/关位改变,是否定时器运行中都将改变 TOUT 逻辑值。因此,最好带手动更新位配制变相开/关位。
实例:

1. 使能自动重载功能。设置 TCNTBn 为160 (50+110)并且设置 TCMPBn为110 。
置位手动更新位并且配制变相位(开/关)。手动更新位分别设置 TCNTn和TCMPn 到TCNTBn 和T CMPBn的值中。
然后分别设置 TCNTBn和TCMPBn为80(40+40 )和40,以决定下次重载值。
2. 设置启动位,预设手动更新位为 0 ,变相位为关,自动重载位为开。定时器在定时器分辨率内的等待时间后启动递减计数。
3. 当TCNTn与TCMPn 的值相同时,TOUTn的逻辑电平从低电平变为高电平。
4. 当TCNTn到达0 时,发出中断请求并且 TCNTBn 的值加载到暂存器中。在下一个定时器标记时刻,
重载TCNTn为暂存器(TCNTBn )的值。
5. 中断服务程序(ISR )中,为下一个持续时间分别设置 TCNTBn 和TCMPBn为8 0(20+60 )和60。
6. 当TCNTn与TCMPn 的值相同时,TOUTn的逻辑电平从低电平变为高电平。
7. 当当TCNTn到达0 时,触发一个中断自动重载 TCNTn为TCNTBn的值。
8. 中断服务程序(ISR )中,禁止自动重载和中断请求以停止定时器。
9. 当TCNTn与TCMPn 的值相同时,TOUTn的逻辑电平从低电平变为高电平。
10. 尽管TCNTn到达0 ,但因为禁止了自动重载,所以 TCNTn并不会再次重载并且定时器已经停止了。
11. 不再产生中断请求。
死区发生器(DEAD ZONE GENERATOR )
死区(Dead Zone )是用于功率器件中的 PWM 控制。此功能允许在开关器件关闭与另一个开关器件的
开启之间插入一个时间间隙。这个时间间隙禁止同时开启两个开关器件,即使是在非常短的时间。
TOUT0 管脚 是PWM 的输出。nTOUT0 是TOUT0的倒置。如果使能了死区,TOUT0和nTOUT0 的输出波形
将分别为TOUT0_DZ和nTOUT0_DZ 。nTOUT0_DZ 连接到 TOUT1引脚。
在死区间隙中,永远不可能同时开启 TOUT0_DZ和nTOUT0_DZ 。

PWM 定时器控制寄存器
1,定时器配制寄存器0(TCFG0)
定时器输入时钟频率 = PCLK / { 预分频值+1} / { 分频值}
{预分频值} = 0~255
{分频值} = 2, 4, 8, 16

2,定时器配制寄存器1(TCFG 1 )

3,定时器控制寄存器(TCON)



定时计数缓冲寄存器(TCNTBn )包含了一个当使能了定时器时的被加载到递减计数器中的初始值。
定时比较缓冲寄存器(TCMPBn)包含了一个被加载到比较寄存器中的与递减计数器相比较的初始值。
这种TCNTBn 和TCMPBn的双缓冲特征保证了改变频率和占空比时定时器产生稳定的输出。
TCMPBn的值是用于脉宽调制(PWM)。当递减计数器的值与定时器控制逻辑中的比较寄存器的值相匹配时定
时器控制逻辑改变输出电平。因此,比较寄存器决定 PWM 输出的开启时间(或关闭时间)。
定时器计数监视寄存器(TCNTOn )是只读寄存器,可以从中读取当前定时器的计数值。
即当前 定时计数缓冲寄存器(TCNTBn )的值。
4,定时器 0
@1@ 定时器0 计数缓冲寄存器和比较缓冲寄存器(TCNTB0 /TCMPB 0 )

@2@ 定时器0 计数监视寄存器(TCNTO0 )

5,定时器 1
@1@ 定时器1 计数缓冲寄存器和比较缓冲寄存器(TCNTB1 /TCMPB 1 )

@2@ 定时器1 计数监视寄存器(TCNTO1)

6,定时器 2
@1@ 定时器2 计数缓冲寄存器和比较缓冲寄存器(TCNTB2 /TCMPB 2 )

@2@ 定时器2 计数监视寄存器(TCNTO2)

7,定时器 3
@1@ 定时器3 计数缓冲寄存器和比较缓冲寄存器(TCNTB3 /TCMPB 3 )

@2@ 定时器3 计数监视寄存器(TCNTO3)

8,定时器 4
@1@ 定时器4 计数缓冲寄存器和比较缓冲寄存器(TCNTB4 )

@2@ 定时器4 计数监视寄存器(TCNTO4)

实验实例:
未完,待续。。。