📄 interrupt.cod
字号:
00140 e3100901 tst r0, #1, 18
00144 0a00001f beq |$L15737|
; 238 : dwFillCount=4;
00148 e3a04004 mov r4, #4
0014c |$L15404|
; 239 :
; 240 : if( dwFillCount )
; 241 : {
; 242 : //
; 243 : // Check to see if the transmit buffer is enabled.
; 244 : //
; 245 : if(sPlayBack.bEnabled )
0014c e59f1130 ldr r1, [pc, #0x130]
00150 e5913014 ldr r3, [r1, #0x14]
00154 e3530000 cmp r3, #0
00158 0a000013 beq |$L15750|
; 246 : {
; 247 : p = sPlayBack.pulPosition;
0015c e5912010 ldr r2, [r1, #0x10]
; 248 : if(p == sPlayBack.pulBufferHalf)
00160 e591300c ldr r3, [r1, #0xC]
00164 e1520003 cmp r2, r3
; 249 : {
; 250 : *VIC1_SOFTINT = INT1_UNUSED1;
; 251 : }
; 252 : else if(p >= sPlayBack.pulBufferEnd )
00168 0a000004 beq |$L15764|
0016c e5913008 ldr r3, [r1, #8]
00170 e1520003 cmp r2, r3
00174 3a000002 bcc |$L15749|
; 253 : {
; 254 : p = sPlayBack.pulPosition = sPlayBack.pulBuffer;
00178 e5912000 ldr r2, [r1]
0017c e5812010 str r2, [r1, #0x10]
00180 |$L15764|
; 255 : *VIC1_SOFTINT = INT1_UNUSED1;
00180 e58e5000 str r5, [lr]
00184 |$L15749|
00184 e59f50f4 ldr r5, [pc, #0xF4]
00188 e59f60ec ldr r6, [pc, #0xEC]
0018c |$L15413|
; 256 : }
; 257 :
; 258 : while ( dwFillCount -- )
; 259 : {
; 260 : *SAI_TX0_LEFT = *p++;
0018c e4923004 ldr r3, [r2], #4
00190 e2544001 subs r4, r4, #1
00194 e5853000 str r3, [r5]
; 261 : *SAI_TX0_RIGHT = *p++;
00198 e4923004 ldr r3, [r2], #4
0019c e5863000 str r3, [r6]
001a0 1afffff9 bne |$L15413|
; 262 : }
; 263 : sPlayBack.pulPosition= p;
001a4 e5812010 str r2, [r1, #0x10]
; 264 : }
; 265 : else
001a8 ea000006 b |$L15737|
001ac |$L15750|
001ac e59f50cc ldr r5, [pc, #0xCC]
001b0 e59f60c4 ldr r6, [pc, #0xC4]
001b4 e3a03000 mov r3, #0
001b8 |$L15419|
; 266 : {
; 267 : while ( dwFillCount -- )
; 268 : {
; 269 : *SAI_TX0_LEFT = 0;
001b8 e5853000 str r3, [r5]
; 270 : *SAI_TX0_RIGHT = 0;
001bc e5863000 str r3, [r6]
001c0 e2544001 subs r4, r4, #1
001c4 1afffffb bne |$L15419|
001c8 |$L15737|
; 271 : }
; 272 : }
; 273 : }
; 274 :
; 275 : dwFillCount=0;
; 276 : if(ulSAIStatus & GSR_RX0_FIFO_FULL )
001c8 e3100902 tst r0, #2, 18
; 277 : dwFillCount=8;
001cc 13a00008 movne r0, #8
001d0 1a000002 bne |$L15425|
; 278 : else if(ulSAIStatus & GSR_RX0_FIFO_HALF_FULL )
001d4 e3100802 tst r0, #2, 16
001d8 0a000021 beq |$L15741|
; 279 : dwFillCount=4;
001dc e3a00004 mov r0, #4
001e0 |$L15425|
; 280 :
; 281 : if( dwFillCount )
; 282 : {
; 283 : //
; 284 : // Check to see if the recieve buffer is enabled.
; 285 : //
; 286 : if(sRecord.bEnabled )
001e0 e59f1090 ldr r1, [pc, #0x90]
001e4 e5913014 ldr r3, [r1, #0x14]
001e8 e3530000 cmp r3, #0
001ec 0a000014 beq |$L15752|
; 287 : {
; 288 : p = sRecord.pulPosition;
001f0 e5912010 ldr r2, [r1, #0x10]
; 289 : if(p == sRecord.pulBufferHalf)
001f4 e591300c ldr r3, [r1, #0xC]
001f8 e1520003 cmp r2, r3
; 290 : {
; 291 : *VIC1_SOFTINT = INT1_UNUSED2;
; 292 : }
; 293 : else if(p >= sRecord.pulBufferEnd )
001fc 0a000004 beq |$L15765|
00200 e5913008 ldr r3, [r1, #8]
00204 e1520003 cmp r2, r3
00208 3a000003 bcc |$L15751|
; 294 : {
; 295 : p = sRecord.pulPosition = sRecord.pulBuffer;
0020c e5912000 ldr r2, [r1]
; 296 : *VIC1_SOFTINT = INT1_UNUSED2;
00210 e5812010 str r2, [r1, #0x10]
00214 |$L15765|
00214 e3a03002 mov r3, #2
00218 e58e3000 str r3, [lr]
0021c |$L15751|
0021c e59fe050 ldr lr, [pc, #0x50]
00220 e59f4048 ldr r4, [pc, #0x48]
00224 |$L15434|
; 297 : }
; 298 :
; 299 : while ( dwFillCount -- )
; 300 : {
; 301 : *p++ = *SAI_RX0_LEFT;
00224 e59e3000 ldr r3, [lr]
00228 e2500001 subs r0, r0, #1
0022c e4823004 str r3, [r2], #4
; 302 : *p++ = *SAI_RX0_RIGHT;
00230 e5943000 ldr r3, [r4]
00234 e4823004 str r3, [r2], #4
00238 1afffff9 bne |$L15434|
; 211 : *p++ = *pAC97DR;
0023c e5812010 str r2, [r1, #0x10]
; 212 :
; 213 : sRecord.pulPosition= p;
; 214 : }
; 215 : else
00240 ea000007 b |$L15741|
00244 |$L15752|
; 303 : }
; 304 :
; 305 : sRecord.pulPosition= p;
; 306 : }
; 307 : else
00244 e59fe028 ldr lr, [pc, #0x28]
00248 e59f4020 ldr r4, [pc, #0x20]
0024c |$L15440|
; 308 : {
; 309 : while ( dwFillCount -- )
; 310 : {
; 311 : ulTemp = *SAI_RX0_LEFT;
0024c e59e3000 ldr r3, [lr]
00250 e2500001 subs r0, r0, #1
00254 e58d3000 str r3, [sp]
; 312 : ulTemp = *SAI_RX0_RIGHT;
00258 e5943000 ldr r3, [r4]
0025c e58d3000 str r3, [sp]
00260 1afffff9 bne |$L15440|
00264 |$L15741|
; 313 : }
; 314 : }
; 315 : }
; 316 : }
; 317 :
; 318 : }
00264 e28dd004 add sp, sp, #4
00268 e8bd4070 ldmia sp!, {r4 - r6, lr}
0026c e12fff1e bx lr
00270 |$L15772|
00270 b0820044 DCD 0xb0820044
00274 b0820040 DCD 0xb0820040
00278 00000000 DCD |sRecord|
0027c b0820014 DCD 0xb0820014
00280 b0820010 DCD 0xb0820010
00284 00000000 DCD |sPlayBack|
00288 b0820008 DCD 0xb0820008
0028c b0880014 DCD 0xb0880014
00290 b00b0018 DCD 0xb00b0018
00294 00000000 DCD |fInterruptFlag|
00298 00000000 DCD |gbAC97|
0029c |$M15768|
ENDP ; |OEMInterruptHandlerFIQ|
EXPORT |TimerInterrupt|
EXPORT |??_C@_1CO@PJFACELA@?$AAI?$AAN?$AAT?$AA?5?$AAl?$AAo?$AAs?$AAt?$AA?5?$AA?$CF?$AAd?$AA?5?$AAl?$AAa?$AAs?$AAt?$AA?5?$AA?$CF?$AAd?$AA?5@| [ DATA ] ; `string'
EXPORT |??_C@_1BI@GPLMCHNC@?$AAI?$AAn?$AAt?$AAr?$AAT?$AAi?$AAm?$AAe?$AAr?$AA?$AN?$AA?6?$AA?$AA@| [ DATA ] ; `string'
IMPORT |dwIntrTimeCountdownRef|
IMPORT |PerfCountSinceTick|
IMPORT |PerfCountValueSinceTick|
IMPORT |NKDbgPrintfW|
IMPORT |dwReschedTime|
IMPORT |CurMSec|
IMPORT |CurTicks|
IMPORT |PProfileInterrupt|
IMPORT |dwIsrTime1|
IMPORT |dwIsrTime2|
IMPORT |fIntrTime|
IMPORT |wNumInterrupts|
IMPORT |dwIntrTimeCountdown|
00000 AREA |.text| { |TimerInterrupt| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$TimerInterrupt|, PDATA, SELECTION=5, ASSOC=|.text| { |TimerInterrupt| } ; comdat associative
|$T15783| DCD |$L15782|
DCD 0x40008b01
00000 AREA |.rdata| { |??_C@_1BI@GPLMCHNC@?$AAI?$AAn?$AAt?$AAr?$AAT?$AAi?$AAm?$AAe?$AAr?$AA?$AN?$AA?6?$AA?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1BI@GPLMCHNC@?$AAI?$AAn?$AAt?$AAr?$AAT?$AAi?$AAm?$AAe?$AAr?$AA?$AN?$AA?6?$AA?$AA@| DCB "I"
DCB 0x0, "n", 0x0, "t", 0x0, "r", 0x0, "T", 0x0, "i", 0x0, "m"
DCB 0x0, "e", 0x0, "r", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_1CO@PJFACELA@?$AAI?$AAN?$AAT?$AA?5?$AAl?$AAo?$AAs?$AAt?$AA?5?$AA?$CF?$AAd?$AA?5?$AAl?$AAa?$AAs?$AAt?$AA?5?$AA?$CF?$AAd?$AA?5@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1CO@PJFACELA@?$AAI?$AAN?$AAT?$AA?5?$AAl?$AAo?$AAs?$AAt?$AA?5?$AA?$CF?$AAd?$AA?5?$AAl?$AAa?$AAs?$AAt?$AA?5?$AA?$CF?$AAd?$AA?5@| DCB "I"
DCB 0x0, "N", 0x0, "T", 0x0, " ", 0x0, "l", 0x0, "o", 0x0, "s"
DCB 0x0, "t", 0x0, " ", 0x0, "%", 0x0, "d", 0x0, " ", 0x0, "l"
DCB 0x0, "a", 0x0, "s", 0x0, "t", 0x0, " ", 0x0, "%", 0x0, "d"
DCB 0x0, " ", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |TimerInterrupt| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |TimerInterrupt| PROC
; 997 : {
00000 |$L15782|
00000 e92d43f0 stmdb sp!, {r4 - r9, lr}
00004 |$M15780|
; 998 : DWORD retval = SYSINTR_NOP;
; 999 : DWORD dwTimerVal;
; 1000 :
; 1001 : static DWORD dwLastTimerValue=0;
; 1002 : static BOOL bFirstTime=TRUE;
; 1003 :
; 1004 : extern volatile DWORD PerfCountValueSinceTick;
; 1005 :
; 1006 : extern void SetSysTimerInterval(DWORD dwTicks);
; 1007 : // static int iCount = 0;
; 1008 : //
; 1009 : // update the tick count
; 1010 : //
; 1011 :
; 1012 : if( bFirstTime )
00004 e59f021c ldr r0, [pc, #0x21C]
00008 e59f5214 ldr r5, [pc, #0x214]
; 1013 : {
; 1014 : CurTicks.QuadPart=(CurMSec+RESCHED_PERIOD)*983;
; 1015 :
; 1016 : dwLastTimerValue=*TIM_DEBUGVALUELOW;
0000c e59f620c ldr r6, [pc, #0x20C]
00010 e5903000 ldr r3, [r0]
00014 e5958000 ldr r8, [r5]
00018 e3a04000 mov r4, #0
0001c e3530000 cmp r3, #0
00020 e3a09000 mov r9, #0
00024 0a00000c beq |$L15547|
00028 e3a02ff5 mov r2, #0xF5, 30
0002c e3822003 orr r2, r2, #3
00030 e2883001 add r3, r8, #1
00034 e59f11dc ldr r1, [pc, #0x1DC]
00038 e0020293 mul r2, r3, r2
0003c e59f31d8 ldr r3, [pc, #0x1D8]
00040 e5812000 str r2, [r1]
00044 e5819004 str r9, [r1, #4]
00048 e5933000 ldr r3, [r3]
; 1017 : bFirstTime=FALSE;
0004c e3a02000 mov r2, #0
00050 e5802000 str r2, [r0]
00054 e5863004 str r3, [r6, #4]
; 1018 : }
; 1019 : else
00058 ea000015 b |$L15549|
0005c |$L15547|
; 1020 : {
; 1021 : dwTimerVal=*TIM_DEBUGVALUELOW;
; 1022 :
; 1023 : if( (int)(dwTimerVal-dwLastTimerValue)<0 )
0005c e59f31b8 ldr r3, [pc, #0x1B8]
00060 e5962004 ldr r2, [r6, #4]
00064 e593e000 ldr lr, [r3]
00068 e05e7002 subs r7, lr, r2
0006c 5a000008 bpl |$L15552|
; 1024 : CurTicks.QuadPart += dwTimerVal + (0xFFFFFFFF - dwLastTimerValue);
00070 e59f01a0 ldr r0, [pc, #0x1A0]
00074 e2471001 sub r1, r7, #1
00078 e5903000 ldr r3, [r0]
0007c e5902004 ldr r2, [r0, #4]
00080 e0913003 adds r3, r1, r3
00084 e2a22000 adc r2, r2, #0
00088 e5803000 str r3, [r0]
0008c e5802004 str r2, [r0, #4]
; 1025 : else
00090 ea000006 b |$L15553|
00094 |$L15552|
; 1026 : CurTicks.QuadPart += dwTimerVal-dwLastTimerValue;
00094 e59f117c ldr r1, [pc, #0x17C]
00098 e5913000 ldr r3, [r1]
0009c e5912004 ldr r2, [r1, #4]
000a0 e0973003 adds r3, r7, r3
000a4 e2a22000 adc r2, r2, #0
000a8 e5813000 str r3, [r1]
000ac e5812004 str r2, [r1, #4]
000b0 |$L15553|
; 1027 :
; 1028 : dwLastTimerValue=dwTimerVal;
000b0 e586e004 str lr, [r6, #4]
000b4 |$L15549|
; 1029 : }
; 1030 :
; 1031 : //CurTicks.QuadPart = CurTicksCount.QuadPart*508468/983040;// dwReschedIncrement;
; 1032 :
; 1033 :
; 1034 : //
; 1035 : // Print out a 1 every second. I want to make sure that we are getting ticks.
; 1036 : //
; 1037 : // Call the profile ISR if it's enabled.
; 1038 : //
; 1039 : if (PProfileInterrupt)
000b4 e59f2158 ldr r2, [pc, #0x158]
000b8 e5923000 ldr r3, [r2]
000bc e3530000 cmp r3, #0
000c0 0a000008 beq |$L15554|
; 1040 : {
; 1041 : retval = PProfileInterrupt();
000c4 e1a0e00f mov lr, pc
000c8 e12fff13 bx r3
000cc e1a04000 mov r4, r0
; 1042 : if(retval == SYSINTR_RESCHED)
000d0 e3540001 cmp r4, #1
000d4 1a000040 bne |$L15573|
; 1043 : {
; 1044 : //
; 1045 : // Update the millisecond counter
; 1046 : //
; 1047 : CurMSec += RESCHED_PERIOD;
000d8 e5953000 ldr r3, [r5]
000dc e2833001 add r3, r3, #1
000e0 e5853000 str r3, [r5]
; 1048 : }
; 1049 : }
; 1050 : else
000e4 ea00003c b |$L15573|
000e8 |$L15554|
; 1051 : {
; 1052 : //
; 1053 : // if we're timing interrupts, keep track of when this one came in
; 1054 : //
; 1055 : static DWORD dwLastCount= 0;
; 1056 :
; 1057 : if( (int)( dwLastCount- *TIM_TIMER3VALUE ) >800 )
000e8 e59f7120 ldr r7, [pc, #0x120]
000ec e5961000 ldr r1, [r6]
000f0 e5973000 ldr r3, [r7]
000f4 e0413003 sub r3, r1, r3
000f8 e3530e32 cmp r3, #0x32, 28
000fc da000005 ble |$L15561|
; 1058 : {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -