首先查看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熄灭