【ARM学习笔记】实验二:S3C2440A的GPIO输入实验
扫描二维码
随时随地手机看文章
在实验一中,研究了如何输出高低电平。
本实验来研究了如何接收高低电平,我们知道,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:
ldrr0, =0x53000000
movr1, #0x00000000
strr1, [r0]
ldrsp, =1024*4
blmain
halt_loop:
bhalt_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;
}
<完结>