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

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

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

3天內不再提示

riscv中gd32vf103的中斷行為分析

嵌入式IoT ? 來源:嵌入式IoT ? 作者:嵌入式IoT ? 2021-04-15 13:55 ? 次閱讀

riscv底層原理分析gd32vf103的中斷行為

1.概述

2.中斷向量表初始化

3.詳細分析一下irq_entry

4.關于gd32vf103中斷編程模型的理解

1.概述在處理riscv處理器中斷的時候,需要弄清楚兩個概念:

1.向量中斷

2.非向量中斷

對于向量中斷,其中斷發生后,pc指針會根據中斷的類型跳轉到基地址+中斷號*4的地址處去執行中斷處理程序,做過stm32的,應該比較清楚向量中斷的大概樣子。當然,riscv也是支持這種向量中斷,這樣每個地址處會安排一個特定的中斷處理函數,當中斷發生后,跳轉到特定的函數去執行即可。

對于非向量中斷,則表示中斷發生后只有一個入口,需要在這一個中斷中去判斷具體中斷號,這種行為可以在常見的mips處理器、sparc處理器中看到。

既然riscv支持這兩種中斷處理方式,正好gd32vf103的庫函數也實現了這兩種機制,那么就徹底的分析一下實現的策略。

2.中斷向量表初始化任何代碼在最初的匯編級別的初始化時,都會指定向量的基地址。當然riscv也不例外。

對于向量中斷來說

/*

* Intialize ECLIC vector interrupt

* base address mtvt to vector_base

*/

la t0, vector_base

csrw CSR_MTVT, t0

這里的理解就向mtvt寄存器中存放vector_base,該處存放向量地址入口,每個向量中斷發生,則根據偏移執行對應的函數。

.globl vector_base

.type vector_base, @object

vector_base:

#if defined(DOWNLOAD_MODE) && (DOWNLOAD_MODE != DOWNLOAD_MODE_FLASH)

j _start /* 0: Reserved, Jump to _start when reset for ILM/FlashXIP mode.*/

.align LOG_REGBYTES /* Need to align 4 byte for RV32, 8 Byte for RV64 */

#else

DECLARE_INT_HANDLER default_intexc_handler /* 0: Reserved, default handler for Flash download mode */

#endif

DECLARE_INT_HANDLER default_intexc_handler /* 1: Reserved */

DECLARE_INT_HANDLER default_intexc_handler /* 2: Reserved */

DECLARE_INT_HANDLER eclic_msip_handler /* 3: Machine software interrupt */

DECLARE_INT_HANDLER default_intexc_handler /* 4: Reserved */

DECLARE_INT_HANDLER default_intexc_handler /* 5: Reserved */

對于向量函數的處理,不用過多介紹。

下面非向量中斷的入口

/*

* Set ECLIC non-vector entry to be controlled

* by mtvt2 CSR register.

* Intialize ECLIC non-vector interrupt

* base address mtvt2 to irq_entry.

*/

la t0, irq_entry

csrw CSR_MTVT2, t0

csrs CSR_MTVT2, 0x1

其中irq_entry表示了非向量的處理過程。csrs CSR_MTVT2, 0x1該指令的解析如下:

mtvt2[0] = 1 mtvt2[0]為0時,中斷入口使用mtvec寄存器,mtvt2[0]為1時,中斷入口為mtvt2[31:2]。

3.詳細分析一下irq_entry分析非向量中斷的行為,可以更好的理解riscv的中斷底層的處理機制。

.global irq_entry

/* This label will be set to MTVT2 register */

irq_entry:

/* Save the caller saving registers (context) */

SAVE_CONTEXT

/* Save the necessary CSR registers */

SAVE_CSR_CONTEXT

/* This special CSR read/write operation, which is actually

* claim the CLIC to find its pending highest ID, if the ID

* is not 0, then automatically enable the mstatus.MIE, and

* jump to its vector-entry-label, and update the link register

*/

csrrw ra, CSR_JALMNXTI, ra

/* Critical section with interrupts disabled */

DISABLE_MIE

/* Restore the necessary CSR registers */

RESTORE_CSR_CONTEXT

/* Restore the caller saving registers (context) */

RESTORE_CONTEXT

/* Return to regular code */

mret

從中斷處理的原理上來講,中斷處理分三部分:

1.保存當前現場

2.進入中斷處理函數

3.恢復現場

其中SAVE_CONTEXT確實是保存上下文現場的方式。

.macro SAVE_CONTEXT

csrrw sp, CSR_MSCRATCHCSWL, sp

/* Allocate stack space for context saving */

#ifndef __riscv_32e

addi sp, sp, -20*REGBYTES

#else

addi sp, sp, -14*REGBYTES

#endif /* __riscv_32e */

STORE x1, 0*REGBYTES(sp)

STORE x4, 1*REGBYTES(sp)

STORE x5, 2*REGBYTES(sp)

STORE x6, 3*REGBYTES(sp)

STORE x7, 4*REGBYTES(sp)

STORE x10, 5*REGBYTES(sp)

STORE x11, 6*REGBYTES(sp)

STORE x12, 7*REGBYTES(sp)

STORE x13, 8*REGBYTES(sp)

STORE x14, 9*REGBYTES(sp)

STORE x15, 10*REGBYTES(sp)

#ifndef __riscv_32e

STORE x16, 14*REGBYTES(sp)

STORE x17, 15*REGBYTES(sp)

STORE x28, 16*REGBYTES(sp)

STORE x29, 17*REGBYTES(sp)

STORE x30, 18*REGBYTES(sp)

STORE x31, 19*REGBYTES(sp)

#endif /* __riscv_32e */

.endm

按照riscv的數據模型,又分為I數據模型和E數據模型,這部分在riscv的MISA寄存器中有描述。簡而言之,E數據模型會比I數據模型少一半的寄存器,E數據模型是專門針對嵌入式應用場景的,更少的寄存器意味著更快速的壓棧和出棧,實時性相應會更加優秀。

I數據模型一共有32個寄存器,而E數據模型是16個寄存器。

所以在進行中斷入棧的時候,E數據模型會壓入10個寄存器。

1e2c2764-9d0e-11eb-8b86-12bb97331649.png

caller代表中斷上層函數可以使用的寄存器,所以

x1,x5,x6,x7,x10,x11,x12,x13,x14,x15

這10個寄存器會保存,上述程序多保存了x4。

下面理解一下中斷的處理,通過csrrw ra, CSR_JALMNXTI, ra該指令進行分析。

不難發現,這個是個芯來自定義擴展指令,CSR_JALMNXTI寄存器通過gdb解析可以看到如下的數據

213dce62-9d0e-11eb-8b86-12bb97331649.png

其中0x7ed則是該寄存器的地址。

那么一條指令是如何實現中斷的處理的呢?

實際上該指令首先會判斷當前eclic中是否有掛起未處理的中斷,如果沒有,那這條指令向下執行,并不會處理任何事情,一旦存在,那么會跳轉到eclic的中斷向量的入口,這里便是關鍵的地方了。

另外需要注意的是,默認進入中斷時,保存現場時,此處是關閉中斷的,當執行這條語句,中斷便會開啟,然后判斷是否還有中斷未響應,這樣可以達到中斷咬尾的效果。

并且當中斷處理函數執行完成后,又會回到該指令執行一次,判斷是否還需要處理中斷。這一切的行為都是由硬件完成,大大提高中斷處理的效率。

現場恢復則是中斷處理的逆過程,這里不贅述。

4.關于gd32vf103中斷編程模型的理解對于cortex-m3等處理器來說,riscv的底層模型似乎更加復雜一些,但是實際上弄清楚riscv中斷處理模型,eclic中斷處理機制,以及向量中斷,非向量中斷和一條中斷處理指令csrrw ra, CSR_JALMNXTI, ra后,也不會覺得十分的難以理解。

玩gd32vf103,其riscv底層匯編級別的中斷處理一般都不會太多需要修改的,理解就可以。需要使用好的是eclic配置,還有相關的gpio的中斷引腳的配置即可。將中斷線、eclic配置完成,具體中斷處理函數中實現自己的業務邏輯即可,不需要有許多學習成本。

原文標題:從riscv底層原理分析gd32vf103的中斷行為

文章出處:【微信公眾號:嵌入式IoT】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

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

    關注

    5082

    文章

    19126

    瀏覽量

    305260
  • RISC-V
    +關注

    關注

    45

    文章

    2277

    瀏覽量

    46159
  • GD32VF103
    +關注

    關注

    0

    文章

    5

    瀏覽量

    828

原文標題:從riscv底層原理分析gd32vf103的中斷行為

文章出處:【微信號:Embeded_IoT,微信公眾號:嵌入式IoT】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    RISC-V內核的32位通用微控制器 GD32VF103芯片簡介

    1. 芯片簡介 GD32VF103系列MCU是基于RISC-V內核的32位通用微控制器,具備均衡的處理效能和系統資源,適用于工業控制、消費電子、新興IoT等嵌入式市場應用。 內核:芯來
    發表于 10-23 06:46

    GD32F103 Keil和IAR pack包

    電子發燒友網站提供《GD32F103 Keil和IAR pack包.rar》資料免費下載
    發表于 10-15 17:25 ?151次下載

    GD32 MCU 移植教程】7、從 GD32F10x 移植到 GD32E103

    本應用筆記旨在幫助您快速將基于 GD32F10x 2.0 版本及以上固件庫開發的應用程序從GD32F10x 系列微控制器移植到 GD32E103 系列微控制器。GD32E103
    的頭像 發表于 09-05 09:40 ?515次閱讀
    【<b class='flag-5'>GD</b>32 MCU 移植教程】7、從 <b class='flag-5'>GD</b>32F10x 移植到 <b class='flag-5'>GD32E103</b>

    GD32F103xxArm?Cortex?-M3 32位MCU芯片手冊

    電子發燒友網站提供《GD32F103xxArm?Cortex?-M3 32位MCU芯片手冊.pdf》資料免費下載
    發表于 05-22 14:13 ?4次下載

    RISCV soft JTAG調試_v1.2

    JTAG。這里我們以TI60F225 DEMO來演示。 在使用softJTAG的過程,首先要把RISCV的IP的調試選項選擇為soft,也就是Eanble Soft Debug Tap. 第二
    的頭像 發表于 04-23 08:38 ?1076次閱讀

    日本或對谷歌采取反壟斷行

    日本或對谷歌采取反壟斷行動 據外媒報道日本計劃就搜索廣告的壟斷行為對谷歌采取反壟斷行動。據悉日本公平交易委員會此前就一直在調查谷歌向雅虎提供的關鍵詞定向搜索廣告技術;以推動谷歌改革其商業行為
    的頭像 發表于 04-17 16:35 ?360次閱讀

    Venmo反壟斷案被否,蘋果無反壟斷行為判定

    文件指出,原告未能證明具體的反壟斷行為以及為何未將Zelle等競爭者納入起訴范圍。同時,文件形容這起訴訟為“推測性的”,并列舉出法院認定的若干問題。
    的頭像 發表于 03-28 10:15 ?383次閱讀

    RISCV soft JTAG調試_v1.1

    JTAG。這里我們以TI60F225 DEMO來演示。 在使用softJTAG的過程,首先要把RISCV的IP的調試選項選擇為soft,也就是Eanble Soft Debug Tap. 第二
    的頭像 發表于 02-23 16:16 ?668次閱讀
    <b class='flag-5'>RISCV</b> soft JTAG調試_v1.1

    GD32 MCU是如何進入中斷函數的

    用過GD32 MCU的小伙伴們都知道,程序是順序執行的,但當有中斷來的時候程序會跳轉到中斷函數,執行完中斷函數后程序又繼續回到原來的位置繼續執行,那么你們知道MCU是如何找到
    的頭像 發表于 01-30 09:45 ?1100次閱讀
    <b class='flag-5'>GD</b>32 MCU是如何進入<b class='flag-5'>中斷</b>函數的

    求助,關于nuclei studio調試GD32VF103的疑問

    使用自帶的工程模版時發現鏈接ld文件是把代碼放在flash里,但是jlink debug配置startup里 “RAM application” 選項被勾選, 并且取消勾選“Initial Reset and Halt” 選項。 這個是為什么呢?
    發表于 01-24 07:27

    GD32如何配置中斷優先級分組以及中斷優先級

    使用GD32 MCU的過程,大家可能會有以下疑問:中斷優先級如何配置和使用?
    的頭像 發表于 01-10 10:30 ?3095次閱讀
    <b class='flag-5'>GD</b>32如何配置<b class='flag-5'>中斷</b>優先級分組以及<b class='flag-5'>中斷</b>優先級

    關于GD32VF103 cfg文件JTAG_SEL IO控制的困惑求解

    問題1描述 關于使用蜂鳥調制器對應cfg文件的 layout_init后兩個參數 0x0008 -data 0x001B -direction 我的想法是這個是配置蜂鳥調制器的對應IO默認
    發表于 01-10 08:28

    gd32vf103根據例子配置了systick和adc中斷,但是adc中斷無法搶占systick是為什么?

    根據例子配置了systick和adc中斷,但是adc中斷無法搶占systick 配置為向量和非相量都沒有實現
    發表于 01-10 07:43

    GD32VF103怎么輸出系統時鐘SYS_CLK,時鐘是通過哪個引腳輸出的?

    我想測試一下芯片時鐘的精確性,需要將系統時鐘輸出,請問GD32VF103的時鐘是通過哪個引腳輸出的?以下是配置輸出時鐘為系統時鐘,但不知道這個時鐘是通過MCU的哪個引腳輸出的?
    發表于 01-10 07:28

    DDR200T開發板FPGA模塊和gd32vf103之間是通過什么傳輸數據的?

    目前想要通過DDR200T開發板做一個基于FPGA的卷積神經網絡軟硬協同加速器 DDR200T開發板FPGA模塊用的是xc7a200t和gd32vf103(mcu)之間是通過什么傳輸數據的? 是通過AXI總線進行傳輸的么?有沒有大佬有DDR200t開發板這兩個模塊的交互
    發表于 01-10 06:28
    主站蜘蛛池模板: 亚洲日本欧美日韩高观看| 四虎影院黄色| 亚洲国产日韩欧美在线as乱码| 在线视频永久在线视频| 一区二区三区中文字幕| 最近2018中文字幕2019高清| 五月天婷婷在线视频| 欧美干色| 97av在线| 国产精品久久久久久久久免费 | 永久网站色视频在线观看免费| 又粗又长又色又爽视频| 四虎影院.com| 1717国产精品久久| 精品视频一区在线观看| 亚洲日本欧美| 免费的毛片| 小泽玛利亚在线观看123| 国产精品天天干| 亚洲一卡二卡在线| 女人的天堂网站| 亚洲我射| 91在线网| 亚洲香蕉视频| 丁香花在线影院观看在线播放| 美女被免费网站91色| 一区二区三区四区五区| 欧美一区二区三区在线| 7777在线| 香蕉成人国产精品免费看网站 | 欧美操穴| 五月在线观看| 好男人社区在线观看www| 色综合天天干| 免费污视频在线| 欧美另类videos| 久久dvd| 中文字幕卡二和卡三的视频 | 免费拍拍视频| 高清一级| 婷婷社区五月天|