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

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

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

3天內不再提示

I.MXRT FreeRTOS環境下擦寫外部Flash

li1756686189 ? 來源:嵌入式 MCU ? 2023-01-30 09:18 ? 次閱讀

FreeRTOS環境下,如果外部擦寫 Flash,禁用指令緩存以避免在多個任務中使用來自Flash 的分支預測和應用程序同步操作 Flash的緩存預加載指令。因為代碼是XIP,所以向量表也在Flash 中。所以,當發生中斷時,內核將讀取此中斷向量表。如果同時,Flash閃存被編程寫入,讀取操作將失敗。用戶通過禁用中斷來保護關鍵代碼,以避免這種情況。

使用 "taskENTER/EXIT_CRITICAL()" 函數,最后它會調用如下圖這個函數vPortRaiseBASEPRI。該函數只能禁用優先級低于configMAX_SYSCALL_INTERRUPT_priority的中斷,這可以確保系統仍然可以工作。因此,需要檢查所有其他外設中斷的優先級,比如LCDIPv2_IRQn,LPUART,LPSPI 等等。要確保優先級低于configMAX_SYSCALL_INTERRUPT_priority,或將configMAX_SYSCALL_INTERROPT_priority配置為更高的優先級。

afeaf3aa-a028-11ed-bfe3-dac502259ad0.png

不需要逐一禁用所有IRQ。因此,如果使用上述方式還有問題,請嘗試如下API

__set_PRIMASK(1);//關閉總中斷

//擦,寫,讀 Flash//

__set_PRIMASK(0);//開啟總中斷

參考示例代碼:

/* FreeRTOS kernel includes. */

#include "FreeRTOS.h"

#include "task.h"

#include "queue.h"

#include "timers.h"

/* Freescale includes. */

#include "fsl_device_registers.h"

#include "fsl_debug_console.h"

#include "fsl_flexspi.h"

#include "pin_mux.h"

#include "clock_config.h"

#include "board.h"

#include "app.h"

#include "fsl_common.h"

/* Task priorities. */

#define hello_task_PRIORITY (configMAX_PRIORITIES - 2)

#define flash_operation_task_PRIORITY (configMAX_PRIORITIES - 1)

static void hello_task(void *pvParameters);

static void flash_operation_task(void *pvParameters);

status_t flexspi_nor_flash_read_sector(FLEXSPI_Type *base, uint32_t address, const uint32_t *src, size_t leng);

extern status_t flexspi_nor_flash_erase_sector(FLEXSPI_Type *base, uint32_t address);

extern status_t flexspi_nor_flash_page_program(FLEXSPI_Type *base, uint32_t dstAddr, const uint32_t *src);

extern status_t flexspi_nor_get_vendor_id(FLEXSPI_Type *base, uint8_t *vendorId);

extern status_t flexspi_nor_enable_quad_mode(FLEXSPI_Type *base);

extern void flexspi_nor_flash_init(FLEXSPI_Type *base);

extern void flexspi_clear_buffer(FLEXSPI_Type *base);

flexspi_device_config_t deviceconfig = {

.flexspiRootClk = 12000000,

.flashSize = FLASH_SIZE,

.CSIntervalUnit = kFLEXSPI_CsIntervalUnit1SckCycle,

.CSInterval = 2,

.CSHoldTime = 3,

.CSSetupTime = 3,

.dataValidTime = 0,

.columnspace = 0,

.enableWordAddress = 0,

.AWRSeqIndex = 0,

.AWRSeqNumber = 0,

.ARDSeqIndex = NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD,

.ARDSeqNumber = 1,

.AHBWriteWaitUnit = kFLEXSPI_AhbWriteWaitUnit2AhbCycle,

.AHBWriteWaitInterval = 0,

};

constuint32_tcustomLUT[CUSTOM_LUT_LENGTH]={

/* Normal read mode -SDR */

[4 * NOR_CMD_LUT_SEQ_IDX_READ_NORMAL] =

FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x03, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18),

[4 * NOR_CMD_LUT_SEQ_IDX_READ_NORMAL + 1] =

FLEXSPI_LUT_SEQ(kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0),

/* Fast read mode - SDR */

[4 * NOR_CMD_LUT_SEQ_IDX_READ_FAST] =

FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x0B, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18),

