ARM体系结构之SDRAM

SDRAM选用了两片三星公司的K4S561632(4M*16bit*4BANK),两片拼成32位数据宽度的SDRAM存储系统,

并映射到S3C2410的SROM/SDRAM的BANK6,地址范围是0x30000000~0x33FFFFFF。开发板上电启动后,自动将NandFlash开始的4K数据复制到SRAM中,然后跳转到0

开始执行,然后初始化存储控制器,把程序本身从SRAM中复制到SDRAM中,最后跳转到SDRAM中运行。故问题的关键是SDRAM的初始化,根据S3C2410的Datasheet,

要使用SDRAM,就需配置存储控制器的13个寄存器。

.equ MEM_CTL_BASE, 0x48000000
.equ SDRAM_BASE, 0x30000000

.text
.global _start
_start:
	bl disable_watch_dog
	bl mem_setup
	bl copy_steppingstone_to_sdram
	ldr pc, =on_sdram	
	
on_sdram:
	@设置栈底指针
	ldr sp, =0x34000000
	
	@跳转到main函数执行
	bl main
	
	@进入死循环
main_loop:
	b main_loop	
	
	
@关闭看门狗
disable_watch_dog:
	ldr r1, =0x53000000
	mov r2, #0x0
	str r2, [r1]
	mov pc, lr
	
	
@
copy_steppingstone_to_sdram:
	mov r1, #0
	ldr r2, =SDRAM_BASE
	mov r3, #4096
1:	
	ldr r4, [r1], #4
	str r4, [r2], #4
	cmp r1, r3
	bne 1b	
	mov pc, lr
	
	
@设置sdram控制寄存器
mem_setup:
	mov r1, #MEM_CTL_BASE
	adrl r2, mem_cfg_val
	add r3, r1, #52
1:
	ldr r4, [r2], #4
	str r4, [r1], #4
	cmp r1, r3
	bne 1b		
	mov pc, lr@返回


@存储器控制器参数
.align 4
mem_cfg_val:
	.long 0x22011110  @BWSCON
	.long 0x0700			@BANKCON0,控制外接设备的访问时序	
	.long 0x0700			@BANKCON1,控制外接设备的访问时序
	.long 0x0700			@BANKCON2,控制外接设备的访问时序
	.long 0x0700			@BANKCON3,控制外接设备的访问时序
	.long 0x0700			@BANKCON4,控制外接设备的访问时序
	.long 0x0700			@BANKCON5,控制外接设备的访问时序
	.long 0x18005			@BANKCON6
	.long 0x18005			@BANKCON7
	.long 0x8C07A3		@REFRESH
	.long 0xB1				@BANKSIZE
	.long 0x30				@MRSRB6
	.long 0x30				@MRSRB7
	

#define LEDCON (*(volatile unsigned long *)0x56000050)
#define LEDDAT (*(volatile unsigned long *)0x56000054)

#define LED_ON(index) (LEDDAT &= ~(0x1 << ((index) + 3)))
#define LED_OFF(index) (LEDDAT |= (0x1 << ((index) + 3)))
#define SLEEP(times) do {\
	int i = times ; \
	for(;i; i--); \
	}while(0)

int main()
{
	LEDCON = 0x00005500;
	while(1){		
		SLEEP(0x5000);
		LED_OFF(1);
		LED_ON(2);
		LED_OFF(3);
		SLEEP(0x5000);
		LED_OFF(2);
		LED_ON(1);
		LED_OFF(3);
		SLEEP(0x5000);
		LED_OFF(1);
		LED_ON(3);
		LED_OFF(2);
	}	
	return 0;
}

hello.bin:hello.c crt.S
	arm-linux-gcc -c hello.c crt.S
	arm-linux-ld -Ttext 0x00000000 crt.o hello.o -o hello_elf
	arm-linux-objcopy -O binary -S hello_elf hello.bin
	
clean:
	rm *.bak *.bin *.o
	




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值