您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> bf609基于描述符的DMA
本帖共有745个阅读者
发表帖子 发表投票 回复主题
bf609基于描述符的DMA
leoryan(论坛新手)
leoryan
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:155
积分:7
注册时间:2014/5/7
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
bf609基于描述符的DMA

想利用dma抓两幅图像到内存,

单幅图像通过单次DMA实现了;所以EPPI及基本的DMA配置应该是正确的。

现在,想利用描述符的DMA传输2幅图像时,寄存器配置如下;结果,内存中一副图像也没有。

VideoInDMAList[0].pStartAddress = ADV7280VideoBuffer;
VideoInDMAList[0].XCount = IMAGE_WIDTH / 2;
VideoInDMAList[0].XModify = 0x4;
VideoInDMAList[0].YCount = IMAGE_HEIGHT;
VideoInDMAList[0].YModify = 0x4;
VideoInDMAList[0].Config = ENUM_DMA_CFG_WRITE |
                                            ENUM_DMA_CFG_MSIZE04 |
                                            ENUM_DMA_CFG_PSIZE04 |
                                            ENUM_DMA_CFG_ADDR2D |
                                            ENUM_DMA_CFG_SYNC |
                                            ENUM_DMA_CFG_DSCLIST |
                                            ENUM_DMA_CFG_EN;
VideoInDMAList[0].pNext = &VideoInDMAList[0];
VideoInDMAList[0].bCallbackWhenDone = false;

VideoInDMAList[1].pStartAddress = ADV7280VideoBuffer1;
VideoInDMAList[1].XCount = IMAGE_WIDTH / 2;
VideoInDMAList[1].XModify = 0x4;
VideoInDMAList[1].YCount = IMAGE_HEIGHT;
VideoInDMAList[1].YModify = 0x4;
VideoInDMAList[1].Config = ENUM_DMA_CFG_WRITE |
                                            ENUM_DMA_CFG_MSIZE04 |
                                            ENUM_DMA_CFG_PSIZE04 |
                                            ENUM_DMA_CFG_ADDR2D |
                                            ENUM_DMA_CFG_SYNC |
                                            ENUM_DMA_CFG_STOP |
                                            ENUM_DMA_CFG_EN;
VideoInDMAList[1].pNext = &VideoInDMAList[0];
VideoInDMAList[1].bCallbackWhenDone = false;

*pREG_DMA33_DSCPTR_NXT = &VideoInDMAList[0];
ssync();
*pREG_DMA33_CFG = ENUM_DMA_CFG_READ |        //看编程手册说,第一次要设成read,尝试设成write也不行
                                     ENUM_DMA_CFG_MSIZE04 |
                                     ENUM_DMA_CFG_PSIZE04 |
                                     ENUM_DMA_CFG_ADDR2D |
                                     ENUM_DMA_CFG_SYNC |
                                     ENUM_DMA_CFG_DSCLIST |
                                     ENUM_DMA_CFG_FETCH02;
ssync();

最后,使能DMA33


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/5/7 16:06:59
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
你先只配置描述符0,看看有图像没,采到后再配置1.

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/5/7 23:17:22
leoryan(论坛新手)
leoryan
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:155
积分:7
注册时间:2014/5/7
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

这个也有试过,描述符0 dma配置成ENUM_DMA_CFG_STOP,也是没图像;所以,不知道触发描述符DMA的流程是否正确

VideoInDMAList[0].Config = ENUM_DMA_CFG_WRITE |
                                            ENUM_DMA_CFG_MSIZE04 |
                                            ENUM_DMA_CFG_PSIZE04 |
                                            ENUM_DMA_CFG_ADDR2D |
                                            ENUM_DMA_CFG_SYNC |
                                            ENUM_DMA_CFG_STOP  |
                                            ENUM_DMA_CFG_EN;


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/5/8 9:15:41
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
找个描述DMA代码看看吧,看看哪个地方没有配正确。

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