⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2c_user.c

📁 这是一个TDA7540的模版程序
💻 C
字号:
/***************************************************************************
Project  :   TDA7540 Jig board 
Compiler : ST7 HiCross C (HiWARE)
Module   :  I2c_user.c
Version  :  V 1.0
Created  : Jan.24th,2005
Author   :  Jerry HE / ST-ShenZhen
Description
         -  IIC service routine
Modified
	  - Jan.24th,2005    
***************************************************************************/


/* PREPROCESSING SYSTEM DECLARATIONS *****************************************/
/* EXTERNAL DECLARATIONS *****************************************************/
#include "system.h"

//I2C Core program 
/*-----------------------------------------------------------------------------
ROUTINE NAME : I2Cm_Start
INPUT/OUTPUT : None.
DESCRIPTION  : Generates I2C-Bus Start Condition.
COMMENTS     :
-----------------------------------------------------------------------------*/ 
void I2Cm_Start (void)
{
      P_I2CSDA = 1; 
      NOP;
      P_I2CCLK = 1; 
      NOP;
      P_I2CSDA = 0; 
      NOP;
      P_I2CCLK = 0; 
   } 

/*-----------------------------------------------------------------------------
ROUTINE NAME : I2Cm_Stop
INPUT/OUTPUT : None.
DESCRIPTION  : Generates I2C-Bus Stop Condition.
COMMENTS     :
-----------------------------------------------------------------------------*/ 
void I2Cm_Stop (void)
{
      NOP;
      P_I2CSDA = 0;
      NOP;
      P_I2CCLK = 1;
      NOP;
      P_I2CSDA = 1;
} 

/*-----------------------------------------------------------------------------
ROUTINE NAME : I2Cm_Ack
INPUT/OUTPUT : None.
DESCRIPTION  : Acknoledge generation from now.
COMMENTS     : Transfer sequence = DATA, ACK.
-----------------------------------------------------------------------------*/ 
void I2Cm_Ack (void)
{
       D_I2CSDA = 1;
	NOP;
	NOP;
	P_I2CSDA = 0;
	NOP;
	NOP;
	P_I2CCLK = 1;
       NOP;
	NOP;
	P_I2CCLK = 0;
       NOP;
	NOP;
	P_I2CSDA = 1;
	NOP;
	NOP;
       D_I2CCLK = 0;                  //Judge if the slave device hold the SCL line  JerryHe2004.12
	while(P_I2CCLK ==0){}
	NOP;
	P_I2CCLK = 1;
	D_I2CCLK = 1;
} 

/*-----------------------------------------------------------------------------
ROUTINE NAME : I2Cm_nAck
INPUT/OUTPUT : None.
DESCRIPTION  : Non acknoledge generation from now.
COMMENTS     : Transfer sequence = DATA, NACK.
-----------------------------------------------------------------------------*/ 
void I2Cm_nAck (void)
{
	D_I2CSDA = 1;
       NOP;
	NOP;
	P_I2CSDA  = 1;       //implement NACK software for SVDO- Jerry He 2004.12
	NOP;
	P_I2CCLK = 1;
	NOP;
	P_I2CCLK = 0;
       NOP;
	P_I2CSDA = 1;
} 


