BASIC_TIMER

简介

Nuclei 基础定时器由一个32位自动重载计数器组成,该计数器由可编程预分频器驱动。

它完全独立,可用作通用定时器用于时基生成。

主要特性

基础定时器的主要特性如下:

  • 32位自动重载递增计数器

  • 16位可编程预分频器,用于分频计数器时钟频率

  • 通过两个更新事件源生成中断/DMA请求:

    • 计数器溢出

    • 软件生成的事件

基础定时器的框图如图 5.1: 基础定时器框图所示。

功能描述

时基单元

可编程定时器的主要模块是32位递增计数器及其相关的自动重载寄存器。计数器时钟可以通过预分频器分频。

计数器、自动重载寄存器和预分频器寄存器可以由软件写入或读取。即使在计数器运行时也是如此。

时基单元包括:

  • 计数器寄存器 (TIME_CNT)

  • 预分频器寄存器 (TIME_PSC)

  • 自动重载寄存器 (TIME_ARR)

自动重载寄存器是预加载的。每次尝试写入或读取自动重载寄存器时都会访问预加载寄存器。预加载寄存器的内容永久传输到影子寄存器中,或在每个更新事件UEV时传输,这取决于TIME_CR1寄存器中的AUTO_BUFFER_EN位。当计数器达到溢出值且TIME_CR1寄存器中的UPD_EVT_DIS位等于0时,会发送更新事件。它也可以由软件生成。每种配置的更新事件生成都有详细描述。

只有当TIME_CR1寄存器中的计数器使能位(CEN)设置时,计数器才由预分频器输出CK_CNT提供时钟。

预分频器描述

预分频器可以将计数器时钟频率除以1到65536之间的任何因子。它基于一个由16位寄存器(在TIME_PSC寄存器中)控制的16位计数器。它可以在运行中更改,因为TIME_PSC控制寄存器是缓冲的。新的预分频比在下一个更新事件时生效。

图6.1 Counter timing diagram with prescaler division is 2 (第9页)给出了当预分频比在运行中更改时计数器行为的示例。

计数模式

计数器从0计数到自动重载值(TIME_ARR寄存器的内容),然后从0重新开始并生成计数器溢出事件。

更新事件可以在每次计数器溢出时生成,或通过在TIME_EGR寄存器中设置UPD_EVT_SW位(通过软件)生成。

UEV事件可以通过在TIME_CR1寄存器中设置UPD_EVT_DIS位由软件禁用。这避免了在向预加载寄存器写入新值时更新影子寄存器。这样,在UPD_EVT_DIS位被写入0之前不会发生更新事件,但是计数器和预分频器计数器都从0重新开始(但预分频率不会改变)。此外,如果TIME_CR1寄存器中的UPD_EVT_SEL(更新请求选择)位被设置,设置UG位会生成更新事件UEV,但EVT_STATUS位不会被设置(因此不会发送中断或DMA请求)。

当更新事件发生时,所有寄存器都会更新,并且更新标志(TIME_SR寄存器中的EVT_STATUS位)被设置(取决于UPD_EVT_SEL位):

  • 预分频器的缓冲区重新加载预加载值(TIME_PSC寄存器的内容)

  • 自动重载影子寄存器使用预加载值(TIME_ARR)更新

以下图显示了当TIME_ARR = 0x3时不同时钟频率下计数器行为的一些示例。

时钟源

计数器时钟由内部时钟(icb_clk)源提供。

CEN(在TIME_CR1寄存器中)和UPD_EVT_SW位(在TIME_EGR寄存器中)是实际控制位,只能由软件更改(除了UPD_EVT_SW保持自动清除)。一旦CEN位被写入1,预分频器就由内部时钟提供时钟。

调试模式

当子系统进入调试模式时,基础定时器计数器要么继续正常工作,要么停止,这取决于接口的状态(dbg_stop_i)。

中断

表 7.1: 基础定时器中断请求 呈现了基础定时器中断请求。

表 7.1: 基础定时器中断请求

中断事件

使能控制位

bsc_tim_sr_r

int_en

中断映射如图 7.1: 基础定时器中断映射图所示。

寄存器

寄存器描述

BASIC_TIMER 寄存器

BASIC_TIMER中的寄存器及其相应的偏移量如表 8.1: BASIC_TIMER中寄存器的偏移地址所示。

表 8.1: BASIC_TIMER中寄存器的偏移地址

偏移量

寄存器名称

功能描述

0x0

CR1

定时器控制寄存器1

0x4

CR2

定时器控制寄存器2

0xC

DIER

DMA/中断使能寄存器

0x10

SR

状态寄存器

0x14

EGR

事件生成寄存器

0x24

CNT

计数器寄存器

0x28

PSC

预分频器寄存器

0x2C

ARR

