新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > S3C2440 RTC 裸機程序

        S3C2440 RTC 裸機程序

        作者: 時間:2016-11-26 來源:網(wǎng)絡 收藏
        RTC(實時時鐘)單元可以在當系統(tǒng)電源關閉后通過備用電池工作。RTC 可以通過使用STRB/LDRB ARM 操作發(fā)送8 位二-十進制交換碼(BCD)值數(shù)據(jù)給CPU。這些數(shù)據(jù)包括年、月、日、星期、時、分和秒的時間信息。
        RTC 單元工作在外部32.768kHz 晶振并且可以執(zhí)行鬧鐘功能。

        本文引用地址:http://www.104case.com/article/201611/321881.htm

        其特點概括為:

        1 時鐘數(shù)據(jù)采用BCD編碼 時鐘數(shù)據(jù)包括 秒 分 時 日 月 年 星期(能對閏年的年月日在自動處理)
        2 32.768K 的晶振提供時鐘輸入
        3 可以提供毫秒級的時鐘中斷 該中斷可用于作為嵌入式操作系統(tǒng)的內(nèi)核時鐘

        用其時鐘功能時 主要需要配置 實時時鐘控制寄存器(RTCCON)
        RTCCON 寄存器由4 位組成,如控制BCD 寄存器讀/寫使能的RTCEN、CLKSEL、CNTSEL 和測試用的
        CLKRST。
        RTCEN 位可以控制所有CPU 與RTC 之間的接口,因此在系統(tǒng)復位后在RTC 控制程序中必須設置為1 來使

        能數(shù)據(jù)的讀/寫。同樣的在掉電前,RTCEN 位應該清除為0 來預防誤寫入RTC 寄存器中。

        RTC(Real-Time Clock):實時時鐘。它的主要作用就是提供穩(wěn)定的實時時鐘給后續(xù)電路用。主要功能有:時鐘,日歷,鬧鐘,周期性中斷輸出,32KHz時鐘輸出。系統(tǒng)掉電的情況下,利用后備電源使時鐘繼續(xù)運行,從而不會丟失時間信息。
        寄存器:
        RTCCON :控制寄存器
        TICNT:節(jié)拍時間計數(shù)器
        RTCALM:鬧鐘控制寄存器
        ALMSEC:秒鬧鐘寄存器
        ALMMIN:分鬧鐘寄存器
        ALMHOUR:小時鬧鐘寄存器
        ALMDATE:日鬧鐘寄存器
        ALMMON:月鬧鐘寄存器
        ALMYEAR:年鬧鐘寄存器
        BCDSEC :秒寄存器
        BCDMIN:分寄存器
        BCDHOUR:時寄存器
        BCDDAY:星期寄存器
        BCDDATE:日寄存器
        BCDMON:月寄存器
        BCDYEAR:年寄存器

        #defineGLOBAL_CLK1
        #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;


        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;
        }



        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: x-x-x %s x:x:x",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);
        }
        }



        關鍵詞: S3C2440RTC裸機程

        評論


        技術專區(qū)

        關閉
        主站蜘蛛池模板: 安徽省| 青神县| 青铜峡市| 新密市| 南涧| 乌拉特中旗| 鹤岗市| 苍梧县| 嘉善县| 道真| 长宁区| 敦煌市| 兴义市| 博野县| 始兴县| 阳山县| 湟源县| 通渭县| 康保县| 白银市| 金华市| 翁牛特旗| 宝清县| 和顺县| 安溪县| 启东市| 临夏市| 云浮市| 巴林左旗| 扬中市| 托克托县| 南充市| 土默特左旗| 吴堡县| 蒙阴县| 金塔县| 白山市| 磐石市| 米林县| 满城县| 淮安市|