📄 pcmciasupport.cod
字号:
00120 eb000000 bl CalculatePcmciaTimings
00124 e58d0018 str r0, [sp, #0x18]
00128 e59d3018 ldr r3, [sp, #0x18]
0012c e3832102 orr r2, r3, #2, 2
00130 e59f3024 ldr r3, [pc, #0x24]
00134 e5832000 str r2, [r3]
; 535 : //*SMC_PCCONFIG_IO1 = CalculatePcmciaTimings(0 );
; 536 : }
; 537 : else
00138 ea000001 b |$L38173|
0013c |$L38166|
; 538 : {
; 539 : iReturnValue = 0;
0013c e3a03000 mov r3, #0
00140 e58d3000 str r3, [sp]
00144 |$L38173|
; 540 : }
; 541 :
; 542 :
; 543 : return iReturnValue;
00144 e59d3000 ldr r3, [sp]
00148 e58d3008 str r3, [sp, #8]
0014c e59d0008 ldr r0, [sp, #8]
; 544 : }
00150 e28dd01c add sp, sp, #0x1C
00154 e49de004 ldr lr, [sp], #4
00158 e12fff1e bx lr
0015c |$L38245|
0015c 80080028 DCD 0x80080028
00160 80080024 DCD 0x80080024
00164 80080020 DCD 0x80080020
00168 80080040 DCD 0x80080040
0016c 80840058 DCD 0x80840058
00170 80840050 DCD 0x80840050
00174 8084004c DCD 0x8084004c
00178 80840054 DCD 0x80840054
0017c 80840030 DCD 0x80840030
00180 80840034 DCD 0x80840034
00184 |$M38241|
ENDP ; |OEMPCMCIAInitialize|
IMPORT |DelayInuSec|
00000 AREA |.text| { |PowerPCCardWrite| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$PowerPCCardWrite|, PDATA, SELECTION=5, ASSOC=|.text| { |PowerPCCardWrite| } ; comdat associative
|$T38252| DCD |$L38251|
DCD 0x40007e04
; Function compile flags: /Ods
00000 AREA |.text| { |PowerPCCardWrite| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |PowerPCCardWrite| PROC
; 104 : {
00000 |$L38251|
00000 e1a0c00d mov r12, sp
00004 e92d0007 stmdb sp!, {r0 - r2}
00008 e92d5000 stmdb sp!, {r12, lr}
0000c e24dd010 sub sp, sp, #0x10
00010 |$M38249|
; 105 : unsigned char retVal = 0; // 0 = G_SUCCESS
00010 e3a03000 mov r3, #0
00014 e5cd3000 strb r3, [sp]
; 106 : ULONG ulSwitchSettings;
; 107 : int i;
; 108 :
; 109 :
; 110 : if(vccOut == 50)
00018 e5dd3018 ldrb r3, [sp, #0x18]
0001c e3530032 cmp r3, #0x32
00020 1a000003 bne |$L38084|
; 111 : {
; 112 : //
; 113 : // Configure PCMCIA for 5 Volts.
; 114 : //
; 115 : ulSwitchSettings = EE_ADDRESS |ENABLE | AVPP_0V | BVPP_0V |AVCC_5V | BVCC_0V;
00024 e3a03cab mov r3, #0xAB, 24
00028 e3833008 orr r3, r3, #8
0002c e58d3008 str r3, [sp, #8]
; 116 : }
; 117 : else if(vccOut ==33)
00030 ea00000f b |$L38085|
00034 |$L38084|
00034 e5dd3018 ldrb r3, [sp, #0x18]
00038 e3530021 cmp r3, #0x21
0003c 1a000003 bne |$L38086|
; 118 : {
; 119 : //
; 120 : // Configure PCMCIA for 3.3 Volts.
; 121 : //
; 122 : ulSwitchSettings = EE_ADDRESS | ENABLE | AVPP_0V | BVPP_0V |AVCC_33V | BVCC_0V;
00040 e3a03cab mov r3, #0xAB, 24
00044 e3833004 orr r3, r3, #4
00048 e58d3008 str r3, [sp, #8]
; 123 : }
; 124 : else if(vccOut == 0)
0004c ea000008 b |$L38087|
00050 |$L38086|
00050 e5dd3018 ldrb r3, [sp, #0x18]
00054 e3530000 cmp r3, #0
00058 1a000002 bne |$L38088|
; 125 : {
; 126 : //
; 127 : // Configure PCMCIA for 0 Volts.
; 128 : //
; 129 : ulSwitchSettings = EE_ADDRESS | ENABLE | AVPP_0V | BVPP_0V |AVCC_0V | BVCC_0V;
0005c e3a03cab mov r3, #0xAB, 24
00060 e58d3008 str r3, [sp, #8]
; 130 :
; 131 : }
; 132 : else
00064 ea000002 b |$L38089|
00068 |$L38088|
; 133 : {
; 134 : return (ERROR_POWERPCCARD_INVALID_PARMS);
00068 e3a03001 mov r3, #1
0006c e5cd300c strb r3, [sp, #0xC]
00070 ea000057 b |$L38080|
00074 |$L38089|
00074 |$L38087|
00074 |$L38085|
; 135 : }
; 136 :
; 137 : //
; 138 : // Update these variables while processing
; 139 : //
; 140 : Vcc = vccOut;
00074 e5dd2018 ldrb r2, [sp, #0x18]
00078 e59f3174 ldr r3, [pc, #0x174]
0007c e5c32000 strb r2, [r3]
; 141 : Vpp1 = vpp1Out;
00080 e5dd201c ldrb r2, [sp, #0x1C]
00084 e59f3164 ldr r3, [pc, #0x164]
00088 e5c32000 strb r2, [r3]
; 142 : Vpp2 = vpp2Out;
0008c e5dd2020 ldrb r2, [sp, #0x20]
00090 e59f3154 ldr r3, [pc, #0x154]
00094 e5c32000 strb r2, [r3]
; 143 :
; 144 : //
; 145 : // Turn on the power to the socket !!!
; 146 : //
; 147 : // EECLK -> Clock
; 148 : // EEDATA -> Data
; 149 : // SLA0 -> Latch
; 150 : //*EEPROM_CONFIG = CONFIG_S0DIR;
; 151 : //Sleep(20);
; 152 : //*EEPROM_CONFIG = CONFIG_S0DIR | CONFIG_DDIR | CONFIG_CDIR ;
; 153 : *GPIO_PGDDR = GPIOG_EECLK | GPIOG_EEDAT | GPIOG_SLA0;
00098 e59f2148 ldr r2, [pc, #0x148]
0009c e3a03007 mov r3, #7
000a0 e5823000 str r3, [r2]
; 154 :
; 155 :
; 156 : //
; 157 : // Clear all except EECLK
; 158 : //
; 159 : //*EEPROM_DATA = DATA_EECLK;
; 160 : *GPIO_PGDR = GPIOG_EECLK;
000a4 e59f2138 ldr r2, [pc, #0x138]
000a8 e3a03001 mov r3, #1
000ac e5823000 str r3, [r2]
; 161 :
; 162 : //
; 163 : // Raise the clock.
; 164 : //
; 165 : DelayInuSec(50);
000b0 e3a00032 mov r0, #0x32
000b4 eb000000 bl DelayInuSec
; 166 : //*EEPROM_DATA = 0;
; 167 : *GPIO_PGDR = 0;
000b8 e59f2124 ldr r2, [pc, #0x124]
000bc e3a03000 mov r3, #0
000c0 e5823000 str r3, [r2]
; 168 : DelayInuSec(50);
000c4 e3a00032 mov r0, #0x32
000c8 eb000000 bl DelayInuSec
; 169 :
; 170 : for (i=18; i>=0; --i)
000cc e3a03012 mov r3, #0x12
000d0 e58d3004 str r3, [sp, #4]
000d4 ea000002 b |$L38093|
000d8 |$L38094|
000d8 e59d3004 ldr r3, [sp, #4]
000dc e2433001 sub r3, r3, #1
000e0 e58d3004 str r3, [sp, #4]
000e4 |$L38093|
000e4 e59d3004 ldr r3, [sp, #4]
000e8 e3530000 cmp r3, #0
000ec ba000024 blt |$L38095|
; 171 : //for (i=9; i>=0; --i)
; 172 : {
; 173 : if((ulSwitchSettings >> i) & 1)
000f0 e59d2008 ldr r2, [sp, #8]
000f4 e59d3004 ldr r3, [sp, #4]
000f8 e1a03332 mov r3, r2, lsr r3
000fc e3130001 tst r3, #1
00100 0a00000f beq |$L38096|
; 174 : {
; 175 : //
; 176 : // Put the data on the bus and lower the clock.
; 177 : //
; 178 : *GPIO_PGDR = GPIOG_EEDAT ;
00104 e59f20d8 ldr r2, [pc, #0xD8]
00108 e3a03002 mov r3, #2
0010c e5823000 str r3, [r2]
; 179 : DelayInuSec(50);
00110 e3a00032 mov r0, #0x32
00114 eb000000 bl DelayInuSec
; 180 :
; 181 : //
; 182 : // Raise the clock to latch the data in.
; 183 : //
; 184 : //*EEPROM_DATA = DATA_EECLK | DATA_EEDAT;
; 185 : *GPIO_PGDR = GPIOG_EECLK | GPIOG_EEDAT;
00118 e59f20c4 ldr r2, [pc, #0xC4]
0011c e3a03003 mov r3, #3
00120 e5823000 str r3, [r2]
; 186 : DelayInuSec(50);
00124 e3a00032 mov r0, #0x32
00128 eb000000 bl DelayInuSec
; 187 :
; 188 : //
; 189 : // Lower the clock again.
; 190 : //
; 191 : //*EEPROM_DATA = DATA_EEDAT;
; 192 : *GPIO_PGDR = GPIOG_EEDAT;
0012c e59f20b0 ldr r2, [pc, #0xB0]
00130 e3a03002 mov r3, #2
00134 e5823000 str r3, [r2]
; 193 : DelayInuSec(50);
00138 e3a00032 mov r0, #0x32
0013c eb000000 bl DelayInuSec
; 194 : }
; 195 : else
00140 ea00000e b |$L38100|
00144 |$L38096|
; 196 : {
; 197 : //
; 198 : // Put the data on the bus and lower the clock.
; 199 : //
; 200 : //*EEPROM_DATA = 0 ;
; 201 : *GPIO_PGDR = 0;
00144 e59f2098 ldr r2, [pc, #0x98]
00148 e3a03000 mov r3, #0
0014c e5823000 str r3, [r2]
; 202 : DelayInuSec(50);
00150 e3a00032 mov r0, #0x32
00154 eb000000 bl DelayInuSec
; 203 :
; 204 : //
; 205 : // Raise the clock to latch the data in.
; 206 : //
; 207 : //*EEPROM_DATA = DATA_EECLK ;
; 208 : *GPIO_PGDR = GPIOG_EECLK ;
00158 e59f2084 ldr r2, [pc, #0x84]
0015c e3a03001 mov r3, #1
00160 e5823000 str r3, [r2]
; 209 : DelayInuSec(50);
00164 e3a00032 mov r0, #0x32
00168 eb000000 bl DelayInuSec
; 210 :
; 211 : //
; 212 : // Lower the clock again.
; 213 : //
; 214 : //*EEPROM_DATA = 0;
; 215 : *GPIO_PGDR = 0 ;
0016c e59f2070 ldr r2, [pc, #0x70]
00170 e3a03000 mov r3, #0
00174 e5823000 str r3, [r2]
; 216 : DelayInuSec(50);
00178 e3a00032 mov r0, #0x32
0017c eb000000 bl DelayInuSec
00180 |$L38100|
; 217 : }
; 218 : }
00180 eaffffd4 b |$L38094|
00184 |$L38095|
; 219 :
; 220 : //
; 221 : // Raise and lower the Latch.
; 222 : //
; 223 : *GPIO_PGDR = GPIOG_SLA0;
00184 e59f2058 ldr r2, [pc, #0x58]
00188 e3a03004 mov r3, #4
0018c e5823000 str r3, [r2]
; 224 : DelayInuSec(50);
00190 e3a00032 mov r0, #0x32
00194 eb000000 bl DelayInuSec
; 225 :
; 226 : *GPIO_PGDR = 0;
00198 e59f2044 ldr r2, [pc, #0x44]
0019c e3a03000 mov r3, #0
001a0 e5823000 str r3, [r2]
; 227 : *GPIO_PGDR = GPIOG_EECLK;
001a4 e59f2038 ldr r2, [pc, #0x38]
001a8 e3a03001 mov r3, #1
001ac e5823000 str r3, [r2]
; 228 : DelayInuSec(50);
001b0 e3a00032 mov r0, #0x32
001b4 eb000000 bl DelayInuSec
; 229 : *GPIO_PGDR = GPIOG_EECLK| GPIOG_EEDAT;
001b8 e59f2024 ldr r2, [pc, #0x24]
001bc e3a03003 mov r3, #3
001c0 e5823000 str r3, [r2]
; 230 : DelayInuSec(50);
001c4 e3a00032 mov r0, #0x32
001c8 eb000000 bl DelayInuSec
; 231 :
; 232 : //
; 233 : // Change the configuration back to zero.
; 234 : // This will cause the PCMCIA interface to reset.
; 235 : //
; 236 : //*EEPROM_CONFIG = CONFIG_S0DIR;
; 237 :
; 238 : return(retVal);
001cc e5dd3000 ldrb r3, [sp]
001d0 e5cd300c strb r3, [sp, #0xC]
001d4 |$L38080|
; 133 : {
; 134 : return (ERROR_POWERPCCARD_INVALID_PARMS);
001d4 e5dd000c ldrb r0, [sp, #0xC]
; 239 : }
001d8 e28dd010 add sp, sp, #0x10
001dc e89d6000 ldmia sp, {sp, lr}
001e0 e12fff1e bx lr
001e4 |$L38254|
001e4 80840038 DCD 0x80840038
001e8 8084003c DCD 0x8084003c
001ec 00000000 DCD |Vpp2|
001f0 00000000 DCD |Vpp1|
001f4 00000000 DCD |Vcc|
001f8 |$M38250|
ENDP ; |PowerPCCardWrite|
EXPORT |??_C@_0CL@BKBHLIKE@Card?5Voltage?3?5Card?5bus?0?5Unsuppor@| [ DATA ] ; `string'
EXPORT |??_C@_0CF@KMCAEMEC@Card?5Voltage?3?5x?4x?53?43v?5and?55v?5Ca@| [ DATA ] ; `string'
EXPORT |??_C@_0CF@NFAAFMBL@Card?5Voltage?3?5x?4xv?5?$CINot?5supporte@| [ DATA ] ; `string'
EXPORT |??_C@_0BF@JPLNLKLD@Card?5Voltage?3?53?43v?4?6?$AA@| [ DATA ] ; `string'
EXPORT |??_C@_0BD@PJNOJFDC@Card?5Voltage?3?55v?4?6?$AA@| [ DATA ] ; `string'
IMPORT |EdbgOutputDebugString|
00000 AREA |.text| { |detectVolts| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$detectVolts|, PDATA, SELECTION=5, ASSOC=|.text| { |detectVolts| } ; comdat associative
|$T38261| DCD |$L38260|
DCD 0x40003d02
00000 AREA |.rdata| { |??_C@_0BD@PJNOJFDC@Card?5Voltage?3?55v?4?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0BD@PJNOJFDC@Card?5Voltage?3?55v?4?6?$AA@| DCB "Card Voltage: 5v.", 0xa
DCB 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0BF@JPLNLKLD@Card?5Voltage?3?53?43v?4?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0BF@JPLNLKLD@Card?5Voltage?3?53?43v?4?6?$AA@| DCB "Card Voltage: 3"
DCB ".3v.", 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0CF@NFAAFMBL@Card?5Voltage?3?5x?4xv?5?$CINot?5supporte@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CF@NFAAFMBL@Card?5Voltage?3?5x?4xv?5?$CINot?5supporte@| DCB "Card"
DCB " Voltage: x.xv (Not supported).", 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0CF@KMCAEMEC@Card?5Voltage?3?5x?4x?53?43v?5and?55v?5Ca@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CF@KMCAEMEC@Card?5Voltage?3?5x?4x?53?43v?5and?55v?5Ca@| DCB "Card"
DCB " Voltage: x.x 3.3v and 5v Card.", 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0CL@BKBHLIKE@Card?5Voltage?3?5Card?5bus?0?5Unsuppor@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CL@BKBHLIKE@Card?5Voltage?3?5Card?5bus?0?5Unsuppor@| DCB "Card Vo"
DCB "ltage: Card bus, Unsupported card.", 0xa, 0x0 ; `string'
; Function compile flags: /Ods
00000 AREA |.text| { |detectVolts| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |detectVolts| PROC
; 249 : {
00000 |$L38260|
00000 e52de004 str lr, [sp, #-4]!
00004 e24dd008 sub sp, sp, #8
00008 |$M38258|
; 250 : ULONG ulVS;
; 251 :
; 252 : // *PCMCIA_PCCONFIG = PCMCIA_PCCONFIG_VSEN | PCMCIA_PCCONFIG_VS2 | PCMCIA_PCCONFIG_VS1;
; 253 : *GPIO_PFDR = GPIOF_PCMCIA_VS1 | GPIOF_PCMCIA_VS2;
00008 e59f20e0 ldr r2, [pc, #0xE0]
0000c e3a030a0 mov r3, #0xA0
00010 e5823000 str r3, [r2]
; 254 :
; 255 : ulVS = *GPIO_PFDR &( GPIOF_PCMCIA_CD1 | GPIOF_PCMCIA_CD2 |
; 256 : GPIOF_PCMCIA_VS1 | GPIOF_PCMCIA_VS2);
00014 e59f30d4 ldr r3, [pc, #0xD4]
00018 e5933000 ldr r3, [r3]
0001c e20330a6 and r3, r3, #0xA6
00020 e58d3000 str r3, [sp]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -