嵌入式Linux學習(四)用c語言點亮LED

硬件初始化

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

燒寫程序驗證程序 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章