📄 eeinfo.cod
字号:
00000 AREA |.text| { |WaitTillTransmitFifoEmpty| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |WaitTillTransmitFifoEmpty| PROC
; 455 : {
00000 |$L15464|
00000 e92d4070 stmdb sp!, {r4 - r6, lr}
00004 |$M15462|
; 456 : ULONGLONG ullStart, ullCurrent, ullMax;
; 457 :
; 458 : //
; 459 : // Clear the transmit fifo.
; 460 : //
; 461 : ullStart = GetSystemTimeInUSec();
00004 eb000000 bl GetSystemTimeInUSec
; 462 : ullMax = ullStart + SPI_MINTIME;
; 463 : while( !(*SPI_SR & SPISR_TFE))
00008 e29050c8 adds r5, r0, #0xC8
0000c e59f407c ldr r4, [pc, #0x7C]
00010 e2a16000 adc r6, r1, #0
00014 ea000005 b |$L15452|
00018 |$L15359|
; 464 : {
; 465 : //
; 466 : // Check to see if we timed out.
; 467 : //
; 468 : ullCurrent = GetSystemTimeInUSec();
00018 eb000000 bl GetSystemTimeInUSec
; 469 : if(ullMax < ullCurrent)
0001c e1560001 cmp r6, r1
00020 3a000017 bcc |$L15451|
00024 8a000001 bhi |$L15452|
00028 e1550000 cmp r5, r0
0002c 3a000014 bcc |$L15451|
00030 |$L15452|
; 462 : ullMax = ullStart + SPI_MINTIME;
; 463 : while( !(*SPI_SR & SPISR_TFE))
00030 e5943000 ldr r3, [r4]
00034 e3130001 tst r3, #1
00038 0afffff6 beq |$L15359|
; 470 : {
; 471 : return(0);
; 472 : }
; 473 : }
; 474 :
; 475 : //
; 476 : // Make sure that data is not actively going out.
; 477 : //
; 478 : ullStart = GetSystemTimeInUSec();
0003c eb000000 bl GetSystemTimeInUSec
; 479 : ullMax = ullStart + SPI_MINTIME;
; 480 : while( *SPI_SR & SPISR_BUSY)
00040 e29050c8 adds r5, r0, #0xC8
00044 e2a16000 adc r6, r1, #0
00048 ea000005 b |$L15453|
0004c |$L15364|
; 481 : {
; 482 : //
; 483 : // Check to see if we timed out.
; 484 : //
; 485 : ullCurrent = GetSystemTimeInUSec();
0004c eb000000 bl GetSystemTimeInUSec
; 486 : if(ullMax < ullCurrent)
00050 e1560001 cmp r6, r1
00054 3a00000a bcc |$L15451|
00058 8a000001 bhi |$L15453|
0005c e1550000 cmp r5, r0
00060 3a000007 bcc |$L15451|
00064 |$L15453|
; 479 : ullMax = ullStart + SPI_MINTIME;
; 480 : while( *SPI_SR & SPISR_BUSY)
00064 e5943000 ldr r3, [r4]
00068 e3130010 tst r3, #0x10
0006c 1afffff6 bne |$L15364|
; 489 : }
; 490 : }
; 491 :
; 492 : //
; 493 : // Delay 200 uS. Just to make sure that the data is cleared
; 494 : // out the fifo.
; 495 : //
; 496 : DelayInuSec(200);
00070 e3a000c8 mov r0, #0xC8
00074 eb000000 bl DelayInuSec
; 497 :
; 498 : return(1);
00078 e3a00001 mov r0, #1
; 499 : }
0007c e8bd4070 ldmia sp!, {r4 - r6, lr}
00080 e12fff1e bx lr
00084 |$L15451|
; 487 : {
; 488 : return(0);
00084 e3a00000 mov r0, #0
; 499 : }
00088 e8bd4070 ldmia sp!, {r4 - r6, lr}
0008c e12fff1e bx lr
00090 |$L15467|
00090 b08a000c DCD 0xb08a000c
00094 |$M15463|
ENDP ; |WaitTillTransmitFifoEmpty|
00000 AREA |.text| { |TestSPI| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$TestSPI|, PDATA, SELECTION=5, ASSOC=|.text| { |TestSPI| } ; comdat associative
|$T15507| DCD |$L15506|
DCD 0x40002c01
; Function compile flags: /Ogsy
00000 AREA |.text| { |TestSPI| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |TestSPI| PROC
; 213 : {
00000 |$L15506|
00000 e92d40f0 stmdb sp!, {r4 - r7, lr}
00004 |$M15504|
; 214 : ULONG ulManufacturer, ulDevice, ulTemp;
; 215 : // ULONGLONG ullStart, ullMax, ullCurrent;
; 216 :
; 217 : //
; 218 : // Issue the command for reading the SPI Product ID register.
; 219 : //
; 220 : *SPI_DR = SPIEE_RDID;
00004 e59f40a0 ldr r4, [pc, #0xA0]
00008 e3a03015 mov r3, #0x15
0000c e5843000 str r3, [r4]
; 221 : *SPI_DR = 0;
00010 e3a03000 mov r3, #0
00014 e5843000 str r3, [r4]
; 222 : *SPI_DR = 0;
00018 e5843000 str r3, [r4]
; 223 :
; 224 : //
; 225 : // Wait until the transmit fifo is flushed.
; 226 : //
; 227 : WaitTillTransmitFifoEmpty();
0001c eb000000 bl GetSystemTimeInUSec
00020 e29060c8 adds r6, r0, #0xC8
00024 e59f507c ldr r5, [pc, #0x7C]
00028 e2a17000 adc r7, r1, #0
0002c ea000005 b |$L15486|
00030 |$L15481|
00030 eb000000 bl GetSystemTimeInUSec
00034 e1570001 cmp r7, r1
00038 3a000014 bcc |$L15477|
0003c 8a000001 bhi |$L15486|
00040 e1560000 cmp r6, r0
00044 3a000011 bcc |$L15477|
00048 |$L15486|
00048 e5953000 ldr r3, [r5]
0004c e3130001 tst r3, #1
00050 0afffff6 beq |$L15481|
00054 eb000000 bl GetSystemTimeInUSec
00058 e29060c8 adds r6, r0, #0xC8
0005c e2a17000 adc r7, r1, #0
00060 ea000005 b |$L15487|
00064 |$L15473|
00064 eb000000 bl GetSystemTimeInUSec
00068 e1570001 cmp r7, r1
0006c 3a000007 bcc |$L15477|
00070 8a000001 bhi |$L15487|
00074 e1560000 cmp r6, r0
00078 3a000004 bcc |$L15477|
0007c |$L15487|
0007c e5953000 ldr r3, [r5]
00080 e3130010 tst r3, #0x10
00084 1afffff6 bne |$L15473|
00088 e3a000c8 mov r0, #0xC8
0008c eb000000 bl DelayInuSec
00090 |$L15477|
; 228 :
; 229 : //
; 230 : // Read one byte and throw it away.
; 231 : //
; 232 : ulTemp = *SPI_DR;
00090 e5943000 ldr r3, [r4]
; 233 :
; 234 : //
; 235 : // Read the Manufacturers code.
; 236 : //
; 237 : ulManufacturer = *SPI_DR;
00094 e5942000 ldr r2, [r4]
; 238 :
; 239 : //
; 240 : // Read the device code.
; 241 : //
; 242 : ulDevice = *SPI_DR;
00098 e5941000 ldr r1, [r4]
; 243 :
; 244 : //
; 245 : // Check to see if the Manufacturer is atmel if so return 1.
; 246 : //
; 247 : //return (ulManufacturer ==0x1F);
; 248 : return TRUE;
0009c e3a00001 mov r0, #1
; 249 : }
000a0 e8bd40f0 ldmia sp!, {r4 - r7, lr}
000a4 e12fff1e bx lr
000a8 |$L15509|
000a8 b08a000c DCD 0xb08a000c
000ac b08a0008 DCD 0xb08a0008
000b0 |$M15505|
ENDP ; |TestSPI|
EXPORT |??_C@_0CE@EMPABGLD@EEINFO?3?5ClearReceiveFifo?5Timeout@| [ DATA ] ; `string'
EXPORT |??_C@_0CD@DCGJPODM@EEINFO?3?5ReadEEWord?51rst?5Timeout?4@| [ DATA ] ; `string'
EXPORT |??_C@_0CC@ENCMIEAA@EEINFO?3?5ReadEEWord?52nd?5Timeout?4?$AN@| [ DATA ] ; `string'
EXPORT |??_C@_0CL@KFPMGBGB@EEINFO?3?5Receive?5?$DN?50x?$CFx?0?5Transmit@| [ DATA ] ; `string'
IMPORT |EdbgOutputDebugString|
00000 AREA |.text| { |ReadEEWord| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$ReadEEWord|, PDATA, SELECTION=5, ASSOC=|.text| { |ReadEEWord| } ; comdat associative
|$T15580| DCD |$L15579|
DCD 0x40008702
00000 AREA |.rdata| { |??_C@_0CC@ENCMIEAA@EEINFO?3?5ReadEEWord?52nd?5Timeout?4?$AN@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CC@ENCMIEAA@EEINFO?3?5ReadEEWord?52nd?5Timeout?4?$AN@| DCB "EEINF"
DCB "O: ReadEEWord 2nd Timeout.", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0CL@KFPMGBGB@EEINFO?3?5Receive?5?$DN?50x?$CFx?0?5Transmit@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CL@KFPMGBGB@EEINFO?3?5Receive?5?$DN?50x?$CFx?0?5Transmit@| DCB "E"
DCB "EINFO: Receive = 0x%x, Transmit = 0x%x.", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0CD@DCGJPODM@EEINFO?3?5ReadEEWord?51rst?5Timeout?4@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CD@DCGJPODM@EEINFO?3?5ReadEEWord?51rst?5Timeout?4@| DCB "EEINFO: "
DCB "ReadEEWord 1rst Timeout.", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0CE@EMPABGLD@EEINFO?3?5ClearReceiveFifo?5Timeout@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CE@EMPABGLD@EEINFO?3?5ClearReceiveFifo?5Timeout@| DCB "EEINFO: Cl"
DCB "earReceiveFifo Timeout.", 0xd, 0xa, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |ReadEEWord| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |ReadEEWord| PROC
; 261 : {
00000 |$L15579|
00000 e92d4ff0 stmdb sp!, {r4 - r11, lr}
00004 e24dd004 sub sp, sp, #4
00008 |$M15577|
00008 e1a0b002 mov r11, r2
0000c e1a0a001 mov r10, r1
00010 e1a09000 mov r9, r0
; 262 : ULONG ulCount, ulTransmitCount = 0;
00014 e3a06000 mov r6, #0
; 263 : ULONG ulReceiveCount = 0;
; 264 : volatile ULONG ulTemp;
; 265 : ULONGLONG ullStart, ullMax, ullCurrent;
; 266 : BOOL bRet;
; 267 :
; 268 :
; 269 : //
; 270 : // Make sure that the receive fifo is clear.
; 271 : //
; 272 : bRet = ClearReceiveFifo();
00018 eb000000 bl GetSystemTimeInUSec
0001c e29050c8 adds r5, r0, #0xC8
00020 e59f41f0 ldr r4, [pc, #0x1F0]
00024 e2a17000 adc r7, r1, #0
00028 ea000005 b |$L15542|
0002c |$L15519|
0002c eb000000 bl GetSystemTimeInUSec
00030 e1570001 cmp r7, r1
00034 3a000064 bcc |$L15541|
00038 8a000001 bhi |$L15542|
0003c e1550000 cmp r5, r0
00040 3a000061 bcc |$L15541|
00044 |$L15542|
00044 e5943000 ldr r3, [r4]
00048 e3130001 tst r3, #1
0004c 0afffff6 beq |$L15519|
00050 eb000000 bl GetSystemTimeInUSec
00054 e29050c8 adds r5, r0, #0xC8
00058 e2a17000 adc r7, r1, #0
0005c ea000005 b |$L15543|
00060 |$L15522|
00060 eb000000 bl GetSystemTimeInUSec
00064 e1570001 cmp r7, r1
00068 3a000057 bcc |$L15541|
0006c 8a000001 bhi |$L15543|
00070 e1550000 cmp r5, r0
00074 3a000054 bcc |$L15541|
00078 |$L15543|
00078 e5943000 ldr r3, [r4]
0007c e3130010 tst r3, #0x10
00080 1afffff6 bne |$L15522|
00084 e3a000c8 mov r0, #0xC8
00088 eb000000 bl DelayInuSec
0008c eb000000 bl GetSystemTimeInUSec
00090 e29050c8 adds r5, r0, #0xC8
00094 e59f7178 ldr r7, [pc, #0x178]
00098 e2a18000 adc r8, r1, #0
0009c ea000006 b |$L15544|
000a0 |$L15525|
000a0 e5973000 ldr r3, [r7]
000a4 eb000000 bl GetSystemTimeInUSec
000a8 e1580001 cmp r8, r1
000ac 3a000046 bcc |$L15541|
000b0 8a000001 bhi |$L15544|
000b4 e1550000 cmp r5, r0
000b8 3a000043 bcc |$L15541|
000bc |$L15544|
000bc e5943000 ldr r3, [r4]
000c0 e3130004 tst r3, #4
000c4 1afffff5 bne |$L15525|
; 276 : return bRet;
; 277 : }
; 278 :
; 279 : //
; 280 : // Send the Chip Read command.
; 281 : //
; 282 : *SPI_DR = SPIEE_READ_LOW;
; 283 :
; 284 : //
; 285 : // Send the three byte address.
; 286 : //
; 287 : *SPI_DR = (ulAddress >> 16) & 0xFF;
000c8 e1a03409 mov r3, r9, lsl #8
000cc e3a01003 mov r1, #3
000d0 e1a03c23 mov r3, r3, lsr #24
; 288 : *SPI_DR = (ulAddress >> 8) & 0xFF;
000d4 e1a02809 mov r2, r9, lsl #16
000d8 e5871000 str r1, [r7]
000dc e5873000 str r3, [r7]
000e0 e1a03c22 mov r3, r2, lsr #24
000e4 e5873000 str r3, [r7]
; 289 : *SPI_DR = ulAddress & 0xFF;
000e8 e20930ff and r3, r9, #0xFF
000ec e5873000 str r3, [r7]
; 290 :
; 291 : //
; 292 : // Wait until we send 3 bytes.
; 293 : //
; 294 : ulCount = 0;
000f0 e3a05000 mov r5, #0
; 295 : ullStart = GetSystemTimeInUSec();
000f4 eb000000 bl GetSystemTimeInUSec
; 296 : ullMax = ullStart + SPI_MINTIME + 3 * SPI_BYTETIME;
000f8 e29080e6 adds r8, r0, #0xE6
000fc e2a19000 adc r9, r1, #0
00100 |$L15574|
; 297 :
; 298 : do
; 299 : {
; 300 : //
; 301 : // Check to see if there are bytes to receive.
; 302 : //
; 303 : if(*SPI_SR & SPISR_RNE)
00100 e5943000 ldr r3, [r4]
00104 e3a02000 mov r2, #0
00108 e3130004 tst r3, #4
; 304 : {
; 305 : ulTemp = *SPI_DR;
0010c 15973000 ldrne r3, [r7]
; 306 : ulCount++;
00110 12855001 addne r5, r5, #1
00114 158d3000 strne r3, [sp]
; 307 : }
; 308 :
; 309 : //
; 310 : // Check to see if we can transmit data so that we can receive.
; 311 : //
; 312 : if(ulTransmitCount <ulLength && (*SPI_SR & SPISR_TNF))
00118 e156000a cmp r6, r10
0011c 2a000003 bcs |$L15313|
00120 e5943000 ldr r3, [r4]
00124 e3130002 tst r3, #2
; 313 : {
; 314 : *SPI_DR = 0;
00128 15872000 strne r2, [r7]
; 315 : ulTransmitCount++;
0012c 12866001 addne r6, r6, #1
00130 |$L15313|
; 316 : }
; 317 :
; 318 : //
; 319 : // Have a timeout so the system does not get stuck.
; 320 : //
; 321 : ullCurrent = GetSystemTimeInUSec();
00130 eb000000 bl GetSystemTimeInUSec
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -