智能车制作

标题: OV7620的图像采集问题。。各路大神过来瞧瞧吧! [打印本页]

作者: qw837372449    时间: 2016-3-1 22:15
标题: OV7620的图像采集问题。。各路大神过来瞧瞧吧!
之前我用的岱默的例程调试在上位机上显示出来还是不错的,但今天我用学长的程序改完之后在上位机上显示就变成。
[attach]84084[/attach]就是采集的图像分成了四份(不是一副图像分成了四份,而是同一个图像在显示窗口显示了四份)在网上看说什么可能是场行中断的问题。我也不知道具体出在哪 刚改来改去都不行 只好来求助啦。
这是我的主程序
/***********/
void main(void)
{      
        uint8 i,j;
        DisableInterrupts;

        uart_init(UART0,115200);
        delay();
        CCD_INC();
        set_vector_handler(PORTD_VECTORn,PORTD_IRQHandler);
        set_vector_handler(DMA4_VECTORn,DMA_CH4_Handler);
        //enable_irq (PORTD_IRQn);
        disable_irq(PIT0_IRQn);
        disable_irq(PIT1_IRQn);

        gpio_init (PTE10, GPO,HIGH);
        gpio_init (PTE12, GPO,HIGH);

        EnableInterrupts;
        while(1)
        {
          uart_putchar(UART0,0xff);
    for(i=0;i<DATALINE;i++)
    {
        for(j=0;j<DATACOUNT;j++)
        {
                    if(j%2==0)
                        {
                    if(ADdata[j]==0xff)
                        ADdata[j]--;
                    uart_putchar(UART0,ADdata[j]);
                        }
        }

          EnableInterrupts;
        }
        }


这是我的外部中断程序
/***************************/
void PORTD_IRQHandler(){

      if(PORTD_ISFR & 0x2000)            //PTD13触发中断,采集的行中断
    {
        PORTD_ISFR  |= 0x2000;         //写1清中断标志位

         if(Sample_Flag==0)
      {
        return;
      }
      dma_portx2buff_init(DMA_CH4, (void *)&PTE_B0_IN, ADdata[0], PTD14, DMA_BYTE1, DATACOUNT, DMA_RISING);

        if((LinCout%(480/DATALINE)==0)&&(LinADCout<DATALINE))
        {
          delay() ;      //摄像头行中断改为下降沿触发,有效点前面有一段行消隐区,故需要一段延时消除消耗掉,该处的时间,程序里面的需要根据单片机的主频调整。
          DMA_DADDR(DMA_CH4) = (uint32_t)ADdata[LinADCout] ;   //数据存储地址变化
          DMA_EN(DMA_CH4);                                    //使能通道CHn 硬件请求      (这样才能继续触发DMA传输)
          DMA_IRQ_EN(DMA_CH4) ;                             //允许DMA通道传输
          //PTA16_OUT = ~PTA16_OUT ;
         LinADCout ++ ;
        }
        LinCout++;

         if(LinADCout==DATALINE)
         {
           LinADCout=0;
          // DMA_DIS(DMA_CH4);
           //DisableInterrupts;
          DMA_Over_Flg = 1 ;
         }
    }

    if(PORTD_ISFR & 0x8000)         //PTD15触发中断,采集的场中断。
    {
        PORTD_ISFR  |= 0x8000;        //写1清中断标志位

     //uart_putchar(UART0,LinCout>>8);      //采样行数
       //uart_putchar(UART0,LinCout);         //采样行数
        LinCout = 0 ;
        LinADCout=0;
        Sample_Flag=1;
        port_init (PTD13, IRQ_FALLING | ALT1 | PULLUP );
        PORTD_ISFR  |= 0x2000;         //写1清中断标志位
    }

}






有人遇到过这种情况吗
还请大家分享下经验啊

作者: 2862356756    时间: 2016-3-21 23:33
你现在解决了没
作者: 1327010258    时间: 2016-3-26 16:57
行中断不是只能上升沿触发,场中断上升,下降都可以。错了别怪我,看的蓝宙视频。





欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2