您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> [求助]bf561视频输入输出
本帖共有912个阅读者
发表帖子 发表投票 回复主题
[求助]bf561视频输入输出
minglfeng(论坛新手)
minglfeng
头衔:社区公民
帮派:无帮无派
帖数:18
金钱:267
积分:25
注册时间:2012/7/25
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[求助]bf561视频输入输出

Bf561有2PPI,一个用来接收视频数据,一个用来发送视频数据。我在核 A中用PPI0接收FPGA发来的数据,16位接收,在核B中用PPI1发送数据,10位发送,采用中断方式进行接收和发送,Timer9中断中接收数据,Timer11中断中发送数据。当开始接收一帧数据后才使能Timer11中断

核B发送中断中DMA设置为

*pDMA1_0_CONFIG =WDSIZE_16| DMA2D | DI_EN;

*pDMA1_1_X_COUNT    = g_swWidthVideoA;//视频为384*288,宽384

*pDMA1_1_X_MODIFY   = 0x0002;

*pDMA1_1_Y_COUNT    = g_swHeightVideoA;//288行

*pDMA1_1_Y_MODIFY   = 0x0002;

    *pDMA1_1_START_ADDR = (void*)sFrame1;//数据保存地址,在SDRAM中

*pPPI1_DELAY = 15;

*pPPI1_CONTROL  = 0<<14 | 1<<11 |0<<8 | 0<<4 | 3<<2 | 1<<1;//带同步发送模式,非ITU_R656模式,1个帧同步

*pPPI1_COUNT    = g_swWidthVideoA-1;

*pPPI1_FRAME    = g_swHeightVideoA;

ssync();

*pDMA1_1_CONFIG  |= DMAEN;

ssync();

*pPPI1_CONTROL   |= PORT_EN;

ssync();

核A接收中断中

  *pDMA1_0_X_COUNT = g_swWidthVideoA/2;

*pDMA1_0_X_MODIFY = 4;

*pDMA1_0_Y_COUNT = g_swHeightVideoA;

*pDMA1_0_Y_MODIFY = 4;

*pDMA1_0_START_ADDR = (void*)sFrame1;

  *pDMA1_0_CONFIG = WDSIZE_32 | WNR | DMA2D | DI_EN;

*pPPI0_CONTROL   =  (0x3 << 2) | (0x3<< 4) | (0x7 << 11)| DMA32 | PACK_EN ;//16位

//非ITU-656模式,0帧同步,16bit,输入模式,打包使能

*pDMA1_0_CONFIG |= DMAEN;

asm("ssync;");

*pPPI0_CONTROL |= PORT_EN;

asm("ssync;");

目前的问题是

1)为什么只有停止核A时,才会在显示器上显示图像,否则就一直是乱的

2)将发送中断DMA设置采用32bit传输,PACK_EN =1(打包使能)DMA32=1时,这时会有图像显示,但是会闪动



「该帖子被 minglfeng 在 2012-12-20 22:15:41 编辑过」

好好工作
等级:论坛新手 参考IP地址:*.*.*.*
2012/12/20 21:54:10
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

可能是PPI0导致DMA内存通道堵塞,PPI0和PPI1虽然有各自的DMA,但数据都要对同一个内存操作,都要通过EBIU读写SDRAM,你的PPI0向SDRAM写数据时,导致PPI1通道堵塞,无法正确刷新数据,当采用32bit后,通道占用与率下降,但仍不畅通,导致图像闪动。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/12/26 10:43:26
minglfeng(论坛新手)
minglfeng
头衔:社区公民
帮派:无帮无派
帖数:18
金钱:267
积分:25
注册时间:2012/7/25
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
谢谢andy,那有什么解决的方法么,可以实现一边接收数据一边发送数据

好好工作
等级:论坛新手 参考IP地址:*.*.*.*
2012/12/26 22:34:35
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

采集速度不要太快,建议采用乒乓buffer机制进行数据传输。将处理器优先级设置位DMA优先。每次采集和传输的数据不要太大。如果实时要求不高的话,可以在采集完成进入中断后,进行数据处理,然后用DMA将数据传输出去,同时使能采集数据。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/12/27 18:52:08
minglfeng(论坛新手)
minglfeng
头衔:社区公民
帮派:无帮无派
帖数:18
金钱:267
积分:25
注册时间:2012/7/25
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
乒乓buffer有例子程序么,使用DMA的描述符大模式是兵乓buffer么,我发现我的程序中PPI0_STATUS中的OVR是置1的, PPI1_STATUS是UNDR是置1的,每次接收数据PPI都是重新配置的,是否说明我的PPI接收数据不正确呢

好好工作
等级:论坛新手 参考IP地址:*.*.*.*
2012/12/28 15:38:00
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

没有例子,通过大容量描述符模式中都会伴随乒乓buffer。

你进入中断后,可以用imgvier工具查看接收到的图像是否正确,可能是由于通道堵塞,导致数据不能及时接收造成。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/12/30 1:20:06
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159322 Call, 1 Queries, Processed in 0.031250 second(s),