在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 五 ARM9(S3C2440)的實時時鐘(RTC)-理論知識及程序?qū)嵗v解

            五 ARM9(S3C2440)的實時時鐘(RTC)-理論知識及程序?qū)嵗v解

            作者: 時間:2016-11-27 來源:網(wǎng)絡(luò) 收藏

            在一個嵌入式系統(tǒng)中,實時時鐘單元可以提供可靠的時鐘,包括時、分、秒和年、月、日。即使系統(tǒng)處于關(guān)機(jī)狀態(tài)下,它也能夠正常工作(通常采用后備電池供電,能夠可靠工作十年),其外圍也不需要太多的輔助電路,只需要一個高精度的晶振。

            本文引用地址:http://www.biyoush.com/article/201611/322170.htm

            它具有以下特點:

            時鐘數(shù)據(jù)采用BCD編碼或二進(jìn)制表示;

            能夠?qū)﹂c年的年、月、日進(jìn)行自動處理;

            具有告警功能,當(dāng)系統(tǒng)處于關(guān)機(jī)狀態(tài)時,能產(chǎn)生告警中斷;

            具有獨立的電源輸入;

            提供毫秒級的時鐘中斷,該中斷可用于嵌入式操作系統(tǒng)的內(nèi)核時鐘。

            實時時鐘特殊功能寄存器
            實時時鐘控制(RTCCON)寄存器
            RTCCON 寄存器由4 位組成,如控制BCD 寄存器讀/寫使能的RTCEN、CLKSEL、CNTSEL 和測試用的
            CLKRST。
            RTCEN 位可以控制所有CPU 與RTC 之間的接口,因此在系統(tǒng)復(fù)位后在RTC 控制程序中必須設(shè)置為1 來使
            能數(shù)據(jù)的讀/寫。同樣的在掉電前,RTCEN 位應(yīng)該清除為0 來預(yù)防誤寫入RTC 寄存器中。

            RTC 鬧鐘控制(RTCALM)寄存器
            RTCALM 寄存器決定了鬧鐘使能和鬧鐘時間。請注意RTCALM 寄存器在掉電模式中同時通過INT_RTC 和
            PMWKUP 產(chǎn)生鬧鐘信號,但是在正常工作模式中只產(chǎn)生INT_RTC。

            鬧鐘秒數(shù)據(jù)(ALMSEC)寄存器:鬧鐘秒數(shù)據(jù)寄存器

            同理:鬧鐘分?jǐn)?shù)據(jù)(ALMMIN)寄存器,鬧鐘時數(shù)據(jù)(ALMHOUR)寄存器,鬧鐘日數(shù)據(jù)(ALMDATE)寄存器,鬧鐘月數(shù)據(jù)(ALMMON)寄存器,鬧鐘年數(shù)據(jù)(ALMYEAR)寄存器

            BCD 秒(BCDSEC)寄存器:存儲的是當(dāng)前時間秒,同樣還有,BCDMIN,BCDHOUR,BCDDATE(日),BCDDAY(星期),BCDMON,BCDYEAR

            注意以上這些寄存器存儲的數(shù)據(jù)都是BCD碼,即是自動處理的數(shù)據(jù),如果自己想做時鐘顯示時,如果調(diào)時間的請注意時間加減時實際上是十六進(jìn)制的

            下面結(jié)合具體的程序介紹一下RTC操作

            程序編寫包括三步,第一步是時鐘初始化,第二步把嵌入式控制系統(tǒng)投入運行時要將當(dāng)前準(zhǔn)確時間寫入RTC,俗稱效表;第三步是系統(tǒng)正常運行后,讀取RTC時間在LCD上顯示。

            廢話少說,上程序(開發(fā)板FL2440)

            #include "def.h"
            #include "option.h"
            #include "2440addr.h"
            U8 beep=1;
            void __irq IsrAlarm(void);//下面這些都是函數(shù)聲明
            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 )//時間設(shè)置函數(shù),操作是不是比較簡單?呵呵

            {
            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)//年、月、日、時、分、秒//鬧鐘設(shè)置
            {rRTCCON=0x01;//RTCCON實時時鐘控制寄存器,
            //【0】位RTC使能信號控制位,0為禁止,1為允許
            //對RTC模塊進(jìn)行讀寫操作前應(yīng)對其最低位至1
            rALMYEAR = almyear;
            rALMMON= almmon;
            rALMDATE = almdate;
            rALMHOUR = almhour;
            rALMMIN= almmin;
            rALMSEC= almsec;

            rRTCCON = 0;//讀取數(shù)據(jù)完后禁止使能信號,以防誤操作,
            //整個文件的設(shè)置都一樣,不重覆
            }
            void OpenAlarm(void) //開鬧鐘函數(shù)
            {
            pISR_RTC = (unsigned)IsrAlarm;//中斷寄存器ISR中的RTC中斷位
            ClearPending(BIT_RTC);
            rRTCALM = (0x7f); //RTCALM鬧鐘控制寄存器,

            //【0-7】分別對應(yīng)秒到年的鬧鐘 使能,
            //相應(yīng)位0表示禁止,1表示允許
            EnableIrq(BIT_RTC);//開中斷

            }

            //關(guān)鬧鐘功能函數(shù)
            void CloseAlarm(void)
            {
            rRTCALM = 0; //RTCALM鬧鐘控制寄存器所有位禁止
            DisableIrq(BIT_RTC);//關(guān)中斷
            }
            void __irq IsrAlarm(void)//利用中斷,鬧鐘時進(jìn)入中斷函數(shù)
            {
            ClearPending(BIT_RTC);//SRCPND,INTPND分別置1.
            beep = 0;// 蜂鳴器標(biāo)志位清0
            CloseAlarm();//關(guān)鬧鐘,即如果要開鬧鐘的先要把它關(guān)了,再開。
            }
            void delay(int x)//延時函數(shù)
            {
            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設(shè)置為輸出,分別連了4個LED
            rGPBDAT|=0x560;//4個LED全滅
            RTC_Time_Set(0x11,0x08,0x06,0x06,0x10,0x00,0x00) ;//設(shè)置時間
            RTC_Alm_Set(0x11,0x08,0x06,0x10,0x01,0x00);//設(shè)置鬧鐘時間按
            OpenAlarm();
            while(1)
            {
            if(beep==0)
            {
            rGPBDAT=0x01;//燈亮,蜂鳴器響
            delay(1000);
            rGPBDAT=0x561;//燈滅,實際是閃爍
            delay(1000);
            }
            }
            }



            關(guān)鍵詞: ARM9S3C2440實時時鐘RT

            評論


            技術(shù)專區(qū)

            關(guān)閉