中斷操作三個(gè)步驟:
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);}
其中包括設(shè)置中斷門(mén)限。相應(yīng)中斷的使能,以及中斷的優(yōu)先級(jí),數(shù)字越大,優(yōu)先級(jí)越高。然后還有中斷入中數(shù)據(jù)的保存。
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);}}
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
中斷處理
+關(guān)注
關(guān)注
0文章
96瀏覽量
11480 -
RISC-V
+關(guān)注
關(guān)注
48文章
2886瀏覽量
52992
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
Zynq中斷的三個(gè)部分:SGI、PPI、SPI
Zynq中斷大致可分為三個(gè)部分 第一部分為SGI,軟件生成的中斷,共16個(gè)端口; 第二部分為PPI,CPU私有外設(shè)中斷,有5
易靈思Sapphire SoC中RISC-V平臺(tái)級(jí)中斷控制器深度解析
隨著 RISC -V處理器在 FPGA 領(lǐng)域的廣泛應(yīng)用,易靈思 FPGA 的 Sapphire RISC-V 內(nèi)核憑借軟硬核的靈活支持,為開(kāi)發(fā)者提供多樣選擇。本文深入探討 Sapph
RISC-V架構(gòu)及MRS開(kāi)發(fā)環(huán)境回顧
—— CH32V103系列MCU。作為長(zhǎng)久以來(lái)對(duì)RISC-V架構(gòu)關(guān)注和研究的成果, RISC-V3A處理器,支持IMAC指令子集,內(nèi)嵌了PFIC中斷
發(fā)表于 12-16 23:08
如何在RISC-V處理器上使用FreeRTOS?
FreeRTOS內(nèi)核調(diào)用哪個(gè)外部中斷處理程序,設(shè)置外部中斷handler的名稱步驟如下:1 加載RISC-V芯片供應(yīng)商提供的外部
發(fā)表于 11-29 15:54
學(xué)習(xí)RISC-V入門(mén) 基于RISC-V架構(gòu)的開(kāi)源處理器及SoC研究
RISC-V架構(gòu)的開(kāi)源處理器與SoC。1 RISC-V簡(jiǎn)介1.1 RISC-V的基本設(shè)計(jì)RISC-V是一
發(fā)表于 07-27 18:09
RISC-V是什么?如何去設(shè)計(jì)RISC-V處理器?
RISC-V是什么?有哪些特點(diǎn)?如何去設(shè)計(jì)RISC-V處理器?
發(fā)表于 06-18 09:24
FreeRTOS與RISC-V——適用于RISC-V的FreeRTOS概述
1.1簡(jiǎn)介FreeRTOS中面向RISC-V的接口是易于拓展的,其提供了一系列基本的接口,用于操作適用于所有RISC-V實(shí)現(xiàn)中的通用寄存器,以及一系列的宏來(lái)處理特定的硬件實(shí)現(xiàn)中涉及到的
發(fā)表于 04-09 09:26
如何建設(shè)RISC-V軟件生態(tài)?
本文從RISC-V軟件開(kāi)源基礎(chǔ)平臺(tái)、RISC-V多樣化軟件生態(tài)以及RISC-V開(kāi)源社區(qū)等三個(gè)方面詳細(xì)介紹了如何建設(shè)RISC-V軟件生態(tài)。
Sifive Learn Inventor基礎(chǔ)之GPIO 按鍵中斷 RISC-V
Sifive Learn Inventor 基礎(chǔ)之gpio 按鍵中斷Sifive Learn Inventor是Sifive的一款基于RISC-V內(nèi)核的開(kāi)發(fā)板,具體見(jiàn)官網(wǎng)的Hifive Rev b
發(fā)表于 12-20 19:06
?1次下載
RISC-V高性能計(jì)算需要要解決的三個(gè)問(wèn)題
尤其是在 2022 年,RISC-V 的發(fā)展勢(shì)頭極為強(qiáng)勁,RISC-V 處理器核出貨量突破 100 億顆。
發(fā)表于 02-15 11:53
?1014次閱讀
MCU如何處理中斷?中斷處理過(guò)程包括哪些步驟?
當(dāng)MCU接收到一個(gè)中斷信號(hào)時(shí),它會(huì)暫停當(dāng)前正在執(zhí)行的任務(wù),保存現(xiàn)場(chǎng),然后跳轉(zhuǎn)到預(yù)設(shè)的中斷處理程序(Interrupt Service Routine, ISR)去處理這個(gè)
RISC-V怎么實(shí)現(xiàn)核間中斷?核心本地中斷控制器(CLINT)深度解析
全稱為Core Local Interruptor(核心本地中斷控制器),是 RISC-V 特權(quán)架構(gòu)規(guī)范(Privileged Architecture Specification)中明確定義的內(nèi)建
RISC-V異常中斷機(jī)制全解析
RISC-V 作為開(kāi)源、模塊化的精簡(jiǎn)指令集架構(gòu),其異常中斷機(jī)制是保障系統(tǒng)可靠運(yùn)行、響應(yīng)外部事件與處理內(nèi)部錯(cuò)誤的核心支撐。
RISC-V的中斷處理 中斷操作三個(gè)步驟
評(píng)論