硬件初始化
1、关闭看门狗
2、初始化时钟
3、初始化SDRAM
启动文件需要完成的任务
1、设置main函数的返回地址
2、调用main函数
3、设置栈(将sp指针指向某块内存)
4、清理工作
自行编写启动文件
@************************************************
.text
.global _start
_start:
LDR R0,=0x53000000 @WATCHDOG寄存器地址
MOV R1,#0x0
STR R1,[R0] @写入0,禁止看门狗,防止CPU不断重启
LDR sp,=1024*4 @设置堆栈
BL main @调用c程序中的main函数,并将返回地址保存在lr寄存器中
halt_loop:
B halt_loop @死循环
编写.c文件
/*
* p =( unsigned long *)0x56000050
* *p = (*(unsigned long *)0x56000050) 取得改地址处的值
* volatile告诉编译器不要优化该变量
*/
#define GPFCON (*(volatile unsigned long *)0x56000050)
#define GPFDAT (*(volatile unsigned long *)0x56000054)
int main()
{
GPFCON = 0x00000100; //设置GPF4为输出口
GPFDAT = 0x00000000; //GPF4输出0,LED1点亮
return 0;
}
编写makefile文件
led_on.bin :led.c start_up.s
arm-linux-gcc -g -c -o led_on.o led.c
arm-linux-gcc -g -c -o start_up.o start_up.s
arm-linux-ld -Ttext 0x0000000 -g led_on.o start_up.o -o led_on_elf
arm-linux-objcopy -O binary -S led_on_elf led_on.bin
clean:
rm -f led_on.bin led_on_elf *.o
烧写程序验证程序