lpc3000_xram.mac
来自「NXP LPC系列AMR7的开发程序源码(LCD」· MAC 代码 · 共 101 行
MAC
101 行
setup()
{
__var Reg;
// Halt CPU immediately after reset
__hwReset(0);
// Disable WDT
__writeMemory32(0x00000000,0x400040BC,"Memory");
// Init clocks
__writeMemory32(0x2,0x40004050, "Memory"); // SYSCLK_CTRL - Switch to Main oscillator
// Set H divider and Per divider
__writeMemory32(0x0000003D, 0x40004040, "Memory"); // PERIPH_CLK = PLL_CLK*1/16;
// HCLK = PLL_CLK*1/2;
// Set HPLL
__writeMemory32(0x0001601E, 0x40004058, "Memory"); // HCLKPLL_CTRL OSC * 16 = 208MHz
do
{
Reg = __readMemory32(0x40004058, "Memory") & 1; // HCLKPLL_CTRL_bit.LOOK
}while(!Reg);
// Switch to PLL output and out form the self-refresh of the SDRAM
Reg = __readMemory32(0x40004044,"Memory"); // PWR_CTRL
Reg &= ~((1 << 9) | (1 << 8));
Reg |= (1 << 2);
__writeMemory32(Reg, 0x40004044, "Memory");
Reg |= (1 << 8);
__writeMemory32(Reg, 0x40004044, "Memory");
Reg &= ~(1 << 8);
__writeMemory32(Reg, 0x40004044, "Memory");
// Disable 397 PLL
__writeMemory32(0x00000002, 0x40004048, "Memory"); // PLL397_CTRL disable
// MT48H4M16LFB4-8 SDR SDRAM timings set
// Init SDRAM Controller
__writeMemory32(0x00000001, 0x31080000, "Memory"); // MPMCControl - SDRAM Controller Enable
__writeMemory32(0x00000000, 0x31080008, "Memory"); // MPMCConfig - liitle endian
__writeMemory32(0x0001C000, 0x40004068, "Memory"); // SDRAMCLK_CTRL HCLKDELAY = 3.75ns
__writeMemory32(0x00000011, 0x31080028, "Memory"); // MPMCDynamicReadConfig
__writeMemory32(0x00000000, 0x31080400, "Memory"); // MPMCAHBControl0
__writeMemory32(0x00000000, 0x31080440, "Memory"); // MPMCAHBControl2
__writeMemory32(0x00000000, 0x31080460, "Memory"); // MPMCAHBControl3
__writeMemory32(0x00000000, 0x31080480, "Memory"); // MPMCAHBControl4
__writeMemory32(0x00000001, 0x31080030, "Memory"); // MPMCDynamictRP = 1 - 19ns
__writeMemory32(0x00000004, 0x31080034, "Memory"); // MPMCDynamictRAS = 4 - 48ns
__writeMemory32(0x00000008, 0x31080038, "Memory"); // MPMCDynamictSREX = 8 - 80ns
__writeMemory32(0x00000001, 0x31080044, "Memory"); // MPMCDynamictWR = 1 - 15ns
__writeMemory32(0x00000008, 0x31080048, "Memory"); // MPMCDynamictRC = 8 - 80ns
__writeMemory32(0x00000006, 0x3108004C, "Memory"); // MPMCDynamictRFC = 6 - 64ns
__writeMemory32(0x00000008, 0x31080050, "Memory"); // MPMCDynamictXSR = 8 - 80ns
__writeMemory32(0x00000001, 0x31080054, "Memory"); // MPMCDynamictRRD = 1 - 16ns
__writeMemory32(0x00000001, 0x31080058, "Memory"); // MPMCDynamictMRD = 1 - 2ckl
__writeMemory32(0x00000000, 0x3108005C, "Memory"); // MPMCDynamicCDLR = 0 - 1ckl
__writeMemory32(0x00005282, 0x31080100, "Memory"); // MPMCDynamicConfig0
// low power SDR SDRAM
// 64Mb (4Mx16), 4 banks, row length = 12, column length = 8
__writeMemory32(0x00000203, 0x31080104, "Memory"); // MPMCDynamicRasCas0
// CAS = 4 - two clock cycles
// RAS = 2 - 19ns
__writeMemory32(0x00000193, 0x31080020, "Memory"); // MPMCDynamicControl NOP
__sleep(100);
__writeMemory32(0x00000001, 0x31080024, "Memory"); // MPMCDynamicRefresh
__writeMemory32(0x00000113, 0x31080020, "Memory"); // MPMCDynamicControl PALL
__sleep(100);
__writeMemory32(0x00000013, 0x31080020, "Memory"); // MPMCDynamicControl NORMAL
__sleep(100);
__writeMemory32(0x00000065, 0x31080024, "Memory"); // MPMCDynamicRefresh = 104*15.625/16
// 64ms/4,096 = 15.625 us
__writeMemory32(0x00000093, 0x31080020, "Memory"); // MPMCDynamicControl MODE
__readMemory32(0x80008000, "Memory"); // set SDRAM mode register
__writeMemory32(0x00000010, 0x31080020, "Memory"); // MPMCDynamicControl NORMAL
// Map IRAM at 0x00000000
__writeMemory32(0x00000001, 0x40004014, "Memory"); // BOOT_MAP = 1;
}
execUserPreload()
{
__hwReset(0);
setup();
}
execUserReset()
{
/*
__var Reg;
Reg = __readMemory32(0x40004044, "Memory");
Reg |= (1 << 9);
Reg &= ~(1 << 8);
__writeMemory32(Reg, 0x40004044, "Memory");
Reg |= (1 << 8);
__writeMemory32(Reg, 0x40004044, "Memory");
Reg &= ~(1 << 8);
__writeMemory32(Reg, 0x40004044, "Memory");
*/
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?