Micro2440 Nboot ADS 移植到Keil5编译通过

发布者:自在堂最新更新时间:2020-06-13 来源: eefocus关键字:Micro2440  Nboot  ADS  移植  Keil5 手机看文章 扫描二维码
随时随地手机看文章

由于项目需要开发老版本S3C2440,由于时间有限系统当然跑WinCE6.0,软件兼容性好 当然安装开发工具等等一大堆是相当头疼,之前做STM32特别多,个人电脑一大堆都是32的BSP包,keil用的特别顺手,这次开发2440需要用到友善提供的Nboot,由于ADS软件兼容行特差问题太多不想折腾了,将Nboot移植到keil5上,


步骤1:


需要下载keil下ARM9的支持包,给上逻辑 http://www2.keil.com/mdk5/legacy,下载Legacy support for Arm7, Arm9 & Cortex-R devices安装即可。


步骤2:


将所有Nboot文件拷贝到keil工程下,如下:

步骤3:keil配置

这里需要自己编写链接文件


如下配置:


LOAD_ROM 0x0 ABSOLUTE 

{

INIT 0x0 ABSOLUTE 0x0fff    ;初始程序放在STONE RAM内,起始地址为0,地址尺寸限制为0XFFF(4kb)

{              ;|Image$$INIT$$Base|

*.o(Init,First);|Image$$INIT$$Limit|

}

 

RO+0 ABSOLUTE   ;主程序放在SDRAM内,起始地址为|Image$$INIT$$Limit|+0x30000000

{           ;|Image$$ALL_RO$$Base|

*.o(+RO)   ;|Image$$ALL_RO$$Limit|

}

RW+0x0

{

.ANY (+RW)

}

ZI+0x0

{

.ANY (+ZI)

}

}

步骤4:


修改244x_init.s文件,有的定义跟keil汇编不太一样


;=========================================

; NAME: 2442INIT.S

; DESC: C start up codes

;       Configure memory, ISR ,stacks

; Initialize C-variables

; HISTORY:

; 2002.02.25:kwtark: ver 0.0

; 2002.03.20:purnnamu: Add some functions for testing STOP,Sleep mode

; 2003.03.14:DonGo: Modified for 2440.

;=========================================

 

;  IMPORT  __use_no_semihosting_swi

GET memcfg.inc

GET 244X_addr.inc

 

;_STACK_BASEADDRESS EQU 0x34000000

;SVCStack EQU _STACK_BASEADDRESS ;0x33ff5800 ~

 

;---------------------------------------------------------------------------

;处理器模式 

USERMODE EQU  0x10 

FIQMODE EQU  0x11 

IRQMODE EQU  0x12 

SVCMODE EQU  0x13 

ABORTMODE EQU  0x17 

UNDEFMODE EQU  0x1b 

SYSMODE EQU 0x1f 

;相关掩码 

MODEMASK     EQU  0x1f 

NOINT EQU  0xc0 

;各个处理器模式下堆栈设置 

_STACK_BASEADDRESS EQU 0x33ff8000 

;BANK6 64MB顶部 

UserStack EQU (_STACK_BASEADDRESS-0x3800) ;0x33ff4800 ~ 

SVCStack EQU (_STACK_BASEADDRESS-0x2800) ;0x33ff5800 ~ 

UndefStack EQU (_STACK_BASEADDRESS-0x2400) ;0x33ff5c00 ~ 

AbortStack EQU (_STACK_BASEADDRESS-0x2000) ;0x33ff6000 ~ 

IRQStack EQU (_STACK_BASEADDRESS-0x1000) ;0x33ff7000 ~ 

FIQStack EQU (_STACK_BASEADDRESS-0x0) ;0x33ff8000 ~ 

 

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  Main    ; The main entry of mon program

 

PRESERVE8    ;8 字对齐(为了让汇编代码8字节对齐)

AREA    Init,CODE,READONLY;AREA    Init,CODE,READONLY修改

 

ENTRY

 

b ResetHandler

b . ;handler for Undefined mode

b . ;handler for SWI interrupt

b . ;handler for PAbort

b . ;handler for DAbort

b . ;reserved

b . ;handler for IRQ interrupt

b . ;handler for FIQ interrupt

 

 

;======================================================================================

; ENTRY

;======================================================================================

ResetHandler

 

; 向寄存器地址写入 0即关闭看门狗

ldr r0,=WTCON       ;watch dog disable  0x53000000       ;Watch-dog timer mode

ldr r1,=0x0

str r1,[r0]

 

ldr r0,=INTMSK ;0x4a000008    ;Interrupt mask control

ldr r1,=0xffffffff  ;all interrupt disable

str r1,[r0] ;/向该地址写入全1 屏蔽所有中断

 

ldr r0,=INTSUBMSK

