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

📄 i2c.lst

📁 ARM7 LPC2148 demo程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
  274   2          I2CStop();
  275   2          return ( FALSE );
  276   2          }
  277   1          while ( 1 )
  278   1          {
  279   2          if ( I2CMasterState == DATA_NACK )
  280   2          {
  281   3              I2CStop();
  282   3              break;
  283   3          }
  284   2          }    
  285   1          return ( TRUE );      
  286   1      }
  287          
  288          /******************************************************************************
  289          **                            End Of File
  290          ******************************************************************************/
  291          
ARM COMPILER V2.54a,  i2c                                                                  14/04/07  14:23:40  PAGE 6   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN CODE16 (install_irq?T)



*** PUBLICS:
 PUBLIC         I2C0MasterHandler?A
 PUBLIC         I2CInit?T
 PUBLIC         I2CStart?T
 PUBLIC         I2CStop?T
 PUBLIC         I2CEngine?T
 PUBLIC         I2CMasterState
 PUBLIC         I2CSlaveState
 PUBLIC         I2CCmd
 PUBLIC         I2CMode
 PUBLIC         I2CMasterBuffer
 PUBLIC         I2CSlaveBuffer
 PUBLIC         I2CCount
 PUBLIC         I2CReadLength
 PUBLIC         I2CWriteLength
 PUBLIC         RdIndex
 PUBLIC         WrIndex



*** DATA SEGMENT '?DT0?i2c':
 00000000          I2CMasterState:
 00000000           BEGIN_INIT
 00000000  00000000  DD          0x0
 00000004           END_INIT
 00000004          I2CSlaveState:
 00000004           BEGIN_INIT
 00000004  00000000  DD          0x0
 00000008           END_INIT
 00000008          I2CCmd:
 00000008            DS          4
 0000000C          I2CMode:
 0000000C            DS          4
 00000010          I2CCount:
 00000010           BEGIN_INIT
 00000010  00000000  DD          0x0
 00000014           END_INIT
 00000014          I2CReadLength:
 00000014            DS          4
 00000018          I2CWriteLength:
 00000018            DS          4
 0000001C          RdIndex:
 0000001C           BEGIN_INIT
 0000001C  00000000  DD          0x0
 00000020           END_INIT
 00000020          WrIndex:
 00000020           BEGIN_INIT
 00000020  00000000  DD          0x0
 00000024           END_INIT
 00000024          I2CMasterBuffer:
 00000024            DS          32
 00000044          I2CSlaveBuffer:
 00000044            DS          32



