OpenHarmony LiteOS-M内核中断编程实例学习

举报
zhushy 发表于 2021/11/25 17:14:47 2021/11/25
【摘要】 开发指导接口说明开发流程编程实例结果验证当产生中断请求时,CPU暂停当前的任务,转而去响应外设请求。用户可以根据需要注册对应的中断处理程序,指定CPU响应中断请求时所执行的具体操作。 接口说明OpenHarmony LiteOS-M内核的中断模块提供下面几种功能,接口详细信息可以查看API参考。表 1 中断模块接口功能分类接口名描述创建、删除中断HalHwiCreate中断创建,注册中断...

开发指导

当产生中断请求时,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接口删除指定中断,此接口根据实际情况使用,判断是否需要删除中断。

说明:

  • 根据具体硬件,配置支持的最大中断数及可设置的中断优先级个数。
  • 中断处理程序耗时不能过长,否则会影响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!
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。