ldr r1,=0x7ff ;all sub interrupt disable

str r1,[r0]

 

 

ldr r0,=GPBCON ;//设置IO PG

ldr r1,=(1<<10):or:(1<<12):or:(1<<14):or:(1<<16); set output

str r1,[r0] ;//写入PG寄存器

ldr r0,=GPBDAT ;set high.

ldr r1,=(1<<6):or:(1<<7):or:(1<<8) ;//点亮LED1  

str r1,[r0]

 

;To reduce PLL lock time, adjust the LOCKTIME register.

ldr r0,=LOCKTIME

ldr r1,=0xffffff

str r1,[r0]

 

;设置时钟分频

ldr r0,=CLKDIVN

ldr r1,=5

str r1,[r0]

 

;Configure UPLL

ldr r0,=UPLLCON

ldr r1,=((56<<12)+(2<<4)+2)  ;Fin=12MHz,Fout=48MHz

str r1,[r0]

nop ; Caution: After UPLL setting, at least 7-clocks delay must be inserted for setting hardware be completed.

nop

nop

nop

nop

nop

nop

 

;Configure MPLL

ldr r0,=MPLLCON

;ldr r1,=((92<<12)+(1<<4)+1)

ldr r1,=((125<<12)+(1<<4)+1);12.0000MHz 532.00 MHz 125(0x7d) 1 1

str r1,[r0]

 

 

 

; :::::::::::::::::::::::::::::::::::::::::::::

;           BEGIN: Power Management 

; - - - - - - - - - - - - - - - - - - - - - - -

ldr r1,=GSTATUS2

ldr r0,[r1]

tst r0,#0x2

beq %F4

ldr r1, =MISCCR        ; MISCCR's Bit 17, 18, 19 -> 0

ldr r0, [r1]                ; I don't know why, Just fallow Sample Code.

bic r0, r0, #(3 << 17)      ; SCLK0:0->SCLK, SCLK1:0->SCLK, SCKE:L->H

str r0, [r1]

 

; Set memory control registers

add r0, pc, #SMRDATA - (. + 8)

ldr r1, =BWSCON ; BWSCON Address

add r2, r0, #52 ; End address of SMRDATA

loop10

ldr r3, [r0], #4

str r3, [r1], #4

cmp r2, r0

bne loop10

 

mov r1, #256

loop11

subs r1, r1, #1 ; wait until the SelfRefresh is released.

bne loop11

 

ldr r0,=GPBDAT ;set high.

ldr r1,=(1<<7):or:(1<<8) ;//点亮LED2  

str r1,[r0]

 

; ldr r1,=GSTATUS3 ;GSTATUS3 has the start address just after SLEEP wake-up

;  如何保证跳过去的前提是内存数据正确!

ldr r2, =0x201000 ; offset into the RAM 

add r2, r2, #0x30000000 ; add physical base

mov     pc, r2 ;  & jump to StartUp address

nop

nop

nop

b .

 

; - - - - - - - - - - - - - - - - - - - - - - -

;           END: Power Management 

; :::::::::::::::::::::::::::::::::::::::::::::

4

    ; Configure memory controller

    ;ldr    r0,=SMRDATA

    add     r0, pc, #SMRDATA - (. + 8)

 

ldr r1,=BWSCON ;BWSCON Address

add r2, r0, #52 ;End address of SMRDATA

0

ldr r3, [r0], #4

str r3, [r1], #4

cmp r2, r0

bne %B0

 

    ;Initialize stacks

bl InitStacks

;ldr sp,=SVCStack ; 

 

 

;Copy and paste RW data/zero initialized data

LDR     r0, =|Image$$RO$$Limit| ; 装入RO段结束地址 

LDR     r1, =|Image$$RW$$Base|  ; 装入RW段起始地址 

LDR     r3, =|Image$$ZI$$Base|  ; 装入ZI段起始地址 

 

;Zero init base => top of initialised data

cmp r0, r1      ; Check that they are different

beq %F2

1

cmp r1, r3      ; Copy init data

ldrcc r2, [r0], #4    ;--> LDRCC r2, [r0] + ADD r0, r0, #4

strcc r2, [r1], #4    ;--> STRCC r2, [r1] + ADD r1, r1, #4

bcc %B1

2

LDR     r1, =|Image$$ZI$$Limit|  

mov r2, #0

3

cmp r3, r1      ; Zero init

strcc r2, [r3], #4

bcc %B3

 

ldr r0,=GPBDAT ;set high.

ldr r1,=(1<<6):or:(1<<8) ;//点亮LED3  

str r1,[r0]

; MMU_EnableICache

mrc p15,0,r0,c1,c0,0

orr r0,r0,#(1<<12)

mcr p15,0,r0,c1,c0,0

