📄 drv_dma.c
字号:
/*-------------------------------------------------------------------
FILE NAME:
drv_dma.c
DESCRIPTION:
this file includes DMA driver.
AUTHOR:
WYF
VERSION:
2005.1122.00
COMPANY:
DATANG MICROELECTRONICS TECHNOLOGY CO,.LTD
HISTORY:
2005.1122 Creat this file
...
--------------------------------------------------------------------*/
#include <stdio.h>
#include <assert.h>
#include <string.h>
#include "nucleus.h"
#include "ADSmx21_defs.h"
#include "drv_defs.h"
#include "drv_extr.h"
TDRV_DMA dma;
void DMA_init(void)
{
int i = 10;
PCCR0 |= (1<<30)|(1<<13); /* Enable DMA Clock */
DCR |= 2; /* Soft Reset DMA Module */
while(i>0){i--;}
DCR |= 1; /* Enable DMA */
}
#if 0
static void dma_LISR(INT vector)
{
STATUS s;
DISR = 0x0001;
CCR0 = 0;
// dma0_over = 1;
}
void DMA_request(int src, int des)
{
CCR0 = 0;
WSRA = 640;
XSRA = 640;
YSRA = 480;
SAR0 = src;
DAR0 = des;
// CNTR0 = 160*120*2;
// CNTR0 = 240*120*2;
BLR0 = 0; /* burst length=64 */
DIMR &= ~1; /* Enable channel0 int */
CCR0 = (0x1<<12);
CCR0 |= 1;
{
STATUS s;
void (*old)(int);
s = NU_Register_LISR(VECTOR_DMA0, dma_LISR, &old);
assert(s == NU_SUCCESS);
// s = NU_Create_HISR(&(drv_prp.hisr), "Sen-Hisr", PrP_HISR, 2, drv_prp.statck, 1024);
// assert(s == NU_SUCCESS);
INTENNUM = VECTOR_DMA0;
}
}
int DMA_GetChannel(void)
{
STATUS s;
int ch;
s = NU_Obtain_Semaphore(&(dma.sem),NU_NO_SUSPEND);
if (s != NU_SUCCESS){return -1;}
for(ch=0;ch<16;ch++){
if (dma.channel & (1<<ch)){break;}
}
if (ch >= 16){return -1;}
dma.channel |= (1<<ch);
dma.reg_sar = &SAR0 + 0x10*ch;
dma.reg_dar = &DAR0 + 0x10*ch;
dma.reg_cntr = &CNTR0 + 0x10*ch;
dma.reg_ccr = &CCR0 + 0x10*ch;
dma.reg_rssr = &RSSR0 + 0x10*ch;
dma.reg_blr = &BLR0 + 0x10*ch;
dma.reg_rtor = &RTOR0 + 0x10*ch;
dma.reg_bucr = &BUCR0 + 0x10*ch;
dma.reg_ccnr = &CCNR0 + 0x10*ch;
return ch;
}
int DMA_Request(TCON_DMA *cfg)
{
int ch;
ch = DMA_GetChannel();
if (ch < 0) return -1;
*(dma.reg_ccr) = 0;
*(dma.reg_sar) = cfg->sar;
*(dma.reg_dar) = cfg->dar;
*(dma.reg_cntr) = cfg->cntr;
*(dma.reg_rssr) = cfg->rssr;
*(dma.reg_blr) = cfg->blr;
*(dma.reg_rtor) = cfg->rtor;
*(dma.reg_bucr) = cfg->bucr;
*(dma.reg_ccnr) = cfg->ccnr;
*(dma.reg_ccr) = cfg->ccr;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -