?? i2c.lst
字號(hào):
C51 COMPILER V7.50 I2C 02/05/2007 16:33:25 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN .\OBJ\I2C.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE I2C.C ROM(COMPACT) OPTIMIZE(9,SPEED) NOAREGS DEFINE(PROJECT=DMO04015800,MCU
-_CFG=BIT5101,VP_IF_CFG=VP_IF_BITEK) PRINT(.\LST\I2C.lst) OBJECT(.\OBJ\I2C.obj)
line level source
1 /* **********************************************************************
2
3 Copyright (c) 2002-2006 Beyond Innovation Technology Co., Ltd
4
5 All rights are reserved. Reproduction in whole or in parts is
6 prohibited without the prior written consent of the copyright owner.
7 ----------------------------------------------------------------------
8
9 Module: I2C.C
10
11 Purpose: Implementation of I2C module.
12
13 Version: 0.02 11:15AM 2005/12/09
14
15 Compiler: Keil 8051 C Compiler v8.01
16
17 Reference:
18 [1] I2C Peripherals data handbook IC12, 1996 Philips Semiconductors
19 [2] Display Driver and I2C-bus Peripherals data handbook IC12, 2000
20 Philips Semiconductors
21
22 ----------------------------------------------------------------------
23 Modification:
24
25 R0.01 05:19PM 2004/10/25 Jeffrey Chang
26 Reason:
27 1. Original.
28 Solution:
29
30 ----------------------------------------------------------------------
31 R0.02 11:14AM 2005/12/09 Jeffrey Chang
32 Reason:
33 1. Revised timing.
34 Solution:
35
36 ********************************************************************** */
37
38 #define _I2C_C_
39
40
41 /* ------------------------------------
42 Header Files
43 ------------------------------------ */
44 #include <intrins.h>
45
46 #include "common.h"
47 #include "i2c.h"
48
49 /* ------------------------------------
50 Macro Definitions
51 ------------------------------------ */
52
53 #define NOP_24 { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_()
-; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _
C51 COMPILER V7.50 I2C 02/05/2007 16:33:25 PAGE 2
-nop_();}
54 #define NOP_20 { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_()
-; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); }
55 #define NOP_18 { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_()
-; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); }
56 #define NOP_15 { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_()
-; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); }
57 #define NOP_12 { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_()
-; _nop_(); _nop_(); }
58 #define NOP_10 { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_()
-; }
59 #define NOP_3 { _nop_(); _nop_(); _nop_(); }
60 #define NOP_2 { _nop_(); _nop_(); }
61 #define NOP_1 { _nop_(); }
62 #define NOP_0 { }
63
64 // 6 / 14.318MHz = 419 ns !
65
66 #if (I2C_MODE_CFG == I2C_MODE_SLOW)
// 100 kHz
// [10]165 Standard Mode Start Set-up Time: Tsu,sta = 4.7 us
// [11]72 Standard Mode Start Set-up Time: Tsu,sta = 4.7 us
#define I2C_SU_STA NOP_24
// [10]165 Standard Mode Start Hold Time: Thd,dat = 4.0 us
// [11]72 Standard Mode Start Hold Time: Thd,dat = 4.0 us
#define I2C_HD_STA NOP_20
// [10]165 Standard Mode Data Set-Up Time: Tsu,dat = 250 ns
// [11]72 Standard Mode Data Set-Up Time: Tsu,dat = 250 ns
#define I2C_SU_DAT NOP_2
// [10]165 Standard Mode Data Hold Time: Thd,dat = 0 us
// [11]72 Standard Mode Data Hold Time: Thd,dat = 0 us
#define I2C_HD_DAT NOP_0
// [10]165 Standard Mode HIGH period of the SCL clock: Thigh = 4.0 us
// [11]72 Standard Mode HIGH period of the SCL clock: Thigh = 4.0 us
#define I2C_HIGH NOP_20
// [10]165 Standard Mode LOW period of the SCL clock: Tlow = 4.7 us
// [11]72 Standard Mode LOW period of the SCL clock: Tlow = 4.7 us
#define I2C_LOW NOP_24
// [10]165 Standard Mode Stop Set-up Time: Tsu,sto = 4.0 us
// [11]72 Standard Mode Stop Set-up Time: Tsu,sto = 4.0 us
#define I2C_SU_STO NOP_20
#elif (I2C_MODE_CFG == I2C_MODE_STANDARD)
98 // 100 kHz
99
100 // [10]165 Standard Mode Start Set-up Time: Tsu,sta = 4.7 us
101 // [11]72 Standard Mode Start Set-up Time: Tsu,sta = 4.7 us
102 #define I2C_SU_STA NOP_12
103
104 // [10]165 Standard Mode Start Hold Time: Thd,dat = 4.0 us
105 // [11]72 Standard Mode Start Hold Time: Thd,dat = 4.0 us
106 #define I2C_HD_STA NOP_10
107
108 // [10]165 Standard Mode Data Set-Up Time: Tsu,dat = 250 ns
109 // [11]72 Standard Mode Data Set-Up Time: Tsu,dat = 250 ns
C51 COMPILER V7.50 I2C 02/05/2007 16:33:25 PAGE 3
110 #define I2C_SU_DAT NOP_1
111
112 // [10]165 Standard Mode Data Hold Time: Thd,dat = 0 us
113 // [11]72 Standard Mode Data Hold Time: Thd,dat = 0 us
114 #define I2C_HD_DAT NOP_0
115
116 // [10]165 Standard Mode HIGH period of the SCL clock: Thigh = 4.0 us
117 // [11]72 Standard Mode HIGH period of the SCL clock: Thigh = 4.0 us
118 #define I2C_HIGH NOP_10
119
120 // [10]165 Standard Mode LOW period of the SCL clock: Tlow = 4.7 us
121 // [11]72 Standard Mode LOW period of the SCL clock: Tlow = 4.7 us
122 #define I2C_LOW NOP_12
123
124 // [10]165 Standard Mode Stop Set-up Time: Tsu,sto = 4.0 us
125 // [11]72 Standard Mode Stop Set-up Time: Tsu,sto = 4.0 us
126 #define I2C_SU_STO NOP_10
127
128
129 #elif (I2C_MODE_CFG == I2C_MODE_FAST)
// 400 kHz
// [10]165 Fast Mode Start Set-up Time: Tsu,sta = 0.6 us
#define I2C_SU_STA NOP_2
// [10]165 Fast Mode Start Hold Time: Thd,dat = 0.6 us
#define I2C_HD_STA NOP_2
// [10]165 Fast Mode Data Set-Up Time: Tsu,dat = 100 ns
#define I2C_SU_DAT NOP_1
// [10]165 Fast Mode Data Hold Time: Thd,dat = 0 us
#define I2C_HD_DAT NOP_0
// [10]165 Fast Mode HIGH period of the SCL clock: Thigh = 0.6 us
#define I2C_HIGH NOP_2
// [10]165 Fast Mode LOW period of the SCL clock: Tlow = 1.3 us
#define I2C_LOW NOP_3
// [10]165 Fast Mode Stop Set-up Time: Tsu,sto = 0.6 us
#define I2C_SU_STO NOP_2
#elif (I2C_MODE_CFG == I2C_MODE_HIGHSPEED)
// 3.4 MHz
// [10]165 Highspeed Mode Start Set-up Time: Tsu,sta = 4.7 us
#define I2C_SU_STA NOP_0
// [10]165 Highspeed Mode Start Hold Time: Thd,dat = 4.0 us
#define I2C_HD_STA NOP_0
// [10]165 Highspeed Mode Data Set-Up Time: Tsu,dat = 250 ns
#define I2C_SU_DAT NOP_0
// [10]165 Highspeed Mode Data Hold Time: Thd,dat = 0 us
#define I2C_HD_DAT NOP_0
// [10]165 Highspeed Mode HIGH period of the SCL clock: Thigh = 4.0 us
#define I2C_HIGH NOP_0
// [10]165 Highspeed Mode LOW period of the SCL clock: Tlow = 4.7 us
C51 COMPILER V7.50 I2C 02/05/2007 16:33:25 PAGE 4
#define I2C_LOW NOP_0
// [10]165 Highspeed Mode Stop Set-up Time: Tsu,sto = 4.0 us
#define I2C_SU_STO NOP_0
#else
#error I2C.C - Invalid I2C_MODE_CFG !
#endif // I2C_MODE_CFG
180
181
182 #define I2C_GET_DAT_HIGH ( I2C_ioSDA == HIGH )
183
184 #define I2C_SET_CLK(HiLo) { I2C_ioSCL = (HiLo) ? HIGH : LOW; }
185 #define I2C_SET_DAT(HiLo) { I2C_ioSDA = (HiLo) ? HIGH : LOW; }
186
187
188 /* ------------------------------------
189 Type Definitions
190 ------------------------------------ */
191
192
193 /* ------------------------------------
194 Variables Definitions
195 ------------------------------------ */
196 sbit I2C_ioSCL = P1 ^ 6;
197 sbit I2C_ioSDA = P1 ^ 7;
198
199
200 /* ------------------------------------
201 Function Prototypes
202 ------------------------------------ */
203
204
205
206 /* -------------------------------------------------------------------
207 Name: I2C_GetACK -
208 Purpose: .
209 Passed: None.
210 Returns: LOW if OK
211 Notes:
212 ------------------------------------------------------------------- */
213 BOOL I2C_GetACK (void)
214 {
215 1 BOOL fResult;
216 1
217 1
218 1 //I2C_SET_DAT(HIGH); // Removed by JC 01:48PM 2005/11/23
219 1 I2C_SU_DAT; // Added by JC 01:51PM 2005/11/23
220 1
221 1 I2C_SET_CLK(HIGH);
222 1 I2C_HIGH;
223 1
224 1 fResult = I2C_GET_DAT_HIGH;
225 1
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -