📄 i2c.lst
字号:
121: I20CONCLR = I2CONCLR_SIC;
0000022C E3A01008 MOV R1,#0x8
00000230 E5100000 LDR R0,=0xE001C018
00000234 E5801000 STR R1,[R0,#0x0]
122: break;
00000238 EA00002C B L_1 ; Targ=0x2F0
ARM COMPILER V2.53, i2c 27/07/06 14:45:57 PAGE 10
125: case 0x58:
0000023C L_13:
126: I2CMasterBuffer[3+RdIndex] = I20DAT;
0000023C E5100000 LDR R0,=0xE001C008
00000240 E5900000 LDR R0,[R0,#0x0]
00000244 E1A00C00 MOV R0,R0,LSL #24
00000248 E1A00C20 MOV R0,R0,LSR #24
0000024C E5101000 LDR R1,=RdIndex ; RdIndex
00000250 E5911000 LDR R1,[R1,#0x0] ; RdIndex
00000254 E2813003 ADD R3,R1,#0x0003
00000258 E5102000 LDR R2,=I2CMasterBuffer ; I2CMasterBuffer
0000025C E7C20003 STRB R0,[R2,+R3]
127: RdIndex++;
00000260 E5100000 LDR R0,=RdIndex ; RdIndex
00000264 E2811001 ADD R1,R1,#0x0001
00000268 E5801000 STR R1,[R0,#0x0] ; RdIndex
128: if ( RdIndex != I2CReadLength )
0000026C E5100000 LDR R0,=I2CReadLength ; I2CReadLength
00000270 E5901000 LDR R1,[R0,#0x0] ; I2CReadLength
00000274 E5100000 LDR R0,=RdIndex ; RdIndex
00000278 E5900000 LDR R0,[R0,#0x0] ; RdIndex
0000027C E1500001 CMP R0,R1
00000280 0A000003 BEQ L_24 ; Targ=0x294
130: I2CMasterState = DATA_ACK;
00000284 E3A01004 MOV R1,#0x4
00000288 E5100000 LDR R0,=I2CMasterState ; I2CMasterState
0000028C E5801000 STR R1,[R0,#0x0] ; I2CMasterState
131: }
00000290 EA000005 B L_25 ; Targ=0x2AC
00000294 L_24:
134: RdIndex = 0;
00000294 E3A01000 MOV R1,#0x0
00000298 E5100000 LDR R0,=RdIndex ; RdIndex
0000029C E5801000 STR R1,[R0,#0x0] ; RdIndex
135: I2CMasterState = DATA_NACK;
000002A0 E3A01005 MOV R1,#0x5
000002A4 E5100000 LDR R0,=I2CMasterState ; I2CMasterState
000002A8 E5801000 STR R1,[R0,#0x0] ; I2CMasterState
136: }
000002AC L_25:
137: I20CONSET = I2CONSET_AA; /* assert ACK after data is received */
000002AC E3A01004 MOV R1,#0x4
000002B0 E5100000 LDR R0,=0xE001C000
000002B4 E5801000 STR R1,[R0,#0x0]
138: I20CONCLR = I2CONCLR_SIC;
000002B8 E3A01008 MOV R1,#0x8
000002BC E5100000 LDR R0,=0xE001C018
000002C0 E5801000 STR R1,[R0,#0x0]
139: break;
000002C4 EA000009 B L_1 ; Targ=0x2F0
142: case 0x48:
000002C8 L_11:
143: I20CONCLR = I2CONCLR_SIC;
000002C8 E3A01008 MOV R1,#0x8
000002CC E5100000 LDR R0,=0xE001C018
000002D0 E5801000 STR R1,[R0,#0x0]
144: I2CMasterState = DATA_NACK;
000002D4 E3A01005 MOV R1,#0x5
000002D8 E5100000 LDR R0,=I2CMasterState ; I2CMasterState
000002DC E5801000 STR R1,[R0,#0x0] ; I2CMasterState
145: break;
000002E0 EA000002 B L_1 ; Targ=0x2F0
149: default:
000002E4 L_3:
150: I20CONCLR = I2CONCLR_SIC;
000002E4 E3A01008 MOV R1,#0x8
ARM COMPILER V2.53, i2c 27/07/06 14:45:57 PAGE 11
000002E8 E5100000 LDR R0,=0xE001C018
000002EC E5801000 STR R1,[R0,#0x0]
152: }
000002F0 L_1:
153: IDISABLE;
000002F0 E8BD4000 LDMFD R13!,{LR}
000002F4 E321F092 MSR CPSR_c,#0x92
000002F8 E8BD4000 LDMFD R13!,{LR}
000002FC E16FF00E MSR SPSR_cxsf,R14
154: VICVectAddr = 0; /* Acknowledge Interrupt */
00000300 E3A01000 MOV R1,#0x0
00000304 E5100000 LDR R0,=0xFFFFF030
00000308 E5801000 STR R1,[R0,#0x0]
0000030C ; SCOPE-END
155: }
0000030C E8BD400F LDMIA R13!,{R0-R3,LR}
00000310 E25EF004 SUBS R15,R14,#0x0004
00000314 ENDP ; 'I2C0MasterHandler?A'
*** CODE SEGMENT '?PR?I2CStart?T?i2c':
169: {
00000000 ; SCOPE-START
170: DWORD timeout = 0;
00000000 2100 MOV R1,#0x0
00000002 1C08 MOV R0,R1 ; timeout
00000004 ---- Variable 'timeout' assigned to Register 'R0' ----
171: DWORD returnValue = FALSE;
00000004 ---- Variable 'returnValue' assigned to Register 'R1' ----
174: I20CONSET = I2CONSET_STA; /* Set Start flag */
00000004 2320 MOV R3,#0x20
00000006 4800 LDR R2,=0xE001C000
00000008 6013 STR R3,[R2,#0x0]
177: while( 1 )
0000000A L_28:
179: if ( I2CMasterState == I2C_STARTED )
0000000A 4800 LDR R2,=I2CMasterState ; I2CMasterState
0000000C 6812 LDR R2,[R2,#0x0] ; I2CMasterState
0000000E 2A01 CMP R2,#0x1
00000010 D101 BNE L_30 ; T=0x00000016
181: returnValue = TRUE;
00000012 2101 MOV R1,#0x1
182: break;
00000014 E007 B L_27 ; T=0x00000026
183: }
00000016 L_30:
184: if ( timeout >= MAX_TIMEOUT )
00000016 1C02 MOV R2,R0 ; timeout
00000018 4800 LDR R3,=0xFFFFFF
0000001A 429A CMP R2,R3 ; timeout
0000001C D301 BCC L_31 ; T=0x00000022
186: returnValue = FALSE;
0000001E 2100 MOV R1,#0x0
187: break;
00000020 E001 B L_27 ; T=0x00000026
188: }
00000022 L_31:
189: timeout++;
00000022 3001 ADD R0,#0x1
190: }
00000024 E7F1 B L_28 ; T=0x0000000A
00000026 L_27:
191: return( returnValue );
00000026 1C08 MOV R0,R1 ; returnValue
00000028 ; SCOPE-END
192: }
00000028 4770 BX R14
0000002A ENDP ; 'I2CStart?T'
ARM COMPILER V2.53, i2c 27/07/06 14:45:57 PAGE 12
*** CODE SEGMENT '?PR?I2CStop?T?i2c':
206: I20CONSET = I2CONSET_STO; /* Set Stop flag */
00000000 2110 MOV R1,#0x10
00000002 4800 LDR R0,=0xE001C000
00000004 6001 STR R1,[R0,#0x0]
207: I20CONCLR = I2CONCLR_SIC; /* Clear SI flag */
00000006 2108 MOV R1,#0x8
00000008 4800 LDR R0,=0xE001C018
0000000A 6001 STR R1,[R0,#0x0]
210: while( I20CONSET & I2CONSET_STO );
0000000C L_33:
0000000C 4800 LDR R0,=0xE001C000
0000000E 6800 LDR R0,[R0,#0x0]
00000010 2110 MOV R1,#0x10
00000012 4208 TST R0,R1
00000014 D1FA BNE L_33 ; T=0x0000000C
211: return TRUE;
00000016 2001 MOV R0,#0x1
212: }
00000018 4770 BX R14
0000001A ENDP ; 'I2CStop?T'
*** CODE SEGMENT '?PR?I2CInit?T?i2c':
224: DWORD I2CInit( DWORD I2cMode )
00000000 B500 PUSH {LR}
00000002 1C01 MOV R1,R0 ; I2cMode
00000004 ---- Variable 'I2cMode' assigned to Register 'R1' ----
226: PINSEL0 = 0x50; /* set PIO0.2 and PIO0.3 to I2C0 SDA and SCK */
00000004 2250 MOV R2,#0x50
00000006 4800 LDR R0,=0xE002C000
00000008 6002 STR R2,[R0,#0x0]
227: IODIR0 = 0x0C; /* set port 0.2 and port 0.3 to output, high */
0000000A 220C MOV R2,#0xC
0000000C 4800 LDR R0,=0xE0028008
0000000E 6002 STR R2,[R0,#0x0]
228: IOSET0 = 0x0C;
00000010 4800 LDR R0,=0xE0028004
00000012 6002 STR R2,[R0,#0x0]
231: I20CONCLR = I2CONCLR_AAC | I2CONCLR_SIC | I2CONCLR_STAC | I2CONCLR_I2ENC;
00000014 226C MOV R2,#0x6C
00000016 4800 LDR R0,=0xE001C018
00000018 6002 STR R2,[R0,#0x0]
234: I20SCLL = I2SCLL_SCLL;
0000001A 2280 MOV R2,#0x80
0000001C 4800 LDR R0,=0xE001C014
0000001E 6002 STR R2,[R0,#0x0]
235: I20SCLH = I2SCLH_SCLH;
00000020 4800 LDR R0,=0xE001C010
00000022 6002 STR R2,[R0,#0x0]
236: if ( I2cMode == I2CSLAVE )
00000024 1C08 MOV R0,R1 ; I2cMode
00000026 2802 CMP R0,#0x2 ; I2cMode
00000028 D102 BNE L_38 ; T=0x00000030
238: I20ADR = SE95_ADDR;
0000002A 219E MOV R1,#0x9E
0000002C 4800 LDR R0,=0xE001C00C
0000002E 6001 STR R1,[R0,#0x0]
239: }
00000030 L_38:
242: if ( install_irq( I2C0_INT, (void *)I2C0MasterHandler ) == FALSE )
00000030 4900 LDR R1,=I2C0MasterHandler?A ; I2C0MasterHandler?A
00000032 2009 MOV R0,#0x9
00000034 F7FF BL install_irq?T ; T=0x0001 (1)
00000036 FFE4 BL install_irq?T ; T=0x0001 (2)
00000038 2800 CMP R0,#0x0 ; install_irq?T
0000003A D101 BNE L_39 ; T=0x00000040
244: return( FALSE );
ARM COMPILER V2.53, i2c 27/07/06 14:45:57 PAGE 13
0000003C 2000 MOV R0,#0x0
0000003E E003 B L_40 ; T=0x00000048
245: }
00000040 L_39:
246: I20CONSET = I2CONSET_I2EN;
00000040 2140 MOV R1,#0x40
00000042 4800 LDR R0,=0xE001C000
00000044 6001 STR R1,[R0,#0x0]
247: return( TRUE );
00000046 2001 MOV R0,#0x1
248: }
00000048 L_40:
00000048 BC08 POP {R3}
0000004A 4718 BX R3
0000004C ENDP ; 'I2CInit?T'
*** CODE SEGMENT '?PR?I2CEngine?T?i2c':
267: DWORD I2CEngine( void )
00000000 B510 PUSH {R4,LR}
269: I2CMasterState = I2C_IDLE;
00000002 2400 MOV R4,#0x0
00000004 4800 LDR R0,=I2CMasterState ; I2CMasterState
00000006 6004 STR R4,[R0,#0x0] ; I2CMasterState
270: RdIndex = 0;
00000008 4800 LDR R0,=RdIndex ; RdIndex
0000000A 6004 STR R4,[R0,#0x0] ; RdIndex
271: WrIndex = 0;
0000000C 4800 LDR R0,=WrIndex ; WrIndex
0000000E 6004 STR R4,[R0,#0x0] ; WrIndex
272: if ( I2CStart() != TRUE )
00000010 F7FF BL I2CStart?T ; T=0x0001 (1)
00000012 FFF6 BL I2CStart?T ; T=0x0001 (2)
00000014 2801 CMP R0,#0x1 ; I2CStart?T
00000016 D003 BEQ L_46 ; T=0x00000020
274: I2CStop();
00000018 F7FF BL I2CStop?T ; T=0x0001 (1)
0000001A FFF2 BL I2CStop?T ; T=0x0001 (2)
275: return ( FALSE );
0000001C 1C20 MOV R0,R4
0000001E E006 B L_42 ; T=0x0000002E
277: while ( 1 )
00000020 L_46:
00000020 L_45:
279: if ( I2CMasterState == DATA_NACK )
00000020 4800 LDR R0,=I2CMasterState ; I2CMasterState
00000022 6800 LDR R0,[R0,#0x0] ; I2CMasterState
00000024 2805 CMP R0,#0x5
00000026 D1FB BNE L_45 ; T=0x00000020
281: I2CStop();
00000028 F7FF BL I2CStop?T ; T=0x0001 (1)
0000002A FFEA BL I2CStop?T ; T=0x0001 (2)
285: return ( TRUE );
0000002C 2001 MOV R0,#0x1
286: }
0000002E L_42:
0000002E BC10 POP {R4}
00000030 BC08 POP {R3}
00000032 4718 BX R3
00000034 ENDP ; 'I2CEngine?T'
Module Information Static
----------------------------------
code size = ------
data size = 100
const size = ------
End of Module Information.
ARM COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -