日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

你见过的MCU最高GPIO翻转频率是多少?

發布時間:2023/12/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你见过的MCU最高GPIO翻转频率是多少? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

上一篇文章 《聊聊i.MXRT1xxx上的普通GPIO與高速GPIO差異及其用法》,痞子衡從原理上介紹了 i.MXRT1xxx 系列里普通 GPIO 和 HSGPIO 差異,今天我們就來實測它們的極限翻轉頻率,看看它們實際表現差別到底有多大。本次選擇的測試芯片是 i.MXRT1010,這顆芯片從功能上來說是目前 i.MXRT1xxx 系列里的小兄弟,但別小看它,因為是后面推出的型號,恩智浦的設計團隊為它在某些方面做了特殊的性能優化,包括 HSGPIO 性能。話不多說,開測:

一、測試準備工作

1.1 測試板卡及測試點

選定的板卡是恩智浦官方 MIMXRT1010-EVK,板卡上連接 LED 燈的是 GPIO_11,翻看芯片參考手冊,這個 PAD 既可以配到普通 GPIO(GPIO1[11]) 也可以配到 HSGPIO(GPIO2[11]),正是理想的 PAD,我們就選擇這個 PAD 做測試。此外,最終 I/O 輸出波形形態跟外圍驅動電路也有關聯,所以這里也有必要交待清楚:

1.2 I/O 翻轉測試代碼

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

I/O 初始化代碼很簡單,在 《普通GPIO與高速GPIO差異及其用法》 文章里都介紹清楚了。這里僅有一點注意,為了統一最終 I/O 輸出效果,不管是用于普通 GPIO 還是 HSGPIO,我們都直接將測試 PAD 配置到最快的 200MHz 運行頻率(PAD 支持的 50/100/150/200MHz 運行頻率配置不同有何影響,文章最后會交待):

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_11_GPIOMUX_IO11,?0U);?//?Fast?Slew?Rate,?R0/6,?200MHzIOMUXC_SetPinConfig(IOMUXC_GPIO_11_GPIOMUX_IO11,?0x70F9U);if?(useNormalGpio){//?GPIO1IOMUXC_GPR->GPR26?&=?~(1u?<<?11);GPIO_PinInit(GPIO1,?11,?&led_config);}else{//?GPIO2IOMUXC_GPR->GPR26?|=?(1u?<<?11);GPIO_PinInit(GPIO2,?11,?&led_config);} }

在 GPIO 模塊里跟電平輸出控制相關的寄存器有兩個,一個是 DR 寄存器,另一個是 DR_TOGGLE 寄存器,都可用于實現輸出電平翻轉。有如下代碼所示的三種常見電平翻轉方法,在低翻轉頻率情況下,這三種方法是等效的,但是在極限翻轉頻率情況下,這三種方法表現不完全一致,下一節實測結果會告訴你:

