📄 cs8950.cod
字号:
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 + -