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,因此可以通過配...