中断操作三个步骤:
1、中断初始化
void intr_init(){
//configure PLIC
//cpu 0 accept all interrupts with priority above 0
plic_set_threshold(BSP_PLIC, BSP_PLIC_CPU_0, 0);
//enable SYSTEM_PLIC_USER_INTERRUPT_A_INTERRUPT rising edge interrupt
plic_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 interrupts
csr_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 false
int32_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 interrupts
while(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 interrupt
plic_release(BSP_PLIC, BSP_PLIC_CPU_0, claim);
}
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
中断处理
+关注
关注
0文章
94浏览量
10967 -
RISC-V
+关注
关注
45文章
2271浏览量
46131
发布评论请先 登录
相关推荐
risc-v的mcu对RTOS兼容性如何
RISC-V的MCU对RTOS(实时操作系统)的兼容性主要取决于多个因素,包括RTOS的版本、RISC-V指令集的实现、以及芯片制造商提供的支持。以下是关于RISC-V的MCU对RTO
发表于 05-27 16:26
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
RISC-V的异常处理机制复杂吗?
RISC-V对于异常处理的实现复杂吗?应该没有ARM Cortex系列的那样复杂,有NVIC或GIC中断控制器吧。那么它执行异常处理的流程是怎样的?
发表于 04-21 15:00
Sifive Learn Inventor基础之GPIO 按键中断 RISC-V
Sifive Learn Inventor 基础之gpio 按键中断Sifive Learn Inventor是Sifive的一款基于RISC-V内核的开发板,具体见官网的Hifive Rev b
发表于 12-20 19:06
•1次下载
MCU如何处理中断?中断处理过程包括哪些步骤?
当MCU接收到一个中断信号时,它会暂停当前正在执行的任务,保存现场,然后跳转到预设的中断处理程序(Interrupt Service Routine, ISR)去处理这个
评论