大家好,我用129的自带I2C,无法写入数据。
void writedata(uint8_t addr, uint8_t val)
{
ROM_I2CMasterSlaveAddrSet(I2C_UNIT, OV7670_ADDR>>1, false);
ROM_I2CMasterDataPut(I2C_UNIT, addr);
ROM_I2CMasterControl(I2C_UNIT, I2C_MASTER_CMD_BURST_SEND_START);
ROM_SysCtlDelay(1000);
while(ROM_I2CMasterBusy(I2C_UNIT));
ROM_SysCtlDelay(1500);
ROM_I2CMasterDataPut(I2C_UNIT, val);
ROM_I2CMasterControl(I2C_UNIT, I2C_MASTER_CMD_BURST_SEND_FINISH);
ROM_SysCtlDelay(1000);
while(ROM_I2CMasterBusy(I2C_UNIT));
}
{
ROM_I2CMasterSlaveAddrSet(I2C_UNIT, OV7670_ADDR>>1, false);
ROM_I2CMasterDataPut(I2C_UNIT, addr);
ROM_I2CMasterControl(I2C_UNIT, I2C_MASTER_CMD_BURST_SEND_START);
ROM_SysCtlDelay(1000);
while(ROM_I2CMasterBusy(I2C_UNIT));
ROM_SysCtlDelay(1500);
ROM_I2CMasterDataPut(I2C_UNIT, val);
ROM_I2CMasterControl(I2C_UNIT, I2C_MASTER_CMD_BURST_SEND_FINISH);
ROM_SysCtlDelay(1000);
while(ROM_I2CMasterBusy(I2C_UNIT));
}
设置根据技术手册的感觉没有错,用示波器也看过,地址和数据都没错,但是就是写不进去,读可以读出来器件ID。跪求各位大佬是什么原因。
xyz549040622:
可以读出来器件ID,说明是I2C部分的初始化是OK的。也说明你的这个写数据的函数也是正确的。只能判断说,你对OV7670的操作不当了。写一个寄存器数据,然后读数据,看看是否正确,这样测试了。
shuhai wang:
回复 xyz549040622:
前辈你好,,我这个程序是写给MPU6050的,然后那个地址编号,忘了改,但是发的地址是对的,上个程序移植的时候忘了改,我写个6050的 电源管理我写了0x80去初始化,但是,读出来之后0x40,相当于,一直在初始化状态,我什么都不做,就一开始,初始化I2C,然后写6050的电源管理寄存器,然后写0x80之后读出来还是0x40。不知道是不是i2c写有问题还是什么有问题。