📄 i2cint.lst
字号:
0000001C 0A00002C BEQ L_5 ; Targ=0xD4
00000020 E3500020 CMP R0,#0x0020 ; sta
00000024 0A000094 BEQ L_9 ; Targ=0x27C
00000028 E3500028 CMP R0,#0x0028 ; sta
0000002C 0A000063 BEQ L_7 ; Targ=0x1C0
00000030 E3500030 CMP R0,#0x0030 ; sta
00000034 0A000090 BEQ L_9 ; Targ=0x27C
00000038 E3500038 CMP R0,#0x0038 ; sta
0000003C 0A00008E BEQ L_9 ; Targ=0x27C
00000040 E3500040 CMP R0,#0x0040 ; sta
00000044 0A000093 BEQ L_10 ; Targ=0x298
00000048 E3500048 CMP R0,#0x0048 ; sta
0000004C 0A0000CB BEQ L_11 ; Targ=0x380
00000050 E3500050 CMP R0,#0x0050 ; sta
00000054 0A00009E BEQ L_12 ; Targ=0x2D4
00000058 E3500058 CMP R0,#0x0058 ; sta
0000005C 0A0000B6 BEQ L_13 ; Targ=0x33C
00000060 E3500008 CMP R0,#0x0008 ; sta
00000064 1A0000CB BNE L_1 ; Targ=0x398
27: { case 0x08: // 己发送起始条件
00000068 L_2:
28: if(1==I2C_suba_en) I2DAT = I2C_sla&0xFE; // 指定子地址读时,先写入地址
ARM COMPILER V2.40a, I2CINT 19/07/07 01:23:00 PAGE 6
00000068 E5100000 LDR R0,=I2C_suba_en ; I2C_suba_en
0000006C E5D00000 LDRB R0,[R0,#0x0] ; I2C_suba_en
00000070 E3500001 CMP R0,#0x0001
00000074 1A000006 BNE L_14 ; Targ=0x94
00000078 E5100000 LDR R0,=I2C_sla ; I2C_sla
0000007C E5D00000 LDRB R0,[R0,#0x0] ; I2C_sla
00000080 E1A01000 MOV R1,R0
00000084 E20110FE AND R1,R1,#0x00FE
00000088 E5100000 LDR R0,=0xE001C008
0000008C E5C01000 STRB R1,[R0,#0x0]
00000090 EA000003 B L_15 ; Targ=0xA4
00000094 L_14:
29: else I2DAT = I2C_sla; // 否则直接发送从机地址
00000094 E5100000 LDR R0,=I2C_sla ; I2C_sla
00000098 E5D01000 LDRB R1,[R0,#0x0] ; I2C_sla
0000009C E5100000 LDR R0,=0xE001C008
000000A0 E5C01000 STRB R1,[R0,#0x0]
000000A4 L_15:
30: I2CONCLR = 0x28; // SI=0
000000A4 E3A01028 MOV R1,#0x28
000000A8 E5100000 LDR R0,=0xE001C018
000000AC E5C01000 STRB R1,[R0,#0x0]
31: break;
000000B0 EA0000B8 B L_1 ; Targ=0x398
33: case 0x10:
000000B4 L_4:
34: I2DAT = I2C_sla; // 重启动总线后,发送从地址
000000B4 E5100000 LDR R0,=I2C_sla ; I2C_sla
000000B8 E5D01000 LDRB R1,[R0,#0x0] ; I2C_sla
000000BC E5100000 LDR R0,=0xE001C008
000000C0 E5C01000 STRB R1,[R0,#0x0]
35: I2CONCLR = 0x28; // SI=0
000000C4 E3A01028 MOV R1,#0x28
000000C8 E5100000 LDR R0,=0xE001C018
000000CC E5C01000 STRB R1,[R0,#0x0]
36: break;
000000D0 EA0000B0 B L_1 ; Targ=0x398
38: case 0x18: // 已发送SLA+W,并已接收应答
000000D4 L_5:
39: if(0==I2C_suba_en) // 无子地址,则直接发送数据
000000D4 E5100000 LDR R0,=I2C_suba_en ; I2C_suba_en
000000D8 E5D00000 LDRB R0,[R0,#0x0] ; I2C_suba_en
000000DC E3500000 CMP R0,#0x0000
000000E0 1A00001C BNE L_16 ; Targ=0x158
40: { if(I2C_num>0)
000000E4 E5100000 LDR R0,=I2C_num ; I2C_num
000000E8 E5D00000 LDRB R0,[R0,#0x0] ; I2C_num
000000EC E3500000 CMP R0,#0x0000
000000F0 DA00000E BLE L_17 ; Targ=0x130
41: { I2DAT = *I2C_buf++;
000000F4 E5101000 LDR R1,=I2C_buf ; I2C_buf
000000F8 E5910000 LDR R0,[R1,#0x0] ; I2C_buf
000000FC E2802001 ADD R2,R0,#0x0001
00000100 E5812000 STR R2,[R1,#0x0] ; I2C_buf
00000104 E5D01000 LDRB R1,[R0,#0x0]
00000108 E5100000 LDR R0,=0xE001C008
0000010C E5C01000 STRB R1,[R0,#0x0]
42: I2CONCLR = 0x28;
00000110 E3A01028 MOV R1,#0x28
00000114 E5100000 LDR R0,=0xE001C018
00000118 E5C01000 STRB R1,[R0,#0x0]
43: I2C_num--;
0000011C E5100000 LDR R0,=I2C_num ; I2C_num
00000120 E5D01000 LDRB R1,[R0,#0x0] ; I2C_num
00000124 E2411001 SUB R1,R1,#0x0001
00000128 E5C01000 STRB R1,[R0,#0x0] ; I2C_num
ARM COMPILER V2.40a, I2CINT 19/07/07 01:23:00 PAGE 7
44: }
0000012C EA000099 B L_1 ; Targ=0x398
00000130 L_17:
46: { I2CONSET = 0x10; // 无数据发送,结束总线
00000130 E3A01010 MOV R1,#0x10
00000134 E5100000 LDR R0,=0xE001C000
00000138 E5C01000 STRB R1,[R0,#0x0]
47: I2CONCLR = 0x28;
0000013C E3A01028 MOV R1,#0x28
00000140 E5100000 LDR R0,=0xE001C018
00000144 E5C01000 STRB R1,[R0,#0x0]
48: I2C_end = 1; // 设置总线操作结束标志
00000148 E3A01001 MOV R1,#0x1
0000014C E5100000 LDR R0,=I2C_end ; I2C_end
00000150 E5C01000 STRB R1,[R0,#0x0] ; I2C_end
50: break;
00000154 EA00008F B L_1 ; Targ=0x398
51: }
00000158 L_16:
52: if(1==I2C_suba_en) // 发送子地址
00000158 E5100000 LDR R0,=I2C_suba_en ; I2C_suba_en
0000015C E5D00000 LDRB R0,[R0,#0x0] ; I2C_suba_en
00000160 E3500001 CMP R0,#0x0001
00000164 1A000006 BNE L_19 ; Targ=0x184
53: { I2DAT = I2C_suba;
00000168 E5100000 LDR R0,=I2C_suba ; I2C_suba
0000016C E5D01000 LDRB R1,[R0,#0x0] ; I2C_suba
00000170 E5100000 LDR R0,=0xE001C008
00000174 E5C01000 STRB R1,[R0,#0x0]
54: I2CONCLR = 0x28;
00000178 E3A01028 MOV R1,#0x28
0000017C E5100000 LDR R0,=0xE001C018
00000180 E5C01000 STRB R1,[R0,#0x0]
55: }
00000184 L_19:
56: if(2==I2C_suba_en)
00000184 E5100000 LDR R0,=I2C_suba_en ; I2C_suba_en
00000188 E5D00000 LDRB R0,[R0,#0x0] ; I2C_suba_en
0000018C E3500002 CMP R0,#0x0002
00000190 1A000080 BNE L_1 ; Targ=0x398
57: { I2DAT = I2C_suba;
00000194 E5100000 LDR R0,=I2C_suba ; I2C_suba
00000198 E5D01000 LDRB R1,[R0,#0x0] ; I2C_suba
0000019C E5100000 LDR R0,=0xE001C008
000001A0 E5C01000 STRB R1,[R0,#0x0]
58: I2CONCLR = 0x28;
000001A4 E3A01028 MOV R1,#0x28
000001A8 E5100000 LDR R0,=0xE001C018
000001AC E5C01000 STRB R1,[R0,#0x0]
59: I2C_suba_en = 0; // 子地址己处理
000001B0 E3A01000 MOV R1,#0x0
000001B4 E5100000 LDR R0,=I2C_suba_en ; I2C_suba_en
000001B8 E5C01000 STRB R1,[R0,#0x0] ; I2C_suba_en
61: break;
000001BC EA000075 B L_1 ; Targ=0x398
63: case 0x28: // 已发送I2C数据,并接收到应答
000001C0 L_7:
64: if(0==I2C_suba_en) // 无子地址,则直接发送数据
000001C0 E5100000 LDR R0,=I2C_suba_en ; I2C_suba_en
000001C4 E5D00000 LDRB R0,[R0,#0x0] ; I2C_suba_en
000001C8 E3500000 CMP R0,#0x0000
000001CC 1A00001C BNE L_21 ; Targ=0x244
65: { if(I2C_num>0)
000001D0 E5100000 LDR R0,=I2C_num ; I2C_num
000001D4 E5D00000 LDRB R0,[R0,#0x0] ; I2C_num
000001D8 E3500000 CMP R0,#0x0000
ARM COMPILER V2.40a, I2CINT 19/07/07 01:23:00 PAGE 8
000001DC DA00000E BLE L_22 ; Targ=0x21C
66: { I2DAT = *I2C_buf++;
000001E0 E5101000 LDR R1,=I2C_buf ; I2C_buf
000001E4 E5910000 LDR R0,[R1,#0x0] ; I2C_buf
000001E8 E2802001 ADD R2,R0,#0x0001
000001EC E5812000 STR R2,[R1,#0x0] ; I2C_buf
000001F0 E5D01000 LDRB R1,[R0,#0x0]
000001F4 E5100000 LDR R0,=0xE001C008
000001F8 E5C01000 STRB R1,[R0,#0x0]
67: I2CONCLR = 0x28;
000001FC E3A01028 MOV R1,#0x28
00000200 E5100000 LDR R0,=0xE001C018
00000204 E5C01000 STRB R1,[R0,#0x0]
68: I2C_num--;
00000208 E5100000 LDR R0,=I2C_num ; I2C_num
0000020C E5D01000 LDRB R1,[R0,#0x0] ; I2C_num
00000210 E2411001 SUB R1,R1,#0x0001
00000214 E5C01000 STRB R1,[R0,#0x0] ; I2C_num
69: }
00000218 EA00005E B L_1 ; Targ=0x398
0000021C L_22:
71: { I2CONSET = 0x10; // 无数据发送,结束总线
0000021C E3A01010 MOV R1,#0x10
00000220 E5100000 LDR R0,=0xE001C000
00000224 E5C01000 STRB R1,[R0,#0x0]
72: I2CONCLR = 0x28;
00000228 E3A01028 MOV R1,#0x28
0000022C E5100000 LDR R0,=0xE001C018
00000230 E5C01000 STRB R1,[R0,#0x0]
73: I2C_end = 1;
00000234 E3A01001 MOV R1,#0x1
00000238 E5100000 LDR R0,=I2C_end ; I2C_end
0000023C E5C01000 STRB R1,[R0,#0x0] ; I2C_end
75: break;
00000240 EA000054 B L_1 ; Targ=0x398
76: }
00000244 L_21:
77: if(1==I2C_suba_en) // 若是指定地址读,则重新启动总线
00000244 E5100000 LDR R0,=I2C_suba_en ; I2C_suba_en
00000248 E5D00000 LDRB R0,[R0,#0x0] ; I2C_suba_en
0000024C E3500001 CMP R0,#0x0001
00000250 1A000050 BNE L_1 ; Targ=0x398
78: { I2CONSET = 0x20;
00000254 E3A01020 MOV R1,#0x20
00000258 E5100000 LDR R0,=0xE001C000
0000025C E5C01000 STRB R1,[R0,#0x0]
79: I2CONCLR = 0x08;
00000260 E3A01008 MOV R1,#0x8
00000264 E5100000 LDR R0,=0xE001C018
00000268 E5C01000 STRB R1,[R0,#0x0]
80: I2C_suba_en = 0; // 子地址己处理
0000026C E3A01000 MOV R1,#0x0
00000270 E5100000 LDR R0,=I2C_suba_en ; I2C_suba_en
00000274 E5C01000 STRB R1,[R0,#0x0] ; I2C_suba_en
82: break;
00000278 EA000046 B L_1 ; Targ=0x398
87: case 0x38:
0000027C L_9:
88: I2CONCLR = 0x28; // 总线进入不可寻址从模式
0000027C E3A01028 MOV R1,#0x28
00000280 E5100000 LDR R0,=0xE001C018
00000284 E5C01000 STRB R1,[R0,#0x0]
89: I2C_end = 0xFF; // 总线出错,设置标志
00000288 E3A010FF MOV R1,#0xFF
0000028C E5100000 LDR R0,=I2C_end ; I2C_end
00000290 E5C01000 STRB R1,[R0,#0x0] ; I2C_end
ARM COMPILER V2.40a, I2CINT 19/07/07 01:23:00 PAGE 9
90: break;
00000294 EA00003F B L_1 ; Targ=0x398
93: case 0x40: // 己发送SLA+R,并已接收到应答
00000298 L_10:
94: if(1==I2C_num) // 最后一字节,接收数据后发送非应答信号
00000298 E5100000 LDR R0,=I2C_num ; I2C_num
0000029C E5D00000 LDRB R0,[R0,#0x0] ; I2C_num
000002A0 E3500001 CMP R0,#0x0001
000002A4 1A000003 BNE L_25 ; Targ=0x2B8
95: { I2CONCLR = 0x2C; // AA=0,接收到数据后产生非应答
000002A8 E3A0102C MOV R1,#0x2C
000002AC E5100000 LDR R0,=0xE001C018
000002B0 E5C01000 STRB R1,[R0,#0x0]
96: }
000002B4 EA000037 B L_1 ; Targ=0x398
000002B8 L_25:
98: { I2CONSET = 0x04; // AA=1,接收到数据后产生应答
000002B8 E3A01004 MOV R1,#0x4
000002BC E5100000 LDR R0,=0xE001C000
000002C0 E5C01000 STRB R1,[R0,#0x0]
99: I2CONCLR = 0x28;
000002C4 E3A01028 MOV R1,#0x28
000002C8 E5100000 LDR R0,=0xE001C018
000002CC E5C01000 STRB R1,[R0,#0x0]
101: break;
000002D0 EA000030 B L_1 ; Targ=0x398
103: case 0x50:
000002D4 L_12:
104: *I2C_buf++ = I2DAT; // 读取数据
000002D4 E5100000 LDR R0,=0xE001C008
000002D8 E5D01000 LDRB R1,[R0,#0x0]
000002DC E5102000 LDR R2,=I2C_buf ; I2C_buf
000002E0 E5920000 LDR R0,[R2,#0x0] ; I2C_buf
000002E4 E2803001 ADD R3,R0,#0x0001
000002E8 E5823000 STR R3,[R2,#0x0] ; I2C_buf
000002EC E5C01000 STRB R1,[R0,#0x0]
105: I2C_num--;
000002F0 E5100000 LDR R0,=I2C_num ; I2C_num
000002F4 E5D01000 LDRB R1,[R0,#0x0] ; I2C_num
000002F8 E2411001 SUB R1,R1,#0x0001
000002FC E5C01000 STRB R1,[R0,#0x0] ; I2C_num
106: if(1==I2C_num)
00000300 E5100000 LDR R0,=I2C_num ; I2C_num
00000304 E5D00000 LDRB R0,[R0,#0x0] ; I2C_num
00000308 E3500001 CMP R0,#0x0001
0000030C 1A000003 BNE L_27 ; Targ=0x320
107: { I2CONCLR = 0x2C; // AA=0,接收到数据后产生非应答
00000310 E3A0102C MOV R1,#0x2C
00000314 E5100000 LDR R0,=0xE001C018
00000318 E5C01000 STRB R1,[R0,#0x0]
108: }
0000031C EA00001D B L_1 ; Targ=0x398
00000320 L_27:
110: { I2CONSET = 0x04; // AA=1,接收到数据后产生应答
00000320 E3A01004 MOV R1,#0x4
00000324 E5100000 LDR R0,=0xE001C000
00000328 E5C01000 STRB R1,[R0,#0x0]
111: I2CONCLR = 0x28;
0000032C E3A01028 MOV R1,#0x28
00000330 E5100000 LDR R0,=0xE001C018
00000334 E5C01000 STRB R1,[R0,#0x0]
113: break;
00000338 EA000016 B L_1 ; Targ=0x398
115: case 0x58:
0000033C L_13:
116: *I2C_buf++ = I2DAT; // 读取最后一字节数据
ARM COMPILER V2.40a, I2CINT 19/07/07 01:23:00 PAGE 10
0000033C E5100000 LDR R0,=0xE001C008
00000340 E5D01000 LDRB R1,[R0,#0x0]
00000344 E5102000 LDR R2,=I2C_buf ; I2C_buf
00000348 E5920000 LDR R0,[R2,#0x0] ; I2C_buf
0000034C E2803001 ADD R3,R0,#0x0001
00000350 E5823000 STR R3,[R2,#0x0] ; I2C_buf
00000354 E5C01000 STRB R1,[R0,#0x0]
117: I2CONSET = 0x10; // 结束总线
00000358 E3A01010 MOV R1,#0x10
0000035C E5100000 LDR R0,=0xE001C000
00000360 E5C01000 STRB R1,[R0,#0x0]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -