這裡使用的 ARM開發板為 JZ2440,開發板附上的開發資料齊全,又有提供免費的教學影片,較容易入門,iammic 會將學習過程撰寫成筆記,方便以後查閱。以下筆記,將簡單的透過 S3C2440 ARM CPU 控制開發板上的 LED 亮起。
動作:
以下提供範例,將會撰寫一個範例程式,在開啟開發板時,將讓 LED(D11) 亮起。
電路:
開發板上提供 3個 LED 供測試使用,分別對應到 CPU 上GPIO:GPF4、GPF5、GPF6,而這裡會用到的 LED 是D11,接角為GPF5。
Register使用:
這個範例中主要會使用到 GPFCON、GPFDAT兩個 Register,這兩個的 Register的位址分別為 0x56000050、0x56000054
GPFCON Register:
GPFCON Register 可以用來設定 GPIO 腳位的3種狀態,以GPF5 為例,佔用了[11:10] 兩個 bit ,使用方法如下:
1. 當這兩個 bit 設為 00 時,GPF5 為 Input
2. 當這兩個 bit 設為 01 時,GPF5 為 output
3. 當這兩個 bit 設為 10 時,GPF5 為 EINT 中斷模式
程式:
@************************************************************************* @ File:led_on.S @*************************************************************************
.text .global _start _start: LDR R0,=0x56000050 @ R0 設為 GPFCON Register
MOV R1,#0x00000400 @ 0000 0100 0000 0000 [11:10] 為 01 STR R1,[R0] @ 設定 GPFCON GPF5 [11:10] 為 01 Output 模式
LDR R0,=0x56000054 @ R0 設為 GPFDAT Register
MOV R1,#0x00000000 @ R1 設為 0x00000000
STR R1,[R0] @設定 GPFDAT [7:0] 為 0,Output 低電位 LED 亮
MAIN_LOOP: @無窮迴圈 ex. while(true) B MAIN_LOOP |
編譯程式:
arm-linux-gcc -g -c -o led_on.o led_on.S |
LINK (連結):(-T 定義 程式中 .text section 起始位址為0x0000000)
arm-linux-ld -Ttext 0x0000000 -g led_on.o -o led_on_elf |
產生二進制檔(BIN):(將 elf 轉為 ARM CPU使用的 bin 執行檔)
arm-linux-objcopy -O binary -S led_on_elf led_on.bin |
可以將以上編譯連結指令寫成 Makefile:
led_on.bin : led_on.S arm-linux-gcc -g -c -o led_on.o led_on.S arm-linux-ld -Ttext 0x0000000 -g led_on.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 |
以後要編譯 led_on.S 檔案,直接輸入 make 即可,如要清除編譯後 output 檔案,可以輸入 make clean 清除檔案。
#編譯程式 make #清除編譯 output 檔案 make clean |
參考資料:
JZ2440 開發板提供之相關資料
留言列表