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