/*-----------------------------------------------------------------------------
ROUTINE NAME : I2Cm_TxData
INPUT/OUTPUT : data byte to be transfered / None.
DESCRIPTION  : Transmits a data byte.
COMMENTS     : Transfer sequence = DATA, ACK, EV8...
-----------------------------------------------------------------------------*/ 
void I2Cm_TxData (char i2c_data)
{
	   unsigned char i;
	   unsigned char j;
	   D_I2CSDA = 1;
	   for(i=0x80,j=0;j<8;j++)
	   {
	   	if((i & i2c_data)==0)
		    P_I2CSDA = 0;
		else
		    P_I2CSDA = 1;
		NOP;
		P_I2CCLK = 1;
		NOP;
		NOP;
		P_I2CCLK = 0;
		NOP;
		i = i >> 1;
	   }
	   D_I2CSDA = 0;
	   NOP;
	   P_I2CCLK = 1;
	   NOP;
	   P_I2CCLK = 0;
	   NOP;
	   D_I2CSDA =1;
	   NOP; 
} 
/*-----------------------------------------------------------------------------
ROUTINE NAME : I2Cm_RxData
INPUT/OUTPUT : Last byte to receive flag (active high) / Received data byte.
DESCRIPTION  : Receive a data byte.
COMMENTS     : Transfer sequence = DATA, ACK, EV7...
-----------------------------------------------------------------------------*/ 
unsigned char I2Cm_RxData (void)
{
     unsigned char I2cRxData;
     unsigned char i;
     I2cRxData = 0;
     D_I2CSDA = 0;
     NOP;
     NOP;
     for(i=0;i<8;i++)
     {
     	 P_I2CCLK = 1;
        NOP;
	 I2cRxData = I2cRxData <<1;
	 I2cRxData &= 0xFE;
	 if(P_I2CSDA ==1)
	 {
	    I2cRxData |=0x01;
	 }
	 P_I2CCLK = 0;
	 NOP
     }
     NOP;
     return(I2cRxData);
}

/*-----------------------------------------------------------------------------
ROUTINE NAME : I2C_SetParEep
INPUT/OUTPUT : 
DESCRIPTION  : 
COMMENTS     : Copy to Tuner buffer
-----------------------------------------------------------------------------*/ 
void  I2C_SetParEep()
{
	Tun_Buff[0]=I2c_EepBuff[10];
	Tun_Buff[1]=I2c_EepBuff[11];	   
	Tun_Buff[2]=I2c_EepBuff[12];	   		   
	Tun_Buff[3]=I2c_EepBuff[13];	    
	Tun_Buff[4]=I2c_EepBuff[14];	  		   
	Tun_Buff[5]=I2c_EepBuff[15];	   			   
	Tun_Buff[6]=I2c_EepBuff[16];	   		   
	Tun_Buff[7]=I2c_EepBuff[17];	   		   
	Tun_Buff[8]=I2c_EepBuff[18];	  
	Tun_Buff[9]=I2c_EepBuff[19];	  
	Tun_Buff[10]=I2c_EepBuff[20];
	Tun_Buff[11]=I2c_EepBuff[21];	   
	Tun_Buff[12]=I2c_EepBuff[22];	   		   
	Tun_Buff[13]=I2c_EepBuff[23];	    
	Tun_Buff[14]=I2c_EepBuff[24];	  		   
	Tun_Buff[15]=I2c_EepBuff[25];	   			   
	Tun_Buff[16]=I2c_EepBuff[26];	   		   
	Tun_Buff[17]=I2c_EepBuff[27];	   		   
	Tun_Buff[18]=I2c_EepBuff[28];	  
	Tun_Buff[19]=I2c_EepBuff[29];
	Tun_Buff[20]=I2c_EepBuff[30];
	Tun_Buff[21]=I2c_EepBuff[31];	   
	Tun_Buff[22]=I2c_EepBuff[32];	   		   
	Tun_Buff[23]=I2c_EepBuff[33];	    
	Tun_Buff[24]=I2c_EepBuff[34];	  		   
	Tun_Buff[25]=I2c_EepBuff[35];	   			   
	Tun_Buff[26]=I2c_EepBuff[36];	   		   
	Tun_Buff[27]=I2c_EepBuff[37];	   		   
	Tun_Buff[28]=I2c_EepBuff[38];	  
	Tun_Buff[29]=I2c_EepBuff[39];
	Tun_Buff[30]=I2c_EepBuff[40];
	Tun_Buff[31]=I2c_EepBuff[41];	   
	Tun_Buff[32]=I2c_EepBuff[42];	   		   
	Tun_Buff[33]=I2c_EepBuff[43];	    
	Tun_Buff[34]=I2c_EepBuff[44];	  		   
	Tun_Buff[35]=I2c_EepBuff[45];	   			   
	Tun_Buff[36]=I2c_EepBuff[46];	   		   
	Tun_Buff[37]=I2c_EepBuff[47];	   		   
	Tun_Buff[38]=I2c_EepBuff[48];	  
	Tun_Buff[39]=I2c_EepBuff[49];
}
/*** (c) 2005  STMicroelectronics ****************** END OF FILE ***/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -