(exynos4412)Tiny4412裸机开发-按键检测

举报
DS小龙哥 发表于 2022/01/24 15:31:50 2022/01/24
【摘要】 上篇文章已经介绍过LED裸机编程,完成LED灯控制,这篇文章就介绍利用这款开发板继续完成按键编程,了解GPIO口基本的输入输出配置。

1. 前言

Tiny4412开发是友善之臂推出的Android、Linux学习开发板,CPU采用三星的EXYNOS4412,32位芯片,属于Cortex-A系列,主频是1.5GHZ,可以运行ubuntu、Android5.0、纯Linux等操作系统。

上篇文章已经介绍过LED裸机编程,完成LED灯控制,这篇文章就介绍利用这款开发板继续完成按键编程,了解GPIO口基本的输入输出配置。

下面是开发板的实物图:

image-20220124143157723

开发板的配置:

image-20220124143510661

2. 按键编程

要完成程序开发,需要先搭建交叉编译环境,安装arm-linux-gcc编译器,上篇文章已经介绍了,这篇就不再重复。

环境搭建好,就得看原理图,了解按键接在CPU的哪个IO口,了解按键是什么电平表示按下,再去看芯片手册,找到对应IO口的配置寄存器,完成GPIO模式配置,最终完成按键检测。

2.1 查看原理图

tiny4412开发板有两个原理图,分别对应底板和核心板,按键是接在底板上,下面就分别打开底板、核心板原理图,找到按键具体的接线位置。

image-20220124150737525

image-20220124150829928

image-20220124150929792

从原理图里看到,按键一共有4个按键,分别接在GPX3_2 GPX3_3 GPX3_4 GPX3_5 这些GPIO口上。

image-20220124153048304

2.2 查看芯片手册

在芯片手册里找到GPX3这个寄存器的位置。

image-20220124151601954

image-20220124151631609

GPX3CON是模式配置寄存器。

GPX3DAT是数据输出输入控制寄存器。

按键是检测外部电平来判断按键是否按下松开,需要配置成输入模式。

2.3 编写按键检测代码

下面代码实现效果: 检测按键是否按下,按键按下后就点亮LED灯,开启蜂鸣器,按键松开就关闭LED灯,关闭蜂鸣器。

/* 蜂鸣器的寄存器---GPD0_0*/
#define GPD0CON     (*(volatile unsigned int *)0x114000A0)
#define GPD0DAT     (*(volatile unsigned int *)0x114000A4)

/* LED的寄存器  GPM4_0 1 2 3*/
#define GPM4CON     (*(volatile unsigned int *)0x110002E0)
#define GPM4DAT     (*(volatile unsigned int *)0x110002E4)

/* KEY的寄存器 GPX3 2 3 4 5*/
#define GPX3CON     (*(volatile unsigned int *)0x11000C60)
#define GPX3DAT     (*(volatile unsigned int *)0x11000C64)

//BEEP---GPD0_0
int main(void)
{
	/*1. 配置GPIO口模式--配置蜂鸣器*/
	GPD0CON&=~(0xF<<0*4);//清除寄存器配置
	GPD0CON|=0x1<<0*4; //配置GPIO为输出模式

	/*2. 配置GPIO口模式--配置LED灯*/
	GPM4CON&=0xFFFF0000;
	GPM4CON|=0x00001111;

	/*3. 配置GPIO口模式--配置按键*/
	GPX3CON&=0xFF0000FF;

	while(1)
    {   
		if(!(GPX3DAT&1<<2)) //判断按键是否按下
		{
			GPD0DAT|=1<<0; //输出高电平
			GPM4DAT&=~(1<<0);
		}
		else if(!(GPX3DAT&1<<3)) //判断按键是否按下
		{
			GPD0DAT|=1<<0; //输出高电平
			GPM4DAT&=~(1<<1);
		}
		else if(!(GPX3DAT&1<<4)) //判断按键是否按下
		{
			GPD0DAT|=1<<0; //输出高电平
			GPM4DAT&=~(1<<2);
		}
		else if(!(GPX3DAT&1<<5)) //判断按键是否按下
		{
			GPD0DAT|=1<<0; //输出高电平
			GPM4DAT&=~(1<<3);
		}
		else
		{
			GPD0DAT&=~(1<<0); 
			GPM4DAT|=0xF<<0;
		}
    }
    return 0;
}

2.4 烧写程序测试

程序编译之后会生成main.bin文件,将SD卡插入到电脑上,运行程序烧写脚本,执行dd命令,烧写成功后。

拔出SD卡,插在开发板上,选择从SD卡启动,然后按下按键测试效果。

[wbyq@wbyq sd_fuse]$ sudo ./sd_write.sh /dev/sdb ../main.bin 

image-20220124152745788

在三星官方的手册里写明了,如果使用SD卡,SD卡内部数据该如何存放。上面烧写程序就是安装这个说明编写的代码,使用dd命令将可执行文件烧写到SD卡的对应位置。

如果使用EMMC,就是按下下面的布局:

image-20220124152945070

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200