以下裸機程式基於gt2440,編譯器為arm-linux-gcc-4.4.3。
程式的功能為:開機上電首先跳轉到復位異常處理,在復位異常處理裡關閉看門狗,然後執行led控制程式,程式執行結果為板上4個led全亮。
led.s檔案:
1@暫存器實體地址巨集定義
2#define wtcon 0x53000000
3#define gpbcon 0x56000010
4#define gpbdat 0x56000014
5#define gpbup 0x56000018
6 #define ngpb_output ((1
<<10)|(1
<<12)|(1
<<14)|(1
<<16))7
8.section .text
9.global _start
10_start:
11b reset @跳到復位異常處理程式
1213
reset:
14bl disable_watchdog @跳到關閉看門狗子程式
15bl control_led @跳到控制led子程式
16loop:
17b loop @死迴圈
1819
disable_watchdog:
20ldr r0,=wtcon @載入看門狗暫存器位址
21bic r1,r0,#0x20
22str
r1,[r0] @寫入看門狗暫存器
23mov
pc,lr @返回
2425
control_led:
26ldr r0,=gpbcon @載入io暫存器位址
27orr r1,r0,#ngpb_output
28str
r1,[r0]
29ldr r0,=0x0 @輸出低電平(led亮)
30ldr r1,=gpbdat
31str
r0,[r1]
32mov pc,lr @返回
makefile檔案:
1led.bin:
2 arm-linux-gcc -g -c -o led.o led.s
3 arm-linux-ld -ttext 0x00000000 -g led.o -o led_elf
4 arm-linux-objcopy -o binary -s led_elf led.bin
5 rm -f led_elf led.o67
clean:
8 rm -f led.bin
在終端下執行make編譯生成led.bin二進位制檔案,通過bios燒寫到nand flash,從nand flash啟動。
ARM裸機led控制
define gpj0con 0xe0200240 define gpj0dat 0xe0200244 global start 將 start設定為外部屬性 start ldr r0,0x11111111 偽指令編譯器判斷是否為合法立即數 一般都是偽指令 ldr r1,gpj0con str r0...
ARM裸機之點亮LED
實驗開發版 s5pv210 1 什麼是gpio?general purpose input output 通用輸入 輸出 簡稱為gpio,屬於晶元引腳的一部分。嵌入式系統中常常有數量眾多,但是結構卻比較簡單的外部裝置 電路,對這些裝置 電路有的需要cpu為之提供控制手段,有的則需要被cpu用作輸入訊...
ARM 裸機 02 ARM裸機開發流程
執行在不同平台上的程式,開發過程不盡相同。為了更好地理解 arm 裸機的開發流程,我們先和比較熟悉的 windows linux 應用程式開發對比。不同平台程式開發流程對比示意 編譯嵌入式程式的平台稱為宿主機,譬如執行 ubuntu 系統的 pc。執行嵌入式程式的平台稱為目標機,譬如 arm 開發板...