1、GPIO
GPIO(General Purpose Input/Output Port),即通用輸入輸出端口,就是芯片的一些引腳。作為輸入端口時,我們可以通過它們讀入引腳的狀態(tài)--高電平或低電平,作為輸出端口時,我們可以通過它們輸出高電平或低電平來控制連接的外圍設(shè)備。
S3C2440有130個GPIO引腳,分為A~J共9組:GPA、GPB、…、GPJ。通過設(shè)置相應(yīng)的寄存器來設(shè)置某個引腳的功能(輸入或輸出或是其他特殊功能)。
2、通過寄存器操作GPIO
每個端口可以很容易的通過軟件配置以滿足各種系統(tǒng)配置和設(shè)計需求,在使用之前你必須定義每個引腳的功能,如果不是用于復(fù)用功能,則引腳可以配置為普通輸入輸出端口。
1)端口配置寄存器GPxCON(x為A~J)
GPxCON是用于選擇引腳功能。
PORT A的端口配置寄存器GPACON中每一位對應(yīng)一個引腳(PORT A共23個引腳,bit0~bit22對應(yīng)GPA0~GPA22)。當某位被設(shè)為0時,相應(yīng)的引腳被設(shè)置成輸出引腳,此時可以在GPADAT中相應(yīng)位寫入0或1讓此引腳輸出低電平或高電平。當某位被設(shè)為1時,相應(yīng)的引腳被設(shè)為地址線或用于地址控制,此時GPADAT無用。(GPACON通常被設(shè)為全1,以便訪問外部存儲器件)
PORT B~PORT J的端口配置寄存器操作完全相同:GPxCON中每兩位控制一個引腳,00為輸入、01為輸出、10為特殊功能、11保留。
2)端口數(shù)據(jù)寄存器GPxDAT(x為A~J)
GPxDAT是用于讀/寫引腳數(shù)據(jù)。
當引腳被設(shè)為輸入時,讀此寄存器可得到相應(yīng)引腳的電平狀態(tài)是高還是低;當引腳被設(shè)為輸出時,通過寫此寄存器的相應(yīng)位可設(shè)置相應(yīng)引腳輸出高電平或低電平。
3)端口上拉寄存器GPxUP(x為B~J,注意:PORT A端口沒有這個寄存器)
GPxUP是用于選擇是否使用內(nèi)部上拉電阻。
此寄存器的某位被設(shè)置為1時,相應(yīng)引腳不使用內(nèi)部上拉電阻;設(shè)置為0時,相應(yīng)引腳使用內(nèi)部上拉電阻。
圖1 上拉電阻
3、使用軟件來訪問硬件
對單個引腳的操作有3種:輸出高低電平、檢測引腳狀態(tài)、中斷,這些操作一般通過讀、寫寄存器完成。如圖2所示電路,可以設(shè)置GPFCON寄存器將GPF4、GPF5、GPF6引腳設(shè)置4為輸出功能,然后寫GPFDAT寄存器的相應(yīng)位使這3個引腳輸出高電平或低電平來控制相應(yīng)的LED。相應(yīng)的引腳輸出低電平時,LED點亮,輸出高電平時,LED熄滅。
圖2 LED電路圖
S3C2440的GPFCON、GPFDAT寄存器地址分別是0x56000050、0x56000054,通過軟件讀寫它們的地址可以訪問這些寄存器。S3C2440芯片手冊對這些寄存器的介紹如下圖:
圖3 PORT F寄存器介紹
4、GPIO操作實例
使用GPIO控制一個LED。例如,我們要想點亮LED1,就需要設(shè)置GPF4引腳為輸出功能,然后設(shè)置該引腳輸出低電平。
板子上電后執(zhí)行的第一條指令,并不是main函數(shù),如果我們使用keil開發(fā),啟動文件會由編譯器完成(會有一個S3C2440.S文件就是啟動文件),它要做的工作主要是各種初始化然后跳轉(zhuǎn)到C文件的main函數(shù)執(zhí)行。但是我們在Linux系統(tǒng)下使用arm-linux-gcc編譯裸機程序時,就需要自己編寫一個這樣的啟動文件代碼。(建一個目錄led_on_c,把編寫的代碼文件和Makefile文件放在該目錄下)
自己編寫的啟動文件代碼crt0.S內(nèi)容:
下面是LED1的控制程序led_on_c.c文件,內(nèi)容如下:
Makefile文件:
第2、3行分別編譯源程序crt0.S、led_on_c.c
第4行將編譯得到的結(jié)果連接起來
第5行把連接得到的ELF格式可執(zhí)行文件led_on_c_elf轉(zhuǎn)換成二進制格式文件led_on_c.bin
第6行將結(jié)果轉(zhuǎn)換為匯編碼以供查看
在led_on_c目錄下執(zhí)行make命令生成可執(zhí)行文件led_on_c.bin,然后把該文件燒寫到NAND Flash。
-
寄存器
+關(guān)注
關(guān)注
31文章
5427瀏覽量
123720 -
GPIO
+關(guān)注
關(guān)注
16文章
1279瀏覽量
53708
原文標題:嵌入式最基礎(chǔ)的GPIO接口操作了解一下!
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
嵌入式教育科普|GPIO接口全面解析

嵌入式最基礎(chǔ)的GPIO接口操作了解一下!
嵌入式linux驅(qū)動對gpio的基本操作
嵌入式操作系統(tǒng)是什么_嵌入式操作系統(tǒng)有哪些
如何在嵌入式Linux中使用GPIO
嵌入式Linux下使用GPIO中斷功能

嵌入式操作系統(tǒng)的主要特點都有哪些
嵌入式操作系統(tǒng)如何應(yīng)用_嵌入式操作系統(tǒng)的組成
【嵌入式】GPIO驅(qū)動LED設(shè)計

嵌入式Linux LED GPIO

嵌入式Linux的GPIO中斷

嵌入式Linux驅(qū)動 GPIO操作 包括驅(qū)動和應(yīng)用層程序?qū)︱?qū)動進行測試

什么是嵌入式操作系統(tǒng)?

評論