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对应的管脚。

用户按键
GPX3

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

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

控制寄存器GPX3CON:

GPX3CON

数据寄存器GPX3DAT:

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二进制文件。

生成二进制文件

4. 上传程序到开发板

  1. 在串口中执行:
dnw 70003000

等待dnw下载。

等待下载
  1. 在ubuntu下文件目录下执行:
dnw key.bin
上传
完成
  1. 文件通过dnw下载到开发板内存地址0x70003000,执行:
go 70003000

程序运行。

运行

5. 按键控制LED状态

LED
KEY
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容