首先查看TQ210的底板原理图
可以看出KEY1和KEY2分别接在S5PV210的GPH0_0和GPH0_1引脚。
这次编程使用查询法,需要设置这两个引脚为输入模式,然后循环读取引脚状态,当用户按下按键时,对应引脚为低电平,同时改变LED状态。
start.S
[cpp] view plaincopy
01..global _start @声明一个全局的标号
02._start:
03. bl main @跳转到C函数去执行
04.halt:
05. b halt @死循环
key.c
[cpp] view plaincopy
01.#define GPC0CON *((volatile unsigned int *)0xE0200060)
02.#define GPC0DAT *((volatile unsigned int *)0xE0200064)
03.
04.#define GPH0CON *((volatile unsigned int *)0xE0200C00)
05.#define GPH0DAT *((volatile unsigned int *)0xE0200C04)
06.
07.void delay(volatile unsigned int t)
08.{
09. volatile unsigned int t2 = 0xFFFF;
10. while (t--)
11. for (; t2; t2--);
12.}
13.
14.int main()
15.{
16. int key_val = 0;
17. int bit;
18. GPC0CON &= ~(0xFF << 12);
19. GPC0CON |= 0x11 << 12; // 配置GPC0_3和GPC0_4为输出:LED1和LED2
20.
21. GPH0CON &= ~(0xFF << 0); // 配置GPH0_0和GPH0_1为输入:key1和key2
22.
23. while (1)
24. {
25. key_val = GPH0DAT & 0x3;
26. if (key_val)
27. {
28. delay(500000); // 防抖延时
29. key_val = GPH0DAT & 0x3;
30.
31. if (key_val)
32. {
33. if (0x01 == key_val) // key1
34. GPC0DAT ^= 1 << 3; // toggle LED1
35. else if (0x02 == key_val) // key2
36. GPC0DAT ^= 1 << 4; // toggle LED2
37. }
38. }
39. }
40.
41. return 0;
42.}
Makefile
[cpp] view plaincopy
01.key.bin: start.o key.o
02. arm-linux-ld -Ttext 0x20000000 -o key.elf $^
03. arm-linux-objcopy -O binary key.elf $@
04. arm-linux-objdump -D key.elf > key.dis
05.
06.key.o : key.c
07. arm-linux-gcc -c $< -o $@
08.start.o : start.S
09. arm-linux-gcc -c $< -o $@
10.
11.clean:
12. rm *.o *.elf *.bin *.dis
下载程序方法参加《TQ210裸机编程(1)——点亮一个LED》
下载程序运行后:
按下key1,LED1点亮,再次按下key1,LED1熄灭
按下key2,LED2点亮,再次按下key2,LED2熄灭