普適的GPIO引腳操作方法
GPIO(General-Purpose IO Ports),即通用IO接口。GPIO的使用較為簡單,主要分為輸入和輸出兩種功能,用於實現一些簡單設備的控制。在作為輸入型GPIO的情況下,我們可以將該IO連接外部按鍵或者傳感器,用於檢測外部狀態。當作為輸出時,我們可以通過輸出高低電平來控制外部設備的運轉。
GPIO模塊一般結構
a. 有多組GPIO,每組有多個GPIO
b. 使能:電源/時鍾
c. 模式(Mode):引腳可用於GPIO或其他功能
d. 方向:引腳Mode設置為GPIO時,可以繼續設置它是輸出引腳,還是輸入引腳
e. 數值:對於輸出引腳,可以設置寄存器讓它輸出高、低電平, 對於輸入引腳,可以讀取寄存器得到引腳的當前電平。
GPIO寄存器操作
a. 芯片手冊一般有相關章節,用來介紹:power/clock可以設置對應寄存器使能某個GPIO模塊(Module)有些芯片的GPIO是沒有使能開關的,即它總是使能的
b. 一個引腳可以用於GPIO、串口、USB或其他功能,有對應的寄存器來選擇引腳的功能
c. 對於已經設置為GPIO功能的引腳,有方向寄存器用來設置它的方向:輸出、輸入
d. 對於已經設置為GPIO功能的引腳,有數據寄存器用來寫、讀引腳電平狀態
GPIO寄存器的2種操作方法:
原則:不能影響到其他位
1) 直接讀寫:讀出、修改對應位、寫入
要設置bit n:
val = data_reg;
val = val | (1<<n);
data_reg = val;
要清除bit n:
val = data_reg;
val = val & ~(1<<n);
data_reg = val;
2) set-and-clear protocol:
set_reg, clr_reg, data_reg 三個寄存器對應的是同一個物理寄存器,
要設置bit n:set_reg = (1<<n);
要清除bit n:clr_reg = (1<<n);
