NRF51822裸机TIMER学习笔记

外设TIMER

时钟介绍

HFCLK:
① 又称之为高速时钟, 是 nRF5X SOC 的主时钟, 一般是 16MHZ。
② HFCLK 时钟有 2 个来源: 一个是内部 RC 振荡器(RC Oscillator),另一个是外部石英振荡器(Crystal Oscillator)。
③ 16MHZ 时钟信号通过高速时钟控制单元处理输出 3 个时钟信号:

	1) 1MHZ 频率的外设时钟 PCLK1M,给 SOC 的外设使用。
	2) 16MHZ 频率的外设时钟 PCLK16M,给 SOC 的外设使用。 
	3) 16MHZ 的 HCLK 的时钟, 供给 CPU 使用

LFCLK:
① 又称之为低速时钟, 是用来作 RTC 计时和唤醒的时钟信号, 频率为32.768K.LFCLK 。
②有 3 个时钟源:

	 1)一个是内部 RC 振荡器,
	 2)另外一个是外部石英振荡器,
	 3)还有一个是通过 16MHZ 的主时钟频率分频得到 32.768K 的信号。 

③LFCLK 通过低速时钟控制单元输出 32K 的时钟信号给外设使用。

NRF51822定时器

三个定时器,分别是:TIMER0,TIMER1,TIMER2.
不同位宽决定了计数器的最大溢出时间。

instancebit-widthcapture/compare registers
TIMER08/16/24/324
TIMER18/164
TIMER28/164
定时器结构

在这里插入图片描述
TIMER 有以下几部分组成:
1) 计数时钟源。 有 1M、 16M 2 种时钟源。
2) 时钟源分频器。 用来设置分频, 范围是 2 的 0-9 次方。
3) 定时/计数模式选择。 用来配置 TIMER 工作在定时器模式还是计数器模式。
4) 定时/计数器位数。 8 位、 16 位、 24 位、 32 位可选择。
5) CC[n]寄存器。 CC 是捕捉、 比较的缩写。 CC 寄存器有 4 个。 当执行 CAPUTURE TASK(捕捉任
务)的时候, 当前内部计数器的值将会立刻被拷贝到 CC 寄存器。
6) 各任务、 事件等。

分频器

计算:
在这里插入图片描述
配置:

注:HFCLK无论哪种时钟源,均为16MHz,PRESCALER为一个4位分频器,分频值为0——15。当PRESCALER大于9后,分频始终为2的9次方,即最小频率f=16mhz / 2^9。

工作模式(MODE)

TIMER 有两种工作模式: 定时模式和计数模式。
当处于定时模式, 我们称之为定时器
当处于计数模式, 我们称之为计数器。
在这里插入图片描述
通过寄存器MODE进行设置,MODE = 0—>定时器;MODE= 1 —>计数器。
3 个任务:

1) START:启动定时/计数器
2) STOP:停止定时/计数器
3) SHUTDOWN:让定时/计数器掉电, 后续无法通过 START 来启动该定时/计数器, 除非重新复位。
定时/计数器位数设定

在这里插入图片描述

比较/捕获

定时器模式下设置比较(COMPARE)/捕获(CAPTURE)寄存器CC[n]的值,可以设置定时时间(Timer value),当定时时间的值和CC[n]寄存器的值相等时,将触发一个比较(COMPARE[n] event)事件。

计数器模式下通过设置一个CAPTURE TASK,当计数器的值和比较/捕获寄存器设定的值(Timer value)相等的时候,将产生一个捕获事件(Capture[n] event)。捕获的值将会存储到寄存器CC[n]中读取。

程序的配置

1) 设定工作模式
2) 设定预分频(计数器不适用)
3) 设定 CC[n]寄存器的值
4) 使能中断(中断模式)
5) 启动 START 任务
6) COMPARE EVENT 到来, 清除内部计数器的值, 清除中断(中断模式)

1s的定时器中断配置:

 NRF_TIMER0->MODE = TIMER_MODE_MODE_Timer;             //计数器模式
 NRF_TIMER0->PRESCALER = 9;                            //9分频   31250HZ的FTIMER
 NRF_TIMER0->BITMODE = TIMER_BITMODE_BITMODE_16Bit;    //16位
 NRF_TIMER0->CC[0]=31250;                              //CC=31250,1S后产生COMPARE EVENT
 
 NRF_TIMER0->INTENSET = TIMER_INTENSET_COMPARE0_Msk ;  //使能COMPARE 中断
 NVIC_SetPriority(TIMER0_IRQn,3);                      //设定TIMER0中断优先级为3
 NVIC_EnableIRQ(TIMER0_IRQn);                          //使能TIMER0中断
 NRF_TIMER0->TASKS_START =1;                           //启动TIMER0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值