平臺:樹莓派 bcm2835 Raspberry Pi 3 Model B Rev 1.2
應(yīng)用層控制gpio目前知道有兩種方式——通過gpio設(shè)備文件和內(nèi)存映射。
第一種,通過gpio設(shè)備文件
設(shè)備文件位于/sys/class/gpio目錄下
通過向export中寫gpio號可以掛載對應(yīng)的gpio,gpio號是bcm的號,不是wiringPi的。
掛載后在gpio的文件夾下會有配置接口文件,向這些接口文件寫命令就能控制gpio了。
上面用echo這種方式寫成shell腳本就可以用腳本控制gpio了。
如果通過c語言控制,使用Linux操作文件的API編程即可。
第二種,內(nèi)存映射
將gpio的地址映射到內(nèi)存空間,之后所有對這片內(nèi)存的操作就是對gpio的操作。使用mmap函數(shù)實現(xiàn)映射。物理內(nèi)存的設(shè)備文件是/dev/mem。
bcm2835的外設(shè)地址是0x3f000000,gpio的地址是外設(shè)地址基礎(chǔ)上偏移0x200000。
使用open函數(shù)可以打開mem設(shè)備文件,之后使用mmap函數(shù)映射,其返回值就是分配的內(nèi)存空間的起始地址。
注:必須有管理員權(quán)限才能打開mem設(shè)備文件,所以運(yùn)行命令時必須加上sudo。
gpio有41個寄存器,每個寄存器都是32位的。
前六個用來設(shè)置gpio的功能,前五個寄存器每個設(shè)置10個gpio,最后一個設(shè)置4個,三個位設(shè)置一種功能。
gpio的設(shè)置寄存器是第8和9,清除寄存器是第11和12。一個位對應(yīng)一個gpio。
根據(jù)以上寄存器的布局方式,可以使用下面的代碼來設(shè)置和控制gpio。圖中小寫gpio就是映射后返回的地址指針,g是gpio號。
小結(jié): 第一種方式比較適合對單獨(dú)gpio的控制,比如調(diào)試和測試,更適用腳本編程;第二種方式適合c代碼編程,更加通用方便。
-
內(nèi)存
+關(guān)注
關(guān)注
8文章
2998瀏覽量
73881 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4304瀏覽量
62427 -
命令
+關(guān)注
關(guān)注
5文章
678瀏覽量
21984 -
GPIO
+關(guān)注
關(guān)注
16文章
1196瀏覽量
51913 -
樹莓派
+關(guān)注
關(guān)注
116文章
1698瀏覽量
105520
發(fā)布評論請先 登錄
相關(guān)推薦
評論