日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GD32VF103启动流程分析

發布時間:2023/12/10 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GD32VF103启动流程分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 *.S文件分析

1.1 文件位置

啟動文件為:freertos_GD32VF103/nuclei_sdk/SoC/gd32vf103/Common/Source/GCC/startup_gd32vf103.S

1.2 中斷異常背景知識

GD32VF103的中斷控制器具有兩種模式:默認模式和ECLIC模式。模式的設置由mtvec[5:0]指定,當mtvec[5:0]==6’b000011時為ECLIC模式。處理函數入口由mtvec[31:6]指定(處理函數入口地址必須為64字節對齊)。

默認模式:所有中斷,異常,NMI都由mtvec[31:6]指定的處理函數進行處理;
ECLIC模式:異常,NMI由mtvec[31:6]指定的處理函數進行處理,中斷由mtvt2寄存器指定的處理函數進行處理,并由mtvt寄存器指定中斷向量表地址

RISC-V處理器的中斷系統和NVIC的中斷系統不同,RISC-V的中斷系統分為NMI,異常,外部中斷三個概念。因此也分由不同的向量寄存器設置入口地址。由于risc-v的中斷和異常都不進行自動現場保護,所以需要軟件手動進行現場保護處理,因此無法直接使用C函數響應中斷,需要一個基于匯編的入口函數進行處理,在匯編入口函數中再對C函數進行調用。

GD32VF103在ECLIC中斷模式中,mtvec用于保存NMI和異常入口函數地址,不會進行自動的向量表調用。需要由入口函數進行轉發處理。在官方代碼中,響應函數為entry.S中的trap_entry函數。

mtvt2用于保存中斷響應入口函數地址,處理函數位于entry.S中的irq_entry,函數mtvt保存向量表地址,mtvt2寄存器的irq_entry函數和mtvt寄存器中的向量表共同組成一個two-stage的中斷向量表系統,irq_entry中對現場進行保護,并觸發ECLIC調用中斷向量表。

GD32VF103 ECLIC的中斷向量寄存器

寄存器全名說明
mtvecMachine Trap-Vector Base-Address Register用于配置中斷和異常處理程序的入口地址。一般用于處理NMI和異常中斷
mtvtECLIC Interrupt Vector Table Base Address用于保存ECLIC中斷向量表的基地址,此基地址至少為64byte對齊。
mtvt2ECLIC non-vectored interrupt handler address register用于指定ECLIC非向量模式的中斷common-code入口地址。

2 源碼分析

