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

  • Post author:
  • Post category:其他


和使用内部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中,所以需要配置文件。



版权声明:本文为AFEIXING原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。