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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? usb_to_i2c.c

?? usb+源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號(hào):
    		//printf("\r\nRead Buff1: %s", RxBuffer);
		USB_I2C_ReqOut(RxBuffer, RxLen);	
	
	}else if (rxData->bCmd == I2C_CMD_WRITE){
		
		USB_I2C_Revert(rxData);	
	}else{
		printf("\r\n Command: Unknown I2c Command");
	}
}



u8 USB_I2C_CheckTimerEvent(unsigned long  Timer, I2C_TypeDef* I2Cx, unsigned long I2C_EVENT)
{

	while((Timer--)&&(!I2C_CheckEvent(I2Cx, I2C_EVENT)));              // 檢查I2C的EV5狀態(tài)并清除
	if(Timer ==0)
	{
		return (1); 
	}

	return (0);
}
u16 USB_I2C_Read(Usb_I2C_TRANSACTION*  I2c_Data, u8* pBuffer)
{
	u16 len;	
	u8 ErrorCount = 0;
	len = I2c_Data->nBufferLength;
        
 //#if I2cConfigDebug
	printf("\r\nI2C Read Parameter:");
	printf("\r\n   Slave Address: 0x%x", I2c_Data->nSlaveDeviceAddress);
	printf("\r\n  MemAddr Length: %d bit", I2c_Data->nMemoryAddressLength);
	printf("\r\n  Memory Address: 0x%x", I2c_Data->nMemoryAddress);
	printf("\r\n   Buffer Length: %d Bytes", I2c_Data->nBufferLength);
 ///#endif 	
	/* Send STRAT condition */
	I2C_GenerateSTART(I2C_1, ENABLE);  //I2C產(chǎn)生起始條件

	/* Test on EV5 and clear it */
	//while(!I2C_CheckEvent(I2C_EE, I2C_EVENT_MASTER_MODE_SELECT);  //設(shè)置主機(jī)模式
	if(USB_I2C_CheckTimerEvent(ulTimeOut_Time, I2C_1,  I2C_EVENT_MASTER_MODE_SELECT))
	{
		ErrorCount++;
		return 0;
	}

	/* Send EEPROM address for write */
	I2C_Send7bitAddress(I2C_1, I2c_Data->nSlaveDeviceAddress, I2C_Direction_Transmitter); //發(fā)送要操作的器件地址
  

	/* Test on EV6 and clear it */
	//while(!I2C_CheckEvent(I2C_EE, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
	if(USB_I2C_CheckTimerEvent(ulTimeOut_Time, I2C_1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
	{
		ErrorCount++; 
		return 0;
	}

	if(I2c_Data->nMemoryAddressLength == 8)
	{
  
		/* Send the EEPROM's internal address to write to : only one byte Address */
		I2C_SendData(I2C_1, (u8)I2c_Data->nMemoryAddress);  //發(fā)送被操作的地址,24C08的地址為一個(gè)8位
	}
	else
	{
		/* Send the EEPROM's internal address to write to : MSB of the address first */
		I2C_SendData(I2C_1, (u8)((I2c_Data->nMemoryAddress & 0xFF00) >> 8)); //發(fā)送要寫入的地址,因?yàn)?4C32的地址為兩個(gè)字節(jié),所以先發(fā)送高8位的地址

		/* Test on EV8 and clear it */
		//while(!I2C_CheckEvent(I2C_EE, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
		if(USB_I2C_CheckTimerEvent(ulTimeOut_Time, I2C_1,  I2C_EVENT_MASTER_BYTE_TRANSMITTED))
		{	
			ErrorCount++;
			return 0;
		}
		/* Send the EEPROM's internal address to write to : LSB of the address */
		I2C_SendData(I2C_1, (u8)(I2c_Data->nMemoryAddress & 0x00FF));  //因?yàn)?4C32的地址為兩個(gè)字節(jié),后發(fā)送低8位的地址 
	}
  
	/* Test on EV8 and clear it */
	//while(!I2C_CheckEvent(I2C_EE, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); //等待發(fā)送結(jié)束
	if(USB_I2C_CheckTimerEvent(ulTimeOut_Time, I2C_1, I2C_EVENT_MASTER_BYTE_TRANSMITTED))
	{
		ErrorCount++; 
		return 0;
	}
  
	/* Send STRAT condition a second time */  
	I2C_GenerateSTART(I2C_1, ENABLE);  //重新產(chǎn)生起始條件
  
	/* Test on EV5 and clear it */
	if(USB_I2C_CheckTimerEvent(ulTimeOut_Time, I2C_1, I2C_EVENT_MASTER_MODE_SELECT))
	{
		ErrorCount++; 
		return 0;
	}
  
	/* Send EEPROM address for read */
	I2C_Send7bitAddress(I2C_1, I2c_Data->nSlaveDeviceAddress, I2C_Direction_Receiver);   //發(fā)送要操作的器件地址
  
	/* Test on EV6 and clear it */
	if(USB_I2C_CheckTimerEvent(ulTimeOut_Time,I2C_1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED))  //等待接收
	{
		ErrorCount++; 
		return 0;
	}
  
  /* While there is data to be read */
  while(len)  //每讀到一個(gè)字節(jié)就減1,為0則讀取完成
  {
    if(len == 1)
    {
      /* Disable Acknowledgement */
      I2C_AcknowledgeConfig(I2C_1, DISABLE); //設(shè)置應(yīng)答位ACK為無效
      
      /* Send STOP Condition */
      I2C_GenerateSTOP(I2C_1, ENABLE); //產(chǎn)生停止條件
    }

    /* Test on EV7 and clear it */
    if(I2C_CheckEvent(I2C_1, I2C_EVENT_MASTER_BYTE_RECEIVED))  
    {      
      /* Read a byte from the EEPROM */
      *pBuffer = I2C_ReceiveData(I2C_1); //按長度讀取

      /* Point to the next location where the byte read will be saved */
      pBuffer++; 
      
      /* Decrement the read bytes counter */
      len--;     //每讀到一個(gè)字節(jié)就減1,為0則讀取完成   
    }   
  }

  /* Enable Acknowledgement to be ready for another reception */
  I2C_AcknowledgeConfig(I2C_1, ENABLE);  //使能應(yīng)答位ACK為有效
  //printf("\r\n   Buffer Length: %d Bytes", I2c_Data->nBufferLength);
  printf("\r\n     Read EEPROM: %d Bytes", I2c_Data->nBufferLength);
    return I2c_Data->nBufferLength;
}



/**
  * @brief  Writes buffer of data to the I2C EEPROM.
  * @param  pBuffer : pointer to the buffer  containing the data to be 
  *   written to the EEPROM.
  * @param  WriteAddr : EEPROM's internal address to write to.
  * @param  NumByteToWrite : number of bytes to write to the EEPROM.
  * @retval None
  */
#if 0
void USB_I2C_Write(Usb_I2C_TRANSACTION*  I2c_Data, uint8_t* pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite)
{
  uint8_t NumOfPage = 0, NumOfSingle = 0, count = 0;
  uint16_t Addr = 0;

 #if I2cConfigDebug
	printf("\r\nI2C Write Parameter:");
	printf("\r\n   Slave Address: 0x%x", I2c_Data->nSlaveDeviceAddress);
	printf("\r\n  MemAddr Length: %d bit", I2c_Data->nMemoryAddressLength);
	printf("\r\n  Memory Address: 0x%x", I2c_Data->nMemoryAddress);
	printf("\r\n   Buffer Length: %d Bytes", I2c_Data->nBufferLength);
 #endif 	


  Addr = WriteAddr % I2C_FLASH_PAGESIZE; //得到當(dāng)前的起始地址所在頁的地址
  count = I2C_FLASH_PAGESIZE - Addr;	//用當(dāng)前頁大小減去起始頁地址,得到要在這個(gè)頁里寫入的字節(jié)數(shù)
  NumOfPage =  NumByteToWrite / I2C_FLASH_PAGESIZE; //需寫入的整數(shù)頁
  NumOfSingle = NumByteToWrite % I2C_FLASH_PAGESIZE; //剩下的不到一頁的字節(jié)數(shù)
 
  /* If WriteAddr is I2C_FLASH_PAGESIZE aligned  */
  if(Addr == 0) //如果剛好起始地址為一頁的開始
  {
    /* If NumByteToWrite < I2C_FLASH_PAGESIZE */
    if(NumOfPage == 0) 
    {
      I2C_EE_PageWrite(pBuffer, WriteAddr, NumOfSingle);
      I2C_EE_WaitEepromStandbyState();
    }
    /* If NumByteToWrite > I2C_FLASH_PAGESIZE */
    else  
    {
      while(NumOfPage--)
      {
        I2C_EE_PageWrite(pBuffer, WriteAddr, I2C_FLASH_PAGESIZE); 
        I2C_EE_WaitEepromStandbyState();
        WriteAddr +=  I2C_FLASH_PAGESIZE;
        pBuffer += I2C_FLASH_PAGESIZE;
      }

      if(NumOfSingle!=0)
      {
        I2C_EE_PageWrite(pBuffer, WriteAddr, NumOfSingle);
        I2C_EE_WaitEepromStandbyState();
      }
    }
  }
  /* If WriteAddr is not I2C_FLASH_PAGESIZE aligned  */
  else 
  {
    /* If NumByteToWrite < I2C_FLASH_PAGESIZE */
    if(NumOfPage== 0) 
    {
      /* If the number of data to be written is more than the remaining space 
      in the current page: */
      if (NumByteToWrite > count)
      {
        /* Write the data conained in same page */
        I2C_EE_PageWrite(pBuffer, WriteAddr, count);
        I2C_EE_WaitEepromStandbyState();      
        
        /* Write the remaining data in the following page */
        I2C_EE_PageWrite((uint8_t*)(pBuffer + count), (WriteAddr + count), (NumByteToWrite - count));
        I2C_EE_WaitEepromStandbyState();        
      }      
      else      
      {
        I2C_EE_PageWrite(pBuffer, WriteAddr, NumOfSingle);
        I2C_EE_WaitEepromStandbyState();        
      }     
    }
    /* If NumByteToWrite > I2C_FLASH_PAGESIZE */
    else
    {
      NumByteToWrite -= count;
      NumOfPage =  NumByteToWrite / I2C_FLASH_PAGESIZE;
      NumOfSingle = NumByteToWrite % I2C_FLASH_PAGESIZE;
      
      if(count != 0)
      {  
        I2C_EE_PageWrite(pBuffer, WriteAddr, count);
        I2C_EE_WaitEepromStandbyState();
        WriteAddr += count;
        pBuffer += count;
      } 
      
      while(NumOfPage--)
      {
        I2C_EE_PageWrite(pBuffer, WriteAddr, I2C_FLASH_PAGESIZE);
        I2C_EE_WaitEepromStandbyState();
        WriteAddr +=  I2C_FLASH_PAGESIZE;
        pBuffer += I2C_FLASH_PAGESIZE;  
      }
      if(NumOfSingle != 0)
      {
        I2C_EE_PageWrite(pBuffer, WriteAddr, NumOfSingle); 
        I2C_EE_WaitEepromStandbyState();
      }
    }
  }  
}


#endif




/**
  * @brief  Writes one byte to the I2C EEPROM.
  * @param  pBuffer : pointer to the buffer  containing the data to be 
  *   written to the EEPROM.
  * @param  WriteAddr : EEPROM's internal address to write to.
  * @retval None
  */

unsigned char USB_I2C_ByteWrite(unsigned char DevAddr, unsigned char * pBuffer, unsigned short WriteAddr)
{
    unsigned char ErrorCount = 0;
	
  /* Send STRAT condition */
  I2C_GenerateSTART(I2C_1, ENABLE);  //I2C產(chǎn)生起始條件

  /* Test on EV5 and clear it */
  //while(!I2C_CheckEvent(I2C_EE, I2C_EVENT_MASTER_MODE_SELECT);  //設(shè)置主機(jī)模式
  if(USB_I2C_CheckTimerEvent(ulTimeOut_Time, I2C_1,  I2C_EVENT_MASTER_MODE_SELECT))
  {
   	ErrorCount++; 
  }


  /* Send EEPROM address for write */
  I2C_Send7bitAddress(I2C_1, DevAddr, I2C_Direction_Transmitter); //發(fā)送要操作的器件地址
  
  /* Test on EV6 and clear it */
  //while(!I2C_CheckEvent(I2C_EE, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
  if(USB_I2C_CheckTimerEvent(ulTimeOut_Time, I2C_1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
  {
   	ErrorCount++; 
  }

#ifdef EE_M24C08
  
  /* Send the EEPROM's internal address to write to : only one byte Address */
  I2C_SendData(I2C_1, WriteAddr);  //發(fā)送被操作的地址,24C08的地址為一個(gè)8位
  
#elif defined(EE_M24C64_32)
  
  /* Send the EEPROM's internal address to write to : MSB of the address first */
  I2C_SendData(I2C_1, (uint8_t)((WriteAddr & 0xFF00) >> 8)); //發(fā)送要寫入的地址,因?yàn)?4C32的地址為兩個(gè)字節(jié),所以先發(fā)送高8位的地址

  /* Test on EV8 and clear it */
  //while(!I2C_CheckEvent(I2C_EE, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
  if(USB_I2C_CheckTimerEvent(ulTimeOut_Time, I2C_1,  I2C_EVENT_MASTER_BYTE_TRANSMITTED))
   	ErrorCount++;
  
  /* Send the EEPROM's internal address to write to : LSB of the address */
  I2C_SendData(I2C_1, (uint8_t)(WriteAddr & 0x00FF));  //因?yàn)?4C32的地址為兩個(gè)字節(jié),后發(fā)送低8位的地址 
    
#endif /* EE_M24C08 */  
  
  /* Test on EV8 and clear it */
  //while(!I2C_CheckEvent(I2C_EE, I2C_EVENT_MASTER_BYTE_TRANSMITTED));  //等待發(fā)送字節(jié)結(jié)束
  if(USB_I2C_CheckTimerEvent(ulTimeOut_Time, I2C_1,  I2C_EVENT_MASTER_BYTE_TRANSMITTED))  //等待發(fā)送字節(jié)結(jié)束
  {
   	ErrorCount++; 
  }
  
  /* Send the byte to be written */
  I2C_SendData(I2C_1, *pBuffer); //發(fā)送被寫數(shù)據(jù)
   

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品青草久久| 亚洲黄色小说网站| 91免费版pro下载短视频| 日韩影院在线观看| 亚洲欧洲av另类| 精品sm在线观看| 在线观看国产日韩| 成人免费高清在线| 经典三级一区二区| 偷拍与自拍一区| 亚洲精品亚洲人成人网 | 日本乱码高清不卡字幕| 欧美视频你懂的| 色综合久久66| 成人综合日日夜夜| 久久精品国产99| 日日嗨av一区二区三区四区| 亚洲另类春色校园小说| 亚洲欧洲成人自拍| 国产精品午夜电影| 国产三级三级三级精品8ⅰ区| 91精品国产综合久久久久久| 在线精品视频一区二区三四| 99久久综合精品| 豆国产96在线|亚洲| 国模无码大尺度一区二区三区| 日韩av中文字幕一区二区 | 蜜臂av日日欢夜夜爽一区| 一区二区在线观看av| 国产成人综合精品三级| 免费亚洲电影在线| 免费观看一级特黄欧美大片| 亚洲成人午夜电影| 亚洲无线码一区二区三区| 亚洲乱码国产乱码精品精小说 | 亚洲一区二区三区国产| 一区二区久久久久久| 综合亚洲深深色噜噜狠狠网站| 国产精品久久久久久久久果冻传媒| 国产亚洲一区字幕| 中文字幕欧美日韩一区| 亚洲欧洲韩国日本视频| 亚洲三级在线播放| 亚洲精品欧美综合四区| 亚洲视频在线观看三级| 一区二区日韩av| 亚洲一区二区av在线| 石原莉奈在线亚洲二区| 麻豆一区二区三区| 国产呦精品一区二区三区网站| 精品一区二区在线视频| 国产69精品久久777的优势| 成熟亚洲日本毛茸茸凸凹| 成人91在线观看| 在线观看一区二区视频| 欧美三区免费完整视频在线观看| 欧美日韩一区二区在线视频| 欧美精品丝袜中出| 欧美videossexotv100| 国产亚洲综合在线| 亚洲色图在线视频| 日韩专区欧美专区| 国产一区二区三区久久久| 99久久精品费精品国产一区二区| 日本高清不卡一区| 欧美一级高清片| 国产欧美日韩中文久久| 一区二区三区欧美| 久久福利视频一区二区| 成人精品高清在线| 欧美精品在线一区二区| 久久欧美中文字幕| 亚洲综合免费观看高清完整版 | 亚洲va在线va天堂| 国内精品第一页| 国产精品一区一区| 午夜视频在线观看一区二区| 久久精品国产精品亚洲精品| 成人一道本在线| 欧美高清视频在线高清观看mv色露露十八 | 亚洲精品成人在线| 久草热8精品视频在线观看| 成人高清伦理免费影院在线观看| 欧美三级在线看| 国产欧美视频一区二区| 日韩精品亚洲一区| 成人激情小说乱人伦| 538在线一区二区精品国产| 国产精品色呦呦| 麻豆精品视频在线观看视频| 99久久精品国产一区二区三区 | 亚洲一区免费视频| 国产一区二区按摩在线观看| 欧美日韩中文国产| 国产日本一区二区| 日韩电影免费一区| 91网上在线视频| 国产三级一区二区三区| 美女视频黄频大全不卡视频在线播放 | 日本va欧美va精品发布| 一本大道久久a久久综合| 国产三级欧美三级| 奇米精品一区二区三区在线观看一| 99国产欧美久久久精品| 精品国产免费久久| 日韩精品免费专区| 欧美自拍丝袜亚洲| 国产精品剧情在线亚洲| 国产乱一区二区| 欧美一区二区三区日韩| 一个色在线综合| 成人av在线网| 国产三级精品三级在线专区| 免费成人美女在线观看.| 欧美日韩国产免费一区二区| 一区二区三区影院| 91麻豆精东视频| 国产精品亲子伦对白| 国产精品一区二区久激情瑜伽| 欧美一区二区三区免费观看视频| 亚洲mv大片欧洲mv大片精品| 在线日韩国产精品| 亚洲精品高清在线| 99久久99久久久精品齐齐| 国产欧美日韩中文久久| 国产98色在线|日韩| 久久亚区不卡日本| 国产中文一区二区三区| 2023国产精华国产精品| 狠狠久久亚洲欧美| 久久先锋影音av| 国产精品一品视频| 国产日韩欧美精品综合| 国产成人在线网站| 欧美激情综合网| 北岛玲一区二区三区四区| 国产精品美女久久久久久久| 不卡av在线免费观看| 中文字幕亚洲区| 色一情一乱一乱一91av| 一区二区成人在线| 欧美日韩一本到| 日韩综合一区二区| 欧美成人精品福利| 国产一区 二区 三区一级| 国产三级欧美三级日产三级99| 成人黄色电影在线| 国产盗摄精品一区二区三区在线| 日本久久一区二区| 中文字幕色av一区二区三区| av中文字幕亚洲| 亚洲一区在线观看免费观看电影高清 | 欧美亚洲日本国产| 亚洲成人久久影院| 欧美一卡在线观看| 国产乱人伦偷精品视频不卡| 国产精品色一区二区三区| 91片在线免费观看| 亚洲一线二线三线久久久| 欧美一区二区播放| 国产91在线观看| 亚洲卡通欧美制服中文| 日韩一区二区视频在线观看| 国产麻豆91精品| 亚洲另类中文字| 日韩免费在线观看| 成人黄色小视频在线观看| 亚洲一区二区三区四区五区中文| 欧美大尺度电影在线| av激情亚洲男人天堂| 午夜av电影一区| 久久中文字幕电影| 在线观看成人小视频| 成人三级在线视频| 婷婷一区二区三区| 精品奇米国产一区二区三区| 国产美女在线精品| 一区二区在线观看av| 欧美精品一区二区在线观看| 99久久精品国产毛片| 久久精品国产在热久久| 中文字幕中文字幕一区| 91精品国产综合久久久久久久久久 | 国产欧美日韩另类视频免费观看| 色婷婷综合久久久中文字幕| 极品美女销魂一区二区三区| 一区二区免费在线| 久久精品亚洲精品国产欧美| 欧美日本在线一区| av福利精品导航| 久草精品在线观看| 亚洲一区二区三区免费视频| 欧美国产日韩亚洲一区| 91精品国产乱| 欧美亚洲动漫精品| 成人美女视频在线看| 美美哒免费高清在线观看视频一区二区| 亚洲视频你懂的| 国产日韩欧美激情| 日韩精品影音先锋|