RX8025T时钟芯片无法设置写入模式

2019-07-20 11:04发布

IC写入报错(IIC_Write_ERROR)

[mw_shl_code=c,true]/*******************************************************************************
函数名:StartI2c
功能:  产生I2C开始信号(SDA在SCL高电平时产生一个下降沿信号)
参数:  无
返回值:无
*******************************************************************************/
void R8025_I2C_Start(void) //产生起始信号              
{
        R8025_I2C_SDA_OUT();
        SDA_H;
  SCL_H;
  delay_us(5);
  SDA_L;
  delay_us(5);
  SCL_L;
}
/*******************************************************************************
函数名:StopI2c
功能:  产生I2C停止信号(SDA在SCL高电平时产生一个上升沿信号)
参数:  无
返回值:无
*******************************************************************************/
void R8025_I2C_Stop(void)//产生停止信号              
{
        SCL_L;
        R8025_I2C_SDA_OUT();
        SDA_L;
        delay_us(5);
        SCL_H;
        delay_us(5);
  SDA_H;
}
/////////////////////////////////
u8 IIC_Write_Byte(u8 Data)
{
        u8 i;
        R8025_I2C_SDA_OUT();
        for(i=0;i<8;i++)
        {
                SCL_L;
                delay_us(5);
                if((Data&0x80)>0) //0x80  1000 0000
                 SDA_H;
                else
                 SDA_L;
                delay_us(5);
                SCL_H;
                Data<<=1;
                delay_us(5);
        }
        SCL_L;
        R8025_I2C_SDA_IN();
        delay_us(5);
        SCL_H;
        //delay_us(5);
        i=0;
        while(GPIO_ReadInputDataBit(R8025_GPIO_I2C,R8025_I2C_SDA))
        {
               
                if(++i>12)
                {
                        SCL_L;
                        return 0;
                }
        }
        SCL_H;
        return 1;
}
/////////////////////////////////
u8 IIC_Read_Byte(void)
{
        u8 i;
        u8 IC_data=0;
        SCL_L;
        R8025_I2C_SDA_OUT();
        SDA_H;
        R8025_I2C_SDA_IN();
        for(i=0;i<8;i++)
        {
                SCL_H;
                delay_us(5);
                IC_data<<=1;
                IC_data=IC_data|GPIO_ReadInputDataBit(R8025_GPIO_I2C,R8025_I2C_SDA);
                delay_us(2);
                SCL_H;
                delay_us(2);//读取数据
                SCL_L;
                delay_us(2);
        }
        delay_us(5);
        SCL_L;
        R8025_I2C_SDA_OUT();
        SDA_L;
        return IC_data;
}
u8 write_data(u8 addr,u8 *buf,u8 len)
{
        u8 i;
        R8025_I2C_Start();
        if(IIC_Write_Byte(RX8025_ADDR_WRITE)==0)
        {
                printf("IIC_Write_ERROR ");
                R8025_I2C_Stop();
                return 0;
        }
        if(IIC_Write_Byte(addr)==0)
        {
                R8025_I2C_Stop();
                printf("IIC_ADDR_ERROR ");
                return 0;
        }
        for(i=0;i<len;i++)
        {
                if(IIC_Write_Byte(buf)==0)
                {
                        R8025_I2C_Stop();
                        return 0;
                }
        }
        R8025_I2C_Stop();
        delay_us(5);
        SDA_L;
        SCL_L;
        return 1;
}

[/mw_shl_code]


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。