亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? i2c_drv.c

?? 一款車載DVD的車機源程序(正在生成中的哦)
?? C
字號:
/***************************************************************************
Project  :  Car two ting dvd System
Compiler :  ST7 HiCross C (HiWARE)
Module   :  autos.c 
Version  :  V 1.0
Created  :  24 11, 2005
Author   :  tomi / SA
Description
         -  I2c.  
Modified
		 - tomi
***************************************************************************/
#include "I2c_drv.h"
#include "Libr.h"
#include "St72321.h"
#include "IOport.h"
#include "TW101reg.h"

static void StartCondition(void);
static void StopCondition(void);
static unsigned char Send_Byte(unsigned char cData);
static unsigned char Read_Byte(unsigned char cNum);
unsigned char I2CReadByte(unsigned char cDevAddr, unsigned char cReg);
unsigned char I2CReadByte_no_sub(unsigned char cDevAddr);
unsigned char I2CWriteByte(unsigned char cDevAddr, unsigned char cReg, unsigned char cData);
unsigned char I2CReadBytes(unsigned char cDevAddr, unsigned char cReg, unsigned char *pString, unsigned char cNum);
unsigned char I2CWriteByte_noAddrsss(unsigned char cDevAddr,unsigned char cData);
unsigned char I2CWrite_nBytes(unsigned char cDevAddr,unsigned char *buff,unsigned char num);
/**********************************************************
Function:I2c start command
**********************************************************/
static void StartCondition(void)
{
    unsigned char ix;
    unsigned char cTWtrytime=0;
    while(++cTWtrytime)
    {

        Set_SDA_High;
        Set_SCL_High;        /* make sure two line is release */
        for(ix = 0; ix < TWD_LONG_TIME; ix++)
        { };  /* Delay 12us */

        Set_SDA_Low;
        for(ix = 0; ix < TWD_LONG_TIME; ix++)
        { };  /* Delay 12us */

        if((SCL_High)&&(SDA_Low))
            break;
    }

    for(ix = 0; ix < TWD_SHORT_TIME; ix++)
    { };  /* Delay 12us */
}
/**********************************************************
Function:I2c stop command
**********************************************************/
static void StopCondition(void)
{
    unsigned char ix;
   	unsigned char cTWtrytime=0;

    Set_SDA_Low;
    Set_SCL_High;
    for(ix = 0; ix < TWD_SHORT_TIME; ix++)
    { };  /* delay 12us */

    while(SCL_Low && ++cTWtrytime)
    { };

    for(ix = 0; ix < TWD_SHORT_TIME; ix++)
    { };  /* delay 12us */

    Set_SDA_High;
    for(ix = 0; ix < TWD_SHORT_TIME; ix++)
    { };  /* delay 12us */
}
/**********************************************************
Function:I2c send one byte to the slower
**********************************************************/
static unsigned char Send_Byte(unsigned char cData)
{
    unsigned char ix, j, cAcknowledge;
    unsigned char cTWtrytime=0;

    cAcknowledge = 0;

    for(ix = 0; ix < 8; ix++)
    {
        Set_SCL_Low;
        for(j = 0; j < TWD_SHORT_TIME; j++)
        { };

        if(cData&0x80)Set_SDA_High;
		else Set_SDA_Low;
		cData<<=1;

        for(j = 0; j < TWD_SHORT_TIME; j++)
        { };

        Set_SCL_High;
        while(SCL_Low && ++cTWtrytime)
        { };

        for(j = 0; j < TWD_SHORT_TIME; j++)
        { };
    }
    for(j = 0; j < TWD_SHORT_TIME; j++)
    { };

    Set_SCL_Low;
    for(j = 0; j < TWD_SHORT_TIME; j++)
    { };

    Set_SDA_High;                /* release data line for acknowledge */
    for(j = 0; j < TWD_SHORT_TIME; j++)
    { };

	SET_SDA_AS_INPUT;	/*This is tomi new adding,because the ST IO not same as the 8051*/
	for(j = 0; j < TWD_SHORT_TIME; j++)
    { };
	
    Set_SCL_High;                /* Send a clock for Acknowledge */
    while(SCL_Low)
    { };
    for(j = 0; j < TWD_SHORT_TIME; j++)
    { };

    if(SDA_High) 
       cAcknowledge = 1; /* No Acknowledge */
    Set_SCL_Low;                   /* Finish Acknoledge */
    for(j = 0; j < TWD_SHORT_TIME; j++)
    { };

    SET_SDA_AS_OUTPUT;	/*This is tomi new adding,because the ST IO not same as the 8051*/
    for(j = 0; j < TWD_SHORT_TIME; j++)
    { };

    return(cAcknowledge);
}
/**************************************************************
Function:Read a byte from slower with a acknowledge bit
**************************************************************/
static unsigned char Read_Byte(unsigned char cNum)
{
    unsigned char ix, j;
    unsigned char cRetval=0;
	SET_SDA_AS_INPUT;	/*This is tomi new adding,because the ST IO not same as the 8051*/
	for(j=0;j<TWD_SHORT_TIME;j++)
		{};
	
    for(ix=0;ix<8;ix++){
          Set_SCL_High;
          while(SCL_Low){};
          for(j=0;j<TWD_SHORT_TIME;j++){};
          cRetval = (SDA_High)? (cRetval|(1<<(7-ix))):cRetval ;  /* MSB First */
	  Set_SCL_Low;
     }

     if(cNum==1)
     	Set_SDA_High;
     else
		Set_SDA_Low;
     //SDA = (cNum==1) 1:0;
     Set_SCL_High;
     while(SCL_Low){};
     for(j = 0; j < TWD_SHORT_TIME; j++)
     { };

    Set_SCL_Low;
    
	SET_SDA_AS_OUTPUT;	/*This is tomi new adding,because the ST IO not same as the 8051*/
	for(j = 0; j < TWD_SHORT_TIME; j++)
     { };
	
    Set_SDA_High;
    for(j = 0; j < TWD_SHORT_TIME; j++)
    { };

    return cRetval;
}
/*******************************************************************
Function:Maker read one byte from the slower's appointed address
*******************************************************************/
unsigned char I2CReadByte(unsigned char cDevAddr, unsigned char cReg)
{
    unsigned char cResult = 0;

	/* write reg offset */
    StartCondition();
    if(Send_Byte(cDevAddr))
	return 0;  // Write address
    if(Send_Byte(cReg))
	return 0;

    /* read data */
    StartCondition();
    if (Send_Byte(cDevAddr | 0x01)) // Read address
	return 0;
    cResult = Read_Byte(1);

    StopCondition();
    return cResult;
}
/*******************************************************************
Function:
*******************************************************************/
unsigned char I2CReadByte_no_sub(unsigned char cDevAddr)
{
	unsigned char cResult = 0;
	/* write reg offset */
    StartCondition();
    if(Send_Byte(cDevAddr))
	return 0;  // Write address

	/* read data */
    StartCondition();
    if (Send_Byte(cDevAddr | 0x01)) // Read address
	return 0;
    cResult = Read_Byte(1);

    StopCondition();
    return cResult;
}
/*******************************************************************
Function:Maker send one byte to the slower's appointed address
*******************************************************************/
unsigned char I2CWriteByte(unsigned char cDevAddr, unsigned char cReg, unsigned char cData)
{
	/* start condition */
    StartCondition();
  	cDevAddr &= 0xFE;   // Force WRITE address
    /* send device ID and write data */
    if(!Send_Byte(cDevAddr))
    {
        if(!Send_Byte(cReg))
        {
            if(!Send_Byte(cData))
            {
                StopCondition();
                return(0);      /* success */
            }
        }
    }
    StopCondition();
    return(1);
}
/*********************************************************************
Function:Read more than one byte from the slower to the appointed address
*********************************************************************/
unsigned char I2CReadBytes(unsigned char cDevAddr, unsigned char cReg, unsigned char *pString, unsigned char cNum)
{
	/* write reg offset */
	StartCondition();
  if(Send_Byte(cDevAddr))
		return 0;  // Write address
  if(Send_Byte(cReg))
		return 0;

	/* read data */
  StartCondition();
  if (Send_Byte(cDevAddr | 0x01)) // Read address
		return 0;
	while(cNum)
  {
  	*pString++ = Read_Byte(cNum);
		cNum--;
	}

 	StopCondition();
  return 1;
}
/*********************************************************************
Function:Send one byte to the slower no the appointed address
*********************************************************************/
unsigned char I2CWriteByte_noAddrsss(unsigned char cDevAddr,unsigned char cData)
{
	/* start condition */
    StartCondition();
  	cDevAddr &= 0xFE;   // Force WRITE address
    /* send device ID and write data */
    if(!Send_Byte(cDevAddr))
    {
		if(!Send_Byte(cData))
        {
        	StopCondition();
            return(0);      /* success */
        }
    }
    StopCondition();
    return(1);
	
}
/****************************************************************
Function:I2c write n bytes
****************************************************************/
unsigned char I2CWrite_nBytes(unsigned char cDevAddr,unsigned char *buff,unsigned char num)
{
	unsigned char i;
	unsigned char Ack;
	/* start condition */
    StartCondition();
	cDevAddr &= 0xFE;   // Force WRITE address
    /* send device ID and write data */
    Ack = Send_Byte(cDevAddr);
    if(!Ack)
    	{
		for (i=0; i<num; i++)
		{
			if (!Ack)
			Ack = Send_Byte (*buff++);
		}
		StopCondition();
        return(0);      /* success */
    	}
	StopCondition();
    return(1);
}
/***********************************************************
Function:I2C write have sub address and write n bytes
***********************************************************/
unsigned char I2C_write_sub(unsigned char cDevAddr,unsigned char sub_addr,unsigned char *buff,unsigned char num)
{
	unsigned char i;
	unsigned char Ack;
	/* start condition */
    StartCondition();
	cDevAddr &= 0xFE;   // Force WRITE address
    /* send device ID and write data */
    Ack = Send_Byte(cDevAddr);
    if(!Ack)
    	Ack = Send_Byte(sub_addr);
    if(!Ack)
    	{
		for (i=0; i<num; i++)
		{
			if (!Ack)
			Ack = Send_Byte (*buff++);
		}
		StopCondition();
        return(0);      /* success */
    	}
	StopCondition();
    return(1);
}
/***********************************************************
Function:Configure the T100's A0/A1 IO port
***********************************************************/
void OSDCfgWr(unsigned char  index,unsigned char dat)
{
 I2CWriteByte(TW101,OSD_CFG_INDEX,index);
 I2CWriteByte(TW101,OSD_CFG_DATA,dat);
}

unsigned char twdWr_Burst_A(unsigned char cReg)
{
    StartCondition();
    if(!Send_Byte(TW101))
    {
        if(!Send_Byte(cReg))
        {
            return(0);               //
        }
    }
    return(1);                  //
}

void twdWr_Burst_D(unsigned char cData)
{
    unsigned char ix;

    for(ix = 0; ix < 8; ix++)
    {
        Set_SCL_Low;
        if(cData&0x80)Set_SDA_High;
		else Set_SDA_Low;
		cData<<=1;
        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);
}
void twdWr_Burst_P(void)
{
    StopCondition();
}

void twdDelay(unsigned short wLoops)
{
	unsigned short wTemp;

    while (wLoops--) {
	    wTemp = 1000/6;	// one loop below takes about 11 us
        while (wTemp--);
    }
}






?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩三级.com| 国产区在线观看成人精品 | 欧美激情一二三区| 亚洲人成网站在线| 懂色av中文字幕一区二区三区 | 欧美aa在线视频| 成人免费视频播放| 热久久免费视频| 国产精品蜜臀在线观看| 国产一区 二区| 日韩精品欧美成人高清一区二区| 国产精品久久久久天堂| 欧美一级理论片| 在线观看亚洲成人| 成人一二三区视频| 欧洲精品一区二区| 日本在线播放一区二区三区| 另类专区欧美蜜桃臀第一页| 久国产精品韩国三级视频| 欧美一区二区视频网站| 欧美在线免费观看亚洲| 99精品国产热久久91蜜凸| 国产盗摄精品一区二区三区在线 | 国产欧美视频在线观看| 91麻豆精品国产自产在线观看一区| 成人国产精品免费观看视频| 国产综合久久久久久鬼色 | 日本vs亚洲vs韩国一区三区二区 | 日本午夜一本久久久综合| 亚洲精品伦理在线| 亚洲精品水蜜桃| 亚洲视频免费观看| 中文字幕日韩欧美一区二区三区| 亚洲国产成人自拍| 国产精品视频看| 国产精品久久久久三级| 国产精品传媒入口麻豆| 国产精品伦理一区二区| 国产精品久久福利| 中文字幕中文乱码欧美一区二区 | 国产精品毛片无遮挡高清| 久久精品视频在线看| 久久蜜桃av一区精品变态类天堂 | 国产精品久久久久久久岛一牛影视| 欧美韩国日本不卡| 国产精品乱码人人做人人爱| 日本一区二区三区四区在线视频| 欧美国产欧美综合| 国产精品美女一区二区三区 | 伊人一区二区三区| 亚洲线精品一区二区三区 | 日产欧产美韩系列久久99| 青青青爽久久午夜综合久久午夜| 九色综合狠狠综合久久| 国产精品一品二品| 91丨porny丨户外露出| 在线观看日韩高清av| 欧美妇女性影城| 欧美草草影院在线视频| 国产欧美日韩一区二区三区在线观看| 久久精品免视看| 亚洲欧美日韩小说| 香蕉影视欧美成人| 久久99久久精品| 成人av在线观| 欧美三级乱人伦电影| 日韩欧美一区在线| 亚洲国产成人私人影院tom| 亚洲视频在线一区观看| 欧美一卡二卡在线| 精品一区二区三区久久| 午夜精品久久久久久久久| 免费观看在线色综合| 国产中文字幕精品| 91女厕偷拍女厕偷拍高清| 3d成人h动漫网站入口| 久久久av毛片精品| 一区二区三区不卡在线观看| 麻豆视频观看网址久久| 不卡区在线中文字幕| 在线成人免费观看| 国产性色一区二区| 首页欧美精品中文字幕| 懂色一区二区三区免费观看| 欧美嫩在线观看| 日本一区二区不卡视频| 天堂av在线一区| 99久久精品99国产精品| 欧美成人官网二区| 亚洲午夜精品17c| 亚洲国产日韩一区二区| 亚洲色图在线看| 成人a区在线观看| 欧美美女激情18p| 国产亚洲欧美日韩在线一区| 一区二区三区精品在线观看| 国产专区综合网| 欧美一区二区三区在| 成人免费视频在线观看| 久久99热国产| 欧美色图天堂网| 国产精品国产三级国产a| 蜜臀a∨国产成人精品| 色哟哟一区二区三区| 久久精品一区蜜桃臀影院| 五月天视频一区| 色婷婷av一区二区三区软件 | 国产日韩欧美精品在线| 免费在线观看不卡| 欧美偷拍一区二区| 国产精品理论在线观看| 国产一区二区看久久| 91精品久久久久久久99蜜桃| 一区二区视频在线看| 成人av片在线观看| 国产日产亚洲精品系列| 久久99精品国产麻豆婷婷| 欧美福利视频一区| 性欧美疯狂xxxxbbbb| 欧美日韩一区二区在线观看视频| 17c精品麻豆一区二区免费| 日本特黄久久久高潮| 在线观看日韩电影| 国产精品全国免费观看高清 | 久久久国际精品| 久久精品国产99| 欧美一级生活片| 久久久天堂av| 亚洲国产精品激情在线观看| 成人欧美一区二区三区1314| 亚洲日本一区二区| 色哟哟在线观看一区二区三区| 在线精品观看国产| 亚洲天堂av一区| 成人精品免费看| 中文在线一区二区| 波多野结衣视频一区| 中文一区在线播放| 成a人片亚洲日本久久| 国产精品看片你懂得| 99综合电影在线视频| 国产精品家庭影院| 色悠悠久久综合| 天天色综合成人网| 欧美一区二区三区公司| 久久97超碰国产精品超碰| 2024国产精品| 成人开心网精品视频| 亚洲欧美偷拍三级| 欧美优质美女网站| 日韩中文字幕一区二区三区| 91精品国产综合久久久蜜臀图片| 免费看日韩精品| 久久久久久久久久久久久久久99| 成人av在线资源网站| 一级精品视频在线观看宜春院| 欧美人与性动xxxx| 精品夜夜嗨av一区二区三区| 国产亚洲精品aa午夜观看| 99vv1com这只有精品| 偷拍亚洲欧洲综合| 久久久久久久久97黄色工厂| 99在线热播精品免费| 亚洲www啪成人一区二区麻豆| 欧美不卡视频一区| voyeur盗摄精品| 五月激情综合网| 欧美国产日韩亚洲一区| 欧美日韩五月天| 国产资源在线一区| 亚洲一级二级三级在线免费观看| 日韩一卡二卡三卡国产欧美| 国产丶欧美丶日本不卡视频| 亚洲综合免费观看高清完整版在线 | 91美女片黄在线| 日产国产高清一区二区三区| 国产日韩欧美综合在线| 99久久精品国产观看| 久久精品国产亚洲a| 亚洲欧洲av另类| 日韩免费高清视频| 色婷婷久久综合| 国产综合色产在线精品| 亚洲最快最全在线视频| 久久女同精品一区二区| 欧美日韩亚洲高清一区二区| 成人黄页毛片网站| 男人的天堂亚洲一区| 日韩美女视频一区二区| 精品国产乱码久久久久久久久 | 91年精品国产| 精品一区二区三区的国产在线播放| 亚洲视频一区二区在线观看| 日韩色在线观看| 欧洲精品在线观看| 成人a免费在线看| 黄色日韩三级电影| 日韩精品福利网| 亚洲伊人色欲综合网| 中文字幕欧美国产|