這裡使用的 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 開發板提供之相關資料

arrow
arrow
    全站熱搜

    iammic 發表在 痞客邦 留言(0) 人氣()