📄 dma.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 + -