9. 基础定时器 (BTIMER)

9.1. 概述

SWM221 系列所有型号 BTIMER 操作均相同,不同型号 BTIMER 数量可能不同。使用前需使能 BTIMER 模块时钟。

每个 BTIMER 模块均具备定时器功能,并具备一个 8 位分频器,每个定时器具备独立中断源。

9.2. 特性

  • 4 路 24 位通用定时器

  • 每路均具备独立 8 位预分频

  • 独立中断源

  • PWM输出功能

9.3. 功能描述

9.3.1. 模块结构

BTIMER 模块结构如图 9.1 所示。

../../_images/BTIMER%E6%A8%A1%E5%9D%97%E7%BB%93%E6%9E%84%E5%9B%BE.svg

图 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 所示。

../../_images/%E5%AE%9A%E6%97%B6%E5%99%A8%E5%B7%A5%E4%BD%9C%E7%A4%BA%E6%84%8F%E5%9B%BE.svg

图 9.2 定时器工作示意图

../../_images/%E5%AE%9A%E6%97%B6%E5%99%A8RELOAD%E5%B7%A5%E4%BD%9C%E7%A4%BA%E6%84%8F%E5%9B%BE.svg

图 9.3 定时器 RELOAD 工作示意图

9.3.3. 脉冲发送

所有 BTIMER 模块均支持脉冲发送功能,可发送指定脉宽的方波。该计数器为向下计数。使用方式如下:

  • 针对外部信号输入引脚进行如下操作

    • 配置 PORTCON 模块中使能引脚输出功能

    • 通过 PORTX_FUNC 寄存器将引脚切换为 BTIMER 对应数字功能

  • BTIMER 初始化

    • 指定要被设置的定时器

    • 设置 BTIMER 的工作模式为 OC(输出比较)模式

    • 设置定时周期

    • 输出比较功能初始化

    • 指定要被设置的定时器

    • 设置当计数器的值递减到 OCMAT 时引脚输出电平翻转

    • 设置初始输出电平

  • 启动定时器

  • 每次周期结束时,会更新翻转电平配置

示意图如 图 9.4 所示(OCCR.INITLVL = 0):

../../_images/%E8%84%89%E5%86%B2%E5%8F%91%E9%80%81%E7%A4%BA%E6%84%8F%E5%9B%BE.svg

图 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 使能。