📄 cs8950.cod
字号:
; 502 : if ( pCD->pRxStatNext == pCD->pRxStatLimit )
00250 e59d0014 ldr r0, [sp, #0x14]
00254 e59d1014 ldr r1, [sp, #0x14]
00258 e5902014 ldr r2, [r0, #0x14]
0025c e5913010 ldr r3, [r1, #0x10]
00260 e1520003 cmp r2, r3
00264 1a000003 bne |$L14066|
; 503 : {
; 504 : pCD->pRxStatNext = pCD->pRxStat;
00268 e59d0014 ldr r0, [sp, #0x14]
0026c e59d1014 ldr r1, [sp, #0x14]
00270 e590200c ldr r2, [r0, #0xC]
00274 e5812014 str r2, [r1, #0x14]
00278 |$L14066|
; 505 : }
; 506 :
; 507 :
; 508 : /* Enqueue the number of receive descriptors processed to the chip */
; 509 : WriteDWord( OpReg_RxDEQ, 1 );
00278 e59f00cc ldr r0, [pc, #0xCC]
0027c e5901000 ldr r1, [r0]
00280 e3a02001 mov r2, #1
00284 e3a0009c mov r0, #0x9C
00288 e7812000 str r2, [r1, +r0]
; 510 :
; 511 : /* Enqueue the number of receive status entries processed to the chip */
; 512 : WriteDWord( OpReg_RxSEQ, 1 );
0028c e59f30b8 ldr r3, [pc, #0xB8]
00290 e5930000 ldr r0, [r3]
00294 e3a01001 mov r1, #1
00298 e3a020ac mov r2, #0xAC
0029c e7801002 str r1, [r0, +r2]
; 513 :
; 514 :
; 515 : //
; 516 : // Need to perform a dummy read to clear the interrupt status if there are no
; 517 : // more interrupt packets.
; 518 : //
; 519 : Status = pCD->pRxStatNext->RxStat;
002a0 e59d3014 ldr r3, [sp, #0x14]
002a4 e5930014 ldr r0, [r3, #0x14]
002a8 e5d01003 ldrb r1, [r0, #3]
002ac e1a02401 mov r2, r1, lsl #8
002b0 e5d03002 ldrb r3, [r0, #2]
002b4 e1831002 orr r1, r3, r2
002b8 e1a02401 mov r2, r1, lsl #8
002bc e5d03001 ldrb r3, [r0, #1]
002c0 e1831002 orr r1, r3, r2
002c4 e1a02401 mov r2, r1, lsl #8
002c8 e5d03000 ldrb r3, [r0]
002cc e1831002 orr r1, r3, r2
002d0 e58d1010 str r1, [sp, #0x10]
; 520 : if (!(Status & RxStat_RxFP))
002d4 e59d0010 ldr r0, [sp, #0x10]
002d8 e3100102 tst r0, #2, 2
002dc 1a000003 bne |$L14069|
; 521 : {
; 522 : Status = ReadDWord(OpReg_IntStsC);
002e0 e59f0064 ldr r0, [pc, #0x64]
002e4 e5901000 ldr r1, [r0]
002e8 e591202c ldr r2, [r1, #0x2C]
002ec e58d2010 str r2, [sp, #0x10]
002f0 |$L14069|
; 523 : }
; 524 :
; 525 : Global_RxTotalCnt++;
002f0 e59f0050 ldr r0, [pc, #0x50]
002f4 e5901000 ldr r1, [r0]
002f8 e2812001 add r2, r1, #1
002fc e59f0044 ldr r0, [pc, #0x44]
00300 e5802000 str r2, [r0]
; 526 :
; 527 :
; 528 : // EdbgOutputDebugString("\nCS8950 CS8950GetFrame(): Global_RxTotalCnt=%d\n",Global_RxTotalCnt);
; 529 :
; 530 : //RxWorkaround();
; 531 :
; 532 : /* Frame Length == 0 means the received frame with error*/
; 533 : if ( *pwLength == 0 )
00304 e59d102c ldr r1, [sp, #0x2C]
00308 e1d100b0 ldrh r0, [r1]
0030c e1a02800 mov r2, r0, lsl #16
00310 e1b01822 movs r1, r2, lsr #16
00314 1a000004 bne |$L14071|
; 534 : {
; 535 : EdbgOutputDebugString("\n CS8950GetFrame(): Length = 0\r\n");
00318 e59f0024 ldr r0, [pc, #0x24]
0031c eb000000 bl EdbgOutputDebugString
; 536 : return FALSE;
00320 e3a03000 mov r3, #0
00324 e1cd31bc strh r3, [sp, #0x1C]
00328 ea000001 b |$L14049|
0032c |$L14071|
; 537 : }
; 538 :
; 539 : //
; 540 : // Lets send the frame out again as a broadcast packet.
; 541 : //
; 542 : #if 0
; 543 : memcpy(tempFrame, pbData,*pwLength);
; 544 : tempFrame[0] = 0x00;
; 545 : tempFrame[1] = 0x06;
; 546 : tempFrame[2] = 0x5B;
; 547 : tempFrame[3] = 0xd3;
; 548 : tempFrame[4] = 0xFC;
; 549 : tempFrame[5] = 0x98;
; 550 :
; 551 : tempFrame[6] = 0x00;
; 552 : tempFrame[7] = 0x00;
; 553 : tempFrame[8] = 0x00;
; 554 : tempFrame[9] = 0x00;
; 555 : tempFrame[10] = 0x00;
; 556 : tempFrame[11] = 0x00;
; 557 :
; 558 : CS8950SendFrame
; 559 : (
; 560 : tempFrame,
; 561 : *pwLength
; 562 : );
; 563 : #endif // 0
; 564 :
; 565 :
; 566 : return TRUE;
0032c e3a00001 mov r0, #1
00330 e1cd01bc strh r0, [sp, #0x1C]
00334 |$L14049|
; 462 : return FALSE;
00334 e1dd01bc ldrh r0, [sp, #0x1C]
; 567 : }
00338 e28dd020 add sp, sp, #0x20
0033c e89d6000 ldmia sp, {sp, lr}
00340 e12fff1e bx lr
00344 |$L14792|
00344 00000000 DCD |??_C@_0CB@HOMC@?6?5CS8950GetFrame?$CI?$CJ?3?5Length?5?$DN?50?$AN?6@|
00348 00000000 DCD |Global_RxTotalCnt|
0034c 00000000 DCD |gdwEthernetBase|
00350 00000000 DCD |pChip|
00354 |$M14789|
ENDP ; |CS8950GetFrame|
EXPORT |CS8950EnableInts|
EXPORT |??_C@_0BD@OEOF@CS8950EnableInts?$AN?6?$AA@| [ DATA ] ; `string'
00000 AREA |.text| { |CS8950EnableInts| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$CS8950EnableInts|, PDATA, SELECTION=5, ASSOC=|.text| { |CS8950EnableInts| } ; comdat associative
|$T14797| DCD |CS8950EnableInts|
DCD 0x40000f01
00000 AREA |.rdata| { |??_C@_0BD@OEOF@CS8950EnableInts?$AN?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0BD@OEOF@CS8950EnableInts?$AN?6?$AA@| DCB "CS8950EnableInts", 0xd, 0xa
DCB 0x0 ; `string'
; Function compile flags: /Ods
00000 AREA |.text| { |CS8950EnableInts| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |CS8950EnableInts| PROC
; 576 : {
00000 e52de004 str lr, [sp, #-4]!
00004 |$M14795|
; 577 : EdbgOutputDebugString("CS8950EnableInts\r\n");
00004 e59f002c ldr r0, [pc, #0x2C]
00008 eb000000 bl EdbgOutputDebugString
; 578 : WriteDWord(OpReg_IntEn, IntEn_RxEOFiE );
0000c e59f3020 ldr r3, [pc, #0x20]
00010 e5930000 ldr r0, [r3]
00014 e3a01004 mov r1, #4
00018 e5801024 str r1, [r0, #0x24]
; 579 : WriteDWord(OpReg_FERMask, GIntMask_Interrupt);
0001c e59f2010 ldr r2, [pc, #0x10]
00020 e5920000 ldr r0, [r2]
00024 e3a01902 mov r1, #2, 18
00028 e5801064 str r1, [r0, #0x64]
; 580 : }
0002c e8bd4000 ldmia sp!, {lr}
00030 e12fff1e bx lr
00034 |$L14799|
00034 00000000 DCD |gdwEthernetBase|
00038 00000000 DCD |??_C@_0BD@OEOF@CS8950EnableInts?$AN?6?$AA@|
0003c |$M14796|
ENDP ; |CS8950EnableInts|
EXPORT |CS8950DisableInts|
EXPORT |??_C@_0BE@OOKG@CS8950DisableInts?$AN?6?$AA@| [ DATA ] ; `string'
00000 AREA |.text| { |CS8950DisableInts| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$CS8950DisableInts|, PDATA, SELECTION=5, ASSOC=|.text| { |CS8950DisableInts| } ; comdat associative
|$T14804| DCD |CS8950DisableInts|
DCD 0x40000f01
00000 AREA |.rdata| { |??_C@_0BE@OOKG@CS8950DisableInts?$AN?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0BE@OOKG@CS8950DisableInts?$AN?6?$AA@| DCB "CS8950DisableInts", 0xd
DCB 0xa, 0x0 ; `string'
; Function compile flags: /Ods
00000 AREA |.text| { |CS8950DisableInts| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |CS8950DisableInts| PROC
; 589 : {
00000 e52de004 str lr, [sp, #-4]!
00004 |$M14802|
; 590 : EdbgOutputDebugString("CS8950DisableInts\r\n");
00004 e59f002c ldr r0, [pc, #0x2C]
00008 eb000000 bl EdbgOutputDebugString
; 591 : WriteDWord(OpReg_IntEn, 0);
0000c e59f3020 ldr r3, [pc, #0x20]
00010 e5930000 ldr r0, [r3]
00014 e3a01000 mov r1, #0
00018 e5801024 str r1, [r0, #0x24]
; 592 : WriteDWord(OpReg_FERMask, 0 );
0001c e59f2010 ldr r2, [pc, #0x10]
00020 e5920000 ldr r0, [r2]
00024 e3a01000 mov r1, #0
00028 e5801064 str r1, [r0, #0x64]
; 593 : }
0002c e8bd4000 ldmia sp!, {lr}
00030 e12fff1e bx lr
00034 |$L14806|
00034 00000000 DCD |gdwEthernetBase|
00038 00000000 DCD |??_C@_0BE@OOKG@CS8950DisableInts?$AN?6?$AA@|
0003c |$M14803|
ENDP ; |CS8950DisableInts|
EXPORT |CS8950GetPendingInterrupts|
EXPORT |??_C@_01FJJO@R?$AA@| [ DATA ] ; `string'
EXPORT |??_C@_01FMOK@n?$AA@| [ DATA ] ; `string'
00000 AREA |.text| { |CS8950GetPendingInterrupts| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$CS8950GetPendingInterrupts|, PDATA, SELECTION=5, ASSOC=|.text| { |CS8950GetPendingInterrupts| } ; comdat associative
|$T14812| DCD |CS8950GetPendingInterrupts|
DCD 0x40002402
00000 AREA |.rdata| { |??_C@_01FJJO@R?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_01FJJO@R?$AA@| DCB "R", 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_01FMOK@n?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_01FMOK@n?$AA@| DCB "n", 0x0 ; `string'
; Function compile flags: /Ods
00000 AREA |.text| { |CS8950GetPendingInterrupts| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |CS8950GetPendingInterrupts| PROC
; 603 : {
00000 e52de004 str lr, [sp, #-4]!
00004 e24dd008 sub sp, sp, #8
00008 |$M14810|
; 604 : PCD pCD;
; 605 : pCD = (PCD)pChip->pData;
00008 e59f007c ldr r0, [pc, #0x7C]
0000c e5901000 ldr r1, [r0]
00010 e591200c ldr r2, [r1, #0xC]
00014 e58d2000 str r2, [sp]
; 606 :
; 607 :
; 608 : if (pCD->pRxStatNext->RxStat & RxStat_RxFP)
00018 e59d0000 ldr r0, [sp]
0001c e5901014 ldr r1, [r0, #0x14]
00020 e5d12003 ldrb r2, [r1, #3]
00024 e1a00402 mov r0, r2, lsl #8
00028 e5d13002 ldrb r3, [r1, #2]
0002c e1832000 orr r2, r3, r0
00030 e1a00402 mov r0, r2, lsl #8
00034 e5d13001 ldrb r3, [r1, #1]
00038 e1832000 orr r2, r3, r0
0003c e1a00402 mov r0, r2, lsl #8
00040 e5d13000 ldrb r3, [r1]
00044 e1832000 orr r2, r3, r0
00048 e3120102 tst r2, #2, 2
0004c 0a000004 beq |$L14087|
; 609 : {
; 610 : EdbgOutputDebugString("R");
00050 e59f0030 ldr r0, [pc, #0x30]
00054 eb000000 bl EdbgOutputDebugString
; 611 : return INTR_TYPE_RX;
00058 e3a03001 mov r3, #1
0005c e58d3004 str r3, [sp, #4]
00060 ea000003 b |$L14084|
00064 |$L14087|
; 612 : }
; 613 : EdbgOutputDebugString("n");
00064 e59f0018 ldr r0, [pc, #0x18]
00068 eb000000 bl EdbgOutputDebugString
; 614 : return 0;
0006c e3a03000 mov r3, #0
00070 e58d3004 str r3, [sp, #4]
00074 |$L14084|
; 611 : return INTR_TYPE_RX;
00074 e59d0004 ldr r0, [sp, #4]
; 615 : }
00078 e28dd008 add sp, sp, #8
0007c e8bd4000 ldmia sp!, {lr}
00080 e12fff1e bx lr
00084 |$L14814|
00084 00000000 DCD |??_C@_01FMOK@n?$AA@|
00088 00000000 DCD |??_C@_01FJJO@R?$AA@|
0008c 00000000 DCD |pChip|
00090 |$M14811|
ENDP ; |CS8950GetPendingInterrupts|
EXPORT |CS8950ReadEEPROM|
00000 AREA |.text| { |CS8950ReadEEPROM| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$CS8950ReadEEPROM|, PDATA, SELECTION=5, ASSOC=|.text| { |CS8950ReadEEPROM| } ; comdat associative
|$T14820| DCD |CS8950ReadEEPROM|
DCD 0x40001504
; Function compile flags: /Ods
00000 AREA |.text| { |CS8950ReadEEPROM| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |CS8950ReadEEPROM| PROC
; 628 : {
00000 e1a0c00d mov r12, sp
00004 e92d0003 stmdb sp!, {r0, r1}
00008 e92d5000 stmdb sp!, {r12, lr}
0000c e24dd004 sub sp, sp, #4
00010 |$M14818|
; 629 : *pwVal = gusMacAddr[EEPROMAddress];
00010 e1dd00bc ldrh r0, [sp, #0xC]
00014 e1a01800 mov r1, r0, lsl #16
00018 e1a02821 mov r2, r1, lsr #16
0001c e3a00002 mov r0, #2
00020 e0010092 mul r1, r2, r0
00024 e59f0024 ldr r0, [pc, #0x24]
00028 e0802001 add r2, r0, r1
0002c e1d230b0 ldrh r3, [r2]
00030 e59d0010 ldr r0, [sp, #0x10]
00034 e1c030b0 strh r3, [r0]
; 630 : return TRUE;
00038 e3a01001 mov r1, #1
0003c e58d1000 str r1, [sp]
00040 e59d0000 ldr r0, [sp]
; 631 : }
00044 e28dd004 add sp, sp, #4
00048 e89d6000 ldmia sp, {sp, lr}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -