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

📄 cs8950.cod

📁 EP9315的BSP包(WINCE下的BSP,内有各种驱动的详细的代码)
💻 COD
📖 第 1 页 / 共 5 页
字号:
  000cc	e59f02a8	 ldr       r0, [pc, #0x2A8]
  000d0	e5901000	 ldr       r1, [r0]
  000d4	e3a02c02	 mov       r2, #2, 24
  000d8	e3820002	 orr       r0, r2, #2
  000dc	e3a03080	 mov       r3, #0x80
  000e0	e7810003	 str       r0, [r1, +r3]

; 224  : 
; 225  : 
; 226  :     //
; 227  :     // Perform a reset
; 228  :     //
; 229  :     Result = VchipReset( pChip );

  000e4	e59f2294	 ldr       r2, [pc, #0x294]
  000e8	e5920000	 ldr       r0, [r2]
  000ec	eb000000	 bl        VchipReset
  000f0	e1cd01b0	 strh      r0, [sp, #0x10]
  000f4	e1dd11b0	 ldrh      r1, [sp, #0x10]
  000f8	e1cd10b8	 strh      r1, [sp, #8]

; 230  :     if ( Result != MAC_SUCCESSFUL )

  000fc	e1dd00b8	 ldrh      r0, [sp, #8]
  00100	e1a01800	 mov       r1, r0, lsl #16
  00104	e1b02821	 movs      r2, r1, lsr #16
  00108	0a000002	 beq       |$L13999|

; 231  :     {
; 232  :         return FALSE;

  0010c	e3a00000	 mov       r0, #0
  00110	e58d000c	 str       r0, [sp, #0xC]
  00114	ea000094	 b         |$L13987|
  00118		 |$L13999|

; 233  :     } 
; 234  : 
; 235  :     //
; 236  :     // Change the Self Control register.
; 237  :     // Program the MDC divisor to be 7 which is 12.5 Mhz.
; 238  :     //
; 239  :     WriteDWord
; 240  :     (
; 241  :         OpReg_SelfCTL,   
; 242  :         (7<<SelfCTL_MDCDIV_Shift)
; 243  :     );

  00118	e59f025c	 ldr       r0, [pc, #0x25C]
  0011c	e5901000	 ldr       r1, [r0]
  00120	e3a02c0e	 mov       r2, #0xE, 24
  00124	e5812020	 str       r2, [r1, #0x20]

; 244  : 
; 245  :     //
; 246  :     // Startup the PHY 
; 247  :     //
; 248  :     Result = StartupPHY( pChip );

  00128	e59f0250	 ldr       r0, [pc, #0x250]
  0012c	e5900000	 ldr       r0, [r0]
  00130	eb000000	 bl        StartupPHY
  00134	e1cd01b2	 strh      r0, [sp, #0x12]
  00138	e1dd11b2	 ldrh      r1, [sp, #0x12]
  0013c	e1cd10b8	 strh      r1, [sp, #8]

; 249  :     if ( Result != MAC_SUCCESSFUL )

  00140	e1dd00b8	 ldrh      r0, [sp, #8]
  00144	e1a01800	 mov       r1, r0, lsl #16
  00148	e1b02821	 movs      r2, r1, lsr #16
  0014c	0a000002	 beq       |$L14001|

; 250  :     {
; 251  :         return FALSE;

  00150	e3a00000	 mov       r0, #0
  00154	e58d000c	 str       r0, [sp, #0xC]
  00158	ea000083	 b         |$L13987|
  0015c		 |$L14001|

; 252  :     }
; 253  : 
; 254  :     //************************************************************************
; 255  :     //
; 256  :     // After Communicating with the Phy we must turn on Preamble suppress bit.
; 257  :     // In order to communicate with the Phy using MDII commands we must send 
; 258  :     // the preamble.  
; 259  :     //
; 260  :     // In order to send ethernet frames from the MAC the Preamble suppress 
; 261  :     // bit  must be on.
; 262  :     //
; 263  :     //************************************************************************
; 264  :     WriteDWord
; 265  :     (
; 266  :         OpReg_SelfCTL,   
; 267  :         (7 << SelfCTL_MDCDIV_Shift) | SelfCTL_PSPRS
; 268  :     );

  0015c	e59f0218	 ldr       r0, [pc, #0x218]
  00160	e5901000	 ldr       r1, [r0]
  00164	e3a02c0f	 mov       r2, #0xF, 24
  00168	e5812020	 str       r2, [r1, #0x20]

; 269  : 
; 270  : 
; 271  :     //
; 272  :     // Reset the Transmit state machine.
; 273  :     //
; 274  :     WriteDWord( OpReg_BMCTL,  BMCTL_TxChRes );

  0016c	e59f0208	 ldr       r0, [pc, #0x208]
  00170	e5901000	 ldr       r1, [r0]
  00174	e3a02b01	 mov       r2, #1, 22
  00178	e3a00080	 mov       r0, #0x80
  0017c	e7812000	 str       r2, [r1, +r0]

; 275  :     for( dwCount = 0;;dwCount ++)

  00180	e3a03000	 mov       r3, #0
  00184	e58d3000	 str       r3, [sp]
  00188	ea000002	 b         |$L14004|
  0018c		 |$L14005|
  0018c	e59d0000	 ldr       r0, [sp]
  00190	e2801001	 add       r1, r0, #1
  00194	e58d1000	 str       r1, [sp]
  00198		 |$L14004|

; 276  :     {
; 277  :         DelayInuSec(1);

  00198	e3a00001	 mov       r0, #1
  0019c	eb000000	 bl        DelayInuSec

; 278  :         if(dwCount >0x10000)

  001a0	e59d3000	 ldr       r3, [sp]
  001a4	e3530801	 cmp       r3, #1, 16
  001a8	9a000001	 bls       |$L14007|

; 279  :         {
; 280  :             EdbgOutputDebugString
; 281  :             (
; 282  :                 "CS8950: Transmit State machine never resets.\n"
; 283  :             );            

  001ac	e59f01d4	 ldr       r0, [pc, #0x1D4]
  001b0	eb000000	 bl        EdbgOutputDebugString
  001b4		 |$L14007|

; 284  :         }
; 285  :         if(!(ReadDWord( OpReg_BMCTL) & BMCTL_TxChRes))

  001b4	e59f01c0	 ldr       r0, [pc, #0x1C0]
  001b8	e5901000	 ldr       r1, [r0]
  001bc	e5912080	 ldr       r2, [r1, #0x80]
  001c0	e3120b01	 tst       r2, #1, 22
  001c4	1a000000	 bne       |$L14010|

; 286  :         {
; 287  :             break;

  001c8	ea000000	 b         |$L14006|
  001cc		 |$L14010|

; 288  :         }
; 289  :     }

  001cc	eaffffee	 b         |$L14005|
  001d0		 |$L14006|

; 290  :     
; 291  :     //
; 292  :     // Reset the Recieve state machine.
; 293  :     //
; 294  :     WriteDWord( OpReg_BMCTL,  BMCTL_RxChRes );

  001d0	e59f01a4	 ldr       r0, [pc, #0x1A4]
  001d4	e5901000	 ldr       r1, [r0]
  001d8	e3a02004	 mov       r2, #4
  001dc	e3a00080	 mov       r0, #0x80
  001e0	e7812000	 str       r2, [r1, +r0]

; 295  :     for( dwCount = 0;;dwCount ++)

  001e4	e3a03000	 mov       r3, #0
  001e8	e58d3000	 str       r3, [sp]
  001ec	ea000002	 b         |$L14012|
  001f0		 |$L14013|
  001f0	e59d0000	 ldr       r0, [sp]
  001f4	e2801001	 add       r1, r0, #1
  001f8	e58d1000	 str       r1, [sp]
  001fc		 |$L14012|

; 296  :     {
; 297  :         DelayInuSec(1);

  001fc	e3a00001	 mov       r0, #1
  00200	eb000000	 bl        DelayInuSec

; 298  :         if(dwCount >0x10000)

  00204	e59d3000	 ldr       r3, [sp]
  00208	e3530801	 cmp       r3, #1, 16
  0020c	9a000001	 bls       |$L14015|

; 299  :         {
; 300  :             EdbgOutputDebugString
; 301  :             (
; 302  :                 "CS8950: Receive State machine never resets.\n"
; 303  :             );            

  00210	e59f016c	 ldr       r0, [pc, #0x16C]
  00214	eb000000	 bl        EdbgOutputDebugString
  00218		 |$L14015|

; 304  :         }
; 305  :         if(!(ReadDWord( OpReg_BMCTL) & BMCTL_RxChRes))

  00218	e59f015c	 ldr       r0, [pc, #0x15C]
  0021c	e5901000	 ldr       r1, [r0]
  00220	e5912080	 ldr       r2, [r1, #0x80]
  00224	e3120004	 tst       r2, #4
  00228	1a000000	 bne       |$L14018|

; 306  :         {
; 307  :             break;

  0022c	ea000000	 b         |$L14014|
  00230		 |$L14018|

; 308  :         }
; 309  :     }

  00230	eaffffee	 b         |$L14013|
  00234		 |$L14014|

; 310  : 
; 311  : 
; 312  :     /* Startup the transmit and receive queues */
; 313  :     Result = StartupQueues( pChip );

  00234	e59f0144	 ldr       r0, [pc, #0x144]
  00238	e5900000	 ldr       r0, [r0]
  0023c	eb000000	 bl        StartupQueues
  00240	e1cd01b4	 strh      r0, [sp, #0x14]
  00244	e1dd11b4	 ldrh      r1, [sp, #0x14]
  00248	e1cd10b8	 strh      r1, [sp, #8]

; 314  :     if ( Result != MAC_SUCCESSFUL )

  0024c	e1dd00b8	 ldrh      r0, [sp, #8]
  00250	e1a01800	 mov       r1, r0, lsl #16
  00254	e1b02821	 movs      r2, r1, lsr #16
  00258	0a000002	 beq       |$L14019|

; 315  :     {
; 316  :         return FALSE;

  0025c	e3a00000	 mov       r0, #0
  00260	e58d000c	 str       r0, [sp, #0xC]
  00264	ea000040	 b         |$L13987|
  00268		 |$L14019|

; 317  :     }
; 318  : 
; 319  :     /* Initialize the chip */
; 320  :     Result = VchipInit( pChip );

  00268	e59f0110	 ldr       r0, [pc, #0x110]
  0026c	e5900000	 ldr       r0, [r0]
  00270	eb000000	 bl        VchipInit
  00274	e1cd01b6	 strh      r0, [sp, #0x16]
  00278	e1dd11b6	 ldrh      r1, [sp, #0x16]
  0027c	e1cd10b8	 strh      r1, [sp, #8]

; 321  :     if ( Result != MAC_SUCCESSFUL )

  00280	e1dd00b8	 ldrh      r0, [sp, #8]
  00284	e1a01800	 mov       r1, r0, lsl #16
  00288	e1b02821	 movs      r2, r1, lsr #16
  0028c	0a000002	 beq       |$L14020|

; 322  :     {
; 323  :         return FALSE;

  00290	e3a00000	 mov       r0, #0
  00294	e58d000c	 str       r0, [sp, #0xC]
  00298	ea000033	 b         |$L13987|
  0029c		 |$L14020|

; 324  :     }
; 325  : 
; 326  : 
; 327  :     WriteByte(OpReg_AFP, AFP_IAPrimary );

  0029c	e59f00d8	 ldr       r0, [pc, #0xD8]
  002a0	e5901000	 ldr       r1, [r0]
  002a4	e3a02000	 mov       r2, #0
  002a8	e3a0004c	 mov       r0, #0x4C
  002ac	e7c12000	 strb      r2, [r1, +r0]

; 328  : 
; 329  :     /* Set Individual MAC Address (override) */
; 330  :     WriteByte(OpReg_IndAd + 0, *(((BYTE *)MacAddr) + 0));

  002b0	e59f30c4	 ldr       r3, [pc, #0xC4]
  002b4	e5930000	 ldr       r0, [r3]
  002b8	e59d1028	 ldr       r1, [sp, #0x28]
  002bc	e5d12000	 ldrb      r2, [r1]
  002c0	e3a03050	 mov       r3, #0x50
  002c4	e7c02003	 strb      r2, [r0, +r3]

; 331  :     WriteByte(OpReg_IndAd + 1, *(((BYTE *)MacAddr) + 1));

  002c8	e59d1028	 ldr       r1, [sp, #0x28]
  002cc	e59f00a8	 ldr       r0, [pc, #0xA8]
  002d0	e5902000	 ldr       r2, [r0]
  002d4	e5d13001	 ldrb      r3, [r1, #1]
  002d8	e3a00051	 mov       r0, #0x51
  002dc	e7c23000	 strb      r3, [r2, +r0]

; 332  :     WriteByte(OpReg_IndAd + 2, *(((BYTE *)MacAddr) + 2));

  002e0	e59d1028	 ldr       r1, [sp, #0x28]
  002e4	e59f0090	 ldr       r0, [pc, #0x90]
  002e8	e5902000	 ldr       r2, [r0]
  002ec	e5d13002	 ldrb      r3, [r1, #2]
  002f0	e3a00052	 mov       r0, #0x52
  002f4	e7c23000	 strb      r3, [r2, +r0]

; 333  :     WriteByte(OpReg_IndAd + 3, *(((BYTE *)MacAddr) + 3));

  002f8	e59d1028	 ldr       r1, [sp, #0x28]
  002fc	e59f0078	 ldr       r0, [pc, #0x78]
  00300	e5902000	 ldr       r2, [r0]
  00304	e5d13003	 ldrb      r3, [r1, #3]
  00308	e3a00053	 mov       r0, #0x53
  0030c	e7c23000	 strb      r3, [r2, +r0]

; 334  :     WriteByte(OpReg_IndAd + 4, *(((BYTE *)MacAddr) + 4));

  00310	e59d1028	 ldr       r1, [sp, #0x28]
  00314	e59f0060	 ldr       r0, [pc, #0x60]
  00318	e5902000	 ldr       r2, [r0]
  0031c	e5d13004	 ldrb      r3, [r1, #4]
  00320	e3a00054	 mov       r0, #0x54
  00324	e7c23000	 strb      r3, [r2, +r0]

; 335  :     WriteByte(OpReg_IndAd + 5, *(((BYTE *)MacAddr) + 5));

  00328	e59d1028	 ldr       r1, [sp, #0x28]
  0032c	e59f0048	 ldr       r0, [pc, #0x48]
  00330	e5902000	 ldr       r2, [r0]
  00334	e5d13005	 ldrb      r3, [r1, #5]
  00338	e3a00055	 mov       r0, #0x55
  0033c	e7c23000	 strb      r3, [r2, +r0]

; 336  : 
; 337  :     /* Set Max Frame Length and Transmit Start Threshold */
; 338  :     MaxFL.Word.TxStartThresh  = TXSTARTMAX;

  00340	e3a01e3b	 mov       r1, #0x3B, 28
  00344	e1cd10b4	 strh      r1, [sp, #4]

; 339  :     MaxFL.Word.MaxFrameLength = MAXFRAMELENGTH;

  00348	e3a00e5f	 mov       r0, #0x5F, 28
  0034c	e1cd00b6	 strh      r0, [sp, #6]

; 340  :     WriteDWord( OpReg_MaxFL, MaxFL.DWord );

  00350	e59f1024	 ldr       r1, [pc, #0x24]
  00354	e5910000	 ldr       r0, [r1]
  00358	e59d2004	 ldr       r2, [sp, #4]
  0035c	e3a010e8	 mov       r1, #0xE8
  00360	e7802001	 str       r2, [r0, +r1]

; 341  :  
; 342  :     return TRUE;

  00364	e3a03001	 mov       r3, #1
  00368	e58d300c	 str       r3, [sp, #0xC]
  0036c		 |$L13987|

; 207  :     {
; 208  :         return FALSE;

  0036c	e59d000c	 ldr       r0, [sp, #0xC]

; 343  : }

  00370	e28dd018	 add       sp, sp, #0x18
  00374	e89d6000	 ldmia     sp, {sp, lr}
  00378	e12fff1e	 bx        lr
  0037c		 |$L14775|
  0037c	00000000	 DCD       |gdwEthernetBase|
  00380	00000000	 DCD       |pChip|
  00384	00000000	 DCD       |??_C@_0CN@CGBO@CS8950?3?5Receive?5State?5machine?5ne@|
  00388	00000000	 DCD       |??_C@_0CO@DOKL@CS8950?3?5Transmit?5State?5machine?5n@|
  0038c	00000000	 DCD       |pCS8950Buffer|
  00390	00000000	 DCD       |??_C@_0DB@KCFA@CS8950Init?3?5?5pChip?5?$DN?50x?$CFx?0?5pChip@|
  00394	00000000	 DCD       |gCD|
  00398	00000000	 DCD       |Chip|
  0039c	00000000	 DCD       |??_C@_0CE@IIJN@CS8950Init?3?5?5pbBaseAddress?5?$DN?50x?$CF@|
  003a0		 |$M14772|

			 ENDP  ; |CS8950Init|

	EXPORT	|CS8950SendFrame|

  00000			 AREA	 |.text| { |CS8950SendFrame| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$CS8950SendFrame|, PDATA, SELECTION=5, ASSOC=|.text| { |CS8950SendFrame| } ; comdat associative

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -