📄 cs8950.cod
字号:
0004c e12fff1e bx lr
00050 |$L14822|
00050 00000000 DCD |gusMacAddr|
00054 |$M14819|
ENDP ; |CS8950ReadEEPROM|
EXPORT |CS8950WriteEEPROM|
00000 AREA |.text| { |CS8950WriteEEPROM| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$CS8950WriteEEPROM|, PDATA, SELECTION=5, ASSOC=|.text| { |CS8950WriteEEPROM| } ; comdat associative
|$T14828| DCD |CS8950WriteEEPROM|
DCD 0x40001404
; Function compile flags: /Ods
00000 AREA |.text| { |CS8950WriteEEPROM| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |CS8950WriteEEPROM| PROC
; 644 : {
00000 e1a0c00d mov r12, sp
00004 e92d0003 stmdb sp!, {r0, r1}
00008 e92d5000 stmdb sp!, {r12, lr}
0000c e24dd004 sub sp, sp, #4
00010 |$M14826|
; 645 : gusMacAddr[EEPROMAddress] = Data;
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 e59f0020 ldr r0, [pc, #0x20]
00028 e0802001 add r2, r0, r1
0002c e1dd31b0 ldrh r3, [sp, #0x10]
00030 e1c230b0 strh r3, [r2]
; 646 : return TRUE;
00034 e3a00001 mov r0, #1
00038 e58d0000 str r0, [sp]
0003c e59d0000 ldr r0, [sp]
; 647 : }
00040 e28dd004 add sp, sp, #4
00044 e89d6000 ldmia sp, {sp, lr}
00048 e12fff1e bx lr
0004c |$L14830|
0004c 00000000 DCD |gusMacAddr|
00050 |$M14827|
ENDP ; |CS8950WriteEEPROM|
00000 AREA |.text| { |GetMACAddress| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$GetMACAddress|, PDATA, SELECTION=5, ASSOC=|.text| { |GetMACAddress| } ; comdat associative
|$T14836| DCD |GetMACAddress|
DCD 0x40002904
; Function compile flags: /Ods
00000 AREA |.text| { |GetMACAddress| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |GetMACAddress| PROC
; 658 : {
00000 e1a0c00d mov r12, sp
00004 e92d0001 stmdb sp!, {r0}
00008 e92d5000 stmdb sp!, {r12, lr}
0000c e24dd004 sub sp, sp, #4
00010 |$M14834|
; 659 : if(gusMacAddr[0] == 0 && gusMacAddr[1] == 0 && gusMacAddr[2] == 0)
00010 e59f0088 ldr r0, [pc, #0x88]
00014 e1d010b0 ldrh r1, [r0]
00018 e1a02801 mov r2, r1, lsl #16
0001c e1b00822 movs r0, r2, lsr #16
00020 1a00000c bne |$L14103|
00024 e59f0074 ldr r0, [pc, #0x74]
00028 e1d010b2 ldrh r1, [r0, #2]
0002c e1a02801 mov r2, r1, lsl #16
00030 e1b00822 movs r0, r2, lsr #16
00034 1a000007 bne |$L14103|
00038 e59f0060 ldr r0, [pc, #0x60]
0003c e1d010b4 ldrh r1, [r0, #4]
00040 e1a02801 mov r2, r1, lsl #16
00044 e1b00822 movs r0, r2, lsr #16
00048 1a000002 bne |$L14103|
; 660 : return FALSE;
0004c e3a00000 mov r0, #0
00050 e58d0000 str r0, [sp]
00054 ea00000d b |$L14102|
00058 |$L14103|
; 661 :
; 662 : //
; 663 : // Currently copy the Mac Address from internal ram.
; 664 : //
; 665 : MacAddr[0] = gusMacAddr[0];
00058 e59f0040 ldr r0, [pc, #0x40]
0005c e1d010b0 ldrh r1, [r0]
00060 e59d200c ldr r2, [sp, #0xC]
00064 e1c210b0 strh r1, [r2]
; 666 : MacAddr[1] = gusMacAddr[1];
00068 e59d000c ldr r0, [sp, #0xC]
0006c e59f102c ldr r1, [pc, #0x2C]
00070 e1d120b2 ldrh r2, [r1, #2]
00074 e1c020b2 strh r2, [r0, #2]
; 667 : MacAddr[2] = gusMacAddr[2];
00078 e59d100c ldr r1, [sp, #0xC]
0007c e59f001c ldr r0, [pc, #0x1C]
00080 e1d020b4 ldrh r2, [r0, #4]
00084 e1c120b4 strh r2, [r1, #4]
; 668 :
; 669 : return TRUE;
00088 e3a00001 mov r0, #1
0008c e58d0000 str r0, [sp]
00090 |$L14102|
; 660 : return FALSE;
00090 e59d0000 ldr r0, [sp]
; 670 : }
00094 e28dd004 add sp, sp, #4
00098 e89d6000 ldmia sp, {sp, lr}
0009c e12fff1e bx lr
000a0 |$L14838|
000a0 00000000 DCD |gusMacAddr|
000a4 |$M14835|
ENDP ; |GetMACAddress|
EXPORT |WritePHY|
00000 AREA |.text| { |StartupPHY| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$StartupPHY|, PDATA, SELECTION=5, ASSOC=|.text| { |StartupPHY| } ; comdat associative
|$T14844| DCD |StartupPHY|
DCD 0x40001d04
; Function compile flags: /Ods
00000 AREA |.text| { |StartupPHY| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |StartupPHY| PROC
; 783 : {
00000 e1a0c00d mov r12, sp
00004 e92d0001 stmdb sp!, {r0}
00008 e92d5000 stmdb sp!, {r12, lr}
0000c e24dd014 sub sp, sp, #0x14
00010 |$M14842|
; 784 : PCD pCD;
; 785 : WORD Result;
; 786 :
; 787 :
; 788 : pCD = (PCD)pChip->pData;
00010 e59d001c ldr r0, [sp, #0x1C]
00014 e590100c ldr r1, [r0, #0xC]
00018 e58d1004 str r1, [sp, #4]
; 789 : /* Disable 2nd PHY */
; 790 : //Result = WritePHY( pChip, 0x1f, PHYReg_BMCR, BMCR_Power_Down);
; 791 : //ASSERT(Result);
; 792 :
; 793 :
; 794 : /* QQQQQQQ Disable SQE in Reg 0x13 */
; 795 : Result = WritePHY( pChip, 0x0, 0x13, 0x0000);
0001c e3a03000 mov r3, #0
00020 e3a02013 mov r2, #0x13
00024 e3a01000 mov r1, #0
00028 e59d001c ldr r0, [sp, #0x1C]
0002c eb000000 bl WritePHY
00030 e58d000c str r0, [sp, #0xC]
00034 e59d100c ldr r1, [sp, #0xC]
00038 e1a00801 mov r0, r1, lsl #16
0003c e1a02820 mov r2, r0, lsr #16
00040 e1cd20b0 strh r2, [sp]
; 796 : ASSERT(Result);
; 797 :
; 798 :
; 799 : /* Set PHY Internal LoopBack */
; 800 : /* Result = WritePHY( pChip, 0x0, PHYReg_BMCR, BMCR_Full_Duplex|BMCR_Loopback);*/
; 801 : /*Result = WritePHY( pChip, 0x0, PHYReg_BMCR, BMCR_Auto_Neg_Enable|BMCR_Restart_Auto_Neg);*/
; 802 : // Result = WritePHY( pChip, 0x0, PHYReg_BMCR, BMCR_Full_Duplex); }
; 803 : //Result = WritePHY( pChip, 0x0, PHYReg_BMCR, 0x0000); //Half_Duplex
; 804 : // @melody 09/10/01 Result = WritePHY( pChip, 0x0, PHYReg_BMCR, 0x0000); //Half_Duplex
; 805 : //ASSERT(Result);
; 806 : /* @melody 09/10/01 */
; 807 :
; 808 : Result =PHYAutoNegotiation();
00044 eb000000 bl PHYAutoNegotiation
00048 e58d0010 str r0, [sp, #0x10]
0004c e59d1010 ldr r1, [sp, #0x10]
00050 e1a00801 mov r0, r1, lsl #16
00054 e1a02820 mov r2, r0, lsr #16
00058 e1cd20b0 strh r2, [sp]
; 809 :
; 810 : ASSERT(Result);
; 811 :
; 812 : return MAC_SUCCESSFUL;
0005c e3a00000 mov r0, #0
00060 e1cd00b8 strh r0, [sp, #8]
00064 e1dd00b8 ldrh r0, [sp, #8]
; 813 : }
00068 e28dd014 add sp, sp, #0x14
0006c e89d6000 ldmia sp, {sp, lr}
00070 e12fff1e bx lr
00074 |$M14843|
ENDP ; |StartupPHY|
EXPORT |ReadPHY|
EXPORT |??_C@_0DG@KEOF@CS8950?3?5Error?$CB?5PHY?5cannot?5comple@| [ DATA ] ; `string'
EXPORT |??_C@_04OOPN@Full?$AA@| [ DATA ] ; `string'
EXPORT |??_C@_04HDCH@Half?$AA@| [ DATA ] ; `string'
EXPORT |??_C@_02FCMB@10?$AA@| [ DATA ] ; `string'
EXPORT |??_C@_03HFMC@100?$AA@| [ DATA ] ; `string'
EXPORT |??_C@_0CG@HBCD@CS8950?3?5Speed?5?$DN?5?$CFs?5Mbs?0?5Duplex?5?$DN@| [ DATA ] ; `string'
IMPORT |DelayInMsec|
00000 AREA |.text| { |PHYAutoNegotiation| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$PHYAutoNegotiation|, PDATA, SELECTION=5, ASSOC=|.text| { |PHYAutoNegotiation| } ; comdat associative
|$T14851| DCD |PHYAutoNegotiation|
DCD 0x40009c02
00000 AREA |.rdata| { |??_C@_0DG@KEOF@CS8950?3?5Error?$CB?5PHY?5cannot?5comple@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0DG@KEOF@CS8950?3?5Error?$CB?5PHY?5cannot?5comple@| DCB "CS8950: E"
DCB "rror! PHY cannot complete Auto Negotiation.", 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_04OOPN@Full?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_04OOPN@Full?$AA@| DCB "Full", 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_04HDCH@Half?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_04HDCH@Half?$AA@| DCB "Half", 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_02FCMB@10?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_02FCMB@10?$AA@| DCB "10", 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_03HFMC@100?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_03HFMC@100?$AA@| DCB "100", 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0CG@HBCD@CS8950?3?5Speed?5?$DN?5?$CFs?5Mbs?0?5Duplex?5?$DN@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CG@HBCD@CS8950?3?5Speed?5?$DN?5?$CFs?5Mbs?0?5Duplex?5?$DN@| DCB "C"
DCB "S8950: Speed = %s Mbs, Duplex = %s.", 0xa, 0x0 ; `string'
; Function compile flags: /Ods
00000 AREA |.text| { |PHYAutoNegotiation| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |PHYAutoNegotiation| PROC
; 683 : {
00000 e52de004 str lr, [sp, #-4]!
00004 e24dd030 sub sp, sp, #0x30
00008 |$M14849|
; 684 : unsigned short val;
; 685 : int x;
; 686 : unsigned short PhyId;
; 687 : unsigned char b8;
; 688 : WORD Result;
; 689 : char *strDuplex, *strSpeed;
; 690 :
; 691 : PhyId = 0x1;
00008 e3a00001 mov r0, #1
0000c e1cd00b2 strh r0, [sp, #2]
; 692 :
; 693 : //
; 694 : // Write to Auto-Negotiation Advertisement Register (0x04)
; 695 : // Set IEEE_802.3, and advertise 100/10M full/half duplex available
; 696 : //
; 697 : val = ANAR_SeltField_IEEE8023 | ANAR_10BaseT_HDX_Able | ANAR_10BaseT_FDX_Able |
; 698 : ANAR_100BaseTX_HDX_Able | ANAR_100BaseTX_FDX_Able;
00010 e3a01e1e mov r1, #0x1E, 28
00014 e3810001 orr r0, r1, #1
00018 e1cd00b0 strh r0, [sp]
; 699 : Result = WritePHY( pChip, PhyId, PHYReg_ANAR, val);
0001c e1dd30b0 ldrh r3, [sp]
00020 e3a02004 mov r2, #4
00024 e1dd10b2 ldrh r1, [sp, #2]
00028 e59f0238 ldr r0, [pc, #0x238]
0002c e5900000 ldr r0, [r0]
00030 eb000000 bl WritePHY
00034 e58d0018 str r0, [sp, #0x18]
00038 e59d1018 ldr r1, [sp, #0x18]
0003c e1a00801 mov r0, r1, lsl #16
00040 e1a02820 mov r2, r0, lsr #16
00044 e1cd20b6 strh r2, [sp, #6]
; 700 : ASSERT(Result);
; 701 :
; 702 :
; 703 : /*write to Basic Mode Control Register (0x00), enable and restart auto negotiation*/
; 704 : val = BMCR_Restart_Auto_Neg| BMCR_Auto_Neg_Enable;
00048 e3a00c12 mov r0, #0x12, 24
0004c e1cd00b0 strh r0, [sp]
; 705 : Result = WritePHY( pChip, PhyId, PHYReg_BMCR, val);
00050 e1dd30b0 ldrh r3, [sp]
00054 e3a02000 mov r2, #0
00058 e1dd10b2 ldrh r1, [sp, #2]
0005c e59f0204 ldr r0, [pc, #0x204]
00060 e5900000 ldr r0, [r0]
00064 eb000000 bl WritePHY
00068 e58d001c str r0, [sp, #0x1C]
0006c e59d101c ldr r1, [sp, #0x1C]
00070 e1a00801 mov r0, r1, lsl #16
00074 e1a02820 mov r2, r0, lsr #16
00078 e1cd20b6 strh r2, [sp, #6]
; 706 :
; 707 : for(x = 0; x<MAX_AUTOCONFIGTIME; x++) /* 02/14/02 @melody Auto_Neg should be compeleted in 5 min.*/
0007c e3a00000 mov r0, #0
00080 e58d0008 str r0, [sp, #8]
00084 ea000002 b |$L14113|
00088 |$L14114|
00088 e59d0008 ldr r0, [sp, #8]
0008c e2801001 add r1, r0, #1
00090 e58d1008 str r1, [sp, #8]
00094 |$L14113|
00094 e59d0008 ldr r0, [sp, #8]
00098 e3500efa cmp r0, #0xFA, 28
0009c aa000013 bge |$L14115|
; 708 : {
; 709 : /* Check if Auto-Negotiation complete? */
; 710 : DelayInMsec(1);
000a0 e3a00001 mov r0, #1
000a4 eb000000 bl DelayInMsec
; 711 : Result = ReadPHY( pChip, PhyId, PHYReg_BMSR, &val );
000a8 e28d3000 add r3, sp, #0
000ac e3a02001 mov r2, #1
000b0 e1dd10b2 ldrh r1, [sp, #2]
000b4 e59f01ac ldr r0, [pc, #0x1AC]
000b8 e5900000 ldr r0, [r0]
000bc eb000000 bl ReadPHY
000c0 e58d0020 str r0, [sp, #0x20]
000c4 e59d1020 ldr r1, [sp, #0x20]
000c8 e1a00801 mov r0, r1, lsl #16
000cc e1a02820 mov r2, r0, lsr #16
000d0 e1cd20b6 strh r2, [sp, #6]
; 712 : if((val & BMSR_Auto_Neg_Complete) )
000d4 e1dd00b0 ldrh r0, [sp]
000d8 e1a01800 mov r1, r0, lsl #16
000dc e1a02821 mov r2, r1, lsr #16
000e0 e3120020 tst r2, #0x20
000e4 0a000000 beq |$L14116|
; 713 : {
; 714 : break;
000e8 ea000000 b |$L14115|
000ec |$L14116|
; 715 : }
; 716 : }
000ec eaffffe5 b |$L14114|
000f0 |$L14115|
; 717 :
; 718 : if(x == MAX_AUTOCONFIGTIME)
000f0 e59d0008 ldr r0, [sp, #8]
000f4 e3500efa cmp r0, #0xFA, 28
000f8 1a00000f bne |$L14117|
; 719 : {
; 720 : //
; 721 : // If this fails
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -