📄 i2cint.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.0 [Build 942] for uVision
; commandline ArmCC [--debug -c --asm --interleave -oi2cint.o --device=DARMP --apcs=interwork -O0 -IC:\Keil\ARM\INC\Philips I2CINT.c]
ARM
AREA ||.text||, CODE, READONLY, ALIGN=2
IRQ_I2C PROC
;;;21 void __irq IRQ_I2C(void)
;;;22 {
000000 e92d0007 PUSH {r0-r2}
000004 e59f160c LDR r1,|L1.1560|
000008 e5d10004 LDRB r0,[r1,#4]
00000c e3100007 TST r0,#7
000010 1a0000ec BNE |L1.968|
000014 e1a011c0 ASR r1,r0,#3
000018 e351000c CMP r1,#0xc
00001c 308ff101 ADDCC pc,pc,r1,LSL #2
000020 ea0000e8 B |L1.968|
000024 ea0000e7 B |L1.968|
000028 ea000009 B |L1.84|
00002c ea00001b B |L1.160|
000030 ea000022 B |L1.192|
000034 ea000090 B |L1.636|
000038 ea00005d B |L1.436|
00003c ea000090 B |L1.644|
000040 ea000090 B |L1.648|
000044 ea000096 B |L1.676|
000048 ea0000d6 B |L1.936|
00004c ea0000a3 B |L1.736|
000050 ea0000c0 B |L1.856|
|L1.84|
000054 e1a00000 MOV r0,r0
000058 e59f15bc LDR r1,|L1.1564|
00005c e5d11000 LDRB r1,[r1,#0] ; I2C_suba_en
000060 e3510001 CMP r1,#1
000064 1a000005 BNE |L1.128|
000068 e59f15b0 LDR r1,|L1.1568|
00006c e5d11000 LDRB r1,[r1,#0] ; I2C_sla
000070 e20110fe AND r1,r1,#0xfe
000074 e59f259c LDR r2,|L1.1560|
000078 e5c21008 STRB r1,[r2,#8]
00007c ea000003 B |L1.144|
|L1.128|
000080 e59f1598 LDR r1,|L1.1568|
000084 e5d11000 LDRB r1,[r1,#0] ; I2C_sla
000088 e59f2588 LDR r2,|L1.1560|
00008c e5c21008 STRB r1,[r2,#8]
|L1.144|
000090 e3a01028 MOV r1,#0x28
000094 e59f257c LDR r2,|L1.1560|
000098 e5c21018 STRB r1,[r2,#0x18]
00009c ea0000cb B |L1.976|
|L1.160|
0000a0 e1a00000 MOV r0,r0
0000a4 e59f1574 LDR r1,|L1.1568|
0000a8 e5d11000 LDRB r1,[r1,#0] ; I2C_sla
0000ac e59f2564 LDR r2,|L1.1560|
0000b0 e5c21008 STRB r1,[r2,#8]
0000b4 e3a01028 MOV r1,#0x28
0000b8 e5c21018 STRB r1,[r2,#0x18]
0000bc ea0000c3 B |L1.976|
|L1.192|
0000c0 e1a00000 MOV r0,r0
0000c4 e59f1550 LDR r1,|L1.1564|
0000c8 e5d11000 LDRB r1,[r1,#0] ; I2C_suba_en
0000cc e3510000 CMP r1,#0
0000d0 1a00001f BNE |L1.340|
0000d4 e59f1548 LDR r1,|L1.1572|
0000d8 e5d11000 LDRB r1,[r1,#0] ; I2C_num
0000dc e3510000 CMP r1,#0
0000e0 da000012 BLE |L1.304|
0000e4 e59f153c LDR r1,|L1.1576|
0000e8 e5911000 LDR r1,[r1,#0] ; I2C_buf
0000ec e5d11000 LDRB r1,[r1,#0]
0000f0 e59f2520 LDR r2,|L1.1560|
0000f4 e5c21008 STRB r1,[r2,#8]
0000f8 e59f1528 LDR r1,|L1.1576|
0000fc e5911000 LDR r1,[r1,#0] ; I2C_buf
000100 e2811001 ADD r1,r1,#1
000104 e59f251c LDR r2,|L1.1576|
000108 e5821000 STR r1,[r2,#0] ; I2C_buf
00010c e3a01028 MOV r1,#0x28
000110 e59f2500 LDR r2,|L1.1560|
000114 e5c21018 STRB r1,[r2,#0x18]
000118 e59f1504 LDR r1,|L1.1572|
00011c e5d11000 LDRB r1,[r1,#0] ; I2C_num
000120 e2411001 SUB r1,r1,#1
000124 e59f24f8 LDR r2,|L1.1572|
000128 e5c21000 STRB r1,[r2,#0] ; I2C_num
00012c ea000007 B |L1.336|
|L1.304|
000130 e3a01010 MOV r1,#0x10
000134 e59f24dc LDR r2,|L1.1560|
000138 e5c21000 STRB r1,[r2,#0]
00013c e3a01028 MOV r1,#0x28
000140 e5c21018 STRB r1,[r2,#0x18]
000144 e3a01001 MOV r1,#1
000148 e59f24dc LDR r2,|L1.1580|
00014c e5c21000 STRB r1,[r2,#0] ; I2C_end
|L1.336|
000150 ea00009e B |L1.976|
|L1.340|
000154 e59f14c0 LDR r1,|L1.1564|
000158 e5d11000 LDRB r1,[r1,#0] ; I2C_suba_en
00015c e3510001 CMP r1,#1
000160 1a000005 BNE |L1.380|
000164 e59f14c4 LDR r1,|L1.1584|
000168 e5d11000 LDRB r1,[r1,#0] ; I2C_suba
00016c e59f24a4 LDR r2,|L1.1560|
000170 e5c21008 STRB r1,[r2,#8]
000174 e3a01028 MOV r1,#0x28
000178 e5c21018 STRB r1,[r2,#0x18]
|L1.380|
00017c e59f1498 LDR r1,|L1.1564|
000180 e5d11000 LDRB r1,[r1,#0] ; I2C_suba_en
000184 e3510002 CMP r1,#2
000188 1a000008 BNE |L1.432|
00018c e59f149c LDR r1,|L1.1584|
000190 e5d11000 LDRB r1,[r1,#0] ; I2C_suba
000194 e59f247c LDR r2,|L1.1560|
000198 e5c21008 STRB r1,[r2,#8]
00019c e3a01028 MOV r1,#0x28
0001a0 e5c21018 STRB r1,[r2,#0x18]
0001a4 e3a01000 MOV r1,#0
0001a8 e59f246c LDR r2,|L1.1564|
0001ac e5c21000 STRB r1,[r2,#0] ; I2C_suba_en
|L1.432|
0001b0 ea000086 B |L1.976|
|L1.436|
0001b4 e1a00000 MOV r0,r0
0001b8 e59f145c LDR r1,|L1.1564|
0001bc e5d11000 LDRB r1,[r1,#0] ; I2C_suba_en
0001c0 e3510000 CMP r1,#0
0001c4 1a00001f BNE |L1.584|
0001c8 e59f1454 LDR r1,|L1.1572|
0001cc e5d11000 LDRB r1,[r1,#0] ; I2C_num
0001d0 e3510000 CMP r1,#0
0001d4 da000012 BLE |L1.548|
0001d8 e59f1448 LDR r1,|L1.1576|
0001dc e5911000 LDR r1,[r1,#0] ; I2C_buf
0001e0 e5d11000 LDRB r1,[r1,#0]
0001e4 e59f242c LDR r2,|L1.1560|
0001e8 e5c21008 STRB r1,[r2,#8]
0001ec e59f1434 LDR r1,|L1.1576|
0001f0 e5911000 LDR r1,[r1,#0] ; I2C_buf
0001f4 e2811001 ADD r1,r1,#1
0001f8 e59f2428 LDR r2,|L1.1576|
0001fc e5821000 STR r1,[r2,#0] ; I2C_buf
000200 e3a01028 MOV r1,#0x28
000204 e59f240c LDR r2,|L1.1560|
000208 e5c21018 STRB r1,[r2,#0x18]
00020c e59f1410 LDR r1,|L1.1572|
000210 e5d11000 LDRB r1,[r1,#0] ; I2C_num
000214 e2411001 SUB r1,r1,#1
000218 e59f2404 LDR r2,|L1.1572|
00021c e5c21000 STRB r1,[r2,#0] ; I2C_num
000220 ea000007 B |L1.580|
|L1.548|
000224 e3a01010 MOV r1,#0x10
000228 e59f23e8 LDR r2,|L1.1560|
00022c e5c21000 STRB r1,[r2,#0]
000230 e3a01028 MOV r1,#0x28
000234 e5c21018 STRB r1,[r2,#0x18]
000238 e3a01001 MOV r1,#1
00023c e59f23e8 LDR r2,|L1.1580|
000240 e5c21000 STRB r1,[r2,#0] ; I2C_end
|L1.580|
000244 ea000061 B |L1.976|
|L1.584|
000248 e59f13cc LDR r1,|L1.1564|
00024c e5d11000 LDRB r1,[r1,#0] ; I2C_suba_en
000250 e3510001 CMP r1,#1
000254 1a000007 BNE |L1.632|
000258 e3a01020 MOV r1,#0x20
00025c e59f23b4 LDR r2,|L1.1560|
000260 e5c21000 STRB r1,[r2,#0]
000264 e3a01008 MOV r1,#8
000268 e5c21018 STRB r1,[r2,#0x18]
00026c e3a01000 MOV r1,#0
000270 e59f23a4 LDR r2,|L1.1564|
000274 e5c21000 STRB r1,[r2,#0] ; I2C_suba_en
|L1.632|
000278 ea000054 B |L1.976|
|L1.636|
00027c e1a00000 MOV r0,r0
000280 e1a00000 MOV r0,r0
|L1.644|
000284 e1a00000 MOV r0,r0
|L1.648|
000288 e3a01028 MOV r1,#0x28
00028c e59f2384 LDR r2,|L1.1560|
000290 e5c21018 STRB r1,[r2,#0x18]
000294 e3a010ff MOV r1,#0xff
000298 e59f238c LDR r2,|L1.1580|
00029c e5c21000 STRB r1,[r2,#0] ; I2C_end
0002a0 ea00004a B |L1.976|
|L1.676|
0002a4 e1a00000 MOV r0,r0
0002a8 e59f1374 LDR r1,|L1.1572|
0002ac e5d11000 LDRB r1,[r1,#0] ; I2C_num
0002b0 e3510001 CMP r1,#1
0002b4 1a000003 BNE |L1.712|
0002b8 e3a0102c MOV r1,#0x2c
0002bc e59f2354 LDR r2,|L1.1560|
0002c0 e5c21018 STRB r1,[r2,#0x18]
0002c4 ea000004 B |L1.732|
|L1.712|
0002c8 e3a01004 MOV r1,#4
0002cc e59f2344 LDR r2,|L1.1560|
0002d0 e5c21000 STRB r1,[r2,#0]
0002d4 e3a01028 MOV r1,#0x28
0002d8 e5c21018 STRB r1,[r2,#0x18]
|L1.732|
0002dc ea00003b B |L1.976|
|L1.736|
0002e0 e1a00000 MOV r0,r0
0002e4 e59f132c LDR r1,|L1.1560|
0002e8 e5d11008 LDRB r1,[r1,#8]
0002ec e59f2334 LDR r2,|L1.1576|
0002f0 e5922000 LDR r2,[r2,#0] ; I2C_buf
0002f4 e5c21000 STRB r1,[r2,#0]
0002f8 e59f1328 LDR r1,|L1.1576|
0002fc e5911000 LDR r1,[r1,#0] ; I2C_buf
000300 e2811001 ADD r1,r1,#1
000304 e59f231c LDR r2,|L1.1576|
000308 e5821000 STR r1,[r2,#0] ; I2C_buf
00030c e59f1310 LDR r1,|L1.1572|
000310 e5d11000 LDRB r1,[r1,#0] ; I2C_num
000314 e2411001 SUB r1,r1,#1
000318 e59f2304 LDR r2,|L1.1572|
00031c e5c21000 STRB r1,[r2,#0] ; I2C_num
000320 e2821000 ADD r1,r2,#0
000324 e5d11000 LDRB r1,[r1,#0] ; I2C_num
000328 e3510001 CMP r1,#1
00032c 1a000003 BNE |L1.832|
000330 e3a0102c MOV r1,#0x2c
000334 e59f22dc LDR r2,|L1.1560|
000338 e5c21018 STRB r1,[r2,#0x18]
00033c ea000004 B |L1.852|
|L1.832|
000340 e3a01004 MOV r1,#4
000344 e59f22cc LDR r2,|L1.1560|
000348 e5c21000 STRB r1,[r2,#0]
00034c e3a01028 MOV r1,#0x28
000350 e5c21018 STRB r1,[r2,#0x18]
|L1.852|
000354 ea00001d B |L1.976|
|L1.856|
000358 e1a00000 MOV r0,r0
00035c e59f12b4 LDR r1,|L1.1560|
000360 e5d11008 LDRB r1,[r1,#8]
000364 e59f22bc LDR r2,|L1.1576|
000368 e5922000 LDR r2,[r2,#0] ; I2C_buf
00036c e5c21000 STRB r1,[r2,#0]
000370 e59f12b0 LDR r1,|L1.1576|
000374 e5911000 LDR r1,[r1,#0] ; I2C_buf
000378 e2811001 ADD r1,r1,#1
00037c e59f22a4 LDR r2,|L1.1576|
000380 e5821000 STR r1,[r2,#0] ; I2C_buf
000384 e3a01010 MOV r1,#0x10
000388 e59f2288 LDR r2,|L1.1560|
00038c e5c21000 STRB r1,[r2,#0]
000390 e3a01028 MOV r1,#0x28
000394 e5c21018 STRB r1,[r2,#0x18]
000398 e3a01001 MOV r1,#1
00039c e59f2288 LDR r2,|L1.1580|
0003a0 e5c21000 STRB r1,[r2,#0] ; I2C_end
0003a4 ea000009 B |L1.976|
|L1.936|
0003a8 e1a00000 MOV r0,r0
0003ac e3a01028 MOV r1,#0x28
0003b0 e59f2260 LDR r2,|L1.1560|
0003b4 e5c21018 STRB r1,[r2,#0x18]
0003b8 e3a010ff MOV r1,#0xff
0003bc e59f2268 LDR r2,|L1.1580|
0003c0 e5c21000 STRB r1,[r2,#0] ; I2C_end
0003c4 ea000001 B |L1.976|
|L1.968|
0003c8 e1a00000 MOV r0,r0
0003cc e1a00000 MOV r0,r0
|L1.976|
0003d0 e1a00000 MOV r0,r0
0003d4 e3a01000 MOV r1,#0
0003d8 e5011fd0 STR r1,[r1,#-0xfd0]
0003dc e8bd0007 POP {r0-r2}
0003e0 e25ef004 SUBS pc,lr,#4
;;;23 uint8 sta;
;;;24
;;;25 sta = I2STAT; // 读出I2C状态字
;;;26 switch(sta)
;;;27 { case 0x08: // 己发送起始条件
;;;28 if(1==I2C_suba_en) I2DAT = I2C_sla&0xFE; // 指定子地址读时,先写入地址
;;;29 else I2DAT = I2C_sla; // 否则直接发送从机地址
;;;30 I2CONCLR = 0x28; // SI=0
;;;31 break;
;;;32
;;;33 case 0x10:
;;;34 I2DAT = I2C_sla; // 重启动总线后,发送从地址
;;;35 I2CONCLR = 0x28; // SI=0
;;;36 break;
;;;37
;;;38 case 0x18: // 已发送SLA+W,并已接收应答
;;;39 if(0==I2C_suba_en) // 无子地址,则直接发送数据
;;;40 { if(I2C_num>0)
;;;41 { I2DAT = *I2C_buf++;
;;;42 I2CONCLR = 0x28;
;;;43 I2C_num--;
;;;44 }
;;;45 else
;;;46 { I2CONSET = 0x10; // 无数据发送,结束总线
;;;47 I2CONCLR = 0x28;
;;;48 I2C_end = 1; // 设置总线操作结束标志
;;;49 }
;;;50 break;
;;;51 }
;;;52 if(1==I2C_suba_en) // 发送子地址
;;;53 { I2DAT = I2C_suba;
;;;54 I2CONCLR = 0x28;
;;;55 }
;;;56 if(2==I2C_suba_en)
;;;57 { I2DAT = I2C_suba;
;;;58 I2CONCLR = 0x28;
;;;59 I2C_suba_en = 0; // 子地址己处理
;;;60 }
;;;61 break;
;;;62
;;;63 case 0x28: // 已发送I2C数据,并接收到应答
;;;64 if(0==I2C_suba_en) // 无子地址,则直接发送数据
;;;65 { if(I2C_num>0)
;;;66 { I2DAT = *I2C_buf++;
;;;67 I2CONCLR = 0x28;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -