SP804是两个定时器模块,作为APB总线从设备,可以被CPU访问编程:包括2个中断和2个32位递减计数器FRC。系统时钟PCLK用于APB总线访问寄存器;时钟TIMCLK用于递减技术器更新,频率小于系统时钟PCLK。在寄存器访问时,这两个时钟要同步。
功能描述
两个32位递减计数器有三种工作模式:
- 无限制模式,从最大值开始递减,当减小到0时,自动从最大值开始递减。这是默认模式。
- 周期定时器模式,从一个预设值开始递减,当减小到0时,产生中断,并重新装载预设值,又开始递减。这样产生一个固定周期的时钟中断。
- 单次定时器模式,与周期定时器相同类似,不同的是,产生一次中断后,就停止。如果需要产生新的定时器中断,软件要么清除控制器中的One Shot Count位(进入模式1或模式2),或者重新配置“加载预设值寄存器”。
操作
每个定时器都有一组专属寄存器组,两个定时器的操作方法一样。写“加载预设值寄存器”,并在使能计数器后,计数器就会递减。如果计数器已经工作起来了,在递减过程中,重写加载预设值寄存器,会立即生效,计数器重新从预设值开始递减。如果写“后备加载预设值寄存器”,不会中断计数器当前过程;在周期定时器模式下,计数器只有递减到零后,才会重新加载新的预设值。
计数器一旦递减到零,就会产生中断。通过清除寄存器可以清除中断。在单次定时器模式下,计数器递减到零后会停下来,除非计数器换成其他工作模式,或者软件重新定义预设值。在无限制模式下,计数器递减到零后又重新从最大值开始。在周期定时器模式下,计数器递减到零后又重新从加载预设值寄存器加载预设值,并接着递减,这样就周期性产生中断。在定时器控制寄存器中,设置计数器的工作模式。软件可以随时通过“数值寄存器”来获取当前计数器数值。复位后,计数器全部去能、中断全部清零、加载预设值寄存器全部清零。工作模式和分频设置为无限制模式,时钟分频位1。下面是无限制模式的功能框图:
计数器时钟使能是由分频逻辑产生。计数器的使能用下面时序产生时钟:
- 系统时钟
- 系统时钟除以16
- 系统时钟除以256
中断产生
32位计数器一旦为零,就产生中断,只能通过写TimerXCleare寄存器去清除中断。当控制寄存器的中断使能位写零,中断就被屏蔽。无论是否屏蔽,中断状态都能从状态寄存器获取。
TIMINTC是两个计数器中断输出的“或”逻辑。
时钟
计数器有两个时钟源,PCLK和TIMCLK。PCLK用于寄存器访问接口。TIMCLK用于分频逻辑和递减计数器。TIMCLK只有在TIMCLKEN为高时,才会有效。
一般情况下,我们假设PCLK和TIMCLK是同步的。为了获取低频操作:
- PCLK和TIMCLK全部连接到PCLK,并且TIMCLKEN以所需要的频率拉高(但必须与PCLK同步)。
- TIMCLKEN直接拉高,要做一个PCLK的使能版本给TIMCLK。