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

📄 timer.cod

📁 EP9315的BSP包(WINCE下的BSP,内有各种驱动的详细的代码)
💻 COD
📖 第 1 页 / 共 2 页
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 12.20.9615 

	TTL	d:\wince420\platform\ep931x\kernel\hal\.\timer.c
	CODE32

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


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

	EXPORT	|CPUEnterIdle|
	IMPORT	|INTERRUPTS_ON|
; File d:\wince420\platform\ep931x\kernel\hal\timer.c

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

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

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

  00000		 |CPUEnterIdle| PROC

; 66   : {

  00000	e92d4010	 stmdb     sp!, {r4, lr}
  00004		 |$M13086|

; 67   :     fInterruptFlag = FALSE;

  00004	e59f401c	 ldr       r4, [pc, #0x1C]
  00008	e3a00000	 mov       r0, #0
  0000c	e5840000	 str       r0, [r4]

; 68   :     INTERRUPTS_ON();

  00010	eb000000	 bl        INTERRUPTS_ON
  00014		 |$L12992|

; 69   :     while (!fInterruptFlag) 

  00014	e5940000	 ldr       r0, [r4]
  00018	e3500000	 cmp       r0, #0
  0001c	0afffffc	 beq       |$L12992|

; 70   :     {
; 71   :         // Just sit here. Any interrupt will bump us out.
; 72   :         //
; 73   :         // Execute halt command here.
; 74   :         //
; 75   :     }
; 76   : }

  00020	e8bd4010	 ldmia     sp!, {r4, lr}
  00024	e12fff1e	 bx        lr
  00028		 |$L13090|
  00028	00000000	 DCD       |fInterruptFlag|
  0002c		 |$M13087|

			 ENDP  ; |CPUEnterIdle|

	EXPORT	|CPUGetSysTimerCountMax|

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

  00000			 AREA	 |.pdata$$CPUGetSysTimerCountMax|, PDATA, SELECTION=5, ASSOC=|.text| { |CPUGetSysTimerCountMax| } ; comdat associative
|$T13097| DCD	|CPUGetSysTimerCountMax|
	DCD	0x40000300
; Function compile flags: /Ogsy

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

  00000		 |CPUGetSysTimerCountMax| PROC

; 85   : {

  00000		 |$M13095|

; 86   :     if (dwIdleMSecRequested > IDLE_MAX_MS) 

  00000	e3500080	 cmp       r0, #0x80

; 87   :     {
; 88   :         //
; 89   :         // Our timer isn't capable of idling more than IDLE_MAX_MS milliseconds. 
; 90   :         // We'll have to break the sleep time into reasonable chunks.
; 91   :         //
; 92   :         return IDLE_MAX_MS;

  00004	83a00080	 movhi     r0, #0x80

; 93   :     }
; 94   :     
; 95   :     return dwIdleMSecRequested;
; 96   : }

  00008	e12fff1e	 bx        lr
  0000c		 |$M13096|

			 ENDP  ; |CPUGetSysTimerCountMax|

	EXPORT	|SetSysTimerInterval|

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

  00000			 AREA	 |.pdata$$SetSysTimerInterval|, PDATA, SELECTION=5, ASSOC=|.text| { |SetSysTimerInterval| } ; comdat associative
|$T13104| DCD	|SetSysTimerInterval|
	DCD	0x40000a00
; Function compile flags: /Ogsy

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

  00000		 |SetSysTimerInterval| PROC

; 105  : {

  00000		 |$M13102|

; 106  :     // NKDbgPrintfW
; 107  :     // (
; 108  :     //     L"Interval = 0x%0x\r\n", 
; 109  :     //     dwTicks
; 110  :     // );
; 111  : 
; 112  :     //
; 113  :     // Program the new timer value
; 114  :     //
; 115  :     *TIM_TIMER1CONTROL  = TIMERCONTROL_CLKSEL | TIMERCONTROL_MODE ;

  00000	e59f301c	 ldr       r3, [pc, #0x1C]
  00004	e3a01048	 mov       r1, #0x48

; 116  :     *TIM_TIMER1LOAD     = dwTicks;

  00008	e3a0220b	 mov       r2, #0xB, 4
  0000c	e5831000	 str       r1, [r3]
  00010	e3822881	 orr       r2, r2, #0x81, 16

; 117  :     *TIM_TIMER1CONTROL  = TIMERCONTROL_CLKSEL | TIMERCONTROL_MODE | 
; 118  :                           TIMERCONTROL_ENABLE;

  00014	e3a010c8	 mov       r1, #0xC8
  00018	e5820000	 str       r0, [r2]
  0001c	e5831000	 str       r1, [r3]

; 119  : }

  00020	e12fff1e	 bx        lr
  00024		 |$L13106|
  00024	b0810008	 DCD       0xb0810008
  00028		 |$M13103|

			 ENDP  ; |SetSysTimerInterval|

	EXPORT	|CPUSetSysTimerCount|

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

  00000			 AREA	 |.pdata$$CPUSetSysTimerCount|, PDATA, SELECTION=5, ASSOC=|.text| { |CPUSetSysTimerCount| } ; comdat associative
|$T13112| DCD	|CPUSetSysTimerCount|
	DCD	0x40000c00
; Function compile flags: /Ogsy

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

  00000		 |CPUSetSysTimerCount| PROC

; 128  : {

  00000		 |$M13110|

; 129  :     DWORD dwTicks;
; 130  : 
; 131  :     //   
; 132  :     // Determine the number of ticks required for the number of milliseconds 
; 133  :     // requested 
; 134  :     //
; 135  :     dwTicks = dwIdleMSec * RESCHED_INCREMENT;
; 136  :     
; 137  :     //
; 138  :     // Program the new timer value
; 139  :     //
; 140  :     *TIM_TIMER1CONTROL  = TIMERCONTROL_CLKSEL | TIMERCONTROL_MODE ;

  00000	e59f3024	 ldr       r3, [pc, #0x24]
  00004	e3a01048	 mov       r1, #0x48
  00008	e0600380	 rsb       r0, r0, r0, lsl #7
  0000c	e5831000	 str       r1, [r3]

; 141  :     *TIM_TIMER1LOAD    = dwTicks;

  00010	e3a0220b	 mov       r2, #0xB, 4
  00014	e1a01100	 mov       r1, r0, lsl #2
  00018	e3822881	 orr       r2, r2, #0x81, 16

; 142  :     *TIM_TIMER1CONTROL  = TIMERCONTROL_CLKSEL | TIMERCONTROL_MODE | 
; 143  :                           TIMERCONTROL_ENABLE;

  0001c	e3a000c8	 mov       r0, #0xC8
  00020	e5821000	 str       r1, [r2]
  00024	e5830000	 str       r0, [r3]

; 144  : }

  00028	e12fff1e	 bx        lr
  0002c		 |$L13114|
  0002c	b0810008	 DCD       0xb0810008
  00030		 |$M13111|

			 ENDP  ; |CPUSetSysTimerCount|

	EXPORT	|CPUClearSysTimerIRQ|

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

  00000			 AREA	 |.pdata$$CPUClearSysTimerIRQ|, PDATA, SELECTION=5, ASSOC=|.text| { |CPUClearSysTimerIRQ| } ; comdat associative
|$T13121| DCD	|CPUClearSysTimerIRQ|
	DCD	0x40000900
; Function compile flags: /Ogsy

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

  00000		 |CPUClearSysTimerIRQ| PROC

; 155  : {

  00000		 |$M13119|

; 156  :     BOOL    bReturnValue;
; 157  : 
; 158  :     bReturnValue = (*VIC1_RAWINTR & INT1_TIMER1);

  00000	e59f0018	 ldr       r0, [pc, #0x18]
  00004	e5900000	 ldr       r0, [r0]
  00008	e2100010	 ands      r0, r0, #0x10

; 159  :     if(bReturnValue)
; 160  :     {
; 161  :         *TIM_TIMER1CLEAR = 0;

  0000c	159f2008	 ldrne     r2, [pc, #8]
  00010	13a01000	 movne     r1, #0
  00014	15821000	 strne     r1, [r2]

; 162  :     }
; 163  : 
; 164  :     //
; 165  :     // Return if an interrupt was pending.
; 166  :     //
; 167  :     return(bReturnValue);
; 168  : }

  00018	e12fff1e	 bx        lr
  0001c		 |$L13123|
  0001c	b081000c	 DCD       0xb081000c
  00020	b00b0008	 DCD       0xb00b0008
  00024		 |$M13120|

			 ENDP  ; |CPUClearSysTimerIRQ|

	EXPORT	|CPUGetSysTimerCountElapsed|

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

  00000			 AREA	 |.pdata$$CPUGetSysTimerCountElapsed|, PDATA, SELECTION=5, ASSOC=|.text| { |CPUGetSysTimerCountElapsed| } ; comdat associative
|$T13138| DCD	|CPUGetSysTimerCountElapsed|
	DCD	0x40003201
; Function compile flags: /Ogsy

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

  00000		 |CPUGetSysTimerCountElapsed| PROC

; 234  : {

  00000	e92d41f0	 stmdb     sp!, {r4 - r8, lr}
  00004		 |$M13136|
  00004	e1a04000	 mov       r4, r0
  00008	e1a08001	 mov       r8, r1

⌨️ 快捷键说明

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