📄 i2c_user.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 + -