文档首页/ LiteOS/ 内核/ 中断/ 开发指导
更新时间:2021-07-08 GMT+08:00
分享

开发指导

使用场景

当有中断请求产生时,CPU暂停当前的任务,转而去响应外设请求。根据需要,用户通过中断申请,注册中断处理程序,可以指定CPU响应中断请求时所执行的具体操作。

功能

Huawei LiteOS 的中断模块为用户提供下面几种功能,接口详细信息可以查看API参考。

功能分类

接口名

描述

创建和删除中断

LOS_HwiCreate

中断创建,注册中断号、中断触发模式、中断优先级、中断处理程序。中断被触发时,handleIrq会调用该中断处理程序

LOS_HwiDelete

删除中断

打开和关闭所有中断

LOS_IntUnLock

打开当前处理器所有中断响应

LOS_IntLock

关闭当前处理器所有中断响应

LOS_IntRestore

恢复到使用LOS_IntLock关闭所有中断之前的状态

使能和屏蔽指定中断

LOS_HwiDisable

中断屏蔽(通过设置寄存器,禁止CPU响应该中断)

LOS_HwiEnable

中断使能(通过设置寄存器,允许CPU响应该中断)

设置中断优先级

LOS_HwiSetPriority

设置中断优先级

触发中断

LOS_HwiTrigger

触发中断(通过写中断控制器的相关寄存器模拟外部中断)

清除中断寄存器状态

LOS_HwiClear

清除中断号对应的中断寄存器的状态位,此接口依赖中断控制器版本,非必需

核间中断

LOS_HwiSendIpi

向指定核发送核间中断,此接口依赖中断控制器版本和cpu架构,该函数仅在SMP模式下支持

设置中断亲和性

LOS_HwiSetAffinity

设置中断的亲和性,即设置中断在固定核响应(该函数仅在SMP模式下支持)

HWI错误码

对存在失败可能性的操作返回对应的错误码,以便快速定位错误原因。

序号

定义

实际数值

描述

参考解决方案

1

OS_ERRNO_HWI_NUM_INVALID

0x02000900

创建或删除中断时,传入了无效中断号

检查中断号,给定有效中断号

2

OS_ERRNO_HWI_PROC_FUNC_NULL

0x02000901

创建中断时,传入的中断处理程序指针为空

传入非空中断处理程序指针

3

OS_ERRNO_HWI_CB_UNAVAILABLE

0x02000902

无可用中断资源

暂不使用该错误码

4

OS_ERRNO_HWI_NO_MEMORY

0x02000903

创建中断时,出现内存不足的情况

增大动态内存空间,有两种方式可以实现:

  • 设置更大的系统动态内存池,配置项为OS_SYS_MEM_SIZE
  • 释放一部分动态内存

5

OS_ERRNO_HWI_ALREADY_CREATED

0x02000904

创建中断时,发现要注册的中断号已经创建

对于非共享中断号的情况,检查传入的中断号是否已经被创建;对于共享中断号的情况,检查传入中断号的链表中是否已经有匹配函数参数的设备ID

6

OS_ERRNO_HWI_PRIO_INVALID

0x02000905

创建中断时,传入的中断优先级无效

传入有效中断优先级。优先级有效范围依赖于硬件,外部可配

7

OS_ERRNO_HWI_MODE_INVALID

0x02000906

中断模式无效

传入有效中断模式[0,1]

8

OS_ERRNO_HWI_FASTMODE_ALREADY_CREATED

0x02000907

创建硬中断时,发现要注册的中断号,已经创建为快速中断

暂不使用该错误码

9

OS_ERRNO_HWI_INTERR

0x02000908

接口在中断中调用

暂不使用该错误码

10

OS_ERRNO_HWI_SHARED_ERROR

0x02000909

创建中断时:发现hwiMode指定创建共享中断,但是未设置设备ID;或hwiMode指定创建非共享中断,但是该中断号之前已创建为共享中断;或配置LOSCFG_NO_SHARED_IRQ为yes,但是创建中断时,入参指定创建共享中断

删除中断时:设备号创建时指定为共享中断,删除时未设置设备ID,删除错误。

检查入参,创建时参数hwiMode与irqParam保持一致,hwiMode为0,表示不共享,此时irqParam应为NULL;当hwiMode为IRQF_SHARD时表示共享,irqParam需设置设备ID;LOSCFG_NO_SHARED_IRQ为YES时,即非共享中断模式下,只能创建非共享中断。删除中断时irqParam要与创建中断时的参数一样

11

OS_ERRNO_HWI_ARG_INVALID

0x0200090a

注册中断入参有误

暂不使用该错误码

12

OS_ERRNO_HWI_HWINUM_UNCREATE

0x0200090b

中断共享情况下,删除中断时,中断号对应的链表中,无法匹配到相应的设备ID

对于共享中断号的情况,检查传入中断号的链表中是否已经有匹配函数参数的设备ID

错误码定义见错误码简介。8~15位的所属模块为中断模块,值为0x09。

开发流程

  1. 执行make menuconfig命令,进入Kernel ---> Interrupt Management菜单,完成中断模块的配置。

    配置项

    含义

    取值范围

    默认值

    依赖

    LOSCFG_ARCH_INTERRUPT_PREEMPTION

    使能中断嵌套

    YES/NO

    NO

    ARMv8、RISC-V

    LOSCFG_IRQ_USE_STANDALONE_STACK

    使用独立中断栈

    YES/NO

    YES

    依赖核,某些平台可能没有此配置项

    LOSCFG_SHARED_IRQ

    使能中断共享

    YES/NO

    YES

    LOSCFG_PLATFORM_HWI_LIMIT

    最大中断使用数

    根据芯片手册适配

    根据芯片手册适配

    LOSCFG_HWI_PRIO_LIMIT

    可设置的中断优先级个数

    根据芯片手册适配

    根据芯片手册适配

  2. 调用中断创建接口LOS_HwiCreate创建中断。
  3. 如果是SMP模式,调用LOS_HwiSetAffinity设置中断的亲和性,否则直接进入步骤4。
  4. 调用LOS_HwiEnable接口使能指定中断。
  5. 调用LOS_HwiTrigger接口触发指定中断(该接口通过写中断控制器的相关寄存器模拟外部中断,一般的外设设备,不需要执行这一步)。
  6. 调用LOS_HwiDisable接口屏蔽指定中断,此接口根据实际情况使用,判断是否需要屏蔽中断。
  7. 调用LOS_HwiDelete接口删除指定中断,此接口根据实际情况使用,判断是否需要删除中断。

相关文档