esp32 c3 mini芯片模塊樂鑫科技代理商名單Startup.s 分析,GD32VFIxx 通過 ECLIC 管理處理器的多個中斷。如果在應用程序中使用中新,側需要設置中斷向量表。GD32VF1xx Startup.s 包括中斷向量表(見表 7.2)和復位中斷服務程序 Reset_Handler。
如果使用中斷向量表處理中斷請求,esp32 c3 mini芯片模塊樂鑫科技代理商名單則在 Linker 選項中需要將“Reset_Handler”設置為程序入口。
1、Reset_Handler 人口,根據啟動程序所在內存地址選擇分支跳轉。
Reset_Handler:
la a0,_start //讀取啟動代碼入口地址
li al,1
slli al, al, 29 //a1 = 0x2000 0000,片內 SRAM 起始地址
bleu al, a0,_start0800 //如果_start 在 SRAM起始位置,則跳到_start0800
srli al, al, 2 //a1 = 0x800 0000,片內 Elash 起始地址
bleu al, a0,_start0800 //如果_start 在 Elash起始位置,則跳到_start0800
la a0,_start0800
add a0, a0, al //a0 +a1 = 0x800 000 + _start0800,Elash 偏移
jr a0 //跳到_start0800
2、 設置中斷向量,將中斷向量表的基地址寫入 mtvt,設置非向量中斷和內核異常處理程序入口。
_start0800:
li t0,0x200
CSrS CSR MMISC_CTL,t0 //NMI 與其他中斷共享向量表
/* 設置 ECLIC 中斷向量表人口地址 */
la t0, vector_base
CsrW CSR_MTVT,t0
/* 設置非向量中斷服務程序入口 */
la t0,irg_entry
csrw CSR_MIRQ_ENTRY,t0
csrs CSR_MIRQ_ENTRY,0x1
/* 設置內核異常處理程序人口 */
la t0, trap_entry
csrw CSR_MTVEC,t0
/*跳到啟動代碼人口_start*/
la t1, _start
jalr t1
2.entry.s 分析
entry.s 文件中包括 RISC-V 內核異常服務序 trap_entry 和非向量模式中斷服務程序 irq_entry。
(1) trap_entry
響應異常請求后,進入 trap_entry,保存寄存器數據到棧中,esp32 c3 mini芯片模塊樂鑫科技代理商名單跳轉到處理函數handle_trap,處理完成后恢復數據并返回。
trap_entry:
addi sp,sp,-19* REGBYTES //分配??臻g
SAVE CONTEXT //保存通用寄存器,已定義宏
SAVE MEPC_MSTATUS //保存 mepc 和 mstatus 寄存器值,已定義宏
/*調用內核異常處理函數 handle_trap*/
csrr a0,mcause
mv al,sp
call handle_trap //使用ECLIC后,handle_trap 為空
/*恢復上下文*/
RESTORE MEPC MSTATUS //恢復 mepc 和 mstatus 寄存器值,已定義宏
RESTORE CONTEXT //恢復通用寄存器,已定義宏
addi sp, sp,19* REGBYTES //釋放??臻g
Mret //機器模式返回
(2) irq_entry
在非向量中斷模式下,在響應所有中斷請求后,處理器先進入 irq_entry,然后通過執行指令“csrrw ra,CSR_MINTSEL_JAL,ra”,訪問自定義 CSR 寄存器 CSRMINTSEL_JAL,esp32 c3 mini芯片模塊樂鑫科技代理商名單進入中斷向量表中對應的服務程序。
irq entry:
.......
/*備份 CSR寄存器*/
csrrwi x0,CSR PUSHMCAUSE,16
csrrwi x0,CSR PUSHMEPC,17
csrrwi x0,CSR PUSHMXSTATUS,18
service_loop;
csrrw ra,CSR_MINTSEL_JAL,ra //跳到中斷向量
/*恢復寄存器 */
RESTORE_CONTEXT EXCPT_X5
/*關閉中斷*/
DISABLE MIE
/*恢復 CSR 寄存器*/
LOAD x5,18 *REGBYTES(sp)
CSrW CSR_MXSTATUS,x5
LOAD x5,17*REGBYTES(sp)
csrw CSR_MEPC,x5
LOAD x5, 16 *REGBYTES(sp)
csrw CSR_MCAUSE,x5
RESTORE_CONTEXT_ONLY_X5
......
mret