Irq模块用户手册
大约 9 分钟约 2797 字2025/12/26
Irq模块用户手册
目录
1. 简介
本模块提供了对 中断控制器 的抽象接口,支持以下功能:
- 初始化: 通过
HLI_Irq_Init函数配置中断模块,包括设置中断优先级分组以及各个中断源的抢占优先级和子优先级。 - 使能/禁止中断: 通过
HLI_Irq_SetIntrStatus函数可以使能或禁止特定的中断源。 - 反初始化: 通过
HLI_Irq_DeInit函数可以禁止所有在HLI_Irq_Init中配置的中断。 - 全局中断控制: 提供了
HLI_ENABLE_INTERRUPT()和HLI_DISABLE_INTERRUPT()宏来全局使能和禁止中断。
1.1 支持的设备
当前软件适用于以下芯片:
- KF32A158xxxSF
1.2 名词及缩写
| 缩写 | 解释 |
|---|---|
| MCU | 微控制器 |
| ISR | 中断服务例程 |
| IRQ | 中断请求 |
2. 文件结构
| 文件名称 | 描述 |
|---|---|
| kf32axxx_hli_irq.c | 此文件包含irq驱动程序的通用功能 |
| kf32axxx_hli_irq.h | 此头文件输出irq驱动程序的宏、类型定义和函数原型 |
| kf32axxx_hli_irq_cfg.h | 此头文件输出irq驱动程序的配置相关定义 |
| kf32axxx_hli_irq_Lcfg.c | 此头文件输出irq驱动程序的配置相关原型 |
| kf32axxx_hli_irq_Lcfg.h | 此头文件输出irq驱动程序的配置相关定义 |
3. 数据结构
3.1 数据类型
3.1.1 宏定义
中断优先级分组
hdy 解释 INTR_PREEMP_0 抢占优先级为 3 位, 子优先级为 1 位。抢占优先级范围:0 - 7,子优先级范围:0 - 1 INTR_PREEMP_1 抢占优先级为 2 位, 子优先级为 2 位。抢占优先级范围:0 - 3,子优先级范围:0 - 3 INTR_PREEMP_2 抢占优先级为 1 位, 子优先级为 3 位。抢占优先级范围:0 - 1,子优先级范围:0 - 7 INTR_PREEMP_3 抢占优先级为 0 位, 子优先级为 4 位。抢占优先级范围:0,子优先级范围:0 - 15
3.1.2 枚举
中断类型
枚举值 解释 HLI_SYSTICK_IRQN SYSTICK 中断类型 HLI_WWDT_IRQN WWDT 中断类型 HLI_EINT16_IRQN EINT16 中断类型 HLI_PA_IRQN PA 中断类型 HLI_PB_IRQN PB 中断类型 HLI_PC_IRQN PC 中断类型 HLI_PD_IRQN PD 中断类型 HLI_PE_IRQN PE 中断类型 HLI_PF_IRQN PF 中断类型 HLI_PX_IRQN PX 中断类型 HLI_T1_IRQN T1 中断类型 HLI_T3_IRQN T3 中断类型 HLI_T5_IRQN T5 中断类型 HLI_T6_IRQN T6 中断类型 HLI_CANFD6MB15TO0_IRQN CANFD6MB15TO0 中断类型 HLI_CANFD6MB31TO16_IRQN CANFD6MB31TO16 中断类型 HLI_CANFD6MB47TO32_IRQN CANFD6MB47TO32 中断类型 HLI_CANFD6MB63TO48_IRQN CANFD6MB63TO48 中断类型 HLI_T14_IRQN T14 中断类型 HLI_RNG_IRQN RNG 中断类型 HLI_CANFD7MB15TO0_IRQN CANFD7MB15TO0 中断类型 HLI_CANFD7MB31TO16_IRQN CANFD7MB31TO16 中断类型 HLI_ADC0_IRQN ADC0 中断类型 HLI_ADC1_IRQN ADC1 中断类型 HLI_CANFD6BUS_IRQN CANFD6BUS 中断类型 HLI_T11_IRQN T11 中断类型 HLI_T0_IRQN T0 中断类型 HLI_DMA0_IRQN DMA0 中断类型 HLI_CMP_IRQN CMP 中断类型 HLI_USART0_IRQN USART0 中断类型 HLI_USART1_IRQN USART1 中断类型 HLI_SPI0_IRQN SPI0 中断类型 HLI_SPI1_IRQN SPI1 中断类型 HLI_DMA1_IRQN DMA1 中断类型 HLI_EINT19TO17_IRQN EINT19TO17 中断类型 HLI_CANFD6_IRQN CANFD6 中断类型 HLI_CANFD7_IRQN CANFD7 中断类型 HLI_CANFD7MB47TO32_IRQN CANFD7MB47TO32 中断类型 HLI_CANFD7MB63TO48_IRQN CANFD7MB63TO48 中断类型 HLI_EINT31TO20_IRQN EINT31TO20 中断类型 HLI_CMU_IRQN CMU 中断类型 HLI_OSC_IRQN OSC 中断类型 HLI_CLK_IRQN CLK 中断类型 HLI_IIC0_IRQN IIC0 中断类型 HLI_IIC1_IRQN IIC1 中断类型 HLI_IIC2_IRQN IIC2 中断类型 HLI_T12_IRQN T12 中断类型 HLI_T2_IRQN T2 中断类型 HLI_T4_IRQN T4 中断类型 HLI_T13_IRQN T13 中断类型 HLI_USART2_IRQN USART2 中断类型 HLI_T16_IRQN T16 中断类型 HLI_USART6_IRQN USART6 中断类型 HLI_SPI2_IRQN SPI2 中断类型 HLI_CANFD7BUS_IRQN CANFD7BUS 中断类型 HLI_WKP_IRQN WKP 中断类型 HLI_CANFD8BUS_IRQN CANFD8BUS 中断类型 HLI_T20_IRQN T20 中断类型 HLI_USART3_IRQN USART3 中断类型 HLI_SHA_IRQN SHA 中断类型 HLI_RSA_IRQN RSA 中断类型 HLI_FIRSTKPROG_IRQN FIRSTKPROG 中断类型 HLI_FIRSTKSERA_IRQN FIRSTKSERA 中断类型 HLI_CANFD8MB15TO0_IRQN CANFD8MB15TO0 中断类型 HLI_CANFD8MB31TO16_IRQN CANFD8MB31TO16 中断类型 HLI_CANFD8MB47TO32_IRQN CANFD8MB47TO32 中断类型 HLI_CANFD8MB63TO48_IRQN CANFD8MB63TO48 中断类型 HLI_CANFD8_IRQN CANFD8 中断类型 HLI_CANFD9_IRQN CANFD9 中断类型 HLI_T31_IRQN T31 中断类型 HLI_T32_IRQN T32 中断类型 HLI_T33_IRQN T33 中断类型 HLI_T36_IRQN T36 中断类型 HLI_T9_IRQN T9 中断类型 HLI_T10_IRQN T10 中断类型 HLI_CANFD9BUS_IRQN CANFD9BUS 中断类型 HLI_STOPWATCHTICK_IRQN STOPWATCHTICK 中断类型 HLI_T21_IRQN T21 中断类型 HLI_FLASHABUSY_IRQN FLASHABUSY 中断类型 HLI_FLASHBBUSY_IRQN FLASHBBUSY 中断类型 HLI_SRAMECC_IRQN SRAMECC 中断类型 HLI_DRAMECC_IRQN DRAMECC 中断类型 HLI_CACHEECC_IRQN CACHEECC 中断类型 HLI_FLASHERR_IRQN FLASHERR 中断类型 HLI_ISMU_IRQN ISMU 中断类型 HLI_CANFD9MB15TO0_IRQN CANFD9MB15TO0 中断类型 HLI_CANFD9MB31TO16_IRQN CANFD9MB31TO16 中断类型 HLI_CANFD9MB47TO32_IRQN CANFD9MB47TO32 中断类型 HLI_CANFD9MB63TO48_IRQN CANFD9MB63TO48 中断类型 HLI_AES_IRQN AES 中断类型 HLI_BUSERR_IRQN BUSERR 中断类型 HLI_IRQ_MAX - 注
以上枚举值适用于 KF32A158xxxSF系列。
3.1.3 类型定义
无。
3.2 配置项说明
静态配置
静态配置在
kf32axxx_hli_irq_cfg.h文件中通过宏定义完成,用于使能或禁止各个模块的统一中断。宏定义 解释 使用说明 WWDT_UNIFIED_INTERRUPT WWDT 中断 使用时开启 EINT16_UNIFIED_INTERRUPT EINT16 中断 关闭 PA_UNIFIED_INTERRUPT PA 中断 使用时开启 PB_UNIFIED_INTERRUPT PB 中断 使用时开启 PC_UNIFIED_INTERRUPT PC 中断 使用时开启 PD_UNIFIED_INTERRUPT PD 中断 使用时开启 PE_UNIFIED_INTERRUPT PE 中断 使用时开启 PF_UNIFIED_INTERRUPT PF 中断 使用时开启 PX_UNIFIED_INTERRUPT PX 中断 使用时开启 T1_UNIFIED_INTERRUPT T1 中断 使用时开启 T3_UNIFIED_INTERRUPT T3 中断 使用时开启 T5_UNIFIED_INTERRUPT T5 中断 使用时开启 T6_UNIFIED_INTERRUPT T6 中断 使用时开启 CANFD6MB15TO0_UNIFIED_INTERRUPT CANFD6MB15TO0 中断 使用时开启 CANFD6MB31TO16_UNIFIED_INTERRUPT CANFD6MB31TO16 中断 使用时开启 CANFD6MB47TO32_UNIFIED_INTERRUPT CANFD6MB47TO32 中断 使用时开启 CANFD6MB63TO48_UNIFIED_INTERRUPT CANFD6MB63TO48 中断 使用时开启 T14_UNIFIED_INTERRUPT T14 中断 使用时开启 RNG_UNIFIED_INTERRUPT RNG 中断 使用时开启 CANFD7MB15TO0_UNIFIED_INTERRUPT CANFD7MB15TO0 中断 使用时开启 CANFD7MB31TO16_UNIFIED_INTERRUPT CANFD7MB31TO16 中断 使用时开启 ADC0_UNIFIED_INTERRUPT ADC0 中断 使用时开启 ADC1_UNIFIED_INTERRUPT ADC1 中断 使用时开启 CANFD6BUS_UNIFIED_INTERRUPT CANFD6BUS 中断 使用时开启 T11_UNIFIED_INTERRUPT T11 中断 关闭 T0_UNIFIED_INTERRUPT T0 中断 使用时开启 DMA0_UNIFIED_INTERRUPT DMA0 中断 建议开启 CMP_UNIFIED_INTERRUPT CMP 中断 关闭 USART0_UNIFIED_INTERRUPT USART0 中断 使用时开启 USART1_UNIFIED_INTERRUPT USART1 中断 使用时开启 SPI0_UNIFIED_INTERRUPT SPI0 中断 使用时开启 SPI1_UNIFIED_INTERRUPT SPI1 中断 使用时开启 DMA1_UNIFIED_INTERRUPT DMA1 中断 建议开启 EINT19TO17_UNIFIED_INTERRUPT EINT19TO17 中断 使用时开启 CANFD6GEN_UNIFIED_INTERRUPT CANFD6 中断 使用时开启 CANFD7GEN_UNIFIED_INTERRUPT CANFD7 中断 使用时开启 CANFD7MB47TO32_UNIFIED_INTERRUPT CANFD7MB47TO32 中断 使用时开启 CANFD7MB63TO48_UNIFIED_INTERRUPT CANFD7MB63TO48 中断 使用时开启 EINT31TO20_UNIFIED_INTERRUPT EINT31TO20 中断 关闭 CMU_UNIFIED_INTERRUPT CMU 中断 使用时开启 OSC_UNIFIED_INTERRUPT OSC 中断 使用时开启 CLK_UNIFIED_INTERRUPT CLK 中断 使用时开启 IIC0_UNIFIED_INTERRUPT IIC0 中断 使用时开启 IIC1_UNIFIED_INTERRUPT IIC1 中断 使用时开启 IIC2_UNIFIED_INTERRUPT IIC2 中断 使用时开启 T12_UNIFIED_INTERRUPT T12 中断 关闭 T2_UNIFIED_INTERRUPT T2 中断 使用时开启 T4_UNIFIED_INTERRUPT T4 中断 使用时开启 T13_UNIFIED_INTERRUPT T13 中断 关闭 USART2_UNIFIED_INTERRUPT USART2 中断 使用时开启 T16_UNIFIED_INTERRUPT T16 中断 关闭 USART6_UNIFIED_INTERRUPT USART6 中断 使用时开启 SPI2_UNIFIED_INTERRUPT SPI2 中断 使用时开启 CANFD7BUS_UNIFIED_INTERRUPT CANFD7BUS 中断 使用时开启 WKP_UNIFIED_INTERRUPT WKP 中断 关闭 CANFD8BUS_UNIFIED_INTERRUPT CANFD8BUS 中断 使用时开启 T20_UNIFIED_INTERRUPT T20 中断 使用时开启 USART3_UNIFIED_INTERRUPT USART3 中断 使用时开启 SHA_UNIFIED_INTERRUPT SHA 中断 使用时开启 RSA_UNIFIED_INTERRUPT RSA 中断 使用时开启 FIRSTKPROG_UNIFIED_INTERRUPT FIRSTKPROG 中断 使用时开启 FIRSTKSERA_UNIFIED_INTERRUPT FIRSTKSERA 中断 使用时开启 CANFD8MB15TO0_UNIFIED_INTERRUPT CANFD8MB15TO0 中断 使用时开启 CANFD8MB31TO16_UNIFIED_INTERRUPT CANFD8MB31TO16 中断 使用时开启 CANFD8MB47TO32_UNIFIED_INTERRUPT CANFD8MB47TO32 中断 使用时开启 CANFD8MB63TO48_UNIFIED_INTERRUPT CANFD8MB63TO48 中断 使用时开启 CANFD8GEN_UNIFIED_INTERRUPT CANFD8 中断 使用时开启 CANFD9GEN_UNIFIED_INTERRUPT CANFD9 中断 使用时开启 T31_UNIFIED_INTERRUPT T31 中断 关闭 T32_UNIFIED_INTERRUPT T32 中断 关闭 T33_UNIFIED_INTERRUPT T33 中断 关闭 T36_UNIFIED_INTERRUPT T36 中断 关闭 T9_UNIFIED_INTERRUPT T9 中断 使用时开启 T10_UNIFIED_INTERRUPT T10 中断 使用时开启 CANFD9BUS_UNIFIED_INTERRUPT CANFD9BUS 中断 使用时开启 STOPWATCHTICK_UNIFIED_INTERRUPT STOPWATCHTICK 中断 使用时开启 T21_UNIFIED_INTERRUPT T21 中断 使用时开启 FLASHABUSY_UNIFIED_INTERRUPT FLASHABUSY 中断 使用时开启 FLASHBBUSY_UNIFIED_INTERRUPT FLASHBBUSY 中断 使用时开启 SRAMECC_UNIFIED_INTERRUPT SRAMECC 中断 使用时开启 DRAMECC_UNIFIED_INTERRUPT DRAMECC 中断 使用时开启 CACHEECC_UNIFIED_INTERRUPT CACHEECC 中断 使用时开启 FLASHERR_UNIFIED_INTERRUPT FLASHERR 中断 使用时开启 ISMU_UNIFIED_INTERRUPT ISMU 中断 使用时开启 CANFD9MB15TO0_UNIFIED_INTERRUPT CANFD9MB15TO0 中断 使用时开启 CANFD9MB31TO16_UNIFIED_INTERRUPT CANFD9MB31TO16 中断 使用时开启 CANFD9MB47TO32_UNIFIED_INTERRUPT CANFD9MB47TO32 中断 使用时开启 CANFD9MB63TO48_UNIFIED_INTERRUPT CANFD9MB63TO48 中断 使用时开启 AES_UNIFIED_INTERRUPT AES 中断 使用时开启 BUSERR_UNIFIED_INTERRUPT BUSERR 中断 使用时开启 注
以上宏定义适用于 KF32A158xxxSF系列。
中断优先级配置 (HLI_PriorityType)
成员 解释 取值范围 Preemption_Priority 抢占优先级 取决于优先级分组,数值越小,优先级越高。 Sub_Priority 子优先级 取决于优先级分组,数值越小,优先级越高。 Irq 配置 (HLI_Irq_ConfigType)
成员 解释 取值范围 PriorityGroup 中断优先级分组模式 参考中断优先级分组。 XXX_Priority对应外设中断优先级 指向 HLI_PriorityType类型的变量。
4. 驱动函数
4.1 函数接口
4.1.1 HLI_Irq_Init
| Name | Description |
|---|---|
| 函数名称 | HLI_Irq_Init |
| 语法 | void HLI_Irq_Init(const HLI_Irq_ConfigType *IrqConfigPtr) |
| 同步/异步 | 同步 |
| 重入性 | 不可重入 |
| 形参(输入) | IrqConfigPtr: 指向Irq配置信息的指针 |
| 返回值 | 无 |
| 描述 | 配置中断优先级分组和各外设中断优先级,支持多个中断源。 |
| 注意事项 | IrqConfigPtr 不能为空;仅配置启用的中断源。 |
4.1.2 HLI_Irq_SetIntrStatus
| Name | Description |
|---|---|
| 函数名称 | HLI_Irq_SetIntrStatus |
| 语法 | bool HLI_Irq_SetIntrStatus(HLI_Irq_NumType IrqNum, bool Status) |
| 同步/异步 | 同步 |
| 重入性 | 不可重入 |
| 形参(输入) | IrqNum: 中断号 |
| 形参(输入) | Status: true 为使能, false 为关闭 |
| 返回值 | true: 设置成功 |
| 返回值 | false: 设置失败 |
| 描述 | 使能或禁止指定的中断。 |
| 注意事项 | 无 |
4.1.3 HLI_Irq_DeInit
| Name | Description |
|---|---|
| 函数名称 | HLI_Irq_DeInit |
| 语法 | void HLI_Irq_DeInit(void) |
| 同步/异步 | 同步 |
| 重入性 | 可重入 |
| 形参(输入) | 无 |
| 返回值 | 无 |
| 描述 | 反初始化 Irq 模块,恢复默认中断配置。 |
| 注意事项 | 仅反初始化已配置的中断源。 |
4.1.4 HLI_ENABLE_INTERRUPT
| Name | Description |
|---|---|
| 函数名称 | HLI_ENABLE_INTERRUPT |
| 语法 | #define HLI_ENABLE_INTERRUPT() do{__asm volatile("ENI");__asm volatile("NOP");} while (0) |
| 同步/异步 | 同步 |
| 重入性 | 可重入 |
| 形参(输入) | 无 |
| 返回值 | 无 |
| 描述 | 使能全局中断。 |
| 注意事项 | 此功能为宏定义, 非一般函数。 |
4.1.5 HLI_DISABLE_INTERRUPT
| Name | Description |
|---|---|
| 函数名称 | HLI_DISABLE_INTERRUPT |
| 语法 | #define HLI_DISABLE_INTERRUPT() do{__asm volatile("DSI");__asm volatile("NOP");} while (0) |
| 同步/异步 | 同步 |
| 重入性 | 可重入 |
| 形参(输入) | 无 |
| 返回值 | 无 |
| 描述 | 关闭全局中断。 |
| 注意事项 | 此功能为宏定义, 非一般函数。 |
4.2 中断回调
Irq 模块本身不提供中断回调函数。用户应在相应外设的驱动中注册和实现回调。
5. 使用示例
注
示例中使用的参数仅用作示例演示,应用时以实际为准。
1. 基本初始化与配置
此示例展示如何初始化 Irq 模块并设置 DMA 中断优先级。
6. 限制与假设
- 优先级分组固定为 4 种模式,不支持自定义分组位宽。
7. 变更记录
| 版本 | 时间 | 变更记录 |
|---|---|---|
| v1.0 | 2025.11.21 | 新增初版文档 |
