* 函数返回:读取字节
* 修改时间:2018年3月4日
* 备 注:
***************************************************************/
void SCCB_Star(void)
{
SCL_Out;
SDA_Out;
SCCB_Wait();
SDA_High;
SCL_High;asm (“nop”);asm (“nop”);
SCCB_Wait();
SDA_Low;
SCCB_Wait();
SCL_Low;asm (“nop”);asm (“nop”);
}
/***************************************************************
* 河南科技大学一队
*
* 函数名称:void SCCB_Stop(void)
* 功能说明:SCCB读取字节函数
* 参数说明:
* 函数返回:读取字节
* 修改时间:2018年3月4日
* 备 注:
***************************************************************/
void SCCB_Stop(void)
{
SCL_Out;
SDA_Out;
SCCB_Wait();
SDA_Low;
SCCB_Wait();
SCL_High;asm (“nop”);asm (“nop”);
SCCB_Wait();
SDA_High;
SCCB_Wait();
}
/***************************************************************
* 河南科技大学一队
*
* 函数名称:uint8 SCCB_SendByte(uint8 Data)
* 功能说明:SCCB读取字节函数
* 参数说明:
* 函数返回:读取字节
* 修改时间:2018年3月4日
* 备 注:
***************************************************************/
uint8 SCCB_SendByte(uint8 Data)
{
uint8 i;
uint8 Ack;
SDA_Out;
for( i=0; i<8; i++)
{
if(Data & 0x80) SDA_High;
else SDA_Low;
Data <<= 1;
SCCB_Wait();
SCL_High;asm (“nop”);asm (“nop”);
SCCB_Wait();
SCL_Low;asm (“nop”);asm (“nop”);
SCCB_Wait();
}
SDA_High;
SDA_In;
SCCB_Wait();
SCL_High;asm (“nop”);asm (“nop”);
SCCB_Wait();
Ack = SDA_Data;
SCL_Low;asm (“nop”);asm (“nop”);
SCCB_Wait();
return Ack;
}
/***************************************************************
* 河南科技大学一队
*
* 函数名称:uint8 SCCB_ReadByte(void)
* 功能说明:SCCB读取字节函数
* 参数说明:
* 函数返回:读取字节
* 修改时间:2018年3月4日
* 备 注:
***************************************************************/
uint8 SCCB_ReadByte(void)
{
uint8 i;
uint8_t byte;
SCL_Out;
SDA_In; //使能输入
for( i=0; i<8; i++)
{
SCL_Low;asm (“nop”);asm (“nop”);
SCCB_Wait();
SCL_High;asm (“nop”);asm (“nop”);
SCCB_Wait();
byte = (byte<<1)|(SDA_Data & 1);
}
SCL_Low;
SDA_Out;
return byte;
}
/***************************************************************
* 河南科技大学一队
*
* 函数名称:static void SCCB_Ack(void)
* 功能说明:IIC有回复信号
* 参数说明:
* 函数返回:void
* 修改时间:2018年3月4日
* 备 注:
***************************************************************/
static void SCCB_Ack(void)
{
SCL_Out;
SDA_Out;
SCL_Low;
SDA_Low;
SCCB_Wait();
SCL_High;
SCCB_Wait();
SCL_Low;
SCCB_Wait();
}
/***************************************************************
* 河南科技大学一队
*
* 函数名称:static void SCCB_NAck(void)
* 功能说明:IIC无回复信号
* 参数说明:
* 函数返回:void
* 修改时间:2018年3月4日
* 备 注:
***************************************************************/
static void SCCB_NAck(void)
{
SCL_Out;
SDA_Out;
SCL_Low;
SCCB_Wait();
SDA_High;
SCCB_Wait();
SCL_High;
SCCB_Wait();
SCL_Low;
SCCB_Wait();
}
/***************************************************************
* 河南科技大学一队
*
* 函数名称:uint8_t SCB_RegWrite(uint8 Device,uint8 Address,uint16 Data)
* 功能说明:向摄像头写入数据
* 参数说明:
* 函数返回:void
* 修改时间:2018年3月4日
* 备 注:
***************************************************************/
uint8_t SCB_RegWrite(uint8 Device,uint8 Address,uint16 Data)
{
uint8 i;
uint8 Ack;
SCCB_Star();
Ack = SCCB_SendByte(Device);
if( Ack )
{
return Ack;
}
Ack = SCCB_SendByte(Address);
if( Ack )
{
return Ack;
}
Ack = SCCB_SendByte((uint8)(Data>>8));
Ack = SCCB_SendByte((uint8)Data);
if( Ack )
{
return Ack;
}
SCCB_Stop();
return Ack;
}
/***************************************************************
* 河南科技大学一队
*
* 函数名称:uint8_t SCB_RegRead(uint8_t Device,uint8_t Address,uint16_t *Data)
* 功能说明:读取摄像头寄存器的数据
* 参数说明:
* 函数返回:void
* 修改时间:2018年3月4日
* 备 注:
***************************************************************/
uint8_t SCB_RegRead(uint8_t Device,uint8_t Address,uint16_t *Data)
{
uint8 i;
uint8 Ack = 0;
Device = Device<<1;
SCCB_Star();
Ack += SCCB_SendByte(Device);
Ack += SCCB_SendByte(Address);
SCCB_Star();
Ack += SCCB_SendByte(Device + 1);
*Data = SCCB_ReadByte();
SCCB_Ack();
*Data = *Data<<8;
*Data += SCCB_ReadByte();
SCCB_NAck();