標題: DM648的EDMA3.0應用 [打印本頁]
作者: jiege 時間: 2014-8-20 03:24
標題: DM648的EDMA3.0應用
前段時間調試DM648,有一些筆記,跟大家分享一下。雖然用到DM648的朋友會很少,但正因為64+的資料不容易找,所以才把相關筆記整理發出來,希望能對做64+的朋友提供一些方便。
下面的函數描述了EDMA配置到啟動的過程(完全寄存器級的操作,更有利于理解EDMA3.0的操作過程)。
EDMA_init()
{
/* Step 1: EDMA寄存器初始化 */
QUEPRI=0x10; //queue優先級設置,0、2、3為0級,1為1級
QWMTHRA =(16<<8u)|(16 & 0xFF); //queue超長報錯設置,0、1均為16,2、3為0
EMCR = 0xFFFFFFFF; //清除所有EDMA事件丟失標志
CCERRCLR = 0xFFFFFFFF; //清除所有EDMA3CC錯誤
//以VP2亮度事件觸發為例
/* Step 2: Programming DMA Channel (and Param set) */
DCHMAP32=0x80<<5; //對應EVENT32與第128項PARAM
DMAQNUM4=0x0; //將EVENT32項對應到QUEUE0通道
//設置第128項PARAM值,重載表設為129項
OPT128 = 0x00105301; // TCINTEN is set,A sync,TCC=5,64bit FIFO
SRC128 = YSRCA2;
A_B_CNT128 = ((frameCount << 16u) | (elementCount & 0xFFFFu)); // ACNT = 1536, BCNT = 2
DST128 = (unsigned int )line_buffer2;
SRC_DST_BIDX128 = (elementCount << 16u) | (0u); // SRC_BIDX = 0, DST_BIDX = 1536
//一次完整的EDMA搬移完成后,用第129項PARAM表裝載到第128項表
LINK_BCNTRLD128 = (frameCount << 16u) | 0x1020u; // LINK = 129, BCNTRLD = 1
SRC_DST_CIDX128 = (elementCount << 16u) | (0u);
CCNT128 = 1;
//第129項PARAM表為備份表,用于重載到第128項PARAM表
OPT129 = 0x00105301; // TCINTEN is set,A sync,TCC=5,64bit FIFO
SRC129 = YSRCA2;
A_B_CNT129 = ((frameCount << 16u) | (elementCount & 0xFFFFu)); // ACNT = 1536, BCNT = 2
DST129 = (unsigned int )line_buffer2;
SRC_DST_BIDX129 = (elementCount << 16u) | (0u); // SRC_BIDX = 0, DST_BIDX = 1536
//將129項PARAM表裝載到第128項表,仍然指向第129項PARAM表
LINK_BCNTRLD129 = (frameCount << 16u) | 0x1020u; // LINK = 129, BCNTRLD = 1
SRC_DST_CIDX129 = (elementCount << 16u) | (0u);
CCNT129 = 1;
/* Step 3: Triggering the Transfer and Waiting for Transfer Completion */
EESRH = 0x1; //enable event VP2EVTYA channel , number 32
// ESRH = 0x1;//調試時可用于手動觸發EDMA事件,觀察EDMA模塊工作情況
}
| 歡迎光臨 (http://m.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |