開發環境
led燈原理圖
按鍵原理圖
按鍵的接線資源
kscan0 ->
gpe11
kscan1 ->
gpg6
kscan2 ->
gpe13
kscan3 ->
gpg2
eint0 ->
gpf0
eint2 ->
gpf2
eint11 ->
gpg3
eint19 ->
gpg11
程式主要原理
這裡實現對 k1,k2,k3,k4 這四個鍵的查詢。
主要涉及到k1,k2, k3, k4這四個按鍵,要用查詢的方式進行判斷哪個鍵被按下去了,因此:
例如先讓kscan0~2 = 011,那麼k1被按下時,eint19才會變為低電平,這時k2按下時,eint19不會變低,這樣就區分了按鍵k1和k2,區分其它按鍵原理一樣。
暫存器配置
有關led的暫存器的配置:(設定gpf4-gpf7為輸出)
按鍵方面涉及到暫存器配置(設定相關暫存器輸入輸出)
精簡原理圖
程式源**
//l
ed_key.c
1 #include "view code2410addr.h"2
3void delay(long
long max) //
延遲函式48
9int main(void)10
39}40else
4154}55
}565758 rgpedat |= (1
<< 11); //
將gpe11和gpe13置1,同時將gpg6置0
59 rgpedat |= (1
<< 13
);60 rgpgdat &= (0
<< 6
);61
62 read_value = rgpgdat & (0x8
<< 8); //
讀取gpg11的值
6364
if(read_value == 0) //
判斷gpg11是否輸入0,以此判斷k2鍵按下65
76}7778 rgpedat &= (0
<< 13); //
將gpe13置0, 同時將gpe11和gpg6置1
79 rgpedat |= (1
<< 11
);80 rgpgdat |= (1
<< 6
);81
82 read_value = rgpgdat & 0x800; //
讀取gpg11的值
8384
if(read_value == 0) //
判斷gpg11是否為0,以此判斷k3鍵是否按下
8596}97
}9899return0;
100 }
//啟動檔案start.s
1view code.text
2.global _start
3_start:
4#define watchdog 0x53000000
5ldr r0, =watchdog
6mov r1, #0
7str
r1, [r0]
89 ldr sp, =1024*4
10bl main
1112
loop:
13 b loop
//makefile
1view codeled.bin:start.s led_key.c
2 arm-linux-gcc -c start.s -o start.o
3 arm-linux-gcc -c led_key.c -o led_key.o
4 arm-linux-ld -ttext 0x30008000 start.o led_key.o -o led_key
5 arm-linux-objcopy -o binary -s led_key led_key.bin
6clean:
7rm -f *.o led_key.bin
編譯
ok,生成led_key.bin檔案了
ok,執行成功!
ARM 2410裸機系列 中斷處理
目的 為了更好地掌握s3c2410中斷的原理及中斷程式的編寫。內容利用s3c2410的外部中斷0和外部中斷1實現兩個按鍵功能 原理 本次選擇的是外部中斷extint0和extint11。中斷的產生分別來自按鈕sb1202和sb1203,當按鈕按下時,extint0 對應管腳gpf0 或extint1...
Linux2 6 21之ARM2410電源管理分析
由於arm系統中沒有bios裝置,所以要使用apm advanced power management 只能為arm系統建立乙個虛擬的字元裝置來模擬apm與使用者空間進行通訊.這就是drivers char apm emulation.c檔案。drivers char apm emulation.c...
ARM裸機開發 按鍵輸入實驗
正點原子i.mx6u阿爾法開發板 按鍵輸入是配置gpio作為輸入,檢測按鍵引腳電平,採用掃瞄的方式讀取按鍵按下的資訊,imx6ul的按鍵引腳如下 可以看到按鍵引腳接到 gpio1 io18 口,按鍵的原理就是預設接乙個上拉電阻,按鍵按下接地,可以有效控制 io 電平 按鍵工程我們基於上一節工程進行開...