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

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

图 8.1 TIMER模块结构框图

8.3.2. 定时器

使用 TIMER 作为定时器时,为递减计数。流程如下:

  • 将控制寄存器(CR)中 MODE 位配置为定时器,CLKSRC 位配置计数源选择,配置为使用系统时钟作为计数源。

  • 通过装载值寄存器(LOAD)设置计数起始值。

  • 使能寄存器(EN)对应位使能为1。

  • 对应 TIMER 开始递减计数,计数到 0 时,产生中断,同时重新装载计数值,进行下一周期计数。

在计数过程中,可通过对当前值寄存器(VALUE)进行读取,获取当前计数值。

定时器计数过程中改变装载值寄存器(LOAD)值,将在下个计数周期(计数到 0 重新装载)生效,不会改变本周期计数值。

定时器计数过程中,可以通过 HALT 寄存器控制位置 1 暂停指定通道计数,置 0 后继续计数。

图 8.2 所示。

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

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

../../_images/%E8%AE%A1%E6%95%B0%E5%99%A8%E5%B7%A5%E4%BD%9C%E7%A4%BA%E6%84%8F%E5%9B%BE.svg

图 8.3 计数器工作示意图

8.3.4. 脉冲发送

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

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

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

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

  • TIMER 初始化

    • 指定要被设置的定时器

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

    • 设置定时周期

  • 输出比较功能初始化

    • 指定要被设置的定时器

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

    • 设置初始输出电平

  • 启动定时器

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

示意图如图 8.4 所示:

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

图 8.4 脉冲发送示意图

8.3.5. 脉冲捕捉

所有 TIMER 模块均支持用于捕捉外部脉宽,可记录外部单个脉冲宽度。

使用方式如下:

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

    • 配置 PORTCON 模块中 INEN 寄存器使能引脚输入功能

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

  • 设置中断使能寄存器 (IE),使能中断

  • 使能寄存器 (EN) 对应位使能,启动捕捉功能

  • 当指定引脚出现变化沿时,开始记录宽度,再次出现沿时,将对应种类的脉宽长度记录于 ICLOW 或 ICHIGH 寄存器,并产生中断。

  • 进入中断,读取脉冲长度寄存器,获取指定种类的脉冲宽度

  • 如果不操作EN位,则持续记录电平宽度,直至EN位关闭。

捕捉高电平示意图如图 8.5 所示。

../../_images/%E5%8D%95%E6%AC%A1%E9%AB%98%E7%94%B5%E5%B9%B3%E6%8D%95%E6%8D%89%E7%A4%BA%E6%84%8F%E5%9B%BE.svg

图 8.5 单次高电平捕捉示意图

低电平示意图如图 8.6 所示。

../../_images/%E5%8D%95%E6%AC%A1%E4%BD%8E%E7%94%B5%E5%B9%B3%E6%8D%95%E6%8D%89%E7%A4%BA%E6%84%8F%E5%9B%BE.svg

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

../../_images/HALL%E8%AE%B0%E5%BD%95%E5%80%BC.svg

图 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,计数器开始计数。