garfield

【嵌入式】【原创】飞思卡尔MC9RS08KA2学习之定时器

0
阅读(15243)

MTIM(modulo timer module) 是一个简单的8 位定时器,具有几个软件可选时钟源和一个可编程中断。MTIM 核心部分是一个 8 位计数器,它能作为一个自由运行的计数器或一个模计数器工作。一个定时中断可以被使能产生周期行中断,用于时间基准的软件循环。
TCLK 输入连接到MC9RS08KA2 的PTA2 管脚。XCLK 输入连接到被两分频的ICSFFCLK 时钟,ICSFFCLK 是来自ICS 模块的固定频率的内部参考时钟。

系统结构图如下图所示,深颜色部分标示定时器模块:

image

定时器系统特点有:
• 8位增计数器
— 自由运行或8位模限制
— 软件可控中断溢出
— 计数器复位位(TRST)
— 计数器停止位(TSTP)
• 四个可编程选择时钟源用于输入预分频:
— 系统总线时钟-上升沿
— 固定频率时钟(XCLK) -上升沿
— TCLK管脚上的外部时钟源-上升沿
— TCLK管脚上的外部时钟源-下降沿
• 九个可选择的时钟预分频值:
— 时钟源被分频为1, 2, 4, 8, 16, 32, 64, 128, 或256

在单片机各种工作模式下定时器的工作状态:

1.等待模式下工作
假如执行WAIT 指令之前被使能, MTIM 在等待模式继续工作。因此,假如定时器溢出中断使能, MTIM 能用于将 MCU 退出等待模式。为了获得最低电流功耗,假如在等待模式不需要作为中断源, MTIM 应该被软件禁止。
2 停止模式下工作
不管在执行STOP 指令之前如何设置,MTIM 在所有停止模式都将禁止。因此, MTIM 不能用于将MCU 从停止模式唤醒。
假如复位退出停止模式, MTIM 将进入复位时的状态。假如是中断退出停止模式, MTIM 继续保持进入停止模式前的状态。假如计数器进入停止状态时工作,计数器将从当前的值继续开始。
3 在主动背景模式下工作
MTIM延迟所有计数直到MCU恢复正常用户工作模式。在一个MTIM复位没有产生时,恢复延迟时的值继续计数(TRST 被写1 或任何值被写入MTIMMOD 寄存器)。

定时器的内部结构原理图:

image

外部引脚:

MTIM模块可以与一个外部引脚相联系,那就是TCLK,当选为MTIM 时钟源时,TCLK 信号可用于外部事件计数。
TCLK 输入必须预总线时钟同步。同样,占空比和时钟离散性变化必须适应。因此, TCLK 信号必须限制在总线频率的四分之一。

寄存器介绍:
MTIM一共有四个寄存器,分别是:

• 一个8 位状态和控制寄存器
• 一个 8 位时钟配置寄存器
• 一个8 位计数寄存器
• 一个8 位模寄存器

如图:

image

1 MTIM 状态和控制寄存器(MTIMSC)
MTIMSC 包含溢出状态标志位和控制位,用于配置中断使能,重新计数和停止计数。

image

TOF
MTIM 溢出标志位—当 MTIM计数寄存器达到MTIM 模寄存器值溢出回到$00,此只读位被置位。在TOF位是1时读MTIMSC 寄存器TOF 清除,然后写0 到TOF。当 TRST 被写入1 或MTIMMOD 寄存器被写入任何值, TOF
也被清零。
0 在MTIM 模寄存器计数值没有达到溢出值
1 在MTIM 模寄存器计数值达到溢出值

TOIE
MTIM 溢出中断使能— 此读/ 写位使能MTIM 溢出中断。假如TOIE 被置位,当 TOF = 1,产生中断。复位TOIE 清零。 Do not set TOIE if 假如TOF = 1 不要将TOIE 置位。先将TOF 清零,然后将TOIE. 置位。
0 TOF 中断禁止,使用软件巡检。
1 TOF中断允许

TRST
MTIM 计数器复位— 当这个只写位写入1, MTIM 计数寄存器复位到 $00 且TOF 被清零。读此位总是返回0。
0 无影响。MTIM 计数器保持当前状态
1 MTIM 计数器被复位为$00。

TSTP
MTIM 计数器停止— When 置位,此读/ 写位停止 MTIM 计数保持在当前值。当TSTP 被清零从当前值恢复计数。MCU 复位后将TSTP 置位防止MTIM 计数。
0 MTIM 计数器在工作状态
1 MTIM c 计数器处于停止状态

2.MTIM 时钟配置寄存器(MTIMCLK)
MTIMCLK 包括时钟选择位(CLKS) 和预分频选择位(PS)。

image

CLKS
时钟源选择— 两个读/ 写位选择四个不同时钟源中的一个作为输入到MTIM 域分频器。在计数器处于工作状态改变时钟源不能将计数器清零。计数继续工作在新的时钟源。复位 CLKS 被清除为00。
00 编码 0 — 总线时钟(BUSCLK).
01 编码1 — 固定频率时钟(XCLK).
10 编码3 — 外部源 (TCLK 管脚), 下降沿
11 编码 4 — 外部源 (TCLK 管脚), 上升沿

