;GPIO寄存器宏定义
GPECON EQU 0x56000040 ;Port E control
GPEDAT EQU 0x56000044 ;Port E data
GPEUP EQU 0x56000048 ;Pull-up control E
GPHCON EQU 0x56000070 ;Port H control
GPHDAT EQU 0x56000074 ;Port H data
GPHUP EQU 0x56000078 ;Pull-up control H
EXPORT LEDTEST
AREA LEDTESTASM,CODE,READONLY ;该伪指令定义了一个代码段,段名为LEDTESTASM,属性只读
LEDTEST
;设置GPE11、GPE12引脚为输出状态
ldr r0,=GPECON
ldr r1,[r0]
bic r1,r1,#0x3c00000
orr r1,r1,#0x1400000
str r1,[r0]
;设置GPH4、GPH6引脚为输出状态
ldr r0,=GPHCON
ldr r1,[r0]
bic r1,r1,#0x3300
orr r1,r1,#0x1100
str r1,[r0]
looptest
;将数据端口F的数据寄存器的地址附给寄存器r2
ldr r2,=GPEDAT
ldr r4,=GPHDAT
;D16亮
ldr r3,[r2]
bic r3,r3,#0x1800
orr r3,r3,#0x0800
str r3,[r2] ;GPE11 output 0,D16亮
ldr r5,[r4]
orr r5,r5,#0x50
str r5,[r4]
ldr r0,=0x5ffff
bl delay ;调用延迟子程序
;D17亮
ldr r2,=GPEDAT
ldr r4,=GPHDAT
ldr r3,[r2]
bic r3,r3,#0x1800
orr r3,r3,#0x1000
str r3,[r2] ;GPE12 output 0,D17亮
ldr r5,[r4]
orr r5,r5,#0x50
str r5,[r4]
ldr r0,=0x5ffff
bl delay ;调用延迟子程序
;D18亮
ldr r2,=GPEDAT
ldr r4,=GPHDAT
ldr r3,[r2]
orr r3,r3,#0x1800
str r3,[r2]
ldr r5,[r4]
bic r5,r5,#0x50
orr r5,r5,#0x10
str r5,[r4] ;GPH6 output 0,D18亮
ldr r0,=0x5ffff
bl delay
;D19亮
ldr r2,=GPEDAT
ldr r4,=GPHDAT
ldr r3,[r2]
orr r3,r3,#0x1800
str r3,[r2]
ldr r5,[r4]
bic r5,r5,#0x50
orr r5,r5,#0x40
str r5,[r4] ;GPH4 output 0,D19亮
ldr r0,=0xfffff
bl delay
b looptest
;延时程序
delay
sub r0,r0,#1 ;r0=r0-1
cmp r0,#0x0 ;将r0的值与0相比较
bne delay ;比较的结果不为0(r0不为0),继续调用delay,否则执行下一条语句
mov pc,lr ;返回
END ;程序结束符
设置引脚输出状态,将GPECON的内容读取到r1,。
通过bic orr两个指令,设置寄存器指定的位码。首先bic指令将指定的位清零,再通过orr的逻辑或运算,将指定的位码置1.