示例#1
0
/**
  * @brief 	Write data to specific register in Camera Module OV7670
  * @param	Address: address of register
  * 		Value: value of data to be written into register
  * @retval	ERROR, SUCCESS
 */
ErrorStatus Camera_WriteReg(uint8_t Address, uint8_t Value)
{
	// Create start condition on SCCB/I2C interface
	SCCB_Start();
	// Write data (Address of slave device for Write) on SCCB/I2C interface
	if((SCCB_Write(WriteAddress)) == Error)
	{
		SCCB_Stop();			// Create stop condition on SCCB/I2C interface
		return(ERROR);			// Return error and cancel the communication
	}
	Delay_us(100);
	// Write data (Address of register in Camera Module)on SCCB/I2C interface
	if((SCCB_Write(Address)) == Error)
	{
		SCCB_Stop();			// Create stop condition on SCCB/I2C interface
		return(ERROR);			// Return error and cancel the communication
	}
	// Write data (Data to write into register in Camera Module)on SCCB/I2C interface
	if((SCCB_Write(Value)) == Error)
	{
		SCCB_Stop();			// Create stop condition on SCCB/I2C interface
		return(ERROR);			// Return error and cancel the communication
	}
	// Create stop condition on SCCB/I2C interface
	SCCB_Stop();

	return(SUCCESS);
}
示例#2
0
void SCCB_Bytewrite(unsigned char device,unsigned char address,unsigned char data)
{
	unsigned char i;
	unsigned char ack;
	for(i=0;i<20;i++)
	{
		SCCB_Start();
		ack=SCCB_Sendbyte(device);
		if(ack)
		{
			SCCB_Stop();
			continue;
		}
		ack=SCCB_Sendbyte(address);
		if(ack)
		{
			SCCB_Stop();
			continue;
		}
		ack=SCCB_Sendbyte(data);
		if(ack)
		{
			SCCB_Stop();
			continue;
		}
		SCCB_Stop();
		if(ack==0) break;
	}
}
示例#3
0
//读OV7660寄存器
u8 OV_ReadReg(u8 regID, u8 *regDat)
{
	//通过写操作设置寄存器地址
	SCCB_Start();
	if(SCCB_Write(0x42))//写地址
	{
		SCCB_Stop();//发送SCCB 总线停止传输命令
		return 1;//错误返回
	}
	delay_us(10);
  	if(SCCB_Write(regID))//积存器ID
	{
		SCCB_Stop();//发送SCCB 总线停止传输命令
		return 2;//错误返回
	}
	SCCB_Stop();//发送SCCB 总线停止传输命令	
	delay_us(10);	
	//设置寄存器地址后,才是读
	SCCB_Start();
	if(SCCB_Write(0x43))//读地址
	{
		SCCB_Stop();//发送SCCB 总线停止传输命令
		return 3;//错误返回
	}
	delay_us(10);
  	*regDat=SCCB_Read();//返回读到的值
  	noAck();//发送NACK命令
  	SCCB_Stop();//发送SCCB 总线停止传输命令
  	return 0;//成功返回
}
示例#4
0
/**
  * @brief 	Read data form specific register in Camera Module OV7670
  * @param	Address: address of register in Camera Module
  * @retval	ReturnState.Data -> Return read data from register
  * 		ReturnState.State -> Return state of the transmission
 */
