📄 i2cint.lst
字号:
118: I2CONCLR = 0x28;
00000364 E3A01028 MOV R1,#0x28
00000368 E5100000 LDR R0,=0xE001C018
0000036C E5C01000 STRB R1,[R0,#0x0]
119: I2C_end = 1;
00000370 E3A01001 MOV R1,#0x1
00000374 E5100000 LDR R0,=I2C_end ; I2C_end
00000378 E5C01000 STRB R1,[R0,#0x0] ; I2C_end
120: break;
0000037C EA000005 B L_1 ; Targ=0x398
122: case 0x48:
00000380 L_11:
123: I2CONCLR = 0x28; // 总线进入不可寻址从模式
00000380 E3A01028 MOV R1,#0x28
00000384 E5100000 LDR R0,=0xE001C018
00000388 E5C01000 STRB R1,[R0,#0x0]
124: I2C_end = 0xFF;
0000038C E3A010FF MOV R1,#0xFF
00000390 E5100000 LDR R0,=I2C_end ; I2C_end
00000394 E5C01000 STRB R1,[R0,#0x0] ; I2C_end
129: }
00000398 L_1:
132: VICVectAddr = 0x00; // 中断处理结束
00000398 E3A01000 MOV R1,#0x0
0000039C E5100000 LDR R0,=0xFFFFF030
000003A0 E5801000 STR R1,[R0,#0x0]
000003A4 ; SCOPE-END
133: }
000003A4 E8BD000F LDMIA R13!,{R0-R3}
000003A8 E25EF004 SUBS R15,R14,#0x0004
000003AC ENDP ; 'IRQ_I2C?A'
*** CODE SEGMENT '?PR?ISendByte?T?I2CINT':
143: uint8 ISendByte(uint8 sla, uint8 dat)
00000000 B402 PUSH {R1}
00000002 1C02 MOV R2,R0 ; sla
00000004 ---- Variable 'sla' assigned to Register 'R2' ----
145: I2C_sla = sla; // 写操作的器件地址
00000004 1C11 MOV R1,R2 ; sla
00000006 4800 LDR R0,=I2C_sla ; I2C_sla
00000008 7001 STRB R1,[R0,#0x0] ; I2C_sla
146: I2C_buf = &dat; // 待发送的数据
0000000A A900 ADD R1,R13,#0x0
0000000C 4800 LDR R0,=I2C_buf ; I2C_buf
0000000E 6001 STR R1,[R0,#0x0] ; I2C_buf
147: I2C_num = 1; // 发送1字节数据
00000010 2101 MOV R1,#0x1
00000012 4800 LDR R0,=I2C_num ; I2C_num
00000014 7001 STRB R1,[R0,#0x0] ; I2C_num
148: I2C_suba_en = 0; // 无子地址
00000016 2100 MOV R1,#0x0
00000018 4800 LDR R0,=I2C_suba_en ; I2C_suba_en
0000001A 7001 STRB R1,[R0,#0x0] ; I2C_suba_en
149: I2C_end = 0;
0000001C 2100 MOV R1,#0x0
0000001E 4800 LDR R0,=I2C_end ; I2C_end
ARM COMPILER V2.40a, I2CINT 19/07/07 01:23:00 PAGE 11
00000020 7001 STRB R1,[R0,#0x0] ; I2C_end
151: I2CONCLR = 0x2C;
00000022 212C MOV R1,#0x2C
00000024 4800 LDR R0,=0xE001C018
00000026 7001 STRB R1,[R0,#0x0]
152: I2CONSET = 0x60; // 设置为主机,并启动总线
00000028 2160 MOV R1,#0x60
0000002A 4800 LDR R0,=0xE001C000
0000002C 7001 STRB R1,[R0,#0x0]
154: while(0==I2C_end);
0000002E L_29:
0000002E 4800 LDR R0,=I2C_end ; I2C_end
00000030 7800 LDRB R0,[R0,#0x0] ; I2C_end
00000032 2800 CMP R0,#0x0
00000034 D0FB BEQ L_29 ; T=0x0000002E
155: if(1==I2C_end) return(1);
00000036 4800 LDR R0,=I2C_end ; I2C_end
00000038 7800 LDRB R0,[R0,#0x0] ; I2C_end
0000003A 2801 CMP R0,#0x1
0000003C D101 BNE L_33 ; T=0x00000042
0000003E 2001 MOV R0,#0x1
00000040 E000 B L_34 ; T=0x00000044
00000042 L_33:
156: else return(0);
00000042 2000 MOV R0,#0x0
157: }
00000044 L_34:
00000044 B001 ADD R13,#0x4
00000046 4770 BX R14
00000048 ENDP ; 'ISendByte?T'
*** CODE SEGMENT '?PR?ISendStr?T?I2CINT':
169: uint8 ISendStr(uint8 sla, uint8 suba, uint8 *s, uint8 no)
00000000 B430 PUSH {R4-R5}
00000002 ---- Variable 'no' assigned to Register 'R3' ----
00000002 ---- Variable 's' assigned to Register 'R2' ----
00000002 1C0C MOV R4,R1 ; suba
00000004 ---- Variable 'suba' assigned to Register 'R4' ----
00000004 1C05 MOV R5,R0 ; sla
00000006 ---- Variable 'sla' assigned to Register 'R5' ----
171: I2C_sla = sla; // 写操作的器件地址
00000006 1C29 MOV R1,R5 ; sla
00000008 4800 LDR R0,=I2C_sla ; I2C_sla
0000000A 7001 STRB R1,[R0,#0x0] ; I2C_sla
172: I2C_suba = suba; // 子地址
0000000C 1C21 MOV R1,R4 ; suba
0000000E 4800 LDR R0,=I2C_suba ; I2C_suba
00000010 7001 STRB R1,[R0,#0x0] ; I2C_suba
173: I2C_buf = s;
00000012 1C11 MOV R1,R2 ; s
00000014 4800 LDR R0,=I2C_buf ; I2C_buf
00000016 6001 STR R1,[R0,#0x0] ; I2C_buf
174: I2C_num = no;
00000018 1C19 MOV R1,R3 ; no
0000001A 4800 LDR R0,=I2C_num ; I2C_num
0000001C 7001 STRB R1,[R0,#0x0] ; I2C_num
175: I2C_suba_en = 2; // 有子地址写
0000001E 2102 MOV R1,#0x2
00000020 4800 LDR R0,=I2C_suba_en ; I2C_suba_en
00000022 7001 STRB R1,[R0,#0x0] ; I2C_suba_en
176: I2C_end = 0;
00000024 2100 MOV R1,#0x0
00000026 4800 LDR R0,=I2C_end ; I2C_end
00000028 7001 STRB R1,[R0,#0x0] ; I2C_end
178: I2CONCLR = 0x2C;
0000002A 212C MOV R1,#0x2C
0000002C 4800 LDR R0,=0xE001C018
ARM COMPILER V2.40a, I2CINT 19/07/07 01:23:00 PAGE 12
0000002E 7001 STRB R1,[R0,#0x0]
179: I2CONSET = 0x60; // 设置为主机,并启动总线
00000030 2160 MOV R1,#0x60
00000032 4800 LDR R0,=0xE001C000
00000034 7001 STRB R1,[R0,#0x0]
181: while(0==I2C_end);
00000036 L_36:
00000036 4800 LDR R0,=I2C_end ; I2C_end
00000038 7800 LDRB R0,[R0,#0x0] ; I2C_end
0000003A 2800 CMP R0,#0x0
0000003C D0FB BEQ L_36 ; T=0x00000036
182: if(1==I2C_end) return(1);
0000003E 4800 LDR R0,=I2C_end ; I2C_end
00000040 7800 LDRB R0,[R0,#0x0] ; I2C_end
00000042 2801 CMP R0,#0x1
00000044 D101 BNE L_40 ; T=0x0000004A
00000046 2001 MOV R0,#0x1
00000048 E000 B L_41 ; T=0x0000004C
0000004A L_40:
183: else return(0);
0000004A 2000 MOV R0,#0x0
184: }
0000004C L_41:
0000004C BC30 POP {R4-R5}
0000004E 4770 BX R14
00000050 ENDP ; 'ISendStr?T'
*** CODE SEGMENT '?PR?IRcvByte?T?I2CINT':
196: uint8 IRcvByte(uint8 sla, uint8 *dat)
00000000 1C0A MOV R2,R1 ; dat
00000002 ---- Variable 'dat' assigned to Register 'R2' ----
00000002 1C01 MOV R1,R0 ; sla
00000004 ---- Variable 'sla' assigned to Register 'R1' ----
198: I2C_sla = sla+1; // 读操作的器件地址
00000004 1C08 MOV R0,R1 ; sla
00000006 0601 LSL R1,R0,#0x18 ; sla
00000008 0E09 LSR R1,R1,#0x18
0000000A 3101 ADD R1,#0x1
0000000C 4800 LDR R0,=I2C_sla ; I2C_sla
0000000E 7001 STRB R1,[R0,#0x0] ; I2C_sla
199: I2C_buf = dat;
00000010 1C11 MOV R1,R2 ; dat
00000012 4800 LDR R0,=I2C_buf ; I2C_buf
00000014 6001 STR R1,[R0,#0x0] ; I2C_buf
200: I2C_num = 1;
00000016 2101 MOV R1,#0x1
00000018 4800 LDR R0,=I2C_num ; I2C_num
0000001A 7001 STRB R1,[R0,#0x0] ; I2C_num
201: I2C_suba_en = 0; // 无子地址
0000001C 2100 MOV R1,#0x0
0000001E 4800 LDR R0,=I2C_suba_en ; I2C_suba_en
00000020 7001 STRB R1,[R0,#0x0] ; I2C_suba_en
202: I2C_end = 0;
00000022 2100 MOV R1,#0x0
00000024 4800 LDR R0,=I2C_end ; I2C_end
00000026 7001 STRB R1,[R0,#0x0] ; I2C_end
204: I2CONCLR = 0x2C;
00000028 212C MOV R1,#0x2C
0000002A 4800 LDR R0,=0xE001C018
0000002C 7001 STRB R1,[R0,#0x0]
205: I2CONSET = 0x60; // 设置为主机,并启动总线
0000002E 2160 MOV R1,#0x60
00000030 4800 LDR R0,=0xE001C000
00000032 7001 STRB R1,[R0,#0x0]
207: while(0==I2C_end);
00000034 L_43:
00000034 4800 LDR R0,=I2C_end ; I2C_end
ARM COMPILER V2.40a, I2CINT 19/07/07 01:23:00 PAGE 13
00000036 7800 LDRB R0,[R0,#0x0] ; I2C_end
00000038 2800 CMP R0,#0x0
0000003A D0FB BEQ L_43 ; T=0x00000034
208: if(1==I2C_end) return(1);
0000003C 4800 LDR R0,=I2C_end ; I2C_end
0000003E 7800 LDRB R0,[R0,#0x0] ; I2C_end
00000040 2801 CMP R0,#0x1
00000042 D101 BNE L_47 ; T=0x00000048
00000044 2001 MOV R0,#0x1
00000046 E000 B L_48 ; T=0x0000004A
00000048 L_47:
209: else return(0);
00000048 2000 MOV R0,#0x0
210: }
0000004A L_48:
0000004A 4770 BX R14
0000004C ENDP ; 'IRcvByte?T'
*** CODE SEGMENT '?PR?IRcvStr?T?I2CINT':
224: uint8 IRcvStr(uint8 sla, uint8 suba, uint8 *s, uint8 no)
00000000 B410 PUSH {R4}
00000002 ---- Variable 'no' assigned to Register 'R3' ----
00000002 ---- Variable 's' assigned to Register 'R2' ----
00000002 1C0C MOV R4,R1 ; suba
00000004 ---- Variable 'suba' assigned to Register 'R4' ----
00000004 1C01 MOV R1,R0 ; sla
00000006 ---- Variable 'sla' assigned to Register 'R1' ----
225: { if(0==no) return(0);
00000006 1C18 MOV R0,R3 ; no
00000008 0600 LSL R0,R0,#0x18 ; no
0000000A 0E00 LSR R0,R0,#0x18
0000000C 2800 CMP R0,#0x0
0000000E D101 BNE L_50 ; T=0x00000014
00000010 2000 MOV R0,#0x0
00000012 E025 B L_51 ; T=0x00000060
00000014 L_50:
228: I2C_sla = sla+1; // 读操作的器件地址
00000014 1C08 MOV R0,R1 ; sla
00000016 0601 LSL R1,R0,#0x18 ; sla
00000018 0E09 LSR R1,R1,#0x18
0000001A 3101 ADD R1,#0x1
0000001C 4800 LDR R0,=I2C_sla ; I2C_sla
0000001E 7001 STRB R1,[R0,#0x0] ; I2C_sla
229: I2C_suba = suba;
00000020 1C21 MOV R1,R4 ; suba
00000022 4800 LDR R0,=I2C_suba ; I2C_suba
00000024 7001 STRB R1,[R0,#0x0] ; I2C_suba
230: I2C_buf = s;
00000026 1C11 MOV R1,R2 ; s
00000028 4800 LDR R0,=I2C_buf ; I2C_buf
0000002A 6001 STR R1,[R0,#0x0] ; I2C_buf
231: I2C_num = no;
0000002C 1C19 MOV R1,R3 ; no
0000002E 4800 LDR R0,=I2C_num ; I2C_num
00000030 7001 STRB R1,[R0,#0x0] ; I2C_num
232: I2C_suba_en = 1; // 有子地址读
00000032 2101 MOV R1,#0x1
00000034 4800 LDR R0,=I2C_suba_en ; I2C_suba_en
00000036 7001 STRB R1,[R0,#0x0] ; I2C_suba_en
233: I2C_end = 0;
00000038 2100 MOV R1,#0x0
0000003A 4800 LDR R0,=I2C_end ; I2C_end
0000003C 7001 STRB R1,[R0,#0x0] ; I2C_end
235: I2CONCLR = 0x2C;
0000003E 212C MOV R1,#0x2C
00000040 4800 LDR R0,=0xE001C018
00000042 7001 STRB R1,[R0,#0x0]
ARM COMPILER V2.40a, I2CINT 19/07/07 01:23:00 PAGE 14
236: I2CONSET = 0x60; // 设置为主机,并启动总线
00000044 2160 MOV R1,#0x60
00000046 4800 LDR R0,=0xE001C000
00000048 7001 STRB R1,[R0,#0x0]
238: while(0==I2C_end);
0000004A L_52:
0000004A 4800 LDR R0,=I2C_end ; I2C_end
0000004C 7800 LDRB R0,[R0,#0x0] ; I2C_end
0000004E 2800 CMP R0,#0x0
00000050 D0FB BEQ L_52 ; T=0x0000004A
239: if(1==I2C_end) return(1);
00000052 4800 LDR R0,=I2C_end ; I2C_end
00000054 7800 LDRB R0,[R0,#0x0] ; I2C_end
00000056 2801 CMP R0,#0x1
00000058 D101 BNE L_56 ; T=0x0000005E
0000005A 2001 MOV R0,#0x1
0000005C E000 B L_51 ; T=0x00000060
0000005E L_56:
240: else return(0);
0000005E 2000 MOV R0,#0x0
241: }
00000060 L_51:
00000060 BC10 POP {R4}
00000062 4770 BX R14
00000064 ENDP ; 'IRcvStr?T'
Module Information Static
----------------------------------
code size = ------
data size = 9
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 + -