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灯》 用户按键
《Tiny4412裸机按键控制LED灯》 GPX3

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

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

控制寄存器GPX3CON:

《Tiny4412裸机按键控制LED灯》 GPX3CON

数据寄存器GPX3DAT:

《Tiny4412裸机按键控制LED灯》 GPX3DAT

配置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. 上传程序到开发板

  1. 在串口中执行:
dnw 70003000

等待dnw下载。

《Tiny4412裸机按键控制LED灯》 等待下载

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

《Tiny4412裸机按键控制LED灯》 上传
《Tiny4412裸机按键控制LED灯》 完成

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

程序运行。

《Tiny4412裸机按键控制LED灯》 运行

5. 按键控制LED状态

《Tiny4412裸机按键控制LED灯》 LED
《Tiny4412裸机按键控制LED灯》 KEY

    原文作者:TonyCode
    原文地址: https://www.jianshu.com/p/86cfc016c1b9
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