智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 7641|回复: 35
打印 上一主题 下一主题

@火哥,鹰眼问题求解

[复制链接]

6

主题

44

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
威望
106
贡献
56
兑换币
63
注册时间
2013-3-19
在线时间
19 小时
毕业学校
njupt
跳转到指定楼层
1#
发表于 2013-4-16 18:31:44 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
场中断开启行中断,行中断初始化DMA,采集完后,最左边的图像有几列在最右边,拍照的时候我是左边白右边黑,结果是这个样子,我设置COM4寄存器的几个级别的速度都是这样的,请问这是为什么,是因为DMA初始化占用的时间太多了吗?
void PORTA_IRQHandler(void)//功  能:PORTA 外部中断服务
{
   u8 i=14;
  if((PORTA->ISFR>>i)==1);
  {
   //if(SampleFlag==0){return;}//不足1场   
    DMA_Init(0,DMA_PORTC,GPIOD_IDR_Addr,(u32)ImageBuf[rowCnt],1,0,0,1,0,1,CAMERA_W/8);
   rowCnt++;
   if(rowCnt >=CAMERA_H)
   {
    rowCnt = 0;
    DMA0->SERQ&=~DMA_SERQ_SERQ(0);  
     LED3=!LED3;LED2=!LED2;
    NVIC_DisableIRQ(PORTA_IRQn);//行
     NVIC_DisableIRQ(PORTB_IRQn);//场
   }
   PORTA->ISFR|=(1<<i);   //清除标志位  
   }      
}
void PORTB_IRQHandler(void)//功  能:PORTB 外部中断服务
{
    u8 i=9;
   if((PORTB->ISFR>>i)==1)
  {
       rowCnt = 0;
     SampleFlag = 1;
     NVIC_EnableIRQ(PORTA_IRQn);//行
     PORTB->ISFR|=(1<<i);   //清除标志位  
  }
      
}

本帖子中包含更多资源

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

x

6

主题

44

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
威望
106
贡献
56
兑换币
63
注册时间
2013-3-19
在线时间
19 小时
毕业学校
njupt
2#
 楼主| 发表于 2013-4-16 19:17:01 | 显示全部楼层
野火 发表于 2013-4-16 19:15
你好,请用我们最新提供的代码。
不需要用到 行中断

我用的KEIL编译的,用场中断会出错,只有用行中断才能出图像,目前图像很清晰,也比较稳定,就是有如上问题,不知道该怎么解决
回复 支持 反对

使用道具 举报

6

主题

44

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
威望
106
贡献
56
兑换币
63
注册时间
2013-3-19
在线时间
19 小时
毕业学校
njupt
3#
 楼主| 发表于 2013-4-16 19:19:43 | 显示全部楼层
野火 发表于 2013-4-16 19:18
为什么会出错?必须要用到场中断,才能稳定的……

场中断信号来了开启行中断使能,行中断信号之后初始化DMA目的地址
回复 支持 反对

使用道具 举报

6

主题

44

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
威望
106
贡献
56
兑换币
63
注册时间
2013-3-19
在线时间
19 小时
毕业学校
njupt
4#
 楼主| 发表于 2013-4-16 19:21:56 | 显示全部楼层
野火 发表于 2013-4-16 19:20
场中断信号来了就直接初始化DMA目的地址,DMA 计数

我已开始就参考你们的历程这样写的,一直卡死,还不知道为什么,后来我换成现在的方法就这样了
回复 支持 反对

使用道具 举报

6

主题

44

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
威望
106
贡献
56
兑换币
63
注册时间
2013-3-19
在线时间
19 小时
毕业学校
njupt
5#
 楼主| 发表于 2013-4-16 19:28:20 | 显示全部楼层
野火 发表于 2013-4-16 19:25
我们很早之前提供的DMA例程,有个错误的地方。

DMA_PORTx2BUFF_Init 函数里面

额……我没有用你们的DMA底层,可不可能我初始化DMA时间太长了,最后采集到下一行的像素点了?
回复 支持 反对

使用道具 举报

6

主题

44

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
威望
106
贡献
56
兑换币
63
注册时间
2013-3-19
在线时间
19 小时
毕业学校
njupt
6#
 楼主| 发表于 2013-4-16 19:35:37 | 显示全部楼层
野火 发表于 2013-4-16 19:32
直接 场中断信号来了开启行中断使能,初始化DMA目的地址

行中断改成 下降沿 触发

因为我是开的二维数组,所以我就用行中断来中开启DMA初始化了,我试试下降沿触发
回复 支持 反对

使用道具 举报

6

主题

44

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
威望
106
贡献
56
兑换币
63
注册时间
2013-3-19
在线时间
19 小时
毕业学校
njupt
7#
 楼主| 发表于 2013-4-16 19:39:20 | 显示全部楼层
野火 发表于 2013-4-16 19:32
直接 场中断信号来了开启行中断使能,初始化DMA目的地址

行中断改成 下降沿 触发

下降沿触发后,现在是右边的图像到左边了,,,
回复 支持 反对

使用道具 举报

6

主题

44

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
威望
106
贡献
56
兑换币
63
注册时间
2013-3-19
在线时间
19 小时
毕业学校
njupt
8#
 楼主| 发表于 2013-4-16 19:40:50 | 显示全部楼层
野火 发表于 2013-4-16 19:32
直接 场中断信号来了开启行中断使能,初始化DMA目的地址

行中断改成 下降沿 触发

火哥,鹰眼是没有消隐信号输出的吧?所以直接场中断可以
回复 支持 反对

使用道具 举报

6

主题

44

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
威望
106
贡献
56
兑换币
63
注册时间
2013-3-19
在线时间
19 小时
毕业学校
njupt
9#
 楼主| 发表于 2013-4-16 19:47:02 | 显示全部楼层
野火 发表于 2013-4-16 19:44
那我也不清楚原因

刚刚看到鹰眼的介绍,我觉得可以用HSYNC作为行中断触发引脚比较合适,不知道设置那个寄存器

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

6

主题

44

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
威望
106
贡献
56
兑换币
63
注册时间
2013-3-19
在线时间
19 小时
毕业学校
njupt
10#
 楼主| 发表于 2013-4-16 19:49:58 | 显示全部楼层
野火 发表于 2013-4-16 19:44
那我也不清楚原因

找到了,是COM10寄存器,你们初始化时0x97,我改成0xD7试试
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-8 09:02 , Processed in 0.097861 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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