micro2440 裸板程序调试记录一

硬件:micro2440,SDRAM: k4s561632N-LC75,编译器:CodeSourcery  arm-2013.05-23-arm-none-eabi.exe 

初次调试裸板程序,没有调试器,只能用led点亮的方法来判读程序是否跑飞,过程很痛苦,写个笔记记录下:

程序功能:将arm片内4k sram中的部分内容搬到sdram中运行,主要训练链接脚本的使用,熟悉系统的启动过程,sdram的初始化配置等目的。

crt0.s: 负责设置系统时钟,拷贝点灯应用程序到SDRAM中,然后跳到SDRAM继续执行。 

led.c: 点灯应用程序

sdram.c:sdram 寄存器初始化

led.lds: 链接脚本

下面逐一说明:

三种时钟s3c2440A spec上的说明


s3c2440A有两个PLL,一个MPLL用于FCLK,HCLK,PCLK,另一个UPLL,用于usb模块.Mpll时钟由外接的12MHZ晶振通过调节pll倍频参数P,M,S到达400MHZ(最大可为533MHZ),经过FCLK:HCLK:PCLK=1:4:8分频,HCLK为100MHZ,此频率给SDRAM提供时钟,这是程序中需要用到的时钟知识。


crt0.s代码如下:

@******************************************************************************
@ File:head.s
@ 功能:设置SDRAM,将程序复制到SDRAM,然后跳到SDRAM继续执行
@******************************************************************************       
@定义常量

.equ MEM_CTL_BASE, 0x48000000
.equ SDRAM_BASE, 0x30000000
.equ MPLLCON, 0x4c000004
.equ CLKDIVN, 0x4c000014
.equ GPBCON , 0x56000010 
.equ GPBDAT , 0x56000014 
.equ WTCON, 0x53000000


.global _start
_start:  
ldr r0, =WTCON
mov r1, #0x0
str r1, [r0] 

@ ldr r0, =GPBCON
@ ldr r1, =0x15400
@ str r1, [r0]


@ ldr r0, =GPBDAT
 
@ ldr r1, =0xffff
@ str r1, [r0]
@set FCLK:HCLK:PCLK=1:4:8
ldr r0,=CLKDIVN
mov r1,#0x05
str r1,[r0]


@unneed delay
@        ldr r0, =0x10000
@1:
@        sub r0, r0, #1
@        bne 1b
@ change fast bus mode to asyn mode because HDIVN is not 0
mrc p15,0,r0,c1,c0,0
orr r0,r0,#0xc0000000
mcr p15,0,r0,c1,c0,0  
@unneed delay
@        ldr r0, =0x10000
@1:
@        sub r0, r0, #1
@        bne 1b

@ set Mpll clock to 400MHZ 
ldr     r0,=MPLLCON
ldr     r1,=((92<<12)|(1<<4)| 1);
str     r1,[r0]
@ set sp before jump to c code
ldr sp, =4096
bl memsetup

@ ldr r0, =GPBDAT
@ mov r1, #0x07f
@ str r1, [r0] 

bl copy_steppingstone_to_sdram

@ ldr r0, =GPBDAT
@ mov r1, #0x0
@ str r1, [r0] 
@ b .

@jump to SDRAM to continue
ldr sp,=0x34000000 @设置堆栈
ldr pc,=main
halt_loop:
b halt_loop

copy_steppingstone_to_sdram:
@copy the 2k code from steppingstone(address begins at 2048) to sdram(address begins at 0x30000000)
mov r1,#2048
ldr r2,=SDRAM_BASE
mov r3,#4096
1:
ldr r4,[r1],#4
str r4,[r2],#4
cmp r1,r3
bne 1b
mov pc,lr

================================================================================================

led.lds:

分段存放代码 first section :0x0-0x800 存放crt0.o sdram.o ,second section: 0x800-0x1000 存放led.o, 第一部分在SRAM中运行,第二部分在SDRAM中运行。布局如下:

SECTIONS
{
first 0x0:{crt0.o sdram.o}
second 0x30000000:AT(2048) {led.o}
}

怎么传代码。。。


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值