智能车制作

标题: ov7620 图像采集问题 [打印本页]

作者: lifuxian1994    时间: 2015-2-3 20:58
标题: ov7620 图像采集问题
每一次采集出来的图像有一定的不同,而且出现上下明显错位的图像。求大神分析下。


作者: xhx331153066    时间: 2015-2-4 09:13
串口太慢?数据太多??可能是,我也不知道了~
作者: make1573    时间: 2015-2-4 10:18
边采集边发送肯定会出现重复情况
作者: 泰庆电子    时间: 2015-2-4 12:11
嗯 应该 采集好 再一下 发送。
作者: lifuxian1994    时间: 2015-2-4 14:02
make1573 发表于 2015-2-4 10:18
边采集边发送肯定会出现重复情况

//main.c中串口接收部分

while(1)
  {
    uart_putchar(UART4,0xFF);  //图像头   

    for(i=0; i<ROW; i++)
    {
      for(j=0;j<COL ;j++)
      {
        if(ImageBuf[j] == 0xFF) ImageBuf[j]--;

          uart_putchar(UART4,ImageBuf[j]);
      }
    }
    EnableInterrupts;

  }

//isr.c

extern u32 rowCnt;   //行计数
extern u8 ImageBuf[ROW][COL];
u8 SampleFlag = 0;

void PORTA_IRQHandler()
{
  //---HREF行中断处理
  if( PORTA_ISFR & (1 << 16))         //PTA16触发中断  

    PORTA_ISFR  |= (1 << 16);        //写1清中断标志位

    if ( SampleFlag == 0 )         //不足一场时返回
    {
      return;
    }  

    //-------------DAM初始化通道4,数据源为PTD,每次存在数组ImageBuf[]指针中,PCLK接PTE5触发,每次传输1个字节,每次触发传输320次,上升沿触发
    DMA_PORTx2BUFF_Init (DMA_CH4, (void *)&PTD_BYTE0_IN, ImageBuf[rowCnt], PTE5, DMA_BYTE1, COL, DMA_rising);   //一行中断采列数 DMA下降沿触发
    //----使能DMA,初始化的时候禁止DMA
    DMA_EN(DMA_CH4);

    rowCnt++;

    if(rowCnt == ROW)   //行计数
    {
      rowCnt = 0;

      DMA_DIS(DMA_CH4); //关DMA

      disable_irq(87);//关行

      enable_irq(88);//开场     

      DisableInterrupts;

      SampleFlag = 0;

    }

  }

//通道4

void DMA_CH4_Handler(void)
{
  //DMA通道4
  DMA_IRQ_CLEAN(DMA_CH4);                             //清除通道传输中断标志位    (这样才能再次进入中断)
  DMA_IRQ_DIS(DMA_CH4);                               //禁止DMA   等待下一次行中断来临开启DMA

}


//---VSYN场中断处理

void PORTB_IRQHandler()
{
  if(PORTB_ISFR & (1 << 0))         //PTB0触发中断  场中断
  {
    PORTB_ISFR  |= (1 << 0);       //写1清中断标志位

    disable_irq(88);//关场中断

    enable_irq(87);//开行中断

    rowCnt = 0;

    SampleFlag = 1;

  }
}



作者: lifuxian1994    时间: 2015-2-4 14:03
泰庆电子 发表于 2015-2-4 12:11
嗯 应该 采集好 再一下 发送。

请问 代码中应该修改哪里 才能做到收完一场再发送?

作者: make1573    时间: 2015-2-4 14:36
用的岱默的是吧,他中断采集标志位正在采集时没有置0,你自己改改
作者: lifuxian1994    时间: 2015-2-4 15:09
make1573 发表于 2015-2-4 14:36
用的岱默的是吧,他中断采集标志位正在采集时没有置0,你自己改改

不好意思....我是小白一只。。。没理解这句话。。能否添几段示例代码让我理解下。。

作者: 只是你    时间: 2015-2-4 15:53
while(1)
{
while(SampleFlag )
{
  发送图像的代码
}
}

作者: lifuxian1994    时间: 2015-2-4 16:16
只是你 发表于 2015-2-4 15:53
while(1)
{
while(SampleFlag )

添加了你说的代码,图像还是错位的情况,似乎是下一场的某处显示在了本场。

作者: make1573    时间: 2015-2-4 18:44
lifuxian1994 发表于 2015-2-4 16:16
添加了你说的代码,图像还是错位的情况,似乎是下一场的某处显示在了本场。

在isr.c里面中断DMA采集程序中,采集图像时sampleflag没有置0
作者: 泰庆电子    时间: 2015-2-5 08:29
lifuxian1994 发表于 2015-2-4 14:03
请问 代码中应该修改哪里 才能做到收完一场再发送?

设置标志位吧。

作者: lifuxian1994    时间: 2015-2-6 15:22
泰庆电子 发表于 2015-2-5 08:29
设置标志位吧。

能麻烦你看下么?还是同样的问题

http://www.znczz.com/forum.php?mod=viewthread&tid=230009&extra=page%3D1%26filter%3Dauthor%26orderby%3Ddateline%26orderby%3Ddateline

作者: lifuxian1994    时间: 2015-2-6 15:22
make1573 发表于 2015-2-4 18:44
在isr.c里面中断DMA采集程序中,采集图像时sampleflag没有置0

能麻烦再看下么  还是同样的问题
http://www.znczz.com/forum.php?mod=viewthread&tid=230009&extra=page%3D1%26filter%3Dauthor%26orderby%3Ddateline%26orderby%3Ddateline





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