📄 int_ram.ini
字号:
/******************************************************************************/
/* Int_RAM.ini: Internal RAM Initialization File */
/******************************************************************************/
// <<< Use Configuration Wizard in Context Menu >>> //
/******************************************************************************/
/* This file is part of the uVision/ARM development tools. */
/* Copyright (c) 2005-2008 Keil Software. All rights reserved. */
/* This software may only be used under the terms of a valid, current, */
/* end user licence from KEIL for a compatible version of KEIL software */
/* development tools. Nothing else gives you the right to use this software. */
/******************************************************************************/
DEFINE CHAR Setup;
DEFINE INT Entry;
DEFINE LONG PMC;
DEFINE LONG PIO_SD;
DEFINE LONG MATRIX;
DEFINE LONG SDRAMC;
DEFINE LONG SDRAM;
// Memory mapped peripherals address definitions
PMC = 0xFFFFFC00;
PIO_SD = 0xFFFFF800;
MATRIX = 0xFFFFEC00;
SDRAMC = 0xFFFFE200;
SDRAM = 0x20000000;
FUNC void Clock_Setup (void) {
if (Setup & 0x01) {
// Setup clock; XTAL = 16.367660 MHz,
// PLLA = 200.049178 MHz,
// Processor = 100.024589 MHz
_WDWORD(PMC+ 0x20, 0x0000FF01); // CKGR_MOR: Enable main oscillator
_sleep_(100); // Wait for stable Main Oscillator
_WDWORD(PMC+ 0x28, 0x206DBF09); // CKGR_PLLAR: Configure PLL A
_sleep_(100); // Wait for stable PLL A
_WDWORD(PMC+ 0x30, 0x00000004); // PMC_MCKR: MDIV and PRES fields
_sleep_(100); // Wait for Main Master Clock ready
_WDWORD(PMC+ 0x30, 0x00000006); // PMC_MCKR: all fields
_sleep_(100); // Wait for Main Master Clock ready
}
}
FUNC void SDRAM_Setup (void) {
if (Setup & 0x02) {
// Setup SDRAM Controller
// Setup pins for SDRAM controlling
_WDWORD(PIO_SD+0x60, 0xFFFF0000); // Disable pull-ups
_WDWORD(PIO_SD+0x70, 0xFFFF0000); // Select peripheral A
_WDWORD(PIO_SD+0x04, 0xFFFF0000); // Disable PIO mode
_WDWORD(MATRIX+0x120,0x00000002); // EBI_CSA: CSA1 support for SDRAM
_WDWORD(SDRAMC+0x08, 0x85227259); // SDRAM Configuration
_sleep_(10);
_WDWORD(SDRAMC+0x00, 0x00000001); // Issue NOP Command
_WDWORD(SDRAM+ 0x00, 0x00000000);
_WDWORD(SDRAMC+0x00, 0x00000002); // Issue Precharge All Command
_WDWORD(SDRAM+ 0x00, 0x00000000);
_sleep_(10);
_WDWORD(SDRAMC+0x00, 0x00000004); // Issue Auto-Refresh Command
_WDWORD(SDRAM+ 0x04, 0x00000001);
_WDWORD(SDRAMC+0x00, 0x00000004);
_WDWORD(SDRAM+ 0x08, 0x00000002);
_WDWORD(SDRAMC+0x00, 0x00000004);
_WDWORD(SDRAM+ 0x0C, 0x00000003);
_WDWORD(SDRAMC+0x00, 0x00000004);
_WDWORD(SDRAM+ 0x10, 0x00000004);
_WDWORD(SDRAMC+0x00, 0x00000004);
_WDWORD(SDRAM+ 0x14, 0x00000005);
_WDWORD(SDRAMC+0x00, 0x00000004);
_WDWORD(SDRAM+ 0x18, 0x00000006);
_WDWORD(SDRAMC+0x00, 0x00000004);
_WDWORD(SDRAM+ 0x1C, 0x00000007);
_WDWORD(SDRAMC+0x00, 0x00000004);
_WDWORD(SDRAM+ 0x20, 0x00000008);
_WDWORD(SDRAMC+0x00, 0x00000003); // Issue Load Mode Register Command
_WDWORD(SDRAM+ 0x24, 0xCAFEDEDE);
_WDWORD(SDRAMC+0x00, 0x00000000); // Enter Normal Mode
_WDWORD(SDRAM+ 0x00, 0x00000000);
_WDWORD(SDRAMC+0x04, 0x000002EE); // Refresh for SDRAM (at 96 MHz)
}
}
FUNC void Remap (void) {
if (Setup & 0x10) {
_WDWORD(MATRIX+0x100,0x00000003); // MATRIX_MRCR: Remap IRAM to 0
}
}
FUNC void PC_Setup (void) {
if (Setup & 0x40) {
PC = Entry;
}
}
FUNC void GoMain (void) {
if ((Setup & 0xA0) == 0xA0) {
exec("g,main");
}
}
// <o1.0> Clock Setup
// <o1.1> SDRAM Setup
// <e1.4> Remap
// </e>
// <e1.5> Download Program
FUNC void Download (void) {
if (Setup & 0x20) {
// <s0.80> Command for Loading
exec("LOAD Output\\SAM9263_DF_P1056_CS0_BL.axf INCREMENTAL");
}
}
// </e>
// <e0.6> Setup Program Counter to Entry Point
// <o1> Program Entry Point <0x0-0xFFFFFFFF>
// </e>
// <e.7> Execute Program untill Main Function
// </e>
Setup = 0xF1;
Entry = 0x00000000;
Clock_Setup();
SDRAM_Setup();
Remap();
Download();
PC_Setup();
GoMain();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -