历史上的今天
返回首页

历史上的今天

今天是:2025年01月12日(星期日)

2020年01月12日 | MSP430F5438 RTC操作实验详解

2020-01-12 来源:elecfans

1.模块原理

如图 ,RTC 由两个分频寄存器 RP0TS,RP1TS 对 RTOSSEL 选择的时钟源进行分频,在日历模式下,时钟源 ACLK=32768,经过 RP0TS,RP1TS 分别 256 和 128 分频率后频率为 1HZ ,提供给 32 位 RTC 寄存器时钟源,通过 RTCSSEL 选择 11 或者 10。每 1S ,RTCSEC(秒)加一秒,加到 60,秒从 0 开始计数,RTCMIN 加 1,RTCHOUR,RTCMON ,RTCYEAR ,RTCDOW(星期),RTCDAY等 依次这样。并且在日历模式下,RTC 可以设置为 BCD 码显示在存储器中。另外 RTC 提供闹钟功能,我们可以设置 Alarm 寄存器的 RTCAMIN ,RTCAHOUR,RTCADAY,RTCADOW(星期).另外 RTC 模块也可以作为 32 位计数器使用,其原理方法和 WDT,TA 一致。


2,RTC 内部框图

3,寄存器配置

在 F5XX 单片机硬件 RTC 可以工作在计数器模式也可以工作在日历模式,通过配置寄存器 RTCCTL01 的 RTCMODE 位来实现对工作模式的选择,当选择工作在日历模式的时候,RT0PS 时钟源自动选择 ACLK,TP0PS 分频系数自动为/256,RT1PS 时钟源来自 RT0PS 输出,RT1PS 分频系数自动配置为/128,因此配置 ACLK 时钟为 32768HZ。


闹钟可以配置分钟,小时,星期,以分钟为例子时间设置完毕后,比如 08:23 分钟设置完毕后,将最高位为 AE 设置为 1,就会闹钟有效果,每个小时的第 23 分钟闹钟响。

影响整个 RTC 模块的时间的误差和时钟关系很大,本硬件 RTC 对时钟可以进行校正,如寄存器。

RTCCALS 为 1,加计算,每个 LSB 加 4PPM,如果为 0,减计算,每 LSB 减 2。

RTCCTL3 寄存器中 RTCCALF 配置选择输出 512HZ,256HZ,1HZ 其中一个频率,然后将 RTCCLK引脚设置为特殊引脚输出,用示波器观察频率与标准比看相差多少PPM,然后通过寄存器RTCCTL2进行校正,例如我选择的是 512HZ 频率输出,观察最后的示数为 512.009HZ , 计算高出 18PPM,因此在校正时候要减去一个 18PPM,因此 RTCCTL2 中位 RTCCALS 位为 0,减计算。每 LSB 减 2,因此在 RTCCAL 中赋予数值 9。


4,实验代码:

#include "msp430x54x.h"

void Init_Rtc(void);

void Init_Clk(void);

void Init_System(void);

void main(void)

{

WDTCTL = WDTPW + WDTHOLD; // 关看门狗

Init_System(); // 系统初始化

__bis_SR_register(LPM3_bits + GIE); // 进入低功耗 3

}

/************************ RTC 中断*****************************/

#pragma vector=RTC_VECTOR

__interrupt void basic_timer(void)

{

switch(RTCIV)

{

case 2 : P1OUT ^= BIT0;break; //RTCRDYIFG

case 4 : break;

case 6 : P1OUT |= BIT1;break; //RTCAIFG

case 8 : break;

case 10 : break;

}

}

void Init_System(void)

{

Init_Clk(); //调用时钟函数

Init_Rtc(); //RTC 初始化

P1DIR |= BIT1 + BIT0; //P1.1 P1.0 为输出

P1OUT &= ~(BIT1 + BIT0);

}

void Init_Rtc(void)

{ // BCD 码日历格式输出

RTCCTL01 = RTCBCD + RTCHOLD + RTCMODE + RTCTEV_0 ;

RTCPS0CTL = RT0PSHOLD ; //配置两个计数器分频

RTCPS1CTL = RT1PSHOLD ;

RTCSEC = 0x54; //初始化秒

RTCMIN = 0X59 ; //初始化分钟

RTCHOUR =0X21; //初始化小时

RTCDOW = 0X02 ;

//RTCTIM1 = 0X0421;

RTCDAY = 0x24; //日期初始化

RTCMON = 0X11 ; //初始化月份

RTCYEAR = 0x2005; //初始化年份

RTCAMINHR = 0X0180; //闹钟小时和分钟设置

RTCADOWDAY = 0X1203; //闹钟星期和日期设置

RTCCTL01 &= ~RTCHOLD; //打开 RTC 模块

RTCPS0CTL &= ~RT0PSHOLD; //打开 RTCPS0CTL

RTCPS1CTL &= ~RT1PSHOLD; //打开 RTCPS1CTL

RTCCTL0 |= RTCAIE + RTCRDYIE; //打开安全访问使能 ,闹钟使能

}

void Init_Clk(void)

{

P7SEL |= 0x03; //启动 XT1

UCSCTL1 = DCORSEL_2; //DCO 范围配置

UCSCTL4 = SELM_3 + SELA_0 + SELS_4; //设置时钟源

while (SFRIFG1 & OFIFG) //等待时钟系统正常工作

{

UCSCTL7 &= ~( XT1LFOFFG + DCOFFG);

SFRIFG1 &= ~OFIFG;

}

}


