嵌入式學習筆記之GPIO
GPIO,意為通用輸入輸出連接埠,根據它們可以讀取連接埠的高低電平或者讀入引腳狀態。S3C2410晶片共有117個I/O連接埠,共分為8組:A~H。分別為:GPA、GPB…GPH。連接埠的輸入輸出功能可以通過設定特定的連接埠值來確定。
控制s3c2410的GPIO連接埠的寄存器有3類,分別是GPxCON、GPxDAT、GPxUP (x=A~H):
GPxCON:GPIO控制寄存器,可以設定選定GPIO口的輸入輸出方式和功能。GPA組的23個連接埠比較特殊,只能是輸出方式。GPACON的每一位對應一個引腳,當某位為0時,對應引腳為輸出連接埠,否則為複用功能。
GPBGPH連接埠的GPxCON寄存器使用方法一致,每兩位控制一個引腳,00時為輸入I/O口,01時為輸出I/O口,10時為複用功能,11保留。
GPxDAT:此引腳用於讀寫引腳的狀態,即連接埠資料。當引腳配置為輸出時,給該寄存器某位寫1,則對應引腳輸出高電平,寫0輸出低電平。當引腳配置為輸出時,讀該寄存器可以得到連接埠電平狀態。
GPxUP:該寄存器可以設定引腳是否使用上拉電阻,某位為0時對應引腳使用上拉電阻,某位為1時不使用上拉電阻。注意:GPA組沒有GPxUP寄存器,即沒有上拉電阻。
1、何為上拉電阻、下拉電阻:
上拉電阻
下拉電阻
上拉電阻是針對NPN來說的,下拉電阻是針對PNP來說的!不管是上拉電阻還是下拉電阻都是為了使集電極有確定的電位!
比如對NPN來說,當不用上拉電阻的時候,若基集為正,則導通,集電極為0。但當基集為0,則截止,此時集電極是懸空的,電位無法確定!一旦加了上拉電阻,當導通的時候,集電極為0,當截止的時候,集電極為正。
PNP也一樣,導通的時候集電極為正,截止的時候集電極為0。
2、GPIO連接埠配置方法:
單個引腳的操作無非就三種情況:輸出高低電平,檢測引腳狀態,中斷。對引腳的操作一般是通過特定寄存器的配置完成。
,根據LED 的硬體電路圖,實現點亮LED:
#define GPFCON (*(volatile unsigned long *)0x56000050)
#define GPFDAT (*(volatile unsigned long *)0x56000054)
#define GPF4_out (1<<(4*2))
#define GPF5_out (1<<(5*2))
#define GPF6_out (1<<(6*2))
#define GPF7_out (1<<(7*2))
void wait(volatile unsigned long dly)
{
for(; dly > 0; dly--);
}
int main(void)
{
unsigned long i = 0;
GPFCON = GPF4_out|GPF5_out|GPF6_out|GPF7_out; // 將LED1-4對應的GPF4/5/6/7三個引腳設為輸出
while(1){
wait(30000);
GPFDAT = (~(i<<4)); // 根據i的值,點亮LED1~4
if(++i == 8)
i = 0;
}
return 0;
}