天天看點

痞子衡嵌入式:利用GPIO子產品來測量i.MXRT1xxx的系統中斷延遲時間

  大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是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 标準的。

痞子衡嵌入式:利用GPIO子產品來測量i.MXRT1xxx的系統中斷延遲時間

  現在我們在晶片上實測一下,痞子衡把 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 信号置起的同步時機差異。
痞子衡嵌入式:利用GPIO子產品來測量i.MXRT1xxx的系統中斷延遲時間

系統時鐘配置

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子產品來測量i.MXRT1xxx的系統中斷延遲時間

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

痞子衡嵌入式:利用GPIO子產品來測量i.MXRT1xxx的系統中斷延遲時間

Core: 600MHz

IPG: 150MHz

GPIO_AD_B0_02

GPIO1[2]

78 - 82ns

54ns

24 - 28ns

14 - 17 cycles

GPIO1_INT2_IRQn

痞子衡嵌入式:利用GPIO子產品來測量i.MXRT1xxx的系統中斷延遲時間

62 - 66ns

27ns

35 - 39ns

21 - 24 cycles

GPIO6[2]

GPIO6_7_8_9_IRQn

痞子衡嵌入式:利用GPIO子產品來測量i.MXRT1xxx的系統中斷延遲時間

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首頁、知乎首頁、微信公衆号 平台上。

微信搜尋"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。

痞子衡嵌入式:利用GPIO子產品來測量i.MXRT1xxx的系統中斷延遲時間

  最後歡迎關注痞子衡個人微信公衆号【痞子衡嵌入式】,一個專注嵌入式技術的公衆号,跟着痞子衡一起玩轉嵌入式。

痞子衡嵌入式:利用GPIO子產品來測量i.MXRT1xxx的系統中斷延遲時間
痞子衡嵌入式:利用GPIO子產品來測量i.MXRT1xxx的系統中斷延遲時間
痞子衡嵌入式:利用GPIO子產品來測量i.MXRT1xxx的系統中斷延遲時間

  衡傑(痞子衡),目前就職于恩智浦MCU系統部門,擔任嵌入式系統應用工程師。

  專欄内所有文章的轉載請注明出處:http://www.cnblogs.com/henjay724/

  與痞子衡進一步交流或咨詢業務合作請發郵件至 [email protected]

  可以關注痞子衡的Github首頁 https://github.com/JayHeng,有很多好玩的嵌入式項目。

  關于專欄文章有任何疑問請直接在部落格下面留言,痞子衡會及時回複免費(劃重點)答疑。

  痞子衡郵箱已被私信擠爆,技術問題不推薦私信,堅持私信請先掃碼付款(5元起步)再發。