来自http://blog.163.com/yjie_life/blog/static/16319833720116910264279/
以uart的项目为例子。
建项目目录test_uart,在该目录下建一个src目录,并把uart的所有源码放到src目录下。
![](http://img.ph.126.net/fscqNbIkYMgy7AddeaDM1A==/2505971717671764320.jpg)
把S3C2440A的RAM初始化文件Ext_RAM.ini(在文章后面有源码)和RunInRAM.sct文件(在文章后面有源码)放到项目根目录下
![](http://img314.ph.126.net/Bmxx5DgaaWVuEYyumpmC_Q==/3875066004376439211.jpg)
打开MDK,新建项目,项目文件名为test_uart
![](http://img.ph.126.net/DPuEAKcLql---Emo2L4R_w==/90353467540914217.jpg)
选择芯片
![](http://img.ph.126.net/7j0t-gGr2PUNol5adgCPtg==/3098758018624405912.jpg)
不使用默认的startup代码
![](http://img.ph.126.net/RTITAJcaGzgeul3CT19bfw==/2609835984077995856.jpg)
添加src
![](http://img.ph.126.net/C9FJP8Q7tqDa3nUOSZTC6g==/3356589097276040983.jpg)
添加源文件到src目录
![](http://img.ph.126.net/8naP1YvXaf1rmeTfa4-J0Q==/3694359069328072017.jpg)
![](http://img.ph.126.net/_6P3GffK3wmDL8oHDvsVIA==/3697173819095170638.jpg)
![](http://img307.ph.126.net/BSxtxDrC7IZthAynupSwWQ==/3783586636944802387.jpg)
修改项目选项,点击
,并如图修改
![](http://img.ph.126.net/1-uUsn6acXjEOxPQt9i36w==/3694359069328072041.jpg)
![](http://img.ph.126.net/uLnE5SOFBAOd76JRmBt05g==/2534400690319540505.jpg)
![](http://img.ph.126.net/0H6QWUSVIcgJDU0oqFKbWw==/926615623332308727.jpg)
![](http://img.ph.126.net/5vOqPXCGN9pr0lcGGOLhJA==/2504564342788210341.jpg)
![](http://img.ph.126.net/FJHfK7lixf9felqtdSoymw==/3356589097276041033.jpg)
修改2440init.s文件,
注释掉
IMPORT |Image$$RO$$Base| ; Base of ROM code
IMPORT |Image$$RO$$Limit| ; End of ROM code (=start of ROM data)
IMPORT |Image$$RW$$Base| ; Base of RAM to initialise
IMPORT |Image$$ZI$$Base| ; Base and limit of area
IMPORT |Image$$ZI$$Limit| ; to zero initialise
添加
IMPORT |Image$$ER_ROM1$$RO$$Base| ; Base of ROM code
IMPORT |Image$$ER_ROM1$$RO$$Limit| ; End of ROM code (=start of ROM data)
IMPORT |Image$$RW_RAM1$$RW$$Base| ; Base of RAM to initialise
IMPORT |Image$$RW_RAM1$$ZI$$Base| ; Base and limit of area
IMPORT |Image$$RW_RAM1$$ZI$$Limit| ; to zero initialise
![](http://img313.ph.126.net/WCPaU_1JI2hUiFTFBd5ZuQ==/3677189095749075637.jpg)
注释掉
BaseOfROM DCD |Image$$RO$$Base|
TopOfROM DCD |Image$$RO$$Limit|
BaseOfBSS DCD |Image$$RW$$Base|
BaseOfZero DCD |Image$$ZI$$Base|
EndOfBSS DCD |Image$$ZI$$Limit|
添加
BaseOfROM DCD |Image$$ER_ROM1$$RO$$Base|
TopOfROM DCD |Image$$ER_ROM1$$RO$$Limit|
BaseOfBSS DCD |Image$$RW_RAM1$$RW$$Base|
BaseOfZero DCD |Image$$RW_RAM1$$ZI$$Base|
EndOfBSS DCD |Image$$RW_RAM1$$ZI$$Limit|
![](http://img.ph.126.net/3bC-IHCqLbSnOfYyVjoG_g==/96264442051838582.jpg)
在AREA Init,CODE,READONLY这行前将上PRESERVE8
![](http://img.ph.126.net/_hEy7-pRNa10724ZOgJg5w==/940407897190984290.jpg)
修改Ext_RAM.ini文件,将加载文件改为test_uart.axf:
LOAD .\test_uart.axf INCREMENTAL// 下载程序
![](http://img.ph.126.net/TiFgXdXyzVPuUqLlUpJX-w==/920141698867907371.jpg)
编译项目,点击![](http://img.ph.126.net/w7fdhQCbaxcxLAim5pPRgw==/2728899899226603656.jpg)
![](http://img.ph.126.net/5LlQjL1-rQeRVZs6l-Vc_g==/1036953814218850401.jpg)
将所有硬件准备好后就可以点击
进行调试了,
![](http://img.ph.126.net/aC814DzYPMcNOtg0yYoIeg==/2478668644930830443.jpg)
说明:其它main.c源码有错误,导致输入的字符串不能再次打印出来。其实只要对变量稍作修改就可以了。
以下是Ext_RAM.ini文件
/******************************************************************************/
/* Ext_RAM.INI: External RAM (SDRAM) 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. */
/******************************************************************************/
FUNC void SetupForStart (void) {
// <o> Program Entry Point
PC = 0x30000000;
}
FUNC void Init (void) {
_WDWORD(0x4A000008, 0xFFFFFFFF); // 禁用所有中断
_WDWORD(0x53000000, 0x00000000); // 禁用看门狗定时器
// 时钟配置
// 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
// 配置和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: 使能SDRAM相关的地址线
}
// Reset chip with watchdog, because nRST line is routed on hardware in a way
// that it can not be pulled low with ULINK
// 由于nRST不能通过J-Link进行拉低,使用看门狗复位芯片
_WDWORD(0x40000000, 0xEAFFFFFE); // Load RAM addr 0 with branch to itself
CPSR = 0x000000D3; // 禁用中断
PC = 0x40000000; // 定位PC到RAM的起始位置;片内4K RAM的起始地址
_WDWORD(0x53000000, 0x00000021); // 使能看门狗
g, 0 // 等待看门狗复位芯片
Init(); // 初始化内存
LOAD .\test_adc.axf INCREMENTAL// 下载程序
SetupForStart(); // 配置运行
g, main // Goto Main
以下是RunInRAM.sct文件
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
; Run in RAM
LR_ROM1 0x30000000 { ; load region
ER_ROM1 0x30000000 0x1000000 { ; load address = execution address
*.o (Init, +First) ;设置程序入口,Init是2440Init.S中的段名
; *(InRoot$$Sections)
.ANY (+RO)
}
RW_RAM1 0x31000000 0x1000000 { ; RW data
.ANY (+RW +ZI)
}
RW_IRAM1 0x40000000 0x00001000 {
.ANY (+RW +ZI)
}
}
来自http://blog.163.com/yjie_life/blog/static/16319833720116910264279/
以uart的项目为例子。
建项目目录test_uart,在该目录下建一个src目录,并把uart的所有源码放到src目录下。
把S3C2440A的RAM初始化文件Ext_RAM.ini(在文章后面有源码)和RunInRAM.sct文件(在文章后面有源码)放到项目根目录下
打开MDK,新建项目,项目文件名为test_uart
选择芯片
不使用默认的startup代码
添加src
添加源文件到src目录
修改项目选项,点击,并如图修改
修改2440init.s文件,
注释掉
IMPORT |Image$$RO$$Base| ; Base of ROM code
IMPORT |Image$$RO$$Limit| ; End of ROM code (=start of ROM data)
IMPORT |Image$$RW$$Base| ; Base of RAM to initialise
IMPORT |Image$$ZI$$Base| ; Base and limit of area
IMPORT |Image$$ZI$$Limit| ; to zero initialise
添加
IMPORT |Image$$ER_ROM1$$RO$$Base| ; Base of ROM code
IMPORT |Image$$ER_ROM1$$RO$$Limit| ; End of ROM code (=start of ROM data)
IMPORT |Image$$RW_RAM1$$RW$$Base| ; Base of RAM to initialise
IMPORT |Image$$RW_RAM1$$ZI$$Base| ; Base and limit of area
IMPORT |Image$$RW_RAM1$$ZI$$Limit| ; to zero initialise
注释掉
BaseOfROM DCD |Image$$RO$$Base|
TopOfROM DCD |Image$$RO$$Limit|
BaseOfBSS DCD |Image$$RW$$Base|
BaseOfZero DCD |Image$$ZI$$Base|
EndOfBSS DCD |Image$$ZI$$Limit|
添加
BaseOfROM DCD |Image$$ER_ROM1$$RO$$Base|
TopOfROM DCD |Image$$ER_ROM1$$RO$$Limit|
BaseOfBSS DCD |Image$$RW_RAM1$$RW$$Base|
BaseOfZero DCD |Image$$RW_RAM1$$ZI$$Base|
EndOfBSS DCD |Image$$RW_RAM1$$ZI$$Limit|
在AREA Init,CODE,READONLY这行前将上PRESERVE8
修改Ext_RAM.ini文件,将加载文件改为test_uart.axf:
LOAD .\test_uart.axf INCREMENTAL// 下载程序
编译项目,点击
将所有硬件准备好后就可以点击进行调试了,
说明:其它main.c源码有错误,导致输入的字符串不能再次打印出来。其实只要对变量稍作修改就可以了。
以下是Ext_RAM.ini文件
/******************************************************************************/
/* Ext_RAM.INI: External RAM (SDRAM) 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. */
/******************************************************************************/
FUNC void SetupForStart (void) {
// <o> Program Entry Point
PC = 0x30000000;
}
FUNC void Init (void) {
_WDWORD(0x4A000008, 0xFFFFFFFF); // 禁用所有中断
_WDWORD(0x53000000, 0x00000000); // 禁用看门狗定时器
// 时钟配置
// 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
// 配置和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: 使能SDRAM相关的地址线
}
// Reset chip with watchdog, because nRST line is routed on hardware in a way
// that it can not be pulled low with ULINK
// 由于nRST不能通过J-Link进行拉低,使用看门狗复位芯片
_WDWORD(0x40000000, 0xEAFFFFFE); // Load RAM addr 0 with branch to itself
CPSR = 0x000000D3; // 禁用中断
PC = 0x40000000; // 定位PC到RAM的起始位置;片内4K RAM的起始地址
_WDWORD(0x53000000, 0x00000021); // 使能看门狗
g, 0 // 等待看门狗复位芯片
Init(); // 初始化内存
LOAD .\test_adc.axf INCREMENTAL// 下载程序
SetupForStart(); // 配置运行
g, main // Goto Main
以下是RunInRAM.sct文件
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
; Run in RAM
LR_ROM1 0x30000000 { ; load region
ER_ROM1 0x30000000 0x1000000 { ; load address = execution address
*.o (Init, +First) ;设置程序入口,Init是2440Init.S中的段名
; *(InRoot$$Sections)
.ANY (+RO)
}
RW_RAM1 0x31000000 0x1000000 { ; RW data
.ANY (+RW +ZI)
}
RW_IRAM1 0x40000000 0x00001000 {
.ANY (+RW +ZI)
}
}