您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> bf533 mdma问题
本帖共有530个阅读者
发表帖子 发表投票 回复主题
bf533 mdma问题
xiayu(论坛新手)
xiayu
头衔:社区公民
帮派:无帮无派
帖数:14
金钱:226
积分:18
注册时间:2014/12/3
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
bf533 mdma问题
请问下大家:bf533的mdma 的stream0和stream1能否同时从外部sdram往L1 data sram中搬运数据?



这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2015/2/3 17:37:51
xiayu(论坛新手)
xiayu
头衔:社区公民
帮派:无帮无派
帖数:14
金钱:226
积分:18
注册时间:2014/12/3
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
为何这段代码不能进入到dma传输完成中断?
void Init_MDMA(unsigned short *pSrc, unsigned short *pDest)
{
    *pMDMA_S1_START_ADDR = (void*)pSrc;
    *pMDMA_S1_X_COUNT = 360;
    *pMDMA_S1_X_MODIFY = 2;
    *pMDMA_S1_Y_COUNT = 144;
    *pMDMA_S1_Y_MODIFY = 2+720;

    *pMDMA_D1_START_ADDR = (void *)pDest;
    *pMDMA_D1_X_COUNT = 360;
    *pMDMA_D1_X_MODIFY = 1;
    *pMDMA_D1_Y_COUNT = 144;
    *pMDMA_D1_Y_MODIFY = 1;

    *pMDMA_S1_PERIPHERAL_MAP = 0x0040; //配置使用的DMA通道
    *pMDMA_D1_PERIPHERAL_MAP = 0x0040;

    *pMDMA_S1_CONFIG = 0x0030; //配置源DMA工作模式
    *pMDMA_D1_CONFIG = 0x00b2; //配置目的DMA工作模式
}
EX_INTERRUPT_HANDLER(MDMA_ISR) //中断函数
{
    *pMDMA_D1_IRQ_STATUS=0x1; //清楚中断标志位
    set_capStatus(cap_done);
}

void Init_MDMA_Interrupt(void) //初始化中断
{
    *pSIC_IAR2 = 0xf6ffffff; //设置中断等级
    register_handler(ik_ivg13, MDMA_ISR); //注册中断
    *pSIC_IMASK = 0x00400000; //打开中断屏蔽
}


而这段可以:
void Init_MDMA(unsigned short *pSrc, unsigned short *pDest)
{
    *pMDMA_S0_START_ADDR = (void*)pSrc;
    *pMDMA_S0_X_COUNT = 360;
    *pMDMA_S0_X_MODIFY = 2;
    *pMDMA_S0_Y_COUNT = 144;
    *pMDMA_S0_Y_MODIFY = 2+720;

    *pMDMA_D0_START_ADDR = (void *)pDest;
    *pMDMA_D0_X_COUNT = 360;
    *pMDMA_D0_X_MODIFY = 1;
    *pMDMA_D0_Y_COUNT = 144;
    *pMDMA_D0_Y_MODIFY = 1;

    *pMDMA_S0_PERIPHERAL_MAP = 0x0040; //配置使用的DMA通道
    *pMDMA_D0_PERIPHERAL_MAP = 0x0040;

    *pMDMA_S0_CONFIG = 0x0030; //配置源DMA工作模式
    *pMDMA_D0_CONFIG = 0x00b2; //配置目的DMA工作模式
}

EX_INTERRUPT_HANDLER(MDMA_ISR) //中断函数
{
    *pMDMA_D0_IRQ_STATUS=0x1; //清楚中断标志位
    set_capStatus(cap_done);
}

void Init_MDMA_Interrupt(void) //初始化中断
{
    *pSIC_IAR2 = 0xff6fffff; //设置中断等级
    register_handler(ik_ivg13, MDMA_ISR); //注册中断
    *pSIC_IMASK = 0x00200000; //打开中断屏蔽
}

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2015/2/3 17:58:56
xiayu(论坛新手)
xiayu
头衔:社区公民
帮派:无帮无派
帖数:14
金钱:226
积分:18
注册时间:2014/12/3
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
问题已经解决, 上述代码都是正确的, memdma stream0和1也能同时工作, 就是在不断的将sdram中的数据dma到l1的乒乓buffer中出现了MDMA_D0_IRQ_STATUS寄存器
中DMA Error Status位错误

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2015/2/5 11:17:51
xiayu(论坛新手)
xiayu
头衔:社区公民
帮派:无帮无派
帖数:14
金钱:226
积分:18
注册时间:2014/12/3
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
OK了,dma优化之后,速度果然快了很多

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2015/2/5 13:23:54
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
恭喜

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2015/2/5 23:24:43
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.160024 Call, 1 Queries, Processed in 0.019531 second(s),