[TOC]
# 簡介
- 5 組 GPIO Port : GPIOx (x = A, B, D, E, F, G)
- 每個 Port 最常由 MUX、Direction、Data 三種暫存器操作,其餘見手冊
- 每個暫存器的一位就代表對應Port的pin,譬如GPAMUX的第4位(bit3)掌管GPIOA3腳位
- 詳見 <手把手教你DSP> 第9章 、< TMS320x281x DSP System Control and Interrupts Reference Guide > 第4章
# 暫存器功能
## GPxMUX Registers
- **功能選擇用**。因為每個腳位可以作為一般I/O或是特定用途,所以需要選擇功能
- 譬如腳位圖中,腳位名稱GPIOA0-PWM1表示其可以做為一般I/O,也是PWM1的輸出腳
- 寫入<font color="red">0</font>是做一般<font color="red">I/O</font>
- 寫入<font color="blue">1</font>是<font color="blue">其他功能</font>
## GPxDIR Registers
- **腳位方向**,作為input或output用
- 寫入<font color="red">0</font>是<font color="red">Input</font>
- 寫入<font color="blue">1</font>是<font color="blue">Output</font>
## GPxDAT Registers
- 以讀取來說,反映腳位現在狀態,<font color="red">1為HIGH</font>,<font color="blue">0為LOW</font>
- 以寫入來說,寫入1將使腳位變HIGH,寫入0將使腳位變LOW
- 避免以下情況
- 
# 程式寫法
- 注意GPIO控制類型暫存器有受保護,在<font color="red">寫入時要EALLOW</font>啟用,<font color="blue">寫完時EDIS</font>關閉
``` c++=
EALLOW
// 將GPIOF2腳位設置為一般I/O
GpioMuxRegs.GPFMUX.bit.SPICLKA_GPIOF2 = 0;
// 將GPIOF2腳位設置為Output
GpioMuxRegs.GPFDIR.bit.GPIOF2 = 1;
EDIS
// 將GPIOF2腳位設置為HIGH
GpioDataRegs.GPFDAT.bit.GPIOF2 = 1;
```