dmacpy.cpp
来自「SAMSUNG S3C6410 CPU BSP for winmobile6」· C++ 代码 · 共 100 行
CPP
100 行
#include <Xsr.h>
#if 0
#include <XsrTypes.h>
//#include <stdarg.h>
//#include <stdio.h>
//#include "..\Common\mux.h"
//#include "..\Common\2420board.h"
#include <OMAP2420.h>
#include <2420board.h>
#endif
/* DMA */
#define DMA4_SYSSTATUS *(volatile unsigned int*)0x48056028
#define DMA4_OCP_SYSCONFIG *(volatile unsigned int*)0x4805602C
#define DMA4_GCR *(volatile unsigned int*)0x48056078
#define DMA4_CCR0 *(volatile unsigned int*)0x48056080
#define DMA4_CLNK_CTRL0 *(volatile unsigned int*)0x48056084
#define DMA4_CICR0 *(volatile unsigned int*)0x48056088
#define DMA4_CSR0 *(volatile unsigned int*)0x4805608C
#define DMA4_CSDP0 *(volatile unsigned int*)0x48056090
#define DMA4_CEN0 *(volatile unsigned int*)0x48056094
#define DMA4_CFN0 *(volatile unsigned int*)0x48056098
#define DMA4_CSSA0 *(volatile unsigned int*)0x4805609C
#define DMA4_CDSA0 *(volatile unsigned int*)0x480560A0
#define DMA4_CSEI0 *(volatile unsigned int*)0x480560A4
#define DMA4_CSFI0 *(volatile unsigned int*)0x480560A8
#define DMA4_CDEI0 *(volatile unsigned int*)0x480560AC
#define DMA4_CDFI0 *(volatile unsigned int*)0x480560B0
#define DMA4_CSAC0 *(volatile unsigned int*)0x480560B4
#define DMA4_CDAC0 *(volatile unsigned int*)0x480560B8
#define DMA4_CCEN0 *(volatile unsigned int*)0x480560BC
#define DMA4_CCFN0 *(volatile unsigned int*)0x480560C0
#define DMA4_COLOR0 *(volatile unsigned int*)0x480560C4
void DMACPY(unsigned int *dst, unsigned int *src, unsigned int byte_len)
{
DMA4_CSR0 = 0xff;
DMA4_CSSA0 = (unsigned int)src;
DMA4_CDSA0 = (unsigned int)dst;
DMA4_CEN0 = byte_len >> 1; /* channel element number */
DMA4_CCR0 = 1<<24 | 0<<23 | 0<<22 | 0<<21 | 0<<19 | 1<<18 | 0<<17
| 0<<16 | 1<<14 | 1<<12 | 1<<8 | 1<<7 | 1<<6 | 1<<5 | 0;
/* poll if dma finished */
while (!(DMA4_CSR0 & 0x8))
{
//polling if DMA finished
}
return;
}
#if 1
void DMA_WRITE(unsigned char *src, unsigned int *dst, unsigned int byte_len)
{
DMA4_CSR0 = 0xff;
DMA4_CSSA0 = (unsigned int)src;
DMA4_CDSA0 = (unsigned int)dst;
DMA4_CEN0 = byte_len >> 1; /* channel element number */
DMA4_CCR0 = 1<<24 | 0<<23 | 0<<22 | 0<<21 | 0<<19 | 1<<18 | 0<<17
| 0<<16 | 1<<14 | 1<<12 | 1<<8 | 1<<7 | 1<<6 | 1<<5 | 0;
/* poll if dma finished */
while (!(DMA4_CSR0 & 0x8))
{
//polling if DMA finished
}
return;
}
#endif
void DMACPY_init(void)
{
/* dma global reg set-up */
// DMA4_GCR = 1<<16 | 16;
DMA4_CSDP0 = 0<<21 | 1<<20 | 0<<19 | 1<<18 | 2<<16 | 1<<14 | 1<<13
| 0<<9 | 2<<7 | 1<<6 | 0<<2 | 1<<0;
// MPU L1 interrupt masked
DMA4_CICR0 = 0xFF;
/* channel frame number */
DMA4_CFN0 = 0x1;
return;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?