您的位置:首页 > 编程语言

TQ210裸机编程(3)——按键(查询法)

2013-10-14 09:59 661 查看
首先查看TQ210的底板原理图



这次编程只操作KEY1和KEY2,在TQ210核心板原理图中搜索XEINT0



可以看出KEY1和KEY2分别接在S5PV210的GPH0_0和GPH0_1引脚。

这次编程使用查询法,需要设置这两个引脚为输入模式,然后循环读取引脚状态,当用户按下按键时,对应引脚为低电平,同时改变LED状态。

查看S5PV210芯片手册





start.S

.global _start				@声明一个全局的标号
_start:
bl main					@跳转到C函数去执行
halt:
b halt					@死循环


key.c

#define GPC0CON		*((volatile unsigned int *)0xE0200060)
#define GPC0DAT		*((volatile unsigned int *)0xE0200064)

#define GPH0CON		*((volatile unsigned int *)0xE0200C00)
#define GPH0DAT		*((volatile unsigned int *)0xE0200C04)

void delay(volatile unsigned int t)
{
volatile unsigned int t2 = 0xFFFF;
while (t--)
for (; t2; t2--);
}

int main()
{
int key_val = 0;
int bit;
GPC0CON &= ~(0xFF << 12);
GPC0CON |= 0x11 << 12;		// 配置GPC0_3和GPC0_4为输出:LED1和LED2

GPH0CON &= ~(0xFF << 0);	// 配置GPH0_0和GPH0_1为输入:key1和key2

while (1)
{
key_val = GPH0DAT & 0x3;
if (key_val)
{
delay(500000);		// 防抖延时
key_val = GPH0DAT & 0x3;

if (key_val)
{
if (0x01 == key_val)		// key1
GPC0DAT ^= 1 << 3;		// toggle LED1
else if (0x02 == key_val)	// key2
GPC0DAT ^= 1 << 4;		// toggle LED2
}
}
}

return 0;
}


Makefile

key.bin: start.o key.o
arm-linux-ld -Ttext 0x20000000 -o key.elf $^
arm-linux-objcopy -O binary key.elf $@
arm-linux-objdump -D key.elf > key.dis

key.o : key.c
arm-linux-gcc -c $< -o $@
start.o : start.S
arm-linux-gcc -c $< -o $@

clean:
rm *.o *.elf *.bin *.dis


下载程序方法参加《TQ210裸机编程(1)——点亮一个LED》

下载程序运行后:

按下key1,LED1点亮,再次按下key1,LED1熄灭

按下key2,LED2点亮,再次按下key2,LED2熄灭
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: