国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

借助i.MXRT10xx系列INIT_VTOR功能縮短程序熱重啟時間

恩智浦MCU加油站 ? 來源:未知 ? 2023-09-07 08:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

最近痞子衡寫了篇文章 《i.MXRT從Serial NAND啟動時間測量》,這篇文章詳細測試了不同長度的 Non-XIP 程序在不同 NAND 訪問速度下由 BootROM 加載啟動所需要的時間,比如 240KB 的程序在 60MHz NAND 的訪問速度下啟動時間接近 30ms,這個啟動時間對于有些響應時間敏感的應用(比如汽車電子)來說還是比較長的。

對于Non-XIP 程序,經過冷啟動后,其程序體本身已經被加載進芯片內部 SRAM 了,除非發生 POR,否則 SRAM 中的程序會一直保持著。假設程序在惡劣的電磁環境中運行,代碼里雖然包含異常復位的處理,但是每次程序復位啟動時間還是和冷啟動時間一樣長(每次都需要 BootROM 搬移加載),有點難以接受。那么對于這種熱啟動的情況,程序啟動時間能夠縮短嗎?答案是可以的,今天痞子衡就介紹下 i.MXRT 上的 INIT_VTOR 特性:

  • 備注1:本文主角是i.MXRT1050,但內容也基本適用其它i.MXRT10xx系列。

  • 備注2:同樣的測試在i.MXRT1160/1170下無效,因為CM7_INIT_VTOR所在的IOMUXC_LPSR_GPR->GPR26在軟復位下不能保持。

INIT_VTOR功能簡介

在介紹INIT_VTOR 功能之前,大家首先要對 ARM Cortex-M 內核的中斷向量表偏移寄存器 SCB->VTOR 功能有所了解,具體可以看痞子衡的舊文 《Cortex-M中斷向量表原理及其重定向方法》

簡單來說,芯片上電啟動后內核都是從 SCB->VTOR 指向的地址處獲取程序中斷向量表里的第二個向量即所謂的復位函數Reset_Handler。有了復位函數,就找到了程序入口。

;摘取自 startup_MIMXRT1052.s


__vector_table
        DCD     sfe(CSTACK)
        DCD     Reset_Handler


        DCD     NMI_Handler
        DCD     HardFault_Handler
        DCD     MemManage_Handler
        DCD     BusFault_Handler
        DCD     UsageFault_Handler
        ...

對于i.MXRT1050,我們知道芯片上電復位都是執行 BootROM 代碼,BootROM 中斷向量表固定放在了 0x0020_0000 地址處。那么這個 0x0020_0000 地址是怎么被賦給 SCB->VTOR 寄存器的呢?這就引出了本文主角 IOMUXC_GPR->GPR16[32:7] - CM7_INIT_VTOR 位,這 25bits 的 CM7_INIT_VTOR 值每次復位都會被芯片系統自動加載進 SCB->VTOR[32:7] 中,其默認值即對應 BootROM 中斷向量表地址。

wKgaomT5H2aAdRDcAAHCJimzT7I824.png

正如痞子衡舊文 《妙用i.MXRT1xxx里SystemReset不復位的GPR寄存器》 提及的那樣,IOMUXC_GPR 寄存器僅在 POR 復位或者整體重新上電時才會被置位,這就意味著我們在應用程序中只需要設置一次 CM7_INIT_VTOR 值,其后不管發生多少次類似NVIC_SystemReset() 的復位,CM7_INIT_VTOR 值都不會改變。

使用INIT_VTOR縮短程序熱重啟有了上一節的理論基礎,我們來做個實驗。痞子衡找了一塊MIMXRT1050-EVK12(Rev.A)板卡,將其啟動設備換成串行 NAND 啟動(電阻切換到使能 U33,并將 U33 替換成華邦 W25N01GV)。

