歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> S3C2440 RTC 實時時鐘(miniARM 2440 )

S3C2440 RTC 實時時鐘(miniARM 2440 )

日期:2017/3/1 10:35:41   编辑:Linux編程

rtc.h

[cpp]

  1. #ifndef RTC_H
  2. #define RTC_H
  3. #include "2440addr.h"
  4. //實時時鐘 數據 均為BCD編碼
  5. typedef struct tag_RtcTime
  6. {
  7. //year 默認從0x2000開始,如果要設置為2010年
  8. // year 應賦值為0x10;
  9. U16 year;
  10. char month;
  11. char day;
  12. char week;
  13. char hour;
  14. char minite;
  15. char second;
  16. }RTC_TIME;
  17. void RtcSetTime(RTC_TIME rt);
  18. RTC_TIME RtcReadTime(void);
  19. #endif

rtc.c

[c-sharp]

  1. #include "rtc.h"
  2. void RtcSetTime(RTC_TIME rt)
  3. {
  4. rRTCCON = 0x01; //使能寫
  5. rBCDYEAR = rt.year;
  6. rBCDMON = rt.month;
  7. rBCDDATE = rt.week;
  8. rBCDDAY = rt.day;
  9. rBCDHOUR = rt.hour;
  10. rBCDSEC = rt.second;
  11. rBCDMIN = rt.minite;
  12. rRTCCON &=~0x01;
  13. }
  14. RTC_TIME RtcReadTime(void)
  15. {
  16. RTC_TIME rt;
  17. //..............
  18. return rt;
  19. }

測試程序 main.c

[cpp]

  1. #include "uart.h"
  2. #include "rtc.h"
  3. void delay(U32 tt)
  4. {
  5. U32 i;
  6. for(;tt>0;tt--)
  7. {
  8. for(i=0;i<10000;i++){}
  9. }
  10. }
  11. int Main(void)
  12. {
  13. //char buffer[50]={0};
  14. RTC_TIME rt;
  15. rt.year=0x10;
  16. rt.month=0x01;
  17. rt.day=0x05;
  18. rt.week=0x02;
  19. rt.hour=0x22;
  20. rt.second=0x00;
  21. rt.minite=0x01;
  22. RtcSetTime(rt);
  23. UartInit(9600);
  24. //rRTCCON = 0x01; //使能寫
  25. while(1)
  26. {
  27. UartSendStr("RTC Test/r/n");
  28. //sprintf(buffer,"%04x-%02x-%02x-%02x-%02x-%02x/r/n",
  29. // rBCDYEAR+0x2000,rBCDMON,rBCDDAY,rBCDHOUR,rBCDMIN,rBCDSEC);
  30. // UartSendStr(buffer);
  31. // UartPrintf("%x/r/n",255);
  32. UartPrintf("%04x-%02x-%02x/r/n",rBCDYEAR+0x2000,rBCDMON,rBCDDAY);
  33. delay(2000);
  34. }
  35. return 0;
  36. }
Copyright © Linux教程網 All Rights Reserved