# 系统概述 Apus 是一款面向蓝牙 BLE 音频和 IoT 市场的高性能、低功耗芯片。内置了一个 32bit RISC-V CPU 核、一个 BLE 5.2 RF & Baseband 以及众多外设模块。 ![](images/apus_arch.svg) ## 功能特性
处理器
  • RISC-V 最高支持96Mhz
  • 集成 DSP 指令和单精度浮点
  • I-Cache 大小 4KB、D-Cache 大小 4KB
存储系统
  • ROM 64KB
  • 内置 SRAM 160KB
  • 支持 SPI Nor Flash,四线模式,最高频率 96MHz
  • 支持 SIP Flash 方案, 256KB/512KB/1MB
蓝牙系统
  • 支持 BLE 5.2 LE单模
  • 支持 1Mbps、2Mbps、Long Range 125kbps、500kbps
  • Support full-function BLE AoA and AoD location features
  • 支持 LE Audio,广播、多通道通同步传输
  • 支持 2.4G 私有标准
  • 支持定位
  • 支持 HCI 标准接口
  • RX 灵敏度: -95dBm@1Mbps BLE,-93dBm@2Mbps BLE
  • TX 输出功率:最大 8dBm
音频系统
  • 集成音频加速单元
  • 音频 ADC 性能
    • Sigma-Delta ADC,输出 16bit/24bit 可选
    • ⽀持 PGA:范围:0~32dB,每个 Step 2D
    • SNR: > 92 dB @PGA 0dB,> 70dB @PGA 32dB
    • THD+N < -75dB, Dynamic Range > 90d
    • ⽀持 48k/32k/16k 采样率输出
  • 音频输入通道(Audio In)
    • ⽀持 PDM ⻨克⻛ 2 通道,⽀持 16k/32k/48k 采样率,⽀持 16bit/24bit 输出。
    • ⽀持 2+1 (2输⼊+1回声) 通道写⼊ SRA
    • ⽀持双向 I2S 输⼊和输出,I2S 数据直接进内存不需要重采样。
  • 音频 DAC
    • ⽀持单通道⾳频 DAC 输出,⽀持单端和差分连接。
    • 集成 Class-D PA
    • DAC SNR > 95dB,THD+N < -75dB
    • ⽀持喇叭负载 32ohm, 16ohm,⽀持 Line out 给⼿机
  • 音频输出
    • 单通道输出,不需要采样率转换,不需要混⾳,不需要回踩通路。
    • 集成单通道 7 级 EQ & DRC ⽀持
    • ⽀持 I2S 输出⽴体声⾳频
安全系统
  • 集成 OTP Memory (MPW 没有)
  • 集成随机数发生器
  • AES 128/192/256 加解密加速引擎
时钟
  • 支持外置 32MHz 晶振输入
  • 支持外置 32.768K 晶振输入
  • 内置高精度 32KHz OSC, 校准后精度误差小于 0.5%
  • 集成 PLL, 最高输出 128MHz
通用接口
  • 支持 USB 1.1 Slave
  • I2C Master x3, 最高频率大于 2MHz
  • UART x2
    • 支持流控
    • 波特率最高可至 3Mbps
  • QSPI x3
    • QSPI0 内部 4 线 SPI Flash 控制器, 支持 XIP, 96MHz
    • QSPI1 外部通用 QSPI 控制器,支持 LCD、PSRAM、Flash 等,支持 4 倍速
    • QSPI2 外部通用 QSPI 控制器,支持 LCD、PSRAM、Flash 等,支持 4 倍速,支持 Slave 模式
  • SDIO x1, 支持 SD、eMMC 卡
  • 集成一个 Quadrature Decoder
  • 集成一个红外发射、接收模块
    • 支持红外学习功能
    • 集成红外放大、整形、模拟转数字模块
  • 集成一个按键扫描模块
通用功能
  • GPIO
    • 最多支持 32 个 GPIO
  • 定时器
    • 8 路 32-bit 定时器
    • 可复用为 PWM 功能
  • DMA
    • 8 个 DMA 通道
  • RTC
  • 看门狗
  • SAR ADC
  • 正交解调
  • L2-Icache cache Flash XIP 大小 8KB
  • L2-Dcache cache PSRAM 大小 32KB/64KB 可配
  • 外置 MMU 单元,做地址映射
低功耗
  • 集成一个 PMU 电源管理模块,最低功耗可低至 0.5uA
工作温度
  • -40℃ ~ 85℃

## RISC-V 核 Apus 处理器是一个 RISC-V 核。主要特性如下: * 32 位 RISC-V 指令架构 * 支持 RISC-V 32/16 位混编指令集 * 32 个 32 位通用寄存器 * 整形 5 级/浮点 7 级,弹发射,顺序执行流水线 * 支持 RISC-V 机器模式和用户模式 * 双周期硬件乘法器,基 4 硬件除法器 * 4KB 指令 cache(I-CACHE)、4KB 数据 cache(D-CACHE);Cache Line 大小 32B * 兼容 RISC-V CLIC 中断标准,支持中断嵌套 * 兼容 RISC-V PMU 内存保护标准 * 支持 AHB-Lite 总线协议,支持三条总线:指令总线、数据总线和系统总线 RISC-V 提供了紧耦合模块操作接口,参考头文件 core_rv32.h、csi_core.h 和 csi_rv32_gcc.h。 ### 中断 Apus 使用 RISC-V 紧耦合中断控制器 `CLIC`,中断源见下表: |中断号 |中断来源 |备注 | |--------|--------------------|------------| |0 - 2 | 未实现/保留 | | |3 | 机器模式软件中断 | | |4 - 6 | 未实现/保留 | | |7 | 机器模式计时中断 | | |8 - 10 | 未实现/保留 | | |11 | 机器模式外部中断 | Apus 没使用| |12 - 15 | 未实现/保留 | | |16 | SDIO | | |17 | SPI1 (PSRAM SPI) | | |18 | L2-Icache | | |19 | GPIO | | |20 | 保留 | | |21 | 保留 | | |22 | 保留 | | |23 | DMA | | |24 | SPI0 (FLASH SPI) | | |25 | UART0 | | |26 | UART1 | | |27 | I2C0 | | |28 | I2C1 | | |29 | I2C2 | | |30 | TIMER0 | | |31 | TIMER1 | | |32 | TIMER2 | | |33 | TIMER3 | | |34 | TIMER4 | | |35 | TIMER5 | | |36 | TIMER6 | | |37 | TIMER7 | | |38 | WATCHDOG | | |39 | USB | | |40 | SPI2 (General SPI) | | |41 | QUAD-DECDOR | | |42 | IR | | |43 | KEYSCAN | | |44 | I2S | | |45 | AUDIO_OUT | | |46 | AUDIO_IN | | |47 | RNG | | |48 | AES | | |49 | SAR ADC | | |50 | BT | | |51 | AUDIO_E | | |52 | Sample | | |53 | RTC | | |54 | LPC | | |55 | Wakeup Event | | |56 | L2-Dcache | | ### Systick RISC-V 内置了一个系统定时器,该定时器一般用作系统调度用。使用方法如下: ```c int ticks = 10000; // 10000 个 tick 后产生中断 __attribute__ ((interrupt ("machine"))) void CORET_IRQHandler(void) // 中断入口 { csi_coret_config(ticks, CORET_IRQn); // 启动下一次 systick 中断 systick_handler(); // systick 中断处理函数 } csi_coret_config(ticks, 7); // 配置中断时间 csi_vic_enable_irq(7); // 开启 systick 中断 ``` ### Cache Apus 芯片有两级 Cache:`L1-I/DCache`、`L2-I/DCache`。`L1-I/DCache`是 RISC-V 内部 Cache;`L2-I/DCache`分别为 Flash XIP Cache 和 PSRAM Cache。 ### L1-I/Dcache L1-I/Dcache 操作接口见下表 |Cache 类型 | 操作名称 | 接口 | |-----------|----------------------------|-------------------------------| |ICache |ICache 开启 |csi_icache_enable | |ICache |ICache 关闭 |csi_icache_disable | |ICache |ICache 无效 |csi_icache_invalid | |DCache |DCache 开启 |csi_dcache_enable | |DCache |DCache 关闭 |csi_dcache_disable | |DCache |DCache 全部 clean |csi_dcache_clean | |DCache |DCache 按地址 clean |csi_dcache_clean_range | |DCache |DCache 全部 invalid |csi_dcache_invalid | |DCache |DCache 按地址 invalid |csi_dcache_invalid_range | |DCache |DCache 全部 clean_invalid |csi_dcache_clean_invalid | |DCache |DCache 按地址 clean_invalid |csi_dcache_clean_invalid_range | ### L2-I/Dcache 使用方法见 [](#l2-idcache) ## 存储系统 Apus 存储器分为两类:`片上存储器`、`片外存储器`。详细信息如下: * 片上存储器 * 16KB ROM * 32KB SRAM0 * 32KB SRAM1 * 32KB SRAM2 * 32KB SRAM3 * 32KB SRAM4 * 片外存储器 * 1MB/2MB/4MB/8MB/16MB SPI FLASH XIP * 1MB/2MB/4MB/8MB/16MB SPI PSRAM ### 存储系统物理地址 存储器物理地址见下表 |存储器 |物理地址 |空间大小| |----------|---------------------------|--------| |SRAM 0 | 0x0000_0000 - 0x0000_7FFF | 32KB | |SRAM 1 | 0x0000_8000 - 0x0000_FFFF | 32KB | |SRAM 2 | 0x0001_0000 - 0x0001_7FFF | 32KB | |SRAM 3 | 0x0001_8000 - 0x0001_FFFF | 32KB | |SRAM 4 | 0x0002_0000 - 0x0002_7FFF | 32KB | |PSRAM | 0x0200_0000 - 0x02FF_FFFF | 16MB | |FLASH XIP | 0x0300_0000 - 0x03FF_FFFF | 16MB | :::{important} 存储器物理地址只能被 DMA 以及其他硬件模块访问,CPU 访问存储器需要通过总线地址。 ::: ## 地址空间 Apus 可寻址空间为 4GB。可通过`指令总线(I-BUS)`、`数据总线(D-BUS)`和`系统总线(S-BUS)`访问。 |总线接口 | 地址范围 |功能 | |---------|---------------------------|-------------------------------------------------------------| |指令总线 | 0x0000_0000 - 0x1FFF_FFFF |CPU 取指地址,映射到的存储设备有 ROM、SRAM、Flash XIP、PSRAM | |数据总线 | 0x2000_0000 - 0x3FFF_FFFF |CPU 取数据地址,映射到的存储设备有 SRAM、Flash XIP、PSRAM | |系统总线 | 0x4000_0000 - 0xCFFF_FFFF |CPU 访问寄存器地址,映射到寄存器总线 | |系统总线 | 0xD000_0000 - 0xFFFF_FFFF |CPU 自带紧耦合 IP 地址空间 | ### 存储系统地址映射 存储系统在总线上的详细映射地址如下 |总线接口 | 存储介质 |地址范围 |空间大小 | 是否 CACHE| |---------|----------|---------------------------|---------|----------| |指令总线 |ROM | 0x0000_0000 - 0x0000_0FFF | 16KB |不可 CACHE| |指令总线 |SRAM0 | 0x1000_0000 - 0x1000_7FFF | 32KB |I-CACHE | |指令总线 |SRAM1 | 0x1000_8000 - 0x1000_FFFF | 32KB |I-CACHE | |指令总线 |SRAM2 | 0x1001_0000 - 0x1001_7FFF | 32KB |I-CACHE | |指令总线 |SRAM3 | 0x1001_8000 - 0x1001_FFFF | 32KB |I-CACHE | |指令总线 |SRAM4 | 0x1002_0000 - 0x1002_7FFF | 32KB |I-CACHE | |指令总线 |PSRAM | 0x1200_0000 - 0x12FF_FFFF | 16MB |I-CACHE | |指令总线 |FLASH XIP | 0x1300_0000 - 0x13FF_FFFF | 16MB |I-CACHE | |数据总线 |SRAM0 | 0x2000_0000 - 0x2000_7FFF | 32KB |D-CACHE | |数据总线 |SRAM1 | 0x2000_8000 - 0x2000_FFFF | 32KB |D-CACHE | |数据总线 |SRAM2 | 0x2001_0000 - 0x2001_7FFF | 32KB |D-CACHE | |数据总线 |SRAM3 | 0x2001_8000 - 0x2001_FFFF | 32KB |D-CACHE | |数据总线 |SRAM4 | 0x2002_0000 - 0x2002_7FFF | 32KB |D-CACHE | |数据总线 |PSRAM | 0x2200_0000 - 0x22FF_FFFF | 16MB |D-CACHE | |数据总线 |FLASH XIP | 0x2300_0000 - 0x23FF_FFFF | 16MB |D-CACHE | |数据总线 |SRAM0 | 0x3000_0000 - 0x3000_7FFF | 32KB |不可 CACHE| |数据总线 |SRAM1 | 0x3000_8000 - 0x3000_FFFF | 32KB |不可 CACHE| |数据总线 |SRAM2 | 0x3001_0000 - 0x3001_7FFF | 32KB |不可 CACHE| |数据总线 |SRAM3 | 0x3001_8000 - 0x3001_FFFF | 32KB |不可 CACHE| |数据总线 |SRAM4 | 0x3002_0000 - 0x3002_7FFF | 32KB |不可 CACHE| |数据总线 |PSRAM | 0x3200_0000 - 0x32FF_FFFF | 16MB |不可 CACHE| |数据总线 |FLASH XIP | 0x3300_0000 - 0x33FF_FFFF | 16MB |不可 CACHE| :::{important} CPU 访问存储介质如果超过以上地址范围,会直接报异常。 ::: ### 外设寄存器地址映射 外设寄存器在总线上的详细映射地址如下 |模块 |寄存器地址 |备注 | |------------------|---------------------------|----------------------------| |I2C0 | 0xA000_0000 - 0xA000_FFFF | | |I2C1 | 0xA001_0000 - 0xA001_FFFF | | |I2C2 | 0xA002_0000 - 0xA002_FFFF | | |UART0 | 0xA010_0000 - 0xA010_FFFF | | |UART1 | 0xA011_0000 - 0xA011_FFFF | | |SAR ADC | 0xA020_0000 - 0xA020_00FF | | |SAR DMA | 0xA020_0100 - 0xA020_017F | | |SPI0 (FLASH SPI) | 0xA100_0000 - 0xA1FF_FFFF | | |SPI1 (PSRAM SPI) | 0xA200_0000 - 0xA2FF_FFFF | | |SPI2 (General SPI)| 0xA300_0000 - 0xA3FF_FFFF | | |WATCHDOG | 0xB000_0000 - 0xB00F_FFFF | 看门狗 | |TIMER | 0xB010_0000 - 0xB01F_FFFF | 定时器 | |GPIO | 0xB020_0000 - 0xB02F_FFFF | | |IR | 0xB040_0000 - 0xB04F_FFFF | 红外 | |QUAD-DECDOR | 0xB050_0000 - 0xB05F_FFFF | 正交解码器 | |RCM | 0xB060_0000 - 0xB06F_FFFF | 时钟和复位 | |PMU-AO | 0xB070_0000 - 0xB070_FFFF | 电源管理单元,低功耗不断电 | |RTC | 0xB071_0000 - 0xB071_FFFF | | |KEYSCAN | 0xB080_0000 - 0xB08F_FFFF | 按键扫描 | |IO-Matrix | 0xB090_0000 - 0xB090_FFFF | IO 管脚复用 | |IO-TEST | 0xB091_0000 - 0xB091_FFFF | IO 特殊功能配置 | |RNG | 0xB0A0_0000 - 0xB0AF_FFFF | 随机数 | |AES | 0xB0B0_0000 - 0xB0BF_FFFF | | |eFuse | 0xB0C0_0000 - 0xB0CF_FFFF | 电源管理单元,低功耗断电 | |PMU-CORE | 0xB0D0_0000 - 0xB0DF_FFFF | | |SDIO | 0xB100_0000 - 0xB1FF_FFFF | | |USB | 0xB200_0000 - 0xB2FF_FFFF | | |DMA | 0xB300_0000 - 0xB3FF_FFFF | | |BT | 0xB400_0000 - 0xB4FF_FFFF | 蓝牙 | |MCU-CONFIG | 0xB500_0000 - 0xB5FF_FFFF | 系统配置 | |AUDIO_IN | 0xB600_0000 - 0xB60F_FFFF | | |I2S | 0xB610_0000 - 0xB61F_FFFF | | |AUDIO_OUT | 0xB620_0000 - 0xB62F_FFFF | | |SDM | 0xB630_0000 - 0xB63F_FFFF | DAC | |AUDIO_E | 0xB640_0000 - 0xB64F_FFFF | | |LODAC | 0xB650_0000 - 0xB65F_FFFF | | |AUDIO_CODEC | 0xB660_0000 - 0xB65F_FFFF | | |L2-Dcache | 0xB700_0000 - 0xB7FF_FFFF | | ### 外置 MMU Apus MMU 模块单纯的是一个地址转换模块,详细使用方法参考 [MMU 章节](../../../drivers/hal/src/mmu/README.md#mmu)。 ## IO PAD 本节介绍 IO PAD 相关的内容,包括 `IO 类型`、`IO 控制`、`IO 复用关系`等。 ### IO PAD 类型 Apus 中所有 IO PAD 大概可分为以下几类:`电源 IO`、`数字 IO`、`模拟 IO`。其中`电源 IO`是独占 IO,软件不需要关心,`数字 IO`和`模拟 IO`可以在同一个 IO 上。数字/模拟 IO 如下表所示: |GPIO 号 |PAD 名称 | 特殊功能 | 可否唤醒 | 默认功能 | |--------|----------|-----------------|----------|----------| |0 |P0_0 | BOOT PIN | 否 | IDLE | |1 |P0_1 | | 可 | IDLE | |2 |P0_2 | | 可 | IDLE | |3 |P0_3 | | 可 | IDLE | |4 |P0_4 | | 可 | IDLE | |5 |P0_5 | | 可 | IDLE | |6 |P0_6 | | 可 | UART0_RX | |7 |P0_7 | | 可 | UART0_TX | |8 |P1_0 | AIN0 | 可 | JTAG_TMS | |9 |P1_1 | AIN1 | 可 | JTAG_TCK | |10 |P1_2 | AIN2 | 可 | IDLE | |11 |P1_3 | AIN3 | 可 | IDLE | |12 |P1_4 | AIN4 | 可 | IDLE | |13 |P1_5 | AIN5 | 可 | IDLE | |14 |P1_6 | AIN6 | 可 | IDLE | |15 |P1_7 | AIN7 | 可 | IDLE | |16 |P2_0 | | 可 | IDLE | |17 |P2_1 | | 可 | IDLE | |18 |P2_2 | | 可 | IDLE | |19 |P2_3 | | 可 | IDLE | |20 |P2_4 | | 可 | IDLE | |21 |P2_5 | | 可 | IDLE | |22 |P2_6 | | 可 | IDLE | |23 |P2_7 | | 可 | IDLE | |24 |P3_0 | | 可 | IDLE | |25 |P3_1 | | 可 | IDLE | |26 |P3_2 | | 可 | PWM_P | |27 |P3_3 | | 可 | PWM_N | |28 |P3_4 | XO 32K | 可 | IDLE | |29 |P3_5 | XO 32K | 可 | IDLE | |30 |P3_6 | USB_DM | 否 | IDLE | |31 |P3_7 | USB_DP | 否 | IDLE | | |IR | IR | 否 | | | |ON-OFF | ON-OFF 按键唤醒 | 可 | | 其中 IR、ON-OFF 可以复用为 GPIO 功能。 ### IO 控制 #### 上下拉 可以通过 [**gx_hal_padmux_set_io_pull**](../../../../../exhalerst/lib/function_group__gxdoc_1ga3039b62fb3c528f1067bf4f39bb16e86.rst) 接口控制 `P0_0 - P3_7` IO 内部上下拉状态,内部上下拉的状态有:`上拉`、`下拉`、`上下拉无效`。参考代码: ```c static GX_HAL_PADMUX _padmux = { .regs = (void *)0xB0900000, .default_config = NULL, .padmux_max = 32, }; gx_hal_padmux_set_io_pull(&_padmux, 7, GX_HAL_PADMUX_IO_PULL_UP); // 设置 P0_7 内部上拉 ``` ### IO 复用(IO Matrix) `IO Matrix` 模块是数字管脚复用模块,采用全功能用用的矩阵机制设计,即每一个具有`通用复用功能`的 IO(`P0_0 - P3_7`) 都可以复用成某个外设模块的功能。可以通过 [**gx_hal_padmux_set**](../../../../../exhalerst/lib/function_group__gxdoc_1ga79977c244a3153f47ced780defa99a7d.rst) 设置 IO 复用功能,通过 [**gx_hal_padmux_get**](../../../../../exhalerst/lib/function_group__gxdoc_1ga5a078a37f3de6b6c87da2443ab754b47.rst) 获取 IO 复用功能。可复用的功能有: | NUM | FUNC | NUM | FUNC | NUM | FUNC | NUM | FUNC | | --- | ---------------- | --- | ---------------- | --- | ---------------- | --- | ----------------- | | 0 | IDLE | 1 | GPIOn | 2 | UART0_TX | 3 | UART0_RX | | 4 | UART0_CTS | 5 | UART0_RTS | 6 | UART1_TX | 7 | UART1_RX | | 8 | UART1_CTS | 9 | UART1_RTS | 10 | I2C0_SCL | 11 | I2C0_SDA | | 12 | I2C1_SCL | 13 | I2C1_SDA | 14 | I2C2_SCL | 15 | I2C2_SDA | | 16 | PWM0 | 17 | PWM1 | 18 | PWM2 | 19 | PWM3 | | 20 | PWM4 | 21 | PWM5 | 22 | PWM6 | 23 | PWM7 | | 24 | QUAD_X_A | 25 | QUAD_X_B | 26 | QUAD_Y_A | 27 | QUAD_Y_B | | 28 | QUAD_Z_A | 29 | QUAD_Z_B | 30 | KEY_COL_0 | 31 | KEY_COL_1 | | 32 | KEY_COL_2 | 33 | KEY_COL_3 | 34 | KEY_COL_4 | 35 | KEY_COL_5 | | 36 | KEY_COL_6 | 37 | KEY_COL_7 | 38 | KEY_COL_8 | 39 | KEY_COL_9 | | 40 | KEY_COL_10 | 41 | KEY_COL_11 | 42 | KEY_COL_12 | 43 | KEY_COL_13 | | 44 | KEY_COL_14 | 45 | KEY_COL_15 | 46 | KEY_COL_16 | 47 | KEY_COL_17 | | 48 | KEY_COL_18 | 49 | KEY_COL_19 | 50 | KEY_ROW_0 | 51 | KEY_ROW_1 | | 52 | KEY_ROW_2 | 53 | KEY_ROW_3 | 54 | KEY_ROW_4 | 55 | KEY_ROW_5 | | 56 | KEY_ROW_6 | 57 | KEY_ROW_7 | 58 | KEY_ROW_8 | 59 | KEY_ROW_9 | | 60 | KEY_ROW_10 | 61 | KEY_ROW_11 | 62 | SPI2_CS0(Master) | 63 | SPI2_CS1(Master) | | 64 | SPI2_CS2(Master) | 65 | SPI1_CLK(Master) | 66 | SPI1_D0(Master) | 67 | SPI1_D1(Master) | | 68 | SPI1_D2(Master) | 69 | SPI1_D3(Master) | 70 | SPI1_CS(Master) | 71 | SPI2_CLK(Master) | | 72 | SPI2_D0(Master) | 73 | SPI2_D1(Master) | 74 | SPI2_D2(Master) | 75 | SPI2_D3(Master) | | 76 | SPI2_CS(Slave) | 77 | SPI2_CLK(Slave) | 78 | SPI2_D0(Slave) | 79 | SPI2_D1(Slave) | | 80 | SPI2_D2(Slave) | 81 | SPI2_D3(Slave) | 82 | I2S_BCLK(Master) | 83 | I2S_LRCLK(Master) | | 84 | I2S_DIN | 85 | I2S_DOUT | 86 | I2S_BCLK(Slave) | 87 | I2S_LRCLK(Slave) | | 88 | SD_CLK | 89 | SD_CMD | 90 | SD_D0 | 91 | SD_D1 | | 92 | SD_D2 | 93 | SD_D3 | 94 | -- | 95 | MCLK | | 96 | JTAG_RST | 97 | JTAG_TMS | 98 | JTAG_TCK | 99 | JTAG_TDI | | 100 | JTAG_TDO | 101 | PDM_CLK | 102 | PDM0_DATA | 103 | PDM1_DATA | | 104 | ANT0 | 105 | ANT1 | 106 | ANT2 | 107 | ANT3 | | 108 | -- | 109 | -- | 110 | -- | 111 | PWM_P | | 112 | PMW_N | 113 | SD_CARD_DETECT | 114 | IRC_RX_TEST1(I) | 115 | IRC_TX_TEST1(I) | | 116 | IRC_RX_TEST2(O) | 117 | -- | 118 | -- | 119 | -- | | 120 | -- | 121 | -- | 122 | -- | 123 | -- | | 124 | -- | 125 | -- | 126 | IRC_TX_TEST2(O) | 127 | Reg Control | 参考代码: ```c static GX_HAL_PADMUX _padmux = { .regs = (void *)0xB0900000, .default_config = NULL, .padmux_max = 32, }; gx_hal_padmux_set(&_padmux, 7, 2); // 设置 P0_7 复用功能为 UART0_TX gx_hal_padmux_set(&_padmux, 8, 3); // 设置 P1_0 复用功能为 UART0_RX ```