void?io_test_run(void) {io_test_init(false);while?(1){//?電平翻轉方法一:異或位操作//GPIO2->DR?^=?0x800;//?電平翻轉方法二:直接切換位//GPIO2->DR?=?0x800;//GPIO2->DR?=?0x000;//?電平翻轉方法三:利用 TOGGLE 位GPIO2->DR_TOGGLE?=?0x800;} }

1.3 芯片系統時鐘配置

《普通GPIO與高速GPIO差異及其用法》 一文里講了,普通 GPIO 時鐘源是 IPG Bus,而 HSGPIO 時鐘源是 AHB Bus,因此測試工程里 AHB/IPG 時鐘配置會影響最終 I/0 翻轉極限頻率。下圖是 i.MXRT1010 內核結構里的 HSGPIO 通路,它和 i.MXRT1060/1170 內核結構里 HSGPIO 通路其實有點小區別,這也是 i.MXRT1010 上的優化之處。

led_output 例程里的默認系統時鐘配置,AHB/Core 時鐘來自于 PLL6 - 500MHz,AHB_PODF 設 0 (即不分頻),而 IPG Bus 時鐘源固定來自于 AHB/Core,且只能在其基礎上做 1/2/3/4 分頻,我們知道 IPG Bus 最高僅支持 150MHz,因此在這種情況下 IPG_PODF 只能設 3(四分頻),IPG 時鐘實際是 125MHz,顯然 HSGPIO 訪問可以得到最優性能,但普通 GPIO 達不到最優性能。

為了測試普通 GPIO 的最優性能,我們需要同時再測試一種新的系統時鐘配置,AHB/Core 時鐘源選用 PLL2_PFD3,將這個源配置為 452.6 MHz,AHB_PODF 依舊設 0,這樣 IPG_PODF 設 2(三分頻)可以得到 150.8MHz 的 IPG 時鐘,這時普通 GPIO 訪問可以得到最優性能,不過 HSGPIO 訪問就要損失點性能了。

二、測試波形結果

準備工作都做完了,現在就是示波器連上板卡開始實測了,根據組合,一共有時鐘配置(x2)* I/O 類型(x2)* 翻轉方法(x3)總計 12 個結果,這里僅貼出 HSGPIO 在 500MHz AHB/Core 時鐘頻率下的三種翻轉方法所得到的波形結果,全部測試結果見最后一節。

首先是 GPIO->DR 寄存器異或位操作得到的波形結果,為了減少 while(1) 的執行對翻轉頻率的影響(畢竟這一句指令也是要消耗 CPU 周期的),我們在 while(1) 里加十次翻轉代碼,統計結果時也是取 10 個波形周期,最終得到翻轉頻率為 22.946 MHz,效果似乎一般。匯編窗口來看,這句 C 代碼異或操作被翻譯成了三條指令,先 LDR 指令讀出 GPIO->DR 寄存器當前值,然后 EOR 指令做異或操作,最后再 STR 指令寫入 GPIO->DR 寄存器,應該是 LDR 回讀指令耗時較長。

再來看 GPIO->DR_TOGGLE 置位操作和 GPIO->DR 的直接寫入操作結果,實測下來發現這兩種方法得到的翻轉頻率是一樣的(從匯編窗口來看兩種翻轉方法都是僅一條 STR 指令搞定),都是 250MHz,效果雖好,但有點過頭,因為波形里看到的不是標準幅值的方波(受200MHz帶寬示波器限制),而是減半幅值的正弦波,也不排除 PAD 最大運行速度是 200MHz,它只能保證在低于 200MHz 的情況下有很好的電壓幅值響應表現,超過這個頻率,波形頻率值不受影響,但電壓幅值響應表現不能保證。

三、完整結果統計

現在我們來看一下全部的結果,因為三種 I/O 翻轉方法里有兩種效果是一樣的,所以我們省略了 GPIO->DR 直接寫入這種方法的結果,最終得到了 8 個結果。根據實測結果,我們得到了如下結論:

  • 總結1:PAD配置里的運行頻率并不限制最終輸出翻轉頻率,只是無法保證超過設置頻率后的波形幅值響應表現

  • 總結2:置位 GPIO->DR_TOGGLE 寄存器可獲得最佳 I/O 翻轉性能

  • 總結3:普通 GPIO 最大翻轉頻率是 20.614MHz,約是時鐘源 IPG Bus 的 1/7.5

  • 總結4:HSGPIO 最大翻轉頻率是 250MHz,約是時鐘源 AHB Bus 的 1/2

AHB/Core時鐘頻率IPG總線時鐘頻率I/O PAD配置I/O翻轉方法普通GPIO極限翻轉頻率高速GPIO極限翻轉頻率
500MHz125MHzFast Slew, 200MHz異或GPIO->DR5.214MHz
? ? ? ? ? ?標準幅度方波
22.946MHz
? ? ? ? ? ?標準幅度方波
500MHz125MHzFast Slew, 200MHz置位GPIO->DR_TOGGLE15.533MHz
? ? ? ? ? ?標準幅度方波
250MHz
? ? ? ? ? ?減半幅度正弦波
452.6MHz150.8MHzFast Slew, 200MHz異或GPIO->DR6.309MHz
? ? ? ? ? ?標準幅度方波
18.864MHz
? ? ? ? ? ?標準幅度方波
452.6MHz150.8MHzFast Slew, 200MHz置位GPIO->DR_TOGGLE20.614MHz
? ? ? ? ? ?標準幅度方波
226.244MHz
? ? ? ? ? ?減半幅度正弦波

四、一個有趣的問題

最后再留一個開放問題,在痞子衡舊文 《以GPIO模塊為例談談中斷處理函數(IRQHandler)的標準流程》 里提到過 ?ARM Errata 838869 ,即在 Cortex-M4/7 上,如果 CPU 執行速度遠遠高于 GPIO 外設寄存器寫入速度,如果代碼邏輯里涉及 GPIO 寄存器回讀,一般需要在 GPIO 寄存器寫入操作后額外插入 DSB 指令來保證同步。

我們現在在 500MHz AHB/Core 時鐘頻率下 HSGPIO 翻轉代碼里額外插入 DSB 指令,看看有什么影響,結果翻轉頻率從 250MHz 一下子降到了 35.8MHz。

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


推薦閱讀:

專輯|Linux文章匯總

專輯|程序人生

專輯|C語言

我的知識小密圈

關注公眾號,后臺回復「1024」獲取學習資料網盤鏈接。

歡迎點贊,關注,轉發,在看,您的每一次鼓勵,我都將銘記于心~

總結

以上是生活随笔為你收集整理的你见过的MCU最高GPIO翻转频率是多少?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲黄网站在线观看 | 欧美又粗又深又猛又爽啪啪九色 | 99天堂网 | 人体内射精一区二区三区 | 国产伦精品一区三区精东 | 情侣av | 啦啦啦免费高清视频在线观看 | 四虎影视免费永久观看在线 | 国产人妖ts | xfplay5566色资源网站 | 波多野结衣1区2区3区 | 欧美人性生活视频 | 致命魔术电影高清在线观看 | 日韩欧美在线观看一区二区 | 久久狠| 欧美视频久久久 | 欧美群交射精内射颜射潮喷 | 成年人网站在线 | 久久综合中文 | 男人视频网 | 成人在线激情视频 | 欧美人与性禽动交精品 | 天堂а在线中文在线新版 | 操操操免费视频 | 一本在线免费视频 | 午夜寂寞视频 | 狠狠婷婷 | 亚洲石原莉奈一区二区在线观看 | 欧美一区二区三区影院 | 亚洲一区在线视频 | 最近中文字幕在线观看视频 | 欧美另类综合 | 午夜国产在线 | 成人在线h | 亲女禁h啪啪宫交 | 18岁毛片 | 国产性猛交普通话对白 | 丰满的女人性猛交 | 久操视频免费观看 | 天天操天天曰 | 在线91视频 | 国产黄a三级三级看三级 | 日本精品久久久久久久 | 最近中文字幕在线视频 | 40一50一60老女人毛片 | 涩涩爱在线| 素人一区二区 | 三年大全国语中文版免费播放 | 超碰997| 打屁股无遮挡网站 | 日韩一区二区视频在线 | 天天婷婷| 免费看日批| 国产免费成人在线视频 | 男女视频久久 | 日产精品久久久久久久 | 亚洲AV无码精品久久一区二区 | 国产精品播放 | 精品成人国产 | 97久久国产亚洲精品超碰热 | 狂野少女电影在线观看国语版免费 | 日韩在线视频一区二区三区 | 欧美精品乱码99久久蜜桃 | 亚洲av无码一区二区二三区软件 | 亚洲v欧美| 国产美女自拍 | 侵犯女教师一区二区三区 | 成人性做爰片免费视频 | 久久久亚洲精品无码 | 欧美久久久久 | 黄瓜视频91 | 国产乱码在线观看 | 免费在线观看不卡av | 国产探花精品在线 | 在线免费视频 | 就操网| 人操人操| 国产一区视频在线免费观看 | 天天成人 | 97人妻天天摸天天爽天天 | 国语对白一区二区 | 精品成人一区二区三区久久精品 | 亚洲成人av免费 | 东京热无码av一区二区 | 91亚洲精品久久久久久久久久久久 | 一级福利片 | 国产欧美日韩在线视频 | 亚洲熟女乱色综合亚洲小说 | 第四色影音先锋 | 美女无遮挡网站 | 亚洲一级在线观看 | 六月综合| 免费大黄网站 | av色图在线| 和美女啪啪 | 91爱爱网站 | 女人av在线| 亚洲AV午夜成人片 | 一二三区在线 |