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

📄 i2cmst.lst

📁 LPC214X系列ARM在KEIL编译环境下的所以例程
💻 LST
字号:
ARM COMPILER V2.53,  i2cmst                                                                27/07/06  14:45:56  PAGE 1   


ARM COMPILER V2.53, COMPILATION OF MODULE i2cmst
OBJECT MODULE PLACED IN .\Obj\i2cmst.obj
COMPILER INVOKED BY: g:\Keil\ARM\BIN\CA.exe i2cmst.c THUMB INCDIR(..\Common\inc) DEBUG PRINT(.\LST\I2CMST.LST) TABS(4) O
                    -BJECT(.\Obj\i2cmst.obj) 

stmt  level    source

    1          /*****************************************************************************
    2           *   i2cmst.c:  main C entry file for Philips LPC214x Family Microprocessors
    3           *
    4           *   Copyright(C) 2006, Philips Semiconductor
    5           *   All rights reserved.
    6           *
    7           *   History
    8           *   2005.10.01  ver 1.00    Prelimnary version, first Release
    9           *
   10          ******************************************************************************/
   11          #include "LPC214x.h"                        /* LPC21xx definitions */
   12          #include "type.h"
   13          #include "irq.h"
   14          #include "i2c.h"
   15          
   16          extern DWORD I2CCount;
   17          extern BYTE I2CMasterBuffer[BUFSIZE];
   18          extern DWORD I2CCmd, I2CMasterState;
   19          extern DWORD I2CReadLength, I2CWriteLength;
   20          
   21          /*******************************************************************************
   22          **   Main Function  main()
   23          *******************************************************************************/
   24          int main (void)
   25          {
   26   1          DWORD i;
   27   1      
   28   1          init_VIC();
   29   1          if ( I2CInit( (DWORD)I2CMASTER ) == FALSE ) /* initialize I2c */
   30   1          {
   31   2          while ( 1 );                /* Fatal error */
   32   2          }
   33   1      
   34   1          /* the example used to test the I2C interface is 
   35   1          a Philips's SE95 temp sensor. LPC214x is used a I2C
   36   1          master, the temp sensor is a I2C slave.
   37   1          
   38   1          /* the sequence to get the temp reading is: 
   39   1          get device ID register,
   40   1          set configuration register,
   41   1          get temp reading
   42   1          */
   43   1      
   44   1          /* In order to start the I2CEngine, the all the parameters 
   45   1          must be set in advance, including I2CWriteLength, I2CReadLength,
   46   1          I2CCmd, and the I2cMasterBuffer which contains the stream
   47   1          command/data to the I2c slave device. */
   48   1      
   49   1          /* Get device ID register */
   50   1          for ( i = 0; i < BUFSIZE; i++ ) /* clear buffer */
   51   1          {
   52   2          I2CMasterBuffer[i] = 0;
   53   2          }
   54   1          I2CWriteLength = 1;
   55   1          I2CReadLength = 1;
   56   1          I2CMasterBuffer[0] = SE95_ADDR;
   57   1          I2CMasterBuffer[1] = SE95_ID;
   58   1          I2CMasterBuffer[2] = SE95_ADDR | RD_BIT;
ARM COMPILER V2.53,  i2cmst                                                                27/07/06  14:45:56  PAGE 2   

   59   1          I2CCmd = GET_DEVICE_ID;
   60   1          I2CEngine(); 
   61   1      
   62   1          /* Configure temp register before reading */
   63   1          for ( i = 0; i < BUFSIZE; i++ ) /* clear buffer */
   64   1          {
   65   2          I2CMasterBuffer[i] = 0;
   66   2          }
   67   1          I2CWriteLength = 2;
   68   1          I2CReadLength = 0;
   69   1          I2CMasterBuffer[0] = SE95_ADDR;
   70   1          I2CMasterBuffer[1] = SE95_CONFIG;
   71   1          I2CMasterBuffer[2] = 0x00;      /* configuration value, no change from 
   72   1                          default */
   73   1          I2CCmd = SET_CONFIGURATION;
   74   1          I2CEngine(); 
   75   1      
   76   1          /* Get temp reading */
   77   1          for ( i = 0; i < BUFSIZE; i++ ) /* clear buffer */
   78   1          {
   79   2          I2CMasterBuffer[i] = 0;
   80   2          }
   81   1          I2CWriteLength = 1;
   82   1          I2CReadLength = 2;
   83   1          I2CMasterBuffer[0] = SE95_ADDR;
   84   1          I2CMasterBuffer[1] = SE95_TEMP;
   85   1          I2CMasterBuffer[2] = SE95_ADDR | RD_BIT;
   86   1          I2CCmd = GET_TEMPERATURE;
   87   1          I2CEngine();
   88   1      
   89   1          /* The temp reading value should reside in I2CMasterBuffer byte 3, 4, ... */ 
   90   1          return 0;
   91   1      }
   92          
   93          /******************************************************************************
   94          **                            End Of File
   95          ******************************************************************************/