*** CODE SEGMENT '?PR?I2C0MasterHandler?A?i2c':
   51: void I2C0MasterHandler (void) __irq 
 00000000  E92D400F  STMDB       R13!,{R0-R3,LR}
   52: {
 00000004            ; SCOPE-START
   56:     StatValue = I20STAT;
 00000004  E5100000  LDR         R0,=0xE001C004
 00000008  E5901000  LDR         R1,[R0,#0x0]
ARM COMPILER V2.54a,  i2c                                                                  14/04/07  14:23:40  PAGE 7   

 0000000C  E1A01C01  MOV         R1,R1,LSL #24
 00000010  E1A01C21  MOV         R1,R1,LSR #24
 00000014  ---- Variable 'StatValue' assigned to Register 'R1' ----
   57:     IENABLE;                /* handles nested interrupt */  
 00000014  E14FE000  MRS         R14,SPSR
 00000018  E92D4000  STMFD       R13!,{LR}
 0000001C  E321F01F  MSR         CPSR_c,#0x1F
 00000020  E92D4000  STMFD       R13!,{LR}
   58:     switch ( StatValue )
 00000024  E1A00001  MOV         R0,R1 ; StatValue
 00000028  E3500010  CMP         R0,#0x0010 ; StatValue
 0000002C  0A00001F  BEQ         L_4  ; Targ=0xB0
 00000030  E3500018  CMP         R0,#0x0018 ; StatValue
 00000034  0A00002F  BEQ         L_5  ; Targ=0xF8
 00000038  E3500020  CMP         R0,#0x0020 ; StatValue
 0000003C  0A0000A1  BEQ         L_11  ; Targ=0x2C8
 00000040  E3500028  CMP         R0,#0x0028 ; StatValue
 00000044  0A000041  BEQ         L_8  ; Targ=0x150
 00000048  E3500030  CMP         R0,#0x0030 ; StatValue
 0000004C  0A00003F  BEQ         L_8  ; Targ=0x150
 00000050  E3500038  CMP         R0,#0x0038 ; StatValue
 00000054  0A0000A2  BEQ         L_3  ; Targ=0x2E4
 00000058  E3500040  CMP         R0,#0x0040 ; StatValue
 0000005C  0A000072  BEQ         L_10  ; Targ=0x22C
 00000060  E3500048  CMP         R0,#0x0048 ; StatValue
 00000064  0A000097  BEQ         L_11  ; Targ=0x2C8
 00000068  E3500050  CMP         R0,#0x0050 ; StatValue
 0000006C  0A000072  BEQ         L_13  ; Targ=0x23C
 00000070  E3500058  CMP         R0,#0x0058 ; StatValue
 00000074  0A000070  BEQ         L_13  ; Targ=0x23C
 00000078  E3500008  CMP         R0,#0x0008 ; StatValue
 0000007C  1A000098  BNE         L_3  ; Targ=0x2E4
   60:     case 0x08:          /* A Start condition is issued. */
 00000080          L_2:
   61:     I20DAT = I2CMasterBuffer[0];
 00000080  E5100000  LDR         R0,=I2CMasterBuffer ; I2CMasterBuffer
 00000084  E5D00000  LDRB        R0,[R0,#0x0] ; I2CMasterBuffer
 00000088  E1A01000  MOV         R1,R0
 0000008C  E5100000  LDR         R0,=0xE001C008
 00000090  E5801000  STR         R1,[R0,#0x0]
   62:     I20CONCLR = (I2CONCLR_SIC | I2CONCLR_STAC);
 00000094  E3A01028  MOV         R1,#0x28
 00000098  E5100000  LDR         R0,=0xE001C018
 0000009C  E5801000  STR         R1,[R0,#0x0]
   63:     I2CMasterState = I2C_STARTED;
 000000A0  E3A01001  MOV         R1,#0x1
 000000A4  E5100000  LDR         R0,=I2CMasterState ; I2CMasterState
 000000A8  E5801000  STR         R1,[R0,#0x0] ; I2CMasterState
   64:     break;
 000000AC  EA00008F  B           L_1  ; Targ=0x2F0
   66:     case 0x10:          /* A repeated started is issued */
 000000B0          L_4:
   67:     if (  I2CCmd == GET_DEVICE_ID || I2CCmd == GET_TEMPERATURE )
 000000B0  E5100000  LDR         R0,=I2CCmd ; I2CCmd
 000000B4  E5900000  LDR         R0,[R0,#0x0] ; I2CCmd
 000000B8  E3500001  CMP         R0,#0x0001
 000000BC  0A000001  BEQ         L_15  ; Targ=0xC8
 000000C0  E3500002  CMP         R0,#0x0002
 000000C4  1A000004  BNE         L_14  ; Targ=0xDC
 000000C8          L_15:
   69:         I20DAT = I2CMasterBuffer[2];
 000000C8  E5100000  LDR         R0,=I2CMasterBuffer + 0x2 ; I2CMasterBuffer+2
 000000CC  E5D00000  LDRB        R0,[R0,#0x0] ; I2CMasterBuffer+2
 000000D0  E1A01000  MOV         R1,R0
 000000D4  E5100000  LDR         R0,=0xE001C008
 000000D8  E5801000  STR         R1,[R0,#0x0]
ARM COMPILER V2.54a,  i2c                                                                  14/04/07  14:23:40  PAGE 8   

   70:     }
 000000DC          L_14:
   71:     I20CONCLR = (I2CONCLR_SIC | I2CONCLR_STAC);
 000000DC  E3A01028  MOV         R1,#0x28
 000000E0  E5100000  LDR         R0,=0xE001C018
 000000E4  E5801000  STR         R1,[R0,#0x0]
   72:     I2CMasterState = I2C_RESTARTED;
 000000E8  E3A01002  MOV         R1,#0x2
 000000EC  E5100000  LDR         R0,=I2CMasterState ; I2CMasterState
 000000F0  E5801000  STR         R1,[R0,#0x0] ; I2CMasterState
   73:     break;
 000000F4  EA00007D  B           L_1  ; Targ=0x2F0
   75:     case 0x18:          /* Regardless, it's a ACK */
 000000F8          L_5:
   76:     if ( I2CMasterState == I2C_STARTED )
 000000F8  E5100000  LDR         R0,=I2CMasterState ; I2CMasterState
 000000FC  E5900000  LDR         R0,[R0,#0x0] ; I2CMasterState
 00000100  E3500001  CMP         R0,#0x0001
 00000104  1A00000D  BNE         L_16  ; Targ=0x140
   78:         I20DAT = I2CMasterBuffer[1+WrIndex];
 00000108  E5100000  LDR         R0,=WrIndex ; WrIndex
 0000010C  E5901000  LDR         R1,[R0,#0x0] ; WrIndex
 00000110  E2812001  ADD         R2,R1,#0x0001
 00000114  E5100000  LDR         R0,=I2CMasterBuffer ; I2CMasterBuffer
 00000118  E7D00002  LDRB        R0,[R0,+R2]
 0000011C  E1A02000  MOV         R2,R0
 00000120  E5100000  LDR         R0,=0xE001C008
 00000124  E5802000  STR         R2,[R0,#0x0]
   79:         WrIndex++;
 00000128  E5100000  LDR         R0,=WrIndex ; WrIndex
 0000012C  E2811001  ADD         R1,R1,#0x0001
 00000130  E5801000  STR         R1,[R0,#0x0] ; WrIndex
   80:         I2CMasterState = DATA_ACK;
 00000134  E3A01004  MOV         R1,#0x4
 00000138  E5100000  LDR         R0,=I2CMasterState ; I2CMasterState
 0000013C  E5801000  STR         R1,[R0,#0x0] ; I2CMasterState
   81:     }
 00000140          L_16:
   82:     I20CONCLR = I2CONCLR_SIC;
 00000140  E3A01008  MOV         R1,#0x8
 00000144  E5100000  LDR         R0,=0xE001C018
 00000148  E5801000  STR         R1,[R0,#0x0]
   83:     break;
 0000014C  EA000067  B           L_1  ; Targ=0x2F0
   86:     case 0x30:
 00000150          L_8:
   87:     if ( WrIndex != I2CWriteLength )
 00000150  E5100000  LDR         R0,=I2CWriteLength ; I2CWriteLength
 00000154  E5901000  LDR         R1,[R0,#0x0] ; I2CWriteLength
 00000158  E5100000  LDR         R0,=WrIndex ; WrIndex
 0000015C  E5902000  LDR         R2,[R0,#0x0] ; WrIndex
 00000160  E1520001  CMP         R2,R1
 00000164  0A00001E  BEQ         L_17  ; Targ=0x1E4
   89:         I20DAT = I2CMasterBuffer[1+WrIndex]; /* this should be the last one */
 00000168  E2823001  ADD         R3,R2,#0x0001
 0000016C  E5100000  LDR         R0,=I2CMasterBuffer ; I2CMasterBuffer
 00000170  E7D00003  LDRB        R0,[R0,+R3]
 00000174  E1A03000  MOV         R3,R0
 00000178  E5100000  LDR         R0,=0xE001C008
 0000017C  E5803000  STR         R3,[R0,#0x0]
   90:         WrIndex++;
 00000180  E5100000  LDR         R0,=WrIndex ; WrIndex
 00000184  E2822001  ADD         R2,R2,#0x0001
 00000188  E5802000  STR         R2,[R0,#0x0] ; WrIndex
   91:         if ( WrIndex != I2CWriteLength )
 0000018C  E5100000  LDR         R0,=WrIndex ; WrIndex
ARM COMPILER V2.54a,  i2c                                                                  14/04/07  14:23:40  PAGE 9   

 00000190  E5900000  LDR         R0,[R0,#0x0] ; WrIndex
 00000194  E1500001  CMP         R0,R1
 00000198  0A000003  BEQ         L_18  ; Targ=0x1AC
   93:         I2CMasterState = DATA_ACK;
 0000019C  E3A01004  MOV         R1,#0x4
 000001A0  E5100000  LDR         R0,=I2CMasterState ; I2CMasterState
 000001A4  E5801000  STR         R1,[R0,#0x0] ; I2CMasterState
   94:         }
 000001A8  EA00001B  B           L_21  ; Targ=0x21C
 000001AC          L_18:
   97:         I2CMasterState = DATA_NACK;
 000001AC  E3A01005  MOV         R1,#0x5
 000001B0  E5100000  LDR         R0,=I2CMasterState ; I2CMasterState
 000001B4  E5801000  STR         R1,[R0,#0x0] ; I2CMasterState
   98:         if ( I2CReadLength != 0 )
 000001B8  E5100000  LDR         R0,=I2CReadLength ; I2CReadLength
 000001BC  E5900000  LDR         R0,[R0,#0x0] ; I2CReadLength
 000001C0  E3500000  CMP         R0,#0x0000
 000001C4  0A000014  BEQ         L_21  ; Targ=0x21C
  100:             I20CONSET = I2CONSET_STA;   /* Set Repeated-start flag */
 000001C8  E3A01020  MOV         R1,#0x20
 000001CC  E5100000  LDR         R0,=0xE001C000
 000001D0  E5801000  STR         R1,[R0,#0x0]
  101:             I2CMasterState = I2C_REPEATED_START;
 000001D4  E3A01003  MOV         R1,#0x3
 000001D8  E5100000  LDR         R0,=I2CMasterState ; I2CMasterState
 000001DC  E5801000  STR         R1,[R0,#0x0] ; I2CMasterState
  104:     }
 000001E0  EA00000D  B           L_21  ; Targ=0x21C
 000001E4          L_17:
  107:         if ( I2CReadLength != 0 )
 000001E4  E5100000  LDR         R0,=I2CReadLength ; I2CReadLength
 000001E8  E5900000  LDR         R0,[R0,#0x0] ; I2CReadLength
 000001EC  E3500000  CMP         R0,#0x0000
 000001F0  0A000006  BEQ         L_22  ; Targ=0x210
  109:         I20CONSET = I2CONSET_STA;   /* Set Repeated-start flag */
 000001F4  E3A01020  MOV         R1,#0x20
 000001F8  E5100000  LDR         R0,=0xE001C000
 000001FC  E5801000  STR         R1,[R0,#0x0]
  110:         I2CMasterState = I2C_REPEATED_START;
 00000200  E3A01003  MOV         R1,#0x3
 00000204  E5100000  LDR         R0,=I2CMasterState ; I2CMasterState
 00000208  E5801000  STR         R1,[R0,#0x0] ; I2CMasterState
  111:         }
 0000020C  EA000002  B           L_21  ; Targ=0x21C
 00000210          L_22:
  114:         I2CMasterState = DATA_NACK;
 00000210  E3A01005  MOV         R1,#0x5
 00000214  E5100000  LDR         R0,=I2CMasterState ; I2CMasterState
 00000218  E5801000  STR         R1,[R0,#0x0] ; I2CMasterState
  116:     }
 0000021C          L_21:
  117:     I20CONCLR = I2CONCLR_SIC;
 0000021C  E3A01008  MOV         R1,#0x8
 00000220  E5100000  LDR         R0,=0xE001C018
 00000224  E5801000  STR         R1,[R0,#0x0]
  118:     break;
 00000228  EA000030  B           L_1  ; Targ=0x2F0
  120:     case 0x40:  /* Master Receive, SLA_R has been sent */
 0000022C          L_10:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -