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

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

?? e2prom_function.c

?? 1、該PERIPHERAL文件夾包含五個有關系統外設的程序:DEC5502_USB、DEC5502_LED和DEC5502_UART程序。 2、DEC5502_USB程序主要實現了與PC機應用程
?? C
字號:

/********************************************************************************/
/*																				*/
/*	Filename:	E2PROM_Function.c												*/
/*  Function:	Realize E2PROM`s writing and reading operation					*/
/*																				*/
/********************************************************************************/

#include <csl_i2c.h>

/********************************************************************************/
/* MODULE.NAME... I2C															*/
/* FUNCTIONNAME...... I2C_Write()												*/
/* DATE CREATED.. Sun 08/20/2004 												*/
/********************************************************************************/
void MyI2C_setup(I2C_Setup *Init) {

  int old_intm;
  Uint16 IPSC_calc;

  old_intm = IRQ_globalDisable();  
  
  
  /* 將下面的IRS域作了修改,讓IIC模塊處于復位狀態,然后進行時鐘的配置 */
  I2C_RSET(I2CMDR,I2C_I2CMDR_RMK(Init->free,0,0,0,1,1,Init->addrmode,0,Init->dlb,0,0,0,Init->bitbyte));
    
/* set own address */  

  I2C_RSET(I2COAR,Init->ownaddr); /* if slave, need to specify own address */
  
/* calculating the IPSC value */
   	
  IPSC_calc = (Init->sysinclock)/12;  /* must correct rounding issue */
  I2C_RSET(I2CPSC,IPSC_calc);
  
/* calculating the ICCLKL and ICCLKH register values */ 
  
  I2C_RSET(I2CCLKL,15);
  I2C_RSET(I2CCLKH,15);    
  
  /* 使能IIC模塊 */
  I2C_FSET(I2CMDR,IRS,1);
    
  IRQ_globalRestore(old_intm);   

}   /* end of init  */

int MyI2C_Write(Uint16 *data,int length,int master,Uint16 slaveaddress,int transfermode,int timeout)  
{
  	int i,j,k,l,m;
  	int old_intm;  
  	Uint16 temp=1;
  
  	//old_intm = IRQ_globalDisable();  
  
  	/* set in transmit mode */
  	I2C_FSET(I2CMDR,TRX,1);
  	/* set the count register */
  	I2C_RSET(I2CCNT,length);    

  	if (master==1) 
  	{
    	I2C_RSET(I2CSAR,slaveaddress); 	/* specify slave address */
    	I2C_FSET(I2CMDR,MST,1);      	/* turn master mode on */
  
  		/* setting the transfer mode */
    	if (transfermode==1) 
    	{   						/* S-A-D..(n)..D-P mode */
      		I2C_FSET(I2CMDR,RM,0);
      		I2C_FSET(I2CMDR,STP,1);
    	}
    	else if (transfermode==2) 
    	{   						/* S-A-D..(n)..D mode  (repeat n times)*/
      		I2C_FSET(I2CMDR,RM,0);
      		I2C_FSET(I2CMDR,STP,0);
    	}
    	else if (transfermode==3) 
    	{   						/* S-A-D-D-D ... (repeat continuous) mode */
      		I2C_FSET(I2CMDR,RM,1);
      		I2C_FSET(I2CMDR,STP,0);
    	}
    	else 
    	{   						/* if user specifies something else, go to idle mode */
      		I2C_FSET(I2CMDR,RM,0);
      		I2C_FSET(I2CMDR,STP,0);
    	}  
  	}  	/* end if master */
  	else 
  	{
    	I2C_FSET(I2CMDR,MST,0);  	/* if not master, set to slave */
  	}   /* end set up */

  	old_intm = IRQ_globalDisable();      
    for (i=0;i<=timeout;i++)  
    {   							/* check for bus busy */
    	temp=I2C_FGET(I2CSTR,BB);
    	if (temp==0) break; 
    }
  	IRQ_globalRestore(old_intm);
  	
  	if (i>=timeout) 
  	{  								/* bus busy timeout error */
    	//IRQ_globalRestore(old_intm);
    	return 1;
  	}  
             
  	for (m=0;m<=timeout;m++)  
  	{   							/* check for DXR status before first write*/
    	temp=I2C_FGET(I2CSTR,XRDY);
    	if (temp==1) break;                  
  	}
          
  	if (m>=timeout) 
  	{
    	//IRQ_globalRestore(old_intm);
    	return 2;         			/* time out for transmit DXR ready */   
  	}
    
  	I2C_RSET(I2CDXR,*data++);  		/* put first data value in DXR */                     	
  	I2C_FSET(I2CMDR,STT,1);			/* generate start condition */
            
  	for (k=1;k<length;k++)  
  	{   							/* enter main loop for transmitting data */
    	for (i=0;i<2000;i++) 
    	{
     		for(j=0;j<1000;j++)		/* delay loop */
      		{  
      			asm (" NOP");
      		}
    	}             
    	for (l=0;l<=timeout;l++)  
    	{   
     		temp=I2C_FGET(I2CSTR,NACK);	/* check for NACK status */
     		if (temp==0) break; 
    	} 
    	if (l>=timeout) 
    	{ 
     		//IRQ_globalRestore(old_intm);
     		return 3;        			/* No acknowledge bit is set, NACK error */
    	}

    	for (m=0;m<=timeout;m++)  
    	{   							/* check for DXR status */
     		temp=I2C_FGET(I2CSTR,XRDY);
     		if (temp==1) break;                
    	}
      
    	if (m>=timeout) 
    	{
      		//IRQ_globalRestore(old_intm);
  	 		return 4;         			/* time out for transmit DXR ready */ 
    	}
    	
    	I2C_RSET(I2CDXR,*data++);  		/* put next data value in DXR */  
  	} /* end of for loop */
   
   	for (j=0;j<10;j++) 
    {    								/* last delay loop for last data transferred*/
      	for (i=0;i<32000;i++)  
      	{
       		asm (" NOP");
      	}
    }
    
   	for (l=0;l<=timeout;l++)  
    {   								/* check for NACK status for last data byte transferred*/
     	temp=I2C_FGET(I2CSTR,NACK);
     	if (temp==0) break; 
    }
    
  	if (l>=timeout) 
  	{
      	//IRQ_globalRestore(old_intm); 
  		return 5;        				/* No acknowledge bit is set, NACK error */                                                             
  	}  
  //IRQ_globalRestore(old_intm);
  return 0;
}  /* end of I2C_Write */

/********************************************************************************/
/* MODULE.NAME... I2C															*/
/* FUNCTIONNAME...... I2C_Read()												*/
/* DATE CREATED.. Sun 08/20/2004 												*/
/********************************************************************************/

int MyI2C_Read(Uint16 *data,int length,int master,Uint16 slaveaddress,int transfermode,int timeout, int checkbus)  {

  	int i,j,k,m;
  	int old_intm;  
  	Uint16 temp;
  
  	//old_intm = IRQ_globalDisable();  
  
  	/* set in receive mode */
  	I2C_FSET(I2CMDR,TRX,0);
   
  	if (master==1) 
  	{
  		I2C_RSET(I2CSAR,slaveaddress); 		/* specify slave address */
  		I2C_FSET(I2CMDR,MST,1);      		/* turn master mode on */
  
  		/* setting the transfer mode */
  		if (transfermode==1) 
  		{   /* S-A-D..(n)..D-P mode */
  			I2C_FSET(I2CMDR,RM,0);
  			I2C_FSET(I2CMDR,STP,1);	 
  			I2C_RSET(I2CCNT,length);    	/* setting the data count in the ICCNT register */ 
  		}
  		else if (transfermode==2) 
  		{   /* S-A-D..(n)..D mode  (repeat n times)*/
  			I2C_FSET(I2CMDR,RM,0);
  			I2C_FSET(I2CMDR,STP,0);
  		}
  
  		else if (transfermode==3) 
  		{   /* S-A-D-D-D ... (repeat continuous) mode */
  			I2C_FSET(I2CMDR,RM,1);
  			I2C_FSET(I2CMDR,STP,0);
  		}
  
  		else 
  		{   /* if user specifies something else, go to idle mode */
  			I2C_FSET(I2CMDR,RM,0);
  			I2C_FSET(I2CMDR,STP,0);
  		}
  	}  /* end if master */
  	else 
  	{
  		I2C_FSET(I2CMDR,MST,0);  			/* if not master, set to slave */
  	}  /* end set up */   
      
  	if (checkbus==1) 
  	{	  
  		old_intm = IRQ_globalDisable(); 
  		for (i=0;i<=timeout;i++) 
  		{   								/* check for bus busy */
  			temp=I2C_FGET(I2CSTR,BB);
  			if (temp==0) break; 
  		}
  		
  		IRQ_globalRestore(old_intm);
  		if (i>=timeout)  					/* bus busy timeout error */
    	return 1;  
  	}  /* end of bus busy */
                       						/* generate start condition */
    I2C_FSET(I2CMDR,STT,1);  
                           					/* delay loop to receive data */
    for (i=0;i<32000;i++) 
    {
      	asm (" NOP");
    }
       
  	for (j=0;j<=timeout;j++)  
  	{   /* check for DRR status */
  		temp=I2C_FGET(I2CSTR,RRDY);
  		if (temp==1) break; 
  	}
    
  	if (j>=timeout) 
  	return 2;         						/* time out for receive DRR ready */ 
   
  	*data++ = I2C_RGET(I2CDRR);  			/* put first data value in DXR */
                 
  	for (k=1;k<length;k++)  				/* enter main loop for receiving data */
  	{   
      	for (i=0;i<32000;i++)  
      	{
      		asm (" NOP");
      	}
      	
  		for (m=0;m<=timeout;m++)  
  		{   /* check for DRR status */
  			temp=I2C_FGET(I2CSTR,RRDY);
  			if (temp==1) break; 
  		}
    
  		if (m>=timeout) 
  		return 4;        			 		/* time out for transmit DRR ready */ 	
  		*data++ = I2C_RGET(I2CDRR);  		/* put next data value in DXR */
  	} /* end of for loop */
                       
    for (i=0;i<32000;i++)  					/* last delay loop */
    {
      	asm (" NOP");
    }                                                                        
  //IRQ_globalRestore(old_intm); 
  return 0;  
}  /* end of I2C_Read */

/********************************************************************************/
/* MODULE.NAME... I2C															*/
/* FUNCTIONNAME...... Set_WorkMode()											*/
/* DATE CREATED.. Sun 08/20/2004 												*/
/********************************************************************************/
void Set_WorkMode(int Master, Uint16 SlaveAddress, int TransferMode )
{
	/* set in transmit mode */
  	I2C_FSET(I2CMDR,TRX,1);
  	/* set the count register */
  	I2C_RSET(I2CCNT,4);   				/* length set to 4 */
  	 
	if (Master == 1) 
  	{
    	I2C_RSET(I2CSAR,SlaveAddress); 	/* specify slave address */
    	I2C_FSET(I2CMDR,MST,1);      	/* turn master mode on */
  
  		/* setting the transfer mode */
    	if (TransferMode == 1) 
    	{   						/* S-A-D..(n)..D-P mode */
      		I2C_FSET(I2CMDR,RM,0);
      		I2C_FSET(I2CMDR,STP,1);
    	}
    	else if (TransferMode == 2) 
    	{   						/* S-A-D..(n)..D mode  (repeat n times)*/
      		I2C_FSET(I2CMDR,RM,0);
      		I2C_FSET(I2CMDR,STP,0);
    	}
    	else if (TransferMode == 3) 
    	{   						/* S-A-D-D-D ... (repeat continuous) mode */
      		I2C_FSET(I2CMDR,RM,1);
      		I2C_FSET(I2CMDR,STP,0);
    	}
    	else 
    	{   						/* if user specifies something else, go to idle mode */
      		I2C_FSET(I2CMDR,RM,0);
      		I2C_FSET(I2CMDR,STP,0);
    	}  
  	}  	/* end if master */
  	else 
  	{
    	I2C_FSET(I2CMDR,MST,0);  	/* if not master, set to slave */
  	}   /* end set up */
}

/********************************************************************************/
/* MODULE.NAME... I2C															*/
/* FUNCTIONNAME...... Judge_I2cStatus()											*/
/* DATE CREATED.. Sun 08/20/2004 												*/
/********************************************************************************/
int Judge_I2cStatus(int TimeOut)
{
	unsigned int i, m;
	int old_intm;
	Uint16 Temp = 1;
	
	old_intm = IRQ_globalDisable();
	for (i = 0; i <= TimeOut; i++)  
    {   							/* check for bus busy */
    	Temp = I2C_FGET(I2CSTR,BB);
    	if (Temp == 0) break; 
    }
  	IRQ_globalRestore(old_intm);
  	
  	if (i >= TimeOut) 
  	{  								/* bus busy timeout error */
    	//IRQ_globalRestore(old_intm);
    	return 1;
  	}  
             
  	for (m = 0; m <= TimeOut; m++)  
  	{   							/* check for DXR status before first write*/
    	Temp = I2C_FGET(I2CSTR,XRDY);
    	if (Temp == 1) break;                  
  	}
          
  	if (m >= TimeOut) 
  	{
    	//IRQ_globalRestore(old_intm);
    	return 2;         			/* time out for transmit DXR ready */   
  	}
  	return 0;
}

/********************************************************************************/
/* MODULE.NAME... I2C															*/
/* FUNCTIONNAME...... WriteSigWord_Deal()										*/
/* DATE CREATED.. Sun 08/20/2004 												*/
/********************************************************************************/
int WriteSigWord_Deal(int TimeOut)
{ 
    unsigned int i, j, l, m;
    Uint16 Temp = 1;
    
	for (i=0;i<2000;i++) 
    {
     	for(j=0;j<1000;j++)				/* delay loop */
      	{  
      		asm (" NOP");
      	}
    }             
    for (l=0;l<=TimeOut;l++)  
    {   
     	Temp=I2C_FGET(I2CSTR,NACK);		/* check for NACK status */
     	if (Temp==0) break; 
    } 
    if (l>=TimeOut) 
    { 
     	//IRQ_globalRestore(old_intm);
     	return 3;        				/* No acknowledge bit is set, NACK error */
    }

    for (m=0;m<=TimeOut;m++)  
    {   								/* check for DXR status */
     	Temp=I2C_FGET(I2CSTR,XRDY);
     	if (Temp==1) break;                
    }
      
    if (m>=TimeOut) 
    {
      	//IRQ_globalRestore(old_intm);
  	 	return 4;         				/* time out for transmit DXR ready */ 
    }
    return 0; 
}

/********************************************************************************/
/* MODULE.NAME... I2C															*/
/* FUNCTIONNAME...... LastByte_Deal()											*/
/* DATE CREATED.. Sun 08/20/2004 												*/
/********************************************************************************/
int  LastByte_Deal(int TimeOut)
{
	int i,j,l; 
  	Uint16 Temp = 1;
  	
	for (j=0;j<10;j++) 
    {    								/* last delay loop for last data transferred*/
      	for (i = 0; i < 32000; i++)  
      	{
       		asm (" NOP");
      	}
    }
    
   	for (l=0;l<=TimeOut;l++)  
    {   								/* check for NACK status for last data byte transferred*/
     	Temp = I2C_FGET(I2CSTR,NACK);
     	if (Temp == 0) break; 
    }
    
  	if (l >= TimeOut) 
  	{
      	//IRQ_globalRestore(old_intm); 
  		return 5;        				/* No acknowledge bit is set, NACK error */                                                             
  	}  
  	return 0;
}

/********************************************************************************/
/* MODULE.NAME... I2C															*/
/* FUNCTIONNAME...... I2C_WriteSigWord()										*/
/* DATE CREATED.. Sun 08/20/2004 												*/
/********************************************************************************/
int MyI2C_WriteSigWord(unsigned int OwnAdd, unsigned int data, int master, Uint16 slaveaddress, int transfermode, int timeout)
{
	unsigned int HighAdd, LowAdd;
	unsigned int HighByte, LowByte;	
	int RetValue;
	
	HighAdd = (OwnAdd & 0xFF00)>>8;
	LowAdd = OwnAdd & 0x00FF;
	
	HighByte = (data & 0xFF00)>>8;
	LowByte = data & 0x00FF;

	/* Set I2C working mode */
  	Set_WorkMode(master, slaveaddress, transfermode);
  	
  	//old_intm = IRQ_globalDisable();  
  	      
    RetValue = Judge_I2cStatus(timeout);
    if(RetValue != 0)
    return(RetValue);
    
    /* put first data value in DXR */ 
  	I2C_RSET(I2CDXR,HighAdd);
  	 
  	/* generate start condition */ 		                    	
  	I2C_FSET(I2CMDR,STT,1);			
  	
  	RetValue = WriteSigWord_Deal(timeout);
  	if(RetValue != 0)
    return(RetValue);
    
    /* put next data value in DXR */	
    I2C_RSET(I2CDXR,LowAdd);  
    
    RetValue = WriteSigWord_Deal(timeout);
  	if(RetValue != 0)
    return(RetValue);	
    
    /* put next data value in DXR */	
    I2C_RSET(I2CDXR,HighByte);	
    
    RetValue = WriteSigWord_Deal(timeout);
  	if(RetValue != 0)
    return(RetValue);
    
    /* put next data value in DXR */	
    I2C_RSET(I2CDXR,LowByte);	
    
    RetValue = LastByte_Deal(timeout);
    if(RetValue != 0)
    return(RetValue);
    
    return 0;
}	/* end of I2C_WriteSigWord */

