移植TX2440A的ADS项目到MDK4.12+jlink

来自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)

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值