8. 加强型定时器 (TIMER)

8.1. 概述

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

每个TIMER模块均具备定时器功能和计数器功能、输出比较及输入捕获功能,每个TIMER时钟为系统时钟,计数器是统计外部触发信号的上升沿个数。

备注

只有 TIMER0 支持 Hall 功能及连续脉宽捕捉功能。

8.2. 特性

  • 3路32位通用定时器

    • 24位计数器

    • 8位预分频

  • 可单独配置计时触发条件为内部时钟或者外部输入

  • 支持脉冲捕获及宽度测量,检测脉冲极性可配

  • 支持脉冲发送功能,可作为PWM使用

  • TIMER0支持HALL功能,可采集霍尔传感器

  • TIMER0~1输出可作为外部触发事件信号

  • 定时器溢出脉冲输出,可用于触发ADC

8.3. 功能描述

8.3.1. 模块结构框图

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

图 7 TIMER模块结构框图

8.3.2. 定时器

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

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

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

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

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

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

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

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

图 8 所示。

../../_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 定时器工作示意图

8.3.3. 计数器

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

  • 将控制寄存器(CRx)中MODEx位配置为计数器,CLKSRCx位计数源选择配置为外部的触发信号的上升沿。此时,对应TIMER将以配置为CNT引脚外部输入的上升沿作为计数目标。

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

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

    • 通过PORTX_FUNC寄存器将引脚切换为指定数字功能。

  • 通过装载值寄存器(LOADx)设置计数目标值。

  • 使能寄存器(EN)对应位使能为1,对应TIMERx开始递减计数,计数到0时,产生中断,同时重新装载计数值,进行下一周期计数。

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

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

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

示意图如 图 9 所示。

../../_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

图 9 计数器工作示意图

8.3.4. 级联

当TIMER无法满足计数宽度或时间长度时,可以通过级联方式,使计数周期为TIMER位宽相乘的关系。最高支持两级级联。

使用方式如下:

  • TIMERn根据需要设置为定时器或计数器模式

  • TIMERn+1设置为级联模式(CLKSRCx位配置为使用上一路计数器的进位标志)

  • LOADn = 目标计数值A

  • LOADn+1 = 目标计数值B,总计数周期为A*B

  • 使能TIMERn+1中断

  • 使能TIMERn+1

  • 使能TIMERn

  • TIMERn+1中断产生,在中断程序中使能TIMERn中断

  • TIMERn中断产生,计数周期完成

示意图如 图 10 所示:

../../_images/%E7%BA%A7%E8%81%94%E6%A8%A1%E5%BC%8F%E5%B7%A5%E4%BD%9C%E7%A4%BA%E6%84%8F%E5%9B%BE.svg

图 10 级联模式工作示意图

8.3.5. 脉冲发送

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

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

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

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

  • TIMER初始化

    • 指定要被设置的定时器

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

    • 设置定时周期

  • 输出比较功能初始化

    • 指定要被设置的定时器

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

    • 设置初始输出电平

  • 启动定时器

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

示意图如 图 11 所示:

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

图 11 脉冲发送示意图

8.3.6. 脉冲捕捉

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

使用方式如下:

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

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

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

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

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

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

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

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

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

../../_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

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

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

../../_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

图 13 单次低电平捕捉示意图

8.3.7. 霍尔接口

TIMER0模块提供了HALL接口功能,能够自动记录脉冲变化间隔,并产生中断。

使用方式如下:

  • HALL功能为指定引脚,且不同封装可能有所差异,具体引脚详见管脚排布:

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

    • 通过PORTX_FUNC寄存器将引脚切换为HALL功能

  • 配置HALLSR寄存器,设置对应HALL输入信号的原状态

  • 配置TIMER0装载值寄存器(LOADx)

  • 使能HALL模式控制寄存器中输入HALL信号触发使能位(HALLEN)

  • 清除输入HALL信号触发中断的状态(HALLIF)

  • 使能HALL中断(HALLIE)

  • TIMER0使能(EN)

  • 当外部HALLX引脚产生指定电平变化时,将(计数器加载值-计数器当前值)的结果保存到寄存器HALLDR中,计数器复位到加载值重新计数,并产生TIMER中断。同时HALLIF寄存器IFx将产生对应标示位,标识对应引脚产生电平变化。

