五 ARM9(S3C2440)的实时时钟(RTC)-理论知识及程序实例讲解

发布者:梦回归处最新更新时间:2015-09-23 来源: eefocus关键字:ARM9  S3C2440  实时时钟  RTC 手机看文章 扫描二维码
随时随地手机看文章

  在一个嵌入式系统中,实时时钟单元可以提供可靠的时钟,包括时、分、秒和年、月、日。即使系统处于关机状态下,它也能够正常工作(通常采用后备电池供电,能够可靠工作十年),其外围也不需要太多的辅助电路,只需要一个高精度的晶振。

它具有以下特点:

•  时钟数据采用BCD编码或二进制表示;

•  能够对闰年的年、月、日进行自动处理;

•  具有告警功能,当系统处于关机状态时,能产生告警中断;

•  具有独立的电源输入;

•  提供毫秒级的时钟中断,该中断可用于嵌入式操作系统的内核时钟。

 

实时时钟特殊功能寄存器
实时时钟控制(RTCCON)寄存器
RTCCON 寄存器由4 位组成,如控制BCD 寄存器读/写使能的RTCEN、CLKSEL、CNTSEL 和测试用的
CLKRST。
RTCEN 位可以控制所有CPU 与RTC 之间的接口,因此在系统复位后在RTC 控制程序中必须设置为1 来使
能数据的读/写。同样的在掉电前,RTCEN 位应该清除为0 来预防误写入RTC 寄存器中。

RTC 闹钟控制(RTCALM)寄存器
RTCALM 寄存器决定了闹钟使能和闹钟时间。请注意RTCALM 寄存器在掉电模式中同时通过INT_RTC 和
PMWKUP 产生闹钟信号,但是在正常工作模式中只产生INT_RTC。

闹钟秒数据(ALMSEC)寄存器:闹钟秒数据寄存器

同理:闹钟分数据(ALMMIN)寄存器,闹钟时数据(ALMHOUR)寄存器,闹钟日数据(ALMDATE)寄存器,闹钟月数据(ALMMON)寄存器,闹钟年数据(ALMYEAR)寄存器

BCD 秒(BCDSEC)寄存器:存储的是当前时间秒,同样还有,BCDMIN,BCDHOUR,BCDDATE(日),BCDDAY(星期),BCDMON,BCDYEAR

注意以上这些寄存器存储的数据都是BCD码,即是自动处理的数据,如果自己想做时钟显示时,如果调时间的请注意时间加减时实际上是十六进制的

下面结合具体的程序介绍一下RTC操作

程序编写包括三步,第一步是时钟初始化,第二步把嵌入式控制系统投入运行时要将当前准确时间写入RTC,俗称效表;第三步是系统正常运行后,读取RTC时间在LCD上显示。

 

废话少说,上程序(开发板FL2440)

#include "def.h"
#include "option.h"
#include "2440addr.h"
U8 beep=1;
void __irq IsrAlarm(void);//下面这些都是函数声明
void delay(int x);
void RTC_Alm_Set(U8 almyear,U8 almmon,U8 almdate,
               U8 almhour,U8 almmin,U8 almsec);
               void RTC_Time_Set( U8 wRTCyear,U8 wRTCmon,U8 wRTCdate,U8 wRTCday,U8 wRTChour,U8 wRTCmin,U8 wRTCsec );
void OpenAlarm(void) ;
void CloseAlarm(void) ;
//==================================================================================  
void RTC_Time_Set( U8 wRTCyear,U8 wRTCmon,U8 wRTCdate,U8 wRTCday,U8 wRTChour,U8 wRTCmin,U8 wRTCsec )//时间设置函数,操作是不是比较简单?呵呵

{
 rRTCCON = 1 ;  //RTC 读写使能

 rBCDYEAR = wRTCyear ;  //年
    rBCDMON  = wRTCmon ;  //月
    rBCDDATE = wRTCdate ;  //日 
 rBCDDAY  = wRTCday ;  //星期
 rBCDHOUR = wRTChour ;  //小时
    rBCDMIN  = wRTCmin ;  //分
    rBCDSEC  = wRTCsec ;  //秒
 
 rRTCCON &= ~1 ;  //RTC read and write disable
}
void RTC_Alm_Set(U8 almyear,U8 almmon,U8 almdate,
               U8 almhour,U8 almmin,U8 almsec)//年、月、日、时、分、秒//闹钟设置
  rRTCCON=0x01;      //RTCCON实时时钟控制寄存器,
                                           //【0】位RTC使能信号控制位,0为禁止,1为允许
                                           //对RTC模块进行读写操作前应对其最低位至1
    rALMYEAR = almyear;
    rALMMON  = almmon;
    rALMDATE = almdate;
    rALMHOUR = almhour;
    rALMMIN  = almmin;
    rALMSEC  = almsec;
 
     rRTCCON = 0;    //读取数据完后禁止使能信号,以防误操作,
                                  //整个文件的设置都一样,不重覆
}
void OpenAlarm(void) //开闹钟函数  
{
   pISR_RTC = (unsigned)IsrAlarm;    //中断寄存器ISR中的RTC中断位
   ClearPending(BIT_RTC);
   rRTCALM = (0x7f); //RTCALM闹钟控制寄存器,

                                   //【0-7】分别对应秒到年的闹钟 使能,     
                                   //相应位0表示禁止,1表示允许
 EnableIrq(BIT_RTC);   //开中断
 
}

      //关闹钟功能函数
