您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> BF53x技术支持专区 -> [求助]bf533上做的视频检测系统给dma使用双... 
本帖共有947个阅读者
发表帖子 发表投票 回复主题
[求助]bf533上做的视频检测系统给dma使用双缓冲出错的问题
405(论坛新手)
405
头衔:社区公民
帮派:无帮无派
帖数:4
金钱:135
积分:5
注册时间:2014/1/13
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[求助]bf533上做的视频检测系统给dma使用双缓冲出错的问题
最近在用bf533的开发板做一个视频检测然后可以实时报警的程序,由于使用DMA传输后处理然后再传到显示器整个过程太耗时想使用双缓冲,于是开辟了两块空间接收DMA传来的图像,但是尽管整个逻辑没问题但是图像是花的。就是有几帧里面部分图像的顺序是对的,但是大部分帧都是乱序的。求解

「该帖子被 405 在 2014-01-13 19:12:25 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/1/13 19:10:48
405(论坛新手)
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();
}

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/1/13 19:16:45
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
可能是你在改变DMA存储图像位置时,错过了部分图像数据,导致图像错误。

「该帖子被 andy 在 2014-01-13 19:35:58 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/1/13 19:32:12
405(论坛新手)
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 做标志还是乱的...关于硬件配置部分我完全搞不懂是硬伤啊啊~~~

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/1/13 20:20:21
405(论坛新手)
405
头衔:社区公民
帮派:无帮无派
帖数:4
金钱:135
积分:5
注册时间:2014/1/13
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
求问各位大神,这个有木有解决方案?当初因为加上了自己的图像处理算法然后在bf533上跑太慢所以才想着用双缓冲会不会让速度快一点,谁知道加上双缓冲会乱掉。。。而且代码逻辑上来讲应该是不会乱的啊。。。哭

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/1/16 9:46:08
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
你的PPI已经停掉了,但是你的DMA没有停止,再次采集会导致不同步,你可以这样:
1. 不要停止PPI和DMA,仅仅是在中断中更改DMA的buffer地址,不要做过多操作避免丢数据。
2. 要么全部停止,更换BUFFER后,重新初始化DMA和PPI,这样可能会慢一点,但肯定不会图像错位。
给你一个参考代码。这个是一次采一条线,拼一副图像的。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/1/17 11:51:48
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154294 Call, 1 Queries, Processed in 0.015625 second(s),