记录示意图如 图 14 所示。

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

图 14 HALL记录值

HALL0、HALL1、HALL2是HALL功能的三个输入引脚,任意一个HALL引脚上出现跳变沿时,将(计数器加载值-计数器当前值)的结果保存到寄存器HALLDR中,并且计数器复位到加载值重新计数。

HALL0~2信号输入同时支持连接至CMP0~2,可通过ACMPCR2寄存器HALLx位配置,可选择为CMPxOUT引脚或者HALL IO引脚。

../../_images/HALL%E5%AF%B9%E5%BA%94%E5%85%B3%E7%B3%BB%E5%9B%BE.svg

图 15 HALL对应关系图

8.3.8. 中断配置与清除

每路TIMER均具备独立中断,通过中断使能寄存器IE进行各TIMER中断使能。通过中断状态寄存器IF进行中断查询及清除。

TIMER中断

可通过配置中断使能寄存器IEx相应位使能中断。当检测到中断触发条件时,中断标志寄存器IFx相应位中置1。如需清除此标志,需在相应标志位中写1清零(R/W1C),否则中断在开启状态下会一直进入。

HALL中断

可通过配置HALL模式控制寄存器对应位设置输入HALLx信号触发中断的条件:上升沿、下降沿、上升沿和下降沿。可通过配置HALL中断使能寄存器HALLIE相应位使能中断。当检测到中断触发条件时,HALL中断标志寄存器HALLIF相应位中置1。如需清除此标志,需在相应标志位中写1清零(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

8.5. 寄存器描述

8.5.1. LOAD寄存器

偏移: 0x00

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

DATA

15

14

13

12

11

10

9

8

DATA

7

6

5

4

3

2

1

0

DATA

位域

名称

类型

描述

31:24

RO

保留位

23:0

DATA

R/W

CNTUx的初始值

8.5.2. VALUE寄存器

偏移: 0x04

复位值: 0x00FFFFFF

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

CNTU

15

14

13

12

11

10

9

8

CNTU

7

6

5

4

3

2

1

0

CNTD

位域

名称

类型

描述

31:24

RO

保留位

23:8

CNTU

RO

计数器的当前值

7:0

CNTD

RO

计数器的当前值。CNTD每次记到0时,CNTU才翻转一次

8.5.3. 控制寄存器CTRL

偏移: 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

EDGESEL

MODE

SRCSEL

位域

名称

类型

描述

31:6

RO

保留位

5:4

EDGESEL

R/W

输入脉冲测量模式下,选择启动计数的沿。

00:检测到上升沿或者下降沿后开始计数

01:检测到上升沿开始计数

10:检测到下降沿开始计数

3:2

MODE

R/W

定时器工作模式。

00:普通定时器模式

01:输入脉冲测量模式(仅当PINO>x时才可以配置为这个值)

10:输出PWM模式(仅当PONO>x时才可以配置为这个值)

1:0

SRCSEL

R/W

定时器计数触发选择

00:使用内部系统时钟上升沿

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

PIFINTMSK

PIRINTMSK

POT0INTMSK

TOINTMSK

位域

名称

类型

描述

31:5

RO

保留位

4

PIFINTMSK

R/W

输入脉冲下降沿中断屏蔽(当PINO>x时,配置此位才生效)

0:屏蔽

1:不屏蔽

3

PIRINTMSK

R/W

输入脉冲上升沿中断屏蔽(当PINO>x时,配置此位才生效)

0:屏蔽

1:不屏蔽

2

RO

保留位

1

POT0INTMSK

R/W

输出PWM翻转点0中断屏蔽(当PONO>x时,配置此位才生效)

0:屏蔽

1:不屏蔽

0

TOINTMSK

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

PIFINTST

PIRINTST

POT0INTST

TOINTST

位域

名称

类型

描述

31:5

RO

保留位

4

PIFINTST

R,W1C

输入脉冲下降沿中断状态(当PINO>x时,配置此位才生效)

1:中断发生

0:中断未发生

3

PIRINTST

R,W1C

输入脉冲上升沿中断状态(当PINO>x时,配置此位才生效)

1:中断发生

0:中断未发生

2

RO

1

POT0INTST

R,W1C

输出PWM翻转点0中断状态(当PONO>x时,配置此位才生效)

1:中断发生

0:中断未发生

0

TOINTST

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

POMSK

POINITVAL

POMSKVAL

位域

名称

类型

描述

31:3

RO

保留位

2

POMSK

R/W

PWM输出屏蔽位。将PWM的输出屏蔽到POMSKVALx指定的值。当PONO>x时才有效。

1

POINITVAL

R/W

PWM输出的起始值。当PONO>x时才有效。

0

POMSKVAL

R/W

PWM输出屏蔽值。当PONO>x时才有效。

8.5.8. OCMAT控制寄存器

偏移: 0x20

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

POTVAL

15

14

13

12

11

10

9

8

POTVAL

7

6

5

4

3

2

1

0

POTVAL

位域

名称

类型

描述

31:24

RO

保留位

23:0

POTVAL

R/W

PWM输出高电平宽度。当POTVAL==0时,占空比为0;当POTVAL>CNTU时,占空比为100%。

8.5.9. ICLOW寄存器

偏移: 0x28

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

PLOW

15

14

13

12

11

10

9

8

PLOW

7

6

5

4

3

2

1

0

PLOW

位域

名称

类型

描述

31:24

RO

保留位

23:0

PLOW

R/W

输入脉冲的低电平长度。当PINO>x时才有效,否则为常0。当输入脉冲的上升沿来到时,自动更新。

8.5.10. ICHIGH寄存器

偏移: 0x2C

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

PHIGH

15

14

13

12

11

10

9

8

PHIGH

7

6

5

4

3

2

1

0

PHIGH

位域

名称

类型

描述

31:24

RO

23:0

PHIGH

RO

输入脉冲的高电平长度。当PINO>x时才有效,否则为常0。当输入脉冲的下降沿来到时,自动更新。

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

LDVALD

位域

名称

类型

描述

31:24

RO

23:0

LDVALD

R/W

计数器 CNTDx计数初始值,也是定时器x计数低八位的初值

8.5.12. 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

HALLIE

位域

名称

类型

描述

31:2

RO

RESERVED

1:0

HALLIE

R/W

HALL中断使能。仅当定义HALL时有效,否则为只读,且为常0。

1:HALL中断使能

0:HALL中断不使能

8.5.13. 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

HALLINTST2

HALLINTST1

HALLINTST0

位域

名称

类型

描述

31:6

RO

RESERVED

2

HALLINTST2

R/W

输入HALL信号2触发中断的状态

1

HALLINTST1

R/W

输入HALL信号1触发中断的状态

0

HALLINTST0

R/W

输入HALL信号0触发中断的状态

8.5.14. 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

HALLMD

位域

名称

类型

描述

31:2

RO

RESERVED

1:0

HALLEN

R/W

输入HALL信号触发使能

1’b0:不触发

1’b1:触发

8.5.15. HALLDR寄存器

偏移: 0x410

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

HALLDR

15

14

13

12

11

10

9

8

HALLDR

7

6

5

4

3

2

1

0

HALLDR

位域

名称

类型

描述

31:24

RO

RESERVED

23:0

HALLDR

R/W

HALL组1触发时,通道0计数器的计数值。仅当定义HALL时有效,否则为只读,且为常0。

由于本模块为减计数,通道0计数器作为HALL功能使用时,该计数值=(计数器加载值-触发HALL沿时计数器当前值)

8.5.16. 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

HALLSR2

HALLSR1

HALLSR0

位域

名称

类型

描述

31:3

RO

RESERVED

2

HALLSR2

R/W

输入HALL信号2的状态

1

HALLSR1

R/W

输入HALL信号1的状态

0

HALLSR0

R/W

输入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

IC_TIMER2

IC_TIMER1

IC_TIMER0

位域

名称

类型

描述

31:3

RO

2

IC_TIMER2

RO

Timer2输入捕获信号状态

1

IC_TIMER1

RO

Timer1输入捕获信号状态

0

IC_TIMER0

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

TIMER2_EN

TIMER1_EN

TIMER0_EN

位域

名称

类型

描述

31: 3

RO

RESERVED

2

TIMER2_EN

R/W

定时器timer2使能。

1

TIMER1_EN

R/W

定时器timer1使能。

0

TIMER0_EN

R/W

定时器timer0使能。