一、什么是GPIO?
GPIO,英文全稱為General-Purpose IO ports,也就是通用IO口。嵌入式系統(tǒng)中常常有數(shù)量眾多,但是結(jié)構(gòu)卻比較簡單的外部設(shè)備/電路,對這些設(shè)備/電路有的需要CPU為之提供控制手段,有的則需要被CPU用作輸入信號。而且,許多這樣的設(shè)備/電路只要求一位,即只要有開/關(guān)兩種狀態(tài)就夠了,比如燈亮與滅。對這些設(shè)備/電路的控制,使用傳統(tǒng)的串行口或并行口都不合適。所以在微控制器芯片上一般都會提供一個(gè)“通用可編程IO接口”,即GPIO。
接口至少有兩個(gè)寄存器,即“通用IO控制寄存器”與“通用IO數(shù)據(jù)寄存器”。數(shù)據(jù)寄存器的各位都直接引到芯片外部,而對這種寄存器中每一位的作用,即每一位的信號流通方向,則可以通過控制寄存器中對應(yīng)位獨(dú)立的加以設(shè)置。這樣,有無GPIO接口也就成為微控制器區(qū)別于微處理器的一個(gè)特征。
另外需要注意的是,對于不同的計(jì)算機(jī)體系結(jié)構(gòu),設(shè)備可能是端口映射,也可能是內(nèi)存映射的。如果系統(tǒng)結(jié)構(gòu)支持獨(dú)立的IO地址空間,并且是端口映射,就必須使用匯編語言完成實(shí)際對設(shè)備的控制,因?yàn)镃語言并沒有提供真正的“端口”的概念。如果是內(nèi)存映射,那就方便的多了。
舉個(gè)例子,比如像寄存器A(地址假定為0x48000000)寫入數(shù)據(jù)0x01,那么就可以這樣設(shè)置了。
#define A (*(volatile unsigned long *)0x48000000)
...
...
二、S3C2410的GPIO的特點(diǎn)
The S3C2410X has 117 multi-functional input/output port pins. The ports are:
— Port A (GPA): 23-output port
— Port B (GPB): 11-input/output port
— Port C (GPC): 16-input/output port
— Port D (GPD): 16-input/output port
— Port E (GPE): 16-input/output port
— Port F (GPF): 8-input/output port
— Port G (GPG): 16-input/output port
— Port H (GPH): 11-input/output port
初始化完成后,就可以通過對GPxDAT的操作來實(shí)現(xiàn)相應(yīng)的應(yīng)用了。其中,PORT A與PORT B-H在功能選擇方面有所不同,GPACON的每一位對應(yīng)一根引腳(共23pin有效)。當(dāng)某位設(shè)為0,相應(yīng)引腳為輸出引腳,此時(shí)往GPADAT中寫0/1,可以讓引腳輸出低電平/高電平;當(dāng)某位設(shè)為1,則相應(yīng)引腳為地址線,或者用于地址控制,此時(shí)GPADAT沒有用了。
一般而言,GPACON通常全設(shè)為1,以便訪問外部存儲器件。PORT B-H在寄存器操作方面完全相同。
GPxCON中每兩位控制一根引腳:00表示輸入,01表示輸出,10表示特殊功能,11保留。GPxDAT用于讀/寫引腳:當(dāng)引腳設(shè)為輸入時(shí),讀此寄存器可知相應(yīng)引腳狀態(tài)是高/低;當(dāng)引腳設(shè)為輸出時(shí),寫此寄存器相應(yīng)位可以使相應(yīng)引腳輸出低電平或高電平。GPxUP:某位設(shè)為0,相應(yīng)引腳無內(nèi)部上拉;為1,相應(yīng)引腳使用內(nèi)部上拉。關(guān)于特殊功能,那就得結(jié)合特殊外設(shè)來進(jìn)行設(shè)置了。 |
|