7.5.15 ICU 使用指南
ICU 模块是基于 S100芯片解决方案的一个软件子模块,在整个系统属于基础服务软件。在 S100整体设计中,ICU 软件主要是对系统内有输入捕获属 性的硬件进行软件抽象并统一管理,硬件层 IP 涉及到 PWM 和 GPIO 两个硬件。本文重点介绍 GPIO 中断的配置和实现。
GPIO 中断使用指南
S100 MCU 中,GPIO 共有四个 IO 组,分别是3个 GPIO0,GPIO1,GPIO2,GPIO_AON。其中,前三组共计提供88个 Pin,而 GPIO_AON 组则提供12个 Pin。该部分可参考 mcu/Config/McalCdd/gen_s100_sip_B_mcu1/Port/src/Port_PBcfg.c 。所有的 Pin 支持的中断触发模式包括:上升沿、下降沿、双边沿以及高/低电平触发。
| ISR Function | IRQ | IRQ Define | Description |
|---|---|---|---|
| Gpio0_ExtIsr | 68 | MCUSYS_GPIO0_INTR | Gpio Mode |
| Gpio1_ExtIsr | 69 | MCUSYS_GPIO1_INTR | Gpio Mode |
| Gpio2_ExtIsr | 70 | MCUSYS_GPIO2_INTR | Gpio Mode |
| Gpio3_ExtIsr | 361 | AON_WAKEUP_GPIO_INTR | Gpio Mode |
Port 配置
S100 MCU 上的每个 Pin 支持至少一个功能,因此在使用 GPIO 中断之前需 要通过 Port 子系统配置 Pin 的功能和属性,也就是重定义过程。以 GPIO_MCU[20] 和 GPIO_MCU[21] 为例子,这两个 Pin 的功能如下:
| FUNC0 | IO TYPE0 | FUNC1 | IO TYPE1 | FUNC2 | IO TYPE2 | FUNC3 | IO TYPE3 |
|---|---|---|---|---|---|---|---|
| SPI3_CSN0 | O | DEBUG_OUT5 | O | TRC_CTL | O | GPIO_MCU[20] | IO |
| SPI3_CSN1 | IO | PPS_IN0 | I | TRC_CLK | O | GPIO_MCU[21] | IO |
需要将两个 Pin 配置为 FUNC3,即 GPIO 模式,关于 Port 的介绍和使用可以查阅 Port使用指南 和 Port开发指南 这两个章节。具体的配置文件为 mcu/Config/McalCdd/gen_s100_sip_B_mcu1/Port/src/Port_PBcfg.c。
static const Port_Lld_PinConfigType Port_McuPinConfigs[PORT_MCU_MAX_NUM]=
{
...
/* Pin Id, Pin name, IsUsed, ModeChang, SchmittTriger, InputEnable, IsUsedGpio, DirChang, PinMode, Config Type, Pull Type, Drive Strength, GpioDir, GpioData*/
{(uint8)20, "SPI3_CSN0", (boolean)TRUE, {(boolean)TRUE, (boolean)FALSE, (boolean)TRUE, (boolean)TRUE, (boolean)FALSE, GPIO, PORT_PIN_CONFIG_TYPE0, PORT_PULL_UP, PORT_DRIVE_DEFAULT, PORT_PIN_DIR_IN, PORT_PIN_LEVEL_LOW}},
/* Pin Id, Pin name, IsUsed, ModeChang, SchmittTriger, InputEnable, IsUsedGpio, DirChang, PinMode, Config Type, Pull Type, Drive Strength, GpioDir, GpioData*/
{(uint8)21, "PWR_SHDN_N", (boolean)TRUE, {(boolean)TRUE, (boolean)FALSE, (boolean)TRUE, (boolean)TRUE, (boolean)FALSE, GPIO, PORT_PIN_CONFIG_TYPE0, PORT_PULL_UP, PORT_DRIVE_DEFAULT, PORT_PIN_DIR_IN, PORT_PIN_LEVEL_LOW}},
...
}
ICU 配置
ICU 文件列表:
- mcu/McalCdd/Icu/src/Icu_Lld_Gpio.c
- mcu/McalCdd/Icu/src/Icu_Lld.c
- mcu/McalCdd/Icu/src/Icu.c
- mcu/McalCdd/Icu/inc/Icu_Lld_Gpio.h
- mcu/McalCdd/Icu/inc/Icu_Lld.h
- mcu/McalCdd/Icu/inc/Icu_Types.h
- mcu/McalCdd/Icu/inc/Icu.h
GPIO 中断功能由 ICU 统一管理,其引脚的详细属性(如中断类型、回调函数等)均需通过 ICU 配置。具体的配置文件为 mcu/Config/McalCdd/gen_s100_sip_B_mcu1/Icu/src/Icu_PBCfg.c ,通过修改 Icu_ConfigType 、 Icu_Lld_IpConfigType 、 Gpio_Icu_IpConfigType、 Icu_Lld_ChannelConfigType 、 Icu_ChannelConfigType 、 Gpio_Icu_ChannelConfigType 等结构体实现。 其中, Gpio_Icu_ChannelConfigType 是关键结构,负责定义中断回调函数、触发类型及中断屏蔽位等。