/** Copyright (c) 2019 Nuclei Limited. All rights reserved.** SPDX-License-Identifier: Apache-2.0** Licensed under the Apache License, Version 2.0 (the License); you may* not use this file except in compliance with the License.* You may obtain a copy of the License at** www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an AS IS BASIS, WITHOUT* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/ /******************************************************************************* \file startup_gd32vf103.S* \brief NMSIS Nuclei N/NX Class Core based Core Device Startup File for* Device gd32vf103* \version V1.00* \date 21 Nov 2019********************************************************************************/#include "riscv_encoding.h".macro DECLARE_INT_HANDLER INT_HDL_NAME #if defined(__riscv_xlen) && (__riscv_xlen == 32).word \INT_HDL_NAME #else.dword \INT_HDL_NAME #endif .endm/** Put the interrupt vectors in this section according to the run mode:* FlashXIP: .vtable* ILM: .vtable* Flash: .vtable_ilm*///中斷處理函數定義 #if defined(DOWNLOAD_MODE) && (DOWNLOAD_MODE == DOWNLOAD_MODE_FLASH).section .vtable_ilm #else.section .vtable #endif.weak eclic_msip_handler.weak eclic_mtip_handler.weak eclic_bwei_handler.weak eclic_pmovi_handler.weak WWDGT_IRQHandler.weak LVD_IRQHandler.weak TAMPER_IRQHandler.weak RTC_IRQHandler.weak FMC_IRQHandler.weak RCU_IRQHandler.weak EXTI0_IRQHandler.weak EXTI1_IRQHandler.weak EXTI2_IRQHandler.weak EXTI3_IRQHandler.weak EXTI4_IRQHandler.weak DMA0_Channel0_IRQHandler.weak DMA0_Channel1_IRQHandler.weak DMA0_Channel2_IRQHandler.weak DMA0_Channel3_IRQHandler.weak DMA0_Channel4_IRQHandler.weak DMA0_Channel5_IRQHandler.weak DMA0_Channel6_IRQHandler.weak ADC0_1_IRQHandler.weak CAN0_TX_IRQHandler.weak CAN0_RX0_IRQHandler.weak CAN0_RX1_IRQHandler.weak CAN0_EWMC_IRQHandler.weak EXTI5_9_IRQHandler.weak TIMER0_BRK_IRQHandler.weak TIMER0_UP_IRQHandler.weak TIMER0_TRG_CMT_IRQHandler.weak TIMER0_Channel_IRQHandler.weak TIMER1_IRQHandler.weak TIMER2_IRQHandler.weak TIMER3_IRQHandler.weak I2C0_EV_IRQHandler.weak I2C0_ER_IRQHandler.weak I2C1_EV_IRQHandler.weak I2C1_ER_IRQHandler.weak SPI0_IRQHandler.weak SPI1_IRQHandler.weak USART0_IRQHandler.weak USART1_IRQHandler.weak USART2_IRQHandler.weak EXTI10_15_IRQHandler.weak RTC_Alarm_IRQHandler.weak USBFS_WKUP_IRQHandler.weak EXMC_IRQHandler.weak TIMER4_IRQHandler.weak SPI2_IRQHandler.weak UART3_IRQHandler.weak UART4_IRQHandler.weak TIMER5_IRQHandler.weak TIMER6_IRQHandler.weak DMA1_Channel0_IRQHandler.weak DMA1_Channel1_IRQHandler.weak DMA1_Channel2_IRQHandler.weak DMA1_Channel3_IRQHandler.weak DMA1_Channel4_IRQHandler.weak CAN1_TX_IRQHandler.weak CAN1_RX0_IRQHandler.weak CAN1_RX1_IRQHandler.weak CAN1_EWMC_IRQHandler.weak USBFS_IRQHandler//中斷向量表定義中斷向量表vector_base被放置在.init段的首部從flash地址0x08000000開始。 //GD32VF103的中斷向量表實際是由ECLIC控制器CSR寄存器中的mtvec、mtvt、mtvt2寄存器指定 //GD32VF103的中斷控制器具有兩種模式:默認模式和ECLIC模式。模式的設置由mtvec[5:0]指定, //當mtvec[5:0]==6’b000011時為ECLIC模式。處理函數入口由mtvec[31:6]指定(處理函數入口地址必須為64字節對齊)。 //默認模式:所有中斷,異常,NMI都由mtvec[31:6]指定的處理函數進行處理; //ECLIC模式:異常,NMI由mtvec[31:6]指定的處理函數進行處理,中斷由mtvt2寄存器指定的處理函數進行處理,并由mtvt寄存器指定中斷向量表地址.globl vector_base 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 */ #elseDECLARE_INT_HANDLER default_intexc_handler /* 0: Reserved, default handler for Flash download mode */ #endifDECLARE_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 */DECLARE_INT_HANDLER default_intexc_handler /* 6: Reserved */DECLARE_INT_HANDLER eclic_mtip_handler /* 7: Machine timer interrupt */DECLARE_INT_HANDLER default_intexc_handler /* 8: Reserved */DECLARE_INT_HANDLER default_intexc_handler /* 9: Reserved */DECLARE_INT_HANDLER default_intexc_handler /* 10: Reserved */DECLARE_INT_HANDLER default_intexc_handler /* 11: Reserved */DECLARE_INT_HANDLER default_intexc_handler /* 12: Reserved */DECLARE_INT_HANDLER default_intexc_handler /* 13: Reserved */DECLARE_INT_HANDLER default_intexc_handler /* 14: Reserved */DECLARE_INT_HANDLER default_intexc_handler /* 15: Reserved */DECLARE_INT_HANDLER default_intexc_handler /* 16: Reserved */DECLARE_INT_HANDLER eclic_bwei_handler /* 17: Bus Error interrupt */DECLARE_INT_HANDLER eclic_pmovi_handler /* 18: Performance Monitor */DECLARE_INT_HANDLER WWDGT_IRQHandlerDECLARE_INT_HANDLER LVD_IRQHandlerDECLARE_INT_HANDLER TAMPER_IRQHandlerDECLARE_INT_HANDLER RTC_IRQHandlerDECLARE_INT_HANDLER FMC_IRQHandlerDECLARE_INT_HANDLER RCU_IRQHandlerDECLARE_INT_HANDLER EXTI0_IRQHandlerDECLARE_INT_HANDLER EXTI1_IRQHandlerDECLARE_INT_HANDLER EXTI2_IRQHandlerDECLARE_INT_HANDLER EXTI3_IRQHandlerDECLARE_INT_HANDLER EXTI4_IRQHandlerDECLARE_INT_HANDLER DMA0_Channel0_IRQHandlerDECLARE_INT_HANDLER DMA0_Channel1_IRQHandlerDECLARE_INT_HANDLER DMA0_Channel2_IRQHandlerDECLARE_INT_HANDLER DMA0_Channel3_IRQHandlerDECLARE_INT_HANDLER DMA0_Channel4_IRQHandlerDECLARE_INT_HANDLER DMA0_Channel5_IRQHandlerDECLARE_INT_HANDLER DMA0_Channel6_IRQHandlerDECLARE_INT_HANDLER ADC0_1_IRQHandlerDECLARE_INT_HANDLER CAN0_TX_IRQHandlerDECLARE_INT_HANDLER CAN0_RX0_IRQHandlerDECLARE_INT_HANDLER CAN0_RX1_IRQHandlerDECLARE_INT_HANDLER CAN0_EWMC_IRQHandlerDECLARE_INT_HANDLER EXTI5_9_IRQHandlerDECLARE_INT_HANDLER TIMER0_BRK_IRQHandlerDECLARE_INT_HANDLER TIMER0_UP_IRQHandlerDECLARE_INT_HANDLER TIMER0_TRG_CMT_IRQHandlerDECLARE_INT_HANDLER TIMER0_Channel_IRQHandlerDECLARE_INT_HANDLER TIMER1_IRQHandlerDECLARE_INT_HANDLER TIMER2_IRQHandlerDECLARE_INT_HANDLER TIMER3_IRQHandlerDECLARE_INT_HANDLER I2C0_EV_IRQHandlerDECLARE_INT_HANDLER I2C0_ER_IRQHandlerDECLARE_INT_HANDLER I2C1_EV_IRQHandlerDECLARE_INT_HANDLER I2C1_ER_IRQHandlerDECLARE_INT_HANDLER SPI0_IRQHandlerDECLARE_INT_HANDLER SPI1_IRQHandlerDECLARE_INT_HANDLER USART0_IRQHandlerDECLARE_INT_HANDLER USART1_IRQHandlerDECLARE_INT_HANDLER USART2_IRQHandlerDECLARE_INT_HANDLER EXTI10_15_IRQHandlerDECLARE_INT_HANDLER RTC_Alarm_IRQHandlerDECLARE_INT_HANDLER USBFS_WKUP_IRQHandlerDECLARE_INT_HANDLER default_intexc_handlerDECLARE_INT_HANDLER default_intexc_handlerDECLARE_INT_HANDLER default_intexc_handlerDECLARE_INT_HANDLER default_intexc_handlerDECLARE_INT_HANDLER default_intexc_handlerDECLARE_INT_HANDLER EXMC_IRQHandlerDECLARE_INT_HANDLER default_intexc_handlerDECLARE_INT_HANDLER TIMER4_IRQHandlerDECLARE_INT_HANDLER SPI2_IRQHandlerDECLARE_INT_HANDLER UART3_IRQHandlerDECLARE_INT_HANDLER UART4_IRQHandlerDECLARE_INT_HANDLER TIMER5_IRQHandlerDECLARE_INT_HANDLER TIMER6_IRQHandlerDECLARE_INT_HANDLER DMA1_Channel0_IRQHandlerDECLARE_INT_HANDLER DMA1_Channel1_IRQHandlerDECLARE_INT_HANDLER DMA1_Channel2_IRQHandlerDECLARE_INT_HANDLER DMA1_Channel3_IRQHandlerDECLARE_INT_HANDLER DMA1_Channel4_IRQHandlerDECLARE_INT_HANDLER default_intexc_handlerDECLARE_INT_HANDLER default_intexc_handlerDECLARE_INT_HANDLER CAN1_TX_IRQHandlerDECLARE_INT_HANDLER CAN1_RX0_IRQHandlerDECLARE_INT_HANDLER CAN1_RX1_IRQHandlerDECLARE_INT_HANDLER CAN1_EWMC_IRQHandlerDECLARE_INT_HANDLER USBFS_IRQHandler.section .init //指明此處section名為.init.globl _start //指明標簽_start的屬性為全局性.type _start,@function/*** Reset Handler called on controller reset*/ _start:/* ===== Startup Stage 1 ===== *//* Disable Global Interrupt */// 關閉所有中斷csrc CSR_MSTATUS, MSTATUS_MIE/* Jump to logical address first to ensure correct operation of RAM region *///把_start地址載入到a0,根據啟動位置的不同,_start可能在ram地址中也可能在flash中la a0, _start li a1, 1// a1 = a1 << 29 (a1=0x20000000,ram起始地址)slli a1, a1, 29 //if (a1 <= a0) goto _start0800檢測是否在ram中運行,如果在ram中運行,_start地址將會大于 0x20000000bleu a1, a0, _start0800//a1 = a1 >> 2 (a1=0x08000000 flash起始地址)srli a1, a1, 2//if (a1 <= a0) goto _start0800bleu a1, a0, _start0800//a0 =_start0800 程序地址不正確la a0, _start0800//a0 = a0+0x08000000 (把程序地址重新定位到flash中)add a0, a0, a1//跳轉到a0所存的地址jr a0_start0800:/* Initialize GP and Stack Pointer SP */.option push //保存編譯設置.option norelax //禁用相對尋址//設置全局變量指針la gp, __global_pointer$ //將標簽__global_pointer$所處的地址賦值給gp寄存器//標簽__global_pointer$在鏈接腳本中定義,見鏈接腳本__global_pointer$標簽.option pop//設置堆棧指針la sp, _sp //將標簽_sp所處的地址賦值給sp寄存器//標簽_sp在鏈接腳本中定義,見鏈接腳本_sp$標簽/** Set the the NMI base mnvec to share* with mtvec by setting CSR_MMISC_CTL* bit 9 NMI_CAUSE_FFF to 1*///mmisc_ctl = 0x200 ECLIC寄存器mmisc_ctl用于控制NMI中斷向量表,這里設置成和mtvec一致li t0, MMISC_CTL_NMI_CAUSE_FFFcsrs CSR_MMISC_CTL, t0/** Intialize ECLIC vector interrupt* base address mtvt to vector_base*///保存ECLIC中斷向量表的基地址,mtvt保存向量表地址la t0, vector_basecsrw CSR_MTVT, t0/** Set ECLIC non-vector entry to be controlled* by mtvt2 CSR register.* Intialize ECLIC non-vector interrupt* base address mtvt2 to irq_entry.*///mtvt2用于保存中斷響應入口函數地址la t0, irq_entrycsrw CSR_MTVT2, t0csrs CSR_MTVT2, 0x1/** Set Exception Entry MTVEC to exc_entry* Due to settings above, Exception and NMI* will share common entry.*///RISCV處理器在程序執行過程中,一旦遇到異?;蛘咧袛?#xff0c;則終止當前程序流,處理器被強行跳轉到一 //個新的PC地址,該地址由mtvec寄存器指定。設置mtvec寄存器的值,使其指向異常處理函數入口//mtvec用于保存NMI和異常入口函數地址la t0, exc_entrycsrw CSR_MTVEC, t0/* Set the interrupt processing mode to ECLIC mode *///將中斷處理模式設置為ECLIC模式,默認模式和ECLIC模式。模式的設置由mtvec[5:0]指定li t0, 0x3fcsrc CSR_MTVEC, t0csrs CSR_MTVEC, 0x3/* ===== Startup Stage 2 ===== */#ifdef __riscv_flen/* Enable FPU */li t0, MSTATUS_FScsrs mstatus, t0csrw fcsr, x0 #endif/* Enable mcycle and minstret counter */csrci CSR_MCOUNTINHIBIT, 0x5//下列代碼判斷_ilm_lma和_ilm標簽的地址是否相同//如果相同,則意味著代碼直接從Flash中執行,那么直接跳轉到后面數字標簽2所在的代碼執行//如果不相同,則意味著代碼需要從Flash中上載至_ilm中執行,因此lw指令逐條將指令從Flash中讀取出來,然后使用sw指令//逐條寫入_ilm中,通過此方式完成將指令上載至_ilm中/* ===== Startup Stage 3 ===== *//** Load code section from FLASH to ILM* when code LMA is different with VMA*/la a0, _ilm_lma //將標簽_ilm_lma所處的地址賦值給a0寄存器//標簽_ilm_lma在鏈接腳本中定義,見鏈接腳本_ilm_lma標簽la a1, _ilm //將標簽_ilm所處的地址賦值給a1寄存器//標簽_ilm在鏈接腳本中定義,見鏈接腳本_ilm標簽/* If the ILM phy-address same as the logic-address, then quit */beq a0, a1, 2f //a0和a1的值分別為標簽_ilm_lma和_ilm標簽的地址,判斷其是否相等,如果相等//則直接跳轉到后面數字標簽2所在的位置la a2, _eilm //將_eilm所處我地址賦值給a2寄存器//標簽_eilm在鏈接腳本中定義,見鏈接腳本_eilm標簽//通過一個循環,將指令從Flash中搬到ITCM中bgeu a1, a2, 2f//如果_ilm標簽地址比_eilm標簽地址還大,屬于不正常的配置//如果放棄搬運,直接跳轉到后面數字標簽2所在的位置1:/* Load code section if necessary */lw t0, (a0) //從地址指針a0所在的位置(Flash中)讀取32位數sw t0, (a1) //將讀取的32位數寫入地址指針a1所在的位置(_ilm中)addi a0, a0, 4 //將地址指針a0寄存器加4(即32位)addi a1, a1, 4 //將地址指針a1寄存器加4(即32位)bltu a1, a2, 1b //跳回之前數字標簽1所在的位置 2:/* Load data section *///使用與上述相同的原理,通過一個循環,將數據從FLASH中搬運到DTCM中la a0, _data_lmala a1, _datala a2, _edatabgeu a1, a2, 2f 1:lw t0, (a0)sw t0, (a1)addi a0, a0, 4addi a1, a1, 4bltu a1, a2, 1b 2:/* Clear bss section *///BSS段是鏈接器預留的未初始化變量所處的地址段,引導程序必須對其初始化為0//此處通過一個循環來初始化BSS段la a0, __bss_startla a1, _endbgeu a0, a1, 2f 1:sw zero, (a0)addi a0, a0, 4bltu a0, a1, 1b 2:/** Call vendor defined SystemInit to* initialize the micro-controller system*///系統初始化,主要是時鐘初始化call SystemInit/* Call global constructors */la a0, __libc_fini_array //將標簽__libc_fini_array的值賦值給a0作為函數參數call atexit //調用atexit函數/* Call C/C++ constructor start up code */call __libc_init_array //調用__libc_init_array//上述 __libc_fini_array、atexit和__libc_init_array函數都是Newlib C運行庫的特殊庫函數,用于處理一些C/C++程序中//的全局性的構造和析構函數。//__libc_init_array函數會調用一個名為_init的函數/* do pre-init steps before main */call _premain_init/* ===== Call Main Function ===== *//* argc = argv = 0 *///函數調用時由a0和a1寄存器傳遞參數li a0, 0li a1, 0#ifdef RTOS_RTTHREAD// Call entry function when using RT-Threadcall entry //調用entry函數,開始執行entry函數 #elsecall main //調用main函數,開始執行main函數 #endif/* do post-main steps after main */call _postmain_fini1:j 1b //最后死循環,程序理論上不可能執行到此處

