⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2cint.lst

📁 基于ARM的电梯控制程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -