Files
arcs/arcs-sdk/drivers/lisa_pinmux/README.md
2026-08-13 16:50:52 +08:00

5.4 KiB
Raw Blame History

Pinmux

什么是 Pinmux

引脚复用配置Pinmux用于将芯片的物理引脚配置为特定外设功能。例如将某个引脚配置为 UART TX、SPI CLK 或 ADC 输入等。

在 ARCS SDK 中,驱动在初始化时会自动调用板型目录下定义的 pinmux 函数来完成引脚配置,用户无需在应用代码中手动配置

板型中的 Pinmux 配置

文件位置

Pinmux 配置位于板型目录下:

boards/<板型名>/
├── pinmux.h          # pinmux 函数声明
└── pinmux.c          # pinmux 函数实现

函数命名规范

每个外设的 pinmux 函数按以下规则命名:

void lisa_<外设名>_pinmux(void);

常用的 pinmux 函数:

函数名 说明
lisa_uart0_pinmux() UART0 引脚配置
lisa_uart1_pinmux() UART1 引脚配置
lisa_spi0_pinmux() SPI0 引脚配置
lisa_spi1_pinmux() SPI1 引脚配置
lisa_i2c0_pinmux() I2C0 引脚配置
lisa_i2c1_pinmux() I2C1 引脚配置
lisa_adc_pinmux() ADC 引脚配置
lisa_pwm_pinmux() PWM 引脚配置
lisa_gpioa_pinmux() GPIOA 引脚配置
lisa_gpiob_pinmux() GPIOB 引脚配置
lisa_sdio_pinmux() SDIO 引脚配置
lisa_dvp_pinmux() DVP 摄像头接口引脚配置

自动调用机制

驱动在设备初始化时会自动调用对应的 pinmux 函数。例如:

  • UART0 驱动初始化时调用 lisa_uart0_pinmux()
  • ADC 驱动初始化时调用 lisa_adc_pinmux()
  • SPI0 驱动初始化时调用 lisa_spi0_pinmux()

重要:应用层代码无需手动调用这些函数!

查看板型的 Pinmux 配置

示例arcs_evb 板型

查看 boards/arcs_evb/pinmux.c 可以了解该板型的引脚配置:

void lisa_uart0_pinmux()
{
    IOMuxManager_PinConfigure(CSK_IOMUX_PAD_A, CP_LOG_RX_PIN, 2);
    IOMuxManager_PinConfigure(CSK_IOMUX_PAD_A, CP_LOG_TX_PIN, 2);
}

void lisa_adc_pinmux()
{
    AON_IOMuxManager_PinConfigure(CSK_IOMUX_PAD_B, 6, 3);
}

void lisa_spi1_pinmux()
{
    IOMuxManager_PinConfigure(CSK_IOMUX_PAD_B, 5, 6);  // SCK
    IOMuxManager_PinConfigure(CSK_IOMUX_PAD_B, 3, 6);  // MISO
    IOMuxManager_PinConfigure(CSK_IOMUX_PAD_B, 1, 6);  // MOSI
}

查看 boards/arcs_evb/pinmux.h 可以看到引脚别名定义:

#define CP_LOG_RX_PIN 2
#define CP_LOG_TX_PIN 3
#define AP_LOG_TX_PIN 21
// ...

自定义板型时如何配置 Pinmux

使用 Pinmux 配置工具

重要提示:pinmux.hpinmux.c 由 Pinmux 配置工具自动生成,不建议手动编辑。

配置步骤

  1. 访问 Pinmux 配置工具

  2. 选择芯片型号

    • 根据你的硬件选择对应的芯片型号
  3. 配置外设引脚

    • 根据硬件原理图配置项目中使用的外设(如 UART0、SPI0、I2C0、ADC 等)
    • 为每个外设选择对应的引脚映射
  4. 生成代码

    • 工具会自动生成 pinmux.hpinmux.c 文件
    • 生成的文件包含所有已配置外设的 pinmux 函数实现
  5. 集成到板型目录

    • 将生成的 pinmux.hpinmux.c 保存到 boards/<你的板型>/ 目录下
    • 重新编译项目

修改已有配置

如果需要修改引脚配置:

  1. 在 Pinmux 配置工具中重新配置
  2. 重新生成 pinmux.hpinmux.c
  3. 替换板型目录下的对应文件
  4. 虽然不建议但可以手动调整pinmux代码参考官方提供的IO MAP表

配置参数说明

IOMuxManager_PinConfigure

用于配置普通电源域的引脚:

void IOMuxManager_PinConfigure(pad_group, pin_number, function);

参数:

  • pad_group: 引脚组,可选值:
    • CSK_IOMUX_PAD_A - PAD_A 组
    • CSK_IOMUX_PAD_B - PAD_B 组
  • pin_number: 引脚编号0-31
  • function: 功能码0-31具体值参考芯片手册

AON_IOMuxManager_PinConfigure

用于配置 Always-On 电源域的引脚(通常用于 ADC、部分 GPIO

void AON_IOMuxManager_PinConfigure(pad_group, pin_number, function);

参数与 IOMuxManager_PinConfigure 相同。

如何判断使用哪个?

  • 查看芯片手册中引脚所属的电源域
  • 参考 SDK 内置板型arcs_evb、arcs_mini的配置
  • 通常 ADC 引脚使用 AON_IOMuxManager,其他外设使用 IOMuxManager

常见问题

Q: 应用代码中需要调用 pinmux 函数吗?

不需要。 驱动初始化时会自动调用,应用层只需要使用设备 API 即可。

Q: 修改了 pinmux 配置后需要重新编译吗?

是的。 Pinmux 配置是板型的一部分,修改后需要重新编译整个项目。

Q: 如何确认我的 pinmux 配置是否正确?

  1. 仔细对照硬件原理图和芯片手册
  2. 参考 SDK 内置板型的配置示例
  3. 编译运行后测试对应外设功能是否正常

Q: 如果不使用某个外设,需要提供 pinmux 函数吗?

不需要。 如果不使用某个外设(如 SPI0只需在 Kconfig 中不使能对应的驱动即可:

# CONFIG_LISA_SPI is not set

这样驱动不会被编译,也不会调用对应的 pinmux 函数,不会产生链接错误。

Q: 可以在运行时动态改变引脚功能吗?

技术上可以再次调用 IOMuxManager_PinConfigure 来改变引脚功能,但不建议这样做因为可能导致外设状态混乱。Pinmux 配置应该在初始化阶段完成并保持不变。