在实验一中,研究了如何输出高低电平。
本实验来研究了如何接收高低电平,我们知道,GPIO的输入功能的实际上是电压测量,不会形成通路。
实验2:在下面的电路中:
假设我们将GPG11设置为输入功能,GPB5设置为输出功能,检测开关是否按下,如果按下,则点亮LED,否则熄灭。
【分析】观察电路图可知,开关的一端接在GND(接地)上,另一端通过电阻接在VCC(电源3.3V)上,而S3C2440的GPG11接在开关与电阻之间。
这个电路中,电阻称为上拉电阻,其作用在于,当开关断开时,GPG11检测到高电平,当开关闭合时,GPG11引脚检测到低电平。
相应的也有下拉电阻,用来拉低电平,以后会接触到。
#################################################################################################################
【代码实现】
仅用C语言实现,比较简单方便
#################################################################################################################
key_led.bin : crt0.S key_led.c arm-linux-gcc -g -c -o crt0.o crt0.S arm-linux-gcc -g -c -o key_led.o key_led.c arm-linux-ld -Ttext 0x0000000 -g crt0.o key_led.o -o key_led_elf arm-linux-objcopy -O binary -S key_led_elf key_led.bin arm-linux-objdump -D -m arm key_led_elf > key_led.dis clean: rm -f *.bin *elf *.o *bak *.dis *~
.text .global _start _start: ldr r0, =0x53000000 mov r1, #0x00000000 str r1, [r0] ldr sp, =1024*4 bl main halt_loop: b halt_loop
int main() { unsigned long dwDat; * (unsigned long *)0x56000010 = 0x00000400; * (unsigned long *)0x56000060 = 0x00000000; while(1) { dwDat = * (unsigned long *)0x56000064; if (dwDat & 0x00000800) { * (unsigned long *)0x56000014 = 0xFFFFFFFF; } else { * (unsigned long *)0x56000014 = 0xFFFFFFDF; } } return 0; }
<完结>