📄 twowire.lst
字号:
Set_SCL_High;
}
Set_SCL_Low;
Set_SDA_High; /* release data line for acknowledge */
Set_SCL_High; /* Send a clock for Acknowledge */
if(SDA_High) cAcknowledge = 1; /* No Acknowledge */
Set_SCL_Low; /* Finish Acknoledge */
return(cAcknowledge);
}
//--------------------------------------------------
// Read_Byte
// Read a byte from master with a acknowledge bit
C51 COMPILER V6.12 TWOWIRE 09/20/2007 22:17:29 PAGE 5
//--------------------------------------------------
uCHAR Read_Byte(void)
{
uCHAR ix, j;
uCHAR cRetval;
uCHAR cTWtrytime=0;
// cRetval = 0;
Set_SDA_High;
for(ix = 0; ix < 8; ix++)
{
Set_SCL_Low;
for(j = 0; j < TWD_SHORT_TIME; j++)
{ };
Set_SCL_High;
while(SCL_Low)
{ };
for(j = 0; j < TWD_SHORT_TIME; j++)
{ };
cRetval<<=1;
if(SDA_High) cRetval++;
}
for(j = 0; j < TWD_SHORT_TIME; j++)
{ };
Set_SCL_Low;
for(j = 0; j < TWD_SHORT_TIME; j++)
{ };
return cRetval;
}
#endif
280
281
282 //--------------------------------------------------
283 // Read Byte to Device
284 //--------------------------------------------------
285 uCHAR I2CReadByte(uCHAR cDevAddr, uCHAR cReg)
286 {
287 1 uCHAR cResult = 0;
288 1
289 1
290 1 /* write reg offset */
291 1 StartCondition();
292 1 if(Send_Byte(cDevAddr))
293 1 return 0; // Write address
294 1 if(Send_Byte(cReg))
295 1 return 0;
296 1
297 1 /* read data */
298 1 StartCondition();
299 1 if (Send_Byte(cDevAddr | 0x01)) // Read address
300 1 return 0;
301 1 cResult = Read_Byte(1);
302 1
C51 COMPILER V6.12 TWOWIRE 09/20/2007 22:17:29 PAGE 6
303 1 StopCondition();
304 1 return cResult;
305 1 }
306 //---------------------------------------------------
307
308 //--------------------------------------------------
309 // Write Byte to Device
310 //--------------------------------------------------
311
312 uCHAR I2CWriteByte(uCHAR cDevAddr, uCHAR cReg, uCHAR cData)
313 {
314 1
315 1
316 1 /* start condition */
317 1 StartCondition();
318 1 cDevAddr &= 0xFE; // Force WRITE address
319 1 /* send device ID and write data */
320 1 if(!Send_Byte(cDevAddr))
321 1 {
322 2 if(!Send_Byte(cReg))
323 2 {
324 3 if(!Send_Byte(cData))
325 3 {
326 4 StopCondition();
327 4 return(0); /* success */
328 4 }
329 3 }
330 2 }
331 1 StopCondition();
332 1 return(1);
333 1 }
334
335 //--------------------------------------------------
336 // 041901, Added for TWD Burst Write
337 // 1. PT8655X_Wr_Burst_A (Start + Slave_ID + Address)
338 // 2. PT8655X_Wr_Burst_D (Data)
339 // 3. PT8655X_Wr_Burst_P (stop)
340 //--------------------------------------------------
341
342 uCHAR twdWr_Burst_A(uCHAR cReg)
343 {
344 1 StartCondition();
345 1 if(!Send_Byte(TW101))
346 1 {
347 2 if(!Send_Byte(cReg))
348 2 {
349 3 return(0); //
350 3 }
351 2 }
352 1 return(1); //
353 1 }
354
355 void twdWr_Burst_D(uCHAR cData)
356 {
357 1 uCHAR ix;
358 1 //uCHAR cAcknowledge;
359 1 // uCHAR cTWtrytime=0;
360 1 // cAcknowledge = 0;
361 1
362 1 for(ix = 0; ix < 8; ix++)
363 1 {
364 2 Set_SCL2Low;
C51 COMPILER V6.12 TWOWIRE 09/20/2007 22:17:29 PAGE 7
365 2 if(cData&0x80)Set_SDA2High;
366 2 else Set_SDA2Low;
367 2 cData<<=1;
368 2 Set_SCL2High;
369 2 }
370 1 Set_SCL2Low;
371 1 Set_SDA2High; // release data line for acknowledge
372 1 Set_SCL2High; // Send a clock for Acknowledge
373 1 // if(SDA_High) cAcknowledge = 1; // No Acknowledge
374 1 Set_SCL2Low; // Finish Acknoledge
375 1
376 1 // return(cAcknowledge);
377 1
378 1 }
379 // #endif
380 void twdWr_Burst_P(void)
381 {
382 1 StopCondition();
383 1 }
384 /*
385 //twdWriteTable() is used for burst write for
386 //any I2C standar device
387 #if VIDEO_AVAILABLE
388 #ifdef VIDEO_SAA7114
389 #define EOT -1
390 BOOL twdWriteTable(uCHAR cDevAddr, char *pString)
391 {
392 uCHAR cReg=0;
393 uCHAR cNum=0;
394 while(*pString != EOT)
395 {
396 cReg = *pString++;
397 cNum = *pString++;
398 if(!I2CWriteBytes(cDevAddr, cReg, cNum, pString))
399 break;
400 else
401 pString += cNum;
402 }
403 }
404 #endif
405 #endif
406 */
407 //--------------------------------------------------
408 // Read Multiple Bytes to Device
409 //--------------------------------------------------
410 /*
411 void twdDelay(uWORD wLoops)
412 {
413 uWORD wTemp;
414
415 while (wLoops--) {
416 wTemp = 1000/6; // one loop below takes about 11 us
417 while (wTemp--);
418 }
419 }
420
421 */
422 void twdDelay1(uWORD wLoops)
423 {
424 1 uWORD wTemp;
425 1
426 1 while (wLoops--) {
C51 COMPILER V6.12 TWOWIRE 09/20/2007 22:17:29 PAGE 8
427 2 wTemp = 1000/6; // one loop below takes about 11 us
428 2 while (wTemp--);
429 2 }
430 1 }
431
432 // OSD config register Write
433 void OSDCfgWr(uCHAR index,uCHAR dat) ///OSD_CFG_INDEX=0xa0;
434 {
435 1 I2CWriteByte(TW101,OSD_CFG_INDEX,index);
436 1 I2CWriteByte(TW101,OSD_CFG_DATA,dat);
437 1 }
438
439
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 530 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 3
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 + -