ARM COMPILER V2.53,  i2cmst                                                                27/07/06  14:45:56  PAGE 3   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN CODE16 (init_VIC?T)
 EXTERN CODE16 (I2CInit?T)
 EXTERN CODE16 (I2CEngine?T)
 EXTERN DATA (I2CMasterBuffer)
 EXTERN DATA (I2CCmd)
 EXTERN DATA (I2CReadLength)
 EXTERN DATA (I2CWriteLength)
 EXTERN NUMBER (__startup)



*** PUBLICS:
 PUBLIC         main



*** CODE SEGMENT '?PR?main?i2cmst':
   24: int main (void)
 00000000  B500      PUSH        {LR}
   25: {
 00000002            ; SCOPE-START
   28:     init_VIC();
 00000002  F7FF      BL          init_VIC?T  ; T=0x0001  (1)
 00000004  FFFD      BL          init_VIC?T  ; T=0x0001  (2)
   29:     if ( I2CInit( (DWORD)I2CMASTER ) == FALSE ) /* initialize I2c */
 00000006  2001      MOV         R0,#0x1
 00000008  F7FF      BL          I2CInit?T  ; T=0x0001  (1)
 0000000A  FFFA      BL          I2CInit?T  ; T=0x0001  (2)
 0000000C  2800      CMP         R0,#0x0 ; I2CInit?T
 0000000E  D100      BNE         L_10  ; T=0x00000012
   31:     while ( 1 );                /* Fatal error */
 00000010          L_2:
 00000010  E7FE      B           L_2  ; T=0x00000010
   50:     for ( i = 0; i < BUFSIZE; i++ ) /* clear buffer */
 00000012          L_10:
 00000012  2400      MOV         R4,#0x0
 00000014  ---- Variable 'i' assigned to Register 'R4' ----
 00000014          L_9:
   52:     I2CMasterBuffer[i] = 0;
 00000014  2000      MOV         R0,#0x0
 00000016  1C22      MOV         R2,R4 ; i
 00000018  4800      LDR         R1,=I2CMasterBuffer ; I2CMasterBuffer
 0000001A  5488      STRB        R0,[R1,R2]
   53:     }
 0000001C  3401      ADD         R4,#0x1
 0000001E  1C20      MOV         R0,R4 ; i
 00000020  2820      CMP         R0,#0x20 ; i
 00000022  D3F7      BCC         L_9  ; T=0x00000014
   54:     I2CWriteLength = 1;
 00000024  2101      MOV         R1,#0x1
 00000026  4800      LDR         R0,=I2CWriteLength ; I2CWriteLength
 00000028  6001      STR         R1,[R0,#0x0] ; I2CWriteLength
   55:     I2CReadLength = 1;
 0000002A  4800      LDR         R0,=I2CReadLength ; I2CReadLength
 0000002C  6001      STR         R1,[R0,#0x0] ; I2CReadLength
   56:     I2CMasterBuffer[0] = SE95_ADDR;
 0000002E  229E      MOV         R2,#0x9E
 00000030  4800      LDR         R0,=I2CMasterBuffer ; I2CMasterBuffer
 00000032  7002      STRB        R2,[R0,#0x0] ; I2CMasterBuffer
   57:     I2CMasterBuffer[1] = SE95_ID;
 00000034  2205      MOV         R2,#0x5
 00000036  4800      LDR         R0,=I2CMasterBuffer + 0x1 ; I2CMasterBuffer+1
 00000038  7002      STRB        R2,[R0,#0x0] ; I2CMasterBuffer+1
   58:     I2CMasterBuffer[2] = SE95_ADDR | RD_BIT;
 0000003A  229F      MOV         R2,#0x9F
 0000003C  4800      LDR         R0,=I2CMasterBuffer + 0x2 ; I2CMasterBuffer+2
ARM COMPILER V2.53,  i2cmst                                                                27/07/06  14:45:56  PAGE 4   

 0000003E  7002      STRB        R2,[R0,#0x0] ; I2CMasterBuffer+2
   59:     I2CCmd = GET_DEVICE_ID;
 00000040  4800      LDR         R0,=I2CCmd ; I2CCmd
 00000042  6001      STR         R1,[R0,#0x0] ; I2CCmd
   60:     I2CEngine(); 
 00000044  F7FF      BL          I2CEngine?T  ; T=0x0001  (1)
 00000046  FFDC      BL          I2CEngine?T  ; T=0x0001  (2)
   63:     for ( i = 0; i < BUFSIZE; i++ ) /* clear buffer */
 00000048  2400      MOV         R4,#0x0
 0000004A          L_14:
   65:     I2CMasterBuffer[i] = 0;
 0000004A  2100      MOV         R1,#0x0
 0000004C  1C22      MOV         R2,R4 ; i
 0000004E  4800      LDR         R0,=I2CMasterBuffer ; I2CMasterBuffer
 00000050  5481      STRB        R1,[R0,R2]
   66:     }
 00000052  3401      ADD         R4,#0x1
 00000054  1C20      MOV         R0,R4 ; i
 00000056  2820      CMP         R0,#0x20 ; i
 00000058  D3F7      BCC         L_14  ; T=0x0000004A
   67:     I2CWriteLength = 2;
 0000005A  2202      MOV         R2,#0x2
 0000005C  4800      LDR         R0,=I2CWriteLength ; I2CWriteLength
 0000005E  6002      STR         R2,[R0,#0x0] ; I2CWriteLength
   68:     I2CReadLength = 0;
 00000060  2400      MOV         R4,#0x0
 00000062  4800      LDR         R0,=I2CReadLength ; I2CReadLength
 00000064  6004      STR         R4,[R0,#0x0] ; I2CReadLength
   69:     I2CMasterBuffer[0] = SE95_ADDR;
 00000066  229E      MOV         R2,#0x9E
 00000068  4800      LDR         R0,=I2CMasterBuffer ; I2CMasterBuffer
 0000006A  7002      STRB        R2,[R0,#0x0] ; I2CMasterBuffer
   70:     I2CMasterBuffer[1] = SE95_CONFIG;
 0000006C  2201      MOV         R2,#0x1
 0000006E  4800      LDR         R0,=I2CMasterBuffer + 0x1 ; I2CMasterBuffer+1
 00000070  7002      STRB        R2,[R0,#0x0] ; I2CMasterBuffer+1
   71:     I2CMasterBuffer[2] = 0x00;      /* configuration value, no change from 
 00000072  4800      LDR         R0,=I2CMasterBuffer + 0x2 ; I2CMasterBuffer+2
 00000074  7001      STRB        R1,[R0,#0x0] ; I2CMasterBuffer+2
   73:     I2CCmd = SET_CONFIGURATION;
 00000076  2103      MOV         R1,#0x3
 00000078  4800      LDR         R0,=I2CCmd ; I2CCmd
 0000007A  6001      STR         R1,[R0,#0x0] ; I2CCmd
   74:     I2CEngine(); 
 0000007C  F7FF      BL          I2CEngine?T  ; T=0x0001  (1)
 0000007E  FFC0      BL          I2CEngine?T  ; T=0x0001  (2)
   77:     for ( i = 0; i < BUFSIZE; i++ ) /* clear buffer */
 00000080          L_19:
   79:     I2CMasterBuffer[i] = 0;
 00000080  2200      MOV         R2,#0x0
 00000082  1C21      MOV         R1,R4 ; i
 00000084  4800      LDR         R0,=I2CMasterBuffer ; I2CMasterBuffer
 00000086  5442      STRB        R2,[R0,R1]
   80:     }
 00000088  3401      ADD         R4,#0x1
 0000008A  1C20      MOV         R0,R4 ; i
 0000008C  2820      CMP         R0,#0x20 ; i
 0000008E  D3F7      BCC         L_19  ; T=0x00000080
   81:     I2CWriteLength = 1;
 00000090  2101      MOV         R1,#0x1
 00000092  4800      LDR         R0,=I2CWriteLength ; I2CWriteLength
 00000094  6001      STR         R1,[R0,#0x0] ; I2CWriteLength
   82:     I2CReadLength = 2;
 00000096  2102      MOV         R1,#0x2
 00000098  4800      LDR         R0,=I2CReadLength ; I2CReadLength
 0000009A  6001      STR         R1,[R0,#0x0] ; I2CReadLength
ARM COMPILER V2.53,  i2cmst                                                                27/07/06  14:45:56  PAGE 5   

   83:     I2CMasterBuffer[0] = SE95_ADDR;
 0000009C  239E      MOV         R3,#0x9E
 0000009E  4800      LDR         R0,=I2CMasterBuffer ; I2CMasterBuffer
 000000A0  7003      STRB        R3,[R0,#0x0] ; I2CMasterBuffer
   84:     I2CMasterBuffer[1] = SE95_TEMP;
 000000A2  4800      LDR         R0,=I2CMasterBuffer + 0x1 ; I2CMasterBuffer+1
 000000A4  7002      STRB        R2,[R0,#0x0] ; I2CMasterBuffer+1
   85:     I2CMasterBuffer[2] = SE95_ADDR | RD_BIT;
 000000A6  229F      MOV         R2,#0x9F
 000000A8  4800      LDR         R0,=I2CMasterBuffer + 0x2 ; I2CMasterBuffer+2
 000000AA  7002      STRB        R2,[R0,#0x0] ; I2CMasterBuffer+2
   86:     I2CCmd = GET_TEMPERATURE;
 000000AC  4800      LDR         R0,=I2CCmd ; I2CCmd
 000000AE  6001      STR         R1,[R0,#0x0] ; I2CCmd
   87:     I2CEngine();
 000000B0  F7FF      BL          I2CEngine?T  ; T=0x0001  (1)
 000000B2  FFA6      BL          I2CEngine?T  ; T=0x0001  (2)
   90:     return 0;
 000000B4  2000      MOV         R0,#0x0
 000000B6            ; SCOPE-END
   91: }
 000000B6  BC08      POP         {R3}
 000000B8  4718      BX          R3
 000000BA          ENDP ; 'main'



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