📄 i2cmst.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 + -