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 + -
显示快捷键?