LPC1300 第16章 系统节拍定时器
- 格式:pdf
- 大小:350.00 KB
- 文档页数:5
目录
第16章系统节拍定时器 (1)
16.1 本章导读 (1)
16.2 基本配置 (1)
16.3 特性 (1)
16.4 描述 (1)
16.5 操作 (1)
16.6 寄存器描述 (2)
16.6.1 系统定时器控制和状态寄存器 (2)
16.6.2 系统定时器重载值寄存器 (2)
16.6.3 系统定时器当前值寄存器 (3)
16.6.4 系统定时器校准值寄存器 (3)
第16章系统节拍定时器
16.1 本章导读
系统节拍定时器(Sys Tick timer)是ARM Cortex-M3内核的组成部分,所有LPC1300系列Cortex-M3微控制器的系统节拍定时器都相同。
16.2 基本配置
系统节拍定时器配置为使用以下寄存器:
1)管脚:系统节拍定时器不使用外部管脚。
2)功率和外设时钟:系统节拍定时器通过Sys Tick控制寄存器(表16.2)使能。
系统节拍定时器时钟可以从系统配置模块的Systick定时器时钟分频器里选择(“SYSTICK时钟分频器寄存器位描述”表),或者可以从系统时钟里选择(表16.2)。
图16.1 系统节拍定时器方框图
名称 访问 地址偏移量
描述 复位值[1] CTRL R/W 0x010
系统定时器控制和状态寄存器 0x0 LOAD R/W 0x014
系统定时器重载值寄存器 0x0 V AL R/W 0x018 系统定时器当前值寄存器
0x0 CALIB RO 0x01C 系统定时器校准值寄存器 0x0000 0004 [1] 复位值只反映使用位中储存的数据。
它不包括保留位的内容。
16.6.1 系统定时器控制和状态寄存器
CTRL 寄存器包含系统节拍定时器的控制信息,并提供状态标志。
表16.2 系统定时器控制和状态寄存器(CTRL - 0xE000 E010)位描述 位 符号 描述 复位值
0 ENABLE 系统节拍计数器使能。
为1时,计数器使能;为0时,计数器禁能 0
1 TICKINT 系统节拍中断使能。
为1时,系统节拍中断使能。
为0时,系统节拍中断禁能。
使能时,在系统节拍计数器倒计数到0时产生中断
0 2 CLKSOURCE 系统节拍时钟源选择。
为1时,选择系统时钟(CPU )。
为0时,从系统
节拍时钟分频器(SYSTICKDIV )选择输出时钟作为参考时钟。
在这种情
况下,内核时钟至少必须是参考时钟的2.5倍,否则无法预知计数值
0 15:3 - 保留,用户软件不应向保留位写1,从保留位读出的值未定义
n/a 16 COUNTFLAG 系统节拍计数器标志。
当系统节拍计数器倒计数到0时该标志置位,读取该寄存器时该标志清零
0 31:17 - 保留,用户软件不应向保留位写1,从保留位读出的值未定义 n/a 16.6.2 系统定时器重载值寄存器
系统节拍定时器倒计数到0时,LOAD 寄存器设置为将要装入系统节拍定时器的值。
使用软件将该值装入寄存器,作为定时器初始化的一部分。
如果CPU 或外部时钟运行频率适合用CALIB 值,则可读取CALIB 寄存器的值并用作LOAD 的值。
图16.2 系统定时器重载值寄存器(LOAD – 0xE000 E014)位描述 位 符号 描述 复位值
23:0 RELOAD 该值在系统节拍计数器倒计数到0时装入该计数器 0
31:24 - 保留,用户软件不应向保留位写1,从保留位读出的值未定义
n/a 16.6.3 系统定时器当前值寄存器
当软件读取V AL 寄存器时,它将会返回系统节拍计数器的当前计数值。
表16.3 系统定时器当前值寄存器(VAL – 0xE000 E018)位描述 位 符号 描述 复位值
23:0 CURRENT 读该寄存器会返回系统节拍计数器的当前值。
写任意位都可清零系统节拍计数器和STCTRL 中的COUNTFLAG 位 0
31:24 - 保留,用户软件不应向保留位写1,从保留位读出的值未定义
n/a 16.6.4 系统定时器校准值寄存器
表16.4 系统定时器校准值寄存器(CALIB – 0xE000 E01C )位描述 位 符号 值 描述 复位值
23:0 TENMS 出厂预设置 0x4
29:24 - 保留,用户软件不应向保留位写1。
从保留位读出的值未定义 n/a
30 SKEW 表示TENMS 的值是否准确。
这会影响Sys Tick 用作软件实时时钟的适用性 0
31 NOREF 表示独立的参考时钟是否可用。
该值为出厂预设值
0 16.7 定时器计数的范例
使用系统节拍定时器需遵循以下规则:
1)用重载值RELOAD 对LOAD 寄存器进行编程,以获取所需的时间间隔。
2)通过写操作对V AL 寄存器清零。
这样能确保定时器使能后可以从LOAD 值开始计数,而不是从任意值开始计数。
下面的例子描述了为不同系统配置选择系统节拍定时器重载值。
所有这些例子所用的中断时间间隔都为10毫秒,这正是系统节拍定时器所要使用的时间间隔,并且没有舍入误差。
系统时钟=72MHz
取值0x7对CTRL 寄存器进行编程,即选择系统时钟作为时钟源,并使能系统节拍定时器和系统节拍中断。
RELOAD =(系统时钟频率×10ms )-1=(72MHz ×10ms )-1=720000-1=719999=0x000AFC7F
系统节拍定时器时钟=24MHz
取值0x3对CTRL 寄存器进行编程,即选择系统节拍时钟分频器(DIV =3)作为时钟源,并使能系统节拍定时器和系统节拍定时器中断。
RELOAD =(系统节拍定时器时钟频率×10ms )-1=(24MHz ×10ms )-1=240000-1=239999=0x0003A97F
系统时钟=12MHz
取值0x7对CTRL寄存器进行编程,即选择系统时钟作为时钟源,并使能系统节拍定时器和系统节拍定时器中断。
这种情况下系统时钟来自IRC时钟。
RELOAD=(系统时钟频率×10ms)-1=(12MHz×10ms)-1=120000-1=119999=0x0001D4BF。