然后按照串行 NAND 啟動時間測試方法那樣修改SDK_2_13_0_EVKB-IMXRT1050oardsevkbimxrt1050demo_appsled_blinkyiar 例程(debug build,即代碼在 ITCM 運行,注意修改鏈接文件中的 m_interrupts_start = 0x00002000),并在SystemInit() 函數里調用如下測試函數,根據是否設置 IOMUXC_GPR->GPR16 寄存器編譯出兩個不同鏡像文件(直接編輯 bin 文件將其均填充至 120KB)。

void set_led_gpio(void)
{
  CLOCK_EnableClock(kCLOCK_Iomuxc);
  gpio_pin_config_t USER_LED_config = {
      .direction = kGPIO_DigitalOutput,
      .outputLogic = 0U,
      .interruptMode = kGPIO_NoIntmode
  };
  GPIO_PinInit(GPIO1, 9U, &USER_LED_config);
  IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_09_GPIO1_IO09, 0U); 
  IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_09_GPIO1_IO09, 0x10B0U); 


  SystemCoreClockUpdate();
  GPIO_PinWrite(GPIO1, 9U, 0U);
  SDK_DelayAtLeastUs(5000, SystemCoreClock);
  // 根據是否設置 CM7_INIT_VTOR 分別編譯兩個不同鏡像文件
  // 設置 CM7_INIT_VTOR 指向地址 0x00002000,即用戶應用程序中斷向量表
  IOMUXC_GPR->GPR16 = (IOMUXC_GPR->GPR16 & (~IOMUXC_GPR_GPR16_CM7_INIT_VTOR_MASK)) | IOMUXC_GPR_GPR16_CM7_INIT_VTOR(0x2000 >> 7);
  NVIC_SystemReset();
  while (1);
}

然后借助 MCUBootUtility 工具將這兩個不同鏡像文件下載進串行 NAND flash,并測試相應啟動時間。這里 Flash 運行速度就選擇 60MHz:

wKgaomT5H2aAKAn5AAMJ690cG2E305.png

下面是不設置 IOMUXC_GPR->GPR16 的程序啟動時間測試結果,無論是一開始的POR 冷啟動還是后面 NVIC_SystemReset() 引起的熱啟動,啟動時間都需要約 18.66ms

wKgaomT5H2eAW0UdAAKPtJnjHj4659.png

下面是設置了 IOMUXC_GPR->GPR16 指向 0x2000 之后的程序啟動時間測試結果,只有一開始的 POR 冷啟動時間是 18.66ms,后面 NVIC_SystemReset() 引起的熱啟動時間僅需要約 5.26ms。

wKgaomT5H2eAboIyAAK8a9zvM1Y368.png

上述實驗結果證明,設置 IOMUXC_GPR->GPR16 指向應用程序中斷向量表之后確實能縮短程序熱啟動時間。有朋友可能會疑問,設置了從 ITCM 直接熱啟動后為何還是有 5.26ms 的啟動時間?這其實主要是從進入應用程序 Reset_Handler 到執行到測試 GPIO 拉低時的代碼所消耗的時間,并且需要注意的是由 BootROM 加載執行的程序默認是在 ROM 配置后的 396MHz 主頻下執行的(主頻夠快,測試代碼消耗時間可以忽略不計),而直接復位從ITCM 里執行的程序是在默認主頻 12MHz 下執行的(主頻較慢,測試代碼消耗時間不得不計)。

最后再提一下,除了直接在應用程序里設置 IOMUXC_GPR->GPR16 之外,也可以借助 BootROM 的 DCD 功能來設置,同樣可以借助 MCUBootUtility 直接完成(詳細步驟可參考《利用i.MXRT1xxx系列ROM集成的DCD功能可輕松配置指定外設》),痞子衡實測是有效的。

wKgaomT5H2eAIOHQAAFKKSIpWPg547.png

翻看i.MXRT1050 參考手冊 System Boot 章節,IOMUXC_GPR寄存器地址空間也確實在有效的 DCD 設置范圍。

wKgaomT5H2eAPPLeAAH_DYTe6kY727.png

END