[4 * NOR_CMD_LUT_SEQ_IDX_READ_FAST + 1] = FLEXSPI_LUT_SEQ(

kFLEXSPI_Command_DUMMY_SDR, kFLEXSPI_1PAD, 0x08, kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x04),

/* Fast read quad mode - SDR */

[4 * NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD] =

FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0xEB, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_4PAD, 0x18),

[4 * NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD + 1] = FLEXSPI_LUT_SEQ(

kFLEXSPI_Command_DUMMY_SDR, kFLEXSPI_4PAD, 0x06, kFLEXSPI_Command_READ_SDR, kFLEXSPI_4PAD, 0x04),

/* Read extend parameters */

[4 * NOR_CMD_LUT_SEQ_IDX_READSTATUS] =

FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x81, kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x04),

/* Write Enable */

[4 * NOR_CMD_LUT_SEQ_IDX_WRITEENABLE] =

FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x06, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0),

/* Erase Sector */

[4 * NOR_CMD_LUT_SEQ_IDX_ERASESECTOR] =

FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0xD7, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18),

/* Page Program - single mode */

[4 * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_SINGLE] =

FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x02, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18),

[4 * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_SINGLE + 1] =

FLEXSPI_LUT_SEQ(kFLEXSPI_Command_WRITE_SDR, kFLEXSPI_1PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0),

/* Page Program - quad mode */

[4 * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD] =

FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x32, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18),

[4 * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD + 1] =

FLEXSPI_LUT_SEQ(kFLEXSPI_Command_WRITE_SDR, kFLEXSPI_4PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0),

/* Read ID */

[4 * NOR_CMD_LUT_SEQ_IDX_READID] =

FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x9F, kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x04),

/* Enable Quad mode */

[4 * NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG] =

FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x01, kFLEXSPI_Command_WRITE_SDR, kFLEXSPI_1PAD, 0x04),

/* Enter QPI mode */

[4 * NOR_CMD_LUT_SEQ_IDX_ENTERQPI] =

FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x35, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0),

/* Exit QPI mode */

[4 * NOR_CMD_LUT_SEQ_IDX_EXITQPI] =

FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_4PAD, 0xF5, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0),

/* Read status register */

[4 * NOR_CMD_LUT_SEQ_IDX_READSTATUSREG] =

FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x05, kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x04),

/* Erase whole chip */

[4 * NOR_CMD_LUT_SEQ_IDX_ERASECHIP] =

FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0xC7, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0),

};

int main(void)

{

/* Init board hardware. */

BOARD_ConfigMPU();

BOARD_InitPins();

BOARD_BootClockRUN();

BOARD_InitDebugConsole();

PRINTF("Flash Operation on FreeRTOS in XIP Mode! ");

if (xTaskCreate(hello_task, "Hello_task", configMINIMAL_STACK_SIZE + 100, NULL, hello_task_PRIORITY, NULL) !=

pdPASS)

{

PRINTF("Task creation failed!. ");

while (1)

;

}

if (xTaskCreate(flash_operation_task, "flash_operation_task", configMINIMAL_STACK_SIZE + 800, NULL,

flash_operation_task_PRIORITY, NULL) != pdPASS)

{

PRINTF("Task creation failed!. ");

while (1)

;

}

vTaskStartScheduler();

for (;;)

;

}

static void hello_task(void *pvParameters)

{

for (;;)

{

PRINTF("Hello world. ");

/* delay 2s */

vTaskDelay(2 * configTICK_RATE_HZ);

}

}

static void flash_operation_task(void *pvParameters)

