;引脚连线 ;GPF0~GPF3 K1~K4 ;GPF4~GPF7 LED1~LED4 ;GPG3 K5 ;GPG11 K6 ;GPxCON的配置寄存器每个引脚都占两位,00表示表示输入,01表示输出 ;GPxDAT寄存器表示引脚的高低电平状态,读写数据在这个寄存器里进行 ;程序结果:按Kx,则LED就根据x的二进制表示出来
GPFCON EQU 0x56000050 GPFDAT EQU 0x56000054 GPGCON EQU 0x56000060 GPGDAT EQU 0x56000064
AREA KEY_LED, CODE, READONLY ;这里表示此区域是只读代码"KEY_LED" EXPORT _ENTRY ;引入程序入口,这里跟连接器有关系
;程序入口 _ENTRY
;初始化GPIO的配置 ;这里包括K1~K4输入配置和LED1~LED4的配置 ldr r0, =GPFCON mov r1, #0x5500 str r1, [r0] ;K5和K6的配置 ldr r0, =GPGCON ldr r1, =0xff3fff3f str r1, [r0] ;初始化将led都熄灭 ldr r0, =GPFDAT mov r1, #0xf0 str r1, [r0]
;循环测试各按键状态,并修改led状态 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(熄灭),其他不变 str r1, [r0] ;将LED状态写入GPF数据寄存器 ;测试按键2 GPF2 ldr r0, =GPFDAT ldr r1, [r0] tst r1, #0x02 andeq r1, r1, #0xdf orrne r1, r1, #0x20 str r1, [r0] ;测试按键3 GPF3 ldr r0, =GPFDAT ldr r1, [r0] tst r1, #0x04 andeq r1, r1, #0xcf orrne r1, r1, #0x30 str r1, [r0]
;测试按键4 GPF04 ldr r0, =GPFDAT ldr r1, [r0] tst r1, #0x08 andeq r1, r1, #0xbf orrne r1, r1, #0x40 str r1, [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 str r2, [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 str r2, [r0]
b LOOP
END
|