# 开发指导
- [接口说明](#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!.
```