?? driver_softiic.c
字號:
/****************************************************************************
* 文 件 名 :Driver_SoftIIc.c
* 版 本 : V1.0
* 連 接 :
* 功 能 :軟件IIC驅動
* 作者 :(Kris)
* 日 期 :2008/8/18
*---------------歷史版本信息------------------------------------------
* 修 改 人: Kris
* 版 本 :
* 日 期:2008/8/18
* 描 述:
****************************************************************************/
/****************************************************************************
* 包含文件
****************************************************************************/
#include "../../Config.h"
/****************************************************************************
* 使用宏
****************************************************************************/
/****************************************************************************
* 使用數據
****************************************************************************/
UCHAR bbyte; // 操作貯存
/****************************************************************************
* 使用函數
****************************************************************************/
void fm_delay(DWORD delay)
{
delay *=10;
for( ; delay>0; delay-- ){
NOP;
}
}
void iic_Init(void)
{
SET_PIO_OUTPUT( (0x1UL<<14) );
SET_PIO_OUTPUT( (0x1UL<<13) );
iic_stop(); // prevent pending condition
fm_delay(20);
}
void iic_start(void)
{
//ysz SET_SDA(1);SCL_1();SDA=0;SCL_0();
SWITCH_SDA(0);
SET_SDA(1); SCL_1();SET_SDA(0);SCL_0();
}
//=======================================
//FUNCTION:ROUTES TO PROVIDE A STOP SIGNAL
void iic_stop(void)
{
//ysz SDA=0;SCL_1();SET_SDA(1);
SWITCH_SDA(0);
SET_SDA(0);SCL_1();SET_SDA(1);
}
//=====================================
//FUNCTION:ROUTES TO PROVIDE ACK SINGAL
void iic_ack(void)
{
//ysz SDA=0;SCL_1();SCL_0();
SWITCH_SDA(0);
SET_SDA(0);SCL_1();SCL_0();
}
//=====================================
void iic_noack(void)
{
//ysz SET_SDA(1);SCL_1();SCL_0();
SWITCH_SDA(0);
SET_SDA(1);SCL_1();SCL_0();
}
//=======================================================
//FUNCTION:THE IIC DEVICE SHIFT OUT A BYTE TO THE MASTER
UCHAR iic_inchar(void)
{
// SET_SDA(1);
SWITCH_SDA(1);
bbyte =0;
SCL_1();if(GET_SDA()) bbyte|=0x80;SCL_0();
SCL_1();if(GET_SDA()) bbyte|=0x40;SCL_0();
SCL_1();if(GET_SDA()) bbyte|=0x20;SCL_0();
SCL_1();if(GET_SDA()) bbyte|=0x10;SCL_0();
SCL_1();if(GET_SDA()) bbyte|=8;SCL_0();
SCL_1();if(GET_SDA()) bbyte|=4;SCL_0();
SCL_1();if(GET_SDA()) bbyte|=2;SCL_0();
SCL_1();if(GET_SDA()) bbyte|=1;SCL_0();
return(bbyte);
}
//=======================================================
//FUNCTION:THE IIC DEVICE SHIFT IN A BYTE FROM THE MASTER
BOOL iic_outchar(UCHAR dat)
{
BOOL b_ack;
SWITCH_SDA(0);
bbyte=dat;
SET_SDA(bbyte&0x80);SCL_1();SCL_0();
SET_SDA(bbyte&0x40);SCL_1();SCL_0();
SET_SDA(bbyte&0x20);SCL_1();SCL_0();
SET_SDA(bbyte&0x10);SCL_1();SCL_0();
SET_SDA(bbyte&0x8);SCL_1();SCL_0();
SET_SDA(bbyte&0x4);SCL_1();SCL_0();
SET_SDA(bbyte&0x2);SCL_1();SCL_0();
SET_SDA(bbyte&0x1);SCL_1();SCL_0();
//read ack
// SET_SDA(1);
SWITCH_SDA(1);
SCL_1();
fm_delay(50);
NOP;NOP;NOP;NOP;NOP;NOP;
b_ack=GET_SDA();
SCL_0();
return b_ack;
}
//======================================================
//FUNCTION:BYTE WRITE. 'add' THE WRITE ADDRESS, 'wbyte' THE DATA WANT TO WRITE
void write_char(UINT add,UCHAR dat)
{
iic_start();
iic_outchar(IIC_WRITE);
iic_outchar(add>>8);
iic_outchar(add);
iic_outchar(dat);
iic_stop();
}
//=====================================================
void write_int(WORD add,WORD dat)
{
union{
WORD i;
BYTE j[2];
}temp;
temp.i=dat;
iic_start();
iic_outchar(IIC_WRITE);
iic_outchar(add>>8);
iic_outchar(add);
iic_outchar(temp.j[0]);
iic_outchar(temp.j[1]);
iic_stop();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -