|
楼主 |
发表于 2011-4-20 18:47:03
|
显示全部楼层
CAMERA_PROCESS:process(clk,rst,CAMERA_PCLK,CAMERA_HREF,CAMERA_VREF)
begin
if(clk'event and clk='0')then
case Cstate is
when 0=>if(CAMERA_VREF='0')then --等待场信号变高
Cstate <= 0;
else
Cstate <= 1;
end if;
when 1=>if(CAMERA_VREF='1')then --等待场信号变低
Cstate <= 1;
else
ram_addr_wr <= "0000000000000000000"; --场信号变低,RAM地址从0开始写
ram_data_dr <= '0'; --RAM数据方向为输入
ram_addr_en <= '0'; --RAM地址为摄像头写进
RAM_nWE_OUT <= '0'; --RAM写使能
RAM_nOE_OUT <= '1'; --RAM读禁
Cstate <= 2;
end if;
when 2=>if(ram_addr_wr="0101011000000000000")then --如果地址达到640*480就停止读摄像头
Cstate <= 6;
ram_data_dr <= '1'; --RAM数据方向为输出
ram_addr_en <= '1'; --RAM地址为控制器写进
RAM_nWE_OUT <= '1'; --RAM写禁
RAM_nOE_OUT <= '0'; --RAM读使能
else
if(CAMERA_HREF='0')then --等待行信号变高
Cstate <= 2;
else
Cstate <= 3;
end if;
end if;
when 3=>if(CAMERA_PCLK='0')then --等待像素时钟信号变高
Cstate <= 3;
else
Cstate <= 4;
end if;
when 4=>ram_data_wr(15 downto 11) <= CAMERA_DATA(7 downto 3); --上升沿读数据,VGA输出灰度图像
ram_data_wr(10 downto 5) <= CAMERA_DATA(7 downto 2);
ram_data_wr(4 downto 0) <= CAMERA_DATA(7 downto 3);
Cstate <= 5;
when 5=>if(CAMERA_PCLK='1')then --等待像素时钟信号变低
Cstate <= 5;
else
ram_addr_wr <= ram_addr_wr + '1'; --RAM地址+1,再判断是否采集完毕
Cstate <= 2;
end if;
when 6=>if(rst='0')then --复位可以重新采集
Cstate <= 0;
LED_OUT <= '0'; --测试用
else
Cstate <= 4;
LED_OUT <= '1';
end if;
end case;
end if;
end process CAMERA_PROCESS;
这个是EPM240的程序,不过不知道哪出错,采集不到数据 |
|