控制器就是相當於乙個介面,這個介面用於與特定用途的硬體模組通訊及資料的互動。
gpio表示通用的io介面,這些介面上面可以接不同的硬體模組。
gpio口共分成組: gpioa, gpioc, gpiod, gpioe, gpiof, gpiog, gpiol。
每組裡面有數個不等的io口。
gpio口都是多功能的,可以做輸入、輸出、外部中斷、控制器的引腳。
gpio口使用前都需要配置具體做什麼用途。
gpio口是硬體的引腳,soc廠家一般都會由控制器來管理,並給我們提供記憶體介面(就是通改變乙個位址上的值)來讓我們的**來控制io口。
統一編址:記憶體晶元的位址與控制器的配置記憶體介面是在同一位址範圍裡的。
arm基本上都是統一編址,也就意味著我們改變控制器的相關配置時,對控制的配置介面(配置暫存器)像記憶體一般訪問即可。
pa21表示gpioa組的第21個io口。
檢視配套的幫助文件(allwinner_h3_datasheet_v1.1.edit.pdf)p316頁:
1.gpio控制器的配置暫存器的基位址為:0x01c20800
2.每組io口的配置暫存器都有4個,因每個io需要3位來配置,所以分成4個暫存器
pn_cfg1(io: 8 ~ 15) // pa: 0x01c20804, pc: 0x01c2084c
pn_cfg2(io: 16 ~ 21) // pa: 0x01c20808, pc: 0x01c20850
pn_cfg3(目前沒有) // pa: 0x01c2080c, pc: 0x01c20854
3.pn_dat //pa: 0x01c20810, pc: 0x01c20858
可以通這個配置暫存器檢視或都改變相應io口的電平狀況,
在這個暫存器裡每個io口只占用一位,第幾個io口就是第幾位。
4.pn_drv0 //0x01c20814, pc: 0x01c2085c
用於配置io口的輸出電流。
pn_drv1 //0x01c20818, pc: 0x01c20860
5.pn_pul0 //0x01c2081c, pc: 0x01c20864
用於配置相應的io口的預設電平是高還是低(上拉/下拉),也就是當外面不來改變電平時是處於什麼電平狀態。
如果外面有改變,則隨外面的改變而改變。
pn_pul1 //0x01c20820, pc: 0x01c20868
輸入是指io口只可以用於獲取電平,不能改變電平。
輸出是指io口既可以改變電平,也可以獲取電平。
檢視配套的電路圖說明檔案(orangepi-plus-h3-v1_1.pdf):
led是接pa15,當pa15輸出高電平時亮。
所以可以改變pa15為輸出,控制它輸出高低電平就可以控制led燈的亮滅。
可以在uboot上使用」mw」,」md」來配置或獲取io口的電平:
mw.l 0x01c20804
0x10000000
1//pa15口作輸出,即改變配置暫存器pa_cfg1(0x01c20804)的第28~30位的值為1
mw.l 0x01c20810
0x8000
1//第15位的值為1,即pa組的第15個io口輸出高電平,led亮
mw.l 0x01c2081001
//led滅
通過c**來控制led燈迴圈亮滅(test.c):
typedef volatile unsigned int u32;
#define pa_cfg1 (*(u32 *)
0x01c20804) //pa_cfg1_reg
#define pa_data (*(u32 *)
0x01c20810) //pa_data_reg
void delay(int val);//延時函式宣告
//arm板的開始函式(相當於main函式)
void _start()
}//延時函式
void delay(int val)
編譯:
arm-linux
-gnueabihf
-gcc test.c -c
-o test.o -march
=armv5
arm-linux
-gnueabihf
-ld test.o -o test
arm-linux
-gnueabihf
-objcopy
-o binary test test.bin
loady 0x40008000
//uboot就會進入等待狀態,等著接收資料
按"ctrl+a",鬆手後再按"s",選擇"ymodem",在彈出的介面裡按空格鍵選中要傳的檔案(test.bin)
執行:
go
0x40008000
記憶體操作裸板試驗
1 從nor flash啟動時,pc指向nor flash的零位址 從nand flash啟動時,pc指向晶元內部的sram令位址,並在啟動階段,將nand flash前4k程式轉移到片內sram 2 片外sdram的起始位址為0x30000000 s3c2440只有bank6和bank7能接sdr...
裸板程式設計遇到的問題
跟著教程學習的過程中,由於太久沒有玩開發板了,之前教程裡講過的內容都忘了,今天將記錄下來 編譯led燈的步驟 1.arm linux gcc march armv5te nostdlib c o led.o led.c o 選項就是輸出檔名,output filename c 選項就是只編譯不鏈結 ...
用便宜的改裝件裸板遠端wifi智慧型控制電器
冬天要來了,哥想著一定要弄幾個智慧型遙控開關回來,以後燈不用起來關,煲湯煮飯定時煮,提前定時開暖氣回到家裡不用受凍,提前開熱水器熱水,加濕器提前定時開定時關防乾燥,光縮在被窩裡玩電腦遊戲度日就行,哈哈哈,完美!當哥去搜尋無線遙控這些時就很不淡定了,尼瑪,乙個少則幾十多則上百,小公尺插座59 呵呵.我...