(1)__libc_init_array函數會調用一個名為_init的函數,該函數位于:freertos_GD32VF103/nuclei_sdk/SoC/gd32vf103/Common/Source/system_gd32vf103.c
_init函數源碼:

void _init(void) {/* Don't put any code here, please use _premain_init now *///該函數已經不在使用,使用_premain_init()函數 }

(2)由上述源碼可知,_init函數已經不在使用,使用_premain_init()函數,_premain_init()函數源碼:

void _premain_init(void) {/* TODO: Add your own initialization code here, called before main *///用來計算當前運行頻率SystemCoreClock = get_cpu_freq();/* configure USART *///調用gd_com_init()函數對UART模塊進行設計,串口打印信息就是要對uart進行初始化gd_com_init(SOC_DEBUG_UART);/* Display banner after UART initialized *///UART初始化以后打印相關信息,有興趣的可以進入函數看看打印了哪些內容SystemBannerPrint();/* Initialize exception default handlers *///初始化異常處理程序Exception_Init();/* ECLIC initialization, mainly MTH and NLBIT *///ECLIC初始化,主要是MTH和NLBITECLIC_Init(); }

(2-1)get_cpu_freq()函數源碼

uint32_t get_cpu_freq() {uint32_t cpu_freq;// warm upmeasure_cpu_freq(1);// measure for real//調用measure_cpu_freq()函數cpu_freq = measure_cpu_freq(100);return cpu_freq; }

調用measure_cpu_freq()函數,measure_cpu_freq()函數源碼:

uint32_t measure_cpu_freq(uint32_t n) {uint32_t start_mcycle, delta_mcycle;uint32_t start_mtime, delta_mtime;uint32_t mtime_freq = get_timer_freq();// Don't start measuruing until we see an mtime tickuint32_t tmp = (uint32_t)SysTimer_GetLoadValue();do {start_mtime = (uint32_t)SysTimer_GetLoadValue();start_mcycle = __RV_CSR_READ(CSR_MCYCLE); //通過讀取CSR寄存器MCYCLE得到當前時鐘周期,并作為初始計數值} while (start_mtime == tmp); //不斷觀察MTIME計數器并將其值作為初始化時間值do {delta_mtime = (uint32_t)SysTimer_GetLoadValue() - start_mtime;//通過讀取CSR寄存器MCYCLE得到當前時鐘周期,并與初始計數值相減得到這段時間消耗的時鐘周期delta_mcycle = __RV_CSR_READ(CSR_MCYCLE) - start_mcycle;} while (delta_mtime < n);//MTIME計數器的頻率是常開域的參考頻率,Core的運行頻率與CSR寄存器MCYCLE的值一致//通過MCYCLE和MTIME的相對關系計算出當前Core的時鐘頻率return (delta_mcycle / delta_mtime) * mtime_freq+ ((delta_mcycle % delta_mtime) * mtime_freq) / delta_mtime; }

(3)調用gd_com_init()函數對UART模塊進行設計,串口打印信息就是要對uart進行初始化,有興趣的同學可以自行查看
(4) SystemBannerPrint(),UART初始化以后打印相關信息,有興趣的可以進入函數看看打印了哪些內容 ;
(5)Exception_Init(),初始化異常處理程序
(6)ECLIC_Init(),ECLIC初始化,主要是MTH和NLBIT

3 中斷異常

3.1文件位置

中斷異常文件:freertos_GD32VF103/nuclei_sdk/SoC/gd32vf103/Common/Source/GCC/intexc_gd32vf103.S

3.2源碼分析

/** Copyright (c) 2019 Nuclei Limited. All rights reserved.** SPDX-License-Identifier: Apache-2.0** Licensed under the Apache License, Version 2.0 (the License); you may* not use this file except in compliance with the License.* You may obtain a copy of the License at** www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an AS IS BASIS, WITHOUT* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/ /******************************************************************************* \file intexc_gd32vf103.S* \brief NMSIS Interrupt and Exception Handling Template File* for Device gd32vf103* \version V1.00* \date 7 Jan 2020*******************************************************************************/#include "riscv_encoding.h"/*** \brief Global interrupt disabled* \details* This function disable global interrupt.* \remarks* - All the interrupt requests will be ignored by CPU.*/ .macro DISABLE_MIEcsrc CSR_MSTATUS, MSTATUS_MIE .endm/*** \brief Macro for context save* \details* This macro save ABI defined caller saved registers in the stack.* \remarks* - This Macro could use to save context when you enter to interrupt* or exception */ /* Save caller registers */ .macro SAVE_CONTEXT/* Allocate stack space for context saving *///根據宏定義更改堆棧指針,分配20個單字(40位)或者14個單字(28位)空間用于保存寄存器 #ifndef __riscv_32eaddi sp, sp, -20*REGBYTES #elseaddi sp, sp, -14*REGBYTES #endif /* __riscv_32e *///保存ABI定義的“調用者應存儲的寄存器(Caller saved register)”進入堆棧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_32eSTORE 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/*** \brief Macro for restore caller registers* \details* This macro restore ABI defined caller saved registers from stack.* \remarks* - You could use this macro to restore context before you want return* from interrupt or exeception*/ /* Restore caller registers */ //回復用于從堆棧中恢復ABI定義的“調用者應存儲的寄存器(Caller saved register)” .macro RESTORE_CONTEXTLOAD x1, 0*REGBYTES(sp)LOAD x4, 1*REGBYTES(sp)LOAD x5, 2*REGBYTES(sp)LOAD x6, 3*REGBYTES(sp)LOAD x7, 4*REGBYTES(sp)LOAD x10, 5*REGBYTES(sp)LOAD x11, 6*REGBYTES(sp)LOAD x12, 7*REGBYTES(sp)LOAD x13, 8*REGBYTES(sp)LOAD x14, 9*REGBYTES(sp)LOAD x15, 10*REGBYTES(sp) #ifndef __riscv_32eLOAD x16, 14*REGBYTES(sp)LOAD x17, 15*REGBYTES(sp)LOAD x28, 16*REGBYTES(sp)LOAD x29, 17*REGBYTES(sp)LOAD x30, 18*REGBYTES(sp)LOAD x31, 19*REGBYTES(sp)//恢復寄存器后,更改堆棧指針,回收20個單字(40位)或者14個單字(28位)空間/* De-allocate the stack space */addi sp, sp, 20*REGBYTES #else/* De-allocate the stack space */addi sp, sp, 14*REGBYTES #endif /* __riscv_32e */.endm/*** \brief Macro for save necessary CSRs to stack* \details* This macro store MCAUSE, MEPC, MSUBM to stack.*///將MCAUSE, MEPC, MSUBM寄存器里面的值存入到棧中 .macro SAVE_CSR_CONTEXT/* Store CSR mcause to stack using pushmcause */csrrwi x0, CSR_PUSHMCAUSE, 11/* Store CSR mepc to stack using pushmepc */csrrwi x0, CSR_PUSHMEPC, 12/* Store CSR msub to stack using pushmsub */csrrwi x0, CSR_PUSHMSUBM, 13 .endm/*** \brief Macro for restore necessary CSRs from stack* \details* This macro restore MSUBM, MEPC, MCAUSE from stack.*///將MCAUSE, MEPC, MSUBM寄存器的值從棧中恢復 .macro RESTORE_CSR_CONTEXTLOAD x5, 13*REGBYTES(sp)csrw CSR_MSUBM, x5LOAD x5, 12*REGBYTES(sp)csrw CSR_MEPC, x5LOAD x5, 11*REGBYTES(sp)csrw CSR_MCAUSE, x5 .endm/*** \brief Exception/NMI Entry* \details* This function provide common entry functions for exception/nmi.* \remarks* This function provide a default exception/nmi entry.* ABI defined caller save register and some CSR registers* to be saved before enter interrupt handler and be restored before return.*/ .section .text.trap /* In CLIC mode, the exeception entry must be 64bytes aligned */ .align 6 .global exc_entry //此處exc_entry標簽為“弱(weak)屬性”,“弱(weak)屬性”為C/C++語法中定義的一種屬性,一旦有具體的“非弱”性質同名函數存在/將會覆蓋此函數 .weak exc_entry exc_entry://保存相應的狀態寄存器/* Save the caller saving registers (context) */SAVE_CONTEXT/* Save the necessary CSR registers */SAVE_CSR_CONTEXT/** Set the exception handler function arguments* argument 1: mcause value* argument 2: current stack point(SP) value*///傳參,將mcause value和棧指針作為參數傳給core_exception_handler()函數csrr a0, mcausemv a1, sp/** TODO: Call the exception handler function* By default, the function template is provided in* system_Device.c, you can adjust it as you want*///調用core_exception_handler()函數call core_exception_handler//恢復相應的狀態寄存器/* Restore the necessary CSR registers */RESTORE_CSR_CONTEXT/* Restore the caller saving registers (context) */RESTORE_CONTEXT/* Return to regular code *///調用從異常模式返回mret/*** \brief Non-Vector Interrupt Entry* \details* This function provide common entry functions for handling* non-vector interrupts* \remarks* This function provide a default non-vector interrupt entry.* ABI defined caller save register and some CSR registers need* to be saved before enter interrupt handler and be restored before return.*/ .section .text.irq /* In CLIC mode, the interrupt entry must be 4bytes aligned */ .align 2 .global irq_entry //此處irq_entry標簽為“弱(weak)屬性”,“弱(weak)屬性”為C/C++語法中定義的一種屬性,一旦有具體的“非弱”性質同名函數存在 //將會覆蓋此函數 .weak 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/* Default Handler for Exceptions / Interrupts */ .global default_intexc_handler .weak default_intexc_handler Undef_Handler: default_intexc_handler: 1: //數字標簽j 1b //跳轉回標簽1處,因此會成為死循環

總結

以上是生活随笔為你收集整理的GD32VF103启动流程分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

91免费高清观看 | 国产精品久久人 | 国产美女免费观看 | 国产视频精品久久 | 91最新地址永久入口 | 91麻豆传媒 | 国产高h视频 | 久久国产精品区 | 久久99精品国产99久久6尤 | 成人久久免费 | 久久久这里有精品 | 在线免费91| 亚洲在线免费视频 | 人人插人人玩 | 在线观看视频在线观看 | 91在线看视频免费 | www.五月婷婷.com | 国产特级毛片aaaaaa毛片 | 国产一区二区三区高清播放 | 玖玖视频免费在线 | 中文字幕av免费观看 | 久久国产精品99国产 | 天天草夜夜 | 国产亚洲综合性久久久影院 | 欧美日韩国产综合一区二区 | 亚洲欧美日韩一区二区三区在线观看 | 亚洲午夜精品一区 | 国产精品久久一区二区三区, | 99视频在线观看一区三区 | 免费av在线网 | 中文字幕第一页av | 亚洲五月 | 不卡的av电影在线观看 | 国产精品一区二区三区免费看 | 久久tv视频 | 久草资源免费 | 正在播放一区二区 | 亚洲成年人免费网站 | 伊人婷婷| 国产精品免费久久久久影院仙踪林 | 国产视频999| 美女网站在线免费观看 | 成年人在线观看网站 | 国产99在线 | 日韩精品一区二区三区在线视频 | 少妇做爰k8经典 | 国产精品九九久久久久久久 | 国产高清精品在线 | 国产精品免费在线播放 | 一级一级一片免费 | 日韩欧美精品在线观看 | 久久精品播放 | 一区二区三区日韩在线观看 | 手机看片国产日韩 | 国产人在线成免费视频 | 国产高清成人av | 免费久草视频 | 奇米7777狠狠狠琪琪视频 | 亚洲精品视频免费观看 | 亚洲国产中文字幕在线观看 | 中文视频在线播放 | 国产精品久久久久久久午夜片 | 毛片a级片 | 国内精品久久久久影院一蜜桃 | 91九色porny蝌蚪视频 | 亚洲精品乱码久久久久久蜜桃91 | 久久久久国 | 日韩偷拍精品 | 欧美a级片网站 | 国产视频高清 | 99热这里只有精品8 久久综合毛片 | 久草网站在线观看 | 国产精品自产拍在线观看网站 | www.狠狠操 | 国产高清黄色 | 成人高清av在线 | 午夜精品福利一区二区三区蜜桃 | 黄色小说视频在线 | 久久精品国产免费 | 国产精品美女免费视频 | 蜜桃视频在线视频 | 久久精品福利 | 午夜精品婷婷 | 国产精品美女久久久网av | 丁香午夜 | 日韩中文字幕在线观看 | 999久久久精品视频 日韩高清www | 国产精品美女久久久网av | 四虎影视国产精品免费久久 | 五月天婷婷狠狠 | 色先锋资源网 | 一区二区国产精品 | 亚洲精品综合一二三区在线观看 | 一区电影 | 不卡中文字幕在线 | 国际精品网 | 欧美性色综合 | 欧美人交a欧美精品 | 91精品成人 | 色视频网站在线 | av久久久 | 夜夜摸夜夜爽 | 国产精品毛片一区二区在线看 | 狠狠干2018 | 久久免费黄色网址 | 精品国产欧美一区二区三区不卡 | 国产专区在线视频 | h动漫中文字幕 | 人人舔人人舔 | 精品福利在线视频 | 欧美日韩三级在线观看 | 97超碰国产精品 | 成人精品视频久久久久 | av网站免费线看精品 | 亚洲精品在线视频观看 | 久久国产免| 久久综合亚洲鲁鲁五月久久 | 午夜日b视频 | 免费黄色网址网站 | 综合网五月天 | 国产在线综合视频 | 日韩精品一区二区三区第95 | 婷婷色婷婷 | 久久久免费高清视频 | 99福利片 | 日韩高清一区二区 | 一区二区三区动漫 | 国产不卡视频在线 | 色丁香综合 | 天天操夜夜看 | 色综合久久88色综合天天6 | 激情开心 | 五月婷婷狠狠 | 久热久草在线 | 国产综合小视频 | 久久久免费精品国产一区二区 | 国产蜜臀av | 欧美日韩高清一区 | 亚洲精品久久久久www | 97精品国产97久久久久久粉红 | 国产视频观看 | 一区av在线播放 | 国内毛片毛片 | 伊人网站 | 日韩精品无码一区二区三区 | 日韩精品视频在线免费观看 | 中文字幕 国产视频 | 深爱婷婷| 精品国产一区二区三区久久久 | 视频在线精品 | 97精品国产97久久久久久免费 | 欧美日韩亚洲精品在线 | 性色av免费看 | 婷婷丁香五 | 视频一区在线免费观看 | 日韩欧美在线高清 | 国产精品久久久久久久电影 | 91高清免费 | 欧美va天堂va视频va在线 | 免费在线一区二区 | 国内久久看 | 五月天综合激情 | 色99中文字幕 | 欧美日韩精品国产 | 久久91久久久久麻豆精品 | 国产精成人品免费观看 | 国产123av| 在线观看中文字幕 | 久久精品视频网站 | 欧美一进一出抽搐大尺度视频 | 中文字幕在线中文 | 国产精品成人一区二区 | 久久99精品国产91久久来源 | 国产免费叼嘿网站免费 | 国产精品久久久区三区天天噜 | 国产精品一区二区免费视频 | 国产精品一区二区三区在线看 | 天天爱av导航 | 国产高清视频在线免费观看 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 日韩电影中文字幕在线观看 | 国产伦理久久 | 亚洲激情综合 | 国产精品 视频 | 免费高清在线视频一区· | 欧美日韩综合在线观看 | 免费91麻豆精品国产自产在线观看 | 亚洲精品乱码久久 | 91九色在线观看 | 久久精品国产亚洲精品 | 成年人视频免费在线播放 | 91av在线视频播放 | 欧美国产日韩一区二区三区 | 国产一级二级三级视频 | 99精品乱码国产在线观看 | 99精品在线观看视频 | 丁五月婷婷| 亚洲一级黄色 | 久久久久97国产 | 久久99精品久久久久婷婷 | 高清av免费看 | 久久中文欧美 | 成片人卡1卡2卡3手机免费看 | 成人午夜在线电影 | 国产视频综合在线 | 久草线| 久久伊99综合婷婷久久伊 | 国产亚洲精品无 | 97超碰人人模人人人爽人人爱 | 国产精品中文字幕在线 | 日韩免费视频网站 | www.天天射 | 人人看97 | www.亚洲黄| 国产一级电影网 | 欧美一二三区在线播放 | 深爱激情五月婷婷 | 成人国产精品 | 91漂亮少妇露脸在线播放 | 视频成人免费 | 福利精品在线 | 久草网视频 | 欧美专区国产专区 | 免费看国产视频 | 久久狠狠一本精品综合网 | 黄色国产高清 | 亚洲性xxxx | 麻豆视频一区 | 92av视频| 亚洲国产成人在线播放 | 六月丁香六月婷婷 | 午夜 免费 | 日韩超碰在线 | 国产精品成人一区二区 | 青青草视频精品 | 免费三级骚 | 日韩精品一区二区三区免费观看 | 亚洲精品中文字幕在线观看 | av资源在线观看 | 亚洲一区日韩 | 成人午夜在线观看 | 在线观看日韩 | 午夜视频在线观看欧美 | 最近2019中文免费高清视频观看www99 | 国产亚洲人成网站在线观看 | 色999五月色| 久久精品99精品国产香蕉 | 在线观看韩国av | 日韩三级视频 | 91精品在线免费观看视频 | 人人爽人人爽人人片 | 久久精品3 | 91色在线观看视频 | 人人射人人 | av九九九| 五月天婷婷在线视频 | 国产精品一区二区中文字幕 | 久久九九影视网 | 中文字幕第一页在线 | 国产黄色a | 国产在线免费观看 | 欧美一级日韩免费不卡 | 亚洲开心色 | 国产五月天婷婷 | 不卡视频一区二区三区 | 亚洲成人精品久久 | 国产五月| 黄色亚洲片 | 日本中文一级片 | 久久婷婷一区二区三区 | 精品亚洲视频在线观看 | 99国产精品一区二区 | 亚洲成人资源在线观看 | 99久视频 | 一级片免费观看 | 亚洲欧美视频一区二区三区 | 亚洲成a人片77777kkkk1在线观看 | av软件在线观看 | 国产精品久久久一区二区三区网站 | 欧美性高跟鞋xxxxhd | a色视频 | 日韩在线视 | 8x成人免费视频 | 免费在线观看黄色网 | 国产精品国产亚洲精品看不卡15 | 天天色天天干天天 | 国产视频不卡 | 午夜美女av | 四虎国产免费 | 国产在线精品区 | 久久久91精品国产一区二区三区 | 国产老熟 | 精品视频123区在线观看 | 在线播放 日韩专区 | 激情视频在线高清看 | 久久精品视频国产 | 色偷偷人人澡久久超碰69 | 国内三级在线观看 | 欧美精品一区二区三区四区在线 | 国产一区二区三区四区大秀 | 九色自拍视频 | 91在线视频网址 | 久久男人中文字幕资源站 | 精品国产不卡 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 日韩在线视频线视频免费网站 | 久久精品黄 | 国产又粗又长的视频 | 黄色电影小说 | 国产精品理论在线观看 | 午夜精品一区二区三区在线视频 | 日韩电影中文字幕在线观看 | 91豆花在线| 蜜臀av性久久久久蜜臀aⅴ涩爱 | 免费日韩电影 | 麻豆久久久 | 在线视频 精品 | 亚洲一级影院 | 黄色在线观看免费 | 2024国产精品视频 | 高清av中文在线字幕观看1 | 日韩欧美在线免费观看 | 99福利影院 | 97av色 | 欧美精品国产综合久久 | 麻豆成人精品视频 | 亚洲片在线资源 | 久久的色 | 狠狠色狠狠色合久久伊人 | 欧美激情精品久久久久 | 久久黄色a级片 | 999久久国产精品免费观看网站 | 国产精品成人a免费观看 | 一区二区国产精品 | 久久久男人的天堂 | 精品在线观看一区二区三区 | www.91成人| 91热精品| 丁香九月婷婷综合 | 国产亚洲va综合人人澡精品 | 国产欧美精品一区二区三区 | 91成人观看| 97香蕉久久超级碰碰高清版 | 久久全国免费视频 | 久99精品| 五月色综合 | 色婷婷色 | 超碰人人做 | 日韩av男人的天堂 | 人人超碰97 | 亚洲国产精品成人综合 | 国产精品69av | 久久综合五月 | 久久精品国产亚洲 | 91色在线观看视频 | 国产一区二区三区免费视频 | 一区二区三区手机在线观看 | 久久久精选 | 亚洲人在线7777777精品 | 国产福利专区 | 精品一区二区三区在线播放 | 一本之道乱码区 | 91中文在线 | 国产偷v国产偷∨精品视频 在线草 | 日韩欧美视频一区二区 | 欧美精品久久久久 | 91久久奴性调教 | 国产精品九九热 | 黄色精品国产 | 日韩在线观| 免费观看黄色12片一级视频 | 在线视频区 | 99精品国产福利在线观看免费 | 狠狠色香婷婷久久亚洲精品 | 国产精品欧美久久久久三级 | 中文视频在线看 | 日日爱夜夜爱 | 96精品在线 | 精品免费久久久久 | 精品在线亚洲视频 | 狠狠干天天色 | 狠狠干2018 | 免费网站v| 中文字幕日韩高清 | 奇米网网址 | 亚洲成a人片在线观看网站口工 | 国产国产人免费人成免费视频 | 亚洲经典中文字幕 | 欧美精品一区二区蜜臀亚洲 | 在线观看黄 | 亚洲精品456在线播放乱码 | 国产一区二区在线免费播放 | 国产精品去看片 | 国产精品免费视频观看 | 91亚洲精| 五月天六月丁香 | 99在线视频网站 | 久久久久福利视频 | 亚洲黄色一级大片 | 国产精品av免费 | 一级片观看| 国产小视频在线观看 | 麻豆国产视频 | 一区二区视频免费在线观看 | 天天干com| 国产精品久久久久久久午夜片 | aaa毛片视频 | 欧美一区二区免费在线观看 | 99热9| 久久九九国产视频 | 亚洲最新合集 | 日韩精品久久久久久中文字幕8 | 久久久国产电影 | 美女网站在线观看 | 日韩免费视频观看 | 91麻豆网 | 最近中文字幕在线播放 | 成年人免费观看国产 | 久久中文视频 | 色爱区综合激月婷婷 | av观看免费在线 | 国产黄色片久久久 | 搡bbbb搡bbb视频 | 色婷婷激情电影 | 日本视频久久久 | 久草在线中文888 | 日本免费久久高清视频 | 黄色av高清 | 亚洲成人av在线电影 | av免费观看在线 | 免费亚洲一区二区 | 午夜 在线| 欧美日韩xxxxx| 国产正在播放 | 成人国产精品av | 韩国精品一区二区三区六区色诱 | 久久久综合精品 | 97视频亚洲 | 免费三及片 | 亚洲成av人片在线观看无 | 蜜臀一区二区三区精品免费视频 | 成年人免费在线观看网站 | 91香蕉嫩草 | 免费裸体视频网 | 一区二区激情 | 国产一二三四在线观看视频 | 国产激情电影综合在线看 | 国产一级一片免费播放放 | 4p变态网欧美系列 | 久艹视频在线免费观看 | 在线观看午夜 | 国产一区二区免费看 | 久久精品波多野结衣 | 亚洲精品视频免费在线 | 免费高清av在线看 | 欧美色图p | 高清日韩一区二区 | 超碰在线个人 | 99久久精品免费看国产一区二区三区 | 国产综合香蕉五月婷在线 | 久久久污 | 中文字幕影片免费在线观看 | 麻豆传媒一区二区 | 天天插天天操天天干 | 不卡的av在线播放 | 天天射射天天 | 91桃花视频 | 久久怡红院| 亚洲午夜电影网 | 欧美精品国产综合久久 | а中文在线天堂 | 国产精品久久久777 成人手机在线视频 | 亚洲另类久久 | 在线一二三区 | 黄色免费网站大全 | 日韩手机在线 | 久久久免费av | 亚洲欧美在线观看视频 | 亚洲黄色在线播放 | 天天操天天干天天综合网 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 福利一区在线 | 999久久久久久久久久久 | 激情黄色av | 99在线国产 | 欧美国产日韩一区二区三区 | 久久综合狠狠综合久久激情 | 992tv成人免费看片 | 日韩欧美在线综合网 | 国内免费的中文字幕 | 天天色综合天天 | 欧美一二三四在线 | 国产一级黄色av | 久日视频 | 欧美另类tv | 天天看天天操 | 免费网站污 | 久久精品国产第一区二区三区 | 免费激情在线电影 | 久久成年人网站 | 97在线视频免费观看 | 99热最新地址 | 中文字幕在线看视频国产中文版 | 国产伦理久久 | 麻豆国产露脸在线观看 | 亚洲在线观看av | 人人藻人人澡人人爽 | 99热手机在线观看 | 国产视频精选 | 不卡av免费在线观看 | 天天射天天 | 婷婷性综合 | 91麻豆免费版 | 一区二区三区在线免费观看 | 91亚洲网 | 毛片激情永久免费 | 日日躁夜夜躁xxxxaaaa | 激情视频综合网 | 久久久久国产a免费观看rela | www.神马久久 | 免费高清国产 | 天天综合成人网 | 特级西西444www大胆高清无视频 | 国偷自产视频一区二区久 | 亚洲视频中文 | 精品久久久久久久久久久久 | 国产在线一卡 | 九九九九精品九九九九 | 国产视频九色蝌蚪 | 亚洲aⅴ免费在线观看 | 99精品在线看 | 国产在线精品一区二区 | 色丁香综合 | 五月天综合激情 | 色狠狠久久av五月综合 | 少妇精69xxtheporn | 久久精品之 | 免费日韩 | 亚洲精品99久久久久中文字幕 | 一区二区激情视频 | 亚洲狠狠操| 99在线视频免费观看 | 日韩欧美一区视频 | 国产一级免费片 | 亚洲精品视频大全 | 久草在线最新免费 | 久久精品99久久久久久 | 亚洲一级片在线看 | 久久久www免费电影网 | 国产一区二区综合 | 91精品视频一区 | 97色在线观看免费视频 | 不卡av电影在线观看 | 97免费| 97精品国产一二三产区 | 国产精品久久久久久久免费观看 | 久久91久久久久麻豆精品 | 国产精品美女在线 | 国产91精品看黄网站 | 99亚洲国产 | 久久中文字幕视频 | 亚洲精品影视在线观看 | 久草精品视频在线看网站免费 | 视频一区在线免费观看 | 国产一级a毛片视频爆浆 | 久久欧美在线电影 | 久久精品精品 | 久香蕉| 91精品综合| 国产精品一区二 | 午夜精品三区 | 国产福利91精品一区 | 国产精品第一 | 中文久草 | 欧美日本不卡高清 | 人人精久 | 成人久久久电影 | 五月天色网站 | freejavvideo日本免费 | 免费观看日韩av | 日本动漫做毛片一区二区 | 2023年中文无字幕文字 | 在线视频中文字幕一区 | 久草视频在线播放 | 久久免费高清视频 | 国产在线精 | 天天综合日| 91av欧美 | 友田真希x88av | 亚洲精品动漫成人3d无尽在线 | 国产中文字幕视频在线观看 | 在线综合 亚洲 欧美在线视频 | 欧美性脚交 | 欧美日韩视频在线播放 | a√天堂中文在线 | 亚洲专区中文字幕 | 亚州av免费 | 在线观看日本韩国电影 | 美女av在线免费 | 婷婷在线视频观看 | 天天艹天天干天天 | 久久久久97国产 | 亚洲区精品视频 | 亚洲精品乱码久久久久久按摩 | 日韩大片免费在线观看 | 亚洲黄色免费在线 | 久久人人精 | 亚洲欧洲av在线 | 色先锋资源网 | av观看网站 | 麻豆网站免费观看 | 91麻豆精品国产91久久久久 | 99热在线观看 | 人人爱天天操 | 韩国三级av在线 | 天天操天天舔天天干 | www.神马久久 | 免费观看的av | 人人舔人人舔 | 欧美有色 | 国产成人精品免费在线观看 | 三级黄色在线观看 | 亚洲资源网 | 国产精品美女久久久久久2018 | 日日夜夜精品视频 | 97在线免费视频观看 | 日本二区三区在线 | 国产精品午夜av | 亚洲麻豆精品 | 超碰成人网 | 午夜精品久久久久久 | 日日夜夜天天久久 | 国产精品一区二区久久国产 | 香蕉影院在线 | 国产一二三四在线观看视频 | 少妇精品久久久一区二区免费 | 麻豆av一区二区三区在线观看 | 成人91视频| 男女激情免费网站 | 亚洲第一中文字幕 | 99国产在线观看 | 成人91在线 | 婷婷丁香在线视频 | 日韩久久片 | 丁香九月激情 | 国产精品久久久久久69 | 欧美激情视频一二区 | 午夜精品久久久久 | 中文字幕日韩伦理 | 最新国产视频 | 久久免费视频网站 | 天天干天天干天天射 | 久久国产精品网站 | 超碰97免费 | 91污在线观看 | 欧美亚洲精品一区 | 激情丁香久久 | 69成人在线| av东方在线| 国产资源免费在线观看 | 欧美一级小视频 | 黄色特一级 | 久草电影在线观看 | 欧美老人xxxx18 | 日日爽 | 日韩在线观看小视频 | 久久福利在线 | 亚洲更新最快 | 日韩高清激情 | 国产99久久久精品视频 | 日韩av一卡二卡三卡 | 国产视频亚洲 | 人人爱天天操 | 五月激情在线 | 国产激情电影综合在线看 | 色婷婷狠狠 | 天天干天天射天天爽 | 国产精品毛片久久久久久久 | 在线导航av | 国产精品密入口果冻 | 国产精品原创在线 | 色综合欧洲 | 亚洲干 | 在线中文字幕网站 | 波多野结衣在线中文字幕 | 久久久久久久久久久成人 | av网站在线观看播放 | 成人av在线电影 | 娇妻呻吟一区二区三区 | 国产五月婷 | 国产不卡在线看 | 91视频一8mav | 国产尤物在线视频 | 亚洲撸撸 | 国产麻豆视频免费观看 | 2023亚洲精品国偷拍自产在线 | 99久久精品国产亚洲 | 国产精品免费视频久久久 | 伊人首页| 日韩免费一区二区 | 精品91视频 | 亚洲精品欧美视频 | 天天爽人人爽夜夜爽 | 日韩av在线资源 | 亚洲 欧美 国产 va在线影院 | 青青河边草观看完整版高清 | japanese黑人亚洲人4k | 国产一级二级av | 久久美女高清视频 | 精品在线观看免费 | 中文字幕永久在线 | 亚洲精品国精品久久99热一 | 亚洲国产av精品毛片鲁大师 | 精品国产一区二区三区四 | 久久久久久福利 | 国产又粗又猛又爽 | 久久免费精品视频 | 免费看国产a | 欧美极品一区二区三区 | 久久人人爽人人片av | 日韩大片在线免费观看 | 欧美日韩性视频在线 | 久久69精品久久久久久久电影好 | 国产免费精彩视频 | 涩涩成人在线 | 91视频91色| 国产 欧美 日本 | 99精品视频在线看 | 欧美日韩二区在线 | 久草在在线 | 啪啪免费试看 | 中文字幕一区二区在线播放 | 亚洲精品黄色 | 毛片网在线观看 | 韩日成人av | 黄色a在线 | 97人人射 | 日韩在线视频一区二区三区 | 黄色免费网站下载 | 狠狠色丁香婷婷综合基地 | h动漫中文字幕 | 黄色毛片在线看 | 免费日韩电影 | 久久久久久久久电影 | 日韩专区一区二区 | 国产麻豆精品免费视频 | 射久久久| 国产高清久久 | 精品国产一区在线观看 | 日本黄区免费视频观看 | 国产精品视频免费在线观看 | 91在线精品视频 | 香蕉视频一级 | 久久免费看视频 | 国产在线观看你懂的 | 美女亚洲精品 | 久久成人精品电影 | 亚洲国产精品va在线看黑人 | 欧美精品一区二区三区四区在线 | 国产成人精品一二三区 | 欧美日韩高清一区 | 四虎8848免费高清在线观看 | 日韩美女一级片 | 午夜精品久久久久久久99水蜜桃 | 欧美日韩视频在线 | 成人丁香花 | 狠狠干在线| 99精品欧美一区二区三区 | 国产97免费 | 国产精品嫩草55av | 欧美久久久久久久久久 | 久久艹精品 | 91系列在线| 中文字幕一区二区三区四区视频 | 日韩久久久 | 久久99精品久久久久久三级 | 精品人人人 | 国产无套一区二区三区久久 | 久久综合久久综合这里只有精品 | 成人久久精品 | 免费av在 | 国产尤物在线观看 | 九九交易行官网 | 黄色大全视频 | 高清av在线 | 欧美激情操 | 免费观看一区二区 | 国产流白浆高潮在线观看 | 久久伊人婷婷 | 久久人人精 | 激情av在线资源 | 久操免费视频 | 久草免费在线观看 | 国产二区免费视频 | 黄色在线免费观看网站 | 免费av网址大全 | 久草在线免费看视频 | 国产专区第一页 | 日韩网站在线免费观看 | 久草综合在线 | 丁香激情婷婷 | 一区中文字幕电影 | 日韩视频免费在线观看 | 国产日韩欧美视频 | 久久黄色网 | 国产美女视频一区 | 久久久资源 | 久久免费黄色 | 日韩精品久久一区二区 | 国产96精品| 国产精品视频久久久 | 国产精品乱看 | 亚洲成av人片在线观看香蕉 | 久久人人爽人人人人片 | 久草精品在线观看 | 日韩欧美亚洲 | 国产女教师精品久久av | 九九九九九国产 | 久久精品国产一区二区三区 | 成人综合免费 | 久草在线视频精品 | 国产破处在线播放 | 久草在线在线 | 久操97| 国产精品av电影 | 日本中文字幕系列 | 超碰人人91 | 成人av资源网 | 午夜精品区 | 国产一区视频免费在线观看 | 国产成人精品三级 | 99久久精品国产一区二区三区 | 丁香婷婷激情国产高清秒播 | 免费日韩av电影 | 免费av大全 | 久久久久久久久综合 | 婷婷网站天天婷婷网站 | 日韩精品久久久久久中文字幕8 | 激情视频一区二区三区 | 色婷婷狠狠18 | 91精品啪啪| 超碰在线中文字幕 | 在线观看视频三级 | 网站在线观看日韩 | 久久久国产精品电影 | 九九九九精品九九九九 | 亚洲激情网站免费观看 | av在线免费不卡 | 国产一级片免费播放 | 制服丝袜天堂 | av黄免费看 | 精品一区二区在线免费观看 | 国内精品久久天天躁人人爽 | 欧美韩国在线 | 日韩网站免费观看 | 欧美精品久久久久久久久久白贞 | 久久国产精品二国产精品中国洋人 | 婷婷九月丁香 | 国产精品破处视频 | 色五月激情五月 | 欧美人人 | 精品一区二区精品 | 欧美狠狠色 | 国产一区91 | 91精品国产九九九久久久亚洲 | 欧美粗又大 | 免费情趣视频 | 91麻豆高清视频 | 在线精品在线 | 免费男女羞羞的视频网站中文字幕 | 国产一区二区免费看 | www.久热| 久久久不卡影院 | 在线不卡视频 | 狠狠狠狠狠操 | 免费在线观看av电影 | 国产精品毛片一区视频播不卡 | 成人免费在线观看电影 | 久久精品国产亚洲精品 | 国产三级精品在线 | 99色网站 | 精品久久久99 | 一区二区三区高清在线 | 麻豆系列在线观看 | 99热这里只有精品在线观看 | 欧美精品免费在线观看 | av片中文 | 日韩a在线看 | 免费网址在线播放 | 日韩激情精品 | 久久视精品 | 日本视频精品 | 99视频在线观看视频 | 国产精品永久在线观看 | 在线视频观看亚洲 | 久久99国产精品久久99 | 久草线 | 国内久久视频 | 最近日韩中文字幕中文 | 亚洲综合激情 | 亚洲国产成人精品在线观看 | av中文字幕在线观看网站 | 久久亚洲美女 | 日韩一级精品 | 国产香蕉久久精品综合网 | 国产日韩欧美在线观看视频 | 91一区啪爱嗯打偷拍欧美 | 免费黄色a网站 | 激情黄色av | 色在线中文字幕 | 成年人电影免费看 | 国产成人精品国内自产拍免费看 | 九九视频这里只有精品 | 中文字幕国语官网在线视频 | 久久精品在线免费观看 | 国产精品久久久久av免费 | 久草在线观看 | 韩国精品在线 | 国产九九热 | 激情综合网婷婷 | 天天干夜夜夜 | 日韩在线观看视频在线 | 夜夜嗨av色一区二区不卡 | 久久不射电影院 | 日韩免费福利 | 99久久精品国产网站 | 午夜久久久久久久久久久 | 狠狠色丁香婷婷综合久小说久 | 中文字幕在线观看三区 | 九九精品视频在线 | 五月天亚洲综合 | 亚洲精品国产欧美在线观看 | 久久精品第一页 | 欧美日韩综合在线观看 | 久久国色夜色精品国产 | 精品久久久久久久久久国产 | 精品久久久久久电影 | 日韩手机视频 | 精品视频在线视频 | 日韩激情视频 | 日韩中文字幕在线观看 | 深爱综合网 | 夜色成人av| 国产精品欧美激情在线观看 | 亚洲欧美日韩在线看 | 又爽又黄在线观看 | 黄色三级免费看 | 99成人免费视频 | 中文字幕av最新更新 | 国产精品久久久久9999 | 国色综合| 成人高清av在线 | 久久国产精品久久w女人spa | av电影一区 | 久久99这里只有精品 | 五月天高清欧美mv | 亚洲少妇自拍 | 成人久久毛片 | 日韩欧美一区二区不卡 | 日韩免费在线看 | 国产尤物一区二区三区 | 日韩欧美高清一区二区三区 | 久久麻豆视频 | 亚洲精品美女在线观看 | 国产精品毛片网 | 天天干天天摸 | 狠狠的干狠狠的操 | 免费成人结看片 | 国产一区欧美二区 | 日韩一区二区免费在线观看 | 久久九九网站 | 中文字幕美女免费在线 | 亚洲爽爽网 | 五月天婷亚洲天综合网精品偷 | 91视频3p | 欧洲精品亚洲精品 | 四虎影视成人精品国库在线观看 | 日韩乱色精品一区二区 | 成年人天堂com | 婷婷色在线播放 | 欧洲精品久久久久毛片完整版 | 九九热免费视频在线观看 | 久久国产精品99久久久久久丝袜 | 欧美伦理一区二区 | 亚洲精品黄色片 | 亚洲h在线播放在线观看h | 麻豆久久 | 中文字幕 欧美性 | 免费在线观看av网址 | 亚洲欧美日本一区二区三区 | 亚洲成人av片 | 中文字幕国产在线 | 91精选在线观看 | 欧美精品在线观看免费 | 九九九热精品免费视频观看网站 | 99爱视频| 久草在线免费资源站 | bbb搡bbb爽爽爽 |