9. 基础定时器 (BTIMER)
9.1. 概述
SWM221 系列所有型号 BTIMER 操作均相同,不同型号 BTIMER 数量可能不同。使用前需使能 BTIMER 模块时钟。
每个 BTIMER 模块均具备定时器功能,并具备一个 8 位分频器,每个定时器具备独立中断源。
9.2. 特性
4 路 24 位通用定时器
每路均具备独立 8 位预分频
独立中断源
PWM输出功能
9.3. 功能描述
9.3.1. 模块结构
BTIMER 模块结构如图 9.1 所示。
图 9.1 BTIMER 模块结构框图
9.3.2. 定时器
使用 BTIMER 作为定时器时,为递减计数,计数源为系统时钟。
使用流程如下:
通过预分频寄存器(PREDIV)设置预分频目标值(8位),对系统时钟进行分频。
通过装载值寄存器(LOAD)设置计数目标值(24位)。
通过中断使能寄存器(IE)配置中断使能。
通过使能寄存器(EN)进行对应 BTIMER 使能。
对应 BTIMER 开始递减计数,计数到 0 时,产生中断,同时重新从装载值寄存器(LOAD)装载计数值,进行下一周期计数。
中断通过中断状态寄存器(IF)进行查询(IE 使能情况下),同时对该寄存器进行写 1 操作清除中断。
在计数过程中,可通过对当前值寄存器(VALUE)进行读取,获取当前计数值。
定时器计数过程中改变装载值寄存器(LOAD.VALUE)值,同时向装载位(RELOAD)写 1, BTIMER 将立刻重新装载改变值并计数(RELAOD 位硬件自动清 0),当前计数周期被中断。 若不对装载位(RELOAD)进行操作,则改变值将在下个计数周期(计数到 0 重新装载)生效,不会改变本周期计数值。
图 9.2 定时器工作示意图
图 9.3 定时器 RELOAD 工作示意图
9.3.3. 脉冲发送
所有 BTIMER 模块均支持脉冲发送功能,可发送指定脉宽的方波。该计数器为向下计数。使用方式如下:
针对外部信号输入引脚进行如下操作
配置 PORTCON 模块中使能引脚输出功能
通过 PORTX_FUNC 寄存器将引脚切换为 BTIMER 对应数字功能
BTIMER 初始化
指定要被设置的定时器
设置 BTIMER 的工作模式为 OC(输出比较)模式
设置定时周期
输出比较功能初始化
指定要被设置的定时器
设置当计数器的值递减到 OCMAT 时引脚输出电平翻转
设置初始输出电平
启动定时器
每次周期结束时,会更新翻转电平配置
示意图如 图 9.4 所示(OCCR.INITLVL = 0):
图 9.4 脉冲发送示意图
9.3.4. 中断配置与清除
每路 BTIMER 均具备独立中断,通过中断使能寄存器 IE 进行各 BTIMER 中断使能。通过中断状态寄存器 IF 进行中断查询及清除。
可通过配置中断使能寄存器 IE 使能中断。当 BTIMER 计数到0时,中断标志寄存器 IF 置 1。 如需清除此标志,需在标志位中写 1 清零(R/W1C),否则中断在开启状态下会一直进入。
9.4. 寄存器映射
名称 |
偏移 |
复位值 |
---|---|---|
BTIMER0 BASE:0x40044000 BTIMER1 BASE:0x40044040 BTIMER2 BASE:0x40044080 BTIMER3 BASE:0x400440C0 |
||
LOAD |
0x00 |
0x00000000 |
VALUE |
0x04 |
0x00FFFFFF |
CR |
0x08 |
0x00000000 |
IE |
0x10 |
0x00000000 |
IF |
0x14 |
0x00000000 |
OCCR |
0x1C |
0x00000000 |
OCMAT |
0x20 |
0x00000000 |
PREDIV |
0x30 |
0x00000000 |
共用寄存器 |
||
EN |
0x440 |
0x00000000 |
9.5. 寄存器描述
9.5.1. 装载值寄存器 (LOAD)
偏移: 0x00 |
复位值: 0x00000000 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
RELOAD |
|||||||
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 |
保留,必须保持复位值。 |
24 |
RELOAD |
WO |
0: VALUE 值将在当前计数周期结束后加载至 VALUE 寄存器并计数。 1: VALUE 值将立刻加载至 VALLUE 寄存器并计数。 |
23:0 |
VALUE |
R/W |
定时器装载值。 |
9.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 |
定时器当前值。 |
9.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 |
MODE |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31:4 |
- |
RO |
保留,必须保持复位值 |
3:2 |
MODE |
R/W |
定时器工作模式: 00:普通定时器模式 10:输出PWM模式 |
1:0 |
- |
RO |
保留,必须保持复位值。 |
9.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 |
TO |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31:1 |
- |
RO |
保留,必须保持复位值。 |
0 |
TO |
R/W |
计数器溢出中断使能: 0:禁止中断 1:使能中断 |
9.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 |
TO |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31:1 |
- |
RO |
保留,必须保持复位值。 |
0 |
TO |
R/W |
计数器溢出中断状态: 1:中断已触发 0:中断未触发 |
9.5.6. 输出控制信号寄存器 (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 |
FORCEEN |
R/W |
强制输出使能。 |
1 |
INITLVL |
R/W |
初始输出电平。 |
0 |
FORCELVL |
R/W |
强制输出电平。 |
9.5.7. 输出比较值寄存器 (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 寄存器值时,翻转输出电平。 |
9.5.8. 预分频寄存器 (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 分频 |
9.5.9. 使能寄存器 (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_TIMR3 |
EN_TIMR2 |
EN_TIMR1 |
EN_TIMR0 |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31: 4 |
- |
RO |
保留,必须保持复位值。 |
3 |
EN_TIMR3 |
R/W |
BTIMER3 使能。 |
2 |
EN_TIMR2 |
R/W |
BTIMER2 使能。 |
1 |
EN_TIMR1 |
R/W |
BTIMER1 使能。 |
0 |
EN_TIMR0 |
R/W |
BTIMER0 使能。 |