⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cs8950.cod

📁 EP9315的BSP包(WINCE下的BSP,内有各种驱动的详细的代码)
💻 COD
📖 第 1 页 / 共 5 页
字号:
  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 + -