智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2892|回复: 12
打印 上一主题 下一主题

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

  [复制链接]

10

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
431
威望
203
贡献
122
兑换币
111
注册时间
2013-8-20
在线时间
53 小时
毕业学校
浙江工业大学
跳转到指定楼层
1#
发表于 2015-2-6 14:58:08 | 只看该作者 回帖奖励 |正序浏览 |阅读模式


如图是什么情况啊,改了3天了。之前在第十届总贴那边也问了。按照他们的方法试过了,还是不行啊。

//main.c发送部分

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 ;

      EnableInterrupts;

    }
  }



//---VSYN场中断处理
void PORTB_IRQHandler()
{
  DisableInterrupts;

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

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

    rowCnt = 0;

    Image_Flag = 1;

    DMA_IRQ_DIS(DMA_CH4);//关DMA

    disable_irq(88);//关场中断

    enable_irq(87);//开行中断

  }

  EnableInterrupts;
}




void PORTA_IRQHandler()
{
  DisableInterrupts;

  //---HREF行中断处理
  DMA_IRQ_DIS(DMA_CH4);

  if( PORTA_ISFR & (1 << 16))         //PTA16触发中断  
  {
    Image_Flag = 0 ;

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

    //-------------DAM初始化通道4,数据源为PTD,每次存在数组ImageBuf[]指针中,PCLK接PTE5触发,每次传输1个字节,每次触发传输COL次,上升沿触发

    DMA_PORTx2BUFF_Init (DMA_CH4, (void *)&PTD_BYTE0_IN, ImageBuf[rowCnt], PTE5, DMA_BYTE1, COL, DMA_rising);   

    DMA_EN(DMA_CH4);  //----使能DMA,初始化的时候禁止DMA

    rowCnt++;

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

      rowCnt = 0;

      DMA_DIS(DMA_CH4); //关DMA

      disable_irq(87);//关行

      enable_irq(88);//开场  

    }

  }
  EnableInterrupts;
}



//DMA中断
void DMA_CH4_Handler(void)
{
  //DMA通道4
  DisableInterrupts;

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

  Image_Flag = 0 ;

  EnableInterrupts;
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

28

主题

2228

帖子

1

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
15827

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

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

使用道具 举报

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初始化



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




回复 支持 反对

使用道具 举报

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;


    }

回复 支持 反对

使用道具 举报

28

主题

2228

帖子

1

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
15827

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

QQ
威望
7436
贡献
4217
兑换币
5197
注册时间
2013-12-9
在线时间
2087 小时
10#
发表于 2015-2-6 19:32:07 | 只看该作者
1、主函数里发送完图像开总中断之前对场中断写1清下标志位。
2、DMA的初始化放在场中断里。
回复 支持 反对

使用道具 举报

162

主题

2048

帖子

5

精华

超级版主

岳麓山没有车神

Rank: 10Rank: 10Rank: 10

积分
14920

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

QQ
威望
6285
贡献
5963
兑换币
2581
注册时间
2013-11-14
在线时间
1336 小时
9#
发表于 2015-2-6 18:52:33 | 只看该作者
我的代码:
uint8 b_TxImageInformation(uint8 CMOS_Pixel_org[][Beholder_PixNum_MAX])
{
    v_UartTxOne(0xFF);v_UartTxOne(0xFE);
    v_UartTxOne('I');
    v_UartTxOne('M');
    v_UartTxOne('A');
    v_UartTxOne('G');
    v_UartTxOne('E');
   
   
    for(uint8 loop_LineNum = 0;loop_LineNum < Beholder_LineY_MAX;loop_LineNum++)
    {
        for(uint8 loop_PixNum = 0;loop_PixNum < Beholder_PixNum_MAX;loop_PixNum++)
        {
            uint8 rec_temp = CMOS_Pixel_org[loop_LineNum][loop_PixNum];
            v_UartTxOne(rec_temp);
        }
    }
   
    return 'T';
}
回复 支持 反对

使用道具 举报

10

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
431
威望
203
贡献
122
兑换币
111
注册时间
2013-8-20
在线时间
53 小时
毕业学校
浙江工业大学
8#
 楼主| 发表于 2015-2-6 18:38:55 | 只看该作者
Quixote 发表于 2015-2-6 18:31
保证下幅图过来时候,此图不被干扰。虽然更感觉这是行中断、场中断有问题。

代码中应该修改哪一点?
回复 支持 反对

使用道具 举报

162

主题

2048

帖子

5

精华

超级版主

岳麓山没有车神

Rank: 10Rank: 10Rank: 10

积分
14920

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

QQ
威望
6285
贡献
5963
兑换币
2581
注册时间
2013-11-14
在线时间
1336 小时
7#
发表于 2015-2-6 18:31:58 | 只看该作者
本帖最后由 Quixote 于 2015-2-6 18:34 编辑

保证下幅图过来时候,此图不被干扰。虽然更感觉这是行中断、场中断有问题。
回复 支持 反对

使用道具 举报

10

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
431
威望
203
贡献
122
兑换币
111
注册时间
2013-8-20
在线时间
53 小时
毕业学校
浙江工业大学
6#
 楼主| 发表于 2015-2-6 18:30:06 | 只看该作者
ganlei 发表于 2015-2-6 17:29
不是复制一个发一个,整幅图像复制完了再发。

在if(rowCnt == ROW)里  复制数组不就是把整幅图复制的么?
回复 支持 反对

使用道具 举报

16

主题

1229

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
7678

优秀会员奖章论坛元老奖章活跃会员奖章在线王奖章

QQ
威望
3484
贡献
2020
兑换币
1673
注册时间
2011-9-8
在线时间
1087 小时
5#
发表于 2015-2-6 17:29:19 | 只看该作者
lifuxian1994 发表于 2015-2-6 17:20
增加了一个ImageBuf1[ROW][COL]

//main.c中发送部分修改

不是复制一个发一个,整幅图像复制完了再发。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-19 16:28 , Processed in 0.066494 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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