📄 i2c.lst
字号:
207 void WriteI2Cn_(BYTE addr, BYTE *val, BYTE cnt)
208 {
209 1 BYTE i;
210 1
211 1 #ifdef INTERNAL_MCU
212 1 BYTE index;
213 1 index = *val;
214 1 val++;
215 1 if ( addr == TW88I2CAddress ) {
216 2 for ( i=1; i<cnt; i++)
217 2 WriteTW88(index++, *val++);
218 2 return;
219 2 }
220 1 #endif
221 1 I2CStart();
222 1 I2CWriteData(addr);
223 1
224 1 for(i=0; i<cnt; i++){
225 2 I2CWriteData(*(val+i)); //LJY050101
226 2 }
227 1 I2CStop();
228 1 }
229
230 // Hans
231 #ifdef SUPPORT_TV
232 void WriteI2Cn_ExternalDev(BYTE addr, BYTE index, BYTE *val, BYTE cnt)
233 {
234 1 BYTE i;
235 1
236 1 I2CStart();
237 1 I2CWriteData(addr);
238 1 I2CWriteData(index);
239 1
240 1 for(i=0; i<cnt; i++){
C51 COMPILER V7.50 I2C 04/01/2008 15:02:09 PAGE 5
241 2 I2CWriteData(*(val+i)); //LJY050101
242 2 }
243 1 I2CStop();
244 1 }
245 #endif
246
247 //BYTE I2CWriteData_Wait(BYTE value);
248
249 #ifdef SUPPORT_MSP_AUDIO
void I2CReadByteMSP(BYTE addr, BYTE index, BYTE *pd, BYTE cnt)
{
BYTE i;
I2CStart();
I2CWriteData_Wait(addr);
I2CWriteData(index);
for(i=0; i<cnt; i++) {
I2CWriteData(*(pd+i));
}
I2CStart();
I2CWriteData_Wait(addr | 0x01);
*pd = I2CReadDataWithACK();
*(pd+1) = I2CReadData();
I2CStop();
}
#endif
268
269
270
271 /*****************************************************************************/
272 /* */
273 /*****************************************************************************/
274 #ifdef SUPPORT_MSP_AUDIO
BYTE I2CWriteData_Wait(BYTE value)
{
WORD i;
BYTE ack;
for(i=0; i<8; i++, value<<=1) {
if(value & 0x80) I2C_SDA = 1;
else I2C_SDA = 0;
I2Cdelay();
I2C_SCL = 1; I2Cdelay();
I2C_SCL = 0;
}
I2C_SDA = 1; I2Cdelay();
I2C_SCL = 1; I2Cdelay();
i=0;
while(1) {
if( I2C_SCL ) break;
i++;
}
ack = I2C_SDA; //I2Cdelay();
I2C_SCL = 0;
return (1-ack);
}
#endif
300
301 #ifndef QVGA
302 void dd(void)
C51 COMPILER V7.50 I2C 04/01/2008 15:02:09 PAGE 6
303 {
304 1 }
305 #else
#define dd() I2Cdelay()
#endif
308
309 void I2CStart()
310 {
311 1 I2C_SDA = 1; dd();
312 1 I2C_SCL = 1; dd();
313 1 I2C_SDA = 0; dd();
314 1 I2C_SCL = 0;
315 1 }
316
317 void I2CStop()
318 {
319 1 I2C_SDA = 0; dd();
320 1 I2C_SCL = 1; dd();
321 1 I2C_SDA = 1;
322 1 }
323
324 void I2CWriteData(BYTE value)
325 {
326 1 /*
327 1 int i;
328 1
329 1 for(i=0; i<8; i++, value<<=1) {
330 1 I2C_SCL = 0;
331 1 I2Cdelay(); // HHY 2.04 in special case, it was unstable
332 1 if(value & 0x80) I2C_SDA = 1;
333 1 else I2C_SDA = 0;
334 1 I2Cdelay();
335 1 I2C_SCL = 1;
336 1 }
337 1 */
338 1
339 1 I2C_SCL=0; I2C_SDA=(value & 0x80)? 1:0; I2C_SCL=1; dd();
340 1 I2C_SCL=0; I2C_SDA=(value & 0x40)? 1:0; I2C_SCL=1; dd();
341 1 I2C_SCL=0; I2C_SDA=(value & 0x20)? 1:0; I2C_SCL=1; dd();
342 1 I2C_SCL=0; I2C_SDA=(value & 0x10)? 1:0; I2C_SCL=1; dd();
343 1
344 1 I2C_SCL=0; I2C_SDA=(value & 0x08)? 1:0; I2C_SCL=1; dd();
345 1 I2C_SCL=0; I2C_SDA=(value & 0x04)? 1:0; I2C_SCL=1; dd();
346 1 I2C_SCL=0; I2C_SDA=(value & 0x02)? 1:0; I2C_SCL=1; dd();
347 1 I2C_SCL=0; I2C_SDA=(value & 0x01)? 1:0; I2C_SCL=1; dd();
348 1
349 1
350 1 I2C_SCL = 0; // HHY 3.00
351 1 I2C_SCL = 0; // HHY 3.00
352 1 I2C_SCL = 0; // I2Cdelay();
353 1 I2C_SDA = 1; // I2Cdelay();
354 1
355 1 I2C_SCL = 1; // HHY 3.00
356 1 I2C_SCL = 1; // HHY 3.00
357 1 I2C_SCL = 1; // I2Cdelay();
358 1 I2C_SCL = 0;
359 1 }
360
361 BYTE I2CReadData()
362 {
363 1 int i;
364 1 BYTE value=0;
C51 COMPILER V7.50 I2C 04/01/2008 15:02:09 PAGE 7
365 1
366 1 I2C_SDA = 1; dd();
367 1 I2C_SCL = 0;
368 1
369 1 for(i=0; i<8; i++) {
370 2 I2C_SCL = 1;
371 2 value <<= 1;
372 2 if(I2C_SDA) value |= 1;
373 2 I2C_SCL = 0;
374 2 }
375 1 dd();
376 1
377 1 I2C_SCL = 1; // HHY 3.00
378 1 I2C_SCL = 1; // HHY 3.00
379 1 I2C_SCL = 1;
380 1 I2C_SCL = 0;
381 1
382 1 return value;
383 1
384 1 }
385
386 #ifdef SUPPORT_MSP_AUDIO
BYTE I2CReadDataWithACK()
{
int i;
BYTE value=0;
I2C_SDA = 1; I2Cdelay();
I2C_SCL = 0;
for(i=0; i<8; i++) {
I2C_SCL = 1;
value <<= 1;
if(I2C_SDA) value |= 1;
I2C_SCL = 0;
}
I2C_SDA = 0; I2Cdelay(); //ack
I2C_SCL = 1; I2Cdelay();
I2C_SCL = 0;
return value;
}
#endif
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 880 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- 36
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -