配置的具体方法可采用三相写数据的方式,即在写寄存器过程中先发送OV9120的ID地址,然后发送写数据的目地寄存器地址,接着是要写的数据。如果连续给寄存器写数据,那么,写完一个寄存器后,OV9120会自动把寄存器地址加1,然后在程序控制下继续向下写,而不需要再次输入地址,这样,三相写数据就变成了两相写数据。由于本系统只需对有限个不连续寄存器的数据进行更改,而对全部寄存器都加以配置会浪费很多时间和资源,所以,可以只对需要更改数据的寄存器进行写数据。而对于每一个变化的寄存器,则都采用三相写数据的方法。
系统配置完毕后,将进行图像数据的采集。在采集图像的过程中,最主要的是判别一帧图像数据的开始和结束时刻。在仔细研究了OV9120输出同步信号(VSYNC是垂直同步信号、HREF是水平同步信号、PCLK是输出数据同步信号)的基础上,用VHDL语言便可实现采集过程起始点的精确控制。
VSYNC的上升沿表示一帧新的图像的到来,下降沿则表示一帧图像数据采集的开始(CMOS图像传感器是按列采集图像的)。HREF是水平同步信号,其上升沿表示一列图像数据的开始。PCLK是输出数据同步信号。HREF为高电平即可开始有效地数据采集,而PCLK下降沿的到来则表明数据的产生,PCLK每出现一个下降沿,系统便传输一位数据。HREF为高电平期间,系统共传输1280位数据。也就是说:在一帧图像中,即VSYNC为低电平期间,HREF会出现1024次高电平。而下一个VSYNC信号上升沿的到来则表明分辨率1280×1024的图像采集过程的结束。
实现采集的软件设计可在MAX+plusII环境中实现。软件设计的主要工作是CPLD对OV9120的配置。在开始充电时,首先对系统进行初始化。CPLD的全局时钟可用24MHz的晶振电路产生。配置时首先配置SCCB,配置完毕后将SCCE置1。当接收到DSP的开始采集信号后,根据同步信号的状态来判定是否开始采集数据,采集数据的同时可将数据送往SRAM。当DSP接收到CPLD的读取信号后,即可开始读取数据,并在DSP中完成图像的处理。采集处理的部分主程序如下:
reset2:process(reset_i,n1,clk)
begin
if reset_i=‘0’then scce_p<=‘1’;
else
if(n1=‘1’ or m1=‘1’)then
scce_p<=‘1’;
else scce p<=‘0’;
end if;
end if;
end process reset2;
clk1: process(n1,clk)
variable a: integer range 254 to 0;
begin
if(sio_c_start=‘0’ OR n1=‘1’) then
q<=‘1’;a:=0;
else
if(clk'event and clk=‘1’) then
if(sio_c start=‘1’ and n1=‘0’) then
if a<254 then; a:=a+1;
else a:=1;
end if;
if a<127 then q<=‘0’;
else q<=‘1’; end if;
end if;
end if;
end if;
end process clk1;
lock:process(sio_c_start,q)
variable n: integer range 8 to 0;
begin
if( sio_c_start=‘0’ then load<=‘1’;n:=0;
else
if (q 'event and q=‘0’) then
if n<8 then n?=n+1;
load<=‘0’;
else n:=0;load<=‘1’;
end if;
end if;
end if;
end process lock;
reg1: process(n1,q,load)
variable pp:std_logic_vector(7 downto 0);?
variable b:integer range 7 to 0;
variable c:integer range 13 to 0;
begin
if(n1=‘1’or reset_i=‘0’) then p<=‘1’;c:=0; b:=0;QB<=‘0’;
else
if(q'event and q=‘0’)then
if load=‘1’ then;
c:=c+1?
if c<13 then
if c=1 then
pp:=″11000010″;
elsif c=2 then
pp:=″00001100″;
elsif c=3 then
pp:=″00101001″;
elsif c=4 then
pp?=″11000010″;
elsif c=5 then
pp:=″00001101″;
elsif c=6 then
pp:=″10000000″;
elsif c=7 then
pp:=″11000010″;
elsif c=8 then
pp:=″00010001″;
elsif c=9 then
pp:=″10000000″;
elsif c=10 then
pp:=″11000010″;
,黑白CMOS图像传感器OV9120的原理及应用