程序编写
本次实验将实现初始化SDRAM并将程序自身复制到SDRAM中然后跳转至SDRAM中继续执行流水灯。
依然是在上次程序的基础上进行修改,本次需要修改的文件包括”start.S”和”Makefile”,修改后的文件内容如下:
/* start.S */
.text
.global _start
_start:
#define MDIV 0x7f << 12
#define PSDIV 0x21
ldr r0, =0x53000000
mov r1, #0x00
str r1, [r0] /* disable the watchdog timer */
bl mpll_setup
bl mem_setup
bl relocate
ldr pc, =on_sdram
on_sdram:
ldr sp, =0x34000000 /* set stack pointer */
b main
relocate:
ldr r0, =0x30000000
ldr r1, =0x40000000
add r2, r0, #1024*4
1:
ldr r3, [r1], #4
str r3, [r0], #4
cmp r2, r0
bne 1b
mov pc, lr
mpll_setup:
ldr r0, =0x4c000000
mov r1, #0xffffffff
str r1, [r0] /* set locktime register */
ldr r0, =0x4c000014
mov r1, #5
str r1, [r0] /* set CLKDIVN register */
mrc p15, 0, r1, c1, c0, 0
orr r1, r1, #0xc0000000
mcr p15, 0, r1, c1, c0, 0 /* change bus mode */
ldr r0, =0x4c000004
mov r1, #MDIV
add r1, r1,#PSDIV
str r1, [r0] /* set MPLLCON register */
mov pc, lr
mem_setup:
ldr r0, =0x48000000
adr r1, mem_cfg_val
add r2, r0, #13*4
1:
ldr r3, [r1], #4
str r3, [r0], #4
cmp r2, r0
bne 1b
mov pc, lr
.align 4
mem_cfg_val:
.word 0x22000000 /* BWSCON */
.word 0x00000700 /* BANKCON0 */
.word 0x00000700 /* BANKCON1 */
.word 0x00000700 /* BANKCON2 */
.word 0x00000700 /* BANKCON3 */
.word 0x00000700 /* BANKCON4 */
.word 0x00000700 /* BANKCON5 */
.word 0x00018005 /* BANKCON6 */
.word 0x00018005 /* BANKCON7 */
.word 0x008C04F5 /* REFRESH */
.word 0x000000B1 /* BANKSIZE */
.word 0x00000030 /* MRSRB6 */
.word 0x00000030 /* MRSRB7 */
@Makefile
objs := start.o led.o
led.bin:$(objs)
arm-linux-ld -Ttext 0x30000000 -o led_elf $^
arm-linux-objcopy -O binary -S led_elf $@
arm-linux-objdump -D -m arm led_elf > led.dis
%.o:%.c
arm-linux-gcc -c -o $@ $<
%.o:%.S
arm-linux-gcc -c -o $@ $<
clean:
rm -f led_elf *.o
为了使程序更加直观,在”start.S”中采用标号将程序进行了分段。
和之前的Makefile进行比较可以发现链接地址由原来的0x40000000变为了0x30000000。
修改完成编译后,仍然使用JLINK将程序下载至内部SRAM(0x40000000)处执行,可以看到流水灯仍正常执行,说明SDRAM控制寄存器初始化成功且程序搬移成功。
有关程序跳转至SDRAM执行的原理可参考《嵌入式应用开发完全指南》或者自行搜索”位置无关代码”以及”装载地址和运行地址”。
上一篇:MINI2440 MPLL
下一篇:u-boot添加yaffs2烧写功能代码分析
推荐阅读最新更新时间:2024-11-12 14:53
- 热门资源推荐
- 热门放大器推荐
设计资源 培训 开发板 精华推荐
- LT8714EFE 200kHz、10V 至 14V 输入、双极 -5V 至 5V 输出同步 PWM 控制器的典型应用电路
- ADA4505-4ARUZ-RL 四极黄油值滤波器的典型应用电路,用于血糖仪
- 耳放V0.3
- NCP380HSN05AGEVB:高侧配电开关评估板
- LT1634CCZ-5 微功率电压和电流基准的典型应用
- LT337AT 双路跟踪电源 ±1.25V 至 ±20V 的典型应用
- LT1170IT 的典型应用,5A 外部电流限制
- LT6656BCS6-2.5、2.5V ADC 电压基准和桥式励磁电源的典型应用
- 使用 ROHM Semiconductor 的 BD10IA5WEFJ 的参考设计
- 数字电流表制作+原理图+程序