智能车制作

 找回密码
 注册

扫一扫,访问微社区

12
返回列表 发新帖
楼主: lifuxian1994
打印 上一主题 下一主题

ov7620+k60 DMA采集 图像有明显的分割 求教!!!

  [复制链接]

6

主题

291

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4936
威望
2451
贡献
1463
兑换币
1663
注册时间
2013-9-21
在线时间
511 小时
11#
发表于 2015-2-6 20:22:48 | 只看该作者
lifuxian1994 发表于 2015-2-6 18:30
在if(rowCnt == ROW)里  复制数组不就是把整幅图复制的么?

你也是用的岱默的吧,我的程序,不过还不是最佳方案
void PORTA_IRQHandler()
{
   //---HREF行中断处理
       if (rowCnt==0)
          SampleFlag=0;
    if( PORTA_ISFR & (1 << 9))         //PTA9触发中断  
    {
      HREFflag++;
      PORTA_ISFR  |= (1 << 9);        //写1清中断标志位
      if (HREFflag==1)
      {
        HREFflag=0;


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

        rowCnt++;
       SampleFlag=2;
        if(rowCnt >= ROW)
        {
          rowCnt = 0;
          DMA_DIS(DMA_CH4);

          //---------若为动态显示,删除此行------------//
          DisableInterrupts;
        }
      }
    }

    //---VSYN场中断处理
    if(PORTA_ISFR & (1 << 27))         //PTA27触发中断  场中断
    {
        PORTA_ISFR  |= (1 << 27);       //写1清中断标志位
        rowCnt = 0;
        SampleFlag = 1;
    }
}


主函数:
while(1)
    {

      //DisableInterrupts;
      if (SampleFlag == 1)
     {
        uart_putchar(UART1,0xFF);  //图像头
     for(i=0; i<ROW/4; i++)
      {
        for(j=0;j<COL/6 ;j++)
        {
          if(ImageBuf[i*4][j*6] == 0xFF) ImageBuf[i*4][j*6]--;


          uart_putchar(UART1,ImageBuf[i*4][j*6]);
         }

       }
      }
      EnableInterrupts;


    }

回复 支持 反对

使用道具 举报

10

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
431
威望
203
贡献
122
兑换币
111
注册时间
2013-8-20
在线时间
53 小时
毕业学校
浙江工业大学
12#
 楼主| 发表于 2015-2-6 21:08:50 | 只看该作者
六步上篮 发表于 2015-2-6 19:32
1、主函数里发送完图像开总中断之前对场中断写1清下标志位。
2、DMA的初始化放在场中断里。

while(1)
  {
    if(Image_Flag == 1)
    {

      DisableInterrupts;

      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]);         
        }
      }

      Image_Flag = 0 ;

      PORTB_ISFR  |= (1 << 0);        //写1清中断标志位

      EnableInterrupts;

    }
  }
}


//PORTB场中断
void PORTB_IRQHandler()
{
  DisableInterrupts;

  if(PORTB_ISFR & (1 << 0))         //PTB0触发中断  场中断
  {

    PORTB_ISFR  |= (1 << 0); //写1清中断标志位

    rowCnt = 0;

    Image_Flag = 1;

        //-------------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_IRQ_DIS(DMA_CH4);//关DMA

    disable_irq(88);//关场中断

    enable_irq(87);//开行中断

  }

  EnableInterrupts;
}



//注释掉PORTA的DMA初始化



按你的说法改,重复采集到黑屏。




回复 支持 反对

使用道具 举报

28

主题

2228

帖子

1

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
15822

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章资源大师奖章

QQ
威望
7433
贡献
4215
兑换币
5195
注册时间
2013-12-9
在线时间
2087 小时
13#
发表于 2015-2-6 21:34:10 | 只看该作者
你的场中断刚一来就把Image_Flag 置1了?这时候一幅图才刚刚到来啊亲!!!应该是在采集够了一定行后Image_Flag 才能置1的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2025-1-16 16:12 , Processed in 0.045621 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表