5,实验现象

推荐阅读

史海拾趣

CINCH公司的发展小趣事

CINCH公司作为一家在电子行业颇具影响力的企业,始终致力于技术研发和产品创新。某年,公司研发团队成功开发出一种新型的连接器技术,该技术不仅提高了数据传输速度,还增强了设备的稳定性和耐用性。这一技术突破迅速引起了市场的关注,CINCH公司趁热打铁,推出了一系列基于新技术的产品,迅速占领了市场份额,实现了业务的快速增长。

BESTECH公司的发展小趣事

CINCH公司作为一家在电子行业颇具影响力的企业,始终致力于技术研发和产品创新。某年,公司研发团队成功开发出一种新型的连接器技术,该技术不仅提高了数据传输速度,还增强了设备的稳定性和耐用性。这一技术突破迅速引起了市场的关注,CINCH公司趁热打铁,推出了一系列基于新技术的产品,迅速占领了市场份额,实现了业务的快速增长。

Guerrilla RF公司的发展小趣事
避免灰尘和异物进入硬盘内部,定期清理硬盘周围的环境。
Diodes公司的发展小趣事

在半导体行业中,产品质量是企业生存和发展的基石。Diodes公司深知这一点,始终将产品质量放在首位。公司建立了完善的质量管理体系,从原材料采购、生产制造到产品检验,每一个环节都严格把控。同时,Diodes还不断引进先进的生产技术和设备,提高生产效率和产品品质。这些努力使得Diodes的产品在市场上赢得了良好的口碑,赢得了众多客户的信赖。

集创北方(CHIPONE)公司的发展小趣事

作为一家专注于显示芯片设计的企业,集创北方始终将技术创新作为核心竞争力。从早期的LED驱动芯片到后来的AMOLED驱动芯片,再到国内率先推出的TDDI芯片ICNL9920,集创北方不断推出具有竞争力的产品,满足了市场对于高质量显示芯片的需求。

ATO SOLUTION公司的发展小趣事

在电子行业中,产品质量是企业生存和发展的关键。ATO SOLUTION公司始终坚持以质量为核心,建立了严格的质量管理体系。公司从原材料采购到产品生产的每一个环节都进行严格把控,确保产品质量的稳定性和可靠性。这种对品质的执着追求,使公司赢得了客户的信任和口碑,为公司的长期发展奠定了坚实基础。

问答坊 | AI 解惑

AT89C518通道ADC0809电压采集

本帖最后由 paulhyde 于 2014-9-15 09:22 编辑 AT89C518通道ADC0809电压采集  …

查看全部问答>

evc4.0下ping的编写

          WSAData wsaData;         //初始化Socket动态链接库     if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) {         return ;   ...…

查看全部问答>

卸载程序是如何实现:卸载程序执行完毕卸载程序被删除

是不是卸载程序中执行了删除自己的操作,应用程序一旦执行,删除操作就会被拒绝,谁能告诉我是怎么实现的. …

查看全部问答>

请问wince6下如何把poom定制到os中?

上面图片是我定制时选择的模块,但定制完成后,发现缺少Pimstore.h和Pimstore.lib这两个文件,这两个文件是poom api中的,是不是定制的时候还需要选择别的模块呢?谢谢…

查看全部问答>

在EVC中如何用代码使ListView的某一行被选中

就像被鼠标点击了的效果一样。 我的ListView的创建过程: g_hwndlist = CreateWindow(WC_LISTVIEW,TEXT(\"\"),                                   &nbs ...…

查看全部问答>

重量级文档--基于AT91RM9200 OHCI的USB主机

基于AT91RM9200 OHCI的USB主机   1       第一部分 概述... 4 1.1             前言... 4 1.2       &n ...…

查看全部问答>

通过电阻网络产生不同的电压(详解原文)

由3.3V的单片机控制一个由电阻网络组成的电路:3个IO控制用电阻网络的形式输出3.3、2.0、1.34、0.7、0V。2个IO控制用电阻网络的形式输出3.3、1.65、1、0.4V。目的要输出电压准确,至少保留两位小数。大概的接近电压的话,本人以实现了,但准确有困 ...…

查看全部问答>

关于STM32的IO之FT困惑

文档中也有关FT的说明, FT=Five -Volt tolerant .In order to sustain a voltage higher than Vdd+0.3 V the  internal  pull up / pull down  resistors must be disable. 正是因为must be disable 让我比较困惑 ...…

查看全部问答>

应聘助理工程师需要做哪些准备(毕业两年后从返本专业)

各位朋友,我原本是专科的应用电子专业毕业生,两年后打算从返电子行业,那么如果要应聘助理工程师或者技术员岗位,需要做哪些准备?哪些地方需要特别注重呢?         之前我也看到过招聘网站对该岗位的招聘要求, ...…

查看全部问答>

LED变色是怎么实现的呢?

本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 LED变色是怎么实现的呢?晚上霓虹灯闪耀的高楼大厦外墙,看到那些LED在一直不停滴变色,我想知道变色的原理是什么?难到LED本身会变色?初学者,请教大家。 …

查看全部问答>