# 开发指导 - [接口说明](#section158501652121514) - [开发流程](#section11841123033618) - [编程实例](#section460018317164) - [结果验证](#section1048572415182) 当产生中断请求时,CPU暂停当前的任务,转而去响应外设请求。用户可以根据需要注册对应的中断处理程序,指定CPU响应中断请求时所执行的具体操作。 ## 接口说明 OpenHarmony LiteOS-M内核的中断模块提供下面几种功能,接口详细信息可以查看API参考。 **表 1** 中断模块接口

功能分类

接口名

描述

创建、删除中断

HalHwiCreate

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

HalHwiDelete

根据指定的中断号,删除中断。

打开、关闭中断

LOS_IntUnLock

开中断,使能当前处理器所有中断响应。

LOS_IntLock

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

LOS_IntRestore

恢复到使用LOS_IntLock、LOS_IntUnLock操作之前的中断状态。

## 开发流程 1. 调用中断创建接口HalHwiCreate创建中断。 2. 调用TestHwiTrigger接口触发指定中断(该接口在测试套中定义,通过写中断控制器的相关寄存器模拟外部中断,一般的外设设备,不需要执行这一步)。 3. 调用HalHwiDelete接口删除指定中断,此接口根据实际情况使用,判断是否需要删除中断。 >![](public_sys-resources/icon-note.gif) **说明:** >- 根据具体硬件,配置支持的最大中断数及可设置的中断优先级个数。 >- 中断处理程序耗时不能过长,否则会影响CPU对中断的及时响应。 >- 中断响应过程中不能直接、间接执行引起调度的LOS\_Schedule等函数。 >- 中断恢复LOS\_IntRestore\(\)的入参必须是与之对应的LOS\_IntLock\(\)的返回值(即关中断之前的CPSR值)。Cortex-M系列处理器中0-15中断为内部使用,因此不建议用户去申请和创建。 ## 编程实例 本实例实现如下功能: 1. 创建中断。 2. 触发中断。 3. 删除中断。 代码实现如下,演示如何创建中断和删除中断,当指定的中断号HWI\_NUM\_TEST产生中断时,会调用中断处理函数: ``` #include "los_interrupt.h" /*创建中断*/ #define HWI_NUM_TEST 7 STATIC VOID HwiUsrIrq(VOID) { printf("in the func HwiUsrIrq \n"); } static UINT32 Example_Interrupt(VOID) { UINT32 ret; HWI_PRIOR_T hwiPrio = 3; HWI_MODE_T mode = 0; HWI_ARG_T arg = 0; /*创建中断*/ ret = HalHwiCreate(HWI_NUM_TEST, hwiPrio, mode, (HWI_PROC_FUNC)HwiUsrIrq, arg); if(ret == LOS_OK){ printf("Hwi create success!\n"); } else { printf("Hwi create failed!\n"); return LOS_NOK; } /* 延时50个Ticks, 当有硬件中断发生时,会调用函数HwiUsrIrq*/ LOS_TaskDelay(50); /*删除中断*/ ret = HalHwiDelete(HWI_NUM_TEST); if(ret == LOS_OK){ printf("Hwi delete success!\n"); } else { printf("Hwi delete failed!\n"); return LOS_NOK; } return LOS_OK; } ``` ### 结果验证 编译运行得到的结果为: ``` Hwi create success! Hwi delete success!. ```