更多恩智浦AI-IoT市場和產品信息,邀您同時關注“NXP客棧”微信公眾號

wKgaomT5H2eAUoESAABCdkRE230504.jpg ? ? ?

NXP客棧


恩智浦致力于打造安全的連接和基礎設施解決方案,為智慧生活保駕護航。

長按二維碼,關注我們

恩智浦MCU加油站


這是由恩智浦官方運營的公眾號,著重為您推薦恩智浦MCU的產品信息、開發技巧、教程文檔、培訓課程等內容。

wKgaomT5H2eAIENNAAATNlPH08Y631.jpg ?

長按二維碼,關注我們


原文標題:借助i.MXRT10xx系列INIT_VTOR功能縮短程序熱重啟時間

文章出處:【微信公眾號:恩智浦MCU加油站】歡迎添加關注!文章轉載請注明出處。

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

    關注

    147

    文章

    18925

    瀏覽量

    398254
  • 恩智浦
    +關注

    關注

    14

    文章

    6095

    瀏覽量

    147428

原文標題:借助i.MXRT10xx系列INIT_VTOR功能縮短程序熱重啟時間

文章出處:【微信號:NXP_SMART_HARDWARE,微信公眾號:恩智浦MCU加油站】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    成功案例 I 35% 生產效率提升,羅德與施瓦茨借助 Celsius EC Solver 縮短仿真周期

    我們希望有一款能夠直接處理CAD模型的工具,以提升整體生產效率。CelsiusECSolver所展現的功能讓我們感到非常驚喜。基于我們的對比分析,該工具無疑是R&S的最佳仿真解決方案
    的頭像 發表于 02-27 17:12 ?1092次閱讀
    成功案例 <b class='flag-5'>I</b> 35% 生產效率提升,羅德與施瓦茨<b class='flag-5'>借助</b> Celsius EC Solver <b class='flag-5'>縮短</b><b class='flag-5'>熱</b>仿真周期

    深入解析xx555系列精密定時器:功能、應用與設計要點

    深入解析xx555系列精密定時器:功能、應用與設計要點 在電子工程師的工具箱中,定時器是一種至關重要的組件,它廣泛應用于各種電子設備中,用于實現精確的時間控制。今天,我們將深入探討
    的頭像 發表于 02-10 15:40 ?288次閱讀

    汽車級SPI總線I/O擴展器TXE81XX-Q1:特性、應用與設計要點

    汽車級SPI總線I/O擴展器TXE81XX-Q1:特性、應用與設計要點 在汽車電子系統中,隨著功能的不斷增加和復雜度的提升,對通用并行輸入/輸出(I/O)端口的需求也日益增長。TXE8
    的頭像 發表于 12-15 15:20 ?381次閱讀

    汽車級SPI總線I/O擴展器TXE81XX-Q1:特性、應用與設計指南

    汽車級SPI總線I/O擴展器TXE81XX-Q1:特性、應用與設計指南 在汽車電子系統日益復雜的今天,對于I/O端口數量和功能的需求也在不斷增加。TXE81
    的頭像 發表于 12-15 15:05 ?449次閱讀

    ?ADS79xx系列模數轉換器數據手冊總結

    ADS79xx 是一款 12、10、8 位兼容多通道模擬轉數字轉換器系列。設備比較表顯示了該產品系列的全部十二款設備。 這些設備包括基于電容的SAR模/模轉換器,具有固有采樣保持
    的頭像 發表于 11-25 14:21 ?884次閱讀
    ?ADS79<b class='flag-5'>xx</b><b class='flag-5'>系列</b>模數轉換器數據手冊總結

    恩智浦i.MXRT1180的FlexSPI NOR啟動連接方式

    最近屬于i.MXRT11xx陣營的第二代旗艦i.MXRT1180正式發布了,今天咱們就來介紹它的FlexSPI NOR啟動連接方式,在閱讀本文前最好把FlexSPI NOR啟動連接方式(RT1060)先看完,對i.MXRT1xx
    的頭像 發表于 11-08 10:20 ?6441次閱讀
    恩智浦<b class='flag-5'>i.MXRT</b>1180的FlexSPI NOR啟動連接方式

    重新配置SCB-&gt;VTOR = 0x08010000后,再次復位,程序異常的原因?

    SysInit / MX_TIM12_Init(); LL_TIM_EnableCounter(TIM12); SetResetBit(); MX_DMA_Init(); MX_I2C2_Init
    發表于 07-22 06:56

    復旦微低功耗mcuFM33A0xx系列代理供應

    FM33A0xx系列 簡介: FM33A0xx系列芯片是ARM Cortex-M0內核的32位低功耗MCU芯片,最大可支持512KB FLASH程序
    發表于 06-12 18:03

    實現IAP功能,使用cubeide生成APP程序的bin文件寫入Flash之后,無法跳轉到APP程序中,為什么?

    實現IAP功能,使用cubeide生成APP程序的bin文件寫入Flash之后,無法跳轉到APP程序中。 但是使用KEIL編譯生成的bin文件寫入FLASH之后,可以正常執行。 在檢查棧頂地址是否
    發表于 06-09 07:32

    使用cubeide生成APP程序的bin文件寫入Flash之后,無法跳轉到APP程序中,怎么解決?

    實現IAP功能,使用cubeide生成APP程序的bin文件寫入Flash之后,無法跳轉到APP程序中。 但是使用KEIL編譯生成的bin文件寫入FLASH之后,可以正常執行。 在檢查棧頂地址是否
    發表于 06-06 08:04

    多個i.MXRT共享一顆Flash啟動的方法與實踐(下)

    在 《多個i.MXRT共享一顆Flash啟動的方法與實踐(上)》 一文里痞子衡給大家從理論上介紹一種多 i.MXRT 共享 Flash 啟動的方法,但是理論雖好,如果沒有經過實踐驗證切實可行,不過是紙上談兵,所以今天痞子衡就找了兩個 i
    的頭像 發表于 06-05 10:04 ?1182次閱讀
    多個<b class='flag-5'>i.MXRT</b>共享一顆Flash啟動的方法與實踐(下)

    多個i.MXRT共享一顆Flash啟動的方法與實踐(上)

    有些客戶應用會采用多顆 i.MXRT 芯片設計一主多從的硬件架構(目的不一,或仿多核 MCU 系統、或拓展 GPIO 數量),因為 i.MXRT 片內無非易失性存儲器,這時候為整個系統配置合適的啟動設備保證每個 i.MXRT
    的頭像 發表于 06-05 10:01 ?1151次閱讀
    多個<b class='flag-5'>i.MXRT</b>共享一顆Flash啟動的方法與實踐(上)

    主從系統中i.MXRT系列MCU從主處理器接收App數據包超時機制

    i.MXRT內置ROM程序配套的與主機交互方法,有如下三種。其中方法一是比較常用的,把PC當作主機,因為UART/USB接口可以直接從PC引出,這種方式一般集成在上位機GUI工具里(比如恩智浦官方
    的頭像 發表于 04-17 10:54 ?1806次閱讀
    主從系統中<b class='flag-5'>i.MXRT</b><b class='flag-5'>系列</b>MCU從主處理器接收App數據包超時機制

    國產電壓基準源對標REF34XX/ADR34XX的模擬I/O模塊替換方案

    國產電壓基準源對標REF34XX/ADR34XX的模擬I/O模塊替換方案
    的頭像 發表于 04-03 09:49 ?1264次閱讀
    國產電壓基準源對標REF34<b class='flag-5'>XX</b>/ADR34<b class='flag-5'>XX</b>的模擬<b class='flag-5'>I</b>/O模塊替換方案

    window10選擇更新并重啟后,重啟轉圈一晚上,什么原因

    window10選擇更新并重啟后,重啟轉圈一晚上,什么原因
    發表于 03-25 10:23