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

📄 dma.h

📁 ARM 嵌入式 系统 设计与实例开发 实验教材 二源码
💻 H
字号:
/* * linux/arch/arm/mach-s3c2410/dma.h * * Copyright (C) 2002 MIZI Research, Inc * * Author: Janghoon Lyu <nandy@mizi.com> * Date  : $Date: 2002/05/29 08:53:03 $ * * $Revision: 1.1.2.2 $ * * History: * * 2002-05-28: Janghoon Lyu <nandy@mizi.com> *    - copy from linux/arch/arm/mach-s3c2400 * *//* DMA buffer struct */typedef struct dma_buf_s {	int size;		/* buffer size */	dma_addr_t dma_start;	/* starting DMA address */	int ref;		/* number of DMA references */	void *id;		/* to identify buffer from outside */	int write;		/* 1: buf to write , 0: but to read  */	struct dma_buf_s *next;	/* next buf to process */} dma_buf_t;/* DMA control register structure */typedef struct {	volatile u_long DISRC;	volatile u_long DISRCC;	volatile u_long DIDST;	volatile u_long DIDSTC;	volatile u_long DCON;	volatile u_long DSTAT;	volatile u_long DCSRC;	volatile u_long DCDST;	volatile u_long DMASKTRIG;} dma_regs_t;/* DMA device structre */typedef struct {	dma_callback_t callback;	u_long dst;	u_long src;	u_long ctl;	u_long dst_ctl;	u_long src_ctl;} dma_device_t;/* DMA channel structure */typedef struct {	dmach_t channel;	unsigned int in_use;	/* Device is allocated */	const char *device_id;	/* Device name */	dma_buf_t *head;	/* where to insert buffers */	dma_buf_t *tail;	/* where to remove buffers */	dma_buf_t *curr;	/* buffer currently DMA'ed */	unsigned long queue_count;	/* number of buffers in the queue */	int active;		/* 1 if DMA is actually processing data */	dma_regs_t *regs;	/* points to appropriate DMA registers */	int irq;		/* IRQ used by the channel */	dma_device_t write;	/* to write */	dma_device_t read;	/* to read */} s3c2410_dma_t;s3c2410_dma_t dma_chan[MAX_S3C2410_DMA_CHANNELS];/* 阿 叼官捞胶狼 汲沥 蔼甸 */typedef struct {	const char *name;	u_long write_src;	u_long write_dst;	u_long write_ctl;	u_long write_src_ctl;	u_long write_dst_ctl;	u_long read_src;	u_long read_dst;	u_long read_ctl;	u_long read_src_ctl;	u_long read_dst_ctl;} dma_type_t;#define DMA_UNDEF		0xffffffff	/* not available */#define BUF_ON_MEM		(ON_AHB | ADDR_INC)#define BUF_ON_APB		(ON_APB	| ADDR_FIX)#define UART0_MEM		0x0#define UART0_CTL		(HS_MODE | SYNC_PCLK | INT_MODE | TSZ_UNIT | \				 SINGLE_SERVICE | HWSRC(CH0_UART0) | DMA_SRC_HW | \				 CLR_ATRELOAD | DSZ(DSZ_BYTE) | TX_CNT(0))#define UART0_WR_SRC		UART0_MEM#define UART0_WR_DST		0x50000020	/* UTXH0 */#define UART0_WR_CTL		UART0_CTL#define UART0_RD_SRC		0x50000024	/* URXH0 */#define UART0_RD_DST		UART0_MEM#define UART0_RD_CTL		UART0_CTL#define UART0_WR_SRC_CTL	BUF_ON_MEM#define UART0_WR_DST_CTL	BUF_ON_APB#define UART0_RD_SRC_CTL	BUF_ON_APB#define UART0_RD_DST_CTL	BUF_ON_MEM#define UART1_WR_SRC		DMA_UNDEF#define UART1_WR_DST		DMA_UNDEF#define UART1_WR_CTL		DMA_UNDEF#define UART1_RD_SRC		DMA_UNDEF#define UART1_RD_DST		DMA_UNDEF#define UART1_RD_CTL		DMA_UNDEF#define UART1_WR_SRC_CTL	DMA_UNDEF		#define UART1_WR_DST_CTL	DMA_UNDEF#define UART1_RD_SRC_CTL	DMA_UNDEF#define UART1_RD_DST_CTL	DMA_UNDEF#define UART2_WR_SRC		DMA_UNDEF#define UART2_WR_DST		DMA_UNDEF#define UART2_WR_CTL		DMA_UNDEF#define UART2_RD_SRC		DMA_UNDEF#define UART2_RD_DST		DMA_UNDEF#define UART2_RD_CTL		DMA_UNDEF#define UART2_WR_SRC_CTL	DMA_UNDEF		#define UART2_WR_DST_CTL	DMA_UNDEF#define UART2_RD_SRC_CTL	DMA_UNDEF#define UART2_RD_DST_CTL	DMA_UNDEF#define I2SSDO_CTL		(HS_MODE | SYNC_PCLK | INT_MODE | TSZ_UNIT |  \				SINGLE_SERVICE | HWSRC(CH2_I2SSDO) | DMA_SRC_HW | \				CLR_ATRELOAD | DSZ(DSZ_HALFWORD) | TX_CNT(0))#define I2SSDI_CTL              (HS_MODE | SYNC_PCLK | INT_MODE | TSZ_UNIT | \                                 SINGLE_SERVICE | HWSRC(CH1_I2SSDI) | DMA_SRC_HW | \                                 CLR_ATRELOAD | DSZ(DSZ_HALFWORD) | TX_CNT(0))                #define I2SSDO_WR_SRC		0x0#define I2SSDO_WR_DST		0x55000010#define I2SSDO_WR_CTL		I2SSDO_CTL#define I2SSDO_RD_SRC		DMA_UNDEF#define I2SSDO_RD_DST		DMA_UNDEF#define I2SSDO_RD_CTL		DMA_UNDEF#define I2SSDO_WR_SRC_CTL	BUF_ON_MEM	#define I2SSDO_WR_DST_CTL	BUF_ON_APB#define I2SSDO_RD_SRC_CTL	DMA_UNDEF#define I2SSDO_RD_DST_CTL	DMA_UNDEF#define I2SSDI_WR_SRC           DMA_UNDEF#define I2SSDI_WR_DST           DMA_UNDEF#define I2SSDI_WR_CTL           DMA_UNDEF#define I2SSDI_RD_SRC           0x55000010             #define I2SSDI_RD_DST           0x2        #define I2SSDI_RD_CTL           I2SSDI_CTL#define I2SSDI_WR_SRC_CTL       DMA_UNDEF               #define I2SSDI_WR_DST_CTL       DMA_UNDEF#define I2SSDI_RD_SRC_CTL       BUF_ON_APB#define I2SSDI_RD_DST_CTL       BUF_ON_MEM #define USB_WR_SRC		DMA_UNDEF#define USB_WR_DST		DMA_UNDEF#define USB_WR_CTL		DMA_UNDEF#define USB_RD_SRC		DMA_UNDEF#define USB_RD_DST		DMA_UNDEF#define USB_RD_CTL		DMA_UNDEF#define USB_WR_SRC_CTL		DMA_UNDEF		#define USB_WR_DST_CTL		DMA_UNDEF#define USB_RD_SRC_CTL		DMA_UNDEF#define USB_RD_DST_CTL		DMA_UNDEF#define MMC_WR_SRC		DMA_UNDEF#define MMC_WR_DST		DMA_UNDEF#define MMC_WR_CTL		DMA_UNDEF#define MMC_RD_SRC		DMA_UNDEF#define MMC_RD_DST		DMA_UNDEF#define MMC_RD_CTL		DMA_UNDEF#define MMC_WR_SRC_CTL		DMA_UNDEF		#define MMC_WR_DST_CTL		DMA_UNDEF#define MMC_RD_SRC_CTL		DMA_UNDEF#define MMC_RD_DST_CTL		DMA_UNDEF#define SPI_WR_SRC		DMA_UNDEF#define SPI_WR_DST		DMA_UNDEF#define SPI_WR_CTL		DMA_UNDEF#define SPI_RD_SRC		DMA_UNDEF#define SPI_RD_DST		DMA_UNDEF#define SPI_RD_CTL		DMA_UNDEF#define SPI_WR_SRC_CTL		DMA_UNDEF		#define SPI_WR_DST_CTL		DMA_UNDEF#define SPI_RD_SRC_CTL		DMA_UNDEF#define SPI_RD_DST_CTL		DMA_UNDEF#define TIMER_WR_SRC		DMA_UNDEF#define TIMER_WR_DST		DMA_UNDEF#define TIMER_WR_CTL		DMA_UNDEF#define TIMER_RD_SRC		DMA_UNDEF#define TIMER_RD_DST		DMA_UNDEF#define TIMER_RD_CTL		DMA_UNDEF#define TIMER_WR_SRC_CTL	DMA_UNDEF		#define TIMER_WR_DST_CTL	DMA_UNDEF#define TIMER_RD_SRC_CTL	DMA_UNDEF#define TIMER_RD_DST_CTL	DMA_UNDEF#define XDREQ0_WR_SRC		DMA_UNDEF#define XDREQ0_WR_DST		DMA_UNDEF#define XDREQ0_WR_CTL		DMA_UNDEF#define XDREQ0_RD_SRC		DMA_UNDEF#define XDREQ0_RD_DST		DMA_UNDEF#define XDREQ0_RD_CTL		DMA_UNDEF#define XDREQ0_WR_SRC_CTL	DMA_UNDEF		#define XDREQ0_WR_DST_CTL	DMA_UNDEF#define XDREQ0_RD_SRC_CTL	DMA_UNDEF#define XDREQ0_RD_DST_CTL	DMA_UNDEF#define XDREQ1_WR_SRC		DMA_UNDEF#define XDREQ1_WR_DST		DMA_UNDEF#define XDREQ1_WR_CTL		DMA_UNDEF#define XDREQ1_RD_SRC		DMA_UNDEF#define XDREQ1_RD_DST		DMA_UNDEF#define XDREQ1_RD_CTL		DMA_UNDEF#define XDREQ1_WR_SRC_CTL	DMA_UNDEF		#define XDREQ1_WR_DST_CTL	DMA_UNDEF#define XDREQ1_RD_SRC_CTL	DMA_UNDEF#define XDREQ1_RD_DST_CTL	DMA_UNDEFstatic dma_type_t dma_types[4][5] = {{	{ "XDREQ0", XDREQ0_WR_SRC, XDREQ0_WR_DST, XDREQ0_WR_CTL, \		    XDREQ0_WR_SRC_CTL, XDREQ0_WR_DST_CTL, \		    XDREQ0_RD_SRC, XDREQ0_RD_DST, XDREQ0_RD_CTL, \		    XDREQ0_RD_SRC_CTL, XDREQ0_RD_DST_CTL },	{ "UART0",  UART0_WR_SRC, UART0_WR_DST, UART0_WR_CTL, \		    UART0_WR_SRC_CTL, UART0_WR_DST_CTL, \		    UART0_RD_SRC, UART0_RD_DST, UART0_RD_CTL, \		    UART0_RD_SRC_CTL, UART0_RD_DST_CTL },	{ "MMC",    MMC_WR_SRC, MMC_WR_DST, MMC_WR_CTL, \		    MMC_WR_SRC_CTL, MMC_WR_DST_CTL, \		    MMC_RD_SRC, MMC_RD_SRC, MMC_RD_CTL, \		    MMC_RD_SRC_CTL, MMC_RD_DST_CTL },	{ "TIMER",  TIMER_WR_SRC, TIMER_WR_DST, TIMER_WR_CTL, \		    TIMER_WR_SRC_CTL, TIMER_WR_DST_CTL, \		    TIMER_RD_SRC, TIMER_RD_DST, TIMER_RD_CTL, \		    TIMER_RD_SRC_CTL, TIMER_RD_DST_CTL },	{ "USB",    USB_WR_SRC, USB_WR_DST, USB_WR_CTL, \		    USB_WR_SRC_CTL, USB_WR_DST_CTL, \		    USB_RD_SRC, USB_RD_DST, USB_RD_CTL, \		    USB_RD_SRC_CTL, USB_RD_DST_CTL }},{	{ "XDREQ1", XDREQ1_WR_SRC, XDREQ1_WR_DST, XDREQ1_WR_CTL, \		    XDREQ1_WR_SRC_CTL, XDREQ1_WR_DST_CTL, \		    XDREQ1_RD_SRC, XDREQ1_RD_DST, XDREQ1_RD_CTL, \		    XDREQ1_RD_SRC_CTL, XDREQ1_RD_DST_CTL },	{ "UART1",  UART1_WR_SRC, UART1_WR_DST, UART1_WR_CTL, \		    UART1_WR_SRC_CTL, UART1_WR_DST_CTL, \		    UART1_RD_SRC, UART1_RD_DST, UART1_RD_CTL, \		    UART1_RD_SRC_CTL, UART1_RD_DST_CTL },	{ "I2SSDI", I2SSDI_WR_SRC, I2SSDI_WR_DST, I2SSDI_WR_CTL, \		    I2SSDI_WR_SRC_CTL, I2SSDI_WR_DST_CTL, \		    I2SSDI_RD_SRC, I2SSDI_RD_DST, I2SSDI_RD_CTL, \		    I2SSDI_RD_SRC_CTL, I2SSDI_RD_DST_CTL },	{ "SPI",    SPI_WR_SRC, SPI_WR_DST, SPI_WR_CTL, \		    SPI_WR_SRC_CTL, SPI_WR_DST_CTL, \		    SPI_RD_SRC, SPI_RD_DST, SPI_WR_CTL, \		    SPI_RD_SRC_CTL, SPI_RD_DST_CTL },	{ "USB",    USB_WR_SRC, USB_WR_DST, USB_WR_CTL, \		    USB_WR_SRC_CTL, USB_WR_DST_CTL, \		    USB_RD_SRC, USB_RD_DST, USB_RD_CTL, \		    USB_RD_SRC_CTL, USB_RD_DST_CTL }},{	{ "I2SSDO", I2SSDO_WR_SRC, I2SSDO_WR_DST, I2SSDO_WR_CTL, \		    I2SSDO_WR_SRC_CTL, I2SSDO_WR_DST_CTL, \		    I2SSDO_RD_SRC, I2SSDO_RD_DST, I2SSDO_RD_CTL, \		    I2SSDO_RD_SRC_CTL, I2SSDO_RD_DST_CTL },	{ "I2SSDI", I2SSDI_WR_SRC, I2SSDI_WR_DST, I2SSDI_WR_CTL, \		    I2SSDI_WR_SRC_CTL, I2SSDI_WR_DST_CTL, \		    I2SSDI_RD_SRC, I2SSDI_RD_DST, I2SSDI_RD_CTL, \		    I2SSDI_RD_SRC_CTL, I2SSDI_RD_DST_CTL },	{ "MMC",    MMC_WR_SRC, MMC_WR_DST, MMC_WR_CTL, \		    MMC_WR_SRC_CTL, MMC_WR_DST_CTL, \		    MMC_RD_SRC, MMC_RD_SRC, MMC_RD_CTL, \		    MMC_RD_SRC_CTL, MMC_RD_DST_CTL },	{ "TIMER",  TIMER_WR_SRC, TIMER_WR_DST, TIMER_WR_CTL, \		    TIMER_WR_SRC_CTL, TIMER_WR_DST_CTL, \		    TIMER_RD_SRC, TIMER_RD_DST, TIMER_RD_CTL, \		    TIMER_RD_SRC_CTL, TIMER_RD_DST_CTL },	{ "USB",    USB_WR_SRC, USB_WR_DST, USB_WR_CTL, \		    USB_WR_SRC_CTL, USB_WR_DST_CTL, \		    USB_RD_SRC, USB_RD_DST, USB_RD_CTL, \		    USB_RD_SRC_CTL, USB_RD_DST_CTL }},{	{ "UART2",  UART2_WR_SRC, UART2_WR_DST, UART2_WR_CTL, \		    UART2_WR_SRC_CTL, UART2_WR_DST_CTL, \		    UART2_RD_SRC, UART2_RD_DST, UART2_RD_CTL, \		    UART2_RD_SRC_CTL, UART2_RD_DST_CTL },	{ "MMC",    MMC_WR_SRC, MMC_WR_DST, MMC_WR_CTL, \		    MMC_WR_SRC_CTL, MMC_WR_DST_CTL, \		    MMC_RD_SRC, MMC_RD_SRC, MMC_RD_CTL, \		    MMC_RD_SRC_CTL, MMC_RD_DST_CTL },	{ "SPI",    SPI_WR_SRC, SPI_WR_DST, SPI_WR_CTL, \		    SPI_WR_SRC_CTL, SPI_WR_DST_CTL, \		    SPI_RD_SRC, SPI_RD_DST, SPI_WR_CTL, \		    SPI_RD_SRC_CTL, SPI_RD_DST_CTL },	{ "TIMER",  TIMER_WR_SRC, TIMER_WR_DST, TIMER_WR_CTL, \		    TIMER_WR_SRC_CTL, TIMER_WR_DST_CTL, \		    TIMER_RD_SRC, TIMER_RD_DST, TIMER_RD_CTL, \		    TIMER_RD_SRC_CTL, TIMER_RD_DST_CTL },	{ "USB",    USB_WR_SRC, USB_WR_DST, USB_WR_CTL, \		    USB_WR_SRC_CTL, USB_WR_DST_CTL, \		    USB_RD_SRC, USB_RD_DST, USB_RD_CTL, \		    USB_RD_SRC_CTL, USB_RD_DST_CTL }}};#if !defined(CONFIG_S3C2410_MPORT3) && !defined(CONFIG_S3C2410_MPORT1) && !defined(CONFIG_SMDK_THREEWATER1)/* FIXME: * 恐 TCON汲沥阑 捞犯霸 秦具 瞪鳖夸?  * TCON |= (TIMER3_ATLOAD_ON | TIMER3_ON | TIMER3_NOP); * 扼绰 疙飞绢 力措肺 冈囚甸瘤 臼嚼聪促. 历狼 阂蔓牢单.... * S3C2410.h俊 沥狼登绢 乐绰 郴侩苞 包访捞 乐阑 巴 鞍嚼聪促. *//* * TCNTB3 绰 窍靛内爹 沁嚼聪促. 咯扁辑 傈力 炼扒篮 TIMER 4甫 * 荤侩窍扁 困秦辑 linux/include/asm-arm/arch-s3c2410/time.h俊辑 * TIMER 3俊 包访等 悸泼捞 捞固 登绢 乐绢具 等促绰 巴涝聪促. */sdfsgdfg#define HOOK_LOST_INT#ifdef HOOK_LOST_INT#define stop_dma_timer()	({ TCON |= TIMER3_OFF; })#define start_dma_timer() \	({ TCNTB3 = 15626; 	/* less than 10ms */  \	   TCON = (TCON | TIMER3_MANUP | TIMER3_OFF); \	   TCON = (TCON | TIMER3_ATLOAD_ON | TIMER3_ON | TIMER3_NOP); })#endif#endif /* nCONFIG_S3C2410_MPORT3 */

⌨️ 快捷键说明

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