您的位置:
OpenADSP社区论坛
->
Blackfin专区
->
新手上路
->
BF53x技术支持专区
-> [求助]bf533上做的视频检测系统给dma使用双...
本帖共有
994
个阅读者
[求助]bf533上做的视频检测系统给dma使用双缓冲出错的问题
405
(论坛新手)
头衔:
社区公民
帮派:
无帮无派
帖数:
4
金钱:
135
积分:
5
注册时间:
2014/1/13
小
大
楼主
信息
|
留言
|
Email
|
主页
|
编辑
|
管理
|
[求助]bf533上做的视频检测系统给dma使用双缓冲出错的问题
最近在用bf533的开发板做一个视频检测然后可以实时报警的程序,由于使用DMA传输后处理然后再传到显示器整个过程太耗时想使用双缓冲,于是开辟了两块空间接收DMA传来的图像,但是尽管整个逻辑没问题但是图像是花的。就是有几帧里面部分图像的顺序是对的,但是大部分帧都是乱序的。求解
「该帖子被 405 在 2014-01-13 19:12:25 编辑过」
这家伙很懒,什么也没有留下!
等级:
2014/1/13 19:10:48
编辑帖子
帖子评价
单帖屏蔽
删除帖子
405
(论坛新手)
头衔:
社区公民
帮派:
无帮无派
帖数:
4
金钱:
135
积分:
5
注册时间:
2014/1/13
小
大
第
1
楼
信息
|
留言
|
Email
|
主页
|
编辑
|
管理
|
对于dma的配置是:
void Video_Frame_Capture(void)
{
*pPPI_FRAME = 625;
*pPPI_COUNT = 1439;
*pPPI_DELAY = 0; // 282
*pPPI_CONTROL = 0x002c ;
*pDMA0_START_ADDR = pDMA;
*pDMA0_X_COUNT = 720*2;
*pDMA0_X_MODIFY = 1;
// *pDMA0_X_MODIFY = 2;
*pDMA0_Y_COUNT = 625;
*pDMA0_Y_MODIFY = 1;
// *pDMA0_Y_MODIFY = 2;
*pDMA0_PERIPHERAL_MAP = 0x0;
*pDMA0_CONFIG = WNR | WDSIZE_8| DMA2D| DI_EN ;
// *pDMA0_CONFIG = WNR | WDSIZE_16| DMA2D | RESTART | DI_EN;
*pDMA0_CONFIG |= DMAEN;
ssync();
*pPPI_CONTROL |= PORT_EN;
ssync();
}
这家伙很懒,什么也没有留下!
等级:
2014/1/13 19:16:45
编辑帖子
帖子评价
单帖屏蔽
删除帖子
andy
(论坛版主)
头衔:
社区公民
帮派:
无帮无派
帖数:
2287
金钱:
11132
积分:
2263
注册时间:
2011/6/8
小
大
第
2
楼
信息
|
留言
|
Email
|
主页
|
编辑
|
管理
|
可能是你在改变DMA存储图像位置时,错过了部分图像数据,导致图像错误。
「该帖子被 andy 在 2014-01-13 19:35:58 编辑过」
这家伙很懒,什么也没有留下!
等级:
2014/1/13 19:32:12
编辑帖子
帖子评价
单帖屏蔽
删除帖子
405
(论坛新手)
头衔:
社区公民
帮派:
无帮无派
帖数:
4
金钱:
135
积分:
5
注册时间:
2014/1/13
小
大
第
3
楼
信息
|
留言
|
Email
|
主页
|
编辑
|
管理
|
EX_INTERRUPT_HANDLER(DMA0_PPI_ISR)
{
*pDMA0_IRQ_STATUS = 0x1;
*pPPI_CONTROL &= 0xfffe;
pEx = pDMA;
pDMA = (pDMA == pbuffer1) ? pbuffer2 : pbuffer1;
dma_complete = 1;
}
我在这里面交换的指针,还设置了 dma_complete 做标志还是乱的...关于硬件配置部分我完全搞不懂是硬伤啊啊~~~
这家伙很懒,什么也没有留下!
等级:
2014/1/13 20:20:21
编辑帖子
帖子评价
单帖屏蔽
删除帖子
405
(论坛新手)
头衔:
社区公民
帮派:
无帮无派
帖数:
4
金钱:
135
积分:
5
注册时间:
2014/1/13
小
大
第
4
楼
信息
|
留言
|
Email
|
主页
|
编辑
|
管理
|
求问各位大神,这个有木有解决方案?当初因为加上了自己的图像处理算法然后在bf533上跑太慢所以才想着用双缓冲会不会让速度快一点,谁知道加上双缓冲会乱掉。。。而且代码逻辑上来讲应该是不会乱的啊。。。哭
这家伙很懒,什么也没有留下!
等级:
2014/1/16 9:46:08
编辑帖子
帖子评价
单帖屏蔽
删除帖子
andy
(论坛版主)
头衔:
社区公民
帮派:
无帮无派
帖数:
2287
金钱:
11132
积分:
2263
注册时间:
2011/6/8
小
大
第
5
楼
信息
|
留言
|
Email
|
主页
|
编辑
|
管理
|
你的PPI已经停掉了,但是你的DMA没有停止,再次采集会导致不同步,你可以这样:
1. 不要停止PPI和DMA,仅仅是在中断中更改DMA的buffer地址,不要做过多操作避免丢数据。
2. 要么全部停止,更换BUFFER后,重新初始化DMA和PPI,这样可能会慢一点,但肯定不会图像错位。
给你一个参考代码。这个是一次采一条线,拼一副图像的。
http://www.openadsp.com/bbs/topic.asp?id=1536&boardid=18&tb=1
这家伙很懒,什么也没有留下!
等级:
2014/1/17 11:51:48
编辑帖子
帖子评价
单帖屏蔽
删除帖子
Powered by
OpenADSP
Copyright © 2010
www.
Openadsp
.com
. All rights reserved.159049 Call, 1 Queries, Processed in 0.031250 second(s),