試過了GPIO的輸出功能够坐,再來測試下GPIO的輸入功能托嚣。開發(fā)板上有四個(gè)用戶按鍵损趋,使用這四個(gè)按鍵來控制四個(gè)LED的狀態(tài)患久,發(fā)現(xiàn)使用位操作真的是非常方便。
- 開發(fā)板:Tiny4412SDK標(biāo)準(zhǔn)版 「Tiny4412 SDK 1506」
- 工具:「arm-linux-gcc-4.5.1」 「minicom」 「dnw」
- 平臺:Ubuntu 14.04
1. 在原理圖上找到按鍵對應(yīng)的GPIO
在上一篇中浑槽,通過原理圖已經(jīng)知道了用戶LED1-4蒋失,對應(yīng)了GPM4_0-GPM4_3,再來看下KEY1-4對應(yīng)的管腳。
用戶按鍵
GPX3
用戶按鍵KEY1括荡、KEY2高镐、KEY3、KEY4分別對應(yīng)了GPX3_2畸冲、GPX3_3嫉髓、GPX3_4观腊、GPX3_5,并且按鍵引腳平常是高電平算行,按鍵被按下變?yōu)榈碗娖健?/p>
2. 芯片手冊查找GPIO相關(guān)寄存器
控制寄存器GPX3CON:
GPX3CON
數(shù)據(jù)寄存器GPX3DAT:
GPX3DAT
配置GPX3所對應(yīng)的位為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;
/*設(shè)置LED1-4對應(yīng)GPIO為輸出模式*/
GPM4CON &= ~((0xF<<0) | (0xF<<4) | (0xF<<8) | (0xF<<12));
GPM4CON |= ((1<<0) | (1<<4) | (1<<8) | (1<<12));
/*設(shè)置KEY1-4對應(yīng)GPIO為輸入模式*/
GPX3CON &= ~((0xF<<8) | (0xF<<12) | (0xF<<16) | (0xF<<20));
while(1)
{
value = GPX3DAT; //讀取GPX3電平狀態(tài)
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 *~
執(zhí)行make clean州邢,然后make儡陨,生成key.bin二進(jìn)制文件。
生成二進(jìn)制文件
4. 上傳程序到開發(fā)板
- 在串口中執(zhí)行:
dnw 70003000
等待dnw下載量淌。
等待下載
- 在ubuntu下文件目錄下執(zhí)行:
dnw key.bin
上傳
完成
- 文件通過dnw下載到開發(fā)板內(nèi)存地址0x70003000骗村,執(zhí)行:
go 70003000
程序運(yùn)行。
運(yùn)行
5. 按鍵控制LED狀態(tài)
LED
KEY