📄 interrupt.cod
字号:
; 1417 : gdwInterruptMask2 |= INT2_EXT0;
; 1418 :
; 1419 : init_edb931xPS2( );
; 1420 : }
; 1421 : #endif
; 1422 :
; 1423 : #ifdef EDB9315A_CIR
; 1424 : if( idInt == SYSINTR_PIO_CIR )
; 1425 : {
; 1426 : // Enable EGPIO13 for CIR interrupt.
; 1427 : UINT value;
; 1428 :
; 1429 : //OEMWriteDebugByte('E');
; 1430 : //OEMWriteDebugByte('\r');
; 1431 : //OEMWriteDebugByte('\n');
; 1432 :
; 1433 : gnWi = 0;
; 1434 : gnKeyCode = 0;
; 1435 :
; 1436 : value = *GPIO_PBDDR;
; 1437 : value &= ~0x20;
; 1438 : *GPIO_PBDDR = value; // Set port B as input
; 1439 :
; 1440 : value = *GPIO_BINTEN;
; 1441 : value &= ~0x20;
; 1442 : *GPIO_BINTEN = value; // Disable all interrupt.
; 1443 :
; 1444 : *GPIO_BEOI = 0x20; // Clean all previous interrupt
; 1445 :
; 1446 : value = *GPIO_BINTTYPE1;
; 1447 : value |= 0x20; // edge trigure.
; 1448 : *GPIO_BINTTYPE1 = value;
; 1449 :
; 1450 : value = *GPIO_BINTTYPE2;
; 1451 : value &= ~0x20; // Falling edge
; 1452 : *GPIO_BINTTYPE2 = value;
; 1453 :
; 1454 : value = *GPIO_BINTEN;
; 1455 : value |= 0x20; // Enable interrupt
; 1456 : *GPIO_BINTEN = value;
; 1457 : }
; 1458 : #endif
; 1459 :
; 1460 : INTERRUPTS_ON();
001ec eb000000 bl INTERRUPTS_ON
; 1461 :
; 1462 : return(bRet);
001f0 e59d000c ldr r0, [sp, #0xC]
; 1463 : }
001f4 e28dd010 add sp, sp, #0x10
001f8 e8bd4ff0 ldmia sp!, {r4 - r11, lr}
001fc e12fff1e bx lr
00200 |$L15819|
00200 00000000 DCD |gbAC97|
00204 00000000 DCD |gulRecieveBuffer|
00208 b00b000c DCD 0xb00b000c
0020c b00b0010 DCD 0xb00b0010
00210 00000000 DCD |sPlayBack|
00214 00000000 DCD |gulTransmitBuffer|
00218 00000000 DCD |fPS2Int|
0021c b00c000c DCD 0xb00c000c
00220 00000000 DCD |sRecord|
00224 00000000 DCD |gdwInterruptMask2|
00228 b00c0010 DCD 0xb00c0010
0022c 00000000 DCD |gdwInterruptMask1|
00230 |$M15815|
ENDP ; |OEMInterruptEnable|
EXPORT |OEMInterruptDisable|
00000 AREA |.text| { |OEMInterruptDisable| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$OEMInterruptDisable|, PDATA, SELECTION=5, ASSOC=|.text| { |OEMInterruptDisable| } ; comdat associative
|$T15829| DCD |$L15828|
DCD 0x40004e02
; Function compile flags: /Ogsy
00000 AREA |.text| { |OEMInterruptDisable| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |OEMInterruptDisable| PROC
; 1484 : {
00000 |$L15828|
00000 e92d43f0 stmdb sp!, {r4 - r9, lr}
00004 e24dd008 sub sp, sp, #8
00008 |$M15826|
00008 e1a06000 mov r6, r0
; 1485 : // NKDbgPrintfW(L"OEMInterruptDisable: Interrupt #%02d\r\n", idInt);
; 1486 :
; 1487 : BOOL bRet = TRUE;
; 1488 : ULONG ulIntMask1, ulIntMask2;
; 1489 :
; 1490 :
; 1491 : bRet = SysIntrNumToInterruptMask(idInt, &ulIntMask1, &ulIntMask2);
0000c e28d2004 add r2, sp, #4
00010 e28d1000 add r1, sp, #0
00014 eb000000 bl SysIntrNumToInterruptMask
; 1492 : INTERRUPTS_OFF();
00018 eb000000 bl INTERRUPTS_OFF
; 1493 :
; 1494 : if(ulIntMask1)
0001c e59d2000 ldr r2, [sp]
00020 e59f410c ldr r4, [pc, #0x10C]
00024 e59fe104 ldr lr, [pc, #0x104]
00028 e3520000 cmp r2, #0
; 1495 : {
; 1496 : *VIC1_INTCLEAR = ulIntMask1;
0002c 15842000 strne r2, [r4]
; 1497 : gdwInterruptMask1 &= ~ulIntMask1;
00030 159e3000 ldrne r3, [lr]
; 1498 : }
; 1499 :
; 1500 : if(ulIntMask2)
00034 e59f00f0 ldr r0, [pc, #0xF0]
00038 e59f10e8 ldr r1, [pc, #0xE8]
0003c 11c33002 bicne r3, r3, r2
00040 e59d2004 ldr r2, [sp, #4]
00044 158e3000 strne r3, [lr]
; 1501 : {
; 1502 : *VIC2_INTCLEAR = ulIntMask2;
; 1503 : gdwInterruptMask2 &= ~ulIntMask2;
; 1504 : }
; 1505 :
; 1506 : if(idInt == SYSINTR_PIO_PLAYBACK )
00048 e59f50d4 ldr r5, [pc, #0xD4]
0004c e3520000 cmp r2, #0
00050 15802000 strne r2, [r0]
00054 15913000 ldrne r3, [r1]
00058 e59f70c0 ldr r7, [pc, #0xC0]
0005c e3a08040 mov r8, #0x40
00060 11c33002 bicne r3, r3, r2
00064 e59f20b0 ldr r2, [pc, #0xB0]
00068 15813000 strne r3, [r1]
0006c e3560024 cmp r6, #0x24
00070 e3a09201 mov r9, #1, 4
00074 1a000011 bne |$L15822|
; 1507 : {
; 1508 : if(!sRecord.bIntEnabled)
00078 e5923018 ldr r3, [r2, #0x18]
0007c e3530000 cmp r3, #0
00080 1a000009 bne |$L15659|
; 1509 : {
; 1510 : if(gbAC97)
00084 e5973000 ldr r3, [r7]
00088 e3530000 cmp r3, #0
; 1511 : {
; 1512 : *VIC1_INTCLEAR = INT1_AAC;
0008c 15848000 strne r8, [r4]
; 1513 : gdwInterruptMask1 &= ~INT1_AAC;
00090 159e3000 ldrne r3, [lr]
00094 13c33040 bicne r3, r3, #0x40
00098 158e3000 strne r3, [lr]
; 1514 : }
; 1515 : else
; 1516 : {
; 1517 : *VIC2_INTCLEAR = INT2_SAI;
0009c 05809000 streq r9, [r0]
; 1518 : gdwInterruptMask2 &= ~INT2_SAI;
000a0 05913000 ldreq r3, [r1]
000a4 03c33201 biceq r3, r3, #1, 4
000a8 05813000 streq r3, [r1]
000ac |$L15659|
; 1519 : }
; 1520 : }
; 1521 : sPlayBack.bEnabled = FALSE;
000ac e3a03000 mov r3, #0
000b0 e5853014 str r3, [r5, #0x14]
; 1522 : sPlayBack.bIntEnabled = FALSE;
000b4 e3a03000 mov r3, #0
000b8 e5853018 str r3, [r5, #0x18]
000bc ea000000 b |$L15655|
000c0 |$L15822|
000c0 e5953018 ldr r3, [r5, #0x18]
000c4 |$L15655|
; 1523 : }
; 1524 :
; 1525 : if(idInt == SYSINTR_PIO_RECORD )
000c4 e3560025 cmp r6, #0x25
000c8 1a00000f bne |$L15661|
; 1526 : {
; 1527 : if(!sPlayBack.bIntEnabled)
000cc e3530000 cmp r3, #0
000d0 1a000009 bne |$L15665|
; 1528 : {
; 1529 : if(gbAC97)
000d4 e5973000 ldr r3, [r7]
000d8 e3530000 cmp r3, #0
; 1530 : {
; 1531 : *VIC1_INTCLEAR = INT1_AAC;
000dc 15848000 strne r8, [r4]
; 1532 : gdwInterruptMask1 &= ~INT1_AAC;
000e0 159e3000 ldrne r3, [lr]
000e4 13c33040 bicne r3, r3, #0x40
000e8 158e3000 strne r3, [lr]
; 1533 : }
; 1534 : else
; 1535 : {
; 1536 : *VIC2_INTCLEAR = INT2_SAI;
000ec 05809000 streq r9, [r0]
; 1537 : gdwInterruptMask2 &= ~INT2_SAI;
000f0 05913000 ldreq r3, [r1]
000f4 03c33201 biceq r3, r3, #1, 4
000f8 05813000 streq r3, [r1]
000fc |$L15665|
; 1538 : }
; 1539 : }
; 1540 : sRecord.bEnabled = FALSE;
000fc e3a03000 mov r3, #0
00100 e5823014 str r3, [r2, #0x14]
; 1541 : sRecord.bIntEnabled = FALSE;
00104 e3a03000 mov r3, #0
00108 e5823018 str r3, [r2, #0x18]
0010c |$L15661|
; 1542 : }
; 1543 :
; 1544 : #ifdef EDB9315A_CIR
; 1545 : if(idInt == SYSINTR_PIO_CIR )
; 1546 : {
; 1547 : // Initialize EGPIO13 for CIR interrupt.
; 1548 : UINT value;
; 1549 :
; 1550 : //OEMWriteDebugByte('D');
; 1551 : //OEMWriteDebugByte('\r');
; 1552 : //OEMWriteDebugByte('\n');
; 1553 :
; 1554 : value = *GPIO_BINTEN;
; 1555 : value &= ~0x20; // Disable interrupt.
; 1556 : *GPIO_BINTEN = value;
; 1557 :
; 1558 : gnWi = 0;
; 1559 : gnKeyCode = 0;
; 1560 :
; 1561 : }
; 1562 : #endif
; 1563 :
; 1564 : INTERRUPTS_ON();
0010c eb000000 bl INTERRUPTS_ON
; 1565 :
; 1566 : return;
; 1567 : }
00110 e28dd008 add sp, sp, #8
00114 e8bd43f0 ldmia sp!, {r4 - r9, lr}
00118 e12fff1e bx lr
0011c |$L15831|
0011c 00000000 DCD |sRecord|
00120 00000000 DCD |gbAC97|
00124 00000000 DCD |sPlayBack|
00128 00000000 DCD |gdwInterruptMask2|
0012c b00c0014 DCD 0xb00c0014
00130 00000000 DCD |gdwInterruptMask1|
00134 b00b0014 DCD 0xb00b0014
00138 |$M15827|
ENDP ; |OEMInterruptDisable|
EXPORT |OEMInterruptDone|
00000 AREA |.text| { |OEMInterruptDone| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$OEMInterruptDone|, PDATA, SELECTION=5, ASSOC=|.text| { |OEMInterruptDone| } ; comdat associative
|$T15840| DCD |$L15839|
DCD 0x40001d02
; Function compile flags: /Ogsy
00000 AREA |.text| { |OEMInterruptDone| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |OEMInterruptDone| PROC
; 1588 : {
00000 |$L15839|
00000 e92d4010 stmdb sp!, {r4, lr}
00004 e24dd008 sub sp, sp, #8
00008 |$M15837|
00008 e1a04000 mov r4, r0
; 1589 : BOOL bRet = TRUE;
; 1590 : ULONG ulIntMask1, ulIntMask2;
; 1591 :
; 1592 :
; 1593 : bRet = SysIntrNumToInterruptMask(idInt, &ulIntMask1, &ulIntMask2);
0000c e28d2004 add r2, sp, #4
00010 e28d1000 add r1, sp, #0
00014 eb000000 bl SysIntrNumToInterruptMask
; 1594 :
; 1595 : INTERRUPTS_OFF();
00018 eb000000 bl INTERRUPTS_OFF
; 1596 :
; 1597 : // NOTE: we expect the interrupt to be turned off at the device. The
; 1598 : // state isn't latched in any board-level registers.
; 1599 :
; 1600 : // Enable interrupt.
; 1601 : //OEMInterruptEnable(idInt, NULL, 0);
; 1602 : if(idInt == SYSINTR_PIO_PLAYBACK )
0001c e59f304c ldr r3, [pc, #0x4C]
00020 e3540024 cmp r4, #0x24
; 1603 : {
; 1604 : *VIC1_SOFTINTCLEAR = INT1_UNUSED1;
00024 03a02001 moveq r2, #1
00028 05832000 streq r2, [r3]
; 1605 : }
; 1606 : if(idInt == SYSINTR_PIO_RECORD )
0002c e3540025 cmp r4, #0x25
; 1607 : {
; 1608 : *VIC1_SOFTINTCLEAR = INT1_UNUSED2;
00030 03a02002 moveq r2, #2
00034 05832000 streq r2, [r3]
; 1609 : }
; 1610 :
; 1611 : #ifdef EDB9315A_CIR
; 1612 : if(idInt == SYSINTR_PIO_CIR )
; 1613 : {
; 1614 : UINT value;
; 1615 :
; 1616 : //OEMWriteDebugByte('N');
; 1617 : //OEMWriteDebugByte('\r');
; 1618 : //OEMWriteDebugByte('\n');
; 1619 :
; 1620 : //gnWi = 0;
; 1621 : //gnKeyCode = 0;
; 1622 :
; 1623 : *GPIO_BEOI = 0x20; // Clean previous interrupt
; 1624 :
; 1625 : value = *GPIO_BINTEN;
; 1626 : value |= 0x20; // Enable interrupt
; 1627 : *GPIO_BINTEN = value;
; 1628 : }
; 1629 : #endif
; 1630 :
; 1631 : if(ulIntMask1)
00038 e59d2000 ldr r2, [sp]
0003c e3520000 cmp r2, #0
; 1632 : {
; 1633 : *VIC1_INTENABLE = ulIntMask1;
00040 159f3024 ldrne r3, [pc, #0x24]
00044 15832000 strne r2, [r3]
; 1634 : // ASSERT(gdwInterruptMask1 & ulIntMask1);
; 1635 : }
; 1636 :
; 1637 : if(ulIntMask2)
00048 e59d2004 ldr r2, [sp, #4]
0004c e3520000 cmp r2, #0
; 1638 : {
; 1639 : *VIC2_INTENABLE = ulIntMask2;
00050 159f3010 ldrne r3, [pc, #0x10]
00054 15832000 strne r2, [r3]
; 1640 : // ASSERT(gdwInterruptMask2 & ulIntMask2);
; 1641 : }
; 1642 :
; 1643 :
; 1644 : INTERRUPTS_ON();
00058 eb000000 bl INTERRUPTS_ON
; 1645 :
; 1646 : }
0005c e28dd008 add sp, sp, #8
00060 e8bd4010 ldmia sp!, {r4, lr}
00064 e12fff1e bx lr
00068 |$L15842|
00068 b00c0010 DCD 0xb00c0010
0006c b00b0010 DCD 0xb00b0010
00070 b00b001c DCD 0xb00b001c
00074 |$M15838|
ENDP ; |OEMInterruptDone|
EXPORT |OEMInitInterrupts|
00000 AREA |.text| { |OEMInitInterrupts| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$OEMInitInterrupts|, PDATA, SELECTION=5, ASSOC=|.text| { |OEMInitInterrupts| } ; comdat associative
|$T15848| DCD |$L15847|
DCD 0x40004e01
; Functi
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -