大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是i.MXRT1xxx的系統中斷延遲時間。
在 《Cortex-M系統中斷延遲及其測量方法簡介》 一文裡,痞子衡介紹了 Cortex-M 中斷延遲的基本概念及一種用 GPIO 子產品來測量中斷延遲時間的方法,今天我們就在 i.MXRT1xxx 系列晶片上用這種方法實測一下中斷延遲:
恩智浦 i.MXRT1xxx 系列目前有很多型号,都是基于 Cortex-M7 核心,主頻從 500MHz 到 1GHz 不等。拿該系列第一款型号 i.MXRT1050 來說,在其官方首頁可以看到其标稱中斷延遲時間低至 20ns。
在 《Cortex-M系統中斷延遲》 一文第一小節裡我們知道 Cortex-M7 的标準中斷延遲是 12 - 14 個核心時鐘周期,i.MXRT1050 主頻是 600MHz ,理論計算可得 (1s / 600MHz) * 12 = 20ns,是以 i.MXRT1050 上這 20ns 的中斷延遲是符合 ARM 标準的。

現在我們在晶片上實測一下,痞子衡把 i.MXRT1011/1021/1052/1062/1176 這五個型号均測了一遍,測試代碼可以基于其各自 SDK 包。
以 i.MXRT1052 為例,選用 \SDK_2.10.0_EVKB-IMXRT1050\boards\evkbimxrt1050\driver_examples\gpio\input_interrupt 例程為模闆(注意選擇 debug build,即代碼連結在 TCM 裡,滿足零等待記憶體的測試需求),按 《Cortex-M系統中斷延遲》 一文第二小節設計思想修改主函數如下(關于 GPIO 中斷使用可以參考 《以i.MXRT1xxx的GPIO子產品為例談談中斷處理函數(IRQHandler)的标準流程》 一文):
Note1: 為了結果的準确性,痞子衡同時測試了多個不同類型的 GPIO 中斷,因為部分 i.MXRT 型号中包含普通 GPIO 和 HSGPIO,并且有些 GPIO 事件既可以觸發 Combined 型中斷,也可以觸發獨立的中斷。 Note2: 輸出信号用的 GPIO 類型對于本次測試不重要,無論選擇普通 GPIO 還是 HSGPIO 去翻轉,其翻轉時長不影響最終測試結果。
現在我們來看 5 個 i.MXRT 型号的詳細測試結果,根據測試結果,我們得出如下結論:
結論1: 不同類型 GPIO(普通GPIO/HSGPIO)或者不同類型的 GPIO 中斷(Combined 型/獨立型),其中斷延遲結果幾乎是一樣的(但是 i.MXRT1170 除外)。 結論2: i.MXRT1020/1050 上測出的 GPIO 中斷延遲接近 ARM 标準值,但是 i.MXRT1010/1060/1170 上測出的 GPIO 中斷延遲大于 ARM 标準值(猜測是 GPIO 子產品設計導緻的延遲較大,并不是核心本身延遲大)。 結論3: 本次方法測出的 GPIO 中斷延遲不是一個固定值,存在約 3 個核心時鐘周期的波動(多次測量觀測到),原因可能是 PAD 信号跳變與 NVIC IRQ 信号置起的同步時機差異。
系統時鐘配置
PAD
GPIO
IRQ
t1
t2
td
中斷延遲時鐘數
Core: 500MHz
IPG: 125MHz
GPIO_01
GPIO1[1]
GPIO1_Combined_0_15_IRQn
74 - 78ns
33ns
41 - 45ns
20 - 23 cycles
GPIO2[1]
GPIO2_Combined_0_15_IRQn
GPIO_SD_05
GPIO2[5]
i.MXRT1011 的 GPIO5[0] 因與 PMIC_ON_REQ 引腳複用,該引腳在 MIMRT1011-EVK 上需要保持拉高給外部 PMIC,是以無法用于測量中斷延遲。
GPIO_AD_B0_06
GPIO1[6]
92 - 96ns
64ns
28 - 32ns
14 - 16 cycles
GPIO1_INT6_IRQn
SNVS_WAKEUP
GPIO5[0]
GPIO5_Combined_0_15_IRQn
Core: 600MHz
IPG: 150MHz
GPIO_AD_B0_02
GPIO1[2]
78 - 82ns
54ns
24 - 28ns
14 - 17 cycles
GPIO1_INT2_IRQn
62 - 66ns
27ns
35 - 39ns
21 - 24 cycles
GPIO6[2]
GPIO6_7_8_9_IRQn
Core: 996MHz
BUS: 240MHz
GPIO_AD_01
GPIO2[31]
GPIO2_Combined_16_31_IRQn
52 - 54ns
29ns
23 - 25ns
23 - 25 cycles
CM7_GPIO2[31]
CM7_GPIO2_3_IRQn
WAKEUP_DIG
GPIO13[0]
GPIO13_Combined_0_31_IRQn
47 - 50ns
18 - 21ns
18 - 21 cycles
至此,i.MXRT1xxx的系統中斷延遲時間痞子衡便介紹完畢了,掌聲在哪裡~~~
文章會同時釋出到我的 部落格園首頁、CSDN首頁、知乎首頁、微信公衆号 平台上。
微信搜尋"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。
最後歡迎關注痞子衡個人微信公衆号【痞子衡嵌入式】,一個專注嵌入式技術的公衆号,跟着痞子衡一起玩轉嵌入式。
衡傑(痞子衡),目前就職于恩智浦MCU系統部門,擔任嵌入式系統應用工程師。
專欄内所有文章的轉載請注明出處:http://www.cnblogs.com/henjay724/
與痞子衡進一步交流或咨詢業務合作請發郵件至 [email protected]
可以關注痞子衡的Github首頁 https://github.com/JayHeng,有很多好玩的嵌入式項目。
關于專欄文章有任何疑問請直接在部落格下面留言,痞子衡會及時回複免費(劃重點)答疑。
痞子衡郵箱已被私信擠爆,技術問題不推薦私信,堅持私信請先掃碼付款(5元起步)再發。