自动重载寄存器

0x30

IP_VERSION

IP版本

CR1

地址偏移:0x0

表 8.2: CR1的格式

字段

位

访问

复位值

描述

CEN

0

R/W

0x0

计数器使能

  • 1’b0:计数器禁用

  • 1’b1:计数器使能

注意:当更新事件发生时,在单脉冲模式下此位被自动清除

UPD_EVT_DIS

1

R/W

0x0

更新事件禁用

  • 1’b0:更新事件使能。更新事件由以下事件之一生成:

    1. 事件1:计数器溢出

    2. 事件2:设置UG位

  • 缓冲寄存器然后加载其预加载值

  • 1’b1:更新事件禁用。不生成更新事件,影子寄存器(ARR/PSC)保持其值。

注意: - 1.time_counter被溢出或UG位复位 - 2.预分频器计数器被UG位复位

UPD_EVT_SEL

2

R/W

0x0

更新事件源选择

  • 1’b0:以下任何事件都会生成更新中断或DMA请求(如果使能):

    1. 事件1:计数器溢出

    2. 事件2:通过软件设置UG位

  • 1’b1:只有计数器溢出生成更新中断或DMA请求(如果使能)

OPM

3

R/W

0x0

单脉冲模式

  • 1’b0:计数器在更新事件时不停止

  • 1’b1:计数器在下一个更新事件时停止计数,同时清除CEN位

保留

6:4

/

0x0

/

AUTO_BUFFER_EN

7

R/W

0x0

自动缓冲使能

  • 1’b0:TIMx_ARR寄存器未缓冲

  • 1’b1:TIMx_ARR寄存器被缓冲

保留

31:8

/

0x0

/

CR2

地址偏移:0x4

表 8.3: CR2的格式

字段

位

访问

复位值

描述

保留

3:0

/

0x0

/

MMS

6:4

R/W

0x0

主模式选择

这些位用于选择要在主模式下发送到从定时器以进行同步的信息(TRGO)。 组合如下: - 3’b000:复位 - TIME_EGR寄存器的UG位用作触发输出(TRGO) - 3’b001:使能 - TIEM_CR1[0]的CEN位用作触发输出(TRGO) - 3’b010:更新 - 更新事件被选择为触发输出(TRGO)

保留

31:7

/

0x0

/

DIER

地址偏移:0xC

表 8.4: DIER的格式

字段

位

访问

复位值

描述

UIE

0

R/W

0x0

使能更新事件用作basic_timer中断

  • 1’b0:当更新事件设置时,不发送中断

  • 1’b1:当更新事件设置时,发送中断

保留

7:1

/

0x0

/

UDE

8

R/W

0x0

使能更新事件用作dma请求

  • 1’b0:当更新事件设置时,不发送中断

  • 1’b1:当更新事件设置时,发送中断

保留

31:9

/

0x0

/

SR

地址偏移:0x10

表 8.5: SR的格式

字段

位

访问

复位值

描述

EVT_STATUS

0

W0C

0x0

更新事件状态

  • 1’b0:没有更新事件发生

  • 1’b1:更新事件中断挂起。当更新事件设置时,此位由硬件设置

注意:此位在更新事件时由硬件设置。它由软件清除。

保留

31:1

/

0x0

/

EGR

地址偏移:0x14

表 8.6: EGR的格式

字段

位

访问

复位值

描述

UG

0

WO

0x0

更新生成

此位可以由软件设置,它被硬件自动清除。 - 1’b0:无动作 - 1’b1:由软件生成更新事件

保留

31:1

/

0x0

/

CNT

地址偏移:0x24

表 8.7: CNT的格式

字段

位

访问

复位值

描述

CNT

31:0

R/W

0x0

配置定时器计数值

PSC

地址偏移:0x28

表 8.8: PSC的格式

字段

位

访问

复位值

描述

PSC

15:0

R/W

0x0

预分频器值

计数器时钟频率CK_CNT等于 fclk / (PSC[15:0] + 1)。 PSC包含在每个更新事件后要加载到活动预分频器寄存器中的值。

保留

31:16

/

0x0

/

ARR

地址偏移:0x2C

表 8.9: ARR的格式

字段

位

访问

复位值

描述

ARR

31:0

R/W

0xffff_ffff

自动重载值

ARR是在每个更新事件后要加载到影子寄存器中的值 (TIME_CR1[7]==1)或在时间内用icb总线更改 (TIME_CR1[7]==0)。

注意:当ARR为零时,time_counter将挂起;当ARR的值更改时,time_counter将继续计数。

IP_VERSION

地址偏移:0x30

表 8.10: IP_VERSION的格式

字段

位

访问

复位值

描述

VERSION_NUM

31:0

RO

0x0001_0201

BASIC_TIMER的IP版本