LPC21XX系列ARM7驅(qū)動(dòng)RTC RX8025(I/O模擬IIC)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
/******************************************************************************************
* 函數(shù)名稱 :I2C_Delay
* 功能描述 :
* 參數(shù) : 參數(shù)名稱:輸入/輸出?類型描述
*
* 返回值 :
* 作者 :
* 創(chuàng)建日期 :2006-12-19
* 全局變量 :
* 全局靜態(tài)變量:
* 局部靜態(tài)變量:
*----------------------------------------修改歷史------------------------------------------
* 當(dāng)前版本 : 修改人: 修改日期:
* 修改說(shuō)明 :
******************************************************************************************/
voidI2C_Delay(uint32 WaitTime)
{
uint32 uiTemp = WaitTime * small;
while (uiTemp--);
}
/******************************************************************************************
* 函數(shù)名稱 :IO_Write
* 功能描述 :
* 參數(shù) : 參數(shù)名稱:輸入/輸出?類型描述
*
* 返回值 :
* 作者 :
* 創(chuàng)建日期 :2006-12-19
* 全局變量 :
* 全局靜態(tài)變量:
* 局部靜態(tài)變量:
*----------------------------------------修改歷史------------------------------------------
* 當(dāng)前版本 : 修改人: 修改日期:
* 修改說(shuō)明 :
******************************************************************************************/
void IO_Write(uint16 data, uint16 level)
{
switch(data)
{
case I2C_SDA:
{
switch(level)
{
case High:
IO0SET |= I2C_SDA;
I2C_Delay(5);
break;
case Low:
IO0CLR |= I2C_SDA;
I2C_Delay(5);
break;
}
}//end case
break;
case I2C_SCL:
{
switch(level)
{
case High:
IO0SET |= I2C_SCL;
I2C_Delay(5);
break;
case Low:
IO0CLR |= I2C_SCL;
I2C_Delay(5);
break;
}
}//end case
break;
}
}
/******************************************************************************************
* 函數(shù)名稱 :I2C_Stop
* 功能描述 :
* 參數(shù) : 參數(shù)名稱:輸入/輸出?類型描述
*
* 返回值 :
* 作者 :
* 創(chuàng)建日期 :2006-12-19
* 全局變量 :
* 全局靜態(tài)變量:
* 局部靜態(tài)變量:
*----------------------------------------修改歷史------------------------------------------
* 當(dāng)前版本 : 修改人: 修改日期:
* 修改說(shuō)明 :
******************************************************************************************/
voidI2C_Stop(void) // I2C總線操作結(jié)止位發(fā)送
{
IO_Write(I2C_SDA, Low); // SDA = Low
IO_Write(I2C_SCL, High); // SCL = High
I2C_Delay(10);
IO_Write(I2C_SDA, High); // SDA = High
I2C_Delay(5);
IO_Write(I2C_SCL, Low); // SCL = Low
I2C_Delay(5);
}
/******************************************************************************************
* 函數(shù)名稱 :I2C_Start
* 功能描述 :
* 參數(shù) : 參數(shù)名稱:輸入/輸出?類型描述
*
* 返回值 :
* 作者 :
* 創(chuàng)建日期 :2006-12-19
* 全局變量 :
* 全局靜態(tài)變量:
* 局部靜態(tài)變量:
*----------------------------------------修改歷史------------------------------------------
* 當(dāng)前版本 : 修改人: 修改日期:
* 修改說(shuō)明 :
******************************************************************************************/
voidI2C_Start(void)
{
I2C_Stop();
I2C_Delay(5);
IO_Write(I2C_SDA, High);// SDA = High
I2C_Delay(5);
IO_Write(I2C_SCL, High);// SCL = High
I2C_Delay(5);
IO_Write(I2C_SDA, Low); // SDA = Low
I2C_Delay(5);
IO_Write(I2C_SCL, Low);// SCL = Low
I2C_Delay(5);
}
/******************************************************************************************
* 函數(shù)名稱 :I2C_Clock
* 功能描述 :
* 參數(shù) : 參數(shù)名稱:輸入/輸出?類型描述
*
* 返回值 :
* 作者 :
* 創(chuàng)建日期 :2006-12-19
* 全局變量 :
* 全局靜態(tài)變量:
* 局部靜態(tài)變量:
*----------------------------------------修改歷史------------------------------------------
* 當(dāng)前版本 : 修改人: 修改日期:
* 修改說(shuō)明 :
******************************************************************************************/
voidI2C_Clock(void)
{
I2C_Delay(5);// SCL = High-> Low
IO_Write(I2C_SCL, High);// SCL = High
I2C_Delay(5);
IO_Write(I2C_SCL, Low);// SCL = Low
I2C_Delay(2);
}
/******************************************************************************************
* 函數(shù)名稱 :I2C_Clock_Ask
* 功能描述 :
* 參數(shù) : 參數(shù)名稱:輸入/輸出?類型描述
*
* 返回值 :
* 作者 :
* 創(chuàng)建日期 :2006-12-19
* 全局變量 :
* 全局靜態(tài)變量:
* 局部靜態(tài)變量:
*----------------------------------------修改歷史------------------------------------------
* 當(dāng)前版本 : 修改人: 修改日期:
* 修改說(shuō)明 :
******************************************************************************************/
uint8I2C_Clock_Ask(void)
{
uint8Status;
I2C_Delay(5);
IO_Write(I2C_SCL, High);// SCL = High
I2C_Delay(5);
switch ( (IO0PIN&I2C_SDA)&I2C_SDA )
{
case(1<<14):
Status = I2CNoAck;// 返回I2CNoAck
break;
case(0x00):
Status = I2CAck; // 返回I2CAck
break;
}
IO_Write(I2C_SCL, Low);// SCL = Low
I2C_Delay(5);
return(Status);
}