Keil+S3C2440裸机代码编译环境搭建

来源:互联网 发布:mac设置铃声 编辑:程序博客网 时间:2024/05/22 14:03

*********************************************************************************

******************************软硬件说明***************************************

************  Keil: Keil uVision V4.10   **************************************

************ CPU: S3C2440    **********************************************

************ J-Link: J-Link V8(SEGGER)   *******************************

*********************************************************************************

 1.打开Keil,新建工程并选择处理器型号,之后会提示是否添加该处理器的启动代码,选择“是”即OK。

 2.新建页编写代码,保存并添加到工程目录下。

 3.Ctr+F7(或选择编译按钮)编译代码,如果代码没问题是不会报错的,之后如果不配置相关选项直接Build代码会报错。一般会提示内存出错之类的信息。

 4.打开“Option for Target”选项卡,在“Target”选项下面设置:“Read/Only Memory Areas”下面勾选ROM1,Start:“0”,Size:“0x1000”,并勾选Startup,在“Read/Write Memory Areas”下面勾选RAM1,Start:“0x30000000”,Size:“0x1000”。其中地址空间大小可以根据情况自己设定。

 5.在“Output”选项卡下面勾选:“Create HEX File”。(不勾也无所谓的)

 6.此时再build代码,一般不会出现问题,这时会生成一个 “ 工程名.sct ” 文件,再打开“Option for Target”,在“Linker”选项卡下面去掉第一行“Use Memory Layout fromTarget Dialog”前面的勾勾。下面“Scatter File”变成可修改状态,一般会有个 “ 工程名.sct”文件,点击后面的编辑按钮,这个文件是关于代码存储空间分布的,注意修改里面的地址空间(S3C2440的SDRAM空间一般为0x3000 0000,地址空间大小可以自己设定,不要超出SDRAM地址空间,一般设置0x10000,)保存文件,并在之前的地方(Scatter File)重新加载该文件。

 7.从网上Down一个“Ext_RAM.INI”文件(External RAM (SDRAM) Initialization File ,Keil 公司编写的 ),这个文件会在你编写的代码运行之前运行,该代码主要是用于初始化处理器(如看门狗、时钟、SDRAM等);在初始化语句下面一行 “LOAD .\***.axf INCREMENTAL”中,将“***.axf”文件改为之前生成的 “工程名.axf”并保存。

 8.在“Option for Target”选项卡的“Debug”子页下,选择 “J-link/J-TRACE”以及勾选前面的“Use”,并选择初始化文件(Initialization File,上一步中所说的那个“.ini文件”)。并在“Utilities”选项卡下面选择“J-link/J-TRACE ”以及初始化文件。注意:去掉“Update Target before Debugging”前面的勾勾,不然下载代码会报错的。之后点击OK即可。

 9.重新Build代码,然后可以通过Debug方式将代码通过J-Link下载到开发板上运行。 以下是初始化代码:###########################################################

FUNC void SetupForStart (void)

 {// 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

}

// Reset chip with watchdog, because nRST line is routed on hardware in a way

// that it can not be pulled low with ULINK

_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 .\444.axf INCREMENTAL // Download program

//SetupForStart(); // Setup for Running

PC = 0x30000000;

g, main // Goto Main

###########################################################

原创粉丝点击