您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> [求助]关于DMA传输中接收地址的问题。
本帖共有674个阅读者
发表帖子 发表投票 回复主题
[求助]关于DMA传输中接收地址的问题。
核桃绿豆酥(论坛新手)
核桃绿豆酥
头衔:社区公民
帮派:无帮无派
帖数:6
金钱:159
积分:9
注册时间:2015/12/9
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[求助]关于DMA传输中接收地址的问题。

       简单来说,就是配置一个DMA之后,传输数据的起始地址是有的,但是他传输的目的地址怎么看?很多模块比如EPPI,PIXC都会有自己的DMA,但是看过几个例程之后发现找不到他要把数据传哪儿。。求大神指点一下。。

       比如:

void InitDMA(void)
{
*pREG_DMA29_ADDRSTART = TxBuffer1;
*pREG_DMA29_XCNT = 480*3/4;
*pREG_DMA29_XMOD = 4;
*pREG_DMA29_YCNT = 272;
*pREG_DMA29_YMOD = 4;

*pREG_DMA29_CFG = ENUM_DMA_CFG_MSIZE04 |
       ENUM_DMA_CFG_PSIZE04 |
       ENUM_DMA_CFG_ADDR2D |
             ENUM_DMA_CFG_SYNC |
             //ENUM_DMA_CFG_STOP;
             ENUM_DMA_CFG_AUTO;
}

void InitEPPI0(void)
{
*pREG_EPPI0_CTL = ENUM_EPPI_CTL_TXMODE |
       ENUM_EPPI_CTL_NON656 |
       ENUM_EPPI_CTL_SYNC2 |
       ENUM_EPPI_CTL_INTCLK |
       ENUM_EPPI_CTL_INTFS |
       ENUM_EPPI_CTL_PACK_EN |
       ENUM_EPPI_CTL_POLC01 |
       ENUM_EPPI_CTL_FS1LO_FS2LO |
       ENUM_EPPI_CTL_DLEN24;


*pREG_EPPI0_CLKDIV = 0X6;
*pREG_EPPI0_LINE = 525;
*pREG_EPPI0_FRAME = 286;

*pREG_EPPI0_FS1_WLHB = 41;
*pREG_EPPI0_FS1_PASPL = 525;
*pREG_EPPI0_HDLY = 43;
*pREG_EPPI0_HCNT = 480;

*pREG_EPPI0_FS2_WLVB = 5250;
*pREG_EPPI0_FS2_PALPF = 150150;
*pREG_EPPI0_VDLY = 12;
*pREG_EPPI0_VCNT = 272;

}

        我查过数据手册,但是并没有看见有关于接收地址的设置,虽然知道这个是通过EPPI模块,把PIXC的输出用DMA传到LCD屏上。这DMA的整个流程到底是怎么在玩。。


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

DMA通道对应着相应的接口,DMA寄存器里面有一个是映射DMA对应哪一个设备的。所以当你选用这个DMA通道时,已经决定了这个DMA的目的地址是哪里。你的例子中,你用的是DMA29,这个DMA对应的就是EPPI0,所以这个DMA实现的功能就是从你设定的内存开始搬运数据到EPPI0接口,或者从EPPI0接口搬运数据到你的指定的内存。其他的DMA也一样,都是接口到内存。

还有一种是MemDMA。这种DMA是内存到内存的,所以必须设定起始地址和目的地址,还可以设置取数据方式和存放数据方式。


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