📄 i2c.lst
字号:
C51 COMPILER V7.50 I2C 07/03/2006 14:17:07 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN ..\..\OUTPUT\NTSC_SOUTH\I2c.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE ..\..\KERNEL\I2c.c OPTIMIZE(9,SIZE) BROWSE ORDER INCDIR(..\..\INC\;..\..\UI
-\NTSC_SOUTH\) DEFINE(PABLO,MCU_MTV412M,OLGA) DEBUG OBJECTEXTEND PRINT(..\..\OUTPUT\NTSC_SOUTH\I2c.lst) OBJECT(..\..\OUTP
-UT\NTSC_SOUTH\I2c.obj)
line level source
1 /******************************************************************************
2 Copyright (c) 2003 MStar Semiconductor, Inc.
3 All rights reserved.
4
5 [Module Name]: I2c.c
6 [Date]: 11-Nov-2003
7 [Comment]:
8 I2C subroutines.
9 [Reversion History]:
10 *******************************************************************************/
11
12 #define _I2C_C_
13
14 // System
15
16 // Common
17 #include "define.h"
18 #include "mcu.h"
19
20 #include "board.h"
21
22 // External
23 #include "common.h"
24
25 // Internal
26 #include "userpref.h"
27 #include "i2c.h"
28 #include "uart.h"
29 #include "global.h"
30
31 void i2cSetSCL(BYTE is_hl)
32 {
33 1 if (s_I2CSel)
34 1 {
35 2 i2cSCLRam_PIN = is_hl;//P7_5
36 2 }
37 1 else
38 1 {
39 2 i2cSCL_PIN = is_hl;//P7_7
40 2 }
41 1 }
42
43 BIT i2cGetSCL(void)
44 {
45 1 BIT bSCL;
46 1 if (s_I2CSel)
47 1 {
48 2 i2cSCLRam_PIN_IN();
49 2 bSCL = i2cSCLRam_PIN_STATUS;//P7_5
50 2 i2cSCLRam_PIN_OUT();
51 2 }
52 1 else
53 1 {
C51 COMPILER V7.50 I2C 07/03/2006 14:17:07 PAGE 2
54 2 i2cSCL_PIN_IN();
55 2 bSCL = i2cSCL_PIN_STATUS;//P7_7
56 2 i2cSCL_PIN_OUT();
57 2 }
58 1 return bSCL;
59 1 }
60
61 void i2cSetSDA(BOOL is_hl)
62 {
63 1 if (s_I2CSel)
64 1 {
65 2 i2cSDARam_PIN = is_hl;//P7_6
66 2 }
67 1 else
68 1 {
69 2 i2cSDA_PIN = is_hl;//P3_4
70 2 }
71 1 }
72
73 BIT i2cGetSDA(void)
74 {
75 1 BIT bSDA;
76 1 if (s_I2CSel)
77 1 {
78 2 i2cSDARam_PIN_IN();
79 2 bSDA = i2cSDARam_PIN_STATUS;//P7_6
80 2 i2cSDARam_PIN_OUT();
81 2 }
82 1 else
83 1 {
84 2 bSDA = i2cSDA_PIN_STATUS;//P3_4
85 2 }
86 1 return bSDA;
87 1 }
88
89 //////////////////////////////////////////////////////////////
90 // Delay 4us
91 //////////////////////////////////////////////////////////////
92 void i2c_Delay(void)
93 {
94 1 // MCU_Delay1us();
95 1 // MCU_Delay1us();
96 1 MCU_Delay1us();
97 1 MCU_Delay1us();
98 1 }
99
100
101 /////////////////////////////////////////
102 // Set I2C SCL pin high/low.
103 //
104 // Arguments: bSet - high/low bit
105 /////////////////////////////////////////
106 void i2cSetSCL_Chk(bit bSet)
107 {
108 1 BYTE ucDummy; // loop dummy
109 1
110 1 i2cSetSCL(bSet); // set SCL pin
111 1
112 1 if (bSet == _HIGH) // if set pin high
113 1 {
114 2 ucDummy = I2C_CHECK_PIN_DUMMY; // initialize dummy
115 2 while ((i2cGetSCL() == _LOW) && (ucDummy--)) ; // check SCL pull high
C51 COMPILER V7.50 I2C 07/03/2006 14:17:07 PAGE 3
116 2 } // if
117 1 }
118
119 /////////////////////////////////////////
120 // Set I2C SDA pin high/low
121 //
122 // Arguments: bSet - high/low bit
123 /////////////////////////////////////////
124 void i2cSetSDA_Chk(bit bSet)
125 {
126 1 BYTE ucDummy; // loop dummy
127 1
128 1 i2cSetSDA(bSet); // set SDA pin
129 1
130 1 if (bSet == _HIGH) // if set pin high
131 1 {
132 2 ucDummy = I2C_CHECK_PIN_DUMMY; // initialize dummy
133 2 while ((i2cGetSDA() == _LOW) && (ucDummy--)); // check SDA pull high
134 2 } // if
135 1 }
136
137 //////////////////////////////////////////////////////
138 // I2C start signal.
139 // <comment>
140 // SCL ________
141 // \_________
142 // SDA _____
143 // \____________
144 //
145 // Return value: None
146 //////////////////////////////////////////////////////
147 BOOL i2c_Start(void)
148 {
149 1 BOOL bStatus = TRUE; // success status
150 1
151 1 EA = 1; // disable all interrupt
152 1
153 1 i2cSetSDA_Chk(_HIGH);
154 1 i2c_Delay();
155 1 i2cSetSCL_Chk(_HIGH);
156 1 i2c_Delay();
157 1
158 1 // check pin error
159 1 if ((i2cGetSCL() == _LOW) || (i2cGetSDA() == _LOW))
160 1 {
161 2 bStatus = FALSE;
162 2 }
163 1 else // success
164 1 {
165 2 i2cSetSDA(_LOW);
166 2 i2c_Delay();
167 2 i2cSetSCL(_LOW);
168 2 }
169 1
170 1 EA = 1; // release EA bit
171 1
172 1 return bStatus;
173 1 }
174
175 /////////////////////////////////////////
176 // I2C stop signal.
177 // <comment>
C51 COMPILER V7.50 I2C 07/03/2006 14:17:07 PAGE 4
178 // ____________
179 // SCL _______/
180 // _________
181 // SDA __________/
182 /////////////////////////////////////////
183 void i2c_Stop(void)
184 {
185 1 EA = 1; // disable all interrupt
186 1
187 1 i2cSetSCL(_LOW);
188 1 i2c_Delay();
189 1 i2cSetSDA(_LOW);
190 1 i2c_Delay();
191 1 i2cSetSCL_Chk(_HIGH);
192 1 i2c_Delay();
193 1 i2cSetSDA_Chk(_HIGH);
194 1 i2c_Delay();
195 1
196 1 EA = 1; // release EA bit
197 1 }
198
199 //////////////////////////////////////////////////////////////////////////
200 // I2C receive byte from device.
201 //
202 // Return value: receive byte
203 //////////////////////////////////////////////////////////////////////////
204 BYTE i2c_ReceiveByte(BOOL bAck)
205 {
206 1 BYTE ucReceive = 0;
207 1 BYTE ucMask = 0x80;
208 1
209 1 EA = 1;
210 1
211 1 while (ucMask)
212 1 {
213 2 i2cSetSDA(_HIGH);
214 2 i2cSetSCL_Chk(_HIGH);
215 2 i2c_Delay();
216 2 if (i2cGetSDA() == _HIGH)
217 2 ucReceive |= ucMask;
218 2 i2cSetSCL(_LOW);
219 2 i2c_Delay();
220 2
221 2 ucMask >>= 1; // next
222 2 } // while
223 1
224 1 if (bAck) // acknowledge
225 1 i2cSetSDA_Chk(I2C_ACKNOWLEDGE);
226 1 else // non-acknowledge
227 1 i2cSetSDA_Chk(I2C_NON_ACKNOWLEDGE);
228 1
229 1 i2c_Delay();
230 1 i2cSetSCL_Chk(_HIGH);
231 1 i2c_Delay();
232 1 i2cSetSCL(_LOW);
233 1 i2c_Delay();
234 1
235 1 EA = 1;
236 1
237 1 return ucReceive;
238 1 }
239
C51 COMPILER V7.50 I2C 07/03/2006 14:17:07 PAGE 5
240 //////////////////////////////////////////////////////////////////////////
241 // I2C send byte to device.
242 //
243 // Arguments: ucVal - send byte
244 // Return value: I2C acknowledge bit
245 // I2C_ACKNOWLEDGE/I2C_NON_ACKNOWLEDGE
246 //////////////////////////////////////////////////////////////////////////
247 bit i2c_SendByte(BYTE ucVal)
248 {
249 1 BYTE ucMask = 0x80;
250 1 bit bAck; // acknowledge bit
251 1
252 1 EA = 1;
253 1
254 1 while (ucMask)
255 1 {
256 2 if (ucVal & ucMask)
257 2 i2cSetSDA_Chk(_HIGH);
258 2 else
259 2 i2cSetSDA_Chk(_LOW);
260 2 i2c_Delay();
261 2 i2cSetSCL_Chk(_HIGH); // clock
262 2 i2c_Delay();
263 2 i2cSetSCL(_LOW);
264 2 i2c_Delay();
265 2
266 2 ucMask >>= 1; // next
267 2 } // while
268 1
269 1 // recieve acknowledge
270 1 i2cSetSDA(_HIGH);
271 1 i2c_Delay();
272 1 i2cSetSCL_Chk(_HIGH);
273 1 i2c_Delay();
274 1 bAck = i2cGetSDA(); // recieve acknowlege
275 1 i2cSetSCL(_LOW);
276 1 i2c_Delay();
277 1
278 1 EA = 1;
279 1
280 1 return (bAck);
281 1 }
282
283 //////////////////////////////////////////////////////////////////////////
284 // I2C access start.
285 //
286 // Arguments: ucSlaveAdr - slave address
287 // trans_t - I2C_TRANS_WRITE/I2C_TRANS_READ
288 //////////////////////////////////////////////////////////////////////////
289 BOOL i2c_AccessStart(BYTE ucSlaveAdr, I2cIoTransType trans_t)
290 {
291 1 BYTE ucDummy; // loop dummy
292 1
293 1 //if ((ucSlaveAdr & 0xf0) == 0xA0)//RM_DEVICE_ADR
294 1 // s_I2CSel = TV_RAM;
295 1 //else
296 1 // s_I2CSel = MCU_RAM;//default
297 1
298 1 if (trans_t == I2C_TRANS_READ) // check i2c read or write
299 1 ucSlaveAdr = I2C_DEVICE_ADR_READ(ucSlaveAdr); // read
300 1 else
301 1 ucSlaveAdr = I2C_DEVICE_ADR_WRITE(ucSlaveAdr); // write
C51 COMPILER V7.50 I2C 07/03/2006 14:17:07 PAGE 6
302 1
303 1 ucDummy = I2C_ACCESS_DUMMY_TIME;
304 1 while (ucDummy--)
305 1 {
306 2 if (i2c_Start() == FALSE)
307 2 continue;
308 2
309 2 if (i2c_SendByte(ucSlaveAdr) == I2C_ACKNOWLEDGE) // check acknowledge
310 2 {
311 3 //if(g_FacSetting.bFactoryMode)
312 3 //FacIICtestHandler(ucSlaveAdr,TRUE);
313 3 return TRUE;
314 3 }
315 2
316 2 //FacIICtestHandler(ucSlaveAdr,FALSE);
317 2 i2c_Stop();
318 2
319 2 Delay1ms(1);
320 2 } // while
321 1
322 1 return FALSE;
323 1 }
324
325 /////////////////////////////////////////////////////////////////
326 // I2C read bytes from device.
327 //
328 // Arguments: ucSlaveAdr - slave address
329 // ucSubAdr - sub address
330 // pBuf - pointer of buffer
331 // ucBufLen - length of buffer
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -