S3C2440 RTC 实时时钟(miniARM 2440 )


rtc.h

[cpp]

  1. #ifndef RTC_H   
  2. #define RTC_H   
  3.   
  4. #include "2440addr.h"   
  5.   
  6. //实时时钟 数据 均为BCD编码   
  7. typedef struct tag_RtcTime  
  8. {  
  9.     //year 默认从0x2000开始,如果要设置为2010年   
  10.     // year 应赋值为0x10;   
  11.     U16  year;  
  12.     char month;  
  13.     char day;  
  14.     char week;  
  15.     char hour;  
  16.     char minite;  
  17.     char second;  
  18. }RTC_TIME;  
  19. void RtcSetTime(RTC_TIME rt);  
  20. RTC_TIME RtcReadTime(void);  
  21. #endif  

rtc.c 

  [c-sharp]

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

测试程序 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. }  
  12.   
  13. int Main(void)  
  14. {  
  15.     //char buffer[50]={0};   
  16.     RTC_TIME rt;  
  17.       
  18.     rt.year=0x10;  
  19.     rt.month=0x01;  
  20.     rt.day=0x05;  
  21.     rt.week=0x02;  
  22.     rt.hour=0x22;  
  23.     rt.second=0x00;  
  24.     rt.minite=0x01;  
  25.       
  26.     RtcSetTime(rt);  
  27.     UartInit(9600);  
  28.     //rRTCCON = 0x01; //使能写   
  29.     while(1)  
  30.     {  
  31.          UartSendStr("RTC Test/r/n");  
  32.       //sprintf(buffer,"%04x-%02x-%02x-%02x-%02x-%02x/r/n",   
  33.       //                    rBCDYEAR+0x2000,rBCDMON,rBCDDAY,rBCDHOUR,rBCDMIN,rBCDSEC);   
  34.      // UartSendStr(buffer);   
  35.     //  UartPrintf("%x/r/n",255);   
  36.         UartPrintf("%04x-%02x-%02x/r/n",rBCDYEAR+0x2000,rBCDMON,rBCDDAY);  
  37.         delay(2000);  
  38.     }  
  39.     return 0;  
  40. }  

相关内容