對OV7725中的幀率以及PCLK設置不解,故查看相關資料。找到了一些規律,不知是否准確,現總結如下:
在OV7725中有幾個相關的比較重要的寄存器,0X0D、0X11、0X33.
0X0D主要是實現倍頻的,通過高兩位來控制四種倍頻情況,00:不倍頻,01:PLL 4*,
10:PLL 6*,11:PLL 8*。
0X11用來分頻,Bit[5:0]:F(internal clock)=F(input clock)/(Bit[5:0]+1),
范圍是0-31MHZ。
0X33這個地址中代表的內容是虛擬線低八位(Dummy line Low 8 Bits)。觀察0X28,你會發現其中有這么一句話:Decrease frame rate by inserting dummy vertical sync equal to maximum exoposure lines.這就是說要減少幀率的話就得插入虛擬的垂直同步也就是增大lines。
下面從兩段不同的代碼中分析:
1、
30 fps, PCLK = 24Mhz
SCCB_salve_Address = 0x42;
write_SCCB(0x11, 0x01);
write_SCCB(0x0d, 0x41);
write_SCCB(0x2a, 0x00);
write_SCCB(0x2b, 0x00);
write_SCCB(0x33, 0x00);
write_SCCB(0x34, 0x00);
write_SCCB(0x2d, 0x00);
write_SCCB(0x2e, 0x00);
write_SCCB(0x0e, 0x65);
2、
25fps, PCLK = 24Mhz
SCCB_salve_Address = 0x42;
write_SCCB(0x11, 0x01);
write_SCCB(0x0d, 0x41);
write_SCCB(0x2a, 0x00);
write_SCCB(0x2b, 0x00);
write_SCCB(0x33, 0x66);
write_SCCB(0x34, 0x00);
write_SCCB(0x2d, 0x00);
write_SCCB(0x2e, 0x00);
write_SCCB(0x0e, 0x65);
這兩端代碼的輸入clk都是24MHZ,輸出PCLK相同都是24MHZ,但frame rate一個是30fps,一個為25fps,程序中只有0X33不同,如何通過將0X33設置為0X66,從而將30fps變為25fps。看下面的分析:
從圖片中我們可以看到一個VSYNC有510個t(LINE),所以30fps表示有30*510*t(LINE),結合上面對於0X33的分析,因為都是24MHZ,所以30fps和25fps兩個時間相同。故在這510個LINE中插入102個(0X66)LINE,總的時間才會相同。30*510*t(LINE)=25*(510+102)*t(LINE).
當然幀率會隨着PCLK的變化而變化,當PCLK變為12MHZ時,幀率也就減為15fps了。
上面程序中對0X11設為0X01,根據這個公式F(internal clock)=F(input clock)/(Bit[5:0]+1),F(internal clock)=24/2=12MHZ,再將0X0D設為0X41,那應該是PLL 4*,這樣
F(internal clock)=12*4=48MHZ了,而不是所謂的24MHZ啊?難道只是簡單的成2倍的線性關系?暫且先這么理解。
求解釋~~