ReturnState *Camera_ReadReg(uint8_t Address)
{
	ReturnState returnState;

	// Structure for return Data and State (Success/Error)
	returnState.Data = 0x00;
	returnState.State = ERROR;

	// Create start condition on SCCB/I2C interface
	SCCB_Start();
	// Write data (Address of slave device for Write) on SCCB/I2C interface
	if(Error == (SCCB_Write(WriteAddress)))
	{
		SCCB_Stop();			// Create stop condition on SCCB/I2C interface
		return(&returnState);	// Return error and cancel the communication
	}
	Delay_us(100);
	// Write data (Address of register in Camera Module)on SCCB/I2C interface
	if(Error == (SCCB_Write(Address)))
	{
		SCCB_Stop();			// Create stop condition on SCCB/I2C interface
		return(&returnState);	// Return error and cancel the communication
	}
	// Create stop condition on SCCB/I2C interface
	SCCB_Stop();
	// Delay for SCCB/I2C
	Delay_us(100);
	// Create start condition on SCCB/I2C interface
	SCCB_Start();
	// Write data (Address of slave device for Read) on SCCB/I2C interface
	if(Error == (SCCB_Write(ReadAddress)))
	{
		SCCB_Stop();			// Create stop condition on SCCB/I2C interface
		return(&returnState);	// Return error and cancel the communication
	}
	Delay_us(500);

	// Received data from Camera Module (SCCB/I2C)
	returnState.Data = SCCB_Read();
	// No acknowlage on SCCB/I2C interface
	NoAck();
	// Create stop condition on SCCB/I2C interface
	SCCB_Stop();
	// If everything is done correct return success
	returnState.State = SUCCESS;

	return(&returnState);
}
示例#5
0
int SCCB_ReadByte_one(uint8 *pBuffer,   uint16 length,   uint8 ReadAddress)
{
    if(!SCCB_Start())
    {
        return 0;
    }
    SCCB_SendByte( DEV_ADR );         /* 器件地址 */
    if( !SCCB_WaitAck() )
    {
        SCCB_Stop();
        return 0;
    }
    SCCB_SendByte( ReadAddress );           /* 设置低起始地址 */
    SCCB_WaitAck();
    SCCB_Stop();

    if(!SCCB_Start())
    {
        return 0;
    }
    SCCB_SendByte( DEV_ADR + 1 );               /* 器件地址 */

    if(!SCCB_WaitAck())
    {
        SCCB_Stop();
        return 0;
    }
    while(length)
    {
        *pBuffer = SCCB_ReceiveByte();
        if(length == 1)
        {
            SCCB_NoAck();
        }
        else
        {
            SCCB_Ack();
        }
        pBuffer++;
        length--;
    }
    SCCB_Stop();
    return 1;
}
示例#6
0
int SCCB_WriteByte_one( uint16 WriteAddress , uint8 SendByte )
{
    if(!SCCB_Start())
    {
        return 0;
    }
    SCCB_SendByte( DEV_ADR );                    /* 器件地址 */
    if( !SCCB_WaitAck() )
    {
        SCCB_Stop();
        return 0;
    }
    SCCB_SendByte((uint8)(WriteAddress & 0x00FF));   /* 设置低起始地址 */
    SCCB_WaitAck();
    SCCB_SendByte(SendByte);
    SCCB_WaitAck();
    SCCB_Stop();
    return 1;
}
示例#7
0
/* 函数名:SCCB_WriteByte
 * 描述  :写一字节数据
 * 输入  :- WriteAddress: 待写入地址 	- SendByte: 待写入数据	- DeviceAddress: 器件类型
 * 输出  :返回为:=1成功写入,=0失败
 * 注意  :无        */           
int SCCB_WriteByte( uint16_t WriteAddress , uint8_t SendByte )
{		
    if(!SCCB_Start())
	{
	    return DISABLE;
	}
    SCCB_SendByte( DEV_ADR );                    /* 器件地址 */
    if( !SCCB_WaitAck() )
	{
		SCCB_Stop(); 
		return DISABLE;
	}
    SCCB_SendByte((uint8_t)(WriteAddress & 0x00FF));   /* 设置低起始地址 */      
    SCCB_WaitAck();	
    SCCB_SendByte(SendByte);
    SCCB_WaitAck();   
    SCCB_Stop(); 
    return ENABLE;
}
示例#8
0
//写OV7670寄存器
u8 OV_WriteReg(u8 regID, u8 regDat)
{
	SCCB_Start();//发送SCCB 总线开始传输命令
	if(SCCB_Write(0x42))//写地址
	{
		SCCB_Stop();//发送SCCB 总线停止传输命令
		return 1;//错误返回
	}
	delay_us(10);
  	if(SCCB_Write(regID))//寄存器ID
	{
		SCCB_Stop();//发送SCCB 总线停止传输命令
		return 2;//错误返回
	}
	delay_us(10);
  	if(SCCB_Write(regDat))//写数据到积存器
	{
		SCCB_Stop();//发送SCCB 总线停止传输命令
		return 3;//错误返回
	}
  	SCCB_Stop();//发送SCCB 总线停止传输命令	
  	return 0;//成功返回
}