智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2776|回复: 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
回复

使用道具 举报

0

主题

1

帖子

0

精华

注册会员

Rank: 2

积分
128
威望
55
贡献
33
兑换币
33
注册时间
2013-7-26
在线时间
20 小时
毕业学校
东北大学
2#
发表于 2015-2-6 16:39:36 | 只看该作者
你那个图像分割问题,是不是你在场中断来的时候传送图像,这样这一场初始的几个行中断你就接不到,然后发送完图像继续接受,但只接受了一点这一场就完了,随后接着一场的第一行继续,知道行计数满了。所以你的图像下面是这一场,之后是下一场的图像
回复 支持 反对

使用道具 举报

16

主题

1229

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
7678

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

QQ
威望
3484
贡献
2020
兑换币
1673
注册时间
2011-9-8
在线时间
1087 小时
3#
发表于 2015-2-6 16:55:51 | 只看该作者
这个问题以前也遇到过,其实很简单的,加一个缓存数组就好了,采集完,复制一下,然后发送复制的那个数组的,瞬间就好了。
回复 支持 反对

使用道具 举报

10

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
431
威望
203
贡献
122
兑换币
111
注册时间
2013-8-20
在线时间
53 小时
毕业学校
浙江工业大学
4#
 楼主| 发表于 2015-2-6 17:20:36 | 只看该作者
ganlei 发表于 2015-2-6 16:55
这个问题以前也遇到过,其实很简单的,加一个缓存数组就好了,采集完,复制一下,然后发送复制的那个数组的 ...

增加了一个ImageBuf1[ROW][COL]

//main.c中发送部分修改
for(i=0; i<ROW; i++)
      {
        for(j=0;j<COL ;j++)
        {
          if(ImageBuf1[j] == 0xFF) ImageBuf1[j]--;
          uart_putchar(UART4,ImageBuf1[j]);         
        }
      }


//isr.c 对应部分修改

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

      rowCnt = 0;

      ImageBuf1[ROW][COL] = ImageBuf[ROW][COL];   //根据你说的,缓存数组

      DMA_DIS(DMA_CH4); //关DMA

      disable_irq(87);//关行

      enable_irq(88);//开场  

    }




结果变成黑屏了

求指教!





回复 支持 反对

使用道具 举报

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中发送部分修改

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

使用道具 举报

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)里  复制数组不就是把整幅图复制的么?
回复 支持 反对

使用道具 举报

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 小时
毕业学校
浙江工业大学
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 小时
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';
}
回复 支持 反对

使用道具 举报

28

主题

2228

帖子

1

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
15822

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 13:50 , Processed in 0.085916 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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