TI TMS320F28004x GPIO 設定
Publish Date : 2024-03-25 09:37
韌體的設定中,GPIO及DAC的module設定算是比較簡單的
這章會主要說明一些GPIO可能會常用到的設定
並一樣以TI F28004x的晶片進行範例
GPIO是什麼
GPIO(英語:General-purpose input/output),通用型之輸入輸出的簡稱
其接腳可以供使用者由程式控制自由使用,PIN腳依現實考量可作為通用輸入(GPI)或通用輸出(GPO)或通用輸入與輸出(GPIO)
GPIO是數位訊號,所以只能輸入輸出電位的高低(High/Low),在實際使用上,常用來:
- 輸出高低訊號控制MCU外部IC
- 讀取輸入訊號,判斷訊號後處理
GPIO在MCU上除了設置輸入及輸出外
還要看電路的特性,來決定要使用不種型態的驅動方式,以下以F28004X的設定來說明

GPIO Pin 與實際腳位
在MCU上的引腳(Pin)通常都是MUX的,複用腳位
意思是在一隻實體MCU引腳,可以透過Register的設定,來改變功能,使其成為GPIO、I2C、SPI等其中一種功能使用
所有的GPIO Pin一開始預設皆為Input
設定圖中,引腳的最外部有Pull-Up的功能可以選用

Pull-Up功能在沒有外部訊號驅動輸入引腳時,可將輸入引腳保持在已知狀態
Pin腳如果空接(沒有連接到任何外部電路),在讀取這個Pin時,有可能會受到雜訊的影響,訊號時High時Low的,造成floating狀態
floating的狀態會造成MCU判斷訊息上的不穩定,處理方式通常是在實體腳位加上以下任一電阻
- 上拉電阻(Pull-Up): 從VCC(MCU供電電壓)並聯一個電阻,將電壓準位強制在High
- 下拉電阻(Pull-Down): 從GND(MCU 地的準位)並聯一個電阻,將電壓準位強制在Low
GPIO輸入
輸入的設定較為簡單
主要GPIO拮取訊號的速度跟要不要反轉訊號
訊號的速度靠著MCU的系統時脈(System Clock, SYSCLK)來決定
F28004x有四種可以選
- Sync
- 3-sample
- 6-sample
- Async
Async在GPIO為input時是沒有用的,這是用來給其它MCU外部設備用的
Sync依靠著SYSCLK同步。由於外部輸入訊號是非同步(Async)的,因此可能需要長達 SYSCLKOUT 的延遲週期才能變更 MCU 的輸入。
以F28004x來說,MCU運作時脈是100MHz(10㎱),GPIO輸入改變狀態的話,最慢有可能會等10㎱才知道狀態變更,這是韌體工程上,每次都要注意這些小小的時序,幫助之後編寫程式碼或是除錯
sample的意思是在一個固定的SYSCLK的時間內,取樣幾次,超過多少門檻,才判定改變GPIO狀態
example的圖片中已說明

GPIO輸出
輸出利用Register讓實體腳位電壓為High/Low

圖中F28004x有2個核心(C28x, CLA)可以控制GPIO Data,這部份之後再講
輸出準位的驅動方式
輸出上還有一個open drain logic的模組,那是什麼?

簡短的來說,雖然都是同樣控制High/Low,但是悠關到驅動的電壓及電流
Push-Pull

Push-pull,也稱為active drive。電路使用兩個晶體管來確定邏輯高低。
從push-pull電路中可以看出:
當MCU要輸出High準位時,Vin會為High(電壓Push到高準位),上方的P MOS會導通,輸出為High
當MCU要輸出High準位時,Vin會為Low(電壓Pull到低準位),下方的N MOS會導通,輸出為Low

高準位是由MCU的VCC來決定,因此可以由MCU自行調整準位的高低
Open-Drain

Open-Drain是使用帶有下拉或上拉電阻數位電路,High的準位由外部決定
當MCU要輸出High準位時,開關器件關閉,GPIO輸出為Vexternal(這裡要看一下MCU內部線路,情況有可能反過來,但以上面的解說圖來說,是這樣運作的)

以上2種方式差別是由MCU推動或是從外部推動
Push-Pull的控制準位可High可Low,Open-Drain只能上拉或是下拉,且是看外部線路能力決定準位轉換速度
Push-Pull常用在給外部IC控制訊號,Open-Drain常用在大功率或是跟其它共享線路時使用
總結
GPIO的應用在MCU裡是基本的
在應用上除了控制線路上的準位外
我也常拿來當作Debug的訊號使用,測量程式執行週期、處理時間等
後續有更多進階的應用,比如說GPIO IN變更準位時,MCU可以做一些反應