当前位置:首页 > 单片机 > 单片机
[导读]硬件原理实时时钟(RTC)的主要功能是在系统掉电的情况下,利用后备电源使时钟继续运行,从而不会丢失时间信息。1.1.时间的设置和获取s3c2440内部集成了RTC模块,而且用起来也十分简单。其内部的寄存器BCDSEC,BCDMI


硬件原理

实时时钟(RTC)的主要功能是在系统掉电的情况下,利用后备电源使时钟继续运行,从而不会丢失时间信息。


1.1.时间的设置和获取

s3c2440内部集成了RTC模块,而且用起来也十分简单。其内部的寄存器BCDSEC,BCDMIN,BCDHOUR,BCDDAY,BCDDATE,BCDMON和BCDYEAR分别存储了当前的秒,分,小时,星期,日,月和年,表示时间的数值都是BCD码。这些寄存器的内容可读可写,并且只有在寄存器RTCCON的第0位为1时才能进行读写操作。为了防止误操作,当不进行读写时,要把该位清零。当读取这些寄存器时,能够获知当前的时间;当写入这些寄存器时,能够改变当前的时间。另外需要注意的是,因为有所谓的“一秒误差”,因此当读取到的秒为0时,需要重新再读取一遍这些寄存器的内容,才能保证时间的正确。


1.2.报警和时间节拍

s3c2440实时时钟(RTC)中,定义了两个中断源:报警中断和时间节拍中断。

时间节拍中断,顾名思义,就像一个节拍器,可以等时性的控制节拍。因此它类似于定时器中断。但时间节拍中断是毫秒级的,而定时器中断可以达到微秒,甚至更小级别。时间节拍中断的周期公式为:(n+1)÷128,单位是秒,即每隔这么长时间,会中断一次。其中n的值为1~127,它存储在寄存器TICNT的低6位中,当寄存器TICNT的第7位被置1时,表示开启时间节拍中断,这时n递减,当减为0时,进入时间节拍中断。

报警中断可以实现当实时时间达到预置的时间后,引起报警。预置的时间是存储在报警时间数据寄存器中的,包括ALMYEAR(年)、ALMMON(月)、ALMDATE(日)、ALMHOUR(小时)、ALMMIN(分)和ALMSEC(秒)。而如何报警,是由报警控制寄存器RTCALM控制的。它的第6位置1表示全局报警,而第5位到第0位置1分别表示年、月、日、小时、分和秒报警。比如,我们想要在2010年4月5日22时30分0秒报警,那么把这个时间分别存储到相应的报警时间数据寄存器中,然后设置RTCALM为0x7F,这样当实时时钟到达这个时刻时,会引起报警中断;又比如我们想要系统具有闹钟的功能,让它每天早上6点提醒我们起床,那么我们可以设置ALMHOUR为6,RTCALM为0x44。如果我们只想让系统在4月份的时候提醒我们6点起床,那该怎么办呢?这个问题对于s3c2440来说就是小菜一碟,只要我们再在ALMMON里写入4,然后把RTCALM改为0x54即可。总之,就是系统根据RTCALM所置1的相应位来比较相对应的当前时间与报警时间数据寄存器中的值,如果相等就进入中断。

2.芯片手册

3.mini2440电路图

4.S3C2440寄存器

RTCCON控制寄存器

选择时钟,使能RTC。BCDSEC,BCDMIN,BCDHOUR,BCDDAY,BCDDATE,BCDMON和BCDYEAR分别存储了当前的秒,分,小时,星期,日,月和年,表示时间的数值都是BCD码。

TICNT计数寄存器

[7]使能中断,[6:0]计数值

RTCALM报警控制

分别使能年月日时分秒和总报警开关。预置的时间是存储在报警时间数据寄存器中的,包括ALMYEAR(年)、ALMMON(月)、ALMDATE(日)、ALMHOUR(小时)、ALMMIN(分)和ALMSEC(秒)。

rtc.h


/*******************************************************************

*Copyright(C),2011-2012,XXX.

*FileName:rtc.h

*Author:HuangYinqing

*Version:1.0

*Date::2012-04-22

*Description:rtc驱动.

*FunctionList:

*History:

******************************************************************/

#ifndef__RTC_H__

#define__RTC_H__

#defineDBG_RTC_LEVEL1

/*函数声明*/

voidRTCInit(void);

voidRTCTest(void);

#endif

rtc.c


/*******************************************************************

*Copyright(C),2011-2012,XXX.

*FileName:rtc.c

*Author:HuangYinqing

*Version:1.0

*Date::2012-04-22

*Description:rtc驱动.

*FunctionList:

*History:

******************************************************************/

#include"common.h"

#include"core.h"

#include"rtc.h"

unsignedcharpucAlarmBuffer[6];//==报警缓存数组

unsignedcharpucDateBuffer[7];//==时间缓冲数组

/********************************************************************

函数功能:RTC报警中断。

入口参数:无。

返回:无。

备注:无。

********************************************************************/

staticvoid__irqRTCAlarmHandler(void)

