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 + -
显示快捷键?