time.c
上传用户:qiulin1960
上传日期:2013-10-16
资源大小:2844k
文件大小:3k
源码类别:

Windows CE

开发平台:

Windows_Unix

  1. //
  2. // Copyright (c) Microsoft Corporation.  All rights reserved.
  3. //
  4. //
  5. // Use of this source code is subject to the terms of the Microsoft end-user
  6. // license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
  7. // If you did not accept the terms of the EULA, you are not authorized to use
  8. // this source code. For a copy of the EULA, please see the LICENSE.RTF on your
  9. // install media.
  10. //
  11. //#include "....KERNELHALARMTIMER.C"
  12. #if 1
  13. #include <windows.h>
  14. #include "s2440.h"
  15. #include "warning.h"
  16. //------------------------------------------------------------------------------
  17. //------------------------------------------------------------------------------
  18. #define FROM_BCD(n)     ((((n) >> 4) * 10) + ((n) & 0xf))
  19. BOOL 
  20. OEMGetRealTime(LPSYSTEMTIME lpst) 
  21. {
  22.     volatile RTCreg *s2440RTC = (RTCreg *)RTC_BASE;
  23.     
  24.     lpst->wSecond    = FROM_BCD(s2440RTC->rBCDSEC );
  25.     lpst->wMinute    = FROM_BCD(s2440RTC->rBCDMIN );
  26.     lpst->wHour      = FROM_BCD(s2440RTC->rBCDHOUR);
  27.     lpst->wDayOfWeek = s2440RTC->rBCDDATE - 1;
  28.     lpst->wDay       = FROM_BCD(s2440RTC->rBCDDAY );
  29.     lpst->wMonth     = FROM_BCD(s2440RTC->rBCDMON );
  30.     lpst->wYear      = FROM_BCD(s2440RTC->rBCDYEAR) + 2000;
  31.     return TRUE;
  32. }
  33. //------------------------------------------------------------------------------
  34. //------------------------------------------------------------------------------
  35. #define TO_BCD(n)       ((((DWORD)(n) / 10) << 4) | ((DWORD)(n) % 10))
  36. BOOL 
  37. OEMSetRealTime(LPSYSTEMTIME lpst) 
  38. {
  39.     volatile INTreg *s2440INT = (INTreg *)INT_BASE;
  40.     volatile RTCreg *s2440RTC = (RTCreg *)RTC_BASE;
  41.     
  42.     s2440RTC->rRTCCON = (1 << 3) | (1 << 0);        /* RTC Control Enable & Reset   */
  43.     
  44.     s2440RTC->rBCDSEC  = (unsigned char)TO_BCD(lpst->wSecond );
  45.     s2440RTC->rBCDMIN  = (unsigned char)TO_BCD(lpst->wMinute );
  46.     s2440RTC->rBCDHOUR = (unsigned char)TO_BCD(lpst->wHour   );
  47.     s2440RTC->rBCDDATE = (unsigned char)(lpst->wDayOfWeek + 1);
  48.     s2440RTC->rBCDDAY  = (unsigned char)TO_BCD(lpst->wDay    );
  49.     s2440RTC->rBCDMON  = (unsigned char)TO_BCD(lpst->wMonth  );
  50.     s2440RTC->rBCDYEAR = (unsigned char)TO_BCD(((DWORD)lpst->wYear % 100));
  51.     s2440RTC->rRTCCON = (0 << 0);                   /* RTC Control Disable          */
  52.     s2440INT->rSRCPND  =  BIT_RTC;                  /* RTC Alarm Interrupt Clear    */
  53.     s2440INT->rINTPND  =  BIT_RTC;
  54.     s2440INT->rINTMSK &= ~BIT_RTC;                  /* RTC Alarm Enable             */
  55.     return TRUE;
  56. }
  57. #endif