Tiny4412裸机按键控制LED灯

试过了GPIO的输出功能,再来测试下GPIO的输入功能。开发板上有四个用户按键,使用这四个按键来控制四个LED的状态,发现使用位操作真的是非常方便。

  • 开发板:Tiny4412SDK标准版 「Tiny4412 SDK 1506」
  • 工具:「arm-linux-gcc-4.5.1」 「minicom」 「dnw」
  • 平台:Ubuntu 14.04

1. 在原理图上找到按键对应的GPIO

在上一篇中,通过原理图已经知道了用户LED1-4,对应了GPM4_0-GPM4_3,再来看下KEY1-4对应的管脚。

Tiny4412裸机按键控制LED灯_第1张图片

GPX3

用户按键KEY1、KEY2、KEY3、KEY4分别对应了GPX3_2、GPX3_3、GPX3_4、GPX3_5,并且按键引脚平常是高电平,按键被按下变为低电平。

2. 芯片手册查找GPIO相关寄存器

控制寄存器GPX3CON:

Tiny4412裸机按键控制LED灯_第2张图片

数据寄存器GPX3DAT:

Tiny4412裸机按键控制LED灯_第3张图片

配置GPX3所对应的位为0,即为输入模式。

3. 编写程序

#define GPIOBASE	0x11000000
#define GPM4CON     (*(volatile unsigned long *)(GPIOBASE + 0x02E0))
#define GPM4DAT     (*(volatile unsigned long *)(GPIOBASE + 0x02E4))
#define GPX3CON     (*(volatile unsigned long *)(GPIOBASE + 0x0C60))
#define GPX3DAT     (*(volatile unsigned long *)(GPIOBASE + 0x0C64))

int key(void)
{
	unsigned long value;

	/*设置LED1-4对应GPIO为输出模式*/
	GPM4CON &= ~((0xF<<0) | (0xF<<4) | (0xF<<8) | (0xF<<12));
	GPM4CON |= ((1<<0) | (1<<4) | (1<<8) | (1<<12));

	/*设置KEY1-4对应GPIO为输入模式*/
	GPX3CON &= ~((0xF<<8) | (0xF<<12) | (0xF<<16) | (0xF<<20));

	while(1)
	{
		value = GPX3DAT; //读取GPX3电平状态

		if(value & (1<<2)) //Key1 --> GPX3_2
		{
			GPM4DAT |= (1<<0); //LED1 --> GPM4_0
		}else{
			GPM4DAT &= ~(1<<0);
		}

		if(value & (1<<3)) //Key2 --> GPX3_3
		{
			GPM4DAT |= (1<<1);	//LED2 --> GPM4_1
		}else{
			GPM4DAT &= ~(1<<1);
		}

		if(value & (1<<4)) //Key3 --> GPX3_4
		{
			GPM4DAT |= (1<<2);	//LED3 --> GPM4_2
		}else{
			GPM4DAT &= ~(1<<2);
		}

		if(value & (1<<5)) //Key4 --> GPX3_5
		{
			GPM4DAT |= (1<<3); //LED4 --> GPM4_3
		}else{
			GPM4DAT &= ~(1<<3);
		}
	}
	return 0;
}

Makefile代码如下:

default:
    arm-linux-gcc -c key.c  -o key.o
    arm-linux-ld  -Ttext=0x70003000  key.o  -o key
    arm-linux-objcopy  -O binary   key  key.bin
clean:
    rm -f key.o  key  key.bin   *~

执行make clean,然后make,生成key.bin二进制文件。

Tiny4412裸机按键控制LED灯_第4张图片

4. 上传程序到开发板

  1. 在串口中执行:
dnw 70003000

等待dnw下载。

等待下载

  1. 在ubuntu下文件目录下执行:
dnw key.bin

上传

Tiny4412裸机按键控制LED灯_第5张图片

  1. 文件通过dnw下载到开发板内存地址0x70003000,执行:
go 70003000

程序运行。

运行

5. 按键控制LED状态

更多内容,欢迎关注我的公众号。 微信扫一扫下方二维码即可关注:
扫码加入微信公众号:TonyCode

你可能感兴趣的:(ARM)