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

📄 i2cint.lst

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