标签:
.global _start _start: ldr sp, =4096 @ 设置堆栈指针 bl disable_watch_dog @ 关闭WATCHDOG,否则CPU会不断重启 bl memsetup @ 设置存储控制器 bl copy_code_to_sdram @ 复制代码到SDRAM中 ldr sp, =0x34000000 @ 重设栈指针,指向SDRAM顶端 ldr pc, =0x30000000 @ 跳到SDRAM中继续执行 @ 这里如何寻找main函数呢?这里提一个问题! halt_loop: b halt_loop
unsigned long addr_sdram_stack = 0x34000000; unsigned long addr_sdram_base = 0x30000000; /* WATCHDOG寄存器 */ #define P_WTCON ((volatile unsigned long *)0x53000000) /* 存储控制器的寄存器起始地址 */ #define MEM_CTL_BASE 0x48000000 /* * 关闭WATCHDOG,否则CPU会不断重启 */ void disable_watch_dog(void) { // ClearBit(*P_WTCON,5); // setNbit(*P_WTCON,1,5,0x0); *P_WTCON = 0; } void memsetup(void) { /* SDRAM 13个寄存器的值 */ unsigned long const mem_cfg_val[]={ 0x22011110, //BWSCON 0x00000700, //BANKCON0 0x00000700, //BANKCON1 0x00000700, //BANKCON2 0x00000700, //BANKCON3 0x00000700, //BANKCON4 0x00000700, //BANKCON5 0x00018005, //BANKCON6 0x00018005, //BANKCON7 0x008C07A3, //REFRESH 0x000000B1, //BANKSIZE 0x00000030, //MRSRB6 0x00000030, //MRSRB7 }; int i = 0; volatile unsigned long *p = (volatile unsigned long *)MEM_CTL_BASE; for(; i < 13; i++) p[i] = mem_cfg_val[i]; } void copy_code_to_sdram(void) { unsigned int *pdwSrc = (unsigned int *)2048; unsigned int *pdwDest = (unsigned int *)addr_sdram_base; while (pdwSrc < (unsigned int *)4096) //2k-4k复制 { *pdwDest = *pdwSrc; pdwDest++; pdwSrc++; } }
#define GPBCON (*(volatile unsigned long *)0x56000050) #define GPBDAT (*(volatile unsigned long *)0x56000054) int main() { GPBCON = 0x00000100; // 设置GPB4为输出口, 位[8:7]=0b01 GPBDAT = 0x00000000; // GPB4输出0,LED1点亮 return 0; }
objs := head.o init.o leds.o memory.bin : $(objs) arm-linux-ld -Tmem.lds -o mem.elf $^ arm-linux-objcopy -O binary -S mem.elf $@ arm-linux-objdump -D -m arm mem.elf > mem.dis #$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件 %.o:%.c arm-linux-gcc -Wall -O2 -c -o $@ $< %.o:%.S arm-linux-gcc -Wall -O2 -c -o $@ $< clean: rm -f *.dis *.bin *.elf *.o ../../pub/*.o
SECTIONS { firtst 0x00000000 : { head.o init.o ../../pub/bit.o } second 0x30000000 : AT(2048) { leds.o } third :{1.o} }
标签:
原文地址:http://blog.csdn.net/zmnqazqaz/article/details/51347405