【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:
	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;
}



<完结>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值