1. 程式人生 > >【Allwinner ClassA20類庫分析】4.GPIO類的使用

【Allwinner ClassA20類庫分析】4.GPIO類的使用

上拉電阻 fonts 單個 track 用戶 nts 事件 麻煩 浪費

從本節起,開始使用ClassA20類庫完畢操作外設的功能,請先在https://github.com/tjCFeng/ClassA20下載ClassA20類庫。

封裝的目的就是簡化操作,試想一下。假設想在Linux中直接設置GPIO寄存器須要做什麽工作?基本上計算物理地址、獲取映射地址、了解每一個寄存器的作用、設置相應的位。。

。。。非常是繁瑣。而使用了封裝的類庫之後,僅僅須要這樣做:

技術分享

僅僅要從原理圖上找到了相應的IO口,其它的能夠不必考慮。這樣的開發效率我就不多說了(說的這段時間IO口已經操作完了,呵呵)。

Fun的作用是選擇IO口的功能。打開GPIO.pas文件能夠看到定義。每一個IO口的功能是不一樣的。所以須要依照手冊說明指定。

只是一般都是Fun0是輸入。Fun1是輸出,其它的沒有規律。

Pull的作用是是否打開內部的拉電阻。香蕉派的PH24已經有上拉電阻了,所以能夠不用設置。假設是自己建立的電路沒有拉電阻不妨設置一下。

單個IO口操作非常快,假設我要是想對某一器件輸出一個8位、16位等的數據,難道我要創建這很多的對象然後再一個個的操作嗎?絕對不行,就算你不怕麻煩。時序上可能也不同意,所以這個時候,TGPIOGROUP這個類就該出現了。

TGPIOGROUP在創建的時候僅僅指定哪個Port,而不用指定Pin。所以在輸出的時候可以一次性賦值給這個Port。比如:

技術分享

不要試圖在你的設備上執行這段代碼。由於這段代碼僅僅是舉個樣例,執行的話可能會造成系統崩潰,請更改為正確的Port後再執行。

既然叫IO,那麽有輸出就必定有輸入。然而因為如今還沒有實現內核中斷轉到用戶程序中,所以如今臨時不能響應輸入之類的中斷,僅僅能採用輪詢法。這個強烈不推薦。還是等中斷轉發實現後再來考慮吧(不知為何在香蕉派中request_irq總是返回ErrorCode:-22。同一程序在pcDuino上沒有問題。

並且驅動的編譯還要根據內核的版本號,非常麻煩。眼下還沒有找到一個好方法)。

了解這些後,想制作一個控制LED的程序簡直易如反掌。比方以下這種:

技術分享

實在太簡單了,也非常沒勁,不要浪費時間,做點有用的東西吧,控制Nokia 5110 的 LCD 顯示一些東西。

先搭建硬件環境,找到空余的引腳,把LCD連接上。比方我是這樣連接的:

技術分享


技術分享

RST - PI14

SCE - PI10

D/C - PI16

DIN - PH21

CLK - PH20

剩下的VCC和GND自己找吧

依據硬件的連接。再來編寫軟件。為了程序結構的清晰,我創建了一個5110的類。單獨一個文件。類的定義是這種:

技術分享

類中僅僅有public裏的函數是可見的,其它的為私有函數和變量。

從這裏下載這個單元文件LCD5110.pas,鏈接: http://pan.baidu.com/s/1gdxinGB password: cnll。假設引腳的定義不一樣。請在文件裏找到這個部分改為自己的引腳:

技術分享


功能實現了。以下來搭建顯示界面。我是這樣做的

技術分享

放上了兩個button和一個Memo輸入框。


選擇窗口後在事件裏創建Create和Close兩個事件,再分別雙擊兩個button創建Click事件。輸入代碼:

技術分享

編寫完成,開始執行。在輸入框中隨便輸入文字。然後點“ShowTextbutton”,小屏幕上有顯示了:

技術分享



請在這裏下載這個單元文件LCD5110.pas,鏈接: http://pan.baidu.com/s/1gdxinGB password: cnll。

請在https://github.com/tjCFeng/ClassA20下載ClassA20類庫。


請在這裏下載這個單元文件LCD5110.pas,鏈接: http://pan.baidu.com/s/1gdxinGB password: cnll。

請在https://github.com/tjCFeng/ClassA20下載ClassA20類庫。

【Allwinner ClassA20類庫分析】4.GPIO類的使用