硬件初始化
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
燒寫程序驗證程序