PS
时钟源预分频器— 这四个读/ 写位从8 位预分频器中选择九个输出当中的一个。在计数器工作状态改变预分频器不会将计数器清零。计数器继续工作在新的预分频值。复位将 PS 清除为0000。
0000 编码0 — MTIM 时钟源÷ 1.
0001 编码 1 — MTIM 时钟源÷ 2.
0010 编码 2 — MTIM 时钟源÷ 4.
0011 编码3 — MTIM 时钟源÷ 8.
0100 编码 4 — MTIM 时钟源÷ 16.
0101 编码 5 — MTIM 时钟源÷ 32.
0110 编码 6 — MTIM 时钟源÷ 64.
0111 编码 7 — MTIM 时钟源÷ 128.
1000 编码 8 — MTIM 时钟源÷ 256.
所有其它缺省的编码- MTIM 时钟源÷ 256.

3.MTIM 计数寄存器(MTIMCNT)
MTIMCNT 是一个8 位计数器的当前MTIM 计数的只读值。

image
COUNT
MTIM 计数— 这八个只读位包含了8 位计数器的当前值。写这个寄存器无效。复位清除计数为$00。

4.MTIM 模寄存器(MTIMMOD)

image


MOD
MTIM 模— 这八个读/ 写位包含模的值用于复位计数和TOF 置位。一个 $00 值将MTIM 置于自由运行模式。写MTIMMOD 将计数值清除为 $00 和将TOF 清零。复位后将模置为$00。

功能描述:


MTIM 由一个主要的8 位增计数器构成,具有一个8 位模寄存器、一个时钟源选择器和一个具有几个可选值的预分频模块。此模块也包含软件可选中断逻辑。
MTIM 计数器(MTIMCNT) 由三种工作模式:停止、自由运行和模。复位后计数器停止。假如计数器没有写一个新值到模寄存器开始计数,计数器将处于自由运行模式。当计数器运行时写一个非$00 值到模寄存器,计数器处于模运行模式。
任何MCU 复位,计数器停止且值为 $00,模寄存器被置为$00。缺省情况下选择总线时钟源和预分频值为1 分频。为了工作在自由运行模式,简单地设置MTIM 状态和孔子寄存器(MTIMSC) 和清除MTIM 停止位(TSTP)。
四个时钟源可软件选择:内部总线时钟,固定频率时钟(XCLK),和一个选择作为上升沿或下降沿增加的在TCLK 管脚的外部时钟。MTIMCLK 中的 MTIM 时钟选择位(CLKS) 用于选择想要的时钟源。当一个新时钟源被选择,假如计数器处于工作状态(TSTP = 0),计数器将继续根据用新时钟源得到的预分频值计数。
九个预分频值软件可选:时钟源被分频为1, 2, 4, 8, 16, 32, 64, 128, 或256。MTIMCLK 中预分频器选择位(PS) 选择想要的预分频值。当一个新的预分频值被选用,假如计数器正处于工作状态(TSTP = 0) ,计数器将根据使用新预分频值获得的预想的值计数。
MTIM 模寄存器(MTIMMOD允许溢出比较值被设置在从$01 到$FF 之间的任何值。复位清除模值为$00,这导致工作在自由允许模式。
当计数器处于活动状态(TSTP = 0), 计数器在被选择的速率增加直到计数预模值相匹配。当这些值相同时,计数器溢出回到 $00 且继续计数。只有计数器溢出, MTIM 溢出标志位(TOF) 就被置位。标志位在从模值到 $00 转变时置位。在计数器活动期间写MTIMMOD 将计数器复位到$00和TOF 清零。
TOF 清零分两步。第一步是在TOF 置位期间读MTIMSC 寄存器。第二步是写0 到TOF。假如在这两步之间其它溢出产生,清零过程被复位,第二步执行后TOF 将保持位1。这将防止第二个溢出产生被错过。当一个1 被写入TRST 或当任何值被写入MTIMMOD 寄存器, TOF 也被清零。
无论TOF 是否被置位, MTIM 会考虑一个可选的中断产生。为了使能MTIM 溢出中断,MTIMSC中的MTIM溢出中断使能位(TOIE) 置1。在TOF = 1 期间TOIE不能被写1,相反地,TOF首先被清零,然后TOIE 才能被置1。

举例:

image

选择的时钟源是四种可选当中的任何一种。预分频器被设置为 PS =%0010 或4 分频。MTIMMOD 寄存器中的模值被设置为$AA。当计数器,MTIMCNT,到达$AA模值时,计数器溢出回到$00 且继续计数。定时器溢出标志位, TOF,当计数器值从$AA 到$00 转变时被置位。假如TOIE = 1,当TOF 被置位,产生一个TIM 溢出中断。

Baidu
map