---
tags: MaixPy, 測試報告, K210, MaixDuinom
robots: K210, MaixDuinom, MaixPy,
lang: zh-tw
---
# MaixDuino 入門--使用 MaixPy
MaixDuino 雖然長的跟 Arduino 很像, 不過除非你是用 Arduino IDE 寫程式, 否則就得瞭解一下它的結構, 不然在使用 MaixPy 寫程式時, 可能會連如何點亮 LED 都做不到, 以下就一步步介紹相關的知識吧。
## 安裝韌體
1. 安裝韌體燒錄軟體 [KFlash]()
1. 安裝 [MaixPy 韌體](https://dl.sipeed.com/MAIX/MaixPy/release/master/)
## MaixDuino 與 Arduino 腳位對應
MaixDuino 使用 K210 晶片, K210 晶片外部有 48 個 IO 腳位, 編號從 IO0~IO47, 這些腳位有一些已經被相機、LCD 等用掉, 實際上在 MaixDuino 上接出來的腳位可參考以下的[接腳圖](https://dl.sipeed.com/MAIX/HDK/Sipeed-Maixduino/Maixduino-4.30)或是對照表:
![](https://i.imgur.com/bSG4420.jpg)
|Arduino 腳位|K210 IO 腳編號|board_info 中的名稱|
|-------|----|----|
|RX←0|IO4|K210_RX|
|TX→1|IO5|K210_TX|
|2|IO21||
|3|IO22||
|4|IO23||
|5|IO24||
|6|IO32||
|7|IO15||
|8|IO14|LED_G|
|9|IO13|LED_R|
|10|IO12|LED_B|
|11|IO11||
|12|IO10||
|13|IO3|JTAG_TDO|
|A0|IO33|ADC1_CH5|
|A1|IO32|ADC1_CH4|
|A2|IO35|ADC1_CH7|
|A3|IO34|ADC1_CH6|
|A4|IO39|ADC1_CH3|
|A5|IO36|ADC1_CH0|
|SCL|IO30|I2C_SCL|
|SDA|IO31|I2C_SDA|
## K210 的可程式化 IO 功能
K210 的這些 IO 腳位並不是固定功能, 每一個腳位都可以透過程式設定成不同的功用, 例如 I^2^C 就可以任意選用你喜歡的腳位, 而不一定要固定使用特定的腳位。
在 MaixPy 中, 要使用這些腳位, 必須要先幫 IO 腳位[註冊功能](https://maixpy.sipeed.com/en/libs/builtin_py/fm.html), 才能使用, 例如:
```python
from fpioa_manager import fm, board_info
fm.register( # 註冊 IO 腳位的功能
14, # IO 腳位編號
fm.fpioa.GPIO0 # IO 腳位功能
)
```
:::warning
請注意, 這裡講的腳位編號都是 K210 晶片的 IO 腳位編號, 不是 MaixDuino 板子上的腳位編號。像是上面例子中的 14 就是指 IO14, 如果你查一下上面的腳位[對應圖或是表格](#MaixDuino-%E8%88%87-Arduino-%E8%85%B3%E4%BD%8D%E5%B0%8D%E6%87%89), 就可以知道這個腳位實際上就是 MaixDuino 板子上的 8 號腳位。
:::
`fpioa_manager` 是 MaixPy 中管理 IO 腳位功能的模組, 內含 `fm` 與 `board_info` 兩個物件, 其中:
- [fm](https://maixpy.sipeed.com/en/libs/builtin_py/fm.html) 就是實際管理 IO 腳位功能的物件, 透過 `register` 方法為特定腳位依據 `fm.fpioa` 中定義的功能名稱來註冊, 例如 `fm.fpioa.GPIO0` 就是第 0 個 GPIO 功能, 可用的名稱清單可[參考官方文件](https://maixpy.sipeed.com/en/libs/Maix/fpioa.html#appendix-peripheral-table), 我也在文末的[附錄](#腳位功能名稱列表)列出來。
- [board_info](https://maixpy.sipeed.com/en/libs/builtin_py/board_info.html) 是與特定控制板相關的資訊, 例如對於 MaixDuino 控制板來說, 就定義了 board_info.LED_G 為 14, 實際上這個腳位並沒有接 LED 燈, 但是寫程式時你可以用 14 或是 board_info.LED_G 來代表 IO14 這個腳位。
## 數位輸出 (digital out)
瞭解腳位的可程式化功能後, 我們就可以嘗試使用[數位輸出](https://maixpy.sipeed.com/en/libs/Maix/gpio.html)了。剛剛註冊腳位的只是功能的類別, 例如剛剛只說要用 IO14 當 GPIO, 但沒有說明到底是輸出還是輸入, 實際使用時還要建立 GPIO 物件, 並註明輸出還是輸入, 例如:
```python
from fpioa_manager import fm, board_info
from Maix import GPIO
import time
fm.register( # 註冊 IO 腳位的功能
14, # IO 腳位編號
fm.fpioa.GPIO0 # IO 腳位功能
)
led = GPIO( # 建立 GPIO 物件
GPIO.GPIO0, # 要使用的 GPIO 腳位
GPIO.OUT # 輸出入方向
)
```
請注意, 在建立 GPIO 物件時, 不是用 IO 腳位編號, 而是用註冊時的功能名稱, 以 GPIO 來說, 可以用的[功能名稱](https://maixpy.sipeed.com/en/libs/Maix/gpio.html#constant)有:
- GPIO0~GPIO7
- GPIOHS0\~GPIOHS26:GPIOHS27\~GPIOHS31 已經被用掉了, 程式中不能使用。名稱中的 `HS` 是 **H**igh **S**peed 的意思, 與 GPIO0~7 的功能有些差異, 有需要時會再說明。
建立好 GPIO 物件, 就可以用該物件進行數位輸出了, 例如, 以下就是常見的閃爍 LED 燈的程式:
#### 01_digital_out.py
```python=
from fpioa_manager import fm, board_info
from Maix import GPIO
import time
fm.register( # 註冊 IO 腳位的功能
14, # IO 腳位編號
fm.fpioa.GPIO0 # IO 腳位功能
)
led = GPIO( # 建立 GPIO 物件
GPIO.GPIO0, # 要使用的 GPIO 腳位
GPIO.OUT # 輸出入方向
)
for runs in range(20):
led.value(1 - led.value())
time.sleep(0.5)
```
`value()` 是使用 1 和 0 代表高電位和低電位。
## 數位輸入 (digital input)
接著我們就可以嘗試數位輸入了, 例如:
##### 02_digital_input.py
```python=
from fpioa_manager import fm, board_info
from Maix import GPIO
import time
fm.register( # 註冊 IO 腳位的功能
16, # IO 腳位編號, IO16 接到 BOOT 鈕
fm.fpioa.GPIO0 # IO 腳位功能
)
btn = GPIO( # 建立 GPIO 物件
GPIO.GPIO0, # 要使用的 GPIO 腳位
GPIO.IN, # 輸出入方向
GPIO.PULL_UP # BOOT 按鈕有一腳是接地
)
while True:
print(btn.value())
time.sleep(0.1)
```
這裡我們使用 IO16 腳, 如果查看前面的[腳位對照圖](#MaixDuino-%E8%88%87-Arduino-%E8%85%B3%E4%BD%8D%E5%B0%8D%E6%87%89), 在右下角會看到控制板上的 BOOT 鈕有一腳是接到 IO16, 而根據電路圖, BOOT 鈕的另外一隻腳是接地的, 因此我們在建立 GPIO 物件時, 指定 [PULL_UP](https://maixpy.sipeed.com/en/libs/Maix/gpio.html#parameters) 模式, 可用的模式還有 `PULL_NONE` 及 `PULL_DOWN`。
### 用中斷偵測數位輸入狀態
除了像是上例輪詢方式查看輸入狀態外, 也可以透過[中斷](https://maixpy.sipeed.com/en/libs/Maix/gpio.html#irq)的方式, 在輸入狀態變化的時候引發中斷, 例如:
##### 03_digital_in_IRQ.py
```python=
from fpioa_manager import fm, board_info
from Maix import GPIO
import time
def bootPressed(pin): # 參數是產生中斷的 GPIO 物件
print(pin.value())
fm.register( # 註冊 IO 腳位的功能
16, # IO 腳位編號, IO16 接到 BOOT 鈕
fm.fpioa.GPIOHS0 # IO 腳位功能
)
btn = GPIO( # 建立 GPIO 物件
GPIO.GPIOHS0, # 要使用的 GPIO 腳位
GPIO.IN, # 輸出入方向
GPIO.PULL_UP # BOOT 按鈕有一腳是接地
)
btn.irq(
bootPressed, # 中斷處理函式
GPIO.IRQ_BOTH, # 中斷時機, RISING/FALLING/BOTH
)
while True:
pass
```
第 5 列先定義中斷處理函式, 中斷處理函式的參數只有 1 個, 就是引發中斷的 GPIO 物件本身。然後就可以使用 GPIO 的 irq 方法設定中斷。
:::warning
官方文件中說中斷處理函式有 2 個參數, 1 個是 GPIO 物件, 第 2 個是 IO 腳位編號, 但實際跑起來, 會發生錯誤, 錯誤訊息說只有 1 個參數:
```
>>> %Run -c $EDITOR_CONTENT
TypeError: bootPressed() takes 2 positional arguments but 1 were given
```
:::
要特別注意的是只有 GPIOHS 的功能提供中斷功能, 所以這個範例使用的是 GPIOHS0, 而不是沿用前一個範例的 GPIO0。
## 類比輸入 (ADC)
MaixDuino 是透過 ESP32 讀取 ADC, 可參考官方的[範例檔](https://github.com/sipeed/MaixPy_scripts/blob/master/network/demo_esp32_read_adc.py)。不過目前測試似乎有問題, 都會得到以下錯誤:
```
[MaixPy]: esp32 read adc failed!
```
:::danger
根據[論壇的說明](https://github.com/sipeed/MaixPy/issues/148), 這似乎是 ESP32 上的韌體有問題, 以後再測試看看。
如果使用[特定版本的 MaixPy 及 ESP32 韌體](https://github.com/sipeed/MaixPy/files/3514633/fixed_adc_fw.tar.gz), 就可正常運作。請使用 kflash 工具燒錄下載後解開的 mainxpy.bin:
![](https://i.imgur.com/SdC7axj.png)
接著再使用 flash_download_tools 將下載解開的 NINA_W102-1.3.1.bin 燒錄到 MaixDuino 上的 ESP32:
![](https://i.imgur.com/ugDAFjl.png)
請記得 ESP32 是另一個序列埠。完成後, 就可以使用以下程式測試 ADC (MaixDuino 上的 K210 晶片和 ESP32 之間使用 SPI 傳輸資料, 相關接腳可參考電路圖):
```python
import network
import utime
from Maix import GPIO
from fpioa_manager import *
#iomap at MaixDuino
fm.register(25,fm.fpioa.GPIOHS10)#cs
fm.register(8,fm.fpioa.GPIOHS11)#rst
fm.register(9,fm.fpioa.GPIOHS12)#rdy
fm.register(28,fm.fpioa.GPIOHS13)#mosi
fm.register(26,fm.fpioa.GPIOHS14)#miso
fm.register(27,fm.fpioa.GPIOHS15)#sclk
nic = network.ESP32_SPI(cs=fm.fpioa.GPIOHS10,rst=fm.fpioa.GPIOHS11,rdy=fm.fpioa.GPIOHS12,
mosi=fm.fpioa.GPIOHS13,miso=fm.fpioa.GPIOHS14,sclk=fm.fpioa.GPIOHS15)
adc = nic.adc()
print(adc)
```
adc() 會以 tuple 形式傳回 6 個 ADC 接腳的值:
```python
>>> %Run -c $EDITOR_CONTENT
ESP32_SPI init over
(839, 1169, 192, 16, 0, 0)
```
:::
## 類比輸出 (PWM)
K210 的 [PWM](https://maixpy.sipeed.com/en/libs/machine/pwm.html) 輸出是依附在[計時器](https://maixpy.sipeed.com/en/libs/machine/timer.html)下, 因此要使用 PWM 必須先建立計時器物件:
```python
from fpioa_manager import fm, board_info
from machine import Timer,PWM
import time
pwm_timer = Timer( # 建立計時器
Timer.TIMER0, # 計時器編號 0~2
Timer.CHANNEL0, # 計時器通道 0~3
mode=Timer.MODE_PWM # 計時器模式
)
```
搭配 PWM 用的計時器, 模式一定要設定為 Timer.MODE_PWM。接著就可以建立 PWM 物件:
```python
led = PWM( # 建立 PWM 物件
pwm_timer, # 要使用的計時器
freq=10000000, # 頻率
duty=0, # 預設的工作週期 (0~100)
pin=14, # 要用的 IO 腳位
enable=True # 是否立即啟用, 預設為 True
)
```
其中 IO 腳位並不需要像是數位輸出一樣要先設定功能。完整的使用 PWM 來做呼吸燈的程式如下:
##### 04_pwm.py
```python=
from fpioa_manager import fm, board_info
from machine import Timer,PWM
import time
pwm_timer = Timer( # 建立計時器
Timer.TIMER0, # 計時器編號 0~2
Timer.CHANNEL0, # 計時器通道 0~3
mode=Timer.MODE_PWM # 計時器模式
)
led = PWM( # 建立 PWM 物件
pwm_timer, # 要使用的計時器
freq=10000000, # 頻率
duty=0, # 預設的工作週期 (0~100)
pin=14, # 要用的 IO 腳位
enable=True # 是否立即啟用, 預設為 True
)
duty=0
dir = True
while True:
if dir:
duty += 5
else:
duty -= 5
if duty>100:
duty = 100
dir = False
elif duty<0:
duty = 0
dir = True
time.sleep(0.05)
led.duty(duty) # 設定工作週期
```
實際測試頻率最大可設到 416000016, 但是超過 30000000 以上呼吸燈就會變得呆滯, 漸變的效果就不明顯。
## 附錄
### 官方資源
MaixDuino 有些資源不好找, 特別整理如下:
- [電路圖](https://dl.sipeed.com/MAIX/HDK/Maixduino/Maixduino-4.30/Maixduino-4.30(schematic).pdf)
- [腳位對照表](https://dl.sipeed.com/MAIX/HDK/Maixduino/Maixduino-4.30/MaixDunio(Pin%20assignment%20table).xlsx):不過要注意, 官方的對照表中 LED_G 和 LED_B 反了。
### 腳位功能名稱列表
| 功能名稱 | 簡述 |
| ----------------------------|--------------------------------|
| JTAG_TCLK | JTAG Test Clock |
| JTAG_TDI | JTAG Test Data In |
| JTAG_TMS | JTAG Test Mode Select |
| JTAG_TDO | JTAG Test Data Out |
| SPI0_D0 | SPI0 Data 0 |
| SPI0_D1 | SPI0 Data 1 |
| SPI0_D2 | SPI0 Data 2 |
| SPI0_D3 | SPI0 Data 3 |
| SPI0_D4 | SPI0 Data 4 |
| SPI0_D5 | SPI0 Data 5 |
| SPI0_D6 | SPI0 Data 6 |
| SPI0_D7 | SPI0 Data 7 |
| SPI0_SS0 | SPI0 Chip Select 0 |
| SPI0_SS1 | SPI0 Chip Select 1 |
| SPI0_SS2 | SPI0 Chip Select 2 |
| SPI0_SS3 | SPI0 Chip Select 3 |
| SPI0_ARB | SPI0 Arbitration |
| SPI0_SCLK | SPI0 Serial Clock |
| UARTHS_RX | UART High speed Receiver |
| UARTHS_TX | UART High speed Transmitter |
| RESV6 | Reserved function |
| RESV7 | Reserved function |
| CLK_SPI1 | Clock SPI1 |
| CLK_I2C1 | Clock I2C1 |
| GPIOHS0 | GPIO High speed 0 |
| GPIOHS1 | GPIO High speed 1 |
| GPIOHS2 | GPIO High speed 2 |
| GPIOHS3 | GPIO High speed 3 |
| GPIOHS4 | GPIO High speed 4 |
| GPIOHS5 | GPIO High speed 5 |
| GPIOHS6 | GPIO High speed 6 |
| GPIOHS7 | GPIO High speed 7 |
| GPIOHS8 | GPIO High speed 8 |
| GPIOHS9 | GPIO High speed 9 |
| GPIOHS10 | GPIO High speed 10 |
| GPIOHS11 | GPIO High speed 11 |
| GPIOHS12 | GPIO High speed 12 |
| GPIOHS13 | GPIO High speed 13 |
| GPIOHS14 | GPIO High speed 14 |
| GPIOHS15 | GPIO High speed 15 |
| GPIOHS16 | GPIO High speed 16 |
| GPIOHS17 | GPIO High speed 17 |
| GPIOHS18 | GPIO High speed 18 |
| GPIOHS19 | GPIO High speed 19 |
| GPIOHS20 | GPIO High speed 20 |
| GPIOHS21 | GPIO High speed 21 |
| GPIOHS22 | GPIO High speed 22 |
| GPIOHS23 | GPIO High speed 23 |
| GPIOHS24 | GPIO High speed 24 |
| GPIOHS25 | GPIO High speed 25 |
| GPIOHS26 | GPIO High speed 26 |
| GPIOHS27 | GPIO High speed 27 |
| GPIOHS28 | GPIO High speed 28 |
| GPIOHS29 | GPIO High speed 29 |
| GPIOHS30 | GPIO High speed 30 |
| GPIOHS31 | GPIO High speed 31 |
| GPIO0 | GPIO pin 0 |
| GPIO1 | GPIO pin 1 |
| GPIO2 | GPIO pin 2 |
| GPIO3 | GPIO pin 3 |
| GPIO4 | GPIO pin 4 |
| GPIO5 | GPIO pin 5 |
| GPIO6 | GPIO pin 6 |
| GPIO7 | GPIO pin 7 |
| UART1_RX | UART1 Receiver |
| UART1_TX | UART1 Transmitter |
| UART2_RX | UART2 Receiver |
| UART2_TX | UART2 Transmitter |
| UART3_RX | UART3 Receiver |
| UART3_TX | UART3 Transmitter |
| SPI1_D0 | SPI1 Data 0 |
| SPI1_D1 | SPI1 Data 1 |
| SPI1_D2 | SPI1 Data 2 |
| SPI1_D3 | SPI1 Data 3 |
| SPI1_D4 | SPI1 Data 4 |
| SPI1_D5 | SPI1 Data 5 |
| SPI1_D6 | SPI1 Data 6 |
| SPI1_D7 | SPI1 Data 7 |
| SPI1_SS0 | SPI1 Chip Select 0 |
| SPI1_SS1 | SPI1 Chip Select 1 |
| SPI1_SS2 | SPI1 Chip Select 2 |
| SPI1_SS3 | SPI1 Chip Select 3 |
| SPI1_ARB | SPI1 Arbitration |
| SPI1_SCLK | SPI1 Serial Clock |
| SPI_SLAVE_D0 | SPI Slave Data 0 |
| SPI_SLAVE_SS | SPI Slave Select |
| SPI_SLAVE_SCLK | SPI Slave Serial Clock |
| I2S0_MCLK | I2S0 Master Clock |
| I2S0_SCLK | I2S0 Serial Clock(BCLK) |
| I2S0_WS | I2S0 Word Select(LRCLK) |
| I2S0_IN_D0 | I2S0 Serial Data Input 0 |
| I2S0_IN_D1 | I2S0 Serial Data Input 1 |
| I2S0_IN_D2 | I2S0 Serial Data Input 2 |
| I2S0_IN_D3 | I2S0 Serial Data Input 3 |
| I2S0_OUT_D0 | I2S0 Serial Data Output 0 |
| I2S0_OUT_D1 | I2S0 Serial Data Output 1 |
| I2S0_OUT_D2 | I2S0 Serial Data Output 2 |
| I2S0_OUT_D3 | I2S0 Serial Data Output 3 |
| I2S1_MCLK | I2S1 Master Clock |
| I2S1_SCLK | I2S1 Serial Clock(BCLK) |
| I2S1_WS | I2S1 Word Select(LRCLK) |
| I2S1_IN_D0 | I2S1 Serial Data Input 0 |
| I2S1_IN_D1 | I2S1 Serial Data Input 1 |
| I2S1_IN_D2 | I2S1 Serial Data Input 2 |
| I2S1_IN_D3 | I2S1 Serial Data Input 3 |
| I2S1_OUT_D0 | I2S1 Serial Data Output 0 |
| I2S1_OUT_D1 | I2S1 Serial Data Output 1 |
| I2S1_OUT_D2 | I2S1 Serial Data Output 2 |
| I2S1_OUT_D3 | I2S1 Serial Data Output 3 |
| I2S2_MCLK | I2S2 Master Clock |
| I2S2_SCLK | I2S2 Serial Clock(BCLK) |
| I2S2_WS | I2S2 Word Select(LRCLK) |
| I2S2_IN_D0 | I2S2 Serial Data Input 0 |
| I2S2_IN_D1 | I2S2 Serial Data Input 1 |
| I2S2_IN_D2 | I2S2 Serial Data Input 2 |
| I2S2_IN_D3 | I2S2 Serial Data Input 3 |
| I2S2_OUT_D0 | I2S2 Serial Data Output 0 |
| I2S2_OUT_D1 | I2S2 Serial Data Output 1 |
| I2S2_OUT_D2 | I2S2 Serial Data Output 2 |
| I2S2_OUT_D3 | I2S2 Serial Data Output 3 |
| RESV0 | Reserved function |
| RESV1 | Reserved function |
| RESV2 | Reserved function |
| RESV3 | Reserved function |
| RESV4 | Reserved function |
| RESV5 | Reserved function |
| I2C0_SCLK | I2C0 Serial Clock |
| I2C0_SDA | I2C0 Serial Data |
| I2C1_SCLK | I2C1 Serial Clock |
| I2C1_SDA | I2C1 Serial Data |
| I2C2_SCLK | I2C2 Serial Clock |
| I2C2_SDA | I2C2 Serial Data |
| CMOS_XCLK | DVP System Clock |
| CMOS_RST | DVP System Reset |
| CMOS_PWDN | DVP Power Down Mode |
| CMOS_VSYNC | DVP Vertical Sync |
| CMOS_HREF | DVP Horizontal Reference output |
| CMOS_PCLK | Pixel Clock |
| CMOS_D0 | Data Bit 0 |
| CMOS_D1 | Data Bit 1 |
| CMOS_D2 | Data Bit 2 |
| CMOS_D3 | Data Bit 3 |
| CMOS_D4 | Data Bit 4 |
| CMOS_D5 | Data Bit 5 |
| CMOS_D6 | Data Bit 6 |
| CMOS_D7 | Data Bit 7 |
| SCCB_SCLK | SCCB Serial Clock |
| SCCB_SDA | SCCB Serial Data |
| UART1_CTS | UART1 Clear To Send |
| UART1_DSR | UART1 Data Set Ready |
| UART1_DCD | UART1 Data Carrier Detect |
| UART1_RI | UART1 Ring Indicator |
| UART1_SIR_IN | UART1 Serial Infrared Input |
| UART1_DTR | UART1 Data Terminal Ready |
| UART1_RTS | UART1 Request To Send |
| UART1_OUT2 | UART1 User-designated Output 2 |
| UART1_OUT1 | UART1 User-designated Output 1 |
| UART1_SIR_OUT | UART1 Serial Infrared Output |
| UART1_BAUD | UART1 Transmit Clock Output |
| UART1_RE | UART1 Receiver Output Enable |
| UART1_DE | UART1 Driver Output Enable |
| UART1_RS485_EN | UART1 RS485 Enable |
| UART2_CTS | UART2 Clear To Send |
| UART2_DSR | UART2 Data Set Ready |
| UART2_DCD | UART2 Data Carrier Detect |
| UART2_RI | UART2 Ring Indicator |
| UART2_SIR_IN | UART2 Serial Infrared Input |
| UART2_DTR | UART2 Data Terminal Ready |
| UART2_RTS | UART2 Request To Send |
| UART2_OUT2 | UART2 User-designated Output 2 |
| UART2_OUT1 | UART2 User-designated Output 1 |
| UART2_SIR_OUT | UART2 Serial Infrared Output |
| UART2_BAUD | UART2 Transmit Clock Output |
| UART2_RE | UART2 Receiver Output Enable |
| UART2_DE | UART2 Driver Output Enable |
| UART2_RS485_EN | UART2 RS485 Enable |
| UART3_CTS | UART3 Clear To Send |
| UART3_DSR | UART3 Data Set Ready |
| UART3_DCD | UART3 Data Carrier Detect |
| UART3_RI | UART3 Ring Indicator |
| UART3_SIR_IN | UART3 Serial Infrared Input |
| UART3_DTR | UART3 Data Terminal Ready |
| UART3_RTS | UART3 Request To Send |
| UART3_OUT2 | UART3 User-designated Output 2 |
| UART3_OUT1 | UART3 User-designated Output 1 |
| UART3_SIR_OUT | UART3 Serial Infrared Output |
| UART3_BAUD | UART3 Transmit Clock Output |
| UART3_RE | UART3 Receiver Output Enable |
| UART3_DE | UART3 Driver Output Enable |
| UART3_RS485_EN | UART3 RS485 Enable |
| TIMER0_TOGGLE1 | TIMER0 Toggle Output 1 |
| TIMER0_TOGGLE2 | TIMER0 Toggle Output 2 |
| TIMER0_TOGGLE3 | TIMER0 Toggle Output 3 |
| TIMER0_TOGGLE4 | TIMER0 Toggle Output 4 |
| TIMER1_TOGGLE1 | TIMER1 Toggle Output 1 |
| TIMER1_TOGGLE2 | TIMER1 Toggle Output 2 |
| TIMER1_TOGGLE3 | TIMER1 Toggle Output 3 |
| TIMER1_TOGGLE4 | TIMER1 Toggle Output 4 |
| TIMER2_TOGGLE1 | TIMER2 Toggle Output 1 |
| TIMER2_TOGGLE2 | TIMER2 Toggle Output 2 |
| TIMER2_TOGGLE3 | TIMER2 Toggle Output 3 |
| TIMER2_TOGGLE4 | TIMER2 Toggle Output 4 |
| CLK_SPI2 | Clock SPI2 |
| CLK_I2C2 | Clock I2C2 |