{

status_t status;

uint8_t vendorID = 0;

/*Programe Buffer must be 4 and 4's multiplier bytes alignment */

uint8_t *nor_program_buffer = pvPortMalloc(256);

if (NULL == nor_program_buffer)

{

PRINTF("nor_program_buffer memory allocation failed! ");

configASSERT(NULL);

}

uint8_t *nor_read_buffer = pvPortMalloc(256);

if (NULL == nor_read_buffer)

{

PRINTF("nor_read_buffer memory allocation failed! ");

configASSERT(NULL);

}

taskENTER_CRITICAL();

flexspi_nor_flash_init(EXAMPLE_FLEXSPI);

taskEXIT_CRITICAL();

/* Get vendor ID. */

status = flexspi_nor_get_vendor_id(EXAMPLE_FLEXSPI, &vendorID);

if (status != kStatus_Success)

{

PRINTF("Get Vendor ID Failure!");

configASSERT(NULL);

}

PRINTF("Flash Vendor ID: 0x%x ", vendorID);

/* Disable I cache to avoid cache pre-fatch instruction with branch prediction from flash and application operate flash synchronously in multi-tasks. */

#if defined(__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)

volatile bool ICacheEnableFlag = false;

/* Disable I cache. */

if (SCB_CCR_IC_Msk == (SCB_CCR_IC_Msk & SCB->CCR))

{

SCB_DisableICache();

ICacheEnableFlag = true;

}

#endif /* __ICACHE_PRESENT */

/* Enter quad mode. */

taskENTER_CRITICAL();

status = flexspi_nor_enable_quad_mode(EXAMPLE_FLEXSPI);

taskEXIT_CRITICAL();

#if defined(__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)

if (ICacheEnableFlag)

{

/* Enable I cache. */

SCB_EnableICache();

ICacheEnableFlag = false;

}

#endif /* __ICACHE_PRESENT */

if (status != kStatus_Success)

{

configASSERT(NULL);

}

/* Erase sectors. */

PRINTF("Erasing Serial NOR over FlexSPI... ");

/* Disable I cache to avoid cache pre-fatch instruction with branch prediction from flash and application operae flash synchronously inmulti-tasks.*/

#if defined(__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)

/* Disable I cache. */

if (SCB_CCR_IC_Msk == (SCB_CCR_IC_Msk & SCB->CCR))

{

SCB_DisableICache();

ICacheEnableFlag = true;

}

#endif /* __ICACHE_PRESENT */

taskENTER_CRITICAL();

status = flexspi_nor_flash_erase_sector(EXAMPLE_FLEXSPI, EXAMPLE_SECTOR * SECTOR_SIZE);

taskEXIT_CRITICAL();

#if defined(__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)

if (ICacheEnableFlag)

{

/* Enable I cache. */

SCB_EnableICache();

ICacheEnableFlag = false;

}

#endif /* __ICACHE_PRESENT */

if (status != kStatus_Success)

{

PRINTF("Erase sector failure ! ");

configASSERT(NULL);

}

/* Invalidate the D cache before reading data from QSPI Flash */

#if defined(CACHE_MAINTAIN) && CACHE_MAINTAIN

DCACHE_InvalidateByRange(EXAMPLE_FLEXSPI_AMBA_BASE + EXAMPLE_SECTOR * SECTOR_SIZE, FLASH_PAGE_SIZE);

#endif

memcpy(nor_read_buffer, (void *)(EXAMPLE_FLEXSPI_AMBA_BASE + EXAMPLE_SECTOR * SECTOR_SIZE), FLASH_PAGE_SIZE);

for (uint16_t i = 0; i < FLASH_PAGE_SIZE; i++)

{

if (0xFF != nor_read_buffer[i])

{

PRINTF("Erase data - read out data value incorrect ! ");

configASSERT(NULL);

}

}

PRINTF("Sector Erase successfully ! ");

/* Program Sector */

for (uint16_t i = 0U; i < FLASH_PAGE_SIZE; i++)

{

nor_program_buffer[i] = i;

}

/* Clean program buffer to maker sure program data is valid before program execution for SDRAM target, because heap is cacheabe in SDRAM target.*/

#if defined(USE_SDRAM) && USE_SDRAM

#if defined(CACHE_MAINTAIN) && CACHE_MAINTAIN

DCACHE_CleanByRange((uint32_t)nor_program_buffer, FLASH_PAGE_SIZE);

#endif

#endif

/* Disable I cache to avoid cache pre-fatch instruction with branch prediction from flash andapplication operate flash synchronously inmulti-tasks.*/

#if defined(__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)

/* Disable I cache. */

if (SCB_CCR_IC_Msk == (SCB_CCR_IC_Msk & SCB->CCR))

{

SCB_DisableICache();

ICacheEnableFlag = true;

}

#endif /* __ICACHE_PRESENT */

taskENTER_CRITICAL();

status = flexspi_nor_flash_page_program(EXAMPLE_FLEXSPI, EXAMPLE_SECTOR * SECTOR_SIZE, (void *)nor_program_buffer);

taskEXIT_CRITICAL();

#if defined(__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)

if (ICacheEnableFlag)

{

/* Enable I cache. */

SCB_EnableICache();

ICacheEnableFlag = false;

}

#endif /* __ICACHE_PRESENT */

if (status != kStatus_Success)

{

PRINTF("Page program failure ! ");

configASSERT(NULL);

}

PRINTF("Page program successfully ! ");

/* clean the D cache before reading data from QSPI Flash */

#if defined(CACHE_MAINTAIN) && CACHE_MAINTAIN

DCACHE_InvalidateByRange(EXAMPLE_FLEXSPI_AMBA_BASE + EXAMPLE_SECTOR * SECTOR_SIZE, FLASH_PAGE_SIZE);

#endif

/* the below read sector API can be used in both Code in QSPI mode and Code in SRAM mode */

taskENTER_CRITICAL();

memcpy(nor_read_buffer, (void *)(EXAMPLE_FLEXSPI_AMBA_BASE + EXAMPLE_SECTOR * SECTOR_SIZE), FLASH_PAGE_SIZE);

taskEXIT_CRITICAL();

PRINTF("Read Sector Content: ");

for (uint16_t i = 0; i < FLASH_PAGE_SIZE; i++)

{

PRINTF("%d, ", nor_read_buffer[i]);

}

PRINTF(" Flash operation done, suspend this task now. ");

/* Suspend itself */

vTaskSuspend(NULL);

}

