新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > ARM匯編示例—按鍵LED(循環(huán))

ARM匯編示例—按鍵LED(循環(huán))

作者: 時間:2016-11-09 來源:網絡 收藏
匯編程序是學習硬件非常好的切入點,雖然程序用C來寫回比較方便,但是要想真正了解一款硬件,還是得從體系結構和匯編指令上下點功夫。

一下是一個最基礎的ARM 匯編程序,程序的功能是按鍵,然后在LED上顯示出來是哪個鍵按了下去。

本文引用地址:http://m.butianyuan.cn/article/201611/317674.htm

;引腳連線
;GPF0~GPF3 K1~K4
;GPF4~GPF7 LED1~LED4
;GPG3 K5
;GPG11 K6
;GPxCON的配置寄存器每個引腳都占兩位,00表示表示輸入,01表示輸出
;GPxDAT寄存器表示引腳的高低電平狀態(tài),讀寫數據在這個寄存器里進行
;程序結果:按Kx,則LED就根據x的二進制表示出來

GPFCONEQU0x56000050
GPFDATEQU0x56000054
GPGCONEQU0x56000060
GPGDATEQU0x56000064

AREA KEY_LED,CODE,READONLY;這里表示此區(qū)域是只讀代碼"KEY_LED"
EXPORT _ENTRY;引入程序入口,這里跟連接器有關系

;程序入口
_ENTRY

;初始化GPIO的配置
;這里包括K1~K4輸入配置和LED1~LED4的配置
ldr r0,=GPFCON
movr1,#0x5500
strr1,[r0]

;K5和K6的配置
ldr r0,=GPGCON
ldr r1,=0xff3fff3f
strr1,[r0]

;初始化將led都熄滅
ldr r0,=GPFDAT
movr1,#0xf0
strr1,[r0]

;循環(huán)測試各按鍵狀態(tài),并修改led狀態(tài)
LOOP

;測試按鍵1 GPF0
ldr r0,=GPFDAT;將GPF的數據寄存器地址放入r0
ldr r1,[r0];讀取GPF數據寄存器
tst r1,#0x01;測試GPF0是否變0(K1按下),若是按下,EQ置1,否則NE置1
andeq r1,r1,#0xef;若是EQ為1,將GPF4置0(點亮),其他不變
orrne r1,r1,#0x10;若是NE為1,將GPF4置1(熄滅),其他不變
strr1,[r0];將LED狀態(tài)寫入GPF數據寄存器

;測試按鍵2 GPF2
ldr r0,=GPFDAT
ldr r1,[r0]
tst r1,#0x02
andeq r1,r1,#0xdf
orrne r1,r1,#0x20
strr1,[r0]

;測試按鍵3 GPF3
ldr r0,=GPFDAT
ldr r1,[r0]
tst r1,#0x04
andeq r1,r1,#0xcf
orrne r1,r1,#0x30
strr1,[r0]

;測試按鍵4 GPF04
ldr r0,=GPFDAT
ldr r1,[r0]
tst r1,#0x08
andeq r1,r1,#0xbf
orrne r1,r1,#0x40
strr1,[r0]

;測試按鍵5 GPG3
ldr r0,=GPGDAT
ldr r1,[r0]
ldr r0,=GPFDAT
ldr r2,[r0]
tst r1,#0x0008
andeq r2,r2,#0xaf
orrne r2,r2,#0x50
strr2,[r0]

;測試按鍵5 GPG11
ldr r0,=GPGDAT
ldr r1,[r0]
ldr r0,=GPFDAT
ldr r2,[r0]
tst r1,#0x0800
andeq r2,r2,#0x9f
orrne r2,r2,#0x60
strr2,[r0]

bLOOP

END




關鍵詞: ARM匯編按鍵LED循

評論


技術專區(qū)

關閉