@****************************************************************************** @ File:Startup.S @ 功能:通过它转入C程序 @****************************************************************************** .text .global _start _start: ldr r0, =0x56000010 @ WATCHDOG寄存器地址 mov r1, #0x0 str r1, [r0] @ 写入0,禁止WATCHDOG,否则CPU会不断重启 ldr sp, =1024*4 @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K @ nand flash中的代码在复位后会移到内部ram中,此ram只有4K bl main @ 调用C程序中的main函数 halt_loop: b halt_loop
/****************************************************************************** /* File:led_on_c.c /* 功能:点亮一个LED /******************************************************************************/ #define GPBCON (*(volatile unsigned long *)0x56000010) #define GPBDAT (*(volatile unsigned long *)0x56000014) int main() { GPBCON = 0x00000400; // 设置GPB5为输出口, 位[11:10]=0b01 GPBDAT = 0x00000000; // GPB5输出0,LED1点亮 return 0; }
all : Startup.S led_on_c.c arm-linux-gcc -c -o crt0.o Startup.S arm-linux-gcc -c -o led_on_c.o led_on_c.c arm-linux-ld -Ttext 0x0000000 -g crt0.o led_on_c.o -o led_on_c_elf arm-linux-objcopy -O binary -S led_on_c_elf led_on_c.bin arm-linux-objdump -D -m arm led_on_c_elf > led_on_c.dis clean: rm -f led_on_c.dis led_on_c.bin led_on_c_elf *.o