<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 深入理解ARM體系架構(S3C6410)---rtc實(shí)例

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

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

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

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

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


讀寫(xiě)操作:

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


后備電源操作:

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


邏輯圖:

接口:

以下程序完成了時(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í)數據:

[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í)數據:

[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í)

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>