<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      痞子衡嵌入式:再測i.MXRT1060,1170上的普通GPIO與高速GPIO極限翻轉頻率


        大家好,我是痞子衡,是正經(jīng)搞技術的痞子。今天痞子衡給大家介紹的是i.MXRT1060/1170上的普通GPIO與高速GPIO極限翻轉頻率

        按照上一篇文章 《實測i.MXRT1010上的普通GPIO與高速GPIO極限翻轉頻率》 里的測試流程和方法,痞子衡今天帶大家再測試下含有 HSGPIO 模塊的 i.MXRT1060 和 i.MXRT1170 系列。從芯片整體性能上來說,它們倆都是 i.MXRT1010 的老大哥,但是老大哥未必是方方面面都碾壓小老弟的,有時候系統(tǒng)設計越復雜,細節(jié)之處反而越難優(yōu)化。今天我們就來對比看看它們在 GPIO 上的表現(xiàn):

      • Note1: i.MXRT1064 跟 i.MXRT1060 是同一種 Die, GPIO 性能是一致的;i.MXRT1160 和 i.MXRT1170 在 GPIO 上性能也類似。
      • Note2: 測量所用示波器型號是 Tektronix MSO5204,帶寬 2GHz, 采樣率 10GS/s。

      一、i.MXRT1060(1064)上的測試

      1.1 測試板卡及測試點

        選定的板卡是恩智浦官方 MIMXRT1060-EVK,這次我們選了 Arduino J22 接口的 Pin3,即 GPIO_AD_B0_11,這個 PAD 既可以配到普通 GPIO(GPIO1[11]) 也可以配到 HSGPIO(GPIO6[11]),默認外圍可選功能電路上的電阻都是 DNP 狀態(tài),因此這個 PAD 是懸空的:

      1.2 I/O 翻轉測試代碼

        測試工程我們可以直接在 \SDK_2.11.0_EVK-MIMXRT1060\boards\evkmimxrt1060\driver_examples\gpio\led_output 例程上修改,為了盡力展示 GPIO 極限性能,不受其他瓶頸因素干擾,這里選擇代碼執(zhí)行性能最高的工程 build(即代碼段在 ITCM 里,數(shù)據(jù)段在 DTCM 里)。I/O 測試代碼很簡單:

      void io_test_init(bool useNormalGpio)
      {
          gpio_pin_config_t led_config = {kGPIO_DigitalOutput, 0, kGPIO_NoIntmode};
          CLOCK_EnableClock(kCLOCK_Iomuxc);
          IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_11_GPIO1_IO11, 0U); 
          // Fast Slew Rate, R0/7, 200MHz
          IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_11_GPIO1_IO11, 0x10F9U); 
          if (useNormalGpio)
          {
              // GPIO1
              IOMUXC_GPR->GPR26 &= ~(1u << 11);
              GPIO_PinInit(GPIO1, 11, &led_config);
          }
          else
          {
              // GPIO6
              IOMUXC_GPR->GPR26 |= (1u << 11);
              GPIO_PinInit(GPIO6, 11, &led_config);
          }
      }
      
      void io_test_run(void)
      {
          io_test_init(false);
          while (1)
          {
              GPIO6->DR_TOGGLE = 0x800;
          }
      }
      

      1.3 芯片系統(tǒng)時鐘配置

        《普通GPIO與高速GPIO差異及其用法》 一文里講了,普通 GPIO 時鐘源是 IPG Bus,而 HSGPIO 時鐘源是 AHB Bus,因此測試工程里 AHB/IPG 時鐘配置會影響最終 I/O 翻轉極限頻率。下圖是 i.MXRT1060 內(nèi)核結構里的 HSGPIO 通路。

        led_output 例程里的默認系統(tǒng)時鐘配置,AHB/Core 時鐘來自于 PLL1,將這個源配置為 1200 MHz,ARM_PODF 設 1(兩分頻),AHB_PODF 設 0 (即不分頻),IPG Bus 時鐘源固定來自于 AHB/Core,且只能在其基礎上做 1/2/3/4 分頻,我們知道 IPG Bus 最高僅支持 150MHz,因此在這種情況下 IPG_PODF 只能設 3(四分頻),最終 AHB 時鐘是 600MHz,IPG 時鐘是 150MHz,HSGPIO 和 GPIO 訪問可以同時得到最優(yōu)性能(這點設計上是優(yōu)于 i.MXRT1010 的)。

      PPL1, CCM_ANALOG->PLL_ARM[DIV_SELECT] = 100,即 24MHz*DIV_SELECT/2 = 1200MHz
      CCM->CACRR[ARM_PODF] = 3'b001,divide by 2
      CCM->CBCMR[PRE_PERIPH_CLK_SEL] = 2'b11,derive clock from divided PLL1
      CCM->CBCDR[PERIPH_CLK_SEL] = 1'b0,derive clock selected by CCM->CBCMR[PRE_PERIPH_CLK_SEL]
      CCM->CBCDR[AHB_PODF] = 3'b000,divide by 1
      CCM->CBCDR[IPG_PODF] = 2'b11,divide by 4
      

      1.4 I/O 翻轉測試結果

        現(xiàn)在我們來看一下測試結果,根據(jù)實測結果,我們得到了如下結論:

      • 總結1: PAD配置里的運行頻率并不限制最終輸出翻轉頻率,實際輸出的波形幅值響應表現(xiàn)跟外圍電路關系較大。
      • 總結2: 置位 GPIO->DR_TOGGLE 寄存器可獲得最佳 I/O 翻轉性能
      • 總結3: 普通 GPIO 翻轉頻率約是時鐘源 IPG Bus 的 1/8,極限翻轉頻率是 18.69MHz
      • 總結4: HSGPIO 翻轉頻率約是時鐘源 AHB Bus 的 1/4,極限翻轉頻率是 149.24MHz
      • 總結5: i.MXRT1060 的 GPIO 性能跟 i.MXRT1010 差不多,但是 HSGPIO 性能比 i.MXRT1010 差很多。
      AHB/Core時鐘頻率 IPG總線時鐘頻率 I/O PAD配置 I/O翻轉方法 普通GPIO極限翻轉頻率 高速GPIO極限翻轉頻率
      600MHz 150MHz Fast Slew, 200MHz 異或GPIO->DR 6.289MHz
      標準幅度方波
      22.99MHz
      標準幅度方波
      600MHz 150MHz Fast Slew, 200MHz 置位GPIO->DR_TOGGLE 18.69MHz
      標準幅度方波
      149.24MHz
      標準幅度正弦波

      二、i.MXRT1170(1160)上的測試

      2.1 測試板卡及測試點

        選定的板卡是恩智浦官方 MIMXRT1170-EVK,板卡上連接 LED 燈的是 GPIO_AD_04,翻看芯片參考手冊,這個 PAD 既可以配到普通 GPIO(GPIO9[3] 或者 GPIO3[3]) 也可以配到 HSGPIO(CM7_GPIO3[3]),我們選擇這個 PAD 做測試。

        與此同時,作為比較,還多選了一個 GPIO_AD_01 腳作為測量點 2,這個 PAD 既可以配到普通 GPIO(GPIO9[0] 或者 GPIO3[0]) 也可以配到 HSGPIO(CM7_GPIO3[0]),外圍電路接近于懸空。

        此外,最終 I/O 輸出波形形態(tài)跟外圍驅(qū)動電路也有關聯(lián),所以這里也有必要交待清楚:

      2.2 I/O 翻轉測試代碼

        測試工程我們可以直接在 \SDK_2.11.0_MIMXRT1170-EVK\boards\evkmimxrt1170\driver_examples\gpio\led_output\cm7 例程上修改,為了盡力展示 GPIO 極限性能,不受其他瓶頸因素干擾,這里選擇代碼執(zhí)行性能最高的工程 build(即代碼段在 ITCM 里,數(shù)據(jù)段在 DTCM 里)。I/O 測試代碼很簡單:

      void io_test_init(bool useNormalGpio)
      {
          gpio_pin_config_t led_config = {kGPIO_DigitalOutput, 0, kGPIO_NoIntmode};
          CLOCK_EnableClock(kCLOCK_Iomuxc);
          IOMUXC_SetPinMux(IOMUXC_GPIO_AD_04_GPIO_MUX3_IO03, 0U); 
          IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_04_GPIO_MUX3_IO03, 0x000eU); 
          if (useNormalGpio)
          {
              // GPIO3
              IOMUXC_GPR->GPR42 &= ~(1u << 3);
              GPIO_PinInit(GPIO3, 3, &led_config);
          }
          else
          {
              // CM7_GPIO3
              IOMUXC_GPR->GPR42 |= (1u << 3);
              GPIO_PinInit(CM7_GPIO3, 3, &led_config);
          }
      }
      
      void io_test_run(void)
      {
          io_test_init(false);
          while (1)
          {
              CM7_GPIO3->DR_TOGGLE = 0x8;
          }
      }
      

        特別提醒的是在 i.MXRT1170 IOMUXC 模塊 SW_PAD_CTL 控制寄存器里取消了 SPEED 配置,并且 DSE 配置也從 3bit 減少到 1bit,這點跟 i.MXRT1010/1060 上設計不一樣:

      2.3 芯片系統(tǒng)時鐘配置

        《普通GPIO與高速GPIO差異及其用法》 一文里講了,普通 GPIO 時鐘源是 IPG Bus(在 i.MXRT1170 里叫 BUS_CLK),而 HSGPIO 時鐘源是 AHB Bus(在 i.MXRT1170 里叫 M7_CLK),因此測試工程里 AHB/IPG 時鐘配置會影響最終 I/O 翻轉極限頻率。下圖是 i.MXRT1170 內(nèi)核結構里的 HSGPIO 通路。

      • Note1: GPIO1 - 6 時鐘源是 BUS_CLK,該總線最高頻率 240MHz
      • Note2: GPIO7 - 12 時鐘源是 BUS_LPSR_CLK,該總線最高頻率 160MHz
      • Note3: GPIO13 時鐘源是 RCOSC_32K

        led_output 例程里的默認系統(tǒng)時鐘配置,M7_CLK 時鐘來自于 ARM_PLL,將這個源配置為 996 MHz。BUS_CLK 時鐘來自于 SYS_PLL3,固定 480MHz,BUS_ROOT 配置里做了兩分頻,最終 M7_CLK 時鐘是 996MHz,BUS_CLK 時鐘是 240MHz(相較于 i.MXRT1010/1060 的最大 150MHz 有所提升),HSGPIO 和 GPIO 訪問可以同時得到最優(yōu)性能。此外,i.MXRT1170 的系統(tǒng)時鐘設計是最靈活也最簡單的。

      ARM_PLL, 即 24MHz*DIV_SELECT/2/POST_DIV = 996MHz
               ANADIG_PLL->ARM_PLL_CTRL[DIV_SELECT] = 166,
               ANADIG_PLL->ARM_PLL_CTRL[POST_DIV_SEL] = 2'b00,Divide by 2
      // 0 - CLOCK Root M7
      CCM->CLOCK_ROOT[0].CONTROL[MUX] = 3'b100,PLL_ARM_CLK
      CCM->CLOCK_ROOT[0].CONTROL[DIV] = 8'h00,Divider selected clock by DIV + 1.
      
      SYS_PLL3, ANADIG_PLL->SYS_PLL3_CTRL[SYS_PLL3_GATE] = 1'b0,固定 480MHz
      // 2 - CLOCK Root Bus
      CCM->CLOCK_ROOT[2].CONTROL[MUX] = 3'b100,SYS_PLL3_CLK
      CCM->CLOCK_ROOT[2].CONTROL[DIV] = 8'h01,Divider selected clock by DIV + 1.
      

      2.4 I/O 翻轉測試結果

        現(xiàn)在我們來看一下測試結果,根據(jù)實測結果,我們得到了如下結論:

      • 總結1: 置位 GPIO->DR_TOGGLE 寄存器可獲得最佳 I/O 翻轉性能
      • 總結2: 普通 GPIO 翻轉頻率約是時鐘源 BUS_CLK 的 1/14,極限翻轉頻率是 17.12MHz
      • 總結3: HSGPIO 翻轉頻率約是時鐘源 M7_CLK 的 1/4,極限翻轉頻率是 248.87MHz
      • 總結4: i.MXRT1170 的 GPIO 性能跟 i.MXRT1010/1060 差不多,HSGPIO 性能跟 i.MXRT1010 差不多。
      M7_CLK時鐘頻率 BUS_CLK時鐘頻率 I/O PAD配置 I/O翻轉方法 普通GPIO極限翻轉頻率 高速GPIO極限翻轉頻率
      996MHz 240MHz Fast Slew 異或GPIO->DR 7.058MHz
      標準幅度方波
      41.24MHz
      標準幅度方波
      996MHz 240MHz Fast Slew 置位GPIO->DR_TOGGLE 17.12MHz
      標準幅度方波
      248.87MHz
      1/4幅度正弦波

        至此,i.MXRT1060/1170上的普通GPIO與高速GPIO極限翻轉頻率痞子衡便介紹完畢了,掌聲在哪里~~~

      歡迎訂閱

      文章會同時發(fā)布到我的 博客園主頁CSDN主頁知乎主頁微信公眾號 平臺上。

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

      posted @ 2021-11-20 14:49  痞子衡  閱讀(1048)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 日本熟妇XXXX潮喷视频| 亚洲成av人片无码天堂下载| 亚洲日韩在线中文字幕第一页 | 内地偷拍一区二区三区| 久久精品国产亚洲αv忘忧草 | japan黑人极大黑炮| 国产中文三级全黄| 久久精品午夜视频| 91老熟女老女人国产老| 亚洲日韩图片专区第1页 | 扎兰屯市| 狠狠噜天天噜日日噜无码| 四虎成人在线观看免费| 无码人妻黑人中文字幕| 亚洲精品日韩中文字幕| 久久精品国产亚洲夜色av| 久久精品国产亚洲av忘忧草18| 中文字幕国产精品专区| 丰满人妻被黑人猛烈进入| 国产成人AV一区二区三区在线 | 亚洲AV无码久久精品成人| 国产一二三五区不在卡| 中文字幕人妻无码一区二区三区 | 亚洲精品久久久中文字幕痴女| 中文字幕日韩有码一区| 成在人线av无码免费| 国产999久久高清免费观看| 狠狠做五月深爱婷婷天天综合| 高级艳妇交换俱乐部小说| 亚洲更新最快无码视频| 国产91小视频在线观看| 少妇人妻偷人精品一区二| 亚洲精品一区国产| 精品人妻一区二区| 99久久99这里只有免费费精品| 国产露脸无套对白在线播放| 亚洲第一最快av网站| 亚洲人成小说网站色在线| 97免费公开在线视频| 色偷偷久久一区二区三区| 国产高清在线男人的天堂|