从0开始学Keil下的S3C2440裸机开发-2使用外部SDRAM

来源:互联网 发布:中山大学软件学院课程 编辑:程序博客网 时间:2024/06/03 17:57

和使用内部RAM一样,关键设置分散加载文件,同时设置JLINK初始化配置文件。

1、新增工程配置组。


2设置分散加载组


3设置ini文件

Ext_Ram内容:
FUNC void SetupForStart (void) {
// <o> Program Entry Point
  PC = 0x30000000;
}

FUNC void Init (void) {

  _WDWORD(0x4A000008, 0xFFFFFFFF);      // Disable All Interrupts

  _WDWORD(0x53000000, 0x00000000);      // Disable Watchdog Timer
  
                                        // Clock Setup 
                                        // FCLK = 300 MHz, HCLK = 100 MHz, PCLK = 50 MHz
  _WDWORD(0x4C000000, 0x0FFF0FFF);      // LOCKTIME
  _WDWORD(0x4C000014, 0x0000000F);      // CLKDIVN
  _WDWORD(0x4C000004, 0x00043011);      // MPLLCON
  _WDWORD(0x4C000008, 0x00038021);      // UPLLCON
  _WDWORD(0x4C00000C, 0x001FFFF0);      // CLKCON

                                        // Memory Controller Setup for SDRAM
  _WDWORD(0x48000000, 0x22000000);      // BWSCON
  _WDWORD(0x4800001C, 0x00018005);      // BANKCON6
  _WDWORD(0x48000020, 0x00018005);      // BANKCON7
  _WDWORD(0x48000024, 0x008404F3);      // REFRESH
  _WDWORD(0x48000028, 0x00000032);      // BANKSIZE
  _WDWORD(0x4800002C, 0x00000020);      // MRSRB6
  _WDWORD(0x48000030, 0x00000020);      // MRSRB7
  _WDWORD(0x56000000, 0x000003FF);      // GPACON: Enable Address lines for SDRAM
}
_WDWORD(0x40000000, 0xEAFFFFFE);        // Load RAM addr 0 with branch to itself
CPSR = 0x000000D3;                      // Disable interrupts
PC   = 0x40000000;                      // Position PC to start of RAM
_WDWORD(0x53000000, 0x00000021);        // Enable Watchdog
g, 0                                    // Wait for Watchdog to reset chip

Init();                                 // Initialize memory
LOAD .\output\obj\s3c2440keil.axf INCREMENTAL         // Download program
SetupForStart();                        // Setup for Running
g, main                                 // Goto Main

更改S3C2440.S文件如下:

DCD  ||Image$$ER_ROM1$$RO$$Length||+\

                        ||Image$$RW_RAM1$$RW$$Length||

去调内部RAM运行时给改的I.


4运行调试

5关于分散加载和JLINK初始化文件

分散加载:分散加载的定义网上一搜一堆,以此例程为例,程序包括ROM和RAM2个部分,分散加载的含义就是制定ROM在哪个地址,RAM在哪个地址,因为本例子,使用外部SDRAM,需要把SDRAM分成2部分,一部分存ROM,一部分存RAM,因此Keil提供可视化的分散加载配置,直接输入地址和大小即可。
JLINK初始化文件:因为在RAM中运行,掉电后代码丢失,同时要把代码下载到外部SDRAM中,JLINK无法直接操作SDRAM,所以要先初始化S3C2440的SDRAM接口,然后通过2440接口把代码写入SDRAM中,所以需要配置文件。
0 0
原创粉丝点击