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

本文详细介绍了如何使用Keil进行S3C2440的分散加载配置及JLINK初始化文件的设置,以实现ROM和RAM的高效利用,特别关注了内存控制器的配置、中断禁用、时钟设置以及如何通过JLINK将代码下载至外部SDRAM,确保在掉电后代码的持久性和系统的稳定运行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值