; MMU_EnableDCache

mrc p15,0,r0,c1,c0,0

orr r0,r0,#(1<<2)

mcr p15,0,r0,c1,c0,0

bl Main ;Don't use main() because ......

b .

;function initializing stacks

InitStacks

;Don't use DRAM,such as stmfd,ldmfd......

;SVCstack is initialized before

;Under toolkit ver 2.5, 'msr cpsr,r1' can be used instead of 'msr cpsr_cxsf,r1'

mrs r0,cpsr

bic r0,r0,#MODEMASK

orr r1,r0,#UNDEFMODE:or:NOINT

msr cpsr_cxsf,r1 ;UndefMode

ldr sp,=UndefStack ; UndefStack=0x33FF_5C00

 

orr r1,r0,#ABORTMODE:or:NOINT

msr cpsr_cxsf,r1 ;AbortMode

ldr sp,=AbortStack ; AbortStack=0x33FF_6000

 

orr r1,r0,#IRQMODE:or:NOINT

msr cpsr_cxsf,r1 ;IRQMode

ldr sp,=IRQStack ; IRQStack=0x33FF_7000

 

orr r1,r0,#FIQMODE:or:NOINT

msr cpsr_cxsf,r1 ;FIQMode

ldr sp,=FIQStack ; FIQStack=0x33FF_8000

 

bic r0,r0,#MODEMASK:or:NOINT

orr r1,r0,#SVCMODE

msr cpsr_cxsf,r1 ;SVCMode

ldr sp,=SVCStack ; SVCStack=0x33FF_5800

 

;USER mode has not be initialized.

 

mov pc,lr

;The LR register won't be valid if the current mode is not SVC mode.

LTORG

SMRDATA DATA

; Memory configuration should be optimized for best performance

; The following parameter is not optimized.

; Memory access cycle parameter strategy

; 1) The memory settings is  safe parameters even at HCLK=75Mhz.

; 2) SDRAM refresh period is for HCLK<=75Mhz.

DCD (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))

DCD ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))   ;GCS0

DCD ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))   ;GCS1

DCD ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))   ;GCS2

DCD ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))   ;GCS3

DCD ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))   ;GCS4

DCD ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))   ;GCS5

DCD ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))    ;GCS6

DCD ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))    ;GCS7

DCD ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Tsrc<<18)+(Tchr<<16)+REFCNT)

;;;

;   DCD 0x00aC03F4 ;refresh

DCD 0xB2     ;SCLK power saving mode, BANKSIZE 128M/128M

DCD 0x30     ;MRSR6 CL=3clk

DCD 0x30     ;MRSR7 CL=3clk

ALIGN

; AREA RamData, DATA, READWRITE

; ^   _ISR_STARTADDRESS ; MAP  _ISR_STARTADDRESS=0x33FF_FF00

;vCLKDIV_VAL DCD CLKDIV_VAL

;vMPLL_VAL DCD ((M_MDIV<<12)+(M_PDIV<<4)+M_SDIV)

[1] [2]
关键字:Micro2440  Nboot  ADS  移植  Keil5 引用地址:Micro2440 Nboot ADS 移植到Keil5编译通过

上一篇:从0开始学Keil下的S3C2440裸机开发-1使用内部RAM
下一篇:S3C2440A 时钟系统

推荐阅读最新更新时间:2024-10-27 15:01

Micro2440 Nboot ADS 移植Keil5编译通过
由于项目需要开发老版本S3C2440,由于时间有限系统当然跑WinCE6.0,软件兼容性好 当然安装开发工具等等一大堆是相当头疼,之前做STM32特别多,个人电脑一大堆都是32的BSP包,keil用的特别顺手,这次开发2440需要用到友善提供的Nboot,由于ADS软件兼容行特差问题太多不想折腾了,将Nboot移植到keil5上, 步骤1: 需要下载keil下ARM9的支持包,给上逻辑 http://www2.keil.com/mdk5/legacy,下载Legacy support for Arm7, Arm9 & Cortex-R devices安装即可。 步骤2: 将所有Nboot文件拷贝到keil工程下,如
[单片机]
<font color='red'>Micro2440</font> <font color='red'>Nboot</font> <font color='red'>ADS</font> <font color='red'>移植</font>到<font color='red'>Keil5</font>编译通过
基于SmartARM2300开发板的ADS工程移植keil5工程
需求描述: 最近在用LCP2378做项目,需要用到此芯片上的CAN接口,官方给的例程中,是ADS平台下的,根据我个人习惯,想在keil下进行开发,所以就需要将源码转换到keil平台上,根据需要搭建好keil5的软件环境(需要能支持LPC2XXX系列芯片支持包)。 1.新建keil工程,选择LCP2378芯片: 2、会提示是否加载LPC2300.S可以选择加载后可以删除,这个文件相当于ADS里面的Startup.s是程序启动文件(就是复位、中断、main跳转之类的),由于将ADS工程移到这边可以不需要keil自带的LPC2300.S 3、 将ADS工程文件全部考到Keil 工程文件夹下,后在工程中将文件都加入(除了scf
[单片机]
基于SmartARM2300开发板的<font color='red'>ADS</font>工程<font color='red'>移植</font><font color='red'>keil5</font>工程
将TQ2440的ADS工程文件移植KEIL5
TQ2440的例程都是ADS环境下的,ADS已经是古董级的软件,win7都不带支持何况WIN10。考虑需求就尝试将工程移植到keil5上。查找了大量资料,试验加修改总算是移植成功了。文后附上所参考的地址。这里总结一下,方便查看: keil环境配置 打开keil,下载相关的内核,sumsung2440的。 新建工程,选择相关内核(会提示添加源文件,如果自己有就不要添加了,直接导入),将文件导入到工程,此处和导入STM32的h文件,c文件一样 注意拷贝文件时inc文件一定要和源文件在一个文件夹(不是指工程中,是你实际存放文件的文件夹里)就是和2440init.s文件放一块 设置Target选项卡 这里SIZE可以自行设置10000
[单片机]
将TQ2440的<font color='red'>ADS</font>工程文件<font color='red'>移植</font>到<font color='red'>KEIL5</font>中
Qt/Qte 4.7.2开发环境搭建及Micro2440移植笔记
虽然网上有不少关于这方面的资料,想了想还是自己写个总结,毕竟各人有各人的问题,这篇文章也主要是作为个人的学习记录,需要的朋友可以参考哈,老手高手们就不用看了哈。。 之前已经搭建过友善之臂提供的qtopia-2.20开发环境,但用着用着愈发觉着不爽。为何??Qtopia-2.20是基于Qt-Embedded2.3的。2.3版本哪!!!现在Qt/Qte的最新版本是Qt4.8beta。虽然用qtopia2.2的朋友还不少,但是作为新手的小弟,入门学的是现在流行的4.x版本(实际上Qt4.x也发行很久了吧),在PC上编译测试无错的程序拿到qtopia中编译便错漏百出,原因很明显的就是因为版本问题。2.3版本果断无法支持4.x的。于是便
[单片机]
u-boot-2011.03在mini2440/micro2440上的移植 结束语及资源下载
8.1 其他 (1)支持使用向上的箭头显示上一条命令 include/configs/micro2440.h #define CONFIG_CMDLINE_EDITING #ifdef CONFIG_CMDLINE_EDITING #undef CONFIG_AUTO_COMPLETE #else #define CONFIG_AUTO_COMPLETE #endif (2)使用自己的环境变量 common/env_common.c文件中的default_environment 数组,格式如: b= nand read 0x30008000 0x60000 0x300000;bootm 0x30008000 /0 8.2
[单片机]
u-boot-2011.03在mini2440/micro2440上的移植 支持Nand Flash启动
7.1 创建nand_read.c 【注意】 本程序只能用于读取2K/页的Nand。本人的Micro2440上的Nand Flash为256M,型号为K9F2G08 $ touch board/samsung/micro2440/nand_read.c $ cat board/samsung/micro2440/nand_read.c #define rNFCONF (*(volatile unsigned *)0x4E000000) #define rNFCONT (*(volatile unsigned *)0x4E000004) #define rNFCMD (*(volatile unsigned *)0x4E00
[单片机]
u-boot-2011.03在mini2440/micro2440上的移植 支持yaffs下载
6.1 include/conskfigs/micro2440.h 添加 #define CONFIG_CMD_NAND_YAFFS 【说明】 本人在阅读cmd_nand.c时发现u-boot-2011.03已经支持yaffs写入,只需添加如上定义即可,但实际写入错误,再阅读源代码,发现只要按下一步修改即可,虽然这是最简单的方法,但似乎并不是最优的方法。 6.2 drivers/mtd/nand/nand_util.c int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length, u_char *buffer, int withoob) {
[单片机]
u-boot-2011.03在mini2440/micro2440上的移植 支持Nand Flash
5.1 添加s3c2440_nand.c $ touch drivers/mtd/nand/s3c2440_nand.c $ cat drivers/mtd/nand/s3c2440_nand.c #include common.h #if 0 #define DEBUGN printf #else #define DEBUGN(x, args ...) {} #endif #include nand.h #include asm/arch/s3c24x0_cpu.h #include asm/io.h #define __REGb(x) (*(volatile unsigned char *)(x)) #define
[单片机]
u-boot-2011.03在mini2440/<font color='red'>micro2440</font>上的<font color='red'>移植</font> 支持Nand Flash
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved