jssd 发表于 2011-4-20 17:57:42

请教大虾EPM240读取摄像头时序的VHDL编程!!!!!!!!!!!!!!!

http://cache.amobbs.com/bbs_upload782111/files_38/ourdev_632336B16XCL.JPG
(原文件名:摄像头时序.JPG)

http://cache.amobbs.com/bbs_upload782111/files_38/ourdev_632337RWMO72.JPG
(原文件名:摄像头时序2.JPG)

摄像头是640X480灰度图像,一个字节就是一个像素的值。上面这两个时序为摄像头时序,编程写了好多次,又改了N多次,还是不行,哪位大虾可以帮帮我。用VHDL怎么写(以前用ARM7写过成功的。硬件没问题。初学CPLD,EPM240不大听我的话。。。)?谢谢!!!!!!!!!!!!

jssd 发表于 2011-4-20 18:28:07

while(1)
    {
      while((IO0PIN&OV7141_VSYNC) == 0);
      while((IO0PIN&OV7141_VSYNC) != 0);
      for(ii=0;ii<480;ii++)
      {
            while((IO0PIN&OV7141_HREF) == 0);
            jj = 0;
            while((IO0PIN&OV7141_HREF) != 0)
            {
                while((IO0PIN&OV7141_PCLK) == 0);
                datcode = IO0PIN;
                jj++;
                while((IO0PIN&OV7141_PCLK) != 0);
            }
      }
    }
这是单片机的程序。

jssd 发表于 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的程序,不过不知道哪出错,采集不到数据

jssd 发表于 2011-4-20 18:47:31

等待大虾。。。

TimCheng 发表于 2011-4-21 13:59:35

LZ的头像很可爱,呵呵。。。。
我不懂FPGA,正想学,你这是什么项目啊?
页: [1]
查看完整版本: 请教大虾EPM240读取摄像头时序的VHDL编程!!!!!!!!!!!!!!!