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

📄 sdramc.c

📁 针对at91系列的arm的启动代码的编写有一个整体的说明
💻 C
字号:
/* ---------------------------------------------------------------------------- *         ATMEL Microcontroller Software Support  -  ROUSSET  - * ---------------------------------------------------------------------------- * Copyright (c) 2006, Atmel Corporation * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the disclaiimer below. * * - Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the disclaimer below in the documentation and/or * other materials provided with the distribution. * * Atmel's name may not be used to endorse or promote products derived from * this software without specific prior written permission. * * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ---------------------------------------------------------------------------- * File Name           : sdramc.c * Object              : * Creation            : NLe Jul 11th 2006 *----------------------------------------------------------------------------- */#include "../include/sdramc.h"#include "../include/part.h"#include "../include/main.h"#ifdef CFG_SDRAM/* Write SDRAMC register */static inline void write_sdramc(unsigned int offset, const unsigned int value){	writel(value, offset + AT91C_BASE_SDRAMC);}/* Read SDRAMC registers */static inline unsigned int read_sdramc(unsigned int offset){	return readl(offset + AT91C_BASE_SDRAMC);}//*----------------------------------------------------------------------------//* \fn    sdram_init//* \brief Initialize the SDRAM Controller//*----------------------------------------------------------------------------int sdram_init(unsigned int sdramc_cr, unsigned int sdramc_tr){	volatile unsigned int i;	/* Performs the hardware initialization */	sdramc_hw_init();	/* CFG Control Register */	write_sdramc(SDRAMC_CR, sdramc_cr);	for (i =0; i< 1000;i++);	write_sdramc(SDRAMC_MR, AT91C_SDRAMC_MODE_PRCGALL_CMD);	// Set PRCHG AL	writel(0x00000000, AT91C_SDRAM);						// Perform PRCHG	for (i =0; i< 10000;i++);	write_sdramc(SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);	// Set 1st CBR	writel(0x00000001, AT91C_SDRAM+4);						// Perform CBR	write_sdramc(SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);	// Set 2 CBR	writel(0x00000002, AT91C_SDRAM+8);						// Perform CBR	write_sdramc(SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);	// Set 3 CBR	writel(0x00000003, AT91C_SDRAM+0xc);					// Perform CBR	write_sdramc(SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);	// Set 4 CBR	writel(0x00000004, AT91C_SDRAM+0x10);					// Perform CBR	write_sdramc(SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);	// Set 5 CBR	writel(0x00000005, AT91C_SDRAM+0x14);					// Perform CBR	write_sdramc(SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);	// Set 6 CBR	writel(0x00000006, AT91C_SDRAM+0x18);					// Perform CBR	write_sdramc(SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);	// Set 7 CBR	writel(0x00000007, AT91C_SDRAM+0x1C);					// Perform CBR	write_sdramc(SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);	// Set 8 CBR	writel(0x00000008, AT91C_SDRAM+0x20);					// Perform CBR	write_sdramc(SDRAMC_MR, AT91C_SDRAMC_MODE_LMR_CMD);		// Set LMR operation	writel(0xcafedede, AT91C_SDRAM+0x24);					// Perform LMR burst=1, lat=2	write_sdramc(SDRAMC_TR, sdramc_tr);						// Set Refresh Timer	write_sdramc(SDRAMC_MR, AT91C_SDRAMC_MODE_NORMAL_CMD);	// Set Normal mode	writel(0x00000000, AT91C_SDRAM);						// Perform Normal mode	return 0;}#endif /* CFG_SDRAM */

⌨️ 快捷键说明

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