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

📄 i2c.lst

📁 LPC214X系列ARM在KEIL编译环境下的所以例程
💻 LST
📖 第 1 页 / 共 3 页
字号:
  121:     I20CONCLR = I2CONCLR_SIC;
 0000022C  E3A01008  MOV         R1,#0x8
 00000230  E5100000  LDR         R0,=0xE001C018
 00000234  E5801000  STR         R1,[R0,#0x0]
  122:     break;
 00000238  EA00002C  B           L_1  ; Targ=0x2F0
ARM COMPILER V2.53,  i2c                                                                   27/07/06  14:45:57  PAGE 10  

  125:     case 0x58:
 0000023C          L_13:
  126:     I2CMasterBuffer[3+RdIndex] = I20DAT;
 0000023C  E5100000  LDR         R0,=0xE001C008
 00000240  E5900000  LDR         R0,[R0,#0x0]
 00000244  E1A00C00  MOV         R0,R0,LSL #24
 00000248  E1A00C20  MOV         R0,R0,LSR #24
 0000024C  E5101000  LDR         R1,=RdIndex ; RdIndex
 00000250  E5911000  LDR         R1,[R1,#0x0] ; RdIndex
 00000254  E2813003  ADD         R3,R1,#0x0003
 00000258  E5102000  LDR         R2,=I2CMasterBuffer ; I2CMasterBuffer
 0000025C  E7C20003  STRB        R0,[R2,+R3]
  127:     RdIndex++;
 00000260  E5100000  LDR         R0,=RdIndex ; RdIndex
 00000264  E2811001  ADD         R1,R1,#0x0001
 00000268  E5801000  STR         R1,[R0,#0x0] ; RdIndex
  128:     if ( RdIndex != I2CReadLength )
 0000026C  E5100000  LDR         R0,=I2CReadLength ; I2CReadLength
 00000270  E5901000  LDR         R1,[R0,#0x0] ; I2CReadLength
 00000274  E5100000  LDR         R0,=RdIndex ; RdIndex
 00000278  E5900000  LDR         R0,[R0,#0x0] ; RdIndex
 0000027C  E1500001  CMP         R0,R1
 00000280  0A000003  BEQ         L_24  ; Targ=0x294
  130:         I2CMasterState = DATA_ACK;
 00000284  E3A01004  MOV         R1,#0x4
 00000288  E5100000  LDR         R0,=I2CMasterState ; I2CMasterState
 0000028C  E5801000  STR         R1,[R0,#0x0] ; I2CMasterState
  131:     }
 00000290  EA000005  B           L_25  ; Targ=0x2AC
 00000294          L_24:
  134:         RdIndex = 0;
 00000294  E3A01000  MOV         R1,#0x0
 00000298  E5100000  LDR         R0,=RdIndex ; RdIndex
 0000029C  E5801000  STR         R1,[R0,#0x0] ; RdIndex
  135:         I2CMasterState = DATA_NACK;
 000002A0  E3A01005  MOV         R1,#0x5
 000002A4  E5100000  LDR         R0,=I2CMasterState ; I2CMasterState
 000002A8  E5801000  STR         R1,[R0,#0x0] ; I2CMasterState
  136:     }
 000002AC          L_25:
  137:     I20CONSET = I2CONSET_AA;    /* assert ACK after data is received */
 000002AC  E3A01004  MOV         R1,#0x4
 000002B0  E5100000  LDR         R0,=0xE001C000
 000002B4  E5801000  STR         R1,[R0,#0x0]
  138:     I20CONCLR = I2CONCLR_SIC;
 000002B8  E3A01008  MOV         R1,#0x8
 000002BC  E5100000  LDR         R0,=0xE001C018
 000002C0  E5801000  STR         R1,[R0,#0x0]
  139:     break;
 000002C4  EA000009  B           L_1  ; Targ=0x2F0
  142:     case 0x48:
 000002C8          L_11:
  143:     I20CONCLR = I2CONCLR_SIC;
 000002C8  E3A01008  MOV         R1,#0x8
 000002CC  E5100000  LDR         R0,=0xE001C018
 000002D0  E5801000  STR         R1,[R0,#0x0]
  144:     I2CMasterState = DATA_NACK;
 000002D4  E3A01005  MOV         R1,#0x5
 000002D8  E5100000  LDR         R0,=I2CMasterState ; I2CMasterState
 000002DC  E5801000  STR         R1,[R0,#0x0] ; I2CMasterState
  145:     break;
 000002E0  EA000002  B           L_1  ; Targ=0x2F0
  149:     default:
 000002E4          L_3:
  150:     I20CONCLR = I2CONCLR_SIC;   
 000002E4  E3A01008  MOV         R1,#0x8
ARM COMPILER V2.53,  i2c                                                                   27/07/06  14:45:57  PAGE 11  

 000002E8  E5100000  LDR         R0,=0xE001C018
 000002EC  E5801000  STR         R1,[R0,#0x0]
  152:     }
 000002F0          L_1:
  153:     IDISABLE;
 000002F0  E8BD4000  LDMFD       R13!,{LR}
 000002F4  E321F092  MSR         CPSR_c,#0x92
 000002F8  E8BD4000  LDMFD       R13!,{LR}
 000002FC  E16FF00E  MSR         SPSR_cxsf,R14
  154:     VICVectAddr = 0;        /* Acknowledge Interrupt */
 00000300  E3A01000  MOV         R1,#0x0
 00000304  E5100000  LDR         R0,=0xFFFFF030
 00000308  E5801000  STR         R1,[R0,#0x0]
 0000030C            ; SCOPE-END
  155: }
 0000030C  E8BD400F  LDMIA       R13!,{R0-R3,LR}
 00000310  E25EF004  SUBS        R15,R14,#0x0004
 00000314          ENDP ; 'I2C0MasterHandler?A'


*** CODE SEGMENT '?PR?I2CStart?T?i2c':
  169: {
 00000000            ; SCOPE-START
  170:     DWORD timeout = 0;
 00000000  2100      MOV         R1,#0x0
 00000002  1C08      MOV         R0,R1 ; timeout
 00000004  ---- Variable 'timeout' assigned to Register 'R0' ----
  171:     DWORD returnValue = FALSE;
 00000004  ---- Variable 'returnValue' assigned to Register 'R1' ----
  174:     I20CONSET = I2CONSET_STA;   /* Set Start flag */
 00000004  2320      MOV         R3,#0x20
 00000006  4800      LDR         R2,=0xE001C000
 00000008  6013      STR         R3,[R2,#0x0]
  177:     while( 1 )
 0000000A          L_28:
  179:     if ( I2CMasterState == I2C_STARTED )
 0000000A  4800      LDR         R2,=I2CMasterState ; I2CMasterState
 0000000C  6812      LDR         R2,[R2,#0x0] ; I2CMasterState
 0000000E  2A01      CMP         R2,#0x1
 00000010  D101      BNE         L_30  ; T=0x00000016
  181:         returnValue = TRUE;
 00000012  2101      MOV         R1,#0x1
  182:         break;  
 00000014  E007      B           L_27  ; T=0x00000026
  183:     }
 00000016          L_30:
  184:     if ( timeout >= MAX_TIMEOUT )
 00000016  1C02      MOV         R2,R0 ; timeout
 00000018  4800      LDR         R3,=0xFFFFFF
 0000001A  429A      CMP         R2,R3 ; timeout
 0000001C  D301      BCC         L_31  ; T=0x00000022
  186:         returnValue = FALSE;
 0000001E  2100      MOV         R1,#0x0
  187:         break;
 00000020  E001      B           L_27  ; T=0x00000026
  188:     }
 00000022          L_31:
  189:     timeout++;
 00000022  3001      ADD         R0,#0x1
  190:     }
 00000024  E7F1      B           L_28  ; T=0x0000000A
 00000026          L_27:
  191:     return( returnValue );
 00000026  1C08      MOV         R0,R1 ; returnValue
 00000028            ; SCOPE-END
  192: }
 00000028  4770      BX          R14
 0000002A          ENDP ; 'I2CStart?T'

ARM COMPILER V2.53,  i2c                                                                   27/07/06  14:45:57  PAGE 12  


*** CODE SEGMENT '?PR?I2CStop?T?i2c':
  206:     I20CONSET = I2CONSET_STO;      /* Set Stop flag */ 
 00000000  2110      MOV         R1,#0x10
 00000002  4800      LDR         R0,=0xE001C000
 00000004  6001      STR         R1,[R0,#0x0]
  207:     I20CONCLR = I2CONCLR_SIC;  /* Clear SI flag */ 
 00000006  2108      MOV         R1,#0x8
 00000008  4800      LDR         R0,=0xE001C018
 0000000A  6001      STR         R1,[R0,#0x0]
  210:     while( I20CONSET & I2CONSET_STO );
 0000000C          L_33:
 0000000C  4800      LDR         R0,=0xE001C000
 0000000E  6800      LDR         R0,[R0,#0x0]
 00000010  2110      MOV         R1,#0x10
 00000012  4208      TST         R0,R1
 00000014  D1FA      BNE         L_33  ; T=0x0000000C
  211:     return TRUE;
 00000016  2001      MOV         R0,#0x1
  212: }
 00000018  4770      BX          R14
 0000001A          ENDP ; 'I2CStop?T'


*** CODE SEGMENT '?PR?I2CInit?T?i2c':
  224: DWORD I2CInit( DWORD I2cMode ) 
 00000000  B500      PUSH        {LR}
 00000002  1C01      MOV         R1,R0 ; I2cMode
 00000004  ---- Variable 'I2cMode' assigned to Register 'R1' ----
  226:     PINSEL0 = 0x50; /* set PIO0.2 and PIO0.3 to I2C0 SDA and SCK */
 00000004  2250      MOV         R2,#0x50
 00000006  4800      LDR         R0,=0xE002C000
 00000008  6002      STR         R2,[R0,#0x0]
  227:     IODIR0 = 0x0C;  /* set port 0.2 and port 0.3 to output, high */
 0000000A  220C      MOV         R2,#0xC
 0000000C  4800      LDR         R0,=0xE0028008
 0000000E  6002      STR         R2,[R0,#0x0]
  228:     IOSET0 = 0x0C;
 00000010  4800      LDR         R0,=0xE0028004
 00000012  6002      STR         R2,[R0,#0x0]
  231:     I20CONCLR = I2CONCLR_AAC | I2CONCLR_SIC | I2CONCLR_STAC | I2CONCLR_I2ENC;    
 00000014  226C      MOV         R2,#0x6C
 00000016  4800      LDR         R0,=0xE001C018
 00000018  6002      STR         R2,[R0,#0x0]
  234:     I20SCLL   = I2SCLL_SCLL;
 0000001A  2280      MOV         R2,#0x80
 0000001C  4800      LDR         R0,=0xE001C014
 0000001E  6002      STR         R2,[R0,#0x0]
  235:     I20SCLH   = I2SCLH_SCLH;
 00000020  4800      LDR         R0,=0xE001C010
 00000022  6002      STR         R2,[R0,#0x0]
  236:     if ( I2cMode == I2CSLAVE )
 00000024  1C08      MOV         R0,R1 ; I2cMode
 00000026  2802      CMP         R0,#0x2 ; I2cMode
 00000028  D102      BNE         L_38  ; T=0x00000030
  238:     I20ADR = SE95_ADDR;
 0000002A  219E      MOV         R1,#0x9E
 0000002C  4800      LDR         R0,=0xE001C00C
 0000002E  6001      STR         R1,[R0,#0x0]
  239:     }    
 00000030          L_38:
  242:     if ( install_irq( I2C0_INT, (void *)I2C0MasterHandler ) == FALSE )
 00000030  4900      LDR         R1,=I2C0MasterHandler?A ; I2C0MasterHandler?A
 00000032  2009      MOV         R0,#0x9
 00000034  F7FF      BL          install_irq?T  ; T=0x0001  (1)
 00000036  FFE4      BL          install_irq?T  ; T=0x0001  (2)
 00000038  2800      CMP         R0,#0x0 ; install_irq?T
 0000003A  D101      BNE         L_39  ; T=0x00000040
  244:     return( FALSE );
ARM COMPILER V2.53,  i2c                                                                   27/07/06  14:45:57  PAGE 13  

 0000003C  2000      MOV         R0,#0x0
 0000003E  E003      B           L_40  ; T=0x00000048
  245:     }
 00000040          L_39:
  246:     I20CONSET = I2CONSET_I2EN;
 00000040  2140      MOV         R1,#0x40
 00000042  4800      LDR         R0,=0xE001C000
 00000044  6001      STR         R1,[R0,#0x0]
  247:     return( TRUE );
 00000046  2001      MOV         R0,#0x1
  248: }
 00000048          L_40:
 00000048  BC08      POP         {R3}
 0000004A  4718      BX          R3
 0000004C          ENDP ; 'I2CInit?T'


*** CODE SEGMENT '?PR?I2CEngine?T?i2c':
  267: DWORD I2CEngine( void ) 
 00000000  B510      PUSH        {R4,LR}
  269:     I2CMasterState = I2C_IDLE;
 00000002  2400      MOV         R4,#0x0
 00000004  4800      LDR         R0,=I2CMasterState ; I2CMasterState
 00000006  6004      STR         R4,[R0,#0x0] ; I2CMasterState
  270:     RdIndex = 0;
 00000008  4800      LDR         R0,=RdIndex ; RdIndex
 0000000A  6004      STR         R4,[R0,#0x0] ; RdIndex
  271:     WrIndex = 0;
 0000000C  4800      LDR         R0,=WrIndex ; WrIndex
 0000000E  6004      STR         R4,[R0,#0x0] ; WrIndex
  272:     if ( I2CStart() != TRUE )
 00000010  F7FF      BL          I2CStart?T  ; T=0x0001  (1)
 00000012  FFF6      BL          I2CStart?T  ; T=0x0001  (2)
 00000014  2801      CMP         R0,#0x1 ; I2CStart?T
 00000016  D003      BEQ         L_46  ; T=0x00000020
  274:     I2CStop();
 00000018  F7FF      BL          I2CStop?T  ; T=0x0001  (1)
 0000001A  FFF2      BL          I2CStop?T  ; T=0x0001  (2)
  275:     return ( FALSE );
 0000001C  1C20      MOV         R0,R4
 0000001E  E006      B           L_42  ; T=0x0000002E
  277:     while ( 1 )
 00000020          L_46:
 00000020          L_45:
  279:     if ( I2CMasterState == DATA_NACK )
 00000020  4800      LDR         R0,=I2CMasterState ; I2CMasterState
 00000022  6800      LDR         R0,[R0,#0x0] ; I2CMasterState
 00000024  2805      CMP         R0,#0x5
 00000026  D1FB      BNE         L_45  ; T=0x00000020
  281:         I2CStop();
 00000028  F7FF      BL          I2CStop?T  ; T=0x0001  (1)
 0000002A  FFEA      BL          I2CStop?T  ; T=0x0001  (2)
  285:     return ( TRUE );      
 0000002C  2001      MOV         R0,#0x1
  286: }
 0000002E          L_42:
 0000002E  BC10      POP         {R4}
 00000030  BC08      POP         {R3}
 00000032  4718      BX          R3
 00000034          ENDP ; 'I2CEngine?T'



Module Information          Static
----------------------------------
  code size            =    ------
  data size            =       100
  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 + -