MDMA 全稱是 memoryDMA ,是內(nèi)存到內(nèi)存搬運(yùn)數(shù)據(jù)的DMA。在DSP 做算法時(shí),經(jīng)常會(huì)遇到數(shù)據(jù)重組或者搬移,如果用core 搬運(yùn)這些數(shù)據(jù),是對(duì)DSP 資源的一種浪費(fèi),此時(shí)就可以用到MDMA 進(jìn)行數(shù)據(jù)搬移。
看看寄存器的配置說明:
寄存器 功能
MDMA_S0_START_ADDR MDMA 源地址寄存器
MDMA_S0_X_COUNT MDMA 源地址X 計(jì)數(shù)寄存器
MDMA_S0_X_MODIFY MDMA 源地址X 修改寄存器
MDMA_S0_PERIPHERAL_MAP MDMA 源地址通道配置寄存器
MDMA_S0_CONFIG MDMA 源地址配置寄存器
MDMA_D0_START_ADDR MDMA 目的地址寄存器
MDMA_D0_X_COUNT MDMA 目的地址X 計(jì)數(shù)寄存器
MDMA_D0_X_MODIFY MDMA 目的地址X 修改寄存器
MDMA_D0_PERIPHERAL_MAP MDMA 目的地址通道配置寄存器
MDMA_D0_CONFIG MDMA 目的地址配置寄存器
看一段核心代碼:
*pMDMA_S0_START_ADDR = pSrc; //設(shè)置源地址
*pMDMA_S0_X_COUNT = 8; //傳輸次數(shù) 8 次
*pMDMA_S0_X_MODIFY = 2; //地址修改增量2,16bit 模式一次讀2 個(gè)byte
*pMDMA_D0_START_ADDR = pDest;
*pMDMA_D0_X_COUNT = 8;
*pMDMA_D0_X_MODIFY = 2;
*pMDMA_S0_PERIPHERAL_MAP = 0x0040; //配置使用的DMA 通道
*pMDMA_D0_PERIPHERAL_MAP = 0x0040;
*pMDMA_S0_CONFIG = 0x0024; //配置源DMA 工作模式
*pMDMA_D0_CONFIG = 0x00a6; //配置目的DMA 工作模式
*pSIC_IAR5 = 0xfffff6ff; //設(shè)置中斷等級(jí)
register_handler(ik_ivg13, MDMA_ISR); //注冊(cè)中斷
*pSIC_IMASK1 = 0x00000400; //打開中斷屏蔽
這個(gè)代碼實(shí)現(xiàn)了將源地址 buffer 中的8 個(gè)數(shù)據(jù)搬到目的地址中,完成搬運(yùn)后會(huì)進(jìn)入中斷程序,然后在中斷中再次使能MDMA,重復(fù)搬運(yùn)數(shù)據(jù)。
在中斷函數(shù)中打個(gè)斷點(diǎn),運(yùn)行代碼后,Src_Buf 中的數(shù)據(jù)會(huì)被搬運(yùn)到Dest_Buf 中去,完成搬運(yùn)后會(huì)進(jìn)入中斷函數(shù),通過Visual DSP 下的memory 窗口,可以查看Dest_Buf 中的數(shù)據(jù)。
這一篇就沒有錄視頻教程勒,整個(gè)工程的源碼如果有需要可以聯(lián)系我。 |