Atmel SAM4S学习笔记(七)——实时定时器 (RTT)

作者: liunian__92
上传时间为: 2014-11-27 04:48 PM
2014-11-27
阅读:

RTT(Real-time Timer)是一个32位的计时器,对可编程的16位的预分频器(时钟源来自32KHz的慢速时钟)的反转进行统计。RTT可以周期的产生中断和/或设定触发值报警。RTT也可以配置采用来自RTC(实时时钟)1Hz的信号,可以用1Hz的信号产生定时。为了降低功耗,RTT不需要使用的时候可以完全禁止。

RTT嵌入式特征:

32位自由运行的计数器时钟源来自预分频的慢速时钟源或者1Hz带校准的RTC时钟源。

16位可配置的预分频器

中断报警

框架图如图7-1所示



下面是RTT 的寄存器表(如图7-2所示)


RTT_MR(模式寄存器):只要是对分频器、中断警告等一些功能的设置。

RTT_AR(警报寄存器):设置的报警值(CRTV+1)和实时定时器值的比较。

注:当RTT_AR上写入新的数值的时候,必须禁止掉警报寄存器。

RTT_VR(数值寄存器):实时计数的数值。

RTT_SR(状态寄存器):

bit 0:ALMS(实时时间状态)
bit 1:RTTINC (预分频器翻转状态)
bit2-bit31 为保留为。

详细内容请查看数据手册(289页)

RTT功能描述

RTT(实时定时器)是一个32位的计数器来计算从某一时刻到某一时刻经历的时间。RTT可以采用可配置的16位预分频时钟源,分频值可以用RTT_MR中的bit8-bit15 RTPRES来设置分频值。

设置RTPRES的值为0x800(默认值),相当于给实时定时器一个1Hz的信号(如果慢速时钟为32.768KHz)。32位的计数器可以计数到2的32次方秒,然后翻转到0,相当于136年。

实时定时器的值(CRTV)在RTT_VR寄存器中,可以说随时读取。

计数器当前值会与设置的RTT_AR寄存器中的值做比较,当两值相等时,则RTT_SR寄存器中的SLM位被置位(1)。复位(0)后,RTT_AR中的值将变为0xFFFFFFFF。

如若不使用RTT,可以将RTT_MR寄存器的RTTDIS设置为1,降低功耗。

下面就来简单了写一个例子,来控制板子上的LED亮灭

#include "sam4sd32c.h"
#include "rtt.h"
int main (void)
{
	uint32_t ul_previous_time;
	SystemInit();
	PIOC->PIO_PER  = (uint32_t)0x00800000;
	PIOC->PIO_OER  = (uint32_t)0x00800000;
	PIOC->PIO_OWER = (uint32_t)0x00800000;
        PIOC->PIO_CODR = (uint32_t)0x00800000;
	rtt_sel_source(RTT, false);
	rtt_init(RTT, 32768);
	ul_previous_time = rtt_read_timer_value(RTT);
	while (ul_previous_time == rtt_read_timer_value(RTT));
	/* 使能 RTT 中断 */
	NVIC_DisableIRQ(RTT_IRQn);
	NVIC_ClearPendingIRQ(RTT_IRQn);
	NVIC_SetPriority(RTT_IRQn, 0);
	NVIC_EnableIRQ(RTT_IRQn);
	rtt_enable_interrupt(RTT, RTT_MR_RTTINCIEN);
	while(1);
}
void RTT_Handler()
{
	uint32_t ul_status;
	/* Get RTT status */
	ul_status = rtt_get_status(RTT);
	/* 时间改变,关闭LED */
	if ((ul_status & RTT_SR_RTTINC) == RTT_SR_RTTINC) {
		PIOC->PIO_CODR = (uint32_t)0x00800000;
	}
	/* 开启LED */
	if ((ul_status & RTT_SR_ALMS) == RTT_SR_ALMS) {
		PIOC->PIO_SODR = (uint32_t)0x00800000;  
	}
}

<br>

Atmel SAM4S Xplained pro学习笔记(一)-- 开发套件介绍

Atmel SAM4S 学习笔记(二)-- 开发环境搭建

Atmel SAM4S 学习笔记(三)-- 示例代码分析

Atmel SAM4S学习笔记(四)——ASF详解

Atmel SAM4S学习笔记(五)——GPIO

Atmel SAM4S学习笔记(六)--CHIPID(芯片编号)

全部评论 ()
条评论
写评论

创建讨论帖子

登录 后参与评论
系统提示