1 .text //指定了后续编译出来的内容放在代码段【可执行】 2 .global //告诉编译器后续跟的是一个全局可见的名字【可能是变量,也可以是函数名】 3 _start /*函数的其实地址,也是编译、链接够程序的起始地址。由于程序是通过加载器来加载的, 必须找到_start名字的函数,因此_start必须定义成全局的,以便存在于编译后的全局符合表中, 供其他程序【如加载器】寻找到。*/ 4 _start: 5 /*1.关看门狗*/ 6 ldr r0,=53000000 7 /*2.设置时钟*/ 8 9 /*3.初始化SDRAM*/ 10 ldr r0,=MEM_CTL_BASE 11 adr r1,sdram_config //得到当前地址 12 ldr r2,[r1],#4 13 add r3,r0,#(13*4) 14 15 1: 16 ldr r2,[r1],#4 17 ltr r2,[r0],#4 18 cmp r0,r3 19 bne 1b //不相等,调回前面的1标号 20 /*4.重定位*/ 21 ldr sp,=34000000 //设置函数栈,执行最高内存 22 bl copy_code_to_sdram 23 24 /*5.执行main函数*/ 25 ldr lr,=halt //main函数返回地址 26 ldr pc,=main 27 halt: 28 b halt 29 sdram_config: 30 .long 0x22011110 //BWSCON 31 .long 0x00000700 //BANKCON0 32 .long 0x00000700 //BANKCON1 33 .long 0x00000700 //BANKCON2 34 .long 0x00000700 //BANKCON3 35 .long 0x00000700 //BANKCON4 36 .long 0x00000700 //BANKCON5 37 .long 0x00018005 //BANKCON6 38 .long 0x00018005 //BANKCON7 39 .long 0x008C04F4 //REFRESH 40 .long 0x000000B1 //BANKSIZE 41 .long 0x00000030 //MRSRB6 42 .long 0x00000030 //MRSRB7 43 44
时间: 2024-10-31 11:48:04