審核編輯:湯梓紅

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

    關注

    10

    文章

    1644

    瀏覽量

    148755
  • 中斷
    +關注

    關注

    5

    文章

    900

    瀏覽量

    41792
  • 程序
    +關注

    關注

    117

    文章

    3798

    瀏覽量

    81457
  • 函數
    +關注

    關注

    3

    文章

    4346

    瀏覽量

    63012
  • FreeRTOS
    +關注

    關注

    12

    文章

    484

    瀏覽量

    62414

原文標題:I.MXRT FreeRTOS 環境下擦寫外部 Flash

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

收藏 人收藏

    評論

    相關推薦

    i.MXRT設計更新Segger J-Link Flash下載算法文件

    給大家分享的是為i.MXRT設計更新Segger J-Link Flash下載算法文件。  想要在Flash中調試,基本是離不開Flash下載算法的,畢竟要先將代碼燒寫進
    發表于 12-15 06:11

    i.MXRT系列FlexSPI驅動Flash頁編程執行時間

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是i.MXRT系列FlexSPI驅動Flash頁編程執行時間。  痞子衡之前寫過一篇文章 《串行NOR Flash的頁編程模式對于
    發表于 12-21 07:30

    i.MXRT上使能NOR Flash的Continuous read模式在軟復位后無法正常啟動怎么解決?

    i.MXRT上使能NOR Flash的Continuous read模式在軟復位后無法正常啟動怎么解決?
    發表于 01-19 07:19

    IAR開發環境i.MXRT的串行NOR Flash下載算法設計

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是IAR開發環境i.MXRT的串行NOR Flash下載算法設計。  在i.MX
    發表于 01-26 07:46

    i.MXRT上使能NOR Flash的Continuous read模式在軟復位后無法正常啟動問題的解決

    《串行NOR Flash的Continuous read模式軟復位后i.MXRT無法啟動問題解決方案之RESET#》,利用RESET#引腳復位功能是痞子衡找到的第一種解決方案,今天痞子衡繼續給大家介...
    發表于 01-26 06:52

    FlexSPI復位方式不當會導致i.MXRT系列OTFAD加密啟動失敗怎么解決?

    FlexSPI復位方式不當會導致i.MXRT系列OTFAD加密啟動失敗怎么解決?
    發表于 02-07 08:11

    使用PTPD/FreeRTOS和WIP-TCP/IP堆棧在i.MXRT上實現IEEE1588v2是我教程

    使用PTPD、FreeRTOS和WIP-TCP/IP堆棧在i.MXRT上實現IEEE1588v2
    發表于 12-12 06:42

    淺析Keil MDK串行Flash的下載算法設計

    今天給大家介紹的是 Keil MDK 工具 i.MXRT 的串行 NOR Flash 下載算法設計。 在 i.MXRT 硬件那些事系列之《在串行 NOR
    的頭像 發表于 12-23 13:15 ?1553次閱讀

    J-Link工具i.MXRT的串行NOR Flash下載算法設計

    大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是 J-Link 工具 i.MXRT 的串行 NOR Flash 下載算法設計。 一、J-Link 各版本對 i.MXRT
    的頭像 發表于 12-08 10:07 ?1094次閱讀

    Flash不支持SFDP,如何下載適用i.MXRT

    大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是導致串行 NOR Flashi.MXRT 無法正常下載 / 啟動的常見因素之 SFDP。 i.MXRT 系列 M
    的頭像 發表于 10-30 10:30 ?824次閱讀

    痞子衡嵌入式:MCUXpresso IDE使用J-Link下載算法在Flash調試注意事項(i.MXRT500為例)...

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是MCUXpresso IDE使用J-Link下載算法在Flash調試注意事項。  痞子衡前段時間寫過一篇小文《為i.MXRT
    發表于 10-29 10:36 ?0次下載
    痞子衡嵌入式:MCUXpresso IDE<b class='flag-5'>下</b>使用J-Link下載算法在<b class='flag-5'>Flash</b>調試注意事項(<b class='flag-5'>i.MXRT</b>500為例)...

    痞子衡嵌入式:串行NOR Flash的Continuous read模式軟復位后i.MXRT無法啟動問題解決方案之SW Reset...

    《串行NOR Flash的Continuous read模式軟復位后i.MXRT無法啟動問題解決方案之RESET#》,利用RESET#引腳復位功能是痞子衡找到的第一種解決方案,今天痞子衡繼續給大家介...
    發表于 12-02 12:51 ?1次下載
    痞子衡嵌入式:串行NOR <b class='flag-5'>Flash</b>的Continuous read模式<b class='flag-5'>下</b>軟復位后<b class='flag-5'>i.MXRT</b>無法啟動問題解決方案之SW Reset...

    i.MXRT上提升代碼執行性能的十八般武藝

    SBL 項目是支持全系列 i.MXRT 平臺的,為了具體化問題,我們就選取 i.MXRT1062 型號為例,官方配套 MIMXRT1060-EVK 板子上搭配了一顆四線串行 NOR Flash(芯成IS25WP064A)用于存放
    的頭像 發表于 05-23 09:31 ?1414次閱讀

    擦寫Flash時一定不能開啟系統全局中斷嗎?

    大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是i.MXRTFlexSPI driver實現Flash編程時對于中斷支持問題。
    的頭像 發表于 02-10 14:27 ?3544次閱讀

    深入i.MXRT1050系列ROM中串行NOR Flash啟動初始化流程

    我們知道外部串行NOR Flash是接到i.MXRT的FlexSPI外設引腳上,有時串行NOR Flash啟動也叫FlexSPI NOR啟動。
    的頭像 發表于 06-02 17:43 ?1594次閱讀
    深入<b class='flag-5'>i.MXRT</b>1050系列ROM中串行NOR <b class='flag-5'>Flash</b>啟動初始化流程
    主站蜘蛛池模板: 国产大片黄在线观看 | 黄色视屏免费在线观看 | 久久国产高清视频 | 日鲁夜鲁鲁狠狠综合视频 | 天天做天天爽爽快快 | 亚洲一卡2卡4卡5卡6卡在线99 | 你懂得的在线观看免费视频 | 免费视频精品 | 激情欧美一区二区三区中文字幕 | 九九热在线观看 | 国产jzjzjz免费大全视频 | 久久性 | 一级a毛片免费 | 免费人成网站永久 | 91网站免费在线观看 | 黄色网址播放 | 久久精品国产精品亚洲毛片 | 成人在线看片 | 天堂最新版在线www在线 | 48pao强力打造免费基地 | 天天影视欧美综合在线观看 | 欧美人与动欧交视频 | 国产成人1024精品免费 | 四虎影院久久 | 成人国产一区二区三区 | 亚洲一卡2卡4卡5卡6卡在线99 | 你懂的在线免费视频 | 四虎影院永久免费 | 日韩一卡 二卡 三卡 四卡 免费视频 | 色综合成人 | 一区二区高清在线观看 | 在线色综合 | 五月天婷婷免费观看视频在线 | 伊人9999| 精品国产污网站在线观看15 | 亚洲va久久久噜噜噜久久天堂 | 中文字幕亚洲一区二区三区 | 性欧美videofree另类超大 | 波多野结衣在线视频观看 | 侵犯希崎中文字幕在线 | 天天拍天天射 |