智能车制作

 找回密码
 注册

扫一扫,访问微社区

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

22

主题

1613

帖子

1

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6784
QQ
威望
2910
贡献
1540
兑换币
1579
注册时间
2012-3-17
在线时间
1167 小时
2#
发表于 2013-4-16 19:15:12 | 只看该作者
你好,请用我们最新提供的代码。
不需要用到 行中断
回复 支持 反对

使用道具 举报

6

主题

44

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

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

使用道具 举报

22

主题

1613

帖子

1

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6784
QQ
威望
2910
贡献
1540
兑换币
1579
注册时间
2012-3-17
在线时间
1167 小时
4#
发表于 2013-4-16 19:18:17 | 只看该作者
karis 发表于 2013-4-16 19:17
我用的KEIL编译的,用场中断会出错,只有用行中断才能出图像,目前图像很清晰,也比较稳定,就是有如上问 ...

为什么会出错?必须要用到场中断,才能稳定的……


回复 支持 反对

使用道具 举报

6

主题

44

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

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

使用道具 举报

22

主题

1613

帖子

1

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6784
QQ
威望
2910
贡献
1540
兑换币
1579
注册时间
2012-3-17
在线时间
1167 小时
6#
发表于 2013-4-16 19:20:49 | 只看该作者
karis 发表于 2013-4-16 19:19
场中断信号来了开启行中断使能,行中断信号之后初始化DMA目的地址

场中断信号来了就直接初始化DMA目的地址,DMA 计数

回复 支持 反对

使用道具 举报

6

主题

44

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

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

使用道具 举报

22

主题

1613

帖子

1

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6784
QQ
威望
2910
贡献
1540
兑换币
1579
注册时间
2012-3-17
在线时间
1167 小时
8#
发表于 2013-4-16 19:25:56 | 只看该作者
karis 发表于 2013-4-16 19:21
我已开始就参考你们的历程这样写的,一直卡死,还不知道为什么,后来我换成现在的方法就这样了

我们很早之前提供的DMA例程,有个错误的地方。

DMA_PORTx2BUFF_Init 函数里面


    DMA_CITER_ELINKNO(CHn)  = DMA_CITER_ELINKNO_CITER(count); //当前主循环次数
    DMA_BITER_ELINKNO(CHn)  = DMA_BITER_ELINKYES_BITER(count);//起始主循环次数

应该改成 :


    DMA_CITER_ELINKNO(CHn)  = DMA_CITER_ELINKNO_CITER(count); //当前主循环次数
    DMA_BITER_ELINKNO(CHn)  = DMA_BITER_ELINKNO_BITER(count);//起始主循环次数

后缀会卡在死循环里,你看看是不是这个问题

回复 支持 反对

使用道具 举报

6

主题

44

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

DMA_PORTx2BUFF_Init 函数里面

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

使用道具 举报

22

主题

1613

帖子

1

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6784
QQ
威望
2910
贡献
1540
兑换币
1579
注册时间
2012-3-17
在线时间
1167 小时
10#
发表于 2013-4-16 19:32:55 | 只看该作者
karis 发表于 2013-4-16 19:19
场中断信号来了开启行中断使能,行中断信号之后初始化DMA目的地址

直接 场中断信号来了开启行中断使能,初始化DMA目的地址

行中断改成 下降沿 触发

回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 19:46 , Processed in 0.066061 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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