试过了GPIO的输出功能,再来测试下GPIO的输入功能。开发板上有四个用户按键,使用这四个按键来控制四个LED的状态。linux
我们的按键在底板上,因此须要看底板的原理图
web
打开底板原理图(Tiny4412SDK-1506-Schematic.pdf)
svg
用户按键KEY一、KEY二、KEY三、KEY4分别对应了GPX3_二、GPX3_三、GPX3_四、GPX3_5,而且按键引脚日常是高电平,按键被按下变为低电平。工具
由原理图可知,程序只进行了两步操做。测试
第一步:GPX3CON功能配置寄存器,地址为0x11000000+0x00000C60=0x11000C60,每四位控制一个引脚,0输入,1输出等等,这里咱们用到的是输入功能。code
Base Address: 0x1100_0000xml
Address = Base Address + 0x0C60, Reset Value = 0x0000_0000
blog
第二步:GPX3DAT数据寄存器,读取对应的位便可。
图片
Key控制对应的LED开发
led.s文件内容以下
.section .text .align 2 .global led_init led_init: @配置为输出 ldr r0, =0x110002E0 ldr r1, [r0] ldr r2, =0xffff bic r1, r1, r2 ldr r2, =0x1111 orr r1, r1, r2 str r1, [r0] mov pc, lr .align 2 .global led_allon led_allon: ldr r0, =0x110002E4 ldr r1, [r0] bic r1, r1, #0xf str r1, [r0] mov pc, lr .align 2 .global led_alloff led_alloff: ldr r0, =0x110002E4 ldr r1, [r0] orr r1, r1, #0xf str r1, [r0] mov pc, lr .align 2 .global led_on led_on: ldr r1, =0x110002E4 ldr r2, [r1] mov r3, #1 bic r2, r2, r3, LSL r0 str r2, [r1] mov pc, lr .align 2 .global led_off led_off: ldr r1, =0x110002E4 ldr r2, [r1] mov r3, #1 orr r2, r2, r3, LSL r0 str r2, [r1] mov pc, lr .align 2 .global led_set led_set: ldr r1, =0x110002E4 ldr r2, [r1] orr r2, r2, #0xf and r2, r2, r0 str r2, [r1] mov pc, lr
key.s内容以下
.section .text .align 2 .global key_init key_init: ldr r0, =0x11000C60 ldr r1, [r0] ldr r2, =0xffff00 bic r1, r1, r2 str r1, [r0] mov pc, lr .align 2 .global key_get key_get: ldr r1, =0x11000C64 ldr r0, [r1] lsr r0, #2 mov pc, lr
test.s文件内容以下
.section .text .align 2 .global _start _start: stmfd sp!, {lr} bl key_init bl led_init 1: bl key_get bl led_set b 1b ldmfd sp!, {pc}
led控制蜂鸣器 key1控制蜂鸣器开,key2控制蜂鸣器关
bell.s文件内容以下
.section .text .align 2 .global bell_init bell_init: @GPD0_0 ldr r0, =0x114000A0 ldr r1, [r0] bic r1, r1, #0xf orr r1, r1, #0x1 str r1, [r0] mov pc, lr .align 2 .global bell_on bell_on: ldr r0, =0x114000A4 ldr r1, [r0] orr r1, r1, #0x1 str r1, [r0] mov pc, lr .align 2 .global bell_off bell_off: ldr r0, =0x114000A4 ldr r1, [r0] bic r1, r1, #0x1 str r1, [r0] mov pc, lr
key.s文件内容以下:
.section .text .align 2 .global key_init key_init: ldr r0, =0x11000C60 ldr r1, [r0] ldr r2, =0xffff00 bic r1, r1, r2 str r1, [r0] mov pc, lr .align 2 .global key_get key_get: ldr r1, =0x11000C64 ldr r0, [r1] lsr r0, #2 mov pc, lr
test.s文件内容以下:
.section .text .align 2 .global _start _start: stmfd sp!, {lr} bl key_init bl bell_init 1: bl key_get mov r4, r0 tst r4, #1 bleq bell_on tst r4, #0b10 bleq bell_off b 1b ldmfd sp!, {pc}
Exynos 4412 SCP_Users Manual_Ver.0.10.00_Preliminary0.pdf