在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 深入理解ARM體系架構(gòu)(S3C6410)---rtc實(shí)例

            深入理解ARM體系架構(gòu)(S3C6410)---rtc實(shí)例

            作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò) 收藏
            實(shí)時(shí)時(shí)鐘(RTC)的主要功能是在系統(tǒng)掉電的情況下,利用后備電源使時(shí)鐘繼續(xù)運(yùn)行,從而不會(huì)丟失時(shí)間信息。s3c6410內(nèi)部集成了RTC模塊,其內(nèi)部的寄存器BCDSEC,BCDMIN,BCDHOUR,BCDDAY,BCDDATE,BCDMON和BCDYEAR分別存儲(chǔ)了當(dāng)前的秒,分,小時(shí),星期,日,月和年,表示時(shí)間的數(shù)值都是BCD碼。

            S2C6410中的閏年問(wèn)題:

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

            閏年產(chǎn)生器基于BCDDAY,BCDMOD,BCDYEAR從而能決定每月最后的日期是28,29,30,還是31。一個(gè)8位的計(jì)數(shù)器只能表示2個(gè)BCD數(shù)據(jù),因此不能判斷“00”結(jié)尾的年份是不是閏年。例如它不能判斷1900和2000是不是閏年。為了解決這個(gè)問(wèn)題,S3C6410中有一硬件邏輯來(lái)支持2000的閏年問(wèn)題。因此S3C6410支持1901到2099年的范圍。


            讀寫操作:

            在讀BCD寄存器時(shí),RTCCON寄存器0位必須至1,為了顯示秒,分,小時(shí),日,月,年,cpu必須從其對(duì)應(yīng)的寄存器中取值(BCDSEC, BCDMIN, BCDHOUR,BCDDATE, BCDDAY, BCDMON, BCDYEAR)。多寄存器同時(shí)讀取可能會(huì)產(chǎn)生1秒誤差。例如用戶從BCDMIN到BCDYEAR都進(jìn)行了讀,得到的結(jié)果為2059年12月31日23時(shí)59分,當(dāng)讀取這個(gè)結(jié)果時(shí)BCDSEC的數(shù)值在1~59之間,讀到的2059年12月31日23時(shí)59分是沒有問(wèn)題的,但是當(dāng)讀取這個(gè)結(jié)果時(shí)BCDSEC的值為0,實(shí)際結(jié)果可能是2059年12月31日23時(shí)59分也可能是2060年1月1日0時(shí)0分。所以此時(shí)應(yīng)重讀這些寄存器,從而得到正確的數(shù)值。


            后備電源操作:

            實(shí)時(shí)時(shí)鐘邏輯能被后備電源驅(qū)動(dòng),通過(guò)RTCVDD向RTC模塊供電。當(dāng)系統(tǒng)關(guān)閉時(shí),cpu和RTC接口是封閉的,這時(shí)后備電源只驅(qū)動(dòng)振蕩電路和BCD計(jì)數(shù)器,從而把功耗降到最低。


            邏輯圖:

            接口:

            以下程序完成了時(shí)間設(shè)置獲取,在lcd上顯示功能,

            源碼如下

            頭文件:

            [cpp]view plaincopyprint?
            1. //RTC
            2. #defineRTC_BASE(0x7E005040)
            3. #definerRTCCON(*(volatileunsigned*)RTC_BASE)
            4. #definerTICNT(*(volatileunsigned*)(RTC_BASE+0x4))
            5. #definerRTCALM(*(volatileunsigned*)(RTC_BASE+0x10))
            6. #definerALMSEC(*(volatileunsigned*)(RTC_BASE+0x14))
            7. #definerALMMIN(*(volatileunsigned*)(RTC_BASE+0x18))
            8. #definerALMHOUR(*(volatileunsigned*)(RTC_BASE+0x1c))
            9. #definerALMDATE(*(volatileunsigned*)(RTC_BASE+0x20))
            10. #definerALMMON(*(volatileunsigned*)(RTC_BASE+0x24))
            11. #definerALMYEAR(*(volatileunsigned*)(RTC_BASE+0x28))
            12. #definerBCDSEC(*(volatileunsigned*)(RTC_BASE+0x30))
            13. #definerBCDMIN(*(volatileunsigned*)(RTC_BASE+0x34))
            14. #definerBCDHOUR(*(volatileunsigned*)(RTC_BASE+0x38))
            15. #definerBCDDATE(*(volatileunsigned*)(RTC_BASE+0x3c))
            16. #definerBCDDAY(*(volatileunsigned*)(RTC_BASE+0x40))
            17. #definerBCDMON(*(volatileunsigned*)(RTC_BASE+0x44))
            18. #definerBCDYEAR(*(volatileunsigned*)(RTC_BASE+0x48))
            19. #definerCURTICNT(*(volatileunsigned*)(RTC_BASE+0x50))
            20. #definerINTP(*(volatileunsigned*)(RTC_BASE-0x10))

            初始化rtc:

            [cpp]view plaincopyprint?
            1. voidinit_rtc()
            2. {
            3. rRTCCON=0x85;
            4. }

            設(shè)置實(shí)時(shí)數(shù)據(jù):

            [cpp]view plaincopyprint?
            1. voidset_rtc()
            2. {
            3. //2012,04.14.13,06
            4. rRTCCON|=0x01;
            5. rBCDSEC=5*16+1;
            6. rBCDMIN=6;
            7. rBCDHOUR=1*16+3;
            8. rBCDDATE=1*16+4;
            9. rBCDMON=4;
            10. rBCDYEAR=1*16+2;
            11. rRTCCON&=~(0x01);
            12. }

            獲取實(shí)時(shí)數(shù)據(jù):

            [cpp]view plaincopyprint?
            1. voidget_rtc(unsignedcharrtc_data[6])
            2. {
            3. rRTCCON|=0x01;
            4. rtc_data[0]=rBCDSEC;
            5. rtc_data[1]=rBCDMIN;
            6. rtc_data[2]=rBCDHOUR;
            7. rtc_data[3]=rBCDDATE;
            8. rtc_data[4]=rBCDMON;
            9. rtc_data[5]=rBCDYEAR;
            10. rRTCCON&=~(0x01);
            11. if(rtc_data[0]==0)
            12. {
            13. rRTCCON|=0x01;
            14. rtc_data[0]=rBCDSEC;
            15. rtc_data[1]=rBCDMIN;
            16. rtc_data[2]=rBCDHOUR;
            17. rtc_data[3]=rBCDDATE;
            18. rtc_data[4]=rBCDMON;
            19. rtc_data[5]=rBCDYEAR;
            20. rRTCCON&=~(0x01);
            21. }
            22. }



            mian:

            [cpp]view plaincopyprint?
            1. init_rtc();
            2. LCD_Init();
            3. Paint_background(0xffffff,0,0,480,272);
            4. set_rtc();
            5. while(1)
            6. {
            7. get_rtc(tmp_rtc);
            8. rtc_data_tmp[13]=tmp_rtc[0];
            9. rtc_data_tmp[12]=tmp_rtc[0]/16;
            10. rtc_data_tmp[11]=tmp_rtc[1];
            11. rtc_data_tmp[10]=tmp_rtc[1]/16;
            12. rtc_data_tmp[9]=tmp_rtc[2];
            13. rtc_data_tmp[8]=tmp_rtc[2]/16;
            14. rtc_data_tmp[7]=tmp_rtc[3];
            15. rtc_data_tmp[6]=tmp_rtc[3]/16;
            16. rtc_data_tmp[5]=tmp_rtc[4];
            17. rtc_data_tmp[4]=tmp_rtc[4]/16;
            18. rtc_data_tmp[3]=tmp_rtc[5];
            19. rtc_data_tmp[2]=tmp_rtc[5]/16;
            20. rtc_data_tmp[1]=tmp_rtc[6];
            21. rtc_data_tmp[0]=tmp_rtc[6]/16;
            22. for(jj=0;jj<14;jj++)
            23. {
            24. Paint_text(124+8*jj,20,0x0,charnum[rtc_data_tmp[jj]],8,16);
            25. }
            26. delay_rtc();
            27. }



            關(guān)鍵詞: ARMS3C6410)rtc實(shí)

            評(píng)論


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

            關(guān)閉