中断操作三个步骤:
1、中断初始化
void intr_init(){//configure PLIC//cpu 0 accept all interrupts with priority above 0plic_set_threshold(BSP_PLIC, BSP_PLIC_CPU_0, 0);//enable SYSTEM_PLIC_USER_INTERRUPT_A_INTERRUPT rising edge interruptplic_set_enable(BSP_PLIC, BSP_PLIC_CPU_0, SYSTEM_PLIC_SYSTEM_AXI_A_INTERRUPT, 1);plic_set_priority(BSP_PLIC, SYSTEM_PLIC_SYSTEM_AXI_A_INTERRUPT, 1);//enable interrupts//Set the machine trap vector (../common/trap.S)csr_write(mtvec, trap_entry);//Enable external interruptscsr_set(mie, MIE_MEIE);csr_write(mstatus, MSTATUS_MPP | MSTATUS_MIE);}
其中包括设置中断门限。相应中断的使能,以及中断的优先级,数字越大,优先级越高。然后还有中断入中数据的保存。
2、trap处理
void trap(){int32_t mcause = csr_read(mcause);//Interrupt if true, exception if falseint32_t interrupt = mcause < 0;int32_t cause = mcause & 0xF;if(interrupt){switch(cause){case CAUSE_MACHINE_EXTERNAL: axiInterrupt(); break;default: crash(); break;}} else {crash();}}
3、用户中断处理
void axiInterrupt(){uint32_t claim;//While there is pending interruptswhile(claim = plic_claim(BSP_PLIC, BSP_PLIC_CPU_0)){switch(claim){case SYSTEM_PLIC_SYSTEM_AXI_A_INTERRUPT:bsp_print("Entered AXI Interrupt Routine, Passed!");break;default: crash(); break;}//unmask the claimed interruptplic_release(BSP_PLIC, BSP_PLIC_CPU_0, claim);}}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
中断处理
+关注
关注
0文章
96浏览量
11524 -
RISC-V
+关注
关注
49文章
2985浏览量
53709
发布评论请先 登录
相关推荐
热点推荐
易灵思Sapphire SoC中RISC-V平台级中断控制器深度解析
随着 RISC -V处理器在 FPGA 领域的广泛应用,易灵思 FPGA 的 Sapphire RISC-V 内核凭借软硬核的灵活支持,为开发者提供多样选择。本文深入探讨 Sapph
RISC-V架构及MRS开发环境回顾
—— CH32V103系列MCU。作为长久以来对RISC-V架构关注和研究的成果, RISC-V3A处理器,支持IMAC指令子集,内嵌了PFIC中断
发表于 12-16 23:08
如何在RISC-V处理器上使用FreeRTOS?
FreeRTOS内核调用哪个外部中断处理程序,设置外部中断handler的名称步骤如下:1 加载RISC-V芯片供应商提供的外部
发表于 11-29 15:54
学习RISC-V入门 基于RISC-V架构的开源处理器及SoC研究
RISC-V架构的开源处理器与SoC。1 RISC-V简介1.1 RISC-V的基本设计RISC-V是一
发表于 07-27 18:09
FreeRTOS与RISC-V——适用于RISC-V的FreeRTOS概述
1.1简介FreeRTOS中面向RISC-V的接口是易于拓展的,其提供了一系列基本的接口,用于操作适用于所有RISC-V实现中的通用寄存器,以及一系列的宏来处理特定的硬件实现中涉及到的
发表于 04-09 09:26
Sifive Learn Inventor基础之GPIO 按键中断 RISC-V
Sifive Learn Inventor 基础之gpio 按键中断Sifive Learn Inventor是Sifive的一款基于RISC-V内核的开发板,具体见官网的Hifive Rev b
发表于 12-20 19:06
•1次下载
RISC-V高性能计算需要要解决的三个问题
尤其是在 2022 年,RISC-V 的发展势头极为强劲,RISC-V 处理器核出货量突破 100 亿颗。
发表于 02-15 11:53
•1073次阅读
MCU如何处理中断?中断处理过程包括哪些步骤?
当MCU接收到一个中断信号时,它会暂停当前正在执行的任务,保存现场,然后跳转到预设的中断处理程序(Interrupt Service Routine, ISR)去处理这个
RISC-V怎么实现核间中断?核心本地中断控制器(CLINT)深度解析
全称为Core Local Interruptor(核心本地中断控制器),是 RISC-V 特权架构规范(Privileged Architecture Specification)中明确定义的内建
RISC-V的中断处理 中断操作三个步骤
评论