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

📄 atc.c

📁 ATMEL公司的AT91RM9200芯片在嵌入式系统中应用非常多
💻 C
📖 第 1 页 / 共 2 页
字号:
	/*	 * Burst Read. (Offset 8 in UPMA RAM)	 */	_NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,	_NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,	_NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,	_NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,	/*	 * Single Write. (Offset 18 in UPMA RAM)	 */	0xfffec00, 0xfffac00, 0xfff2d00, 0xfef2800, 	0xfaf2080, 0xfaf2080, 0xfaf2400, 0x1fbf6c05, /* last */	/*	 * Burst Write. (Offset 20 in UPMA RAM)	 */	_NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,	_NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,	_NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,	_NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,	/*	 * Refresh  (Offset 30 in UPMA RAM)	 */	_NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,	_NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,	_NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,	/*	 * Exception. (Offset 3c in UPMA RAM)	 */	_NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,};																													/* ------------------------------------------------------------------------- *//* Check Board Identity: */int checkboard (void){	printf ("Board: ATC\n");	return 0;}/* ------------------------------------------------------------------------- *//* Try SDRAM initialization with P/LSDMR=sdmr and ORx=orx * * This routine performs standard 8260 initialization sequence * and calculates the available memory size. It may be called * several times to try different SDRAM configurations on both * 60x and local buses. */static long int try_init (volatile memctl8260_t * memctl, ulong sdmr,			  ulong orx, volatile uchar * base){	volatile uchar c = 0xff;	ulong cnt, val;	volatile ulong *addr;	volatile uint *sdmr_ptr;	volatile uint *orx_ptr;	int i;	ulong save[32];		/* to make test non-destructive */	ulong maxsize;	/* We must be able to test a location outsize the maximum legal size	 * to find out THAT we are outside; but this address still has to be	 * mapped by the controller. That means, that the initial mapping has	 * to be (at least) twice as large as the maximum expected size.	 */	maxsize = (1 + (~orx | 0x7fff)) / 2;	/* Since CFG_SDRAM_BASE is always 0 (??), we assume that	 * we are configuring CS1 if base != 0	 */	sdmr_ptr = &memctl->memc_psdmr;	orx_ptr = &memctl->memc_or2;	*orx_ptr = orx;	/*	 * Quote from 8260 UM (10.4.2 SDRAM Power-On Initialization, 10-35):	 *	 * "At system reset, initialization software must set up the	 *  programmable parameters in the memory controller banks registers	 *  (ORx, BRx, P/LSDMR). After all memory parameters are configured,	 *  system software should execute the following initialization sequence	 *  for each SDRAM device.	 *	 *  1. Issue a PRECHARGE-ALL-BANKS command	 *  2. Issue eight CBR REFRESH commands	 *  3. Issue a MODE-SET command to initialize the mode register	 *	 *  The initial commands are executed by setting P/LSDMR[OP] and	 *  accessing the SDRAM with a single-byte transaction."	 *	 * The appropriate BRx/ORx registers have already been set when we	 * get here. The SDRAM can be accessed at the address CFG_SDRAM_BASE.	 */	*sdmr_ptr = sdmr | PSDMR_OP_PREA;	*base = c;	*sdmr_ptr = sdmr | PSDMR_OP_CBRR;	for (i = 0; i < 8; i++)		*base = c;	*sdmr_ptr = sdmr | PSDMR_OP_MRW;	*(base + CFG_MRS_OFFS) = c;	/* setting MR on address lines */	*sdmr_ptr = sdmr | PSDMR_OP_NORM | PSDMR_RFEN;	*base = c;	/*	 * Check memory range for valid RAM. A simple memory test determines	 * the actually available RAM size between addresses `base' and	 * `base + maxsize'. Some (not all) hardware errors are detected:	 * - short between address lines	 * - short between data lines	 */	i = 0;	for (cnt = maxsize / sizeof (long); cnt > 0; cnt >>= 1) {		addr = (volatile ulong *) base + cnt;	/* pointer arith! */		save[i++] = *addr;		*addr = ~cnt;	}	addr = (volatile ulong *) base;	save[i] = *addr;	*addr = 0;	if ((val = *addr) != 0) {		*addr = save[i];		return (0);	}	for (cnt = 1; cnt <= maxsize / sizeof (long); cnt <<= 1) {		addr = (volatile ulong *) base + cnt;	/* pointer arith! */		val = *addr;		*addr = save[--i];		if (val != ~cnt) {			/* Write the actual size to ORx			 */			*orx_ptr = orx | ~(cnt * sizeof (long) - 1);			return (cnt * sizeof (long));		}	}	return (maxsize);}int misc_init_r(void){	volatile immap_t *immap = (immap_t *) CFG_IMMR;	volatile memctl8260_t *memctl = &immap->im_memctl;		upmconfig(UPMA, (uint *)rtc_table, sizeof(rtc_table) / sizeof(uint));	memctl->memc_mamr = MxMR_RLFx_6X | MxMR_WLFx_6X | MxMR_OP_NORM;		return (0);}			long int initdram (int board_type){	volatile immap_t *immap = (immap_t *) CFG_IMMR;	volatile memctl8260_t *memctl = &immap->im_memctl;#ifndef CFG_RAMBOOT	ulong size8, size9;#endif	long psize;	psize = 8 * 1024 * 1024;	memctl->memc_mptpr = CFG_MPTPR;	memctl->memc_psrt = CFG_PSRT;#ifndef CFG_RAMBOOT	/* 60x SDRAM setup:	 */	size8 = try_init (memctl, CFG_PSDMR_8COL, CFG_OR2_8COL,			  (uchar *) CFG_SDRAM_BASE);	size9 = try_init (memctl, CFG_PSDMR_9COL, CFG_OR2_9COL,			  (uchar *) CFG_SDRAM_BASE);	if (size8 < size9) {		psize = size9;		printf ("(60x:9COL) ");	} else {		psize = try_init (memctl, CFG_PSDMR_8COL, CFG_OR2_8COL,				  (uchar *) CFG_SDRAM_BASE);		printf ("(60x:8COL) ");	}#endif	/* CFG_RAMBOOT */	icache_enable ();	return (psize);}#if (CONFIG_COMMANDS & CFG_CMD_DOC)extern void doc_probe (ulong physadr);void doc_init (void){	doc_probe (CFG_DOC_BASE);}#endif#ifdef	CONFIG_PCIstruct pci_controller hose;extern void pci_mpc8250_init(struct pci_controller *);void pci_init_board(void){	pci_mpc8250_init(&hose);}#endif

⌨️ 快捷键说明

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