自用的ARM9(tq2440)的启动代码

// 适用平台, tq2440
// 简化了不少东西, 不支持中断, 显得很简洁

#define S3C2440_MPLL_200MHZ     ((0x5c<<12)|(0x01<<4)|(0x02))
#define S3C2440_MPLL_400MHZ     ((0x5c<<12)|(0x01<<4)|(0x01))
#define MEM_CTL_BASE    0x48000000

.text
.global _start
_start:
	//1. 关闭看门狗
	ldr r0, =0x53000000      // WTCON = 0x53000000  
	mov r1, #0
	str r1, [r0]            

	//2. 设置时钟
	// 设置分频系数
	ldr r0, =0x4c000014      // CLKDIVN = 0x4c000014
	//mov r1, #0x03		 	 // FCLK:HCLK:PCLK=1:2:4, HDIVN=1,PDIVN=1
	mov r1, #0x05			 // FCLK:HCLK:PCLK=1:4:8
	str r1, [r0]
	// CLKDIV_VAL大于1就需要设置下面这个, 官方要求
	mrc	p15, 0, r1, c1, c0, 0		
	orr	r1, r1, #0xc0000000			
	mcr	p15, 0, r1, c1, c0, 0		
	// 设置FLCK频率		
	ldr r0, =0x4c000004            
	ldr r1, =S3C2440_MPLL_400MHZ
	str r1, [r0]

	//3. 启动ICACHE
	//mrc p15, 0, r0, c1, c0, 0	
	//orr r0, r0, #(1<<12)        
	//mcr	p15, 0, r0, c1, c0, 0  

	//4. 初始化SDRAM
	ldr r0, =MEM_CTL_BASE   
	adr r1, sdram_config	 
	add r3, r0, #(13*4)
1:
	ldr r2, [r1], #4
	str r2, [r0], #4
	cmp r0, r3
	bne 1b

	//5. 重定位
	// 设栈在最高地址
	ldr sp, =0x34000000   
	// 初始化nand
	bl nand_init       
	mov r0, #0
	ldr r1, =_start
	ldr r2, =__bss_start
	sub r2, r2, r1          
	// 调用函数从Nor 或者 Nand 拷贝数据到内存
	bl copy_code_to_sdram
	// 清理bss段
	bl clear_bss
	
	//6. 跳到main去咯
	ldr pc, =main

sdram_config:
	.long 0x22011000	 //BWSCON   
	.long 0x00000700	 //BANKCON0
	.long 0x00000700	 //BANKCON1
	.long 0x00000700	 //BANKCON2
	.long 0x00000700	 //BANKCON3  
	.long 0x00000700	 //BANKCON4
	.long 0x00000700	 //BANKCON5
	.long 0x00018005	 //BANKCON6 
	.long 0x00018005	 //BANKCON7
	.long 0x008C04F4	 //REFRESH  4
	.long 0x000000B1	 //BANKSIZE
	.long 0x00000030	 //MRSRB6
	.long 0x00000030	 //MRSRB7

 

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值