1. 前言
Tiny4412開(kāi)發(fā)是友善之臂推出的Android、Linux學(xué)習(xí)開(kāi)發(fā)板,CPU采用三星的EXYNOS4412,32位芯片,屬于Cortex-A系列,主頻是1.5GHZ,可以運(yùn)行ubuntu、Android5.0、純Linux等操作系統(tǒng)。
上篇文章已經(jīng)介紹過(guò)LED裸機(jī)編程,完成LED燈控制,這篇文章就介紹利用這款開(kāi)發(fā)板繼續(xù)完成按鍵編程,了解GPIO口基本的輸入輸出配置。
下面是開(kāi)發(fā)板的實(shí)物圖:
開(kāi)發(fā)板的配置:
2. 按鍵編程
要完成程序開(kāi)發(fā),需要先搭建交叉編譯環(huán)境,安裝arm-linux-gcc編譯器,上篇文章已經(jīng)介紹了,這篇就不再重復(fù)。
環(huán)境搭建好,就得看原理圖,了解按鍵接在CPU的哪個(gè)IO口,了解按鍵是什么電平表示按下,再去看芯片手冊(cè),找到對(duì)應(yīng)IO口的配置寄存器,完成GPIO模式配置,最終完成按鍵檢測(cè)。
2.1 查看原理圖
tiny4412開(kāi)發(fā)板有兩個(gè)原理圖,分別對(duì)應(yīng)底板和核心板,按鍵是接在底板上,下面就分別打開(kāi)底板、核心板原理圖,找到按鍵具體的接線位置。
從原理圖里看到,按鍵一共有4個(gè)按鍵,分別接在GPX3_2 GPX3_3 GPX3_4 GPX3_5 這些GPIO口上。
2.2 查看芯片手冊(cè)
在芯片手冊(cè)里找到GPX3這個(gè)寄存器的位置。
GPX3CON是模式配置寄存器。
GPX3DAT是數(shù)據(jù)輸出輸入控制寄存器。
按鍵是檢測(cè)外部電平來(lái)判斷按鍵是否按下松開(kāi),需要配置成輸入模式。
2.3 編寫(xiě)按鍵檢測(cè)代碼
下面代碼實(shí)現(xiàn)效果: 檢測(cè)按鍵是否按下,按鍵按下后就點(diǎn)亮LED燈,開(kāi)啟蜂鳴器,按鍵松開(kāi)就關(guān)閉LED燈,關(guān)閉蜂鳴器。
/* 蜂鳴器的寄存器---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;
?}
復(fù)制代碼
2.4 燒寫(xiě)程序測(cè)試
程序編譯之后會(huì)生成main.bin文件,將SD卡插入到電腦上,運(yùn)行程序燒寫(xiě)腳本,執(zhí)行dd命令,燒寫(xiě)成功后。
拔出SD卡,插在開(kāi)發(fā)板上,選擇從SD卡啟動(dòng),然后按下按鍵測(cè)試效果。
[wbyq@wbyq sd_fuse]$ sudo ./sd_write.sh /dev/sdb ../main.bin
復(fù)制代碼
在三星官方的手冊(cè)里寫(xiě)明了,如果使用SD卡,SD卡內(nèi)部數(shù)據(jù)該如何存放。上面燒寫(xiě)程序就是安裝這個(gè)說(shuō)明編寫(xiě)的代碼,使用dd命令將可執(zhí)行文件燒寫(xiě)到SD卡的對(duì)應(yīng)位置。
如果使用EMMC,就是按下下面的布局:
審核編輯:湯梓紅
-
Linux
+關(guān)注
關(guān)注
87文章
11304瀏覽量
209499 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
5050瀏覽量
97471 -
Exynos4412
+關(guān)注
關(guān)注
1文章
8瀏覽量
12722
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論