void CloseAlarm(void)    
{
   rRTCALM = 0; //RTCALM闹钟控制寄存器所有位禁止
   DisableIrq(BIT_RTC);    //关中断
}
void __irq IsrAlarm(void)    //利用中断,闹钟时进入中断函数
{
     ClearPending(BIT_RTC);   //SRCPND,INTPND分别置1.
     beep = 0;  // 蜂鸣器标志位清0
     CloseAlarm();   //关闹钟,即如果要开闹钟的先要把它关了,再开。
}
void delay(int x)//延时函数
{
 while(x)
 {
  int k,j;
  for(k=0xff;k>0;k--)
   for(j=0xff;j>0;j--);
  x--;
 }
}

 

//==================================================================================
void RTCmain(void)
{
 rGPBCON = (1<<0)|(1<<10)|(1<<12)|(1<<16)|(1<<20); // GPB5,GPB6,GPB8,GPB10设置为输出,分别连了4个LED
 rGPBDAT|=0x560;//4个LED全灭
 RTC_Time_Set(0x11,0x08,0x06,0x06,0x10,0x00,0x00) ;//设置时间
 RTC_Alm_Set(0x11,0x08,0x06,0x10,0x01,0x00);//设置闹钟时间按
 OpenAlarm();
    while(1)
    {
  if(beep==0)
  {
   rGPBDAT=0x01;//灯亮,蜂鸣器响
   delay(1000);
   rGPBDAT=0x561;//灯灭,实际是闪烁
   delay(1000);
  }
    }
}

关键字:ARM9  S3C2440  实时时钟  RTC 引用地址:五 ARM9(S3C2440)的实时时钟(RTC)-理论知识及程序实例讲解

上一篇:六 ARM9(S3C2440)的LCD显示-理论知识
下一篇:四 ARM9(S3C2440)的ADC和触摸屏控制——理论知识

推荐阅读最新更新时间:2024-03-16 14:33

