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

📄 hw_sdram.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 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 + -