在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

AS32X601驅動系列教程 PLIC_中斷應用詳解

安芯 ? 來源:jf_29981791 ? 作者:jf_29981791 ? 2025-05-23 17:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

平臺中斷控制器(Platform Level Interrupt Controller,PLIC)是國科安芯AS32系列MCU芯片的中斷控制器,主要對中斷源進行采樣,優先級仲裁和分發。各外設中斷統一連到PLIC,PLIC統一管理并輸出中斷請求到內核。

硬件設計

本節硬件同USART章節一致。

軟件設計

代碼分析

在之前的按鍵章節我們已經對AS32的中斷進行了簡單實用,本節將用串口的接收中斷實驗進一步加深一下使用過程。

回顧之前的啟動文件章節,有如下一段代碼:
圖片 1.png

RISCV指令集中,在機器模式下中斷相關的寄存器有MSTATUS、MIE和MTVEC,其中前兩個寄存器控制系統中斷使能,具體內容顆翻看啟動文件講解,MTVEC用于保存中斷入口地址,當中斷發生時,程序指針會自動跳轉到TrapEntry地址處開始執行,該段代碼位于as32x601_trapentry.S文件中,用匯編文件編寫,在這個函數下,我們會將RISCV內核所有相關寄存器,包括PC指針等全部進行保存,然后調用中斷入口處理函數,完成后恢復現場寄存器值,從而實現中斷功能。

中斷處理函數位于as32x601_plic.c文件中,我們找到如下函數:

  1. / *
    • Function: PLIC_TrapHandler
    • Description: Interrupt handler type selection.
    • Param: Mcause: determine the type of exception or interrupt based on the value of the mcause register.
    • Return: None
  2. */
  3. void PLIC_TrapHandler(uint32_t Mcause)
  4. {
  5. */* Initializes the external interrupt structure */*
    
  6. 
    

PLIC_EXTITypeDef ExtInt = {{0}, 0};

11. 
12. ```
if((Mcause & 0x80000000) != 0)
  1. 
    

{

14. ```
switch (Mcause & 0x0fff)
  1. 
    

{

16. ```
case 3: */* Machine software interrupt */*
  1. 
    

MSoftWare_IRQ_Handler();

18. ```
break;
  1. 
    

case 7: / Machine timer interrupt /

20. ```
MTimer_IRQ_Handler();
  1. 
    

break;

22. ```
case 11: */* Machine external interrupt */*
  1. 
    

PLIC_SwitchMEXTI(&ExtInt);

24. ```
break;
  1. 
    

default:

26. ```
break;
  1. 
    

}

28. ```
}
  1. 
    

else

30. ```
{
  1. 
    

switch (Mcause & 0xfff)

32. ```
{
  1. 
    

case 0: / Instruction address misaligned /

34. ```
InstAddrMisalign_Handler();
  1. 
    

break;

36. ```
case 1: */* Instruction access fault */*
  1. 
    

InstAccessFault_Handler();

38. ```
break;
  1. 
    

case 2: / Illegal instruction /

40. ```
IllegalInst_Handler();
  1. 
    

break;

42. ```
case 3: */* Breakpoint */*
  1. 
    

Breakpoint_Handler();

44. ```
break;
  1. 
    

case 4: / Load address misaligned /

46. ```
LoadAddrMisalign_Handler();
  1. 
    

break;

48. ```
case 5: */* Load access fault */*
  1. 
    

LoadAccessFault_Handler();

50. ```
break;
  1. 
    

case 6: / Store/AMO address misaligned /

52. ```
StoreAMOAddrMisalign_Handler();
  1. 
    

break;

54. ```
case 7: */* Store/AMO access fault */*
  1. 
    

StoreAMOAccessFault_Handler();

56. ```
break;
  1. 
    

case 11: / Environment call from M-mode /

58. ```
ECall_Handler();
  1. 
    

break;

60. ```
case 12: */* Instruction page fault */*
  1. 
    

InstPageFault_Handler();

62. ```
break;
  1. 
    

case 13: / Load page fault /

64. ```
LoadPageFault_Handler();
  1. 
    

break;

66. ```
case 15: */* Store/AMO page fault */*
  1. 
    

StoreAMOPageFalut_Handler();

68. ```
break;
  1. 
    

default:

70. ```
break;
  1. 
    

}

72. ```
}
  1. }

在這個函數中,系統中斷首先會讀取MCAUSE寄存器的最高位,如果最高位為0,代表此事件為異常,RISCV定義了此類型,具體可直接查看MCAUSE寄存器定義;如果最高位為1,證明此事件為系統中斷,此時可根據低位去選擇處理的中斷類型。

AS32除了系統定時中斷和軟件中斷外,plic定義了64個plic中斷,之前的的異常和中斷均為向量類型,但進入plic中斷后即為非向量模式,但可以軟件支持嵌套,64個中斷類型均已經在此文件中定義,所有定義均為弱函數,因此可以復制中斷處理函數名寫在自定義位置。接下來以串口中斷為例介紹用法:

復制之前的usart工程,在print.c中修改初始化代碼如下:

  1. / *
    • Function: User_Print_Init
    • Description: Configure Print USART.
    • Param: BaudRate: USART communication baud rate.
    • Return: None.
  2. */
  3. void User_Print_Init(uint32_t BaudRate)
  4. {
  5. USART_InitTypeDef USART_InitStructure;
    
  6. 
    

GPIO_InitTypeDef GPIO_InitStructure;

11. ```
PLIC_InitTypeDef PLIC_InitStructure;
  1. 
    

GPIOD_CLK_ENABLE();

14. ```
USART0_CLK_ENABLE();
  1. 
    

/ Set GPIO multiplex mapping /

17. ```
GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_USART0);       */* USART0_TX */*
  1. 
    

GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_USART0); / USART0_RX /

19. ```
*/* GPIO Configure */*
  1. 
    

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;

21. ```
GPIO_InitStructure.GPIO_Mode      = GPIO_Mode_OUT;
  1. 
    

GPIO_InitStructure.GPIO_OType = GPIO_Out_PP;

23. ```
GPIO_InitStructure.GPIO_OStrength = GPIO_OStrength_4_5mA;
  1. 
    

GPIO_Init(GPIOD, &GPIO_InitStructure);

25. ```
GPIO_InitStructure.GPIO_Pin       = GPIO_Pin_9;
  1. 
    

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;

27. ```
GPIO_InitStructure.GPIO_IType     = GPIO_IN_FLOATING;
  1. 
    

GPIO_InitStructure.GPIO_OStrength = GPIO_OStrength_4_5mA;

29. ```
GPIO_Init(GPIOD, &GPIO_InitStructure);
  1. 
    

USART_DeInit(USART0);

32. 
33. ```
USART_StructInit(&USART_InitStructure);
  1. 
    

/ Initializes the USART0 /

36. ```
USART_InitStructure.USART_BaudRate     = BaudRate;
  1. 
    

USART_InitStructure.USART_WordLength = USART_WordLength_8b;

38. ```
USART_InitStructure.USART_StopBits     = USART_StopBits_1;
  1. 
    

USART_InitStructure.USART_Parity = USART_Parity_No;

40. ```
USART_InitStructure.USART_Mode         = USART_Mode_Rx | USART_Mode_Tx;
  1. 
    

USART_InitStructure.USART_OverSampling = USART_OverSampling_16;

42. ```
USART_Init(USART0, &USART_InitStructure);
  1. 
    

USART_Cmd(USART0, ENABLE);

45. 
46. ```
USART_ITConfig(USART0, USART_IT_RXNE, ENABLE);
  1. 
    

/ Configer the USART0 interrupt /

49. ```
PLIC_InitStructure.PLIC_IRQChannel = USART0_IRQn;
  1. 
    

PLIC_InitStructure.PLIC_IRQPriority = 1;

51. ```
PLIC_InitStructure.PLIC_IRQChannelCmd = ENABLE;
  1. 
    

PLIC_Init(&PLIC_InitStructure);

53. }
54. 
55. */* *
56. * Function: USART0_IRQ_Handler
57. * Description: USART0 interrupt handler function.
58. * Param: None.
59. * Return: None.
60. */
61. 
62. void USART0_IRQ_Handler()
63. {
64. 
65. ```
if(USART_GetFlagStatus(USART0, USART_FLAG_RXNE) != RESET)
  1. 
    

{

67. ```
*/* Clear the interrupt pending bits */*
  1. 
    

USART_SendData(USART0,USART_ReceiveData(USART0));

69. ```
}
  1. }

在這個代碼中,44行之前和串口章節完全一樣,不再重復進行說明。第46行,調用串口的中斷使能函數,使能串口接收中斷,該處形參中的中斷類型已經定義好,可以自行查詢,之后需要開啟PLIC的中斷通道以及優先級配置,之后調用PLIC_Init函數進行初始化。

接下來,需要重寫中斷處理函數,該函數名已經在PLIC庫文件中定義完成,直接復制過來即可,在這個函數中首先判斷終端的來源,之后通過調用發送函數原路徑發出,當然這只是一個實驗,功能比較簡單,實際使用過程中切忌這種用法。

最后主函數中對上述代碼只需要做初始化即可,沒有實際邏輯,因此在這不做展示。

下板驗證

將上述代碼編譯燒錄完成,連接串口線與上位機,觀察現象。
圖片 2.png

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 驅動
    +關注

    關注

    12

    文章

    1914

    瀏覽量

    86834
  • 中斷控制器
    +關注

    關注

    0

    文章

    61

    瀏覽量

    9665
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    AS32X601驅動系列教程 USART_串口通訊詳解

    國科安芯的AS32系列MCU芯片集成7路USART,能夠靈活地與外部設備進行全雙工數據交換,滿足外部設備對工業標準 NRZ 異步串行數據格式的要求。USART 通過小數波特率發生器實現了多種波特率
    的頭像 發表于 05-23 16:54 ?330次閱讀
    <b class='flag-5'>AS32X601</b><b class='flag-5'>驅動</b><b class='flag-5'>系列</b>教程 USART_串口通訊<b class='flag-5'>詳解</b>

    AS32X601驅動系列教程 GPIO_按鍵檢測詳解

    在嵌入式系統開發中,GPIO(通用輸入輸出端口)是實現硬件與軟件交互的關鍵組件。本節主要利用的時GPIO的輸入采集功能,本節的主要功能為,讀取板載按鍵,當按鍵按下時,對應led亮起,抬起按鍵,對應led熄滅。 硬件設計 評估板板載三個機械按鍵,分別接入MCU的PE10、PB4、PB3,當按鍵按下時,控制引腳通過按鍵接地,表現為低電平,當按鍵抬起時,io通過電阻連接到VCC,此時表現為高電平。 軟件設計 代碼分析 本節主要驗證GPIO的輸入功能,所不同的是
    的頭像 發表于 05-23 16:44 ?241次閱讀
    <b class='flag-5'>AS32X601</b><b class='flag-5'>驅動</b><b class='flag-5'>系列</b>教程 GPIO_按鍵檢測<b class='flag-5'>詳解</b>

    AS32X601驅動系列教程 GPIO_點亮LED詳解

    的大門。自本章開始,正式開始用代碼控制AS32x601各外設完成功能配置。 需要注意的是,AS32X601提供了8組GPIO,其中GPIOA~GPIOG寄存器操作完全一致,但在使用GPIOH的時候,寄存器列表中間少了一個32位寄存器,因此在使用過程中容易造成誤操作,我們在
    的頭像 發表于 05-23 16:14 ?197次閱讀
    <b class='flag-5'>AS32X601</b><b class='flag-5'>驅動</b><b class='flag-5'>系列</b>教程 GPIO_點亮LED<b class='flag-5'>詳解</b>

    AS32X601驅動系列教程 SMU_系統時鐘詳解

    時鐘和復位的管理。在默認狀態下SMU工作在IDLE狀態。只有接收到PMU的使能信號后才開始工作。SMU模塊會根據PMU的指令自動配置COR、AXIBUS0/1/2等總線的時鐘和復位。 需要注意的是,MCU芯片AS32X601可通過BOOT選擇從外部QSPI Flash啟動和內部PFlash啟動,
    的頭像 發表于 05-23 16:01 ?320次閱讀
    <b class='flag-5'>AS32X601</b><b class='flag-5'>驅動</b><b class='flag-5'>系列</b>教程 SMU_系統時鐘<b class='flag-5'>詳解</b>

    新品 | EiceDRIVER? 650 V +/- 4 A高壓側柵極驅動器 1ED21x7 系列

    新品EiceDRIVER650V+/-4A高壓側柵極驅動器1ED21x7系列英飛凌的新一代EiceDRIVER1ED21x7x650V、+/-4A柵極
    的頭像 發表于 05-21 17:07 ?230次閱讀
    新品 | EiceDRIVER? 650 V +/- 4 A高壓側柵極<b class='flag-5'>驅動</b>器 1ED21<b class='flag-5'>x</b>7 <b class='flag-5'>系列</b>

    面向工業與汽車領域的高安全可靠MCU——AS32X601系列芯片解析

    AS32X601系列是國科安芯研發的32位RISC-V架構MCU,專為高安全性、高可靠性場景設計,覆蓋工業控制、汽車電子等關鍵領域。其核心優勢在于通過硬件級安全機制、多重冗余設計及功能安全認證,滿足
    的頭像 發表于 03-14 16:40 ?488次閱讀

    AS32X601芯片技術剖析

    芯片簡介 AS32X601系列MCU是國產高可靠嵌入式處理器的重要突破,其企業宇航級型號AS32S601針對空間輻射環境與極端溫度條件優化,滿足衛星載荷控制、航天器運動控制等場景需求。該芯片采用
    的頭像 發表于 03-14 16:17 ?490次閱讀

    AS32X601雙核鎖步MCU技術優勢分析

    AS32X601是國科安芯公司研制的一系列基于32位RISC-V指令集車規級MCU處理器芯片。主頻高達180MHz,支持雙核鎖步架構,基于軟錯誤防護技術加持,顯著提高芯片安全性能。產品具有高安全、低
    的頭像 發表于 03-07 16:12 ?437次閱讀

    單片機中斷技術詳解

    在現代電子設備中,單片機作為控制核心發揮著舉足輕重的作用。而在其高效運作的背后,中斷機制是推動單片機實現實時響應與高效執行的關鍵因素。本文將深入探討單片機中的中斷概念、中斷系統的結構、中斷
    的頭像 發表于 02-02 15:57 ?960次閱讀

    請問關于DSP2802x,2803x或者2806x的AD轉換模塊中斷的問題

    請問關于DSP2802x,2803x或者2806x的AD轉換模塊中斷的問題 DSP2802x,2803
    發表于 01-20 07:44

    EE-188:使用C語言在ADSP-219x DSP上實現中斷驅動系統

    電子發燒友網站提供《EE-188:使用C語言在ADSP-219x DSP上實現中斷驅動系統.pdf》資料免費下載
    發表于 01-15 16:06 ?0次下載
    EE-188:使用C語言在ADSP-219<b class='flag-5'>x</b> DSP上實現<b class='flag-5'>中斷</b><b class='flag-5'>驅動</b>系統

    TMS320x280x、2801x、2804x DSP系統控制和中斷參考指南

    電子發燒友網站提供《TMS320x280x、2801x、2804x DSP系統控制和中斷參考指南.pdf》資料免費下載
    發表于 12-17 16:02 ?0次下載
    TMS320<b class='flag-5'>x280x</b>、2801<b class='flag-5'>x</b>、2804<b class='flag-5'>x</b> DSP系統控制和<b class='flag-5'>中斷</b>參考指南

    納芯微推出智能隔離柵極驅動器NSI67X0系列

    納芯微正式推出具有隔離模擬采樣功能的智能隔離驅動 NSI67X0 系列,該系列適用于驅動 SiC、IGBT 和 MOSFET 等功率器件,兼
    的頭像 發表于 12-09 14:02 ?880次閱讀
    納芯微推出智能隔離柵極<b class='flag-5'>驅動</b>器NSI67<b class='flag-5'>X</b>0<b class='flag-5'>系列</b>

    常見液晶驅動控制芯片詳解

    常見液晶驅動控制芯片詳解 前言 因此各位朋友在選擇 LCD液晶模塊的時候,在考慮到串行,還是并行的方式時,可根據其驅動控制 IC的型號來判別,當然你還需要看你選擇的LCD模塊引腳定義是固定支持并行
    的頭像 發表于 10-12 16:35 ?4310次閱讀

    rk1126實現BT601輸入,輸入不帶IIC接口的驅動程序

    大家好!我先使用RV1126對接CIF接口,現在我的輸入是BT601格式的,但是我這個輸入接口沒有IIC的所以在驅動層不知道怎么弄,我看其他驅動程序的都是有IIC接口的,不知道哪位可否發一下沒有IIC
    發表于 08-10 12:03
    主站蜘蛛池模板: 欧美性天天影院 | 热re99久久国产精品 | 日本xxxxx69hd日本 | 亚洲你懂的 | 亚洲欧美v视色一区二区 | 午夜影视网站 | 国产欧美精品午夜在线播放 | 国产精品你懂的 | 在线观看一区二区三区视频 | l欧美18一19sex性 | 亚洲福利午夜 | 天天操天天操天天操天天操 | 一丝不遮视频免费观看 | 欧美宗合网 | 图片区网友自拍另类图区 | 手机看片1024免费视频 | www国产永久免费视频看看 | 中文一级黄色片 | 一级特黄aaa大片 | 天天干 夜夜操 | 日韩特黄 | 天天干亚洲 | 香蕉视频啪啪 | 天天爽夜夜爽 | 亚洲毛片儿 | 四虎国产永久免费久久 | 成年免费大片黄在线观看免费 | 黄视频在线免费看 | 国产精品美女在线 | 欧美性猛交xxxx免费 | 黄色网网址 | 四虎影库永久在线 | 在线网站 看片 网站 | 欧美一区二区视频三区 | 欧美成人性色区 | 国产在线永久视频 | 黄色国产视频 | 五月丁香啪啪 | 午夜毛片网站 | 欧美精品专区55页 | 黄黄视频在线观看 |