基于ARM9的无线多床位心电监护仪的设计
1 引言 随着社会生活节奏加快、人口逐渐老龄化,心血管疾病已经成为同前威胁人类生命的丰要疾病之一,此类疾病往往具有突发性、短暂性和危险性的特点,如果不能及时发现并进行治疗将会产生非常严重的后果。心电图是检查.诊断和预防该类疾病的主要手段和依据,对于心肌梗塞、心律失常等症状,心电监护仪的使用贯穿于治疗、康复的整个过程。由于传统的基于PC机平台的心电躲护仪,价格昂贵,体积庞大,不便于移动且主要集中在大医院,给医生和病人带来了很大的不便。因此,为了降低成本、缩小体积,本文设计了一种基于ARM9微处理器的新型便携式多床位遥测心电监护仪。该监护仪采用Samsung公司的一款以ARM920T为控制器内核的16/32位高速处理器S3C2
[工业控制]
基于<font color='red'>ARM9</font>的无线多床位心电监护仪的设计
s3c2440 ads程序移植到keil中(三) 初步完成
如果我把参数配置发生改变呢 然后再一次编译 要包错误 如下所示 其实我们到这里离 在s3c2440 ads程序移植到keil中(二)中看到这个网友不值提供了方法 而且提供了几个文件的下载地址 http://download.csdn.net/detail/googlemi/5176844 我直接下载下来了 把其中的2440init.s文件直接拷贝复制替代我工作中的2440init.s 该错误消失了 但是出现了 这一个错误 反正修改就能解决 然后 提示了一个错误 意思 就nand.c和nand.h 没有加上去 让后加上去了 编译成功没有错误 这种方式到此结束
[单片机]
<font color='red'>s3c2440</font> ads程序移植到keil中(三) 初步完成
采用ARM9处理器S3C2410的数字多路语音记录器设计
1. 引言 数字多路语音记录器在安全、监控方面有很多应用。一些传统的设计方案基于工控机,用数据采集卡实现语音的A/D转换,用软件实现语音编解码,这种方案成本高、功耗大。如果采用嵌入式的设计方案,可以实现同样的功能,并且具有低成本,低功耗的特点。 普通的低成本嵌入式处理器性能不高,不足以实现多路语音的实时编码、解码,需要用专门的语音处理芯片完成这一工作。基于DSP自主设计语音编码器是一种方法,但工作量大。AC48304广泛应用于各种小型VOIP网关中,价格低廉,是一种很好的替代方案。同时AC48304还具有DTMF识别和静音检测等功能,便于实现电话号码识别和语音的自动记录。 ARM是一种应用广泛的嵌入式处理器,Samsung、
[单片机]
采用<font color='red'>ARM9</font>处理器S3C2410的数字多路语音记录器设计
s3c2440 K9F2G08 nandflash支持硬件ECC校验
S3c2440的nandflash K9F2G08是支持硬件ECC的,NandFlash的每一页分为main区和spare区,S3C2440的NandFlash控制器支持这两个区的硬件ECC,这里我们实现main区的硬件ECC。在include/configs/fl2440.h文件中,如果我们定义了nandflash的硬件ECC校验,那么我们就可以控制相应的nandflash寄存器,实现硬件ECC。 nandflash的每一页有两区:main区和spare区,main区用于存储正常的数据,spare区用于存储其他附加信息,其中就包括ECC校验码。 当我们在写入数据的时候,我们就计算这一页数据的ECC校验码,然后把校验码
[单片机]
庖丁解牛 ARM9 中断处理过程
这个 2440test里面的中断写的向量有些隐蔽,兜了很多个圈,也难怪这么难理解,下面 就对这个东西抽丝剥茧,看清楚这究竟是一个怎么样的过程。 中断向量 b HandlerIRQ ;handler for IRQ interrupt 很自然,因为所有的单片机都是那样,中断向量一般放在开头,用过单片机的人都会很熟悉 那就不多说了。 异常服务程序 这里不用中断(interrupt)而用异常(exception),毕竟中断只是异常的一种情况,呵呵 下面主要分析的是“中断异常”说白了,就是我们平时单片机里面用的中断!!!所有有器件 引起的中断,例如TIMER中断,UART中断,外部中断等等,都有一个统一的入口,那就是中断 异常
[单片机]
基于S3C2410单片机的RTC模块应用设计
引言 本文在介绍S3C2410的基础上,对RTC内部结构及工作机理进行了分析,最后给出了专用于RTC功能的应用开发。 硬件结构 S3C2410处理器简介 S3C2410是三星公司推出的16/32位RISC微处理器,它是为应用于小型掌上设备和高性价比、低功耗、高性能的嵌入式系统应用而提供的微控制解决方案。S3C2410使用了ARM920T内核。 690)this.width=690;if(this.height>690)this.height=690;" border=undefined> 图1 S3C2410内部RTC模块结构图 硬件构架 RTC模块能够在系统断电的情况下由后备电池供电继续工作,它能将8位数据转换为BCD码的
[单片机]
基于S3C2410单片机的<font color='red'>RTC</font>模块应用设计
Exynos4412裸机开发 —— RTC 实时时钟单元
RTC(Real-Time Clock) 实时时钟。RTC是集成电路,通常称为时钟芯片。在一个嵌入式系统中,通常采用RTC来提供可靠的系统时间,包括时分秒和年月日等,而且要求在系统处于关机状态下它也能正常工作(通常采用后备电池供电)。它的外围也不需要太多的辅助电路,典型的就是只需要一个高精度的32.768kHz 晶体和电阻电容等。 一、RTC 控制器 实时时钟(RTC)单元可以通过备用电池供电,因此,即使系统电源关闭,它也可以继续工作。RTC可以通过STRB/LDRB 指令将8位BCD码数据送至CPU。这些BCD数据包括秒、分、时、日期、星期、月和年。RTC单元通过一个外部的32.768kHz 晶振提供时钟。RTC具有定时报警
[单片机]
S3C2440上ADC驱动实例开发讲解
一、开发环境 主 机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand, Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2 二、硬件原理分析 S3C2440内部ADC结构图 我们从上面的结构图和数据手册可以知道,该ADC模块总共有8个通道可以进行模拟信号的输入,分别是AIN0、AIN1、AIN2、AIN3、YM、YP、XM、XP。那么ADC是怎么实现模拟信号到数字信号的转换呢?首先模拟信号从任一通道输入,然后设定寄存器中预分频器的值来确定AD转换器频率,最后ADC将模拟信号转换为数字信号保存到ADC数据寄存器0中(ADCDAT0
[单片机]
<font color='red'>S3C2440</font>上ADC驱动实例开发讲解
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved