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: 基础定时器中断请求 呈现了基础定时器中断请求。
中断事件 |
使能控制位 |
|---|---|
bsc_tim_sr_r |
int_en |
中断映射如图 7.1: 基础定时器中断映射图所示。
寄存器
寄存器描述
BASIC_TIMER 寄存器
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
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
CEN |
0 |
R/W |
0x0 |
计数器使能
注意:当更新事件发生时,在单脉冲模式下此位被自动清除 |
UPD_EVT_DIS |
1 |
R/W |
0x0 |
更新事件禁用
注意: - 1.time_counter被溢出或UG位复位 - 2.预分频器计数器被UG位复位 |
UPD_EVT_SEL |
2 |
R/W |
0x0 |
更新事件源选择
|
OPM |
3 |
R/W |
0x0 |
单脉冲模式
|
保留 |
6:4 |
/ |
0x0 |
/ |
AUTO_BUFFER_EN |
7 |
R/W |
0x0 |
自动缓冲使能
|
保留 |
31:8 |
/ |
0x0 |
/ |
CR2
地址偏移:0x4
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
保留 |
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
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
UIE |
0 |
R/W |
0x0 |
使能更新事件用作basic_timer中断
|
保留 |
7:1 |
/ |
0x0 |
/ |
UDE |
8 |
R/W |
0x0 |
使能更新事件用作dma请求
|
保留 |
31:9 |
/ |
0x0 |
/ |
SR
地址偏移:0x10
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
EVT_STATUS |
0 |
W0C |
0x0 |
更新事件状态
注意:此位在更新事件时由硬件设置。它由软件清除。 |
保留 |
31:1 |
/ |
0x0 |
/ |
EGR
地址偏移:0x14
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
UG |
0 |
WO |
0x0 |
更新生成 此位可以由软件设置,它被硬件自动清除。 - 1’b0:无动作 - 1’b1:由软件生成更新事件 |
保留 |
31:1 |
/ |
0x0 |
/ |
CNT
地址偏移:0x24
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
CNT |
31:0 |
R/W |
0x0 |
配置定时器计数值 |
PSC
地址偏移:0x28
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
PSC |
15:0 |
R/W |
0x0 |
预分频器值 计数器时钟频率CK_CNT等于 fclk / (PSC[15:0] + 1)。 PSC包含在每个更新事件后要加载到活动预分频器寄存器中的值。 |
保留 |
31:16 |
/ |
0x0 |
/ |
ARR
地址偏移:0x2C
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
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
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
VERSION_NUM |
31:0 |
RO |
0x0001_0201 |
BASIC_TIMER的IP版本 |