{

rSRCPND|=BIT_RTC;

rINTPND|=BIT_RTC;

rTICNT=0xbf;//开启时间节拍中断,周期为500毫秒

rGPBDAT|=0x01;//==蜂鸣器响

}

/********************************************************************

函数功能:时钟节拍中断。

入口参数:无。

返回:无。

备注:无。

********************************************************************/

staticvoid__irqRTCTickHandler(void)

{

staticcharcount;

rSRCPND|=BIT_TICK;

rINTPND|=BIT_TICK;

if(count==10)//==响5秒不再响

{

rGPBDAT&=~(0x01);

rTICNT=0;

count=0;

}

count++;

}

/********************************************************************

函数功能:RTC初始化。

入口参数:无。

返回:无。

备注:无。

********************************************************************/

voidRTCInit(void)

{

rGPBCON&=~(0x3<<0);

rGPBCON|=0x1<<0;

rGPBDAT&=~(0x01);//==蜂鸣器不响

rRTCCON=1;

rRTCALM=(1<<6)|(1<<0);//==开全局闹钟和秒闹钟

pISR_RTC=(unsignedint)RTCAlarmHandler;

pISR_TICK=(unsignedint)RTCTickHandler;

rINTMSK&=~(BIT_RTC);

rINTMSK&=~(BIT_TICK);

}

/********************************************************************

函数功能:设置报警时间。

入口参数:无

返回:无。

备注:无。

********************************************************************/

voidRTCSetAlarm(void)

{

rALMYEAR=pucAlarmBuffer[0];//年

rALMMON=pucAlarmBuffer[1];//月

rALMDATE=pucAlarmBuffer[2];//日

rALMHOUR=pucAlarmBuffer[3];//小时

rALMMIN=pucAlarmBuffer[4];//分

rALMSEC=pucAlarmBuffer[5];//秒

}

/********************************************************************

函数功能:设置时间。

入口参数:无

返回:无。

备注:无。

********************************************************************/

voidRTCSetDate(void)

{

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

  2016年2月26日,德国慕尼黑和西班牙巴塞罗那讯——赢得消费者的信任对于智能移动设备支付解决方案至关重要。作为全球最大的安全芯片供应商之一,英飞凌科技股份公司(FS

关键字: rtc 机器人 rx8010sj

博主使用的是天嵌的开发板型号IMX6Q_coreC。1.发现使用开发板是时间总是被设置为2028年6月18日3时41分,一开始以为是底层驱动的问题, 故去底层加打印信息调试。2.发现在系统内hwclo

关键字: Linux rtc

移植环境1,主机环境:VMare下CentOS 5.5 ,1G内存。2,集成开发环境:Elipse IDE3,编译编译环境:arm-linux-gcc v4.4.3,arm-none-eabi-gcc v4.5.1。4,...

关键字: mini2440 u-boot 移植 dm9000驱动

移植环境1,主机环境:VMare下CentOS 5.5 ,1G内存。2,集成开发环境:Elipse IDE3,编译编译环境:arm-linux-gcc v4.4.3,arm-none-eabi-gcc v4.5.1。4,...

关键字: eeprom i2c mini2440 u-boot 移植

比较F1的片子对于F4的RTC来说有很大提升,F4的RTC提供了日历时钟和两个可编程闹钟中断,一个周期性可编程唤醒标志。这样很方便设置系统时间,并不会像F1的RTC那样要自己计算年月日时分秒。F4的RTC是一个独立的BC...

关键字: rtc stm32f4

从NandFlash启动CPU的时候,CPU会自动通过其内部硬件结构复制NandFlash中的前4K代码到cpu的自带SRAM中,注意这是CPU自带的SRAM,区别于本文所讲的SDRAM,本文所指的SDRAM是外接SDR...

关键字: s3c2440 sdram 硬件篇

  RTC-Real Time Clock是430单片机的实时时钟模块,可以配置成实时时钟模式(万年历)或者一般目的的32位计数器模式,其中实时时钟模式提供了年月日、时分秒,可以选择BCD码或者二进制格式,并且具有可编程...

关键字: MSP430 rtc 单片机 实时时钟

STM32RTC使用步骤:打开PWR时钟和Backup区数据访问若使用外部低速时钟(LSE),打开LSE并等待起振选择和打开RTC时钟,等待时钟同步配置时间格式,分频系数等根据需要配置时钟,日期,闹钟,唤醒,输出,时间戳...

关键字: rtc stm32f3 实时时钟

以下是驱动的源码。#includelinux/config.h//配置头文件#includelinux/kernel.h//用于调用kmalloc和kfree#includelinux/sched.h//调度,进程睡眠,...

关键字: gpio mini2440 驱动led

接上一篇:s3c2440硬件篇之三:NandFlash(1)介绍s3c2440读NAND Flash的步骤:①设置NFCONF 在HCLK=100Mhz的情况下,TACLS=0,TWRPH0=3,TWRPH1=0,则 N...

关键字: s3c2440 硬件篇 读nandflash
关闭
关闭