📄 hw_sdram.c
字号:
/******************************************************************/
/* Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved. */
/*******************************************************************
File : hw_sdram.c
Desc : sdram接口函数
Author : huangxinyu
Date : 2007-05-30
Notes :
$Log: hw_sdram.c,v $
Revision 1.4 2008/06/19 04:43:36 Administrator
代码整理!
Revision 1.3 2008/06/02 07:56:38 HZF
SDRAM自刷新参数调节
Revision 1.2 2008/05/15 08:06:02 HXY
取消LDK/Porsche宏
Revision 1.1.1.1 2008/05/07 04:15:08 Administrator
no message
Revision 1.1.1.1 2008/03/06 13:29:08 Lingzhaojun
no message
Revision 1.7 2007/11/10 04:30:04 Huangxinyu
调试修改
Revision 1.6 2007/10/30 10:24:35 Hanjiang
no message
Revision 1.5 2007/10/23 08:27:12 Huangxinyu
调试后修改bug
Revision 1.4 2007/10/20 04:46:31 Huangshilin
for RK2700
Revision 1.3 2007/10/08 02:38:49 Lingzhaojun
添加版本自动注释脚本
*********************************************************************/
#include "hw_include.h"
#include "hw_sdram.h"
#define pSDRAMReg ((pSDRAMReg_t)(SDRAM_REG_BASE))
static const char SDRAM_addresscfg[SDRAM_size_MAX][2] =
{
{ROW_11, COL_8},
{ROW_12, COL_8},
{ROW_12, COL_9},
{ROW_13, COL_9}
};
/**************************************************************************
* 函数描述: 初始化SDRAM
* 入口参数:
* size of sdram
* nKHz --- AHB frequence
* 出口参数: 无
* 返回值: 无
***************************************************************************/
void SDRAM_PowerOnInit(void)
{
UINT32 size, ahbfreq;
WriteReg32(&(pSDRAMReg->MCSDR_ADDMAP), 0x0001);
WriteReg32(&(pSDRAMReg->MCSDR_BASIC), 0xa1);
ahbfreq = Pll_get_ahb_freq();
SDRAM_SetFreq(ahbfreq);
// 20ns for pre-charge period
WriteReg32(&(pSDRAMReg->MCSDR_T_RP), 1);
// 20ns for ROW active delay time
WriteReg32(&(pSDRAMReg->MCSDR_T_RCD), 1);
}
/**************************************************************************
* 函数描述: 进入SDRAM自刷新
* 入口参数: 无
* 出口参数: 无
* 返回值: TRUE -- 成功进入自刷新
* FALSE -- 未成功进入自刷新
***************************************************************************/
/* for system idle */
BOOL SDRAM_EnterSelfRefresh(void)
{
WriteReg32(&(pSDRAMReg->MCSDR_T_XSRD), 0x7);
return TRUE;
}
/**************************************************************************
* 函数描述: 退出SDRAM自刷新
* 入口参数: 无
* 出口参数: 无
* 返回值: TRUE -- 成功退出自刷新
* FALSE -- 未成功退出自刷新
***************************************************************************/
/* for exit system idle */
BOOL SDRAM_ExitSelRefresh(void)
{
return TRUE;
}
/**************************************************************************
* 函数描述: 根据频率设置sdram 参数
* 入口参数: nKHz: 频率值,单位kHz
* 出口参数: 无
* 返回值: 无
***************************************************************************/
void SDRAM_SetFreq(unsigned int nMHz)
{
unsigned int i;
// 64ms for total refresh time, 15.625us a auto refresh time
WriteReg32(&(pSDRAMReg->MCSDR_T_REF), (125*nMHz) >> 3); // 125/8 = 15.625
// 64ns for auto refreh to row active time
WriteReg32(&(pSDRAMReg->MCSDR_T_RFC), 64*nMHz / 1000);
i = nMHz / 50;
if (i > 0) i = i - 1;
#if 0
// 20ns for pre-charge period
WriteReg32(&(pSDRAMReg->MCSDR_T_RP), i);
// 20ns for ROW active delay time
WriteReg32(&(pSDRAMReg->MCSDR_T_RCD), i);
#endif
}
/**************************************************************************
* 函数描述: 设置SDRAM的优先级
* 入口参数: priority: 优先级
* 出口参数: 无
* 返回值: 无
***************************************************************************/
void SDRAM_SetPriority(SDRAM_PRIORITY_t priority)
{
if (priority >= PRIORITY_MAX)
priority = PRIORITY_rrWR;
MaskRegBits32(&(pSDRAMReg->MCSDR_BASIC), 0x07 << 5, priority << 5);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -