📄 lpc2000_spi.lst
字号:
0000000E 4B80 LDR R3,=0x200
00000010 F7FF BL sd_readSector?T ; T=0x0001 (1)
00000012 FFF6 BL sd_readSector?T ; T=0x0001 (2)
00000014 0600 LSL R0,R0,#0x18 ; sd_readSector?T
00000016 1600 ASR R0,R0,#0x18
146: }
00000018 BC08 POP {R3}
0000001A 4718 BX R3
0000001C ENDP ; 'if_readBuf?T'
*** CODE SEGMENT '?PR?if_writeBuf?T?lpc2000_spi':
149: esint8 if_writeBuf(hwInterface* file,euint32 address,euint8* buf)
00000000 B500 PUSH {LR}
00000002 1C13 MOV R3,R2 ; buf
00000004 ---- Variable 'buf' assigned to Register 'R3' ----
00000004 1C0A MOV R2,R1 ; address
00000006 ---- Variable 'address' assigned to Register 'R2' ----
00000006 1C01 MOV R1,R0 ; file
00000008 ---- Variable 'file' assigned to Register 'R1' ----
151: return(sd_writeSector(file,address, buf));
00000008 1C08 MOV R0,R1 ; file
0000000A 1C11 MOV R1,R2 ; address
0000000C 1C1A MOV R2,R3 ; buf
0000000E F7FF BL sd_writeSector?T ; T=0x0001 (1)
00000010 FFF7 BL sd_writeSector?T ; T=0x0001 (2)
00000012 0600 LSL R0,R0,#0x18 ; sd_writeSector?T
00000014 1600 ASR R0,R0,#0x18
152: }
00000016 BC08 POP {R3}
00000018 4718 BX R3
0000001A ENDP ; 'if_writeBuf?T'
*** CODE SEGMENT '?PR?if_setPos?T?lpc2000_spi':
157: return(0);
00000000 2000 MOV R0,#0x0
158: }
00000002 4770 BX R14
00000004 ENDP ; 'if_setPos?T'
*** CODE SEGMENT '?PR?my_if_spiSend?T?lpc2000_spi':
165: static euint8 my_if_spiSend(hwInterface *iface, euint8 outgoing)
00000000 1C0A MOV R2,R1 ; outgoing
00000002 ---- Variable 'outgoing' assigned to Register 'R2' ----
166: {
00000002 ; SCOPE-START
172: S0SPDR = outgoing;
00000002 1C11 MOV R1,R2 ; outgoing
00000004 4800 LDR R0,=0xE0020008
00000006 7001 STRB R1,[R0,#0x0]
173: while( !(S0SPSR & (1<<SPIF)) ) ;
00000008 L_8:
00000008 4800 LDR R0,=0xE0020004
0000000A 7800 LDRB R0,[R0,#0x0]
0000000C 2180 MOV R1,#0x80
0000000E 4208 TST R0,R1
00000010 D0FA BEQ L_8 ; T=0x00000008
174: incoming = S0SPDR;
00000012 4800 LDR R0,=0xE0020008
00000014 7801 LDRB R1,[R0,#0x0]
00000016 ---- Variable 'incoming' assigned to Register 'R1' ----
185: return(incoming);
ARM COMPILER V2.42, lpc2000_spi 27/03/06 10:45:51 PAGE 9
00000016 1C08 MOV R0,R1 ; incoming
00000018 0600 LSL R0,R0,#0x18 ; incoming
0000001A 0E00 LSR R0,R0,#0x18
0000001C ; SCOPE-END
186: }
0000001C 4770 BX R14
0000001E ENDP ; 'my_if_spiSend?T'
*** CODE SEGMENT '?PR?if_spiInit?T?lpc2000_spi':
189: void if_spiInit(hwInterface *iface)
00000000 B510 PUSH {R4,LR}
00000002 1C04 MOV R4,R0 ; iface
00000004 ---- Variable 'iface' assigned to Register 'R4' ----
190: {
00000004 ; SCOPE-START
194: SPI_IODIR |= (1<<SPI_SCK_PIN)|(1<<SPI_MOSI_PIN)|(1<<SPI_SS_PIN);
00000004 22D0 MOV R2,#0xD0
00000006 4800 LDR R0,=0xE0028008
00000008 6801 LDR R1,[R0,#0x0]
0000000A 4311 ORR R1,R2
0000000C 6001 STR R1,[R0,#0x0]
195: SPI_IODIR &= ~(1<<SPI_MISO_PIN);
0000000E 2220 MOV R2,#0x20
00000010 4800 LDR R0,=0xE0028008
00000012 6801 LDR R1,[R0,#0x0]
00000014 4391 BIC R1,R2
00000016 6001 STR R1,[R0,#0x0]
198: UNSELECT_CARD();
00000018 2180 MOV R1,#0x80
0000001A 4800 LDR R0,=0xE0028004
0000001C 6001 STR R1,[R0,#0x0]
201: SPI_PINSEL &= ~( (3<<SPI_SCK_FUNCBIT) | (3<<SPI_MISO_FUNCBIT) |
0000001E 4800 LDR R2,=0xFF00
00000020 4800 LDR R0,=0xE002C000
00000022 6801 LDR R1,[R0,#0x0]
00000024 4391 BIC R1,R2
00000026 6001 STR R1,[R0,#0x0]
205: DBG((TXT("spiInit for SPI(0)\n")));
00000028 4800 LDR R0,=??S_5 ; ??S_5
0000002A F7FF BL lpc2000_debug_printf?T ; T=0x0001 (1)
0000002C FFE9 BL lpc2000_debug_printf?T ; T=0x0001 (2)
206: SPI_PINSEL |= ( (1<<SPI_SCK_FUNCBIT) | (1<<SPI_MISO_FUNCBIT) |
0000002E 4800 LDR R2,=0x1500
00000030 4800 LDR R0,=0xE002C000
00000032 6801 LDR R1,[R0,#0x0]
00000034 4311 ORR R1,R2
00000036 6001 STR R1,[R0,#0x0]
209: S0SPCR = (1<<MSTR)|(0<<CPOL); // TODO: check CPOL
00000038 2120 MOV R1,#0x20
0000003A 4800 LDR R0,=0xE0020000
0000003C 7001 STRB R1,[R0,#0x0]
223: if_spiSetSpeed(254);
0000003E 20FE MOV R0,#0xFE
00000040 F7FF BL if_spiSetSpeed?T ; T=0x0001 (1)
00000042 FFDE BL if_spiSetSpeed?T ; T=0x0001 (2)
226: for(i=0;i<21;i++)
00000044 2300 MOV R3,#0x0
00000046 ---- Variable 'i' assigned to Register 'R3' ----
00000046 E006 B L_15 ; T=0x00000056
00000048 L_16:
227: my_if_spiSend(iface,0xff);
00000048 1C20 MOV R0,R4 ; iface
0000004A 21FF MOV R1,#0xFF
0000004C F7FF BL my_if_spiSend?T ; T=0x0001 (1)
0000004E FFD8 BL my_if_spiSend?T ; T=0x0001 (2)
00000050 3301 ADD R3,#0x1
00000052 061B LSL R3,R3,#0x18
ARM COMPILER V2.42, lpc2000_spi 27/03/06 10:45:51 PAGE 10
00000054 0E1B LSR R3,R3,#0x18
00000056 L_15:
00000056 1C18 MOV R0,R3 ; i
00000058 0600 LSL R0,R0,#0x18 ; i
0000005A 0E00 LSR R0,R0,#0x18
0000005C 2815 CMP R0,#0x15
0000005E DBF3 BLT L_16 ; T=0x00000048
00000060 ; SCOPE-END
243: }
00000060 BC10 POP {R4}
00000062 BC08 POP {R3}
00000064 4718 BX R3
00000066 ENDP ; 'if_spiInit?T'
*** CODE SEGMENT '?PR?if_spiSetSpeed?T?lpc2000_spi':
246: void if_spiSetSpeed(euint8 speed)
00000000 1C02 MOV R2,R0 ; speed
00000002 ---- Variable 'speed' assigned to Register 'R2' ----
248: speed &= 0xFE;
00000002 20FE MOV R0,#0xFE
00000004 4002 AND R2,R0
249: if ( speed < SPI_PRESCALE_MIN ) speed = SPI_PRESCALE_MIN ;
00000006 1C10 MOV R0,R2 ; speed
00000008 0600 LSL R0,R0,#0x18 ; speed
0000000A 0E00 LSR R0,R0,#0x18
0000000C 2808 CMP R0,#0x8
0000000E DA00 BGE L_18 ; T=0x00000012
00000010 2208 MOV R2,#0x8
00000012 L_18:
250: SPI_PRESCALE_REG = speed;
00000012 1C11 MOV R1,R2 ; speed
00000014 4800 LDR R0,=0xE002000C
00000016 7001 STRB R1,[R0,#0x0]
251: }
00000018 4770 BX R14
0000001A ENDP ; 'if_spiSetSpeed?T'
*** CODE SEGMENT '?PR?if_spiSend?T?lpc2000_spi':
255: euint8 if_spiSend(hwInterface *iface, euint8 outgoing)
00000000 1C0A MOV R2,R1 ; outgoing
00000002 ---- Variable 'outgoing' assigned to Register 'R2' ----
256: {
00000002 ; SCOPE-START
260: SELECT_CARD();
00000002 2180 MOV R1,#0x80
00000004 4800 LDR R0,=0xE002800C
00000006 6001 STR R1,[R0,#0x0]
261: S0SPDR = outgoing;
00000008 1C11 MOV R1,R2 ; outgoing
0000000A 4800 LDR R0,=0xE0020008
0000000C 7001 STRB R1,[R0,#0x0]
262: while( !(S0SPSR & (1<<SPIF)) ) ;
0000000E L_19:
0000000E 4800 LDR R0,=0xE0020004
00000010 7800 LDRB R0,[R0,#0x0]
00000012 2180 MOV R1,#0x80
00000014 4208 TST R0,R1
00000016 D0FA BEQ L_19 ; T=0x0000000E
263: incoming = S0SPDR;
00000018 4800 LDR R0,=0xE0020008
0000001A 7801 LDRB R1,[R0,#0x0]
0000001C ---- Variable 'incoming' assigned to Register 'R1' ----
264: UNSELECT_CARD();
0000001C 2280 MOV R2,#0x80
0000001E 4800 LDR R0,=0xE0028004
00000020 6002 STR R2,[R0,#0x0]
278: return(incoming);
00000022 1C08 MOV R0,R1 ; incoming
ARM COMPILER V2.42, lpc2000_spi 27/03/06 10:45:51 PAGE 11
00000024 0600 LSL R0,R0,#0x18 ; incoming
00000026 0E00 LSR R0,R0,#0x18
00000028 ; SCOPE-END
279: }
00000028 4770 BX R14
0000002A ENDP ; 'if_spiSend?T'
Module Information Static
----------------------------------
code size = ------
data size = ------
const size = 162
End of Module Information.
ARM COMPILATION COMPLETE. 5 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -