S3C2440 RTC 裸机程序

  RTC(实时时钟)单元可以在当系统电源关闭后通过备用电池工作。RTC 可以通过使用STRB/LDRB ARM 操作发送8 位二-十进制交换码(BCD)值数据给CPU。这些数据包括年、月、日、星期、时、分和秒的时间信息。
RTC 单元工作在外部32.768kHz 晶振并且可以执行闹钟功能。

 

    其特点概括为:

1 时钟数据采用BCD编码 时钟数据包括 秒 分 时 日 月 年 星期(能对闰年的年月日在自动处理)
2 32.768K 的晶振提供时钟输入
3 可以提供毫秒级的时钟中断 该中断可用于作为嵌入式操作系统的内核时钟
 
用其时钟功能时 主要需要配置 实时时钟控制寄存器(RTCCON)
    RTCCON 寄存器由4 位组成,如控制BCD 寄存器读/写使能的RTCEN、CLKSEL、CNTSEL 和测试用的
CLKRST。
    RTCEN 位可以控制所有CPU 与RTC 之间的接口,因此在系统复位后在RTC 控制程序中必须设置为1 来使

能数据的读/写。同样的在掉电前,RTCEN 位应该清除为0 来预防误写入RTC 寄存器中。

RTC(Real-Time Clock):实时时钟。它的主要作用就是提供稳定的实时时钟给后续电路用。主要功能有:时钟,日历,闹钟,周期性中断输出,32KHz时钟输出。系统掉电的情况下,利用后备电源使时钟继续运行,从而不会丢失时间信息。
寄存器:
                            RTCCON       :控制寄存器
                            TICNT:节拍时间计数器
                            RTCALM:闹钟控制寄存器
                            ALMSEC:秒闹钟寄存器
                            ALMMIN:分闹钟寄存器
                            ALMHOUR:小时闹钟寄存器
                            ALMDATE:日闹钟寄存器
                            ALMMON:月闹钟寄存器
                            ALMYEAR:年闹钟寄存器
                            BCDSEC :秒寄存器
                            BCDMIN:分寄存器
                            BCDHOUR:时寄存器
                            BCDDAY:星期寄存器
                            BCDDATE:日寄存器
                            BCDMON:月寄存器
                            BCDYEAR:年寄存器


#define GLOBAL_CLK 1
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
#include "mmu.h"


typedef struct Date
{
    U16 year;
    U8 month;
    U8 day;
    U8 week_day;
    U8 hour;
    U8 mintue;
    U8 second;
}date;


date now_time;

/*
校准RTC,只要校准一次,再次下载程序不要校准
*/
void RTC_Setdate()
{
    rRTCCON = 0x01;
    
    rBCDYEAR =0x13;  //p_date->year;
    rBCDMON  =0x07; //p_date->month;
    rBCDDATE =0x29;  // p_date->day;
    rBCDDAY  =0x2;  // p_date->week_day;
    rBCDHOUR =0x10;  // p_date->hour;
    rBCDMIN  =0x48;  //p_date->mintue;
    rBCDSEC  =0x00;  //p_date->second;
    
    rRTCCON = 0x00;
}


/*
读取RTC的值
*/
void RTC_Read(date *p_date)
{
    rRTCCON = 0x01;
    
    p_date->year = rBCDYEAR +0x2000 ;
    p_date->month = rBCDMON ;
    p_date->day = rBCDDATE ;
    p_date->week_day = rBCDDAY;
    p_date->hour = rBCDHOUR ;
    p_date->mintue =rBCDMIN  ;
    p_date->second = rBCDSEC ;
    
    rRTCCON = 0x00;
}


void delay(int times)
{
    int i,j;
    for(i = 0;i < times; i++)
        for(j = 0; j < times; j++);
}


int Main()
{
    char *week[7] = {"SUN","MON","TUES","WED","THURS","FRI","SAT"};   
    MMU_Init();
   // RTC_Setdate();
    while(1)
    {
        RTC_Read(&now_time);
    
        Uart_Printf("NOWTIME: %04x-%02x-%02x %s %02x:%02x:%02x\n",now_time.year,
                                                                  now_time.month,
                                                                  now_time.day,
                                                                  week[now_time.week_day-1],
                                                                  now_time.hour,
                                                                  now_time.mintue,
                                                                  now_time.second);
        delay(10000);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值