[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 - 避免以下情況 - ![image](https://hackmd.io/_uploads/rkZnEkwCR.png) # 程式寫法 - 注意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; ```