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

📄 amba.h

📁 这是leon3处理器的交叉编译链
💻 H
字号:
#ifndef _LEON3_AMBA_H__#define _LEON3_AMBA_H__/* *  AMBA Plag & Play Bus Driver Macros * *  Macros used for AMBA Plug & Play bus scanning * *  COPYRIGHT (c) 2004. *  Gaisler Research * *  The license and distribution terms for this file may be *  found in the file LICENSE in this distribution or at *  http://www.rtems.com/license/LICENSE. * */#define LEON3_IO_AREA 0xfff00000#define LEON3_CONF_AREA 0xff000#define LEON3_AHB_SLAVE_CONF_AREA (1 << 11)#define LEON3_AHB_CONF_WORDS 8#define LEON3_APB_CONF_WORDS 2#define LEON3_AHB_MASTERS 8#define LEON3_AHB_SLAVES 8#define LEON3_APB_SLAVES 16#define LEON3_APBUARTS 8/* Vendor codes */#define VENDOR_GAISLER   1#define VENDOR_PENDER    2#define VENDOR_ESA       4#define VENDOR_OPENCORES 8/* Gaisler Research device id's */#define GAISLER_LEON3    0x003#define GAISLER_LEON3DSU 0x004#define GAISLER_ETHAHB   0x005#define GAISLER_APBMST   0x006#define GAISLER_AHBUART  0x007#define GAISLER_SRCTRL   0x008#define GAISLER_SDCTRL   0x009#define GAISLER_APBUART  0x00C#define GAISLER_IRQMP    0x00D#define GAISLER_AHBRAM   0x00E#define GAISLER_GPTIMER  0x011#define GAISLER_PCITRG   0x012#define GAISLER_PCISBRG  0x013#define GAISLER_PCIFBRG  0x014#define GAISLER_PCITRACE 0x015#define GAISLER_PCIDMA   0x016#define GAISLER_AHBTRACE 0x017#define GAISLER_ETHDSU   0x018#define GAISLER_PIOPORT  0x01A#define GAISLER_SPACEWIRE 0x01f#define GAISLER_L2TIME   0xffd	/* internal device: leon2 timer */#define GAISLER_L2C      0xffe	/* internal device: leon2compat */#define GAISLER_PLUGPLAY 0xfff	/* internal device: plug & play configarea */#ifndef __ASSEMBLER__extern inline char *gaisler_device_str(int id){	switch (id) {	case GAISLER_LEON3:		return "GAISLER_LEON3";	case GAISLER_LEON3DSU:		return "GAISLER_LEON3DSU";	case GAISLER_ETHAHB:		return "GAISLER_ETHAHB";	case GAISLER_APBMST:		return "GAISLER_APBMST";	case GAISLER_AHBUART:		return "GAISLER_AHBUART";	case GAISLER_SRCTRL:		return "GAISLER_SRCTRL";	case GAISLER_SDCTRL:		return "GAISLER_SDCTRL";	case GAISLER_APBUART:		return "GAISLER_APBUART";	case GAISLER_IRQMP:		return "GAISLER_IRQMP";	case GAISLER_AHBRAM:		return "GAISLER_AHBRAM";	case GAISLER_GPTIMER:		return "GAISLER_GPTIMER";	case GAISLER_PCITRG:		return "GAISLER_PCITRG";	case GAISLER_PCISBRG:		return "GAISLER_PCISBRG";	case GAISLER_PCIFBRG:		return "GAISLER_PCIFBRG";	case GAISLER_PCITRACE:		return "GAISLER_PCITRACE";	case GAISLER_AHBTRACE:		return "GAISLER_AHBTRACE";	case GAISLER_ETHDSU:		return "GAISLER_ETHDSU";        case GAISLER_PIOPORT:		return "GAISLER_PIOPORT";        case GAISLER_SPACEWIRE:		return "GAISLER_SPACEWIRE";			case GAISLER_L2TIME:		return "GAISLER_L2TIME";	case GAISLER_L2C:		return "GAISLER_L2C";	case GAISLER_PLUGPLAY:		return "GAISLER_PLUGPLAY";	default:		break;	}	return 0;}#endif/* European Space Agency device id's */#define ESA_LEON2        0x2#define ESA_MCTRL        0xF#ifndef __ASSEMBLER__extern inline char *esa_device_str(int id){	switch (id) {	case ESA_LEON2:		return "ESA_LEON2";	case ESA_MCTRL:		return "ESA_MCTRL";	default:		break;	}	return 0;}#endif/* Opencores device id's */#define OPENCORES_PCIBR  0x4#define OPENCORES_ETHMAC 0x5#ifndef __ASSEMBLER__extern inline char *opencores_device_str(int id){	switch (id) {	case OPENCORES_PCIBR:		return "OPENCORES_PCIBR";	case OPENCORES_ETHMAC:		return "OPENCORES_ETHMAC";	default:		break;	}	return 0;}extern inline char *device_id2str(int vendor, int id){	switch (vendor) {	case VENDOR_GAISLER:		return gaisler_device_str(id);	case VENDOR_ESA:		return esa_device_str(id);	case VENDOR_OPENCORES:		return opencores_device_str(id);	case VENDOR_PENDER:	default:		break;	}	return 0;}extern inline char *vendor_id2str(int vendor){	switch (vendor) {	case VENDOR_GAISLER:		return "VENDOR_GAISLER";	case VENDOR_ESA:		return "VENDOR_ESA";	case VENDOR_OPENCORES:		return "VENDOR_OPENCORES";	case VENDOR_PENDER:		return "VENDOR_PENDER";	default:		break;	}	return 0;}#endif/* Vendor codes *//*  * * Macros for manipulating Configuration registers   * */#define LEON3_BYPASS_LOAD_PA(x) (*((unsigned long*)x))#define LEON3_BYPASS_STORE_PA(x,v) (*((unsigned long*)x) = (v))#define amba_get_confword(tab, index, word) (*((tab).addr[(index)]+(word)))#define amba_vendor(x) (((x) >> 24) & 0xff)#define amba_device(x) (((x) >> 12) & 0xfff)#define amba_ahb_get_membar(tab, index, nr) (*((tab).addr[(index)]+4+(nr)))#define amba_apb_get_membar(tab, index) (*((tab).addr[(index)]+1))#define amba_membar_start(mbar) (((mbar) & 0xfff00000) & (((mbar) & 0xfff0) << 16))#define amba_iobar_start(base, iobar) ((base) | ((((iobar) & 0xfff00000)>>12) & (((iobar) & 0xfff0)<<4)) )#define amba_irq(conf) ((conf) & 0xf)#define amba_membar_type(mbar) ((mbar) & 0xf)#define AMBA_TYPE_APBIO 0x1#define AMBA_TYPE_MEM   0x2#define AMBA_TYPE_AHBIO 0x3#define AMBA_TYPE_AHBIO_ADDR(addr) (LEON3_IO_AREA | ((addr) >> 12))#ifndef __ASSEMBLER__/* *  The following defines the bits in the LEON UART Status Registers. */#define LEON_REG_UART_STATUS_DR   0x00000001	/* Data Ready */#define LEON_REG_UART_STATUS_TSE  0x00000002	/* TX Send Register Empty */#define LEON_REG_UART_STATUS_THE  0x00000004	/* TX Hold Register Empty */#define LEON_REG_UART_STATUS_BR   0x00000008	/* Break Error */#define LEON_REG_UART_STATUS_OE   0x00000010	/* RX Overrun Error */#define LEON_REG_UART_STATUS_PE   0x00000020	/* RX Parity Error */#define LEON_REG_UART_STATUS_FE   0x00000040	/* RX Framing Error */#define LEON_REG_UART_STATUS_ERR  0x00000078	/* Error Mask *//* *  The following defines the bits in the LEON UART Ctrl Registers. */#define LEON_REG_UART_CTRL_RE     0x00000001	/* Receiver enable */#define LEON_REG_UART_CTRL_TE     0x00000002	/* Transmitter enable */#define LEON_REG_UART_CTRL_RI     0x00000004	/* Receiver interrupt enable */#define LEON_REG_UART_CTRL_TI     0x00000008	/* Transmitter interrupt enable */#define LEON_REG_UART_CTRL_PS     0x00000010	/* Parity select */#define LEON_REG_UART_CTRL_PE     0x00000020	/* Parity enable */#define LEON_REG_UART_CTRL_FL     0x00000040	/* Flow control enable */#define LEON_REG_UART_CTRL_LB     0x00000080	/* Loop Back enable */#define LEON3_GPTIMER_EN 1#define LEON3_GPTIMER_RL 2#define LEON3_GPTIMER_LD 4#define LEON3_GPTIMER_IRQEN 8#define LEON3_GPTIMER_IP 0x10#define LEON3_GPTIMER_CONFIG_TIMERMASK 0x7#define LEON3_GPTIMER_CONFIG_SEPERATE (1<<8)typedef struct {	volatile unsigned int ilevel;	volatile unsigned int ipend;	volatile unsigned int iforce;	volatile unsigned int iclear;	volatile unsigned int notused00;	volatile unsigned int notused01;	volatile unsigned int notused02;	volatile unsigned int notused03;	volatile unsigned int notused10;	volatile unsigned int notused11;	volatile unsigned int notused12;	volatile unsigned int notused13;	volatile unsigned int notused20;	volatile unsigned int notused21;	volatile unsigned int notused22;	volatile unsigned int notused23;	volatile unsigned int mask[16];} LEON3_IrqCtrl_Regs_Map;extern volatile LEON3_IrqCtrl_Regs_Map *LEON3_IrqCtrl_Regs; /* in amba.c */typedef struct {	volatile unsigned int data;	volatile unsigned int status;	volatile unsigned int ctrl;	volatile unsigned int scaler;} LEON23_APBUART_Regs_Map;extern volatile LEON23_APBUART_Regs_Map *leon23_uarts[2]; /* in console.c */extern unsigned int leon23_irqs[2]; /* in console.c */typedef struct {	volatile unsigned int val;	volatile unsigned int rld;	volatile unsigned int ctrl;	volatile unsigned int unused;} LEON3_GpTimerElem_Regs_Map;typedef struct {	volatile unsigned int scalar;	volatile unsigned int scalar_reload;	volatile unsigned int config;	volatile unsigned int unused;	volatile LEON3_GpTimerElem_Regs_Map e[8];} LEON3_GpTimer_Regs_Map;#define LEON3_GPTIMER_CONFIG_NRTIMERS(c) ((c)->config & 0x7)int Timer_getTimer1(unsigned int **count,unsigned int **reload,unsigned int **ctrl); /* in timer.c*/int Timer_getTimer2(unsigned int **count,unsigned int **reload,unsigned int **ctrl); /* in timer.c*/extern volatile LEON3_GpTimer_Regs_Map *LEON3_GpTimer_Regs;extern unsigned long LEON3_GpTimer_Irq;typedef struct {  volatile unsigned int iodata;  volatile unsigned int ioout;  volatile unsigned int iodir;  volatile unsigned int irqmask;  volatile unsigned int irqpol;  volatile unsigned int irqedge;} LEON3_IOPORT_Regs_Map;/* *  Types and structure used for AMBA Plug & Play bus scanning  */extern int amba_init_done;typedef struct amba_device_table {	int devnr;		/* numbrer of devices on AHB or APB bus */	unsigned int *addr[16];	/* addresses to the devices configuration tables */	unsigned int allocbits[1];	/* 0=unallocated, 1=allocated driver */} amba_device_table;typedef struct amba_confarea_type {	amba_device_table ahbmst;	amba_device_table ahbslv;	amba_device_table apbslv;	unsigned int apbmst;} amba_confarea_type;extern unsigned long amba_find_apbslv_addr(unsigned long vendor,					   unsigned long device,					   unsigned long *irq);// collect apb slavestypedef struct amba_apb_device {	unsigned int start, irq;} amba_apb_device;extern int amba_get_free_apbslv_devices(int vendor, int device,					amba_apb_device * dev, int nr);// collect ahb slavestypedef struct amba_ahb_device {	unsigned int start[4], irq;} amba_ahb_device;extern int amba_get_free_ahbslv_devices(int vendor, int device,					amba_ahb_device * dev, int nr);/*amba_scan.c*/unsigned int leon3_getapbbase(register unsigned int vendor,			      register unsigned int driver, 			      amba_apb_device *apbdevs, int c);#endif				//!__ASSEMBLER__#endif

⌨️ 快捷键说明

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