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