|
本来写进去的寄存器和值分别如下:
{0x3a, 0x04},
{0x40, 0xd0},
{0x12, 0x14},
{0x32, 0x80},
{0x17, 0x16},
{0x18, 0x04},
{0x19, 0x02},
{0x1a, 0x7b},//0x7a,
{0x03, 0x06},//0x0a,
{0x0c, 0x00},
。。。。。。
执行初始化程序,将值写进寄存器:
for(i=0;i<CHANGE_REG_NUM;i++)
{
if( 0 == wrOV7670Reg (change_reg[0],change_reg[1]) )
{
return 0;
}
}
尝试着回读:
for(i=0;i<10;i++)
{
temp=0;
//Delay_nMS(10);
if( 0 == rdOV7670Reg (change_reg[0],&temp) )
{
//return 0;
}
tmp_reg=temp;
}
下面是寄存器读回的数据:刚好是隔一个对一个(出现00读取失败的时候均发生在是在if(0==SCCBwriteByte(0x42))
)
查看读会的寄存器值 (原文件名:未命名.jpg)
////////////////////////////
//功能:读OV7660寄存器
//返回:1-成功 0-失败
uchar rdOV7670Reg(uchar regID, uchar *regDat)
{
int i;
//通过写操作设置寄存器地址
startSCCB();
for (i = DEL_OV7670; i > 0; i--);
if(0==SCCBwriteByte(0x42))
{
stopSCCB();
return(0);
}
for (i = DEL_OV7670; i > 0; i--);
if(0==SCCBwriteByte(regID))
{
stopSCCB();
return(0);
}
stopSCCB();
for (i = DEL_OV7670; i > 0; i--);
//设置寄存器地址后,才是读
startSCCB();
if(0==SCCBwriteByte(0x43))
{
stopSCCB();
return(0);
}
for (i = DEL_OV7670; i > 0; i--);
*regDat=SCCBreadByte();
noAck();
stopSCCB();
return(1);
}
这究竟是怎么会事,调试7660两个晚上了,还没出来,郁闷!!! |
|