⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dma.h

📁 s3c6410基于USB OTG下载内核至NORFLASH的源代码
💻 H
字号:
/**************************************************************************************
* 
*	Project Name : S3C6410 Validation
*
*	Copyright 2006 by Samsung Electronics, Inc.
*	All rights reserved.
*
*	Project Description :
*		This software is only for validating functions of the S3C6410.
*		Anybody can use this software without our permission.
*  
*--------------------------------------------------------------------------------------
* 
*	File Name : Dma.h
*  
*	File Description : This file implements the API functons for DMA controller.
*
*	Author : Wonjoon Jang
*	Dept. : AP Development Team
*	Created Date : 2006/12/29
*	Version : 0.1 
* 
*	History
*	- Created(wonjoon.jang  2007/12/29)
*  
**************************************************************************************/
#ifndef __DMA_H__
#define __DMA_H__


#ifdef __cplusplus
extern "C" {
#endif

#include <stdio.h>

#include "def.h"

typedef enum
{
	DMA0, DMA1, SDMA0, SDMA1
}  DMA_UNIT;

typedef enum
{
	DMA_A = 1<<0,
	DMA_B = 1<<1,
	DMA_C = 1<<2,
	DMA_D = 1<<3,
	DMA_E = 1<<4,
	DMA_F = 1<<5,
	DMA_G = 1<<6,
	DMA_H = 1<<7,
	DMA_ALL= 0xFF
} DMA_CH;

typedef enum
{
	BYTE		= (u32) 1,
	HWORD		= (u32) 2,
	WORD		= (u32) 4
} DATA_SIZE;

typedef enum
{
	SINGLE		= (u32) 0,
	BURST4		= (u32) 1,
	BURST8		= (u32) 2,
	BURST16	= (u32) 3,
	BURST32	= (u32) 4,
	BURST64	= (u32) 5,
	BURST128	= (u32) 6,
	BURST256	= (u32) 7
} BURST_MODE;


typedef enum
{
	DMA0_UART0_0		= 0,	// DMA0, SDMA0
	DMA0_UART0_1		= 1,
	DMA0_UART1_0		= 2,
	DMA0_UART1_1		= 3,
	DMA0_UART2_0		= 4,
	DMA0_UART2_1		= 5,
	DMA0_UART3_0		= 6,
	DMA0_UART3_1		= 7,
	DMA0_PCM0_TX		= 8,	
	DMA0_PCM0_RX		= 9,
	DMA0_I2S0_TX		= 10,
	DMA0_I2S0_RX		= 11,
	DMA0_SPI0_TX		= 12,
	DMA0_SPI0_RX		= 13,
	DMA0_HSI_TX		= 14,
	DMA0_HSI_RX		= 15,

	DMA1_PCM1_TX		= 0,	// DMA1, SDMA1
	DMA1_PCM1_RX		= 1,
	DMA1_I2S1_TX		= 2,
	DMA1_I2S1_RX		= 3,
	DMA1_SPI1_TX		= 4,
	DMA1_SPI1_RX		= 5,
	DMA1_AC_PCMout	= 6,
	DMA1_AC_PCMin		= 7,
	DMA1_AC_MICin		= 8,
	DMA1_PWM			= 9,
	DMA1_IrDA			= 10,
	DMA1_EXTERNAL		= 11,
	SDMA1_SECU_RX		= 14,	// SDMA1
	SDMA1_SECU_TX		= 15,	// SDMA1

	MEM				= 16,
	DMA1_NAND_TX		= 20,
	DMA1_NAND_RX		= 21,
	SOFTWARE		= 99
} DREQ_SRC;

typedef enum
{
	DEMAND, HANDSHAKE
} DMA_HS_MODE;

typedef enum
{
	AHB_MASTER1 = 0,   // Memory Bus...
	AHB_MASTER2 = 1    // Peripheral Bus...
} DMA_AHB;

typedef struct
{
	u32 m_uChAddr;
	u32 m_uBaseAddr;
} DMAC;




void DMAC_InitCh(DMA_UNIT eUnit, DMA_CH eCh, DMAC *sCh);
void DMAC_Close(DMA_UNIT eUnit, DMA_CH eCh, DMAC *sCh);
void DMACH_Setup(
	DMA_CH eCh, u32 uLLIAddr, u32 uSrcAddr, bool bSrcFixed, u32 uDstAddr, bool bDstFixed, DATA_SIZE eDataSz, u32 uDataCnt,
	DMA_HS_MODE eOpMode, DREQ_SRC eSrcReq, DREQ_SRC eDstReq, BURST_MODE eBurstMode, DMAC *sCh);

void DMACH_Stop(DMAC *sCh);
bool DMACH_IsTransferDone(DMAC *sCh);
u32 DMAC_IntStatus(DMAC *sCh);
u32 DMACH_Configuration(DMAC *sCh);
void DMACH_ClearIntPending(DMAC *sCh);
void DMACH_ClearErrIntPending(DMAC *sCh);
void DMACH_Start(DMAC *sCh);
DMA_CH DMACH_GetChannelNumber(DMAC *sCh);

void DMACH_AddrSetup(DMA_CH eCh,  u32 uSrcAddr, u32 uDstAddr, DMAC *sCh);
u32 DMACH_ReadSrcAddr(DMAC * sCh);
u32 DMACH_ReadDstAddr(DMAC * sCh);
void DMACH_WriteSrcAddr(DMAC *sCh, u32 uSrcAddr);
void DMACH_WriteDstAddr(DMAC *sCh, u32 uDstAddr);
void DMACH_WriteTransferSize(DMAC *sCh, u32 uSize);
	
void DMACH_SoftBurstReq(DMAC *sCh, DREQ_SRC eSrcReq);
void DMACH_SoftBurstLastReq(DMAC *sCh, DREQ_SRC eSrcReq);

void __irq Dma0Done(void);
void __irq Dma1Done(void);
void __irq SDma0Done(void);
void __irq SDma1Done(void);

#ifdef __cplusplus
}
#endif

#endif //__DMA_H__



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -