⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 realtimeclock.cod

📁 Ep93XX TionProV2 BSP
💻 COD
📖 第 1 页 / 共 2 页
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 13.10.4237 

	TTL	C:\WINCE500\PLATFORM\Ep93xx\Src\Kernel\Hal\Common\.\realtimeclock.c
	CODE32

  00000			 AREA	 |.drectve|, DRECTVE
	DCB	"-defaultlib:coredll.lib "
	DCB	"-defaultlib:corelibc.lib "


  00000			 AREA	 |.data|, DATA
	 COMMON	|dwReschedIncrement|, 0x4

|gfInitRTC| DCD	0x1
; File c:\wince500\platform\ep93xx\src\kernel\hal\common\realtimeclock.c

  00000			 AREA	 |.text| { |add64_64_64| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$add64_64_64|, PDATA, SELECTION=5, ASSOC=|.text| { |add64_64_64| } ; comdat associative
|$T14411| DCD	|$L14410|
	DCD	0x40000b01
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |add64_64_64| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |add64_64_64| PROC

; 328  : {

  00000		 |$L14410|
  00000	e52de004	 str         lr, [sp, #-4]!
  00004		 |$M14408|

; 329  :     __int64 num1, num2;
; 330  : 
; 331  :     num1  = (((__int64)lpNum1->dwHighDateTime)<<32);
; 332  :     num1 += (__int64)lpNum1->dwLowDateTime;
; 333  :     num2  = (((__int64)lpNum2->dwHighDateTime)<<32);
; 334  :     num2 += (__int64)lpNum2->dwLowDateTime;
; 335  :     num1 += num2;

  00004	e590e004	 ldr         lr, [r0, #4]
  00008	e5913004	 ldr         r3, [r1, #4]
  0000c	e5900000	 ldr         r0, [r0]
  00010	e09ee003	 adds        lr, lr, r3
  00014	e5913000	 ldr         r3, [r1]
  00018	e0901003	 adds        r1, r0, r3
  0001c	e2ae3000	 adc         r3, lr, #0

; 336  :     lpResult->dwHighDateTime = (DWORD)(num1 >> 32);
; 337  :     lpResult->dwLowDateTime  = (DWORD)(num1 & 0xffffffff);

  00020	e882000a	 stmia       r2, {r1, r3}

; 338  : }

  00024	e49de004	 ldr         lr, [sp], #4
  00028	e12fff1e	 bx          lr
  0002c		 |$M14409|

			 ENDP  ; |add64_64_64|

	IMPORT	|memset|
	IMPORT	|KSystemTimeToFileTime|
	IMPORT	|CurTicks|

  00000			 AREA	 |.bss|, NOINIT
|gftLastFileTime| % 0x8
|gliLastCurTicks| % 0x8

  00000			 AREA	 |.text| { |initRTC| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$initRTC|, PDATA, SELECTION=5, ASSOC=|.text| { |initRTC| } ; comdat associative
|$T14419| DCD	|$L14418|
	DCD	0x40003102
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |initRTC| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |initRTC| PROC

; 347  : {

  00000		 |$L14418|
  00000	e92d41f0	 stmdb       sp!, {r4 - r8, lr}
  00004	e24dd018	 sub         sp, sp, #0x18
  00008		 |$M14416|

; 348  :     SYSTEMTIME curSysTime;
; 349  :     FILETIME   curFTime;
; 350  : 
; 351  :     RETAILMSG(FALSE,(TEXT("\r\n\n******Called initRTC\r\n\n")));
; 352  : 
; 353  :     // This is changed here so that we don't try to
; 354  :     // initialize the RTC at the same time that it
; 355  :     // is already being done.
; 356  :     //
; 357  :     gfInitRTC = FALSE;

  00008	e59f30b0	 ldr         r3, [pc, #0xB0]
  0000c	e3a01000	 mov         r1, #0

; 358  : 
; 359  :     //
; 360  :     // Provide a default time...
; 361  :     memset( &curSysTime, 0, sizeof( curSysTime ) );

  00010	e3a02010	 mov         r2, #0x10
  00014	e5831000	 str         r1, [r3]
  00018	e3a01000	 mov         r1, #0
  0001c	e28d0008	 add         r0, sp, #8
  00020	eb000000	 bl          memset

; 362  :     curSysTime.wMonth  = 6;
; 363  :     curSysTime.wDay    = 1;
; 364  :     curSysTime.wYear   = 1999;
; 365  :     curSysTime.wHour   = 12;
; 366  :     curSysTime.wMinute = 0;
; 367  :     curSysTime.wSecond = 0;
; 368  : 
; 369  :     // Convert the file time structure
; 370  :     //
; 371  :     if( !KSystemTimeToFileTime( &curSysTime, &curFTime ) )

  00024	e59f3090	 ldr         r3, [pc, #0x90]
  00028	e3a02d1f	 mov         r2, #0x1F, 26
  0002c	e382200f	 orr         r2, r2, #0xF
  00030	e5933000	 ldr         r3, [r3]
  00034	e3a05006	 mov         r5, #6
  00038	e3a04001	 mov         r4, #1
  0003c	e3a0600c	 mov         r6, #0xC
  00040	e3a07000	 mov         r7, #0
  00044	e3a08000	 mov         r8, #0
  00048	e1cd20b8	 strh        r2, [sp, #8]
  0004c	e28d1000	 add         r1, sp, #0
  00050	e28d0008	 add         r0, sp, #8
  00054	e1cd50ba	 strh        r5, [sp, #0xA]
  00058	e1cd40be	 strh        r4, [sp, #0xE]
  0005c	e1cd61b0	 strh        r6, [sp, #0x10]
  00060	e1cd71b2	 strh        r7, [sp, #0x12]
  00064	e1cd81b4	 strh        r8, [sp, #0x14]
  00068	e1a0e00f	 mov         lr, pc
  0006c	e12fff13	 bx          r3

; 372  :     {
; 373  :         memset( &curSysTime, 0, sizeof( curSysTime ) );
; 374  :         memset( &curFTime, 0, sizeof( curFTime ) );
; 375  :     }
; 376  : 
; 377  :     // Update current versions of the RTC support
; 378  :     //
; 379  :     gliLastCurTicks.QuadPart = CurTicks.QuadPart;

  00070	e59f2040	 ldr         r2, [pc, #0x40]
  00074	e3500000	 cmp         r0, #0
  00078	03a03000	 moveq       r3, #0
  0007c	e59fe030	 ldr         lr, [pc, #0x30]
  00080	058d3000	 streq       r3, [sp]

; 380  :     gftLastFileTime.dwLowDateTime  = curFTime.dwLowDateTime;

  00084	e59d0000	 ldr         r0, [sp]
  00088	058d3004	 streq       r3, [sp, #4]
  0008c	e5923000	 ldr         r3, [r2]
  00090	e5922004	 ldr         r2, [r2, #4]

; 381  :     gftLastFileTime.dwHighDateTime = curFTime.dwHighDateTime;

  00094	e59d1004	 ldr         r1, [sp, #4]
  00098	e58e3000	 str         r3, [lr]
  0009c	e58e0008	 str         r0, [lr, #8]
  000a0	e58e2004	 str         r2, [lr, #4]
  000a4	e58e100c	 str         r1, [lr, #0xC]

; 382  : }

  000a8	e28dd018	 add         sp, sp, #0x18
  000ac	e8bd41f0	 ldmia       sp!, {r4 - r8, lr}
  000b0	e12fff1e	 bx          lr
  000b4		 |$L14421|
  000b4	00000000	 DCD         |gliLastCurTicks|
  000b8	00000000	 DCD         |CurTicks|
  000bc	00000000	 DCD         |KSystemTimeToFileTime|
  000c0	00000000	 DCD         |gfInitRTC|
  000c4		 |$M14417|

			 ENDP  ; |initRTC|

	EXPORT	|OEMGetRealTime|
	IMPORT	|KFileTimeToSystemTime|

  00000			 AREA	 |.text| { |OEMGetRealTime| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$OEMGetRealTime|, PDATA, SELECTION=5, ASSOC=|.text| { |OEMGetRealTime| } ; comdat associative
|$T14449| DCD	|$L14448|
	DCD	0x40003d02
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |OEMGetRealTime| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |OEMGetRealTime| PROC

; 386  : {

  00000		 |$L14448|
  00000	e92d41f0	 stmdb       sp!, {r4 - r8, lr}
  00004	e24dd008	 sub         sp, sp, #8
  00008		 |$M14446|
  00008	e1a08000	 mov         r8, r0

; 387  :     //
; 388  :     // NOTE:  this function is assumed to return a LOCAL time rather than a UTC time!
; 389  :     //
; 390  :     unsigned __int64 ui64Delta;
; 391  :     BOOL             bResult = FALSE;
; 392  :     LARGE_INTEGER    liTimeDelta;
; 393  :     FILETIME         ftDelta;
; 394  :     FILETIME         ftCurFTime;
; 395  :     LARGE_INTEGER    tmpCurTicks;
; 396  : 
; 397  :     if (gfInitRTC) 

  0000c	e59f30dc	 ldr         r3, [pc, #0xDC]
  00010	e5933000	 ldr         r3, [r3]
  00014	e3530000	 cmp         r3, #0

; 398  :     {
; 399  :         // Setup the software RTC...
; 400  :         // gliLastCurTicks & gftLastFileTime is set in 
; 401  :         // the following call.
; 402  :         initRTC();

  00018	1b000000	 blne        initRTC

; 403  :     }
; 404  : 
; 405  :     // get a snapshot of the current tick count...
; 406  :     tmpCurTicks.QuadPart = CurTicks.QuadPart;

  0001c	e59f30c8	 ldr         r3, [pc, #0xC8]

; 407  : 
; 408  :     // Calculate the current diference
; 409  :     //
; 410  :     if( tmpCurTicks.QuadPart >= gliLastCurTicks.QuadPart )

  00020	e59f50c0	 ldr         r5, [pc, #0xC0]
  00024	e5936000	 ldr         r6, [r3]
  00028	e5937004	 ldr         r7, [r3, #4]
  0002c	e5951004	 ldr         r1, [r5, #4]
  00030	e5953000	 ldr         r3, [r5]
  00034	e1570001	 cmp         r7, r1
  00038	ba000005	 blt         |$L14347|
  0003c	ca000001	 bgt         |$L14429|
  00040	e1560003	 cmp         r6, r3
  00044	3a000002	 bcc         |$L14347|
  00048		 |$L14429|

; 411  :     {
; 412  :         liTimeDelta.QuadPart = 
; 413  :                 tmpCurTicks.QuadPart - gliLastCurTicks.QuadPart;

  00048	e056e003	 subs        lr, r6, r3
  0004c	e0c74001	 sbc         r4, r7, r1

; 414  :     }
; 415  :     else

  00050	ea000005	 b           |$L14348|
  00054		 |$L14347|

; 416  :     {
; 417  :         // The counter wrapped...
; 418  :         LARGE_INTEGER liMaxLargeInt;
; 419  :         
; 420  :         liMaxLargeInt.HighPart = 0xFFFFFFFF;
; 421  :         liMaxLargeInt.LowPart  = 0xFFFFFFFF;

  00054	e3e02000	 mvn         r2, #0

; 422  : 
; 423  :         liTimeDelta.QuadPart = 
; 424  :             tmpCurTicks.QuadPart + 
; 425  :             (liMaxLargeInt.QuadPart - gliLastCurTicks.QuadPart);

  00058	e0522003	 subs        r2, r2, r3
  0005c	e3e03000	 mvn         r3, #0
  00060	e0c33001	 sbc         r3, r3, r1
  00064	e092e006	 adds        lr, r2, r6
  00068	e0a34007	 adc         r4, r3, r7
  0006c		 |$L14348|

; 426  :     }
; 427  : 
; 428  :     ui64Delta = (unsigned __int64) liTimeDelta.QuadPart;
; 429  :     TICKS_TO_NANO_CHUNKS( ui64Delta ); // convert to nano chunks

  0006c	e3a02e51	 mov         r2, #0x51, 28
  00070	e3822006	 orr         r2, r2, #6
  00074	e083029e	 umull       r0, r3, lr, r2
  00078	e0213294	 mla         r1, r4, r2, r3

; 430  : 
; 431  :     // setup to add in the nano chunk time difference
; 432  :     ftDelta.dwLowDateTime  = (DWORD)  ui64Delta;
; 433  :     ftDelta.dwHighDateTime = (DWORD) (ui64Delta >> 32);
; 434  : 
; 435  :     // Add the delta to the last known time...
; 436  :     //
; 437  :     add64_64_64(  &gftLastFileTime , &ftDelta, &ftCurFTime );

  0007c	e595200c	 ldr         r2, [r5, #0xC]
  00080	e1a03c81	 mov         r3, r1, lsl #25
  00084	e092e3a1	 adds        lr, r2, r1, lsr #7
  00088	e5952008	 ldr         r2, [r5, #8]
  0008c	e18303a0	 orr         r0, r3, r0, lsr #7

; 438  : 
; 439  :     // convert the answer to a system time format
; 440  :     //
; 441  :     if(KFileTimeToSystemTime( &ftCurFTime, lpst ) )

  00090	e59f304c	 ldr         r3, [pc, #0x4C]
  00094	e0922000	 adds        r2, r2, r0
  00098	e1a01008	 mov         r1, r8
  0009c	e5934000	 ldr         r4, [r3]
  000a0	e2ae3000	 adc         r3, lr, #0
  000a4	e58d3004	 str         r3, [sp, #4]
  000a8	e28d0000	 add         r0, sp, #0
  000ac	e58d2000	 str         r2, [sp]
  000b0	e1a0e00f	 mov         lr, pc
  000b4	e12fff14	 bx          r4
  000b8	e3500000	 cmp         r0, #0

; 442  :     {
; 443  :         //
; 444  :         // update the RTC variables...
; 445  :         //
; 446  :         gftLastFileTime.dwLowDateTime  = ftCurFTime.dwLowDateTime;

  000bc	159d3000	 ldrne       r3, [sp]

; 447  :         gftLastFileTime.dwHighDateTime = ftCurFTime.dwHighDateTime;

  000c0	159d2004	 ldrne       r2, [sp, #4]

; 448  :         gliLastCurTicks.QuadPart = tmpCurTicks.QuadPart;
; 449  :         bResult = TRUE;

  000c4	13a00001	 movne       r0, #1
  000c8	15853008	 strne       r3, [r5, #8]
  000cc	1585200c	 strne       r2, [r5, #0xC]
  000d0	188500c0	 stmneia     r5, {r6, r7}

; 450  :     }
; 451  :     else
; 452  :     {
; 453  :         // Failed, don't change anything!!!!

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -