JZ2440開發板:用按鍵點亮LED燈(學習筆記)


本文是對韋東山嵌入式第一期學習的記錄之一,如有您需要查找的信息,可以繼續往下閱讀。

 

  想要用按鍵點亮LED燈,就需要知道按鍵和LED燈的相關信息,這樣才可以進行之后的操作。閱讀JZ2440的原理圖,可以得到以下信息(見下方圖片)



 

JZ2440開發板用到了S2,S3,S4三個按鍵,nLED1,nLED2,nLED4三盞LED燈,它們對應的寄存器位分別是:

按鍵:S2(EINT0)——GPF0  S3(EINT2)——GPF2  S4(EINT11)——GPG3

LED:  nLED1——GPF4  nLED2——GPF5  nLED4——GPF6

知道這些之后,需要進一步了解相應寄存器的信息,閱讀S3C2440的芯片手冊,可以得到以下信息(見下方圖片)

                      GPFCON和GPFDAT寄存器

                      GPGCON和GPGDAT寄存器

對於LED:需要設置GPFCON的GPF4/5/6,讓它們變成輸出引腳【GPFCON的bit8/9設為0b01,bit10/11設為0b01,bit12/13設為0b01】

對於按鍵:需要設置GPFCONGPF0(s2鍵),GPF2(s3鍵)以及GPGCONGPG3(s4鍵),讓它們變成輸入引腳【GPFCON的bit0/1設為0,bit4/5設為0,GPGCON的bit6/7設為0】

  由於GPFCON與GPFDAT是對應的,GPGCON與GPGDAT是對應的,根據芯片手冊關於GPFDAT和GPGDAT的描述(上面的圖片)可知:

當端口配置為輸入時,相應的位為針狀態。當端口配置為輸出時,引腳狀態為與相應的位相同。 當端口配置為功能引腳時,將讀取未定義的值。

由此可以知道:

  按鍵的狀態對應GPFDAT中位0和位2的值以及GPGDAT中位3的值LED的狀態對應GPFAT中位6/5/4的值

  按鍵和LED一樣,平時電位都處於拉高狀態,對應着松開和熄滅(也就是1),當按鍵按下時,或者LED點亮時,對應着低電位(也就是0)

因此,GPFDAT寄存器和GPGDAT寄存器也需要進行相關的設置(程序中體現)。

  接下來僅對C程序進行解析:

 1 #include "s3c2440_soc.h"                         //寫好了寄存器地址的宏,C程序中直接寫寄存器名稱即可
 2 int main(void)
 3 {
 4     int val1,val2;
 5     /*設置GPFCON的GPF4/5/6,讓它們變成輸出引腳*/
 6     GPFCON &=~((3<<8)|(3<<10)|(3<<12));                        //先讓GPFCON的GPF4/5/6清零
 7     GPFCON |=((1<<8)|(1<<10)|(1<<12));                        //配置好GPFCON的GPF4/5/6,讓它們變成輸出引腳
 8 
 9     /*設置GPFCON的GPF0(s2鍵),GPF2(s3鍵)以及GPGCON的GPG3(s4鍵),讓它們變成輸入引腳*/
10     GPFCON &=~((3<<0)|(3<<4));
11     GPGCON &=~(3<<6);
12 
13     /*按下點亮*/
14     while(1)
15     {
16         val1=GPFDAT;
17         val2=GPGDAT;
18         if(val1 & (1<<0))                        //判斷S2鍵是否按下,對應GPF6的LED燈
19             {
20                 GPFDAT |=(1<<6);                //此時S2鍵為松開,LED應該熄滅
21             }
22         else
23             {
24                 GPFDAT &=~(1<<6);                //此時S2鍵為按下,LED應該點亮
25             }
26         if(val1 & (1<<2))                        //判斷S3鍵是否按下,對應GPF5的LED燈
27             {
28                 GPFDAT |=(1<<5);                //此時S3鍵為松開,LED應該熄滅
29             }
30         else
31             {
32                 GPFDAT &=~(1<<5);                //此時S3鍵為按下,LED應該點亮
33             }
34         if(val2 & (1<<3))                        //判斷S4鍵是否按下,對應GPF4的LED燈
35             {
36                 GPFDAT |=(1<<4);                //此時S4鍵為松開,LED應該熄滅
37             }
38         else
39             {
40                 GPFDAT &=~(1<<4);                //此時S4鍵為按下,LED應該點亮
41             }
42     }
43     return 0;
44 }

  整個C程序到此就寫完了,連同其他文件(start.S / s3c2440_soc.h / makefile 本文沒有附上)一起上傳到linux編譯后,得到的bin文件,燒寫到JZ2440開發板上,經過驗證,按鍵按下時,對應的LED亮,松開時熄滅。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM