0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RISC-V的中斷處理 中斷操作三個(gè)步驟

XL FPGA技術(shù)交流 ? 來(lái)源:XL FPGA技術(shù)交流 ? 作者:XL FPGA技術(shù)交流 ? 2024-05-20 16:38 ? 次閱讀

中斷操作三個(gè)步驟:

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#ifdef SYSTEM_AXI_A_BMB
  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);
#endif    //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);}

其中包括設(shè)置中斷門限。相應(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 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){#ifdef SYSTEM_AXI_A_BMB

    case SYSTEM_PLIC_SYSTEM_AXI_A_INTERRUPT:            bsp_print("Entered AXI Interrupt Routine, Passed!");       break;

#endif    default: crash(); break;    }        //unmask the claimed interrupt    plic_release(BSP_PLIC, BSP_PLIC_CPU_0, claim);   }}



聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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

    文章

    94

    瀏覽量

    10989
  • RISC-V
    +關(guān)注

    關(guān)注

    45

    文章

    2307

    瀏覽量

    46293
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Zynq中斷三個(gè)部分:SGI、PPI、SPI

    Zynq中斷大致可分為三個(gè)部分 第一部分為SGI,軟件生成的中斷,共16個(gè)端口; 第二部分為PPI,CPU私有外設(shè)中斷,有5
    的頭像 發(fā)表于 11-16 17:21 ?1.1w次閱讀
    Zynq<b class='flag-5'>中斷</b>的<b class='flag-5'>三個(gè)</b>部分:SGI、PPI、SPI

    risc-v的mcu對(duì)RTOS兼容性如何

    RISC-V的MCU對(duì)RTOS(實(shí)時(shí)操作系統(tǒng))的兼容性主要取決于多個(gè)因素,包括RTOS的版本、RISC-V指令集的實(shí)現(xiàn)、以及芯片制造商提供的支持。以下是關(guān)于RISC-V的MCU對(duì)RTO
    發(fā)表于 05-27 16:26

    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入門 基于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

    如何實(shí)現(xiàn)一個(gè)RISC-V內(nèi)核架構(gòu)的芯片移植工作

    上下文切換一般在 CM3 等架構(gòu)下,我們習(xí)慣在任務(wù)切換函數(shù)中,觸發(fā) PendSV 中斷,然后在 PendSV 處理函數(shù)中實(shí)現(xiàn)上下文切換,在 RISC-V 架構(gòu)中,可以使用 Software
    發(fā)表于 03-25 10:11

    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

    RISC-V的異常處理機(jī)制復(fù)雜嗎?

    RISC-V對(duì)于異常處理的實(shí)現(xiàn)復(fù)雜嗎?應(yīng)該沒(méi)有ARM Cortex系列的那樣復(fù)雜,有NVIC或GIC中斷控制器吧。那么它執(zhí)行異常處理的流程是怎樣的?
    發(fā)表于 04-21 15:00

    淺析單片機(jī)中斷處理過(guò)程

    中斷處理過(guò)程可分為中斷響應(yīng)、中斷處理中斷返回三個(gè)
    的頭像 發(fā)表于 11-06 14:31 ?1.8w次閱讀
    淺析單片機(jī)<b class='flag-5'>中斷</b><b class='flag-5'>處理</b>過(guò)程

    如何建設(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)。
    的頭像 發(fā)表于 06-23 11:21 ?3315次閱讀
    如何建設(shè)<b class='flag-5'>RISC-V</b>軟件生態(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次下載
    Sifive Learn Inventor基礎(chǔ)之GPIO 按鍵<b class='flag-5'>中斷</b> <b class='flag-5'>RISC-V</b>

    RISC-V高性能計(jì)算需要要解決的三個(gè)問(wèn)題

    尤其是在 2022 年,RISC-V 的發(fā)展勢(shì)頭極為強(qiáng)勁,RISC-V 處理器核出貨量突破 100 億顆。
    發(fā)表于 02-15 11:53 ?635次閱讀

    RISC-V SiFive U54內(nèi)核的中斷介紹

    類型的 RISC-V 中斷:本地和全局。 本地中斷:U54內(nèi)核的本地中斷只有2種,軟件中斷和定時(shí)器中斷
    的頭像 發(fā)表于 10-08 09:39 ?633次閱讀
    <b class='flag-5'>RISC-V</b> SiFive U54內(nèi)核的<b class='flag-5'>中斷</b>介紹

    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è)
    的頭像 發(fā)表于 11-08 12:57 ?1537次閱讀