智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1589|回复: 13
打印 上一主题 下一主题

ov7620 图像采集问题

[复制链接]

10

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
431
威望
203
贡献
122
兑换币
111
注册时间
2013-8-20
在线时间
53 小时
毕业学校
浙江工业大学
跳转到指定楼层
1#
发表于 2015-2-3 20:58:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
每一次采集出来的图像有一定的不同,而且出现上下明显错位的图像。求大神分析下。

本帖子中包含更多资源

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

x
回复

使用道具 举报

55

主题

2147

帖子

0

精华

杰出人士

大黑山上老司机 DLNU_SOUL

Rank: 12Rank: 12Rank: 12

积分
17206

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

威望
8054
贡献
5394
兑换币
5230
注册时间
2013-10-4
在线时间
1879 小时
2#
发表于 2015-2-4 09:13:25 | 只看该作者
串口太慢?数据太多??可能是,我也不知道了~
回复 支持 反对

使用道具 举报

6

主题

291

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4936
威望
2451
贡献
1463
兑换币
1663
注册时间
2013-9-21
在线时间
511 小时
3#
发表于 2015-2-4 10:18:51 | 只看该作者
边采集边发送肯定会出现重复情况
回复 支持 反对

使用道具 举报

10

主题

1514

帖子

0

精华

金牌会员

智能车,首选泰庆

Rank: 6Rank: 6

积分
1715

活跃会员奖章在线王奖章

QQ
威望
427
贡献
400
兑换币
497
注册时间
2014-11-4
在线时间
444 小时
4#
发表于 2015-2-4 12:11:01 | 只看该作者
嗯 应该 采集好 再一下 发送。
回复 支持 反对

使用道具 举报

10

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
431
威望
203
贡献
122
兑换币
111
注册时间
2013-8-20
在线时间
53 小时
毕业学校
浙江工业大学
5#
 楼主| 发表于 2015-2-4 14:02:20 | 只看该作者
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;

  }
}


回复 支持 反对

使用道具 举报

10

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
431
威望
203
贡献
122
兑换币
111
注册时间
2013-8-20
在线时间
53 小时
毕业学校
浙江工业大学
6#
 楼主| 发表于 2015-2-4 14:03:46 | 只看该作者
泰庆电子 发表于 2015-2-4 12:11
嗯 应该 采集好 再一下 发送。

请问 代码中应该修改哪里 才能做到收完一场再发送?
回复 支持 反对

使用道具 举报

6

主题

291

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4936
威望
2451
贡献
1463
兑换币
1663
注册时间
2013-9-21
在线时间
511 小时
7#
发表于 2015-2-4 14:36:37 | 只看该作者
用的岱默的是吧,他中断采集标志位正在采集时没有置0,你自己改改
回复 支持 反对

使用道具 举报

10

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
431
威望
203
贡献
122
兑换币
111
注册时间
2013-8-20
在线时间
53 小时
毕业学校
浙江工业大学
8#
 楼主| 发表于 2015-2-4 15:09:53 | 只看该作者
make1573 发表于 2015-2-4 14:36
用的岱默的是吧,他中断采集标志位正在采集时没有置0,你自己改改

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

使用道具 举报

2

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
340
威望
147
贡献
113
兑换币
81
注册时间
2014-8-17
在线时间
40 小时
毕业学校
还没
9#
发表于 2015-2-4 15:53:21 | 只看该作者
while(1)
{
while(SampleFlag )
{
  发送图像的代码
}
}
回复 支持 反对

使用道具 举报

10

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
431
威望
203
贡献
122
兑换币
111
注册时间
2013-8-20
在线时间
53 小时
毕业学校
浙江工业大学
10#
 楼主| 发表于 2015-2-4 16:16:10 | 只看该作者
只是你 发表于 2015-2-4 15:53
while(1)
{
while(SampleFlag )

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-27 04:30 , Processed in 0.054111 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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