/**************************************************************************************************/
//	No	more
/**************************************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆精品国产无毒不卡在线观看| 成人黄色免费短视频| 欧美国产禁国产网站cc| 精品视频色一区| 国产福利一区在线| 日本亚洲免费观看| 一区二区三区日韩精品| 久久青草欧美一区二区三区| 色婷婷av一区二区三区大白胸| 紧缚奴在线一区二区三区| 亚洲午夜精品一区二区三区他趣| 国产拍揄自揄精品视频麻豆| 制服丝袜在线91| 在线免费精品视频| av电影在线观看一区| 激情久久五月天| 蜜臀久久久久久久| 亚洲一级电影视频| 亚洲人成精品久久久久久| 国产精品无圣光一区二区| 欧美成人综合网站| 欧美一区永久视频免费观看| 日本久久电影网| 97se亚洲国产综合自在线不卡| 国产成人免费在线观看不卡| 免费成人美女在线观看.| 亚洲不卡av一区二区三区| 一区二区三区产品免费精品久久75| 国产亚洲精久久久久久| 精品久久久久av影院 | 成人精品在线视频观看| 国产一区二区三区最好精华液| 日韩高清在线电影| 五月综合激情网| 亚洲成人资源在线| 日韩av电影免费观看高清完整版 | 91精品1区2区| 色婷婷国产精品久久包臀| 色综合久久天天| 色综合色狠狠天天综合色| 色8久久精品久久久久久蜜| 91麻豆国产自产在线观看| 99re视频这里只有精品| 成人国产视频在线观看| jizzjizzjizz欧美| av在线不卡电影| 色爱区综合激月婷婷| 日本韩国欧美国产| 欧美日韩免费观看一区二区三区| 欧美日韩免费观看一区二区三区| 欧美视频一区二区三区四区| 欧美女孩性生活视频| 日韩欧美国产精品| 久久久精品欧美丰满| 国产目拍亚洲精品99久久精品| 激情成人综合网| 国产精品一级片| 成人少妇影院yyyy| 91麻豆福利精品推荐| 欧美午夜一区二区三区免费大片| 555www色欧美视频| 欧美精品一区二区在线观看| 国产精品日日摸夜夜摸av| 艳妇臀荡乳欲伦亚洲一区| 日韩一区精品字幕| 久久99精品久久只有精品| 成人免费黄色在线| 欧洲在线/亚洲| 日韩视频一区二区在线观看| 国产午夜亚洲精品午夜鲁丝片| 国产精品第一页第二页第三页| 夜夜嗨av一区二区三区中文字幕| 天天av天天翘天天综合网色鬼国产| 美女视频一区二区| 99久久综合狠狠综合久久| 欧美二区乱c少妇| 久久婷婷国产综合国色天香| 亚洲精品久久久久久国产精华液| 日韩制服丝袜先锋影音| 国产成人综合在线观看| 欧美羞羞免费网站| 久久久亚洲高清| 亚洲国产乱码最新视频| 国产在线精品一区二区不卡了| 99综合电影在线视频| 5566中文字幕一区二区电影 | 日韩精品福利网| 粉嫩13p一区二区三区| 欧美人与性动xxxx| 中文文精品字幕一区二区| 亚洲成人av一区二区三区| 国产999精品久久久久久绿帽| 欧美三级在线视频| 2024国产精品| 亚洲午夜免费视频| 国产高清一区日本| 日韩视频免费直播| 亚洲精品免费看| 国产成人午夜精品影院观看视频| 欧美日韩免费电影| 亚洲欧美日韩久久精品| 激情五月婷婷综合网| 欧美日韩免费一区二区三区视频| 欧美美女bb生活片| 亚洲欧美日韩电影| 天天综合网 天天综合色| 日本丰满少妇一区二区三区| 日韩欧美第一区| 午夜精品一区二区三区免费视频 | 国产精品一区二区三区99| 欧美成人精品3d动漫h| 亚洲少妇最新在线视频| 免费观看91视频大全| 国产精品入口麻豆原神| 欧美日韩国产另类不卡| 国产91精品一区二区麻豆亚洲| 日韩欧美资源站| 裸体一区二区三区| 国产精品区一区二区三| 欧美久久高跟鞋激| 亚洲小说欧美激情另类| 国产资源在线一区| 91精品国产综合久久婷婷香蕉| 中文字幕在线不卡| 99在线精品免费| 亚洲人成网站在线| 欧美一卡二卡三卡| 不卡电影免费在线播放一区| 国产精品视频一二三| 日韩欧美国产一二三区| 91久久精品一区二区| 国产一区激情在线| 国产精品午夜久久| 在线观看日韩高清av| 久久久国产精品不卡| 亚洲人成网站影音先锋播放| 波多野结衣一区二区三区| 国产视频一区在线观看| 国产精品一区三区| 久久综合精品国产一区二区三区 | 精品国产一区二区三区不卡| 久久99这里只有精品| 日韩精品一区二区三区中文不卡 | 国产精品中文字幕日韩精品 | 日韩一区二区三免费高清| 日日摸夜夜添夜夜添亚洲女人| 欧美三级在线播放| 蜜臀av一区二区在线观看| 日韩亚洲电影在线| 极品少妇xxxx精品少妇偷拍| 久久人人爽人人爽| 不卡一区在线观看| 一区二区三区av电影| 欧美日韩国产小视频| 秋霞国产午夜精品免费视频| xfplay精品久久| 99久久免费视频.com| 亚洲一区二区精品3399| 欧美一区二区视频免费观看| 国产一区二区三区免费| 国产精品美女久久久久久 | 这里只有精品电影| 国产麻豆精品在线观看| 综合av第一页| 欧美日韩午夜精品| 国产精品资源在线看| 一区二区三区精品在线观看| 3d成人动漫网站| 国产成人亚洲精品青草天美| 亚洲欧美一区二区不卡| 91.com视频| 国产福利一区二区三区在线视频| 亚洲精品一二三区| 欧美大度的电影原声| 成人动漫视频在线| 喷水一区二区三区| 中文字幕在线一区免费| 欧美日韩大陆一区二区| 国产精品亚洲视频| 亚洲国产aⅴ成人精品无吗| 久久综合久久综合久久综合| 91在线小视频| 久久精品国产免费看久久精品| 中文字幕中文乱码欧美一区二区| 欧美巨大另类极品videosbest| 国产成人av在线影院| 午夜久久久影院| 国产精品久久久久婷婷| 欧美一区二区三区在线观看视频| 东方欧美亚洲色图在线| 丝瓜av网站精品一区二区| 欧美国产精品久久| 日韩欧美国产精品| 欧美亚洲高清一区| 成人性视频网站| 久久66热re国产| 亚洲bdsm女犯bdsm网站| 国产精品每日更新在线播放网址| 在线91免费看| 色婷婷久久久久swag精品|