8. 加强型定时器 (TIMER)
8.1. 概述
SWM221 系列所有型号 TIMER 操作均相同,不同型号具备 TIMER 数量可能不同。使用前需使能 TIMER 模块时钟。
每个 TIMER 模块均具备定时器功能和计数器功能、输出比较及输入捕获功能,每个 TIMER 时钟为系统时钟,计数器是统计外部触发信号的上升沿个数。
备注
只有 TIMER0 支持 Hall 功能及连续脉宽捕捉功能。
8.2. 特性
3 路 32 位通用定时器
24位计数器
8位预分频
可单独配置计时触发条件为内部时钟或者外部输入
支持脉冲捕获及宽度测量,检测脉冲极性可配
支持脉冲发送功能,可作为PWM使用
TIMER0 支持 HALL 功能,可采集霍尔传感器
输出可作为外部触发事件信号
定时器溢出脉冲输出,可用于触发 ADC
8.3. 功能描述
8.3.1. 模块结构框图
TIMER 模块结构如图 8.1 所示。
图 8.1 TIMER模块结构框图
8.3.2. 定时器
使用 TIMER 作为定时器时,为递减计数。流程如下:
将控制寄存器(CR)中 MODE 位配置为定时器,CLKSRC 位配置计数源选择,配置为使用系统时钟作为计数源。
通过装载值寄存器(LOAD)设置计数起始值。
使能寄存器(EN)对应位使能为1。
对应 TIMER 开始递减计数,计数到 0 时,产生中断,同时重新装载计数值,进行下一周期计数。
在计数过程中,可通过对当前值寄存器(VALUE)进行读取,获取当前计数值。
定时器计数过程中改变装载值寄存器(LOAD)值,将在下个计数周期(计数到 0 重新装载)生效,不会改变本周期计数值。
定时器计数过程中,可以通过 HALT 寄存器控制位置 1 暂停指定通道计数,置 0 后继续计数。
如图 8.2 所示。
图 8.2 定时器工作示意图
8.3.3. 计数器
使用 TIMER 作为计数器时,为递减计数。流程如下:
将控制寄存器(CR)中 MODE 位配置为计数器,CLKSRC 位计数源选择配置为外部的触发信号的上升沿。
针对外部信号输入引脚进行如下操作:
配置 PORTCON 模块中 INEN 寄存器使能引脚输入功能。
通过 PORTX_FUNC 寄存器将引脚切换为指定数字功能。
通过装载值寄存器(LOAD)设置计数目标值。
使能寄存器(EN)对应位使能为1,对应 TIMER 在每个输入信号的上升沿递减计数,计数到 0 时,产生中断,同时重新装载计数值,进行下一周期计数。
在计数过程中,可通过对当前值寄存器(VALUE)进行读取,获取当前计数值。
定时器计数过程中改变装载值寄存器(LOAD)值,将在下个计数周期(计数到 0 重新装载)生效,不会改变本周期计数值。
计数器使用过程中,可以通过 HALT 寄存器控制位置1暂停指定通道计数,置 0 后继续计数。
示意图如图 8.3 所示。
图 8.3 计数器工作示意图
8.3.4. 脉冲发送
所有 TIMER 模块均支持脉冲发送功能,可发送指定脉宽的方波。该计数器为向下计数。使用方式如下:
针对外部信号输入引脚进行如下操作
配置 PORTCON 模块中使能引脚输出功能
通过 PORTX_FUNC 寄存器将引脚切换为 TIMER 对应数字功能
TIMER 初始化
指定要被设置的定时器
设置 TIMER 的工作模式为 OC (输出比较) 模式
设置定时周期
输出比较功能初始化
指定要被设置的定时器
设置当计数器的值递减到 MATCH 时引脚输出电平翻转
设置初始输出电平
启动定时器
每次周期结束时,会更新翻转电平配置
示意图如图 8.4 所示:
图 8.4 脉冲发送示意图
8.3.5. 脉冲捕捉
所有 TIMER 模块均支持用于捕捉外部脉宽,可记录外部单个脉冲宽度。
使用方式如下:
针对外部信号输入引脚进行如下操作
配置 PORTCON 模块中 INEN 寄存器使能引脚输入功能
通过 PORTX_FUNC 寄存器将引脚切换为TIMER对应数字功能
设置中断使能寄存器 (IE),使能中断
使能寄存器 (EN) 对应位使能,启动捕捉功能
当指定引脚出现变化沿时,开始记录宽度,再次出现沿时,将对应种类的脉宽长度记录于 ICLOW 或 ICHIGH 寄存器,并产生中断。
进入中断,读取脉冲长度寄存器,获取指定种类的脉冲宽度
如果不操作EN位,则持续记录电平宽度,直至EN位关闭。
捕捉高电平示意图如图 8.5 所示。
图 8.5 单次高电平捕捉示意图
低电平示意图如图 8.6 所示。
图 8.6 单次低电平捕捉示意图
8.3.6. 霍尔 (HALL) 接口
TIMER0 模块提供了 HALL 接口功能,能够自动记录脉冲变化间隔,并产生中断。
使用方式如下:
HALL 功能为指定引脚,且不同封装可能有所差异,具体引脚详见管脚排布:
配置 PORTCON 模块中 INEN 寄存器使能引脚输入功能
通过 PORTX_FUNC 寄存器将引脚切换为 HALL 功能
配置 HALLSR 寄存器,设置对应 HALL 输入信号的原状态
配置 TIMER0 装载值寄存器 (LOAD)
使能 HALL 模式控制寄存器中输入 HALL 信号触发使能位 (HALLEN)
清除输入 HALL 信号触发中断的状态 (HALLIF)
使能 HALL 中断(HALLIE)
TIMER0 使能 (EN.EN_TIMR0)
当外部 HALL 引脚产生指定电平变化时,将 (计数器加载值 - 计数器当前值) 的结果保存到寄存器 HALLDR 中, 计数器复位到加载值重新计数,并产生对应的中断。同时 HALLIF 寄存器将产生对应标示位,标识对应引脚产生电平变化。
记录示意图如图 8.7 所示。
图 8.7 HALL记录值
HALL_IN0、HALL_IN1、HALL_IN2 是 HALL 功能的三个输入引脚,任意一个 HALL 引脚上出现跳变沿时,将(计数器加载值 - 计数器当前值) 的结果保存到寄存器 HALLDR 中,并且计数器复位到加载值重新计数。
8.3.7. 中断配置与清除
每路 TIMER 均具备独立中断,通过中断使能寄存器 IE 进行各 TIMER 中断使能。通过中断状态寄存器 IF 进行中断查询及清除。
TIMER中断
可通过配置中断使能寄存器 IE 相应位使能中断。当检测到中断触发条件时,中断标志寄存器 IF 相应位中置 1 。 如需清除此标志,需在相应标志位中写 1 清 0(R/W1C),否则中断在开启状态下会一直进入。
HALL中断
可通过配置 HALL 模式控制寄存器对应位设置输入 HALL信号触发中断的条件:上升沿、下降沿、上升沿和下降沿。 可通过配置 HALL 中断使能寄存器 HALLIE 相应位使能中断。 当检测到中断触发条件时,HALL 中断标志寄存器 HALLIF 相应位中置 1 。 如需清除此标志,需在相应标志位中写 1 清 0 (R/W1C),否则中断在开启状态下会一直进入。
8.4. 寄存器映射
名称 |
偏移 |
复位值 |
---|---|---|
TIMER0 BASE: 0x40043800 TIMER1 BASE: 0x40043840 TIMER2 BASE: 0x40043880 |
||
LOAD |
0x00 |
0x00000000 |
VALUE |
0x04 |
0x00FFFFFF |
CR |
0x08 |
0x00000000 |
IE |
0x10 |
0x00000000 |
IF |
0x14 |
0x00000000 |
HALT |
0x18 |
0x00000000 |
OCCR |
0x1C |
0x00000000 |
OCMAT |
0x20 |
0x00000000 |
ICLOW |
0x28 |
0x00000000 |
ICHIGH |
0x2C |
0x00000000 |
PREDIV |
0x30 |
0x00000000 |
共用寄存器 |
||
HALLIE |
0x400 |
0x00000000 |
HALLIF |
0x408 |
0x00000000 |
HALLEN |
0x40C |
0x00000000 |
HALLDR |
0x410 |
0x00000000 |
HALLSR |
0x41C |
0x00000000 |
ICSR |
0x420 |
0x00000000 |
EN |
0x440 |
0x00000000 |
重要
只有 TIMER0 有 HALL 接口功能。HALLIE, HALLIF, HALLEN, HALLDR, 以及 HALLSR 等寄存器功能只在 TIMER0 实现。
8.5. 寄存器描述
8.5.1. 装载值寄存器 (LOAD)
偏移: 0x00 |
复位值: 0x00000000 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
VALUE[23:16] |
|||||||
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
VALUE[15:8] |
|||||||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
VALUE[7:0] |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31:24 |
- |
RO |
保留,必须保持复位值。 |
23:0 |
VALUE |
R/W |
定时器装载值。 |
8.5.2. 当前计数值寄存器 (VALUE)
偏移: 0x04 |
复位值: 0x00FFFFFF |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
VALUE[23:16] |
|||||||
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
VALUE[15:8] |
|||||||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
VALUE[7:0] |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31:24 |
- |
RO |
保留,必须保持复位值。 |
23:0 |
VALUE |
RO |
定时器当前值。 |
8.5.3. 控制寄存器 (CR)
偏移: 0x08 |
复位值: 0x00000000 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
ICEDGE |
MODE |
CLKSRC |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31:6 |
- |
RO |
保留,必须保持复位值。 |
5:4 |
ICEDGE |
R/W |
输入脉冲测量模式下,选择启动计数的沿。 00: 检测到上升沿或者下降沿后开始计数 01: 检测到上升沿开始计数 10: 检测到下降沿开始计数 11: 保留 |
3:2 |
MODE |
R/W |
定时器工作模式。 00: 普通定时器模式 01: 输入脉冲测量模式 10: 输出PWM模式 |
1:0 |
CLKSRC |
R/W |
定时器计数触发选择 00: 使用内部系统时钟上升沿 01: 保留 10: 使用外部触发信号的上升沿 11: 保留 |
8.5.4. 中断使能寄存器 (IE)
偏移: 0x10 |
复位值: 0x00000000 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
ICFIE |
ICRIE |
OCIE |
TOIE |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31:5 |
- |
RO |
保留,必须保持复位值。 |
4 |
ICFIE |
R/W |
输入捕获,下降沿中断 0:屏蔽 1:不屏蔽 |
3 |
ICRIE |
R/W |
输入捕获,上升沿中断 0:屏蔽 1:不屏蔽 |
2 |
- |
RO |
保留,必须保持复位值。 |
1 |
OCIE |
R/W |
输出比较翻转点中断屏蔽 0:屏蔽 1:不屏蔽 |
0 |
TOIE |
R/W |
计数器溢出中断屏蔽 0:屏蔽 1:不屏蔽 |
8.5.5. 中断状态寄存器 (IF)
偏移: 0x14 |
复位值: 0x00000000 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
ICFIF |
ICRIF |
OCIF |
TOIF |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31:5 |
- |
RO |
保留,必须保持复位值。 |
4 |
ICFIF |
R/W1C |
输入捕获,下降沿中断状态 1:中断发生 0:中断未发生 |
3 |
ICRIF |
R/W1C |
输入捕获,上升沿中断状态 1:中断发生 0:中断未发生 |
2 |
- |
RO |
保留,必须保持复位值。 |
1 |
OCIF |
R/W1C |
输出比较翻转点中断状态 1:中断发生 0:中断未发生 |
0 |
TOIF |
R/W1C |
计数器溢出中断状态 1:中断发生 0:中断未发生 |
8.5.6. 定时器暂停控制寄存器 (HALT)
偏移: 0x18 |
复位值: 0x00000000 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
HALT |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31:1 |
- |
RO |
保留,必须保持复位值。 |
0 |
HALT |
R/W |
定时器暂停控制 1:暂停当前定时器的计数 0:当前定时器正常减计数 |
8.5.7. 输出控制信号寄存器 (OCCR)
偏移: 0x1C |
复位值: 0x00000000 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
FORCEEN |
INITLVL |
FORCELVL |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31:3 |
- |
RO |
保留,必须保持复位值。 |
2 |
FORCELVL |
R/W |
强制输出使能。 |
1 |
INITLVL |
R/W |
初始输出电平。 |
0 |
FORCELVL |
R/W |
强制输出电平。 |
8.5.8. 输出比较值寄存器 (OCMAT)
偏移: 0x20 |
复位值: 0x00000000 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
OCMAT[23:16] |
|||||||
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
OCMAT[15:8] |
|||||||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
OCMAT[7:0] |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31:24 |
- |
RO |
保留,必须保持复位值。 |
23:0 |
OCMAT |
R/W |
OCMAT 寄存器与 VALUE 寄存器进行比较并输出比较结果值到对应的输出 TO 引脚。 当 VALUE 寄存器值递减至 OCMAT 寄存器值时,翻转输出电平。 |
8.5.9. 输入脉冲低电平长度寄存器 (ICLOW)
偏移: 0x28 |
复位值: 0x00000000 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
ICLOW[23:16] |
|||||||
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
ICLOW[15:8] |
|||||||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
ICLOW[7:0] |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31:24 |
- |
RO |
保留,必须保持复位值。 |
23:0 |
ICLOW |
RO |
输入脉冲的低电平长度。当输入脉冲的上升沿来到时,自动更新。 |
8.5.10. 输入脉冲高电平长度寄存器 (ICHIGH)
偏移: 0x2C |
复位值: 0x00000000 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
ICHIGH[23:16] |
|||||||
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
ICHIGH[15:8] |
|||||||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
ICHIGH[7:0] |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31:24 |
- |
RO |
保留,必须保持复位值。 |
23:0 |
ICHIGH |
RO |
输入脉冲的高电平长度。当输入脉冲的下降沿来到时,自动更新。 |
8.5.11. 预分频寄存器 (PREDIV)
偏移: 0x30 |
复位值: 0x00000000 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
PREDIV |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31:8 |
- |
RO |
保留,必须保持复位值。 |
7:0 |
PREDIV |
R/W |
计数器预分频值: 0: 1 分频 1: 2 分频 ... 254: 255 分频 255: 256 分频 |
8.5.12. HALL 中断使能寄存器 (HALLIE)
偏移: 0x400 |
复位值: 0x00000000 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
IE |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31:1 |
- |
RO |
保留,必须保持复位值。 |
0 |
IE |
R/W |
HALL 中断使能。 1:HALL 中断使能 0:HALL 中断不使能 |
8.5.13. HALL 中断状态寄存器 (HALLIF)
偏移: 0x408 |
复位值: 0x00000000 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
IN2 |
IN1 |
IN0 |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31:6 |
- |
RO |
保留,必须保持复位值。 |
2 |
IN2 |
R/W1C |
HALL 输入信号 2 触发中断的状态。 |
1 |
IN1 |
R/W1C |
HALL 输入信号 1 触发中断的状态。 |
0 |
IN0 |
R/W1C |
HALL 输入信号 0 触发中断的状态。 |
8.5.14. HALL 模式控制寄存器 (HALLEN)
偏移: 0x40C |
复位值: 0x00000000 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
EN |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31:1 |
- |
RO |
保留,必须保持复位值。 |
0 |
EN |
R/W |
HALL 输入信号触发功能使能 0:禁止 1:使能 |
8.5.15. HALL 数据寄存器 (HALLDR)
偏移: 0x410 |
复位值: 0x00000000 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
HALLDR[23:16] |
|||||||
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
HALLDR[15:8] |
|||||||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
HALLDR[7:0] |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31:24 |
- |
RO |
保留,必须保持复位值。 |
23:0 |
HALLDR |
RO |
HALL 触发时,通道计数器的计数值。 HALL 输入跳变沿将计数器( 加载值 - 当前值 ) 存入此寄存器 |
8.5.16. HALL 输入信号状态寄存器 (HALLSR)
偏移: 0x41C |
复位值: 0x00000000 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
IN2 |
IN1 |
IN0 |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31:3 |
- |
RO |
保留,必须保持复位值。 |
2 |
IN2 |
RO |
HALL 输入信号 2 当前状态。 |
1 |
IN1 |
RO |
HALL输入信号 1 当前状态。 |
0 |
IN0 |
RO |
HALL 输入信号 0 当前状态。 |
8.5.17. 输入捕获信号状态寄存器 (ICSR)
偏移: 0x420 |
复位值: 0x00000000 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
ICSR_TIMR2 |
ICSR_TIMR1 |
ICSR_TIMR0 |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31:3 |
- |
RO |
保留,必须保持复位值。 |
2 |
ICSR_TIMR2 |
RO |
TIMER2 输入捕获信号当前状态 |
1 |
ICSR_TIMR1 |
RO |
TIMER1 输入捕获信号当前状态 |
0 |
ICSR_TIMR0 |
RO |
TIMER0 输入捕获信号当前状态 |
8.5.18. 使能寄存器 (EN)
偏移: 0x440 |
复位值: 0x00000000 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
EN_TIMR2 |
EN_TIMR1 |
EN_TIMR0 |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31: 3 |
- |
RO |
保留,必须保持复位值。 |
2 |
EN_TIMR2 |
R/W |
TIMER2 使能。 |
1 |
EN_TIMR1 |
R/W |
TIMER1 使能。 |
0 |
EN_TIMR0 |
R/W |
TIMER0 使能。 |
备注
在定时器模式和输出比较模式下,向 EN_TIMRx 位写 1 会马上启动计数器,开始计数。 在输入捕获模式下,向 EN_TIMRx 位写 1,该位并不会马上变 1,而是等到输入脉冲的上升沿或者下降沿到来后才变 1,计数器开始计数。