2440裸機學習之 LED燈的控制

2021-05-07 22:21:37 字數 1616 閱讀 2977

s3c2440有130個i/o口,gpa,gpb...gpj通過設定暫存器來確定其功能。

gpxcon暫存器:

選擇引腳的功能,gpbcon-gpjcon每兩位控制一根引腳: 00表示輸入,01表示輸出,10表示特殊功能,11保留不用。

gpacon特殊,每一位控制一根引腳,共23根,某位為0時,為輸出引腳,當某位1時,相應引腳為位址線或用於位址控制, 此時gpadta無用。

一般的,gpacon設為全1,以便訪問外部儲存器件。

gpxdat暫存器:

當引腳為輸入時,讀其對應位可知電平狀態是高還是低。

當引腳為輸出時, 寫暫存器對應位則引腳輸出高電平或低電平。

gpxup暫存器:

某位為1時,相應引腳無內部上拉電阻,為0時,相應引腳使用內部上拉電阻 。

這裡只討論gpio口的使用,其餘的做成子函式,直接呼叫,可暫時不深究。

/*key io控制,資料,上拉暫存器

*/#define gpgcon (*(volatile unsigned *)0x56000060)

#define gpgdat (*(volatile unsigned *)0x56000064)

#define gpgup (*(volatile unsigned *)0x56000068)

/*led1-4對應的gpb5,gpb6,gpb7,gpb8

*/#define gpb5_out (1<<(5*2))     //led1

#define gpb6_out (1<<(6*2))     //led2

#define gpb7_out (1<<(7*2))     //led3

#define gpb8_out (1<<(8*2))     //led4

led,將十進位制1左移多少位,對著datasheet從高位向底位自己手寫一次,就明白了,剛開始我也不明白為什麼用這樣方式。

/*k1-k6對應gpg0,gpg3,gpg5,gpg6,gpg7,gpg11

*/#define gpg11_in ~(3<<(11*2))   //key6

#define gpg7_in ~(3<<(7*2))    //key5

#define gpg6_in ~(3<<(6*2))    //key4

#define gpg5_in ~(3<<(5*2))    //key3

#define gpg3_in ~(3<<(3*2))    //key2

#define gpg0_in ~(3<<(0*2))    //key1

int main()

else

if(dwdat & (1<<7))             //判斷key5是否按下

else

if(dwdat & (1<<6))            //key4

else

if(dwdat & (1<<5))             //key3

else

if(dwdat & (1<<3))              //key2

else

if(dwdat & (1<<0))                  //key1

else

}return 0;

}

2440裸機程式分析之led

今天 用心 把 led 顯示 的原理弄懂了一下。注釋如下 首先,對照著tq 2440 v2原理圖觀察到了4個led燈的管腳分別為gpb5,gpb6,gpb7,gpb8.有詳細觀察 發現gpb共有11個管腳 其中gpb0到gpb3為高電平有效,gpb4到gpb10為低電平有效,這不是用0 x 就可以控...

S3C2440之裸機之彙編點亮LED燈

虛擬機器環境 oracle vm virtualbox linux系統 ubuntu 14.04.6 交叉編譯工具 100ask分享的所有檔案 100ask分享的所有檔案 002 jz2440資料光碟 20180516 免費 資料光碟 a盤 tools.zip arm linux gcc 4.3.2...

mini2440 LED燈裸機硬體控制程式

查詢mini2440的原理圖,找到led部分的原理圖 然後查詢nled 1到nled 4分別連線的s3c2440的引腳 由圖可知 nled 1 gpb5 nled 2 gpb6 nled 3 gpb7 nled 4 gpb8 在s3c2440的引腳劃分中,這四個引腳都屬於port b,因此可以通過配...