📄 timer.cod
字号:
; 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 + -