RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

i.MX RT1170的GPIO外設(shè)的使用

恩智浦MCU加油站 ? 來源:恩智浦MCU加油站 ? 作者:恩智浦MCU加油站 ? 2022-09-01 08:46 ? 次閱讀

在雙核的i.MX RT1170下設(shè)計應(yīng)用程序,有一個比較重要的考慮點(diǎn)是片內(nèi)外設(shè)資源共享以及任務(wù)分配問題,同樣一個任務(wù)既可以放在默認(rèn)主核CM7下做,也可以放在默認(rèn)從核 CM4下去完成。如果這個任務(wù)跟片內(nèi)外設(shè)有關(guān),那就得考慮該外設(shè)是否在兩個核下設(shè)計與使用一致,這在項目開始前必須要調(diào)研清楚。

今天就和大家聊一聊i.MX RT1170的GPIO外設(shè)的使用,在兩個核下有什么異同以及注意點(diǎn)。

在正文開始之前,建議大家先瀏覽一下我之前寫的關(guān)于GPIO的兩篇文章:《以i.MX RT1xxx的GPIO模塊為例談?wù)勚袛嗵幚砗瘮?shù)(IRQHandler)的標(biāo)準(zhǔn)流程》、《聊聊i.MX RT1xxx上的普通GPIO與高速GPIO差異及其用法》。

注:本文內(nèi)容雖以i.MX RT1170為例,但同樣適用i.MX RT1160。

一、從引腳看GPIO分組

先聊聊GPIO分組,目前 i.MX RT1170 芯片封裝主要是BGA289,除去電源、地、時鐘、專用外設(shè)引腳外,可用作通用I/O的引腳剩下174個,而芯片內(nèi)部GPIO模塊多達(dá) 16個(GPIO1-13、CM7_GPIO2-3),顯然GPIO模塊太富裕了,顯得硬件I/O引腳資源有點(diǎn)緊張,所以不可避免地多個GPIO 模塊要復(fù)用硬件 I/O引腳,復(fù)用關(guān)系如下:

GPIO1與GPIO7復(fù)用同一組I/O引腳,共32個pin。

GPIO2與GPIO8以及CM7_GPIO2復(fù)用同一組I/O引腳,共32個pin。

GPIO3與GPIO9以及CM7_GPIO3復(fù)用同一組I/O引腳,共32個pin。

GPIO4與GPIO10復(fù)用同一組I/O引腳,共32個pin。

GPIO5與GPIO11復(fù)用同一組I/O引腳,共17個pin。

GPIO6與GPIO12復(fù)用同一組I/O引腳,共16 個pin。

GPIO13獨(dú)享一組I/O引腳,共13個pin。

下圖是i.MX RT1170 GPIO相關(guān)的Pinmux表,其中GPIO1-6、GPIO13主要在Alt5選項里,GPIO7-12主要在 Alt10 選項里,并且大部分I/O引腳默認(rèn)功能就是GPIO(見表中 DEF 一欄)。此外表中并未看到CM7_GPIO2-3選項,這是因為其和GPIO2-3共用了 Alt5選項(需進(jìn)一步通過IOMUXC_GPR->GPR40-43寄存器設(shè)置)。 13388f24-298e-11ed-ba43-dac502259ad0.png

二、關(guān)于GPIO外設(shè)訪問

知道了GPIO分組以及I/O引腳復(fù)用情況,那么這些GPIO模塊是否可以被i.MX RT1170 兩個核(CM7/CM4)對等訪問呢?我們用官方例程 SDK_2.11.1_MIMXRT1170-EVKoardsevkmimxrt1170driver_examplesgpioled_output 來做測試,這個例程操作的是 MIMXRT1170-EVK 板卡上用于連接 LED 燈的引腳 GPIO_AD_04,從上一節(jié)里我們得知這個 I/O 引腳可被用作 GPIO3[3]、CM7_GPIO3[3]、GPIO9[3],因此我們編寫了如下三個相應(yīng)的 gpio 翻轉(zhuǎn)測試函數(shù):)。

gpio_pin_config_t s_ledConfig = {kGPIO_DigitalOutput, 0, kGPIO_NoIntmode};

void toggle_gpio3_3(void)
{
    CLOCK_EnableClock(kCLOCK_Iomuxc);
    IOMUXC_SetPinMux(IOMUXC_GPIO_AD_04_GPIO_MUX3_IO03, 0U);
    IOMUXC_GPR->GPR42 &= ~(1u << 3);
    GPIO_PinInit(GPIO3, 3, &s_ledConfig);
    while(1)
    {
        SDK_DelayAtLeastUs(100000, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY);
        GPIO_PortToggle(GPIO3, 1u << 3);
    }
}

void toggle_cm7_gpio3_3(void)
{
    CLOCK_EnableClock(kCLOCK_Iomuxc);
    IOMUXC_SetPinMux(IOMUXC_GPIO_AD_04_GPIO_MUX3_IO03, 0U);
    IOMUXC_GPR->GPR42 |= (1u << 3);
    GPIO_PinInit(CM7_GPIO3, 3, &s_ledConfig);
    while(1)
    {
        SDK_DelayAtLeastUs(100000, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY);
        GPIO_PortToggle(CM7_GPIO3, 1u << 3);
    }
}

void toggle_gpio9_3(void)
{
    CLOCK_EnableClock(kCLOCK_Iomuxc);
    IOMUXC_SetPinMux(IOMUXC_GPIO_AD_04_GPIO9_IO03, 0U);
    GPIO_PinInit(GPIO9, 3, &s_ledConfig);
    while(1)
    {
        SDK_DelayAtLeastUs(100000, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY);
        GPIO_PortToggle(GPIO9, 1u << 3);
    }
}

我們把上面三個函數(shù)分別加到兩個核下的 led_output 工程主函數(shù)里,并且在板卡上實(shí)測,結(jié)果如下表。

據(jù)此進(jìn)一步擴(kuò)展結(jié)論,除了 CM7_GPIO2-3 無法在 CM4 內(nèi)核下被訪問外,其余 GPIO1-13 在兩個核下都能被正常訪問。

注:在 CM4 系統(tǒng)地址映射里,CM7_GPIO2_BASE 0x42008000u、CM7_GPIO3_BASE 0x4200C000u 地址都是不可訪問狀態(tài)。

13548d6e-298e-11ed-ba43-dac502259ad0.png

三、關(guān)于GPIO中斷設(shè)計

除了 GPIO 外設(shè)一般寄存器訪問之外,GPIO 中斷方面是不是在 i.MX RT1170 兩個核(CM7/CM4)下設(shè)計也一致呢?這得對比 MIMXRT1176_cm7.h 和 MIMXRT1176_cm4.h 頭文件里關(guān)于 IRQn_Type 的定義,我將相同項去掉了,只保留差異項的定義對比如下(GPIO 相關(guān)的全部保留了):

136c99cc-298e-11ed-ba43-dac502259ad0.png

大部分外設(shè)中斷號定義在兩個核下都是一致的,這意味著 i.MX RT1170 兩個核設(shè)計上其實(shí)是對等關(guān)系。但是 GPIO 中斷這里確實(shí)是有不小的區(qū)別的:

GPIO1-5、GPIO13 中斷在兩個核下定義一致

GPIO6、CM7_GPIO2-3 中斷僅在 CM7 核下有定義

GPIO7-12 中斷僅在 CM4 核下有定義

繼續(xù)以上一節(jié)操作的 MIMXRT1170-EVK 板卡上用于連接 LED 燈的引腳 GPIO_AD_04 為例測試其中斷情況,編寫了相關(guān)中斷配置使能函數(shù)如下:

gpio_pin_config_t s_ledConfig = {kGPIO_DigitalInput, 0, kGPIO_IntRisingEdge};

void GPIO3_Combined_0_15_IRQHandler(void)
{
    GPIO_PortClearInterruptFlags(GPIO3, 1U << 3);
    SDK_ISR_EXIT_BARRIER;
}

void config_irq_gpio3_3(void)
{
    CLOCK_EnableClock(kCLOCK_Iomuxc);
    IOMUXC_SetPinMux(IOMUXC_GPIO_AD_04_GPIO_MUX3_IO03, 0U);
    IOMUXC_GPR->GPR42 &= ~(1u << 3);
    NVIC_EnableIRQ(GPIO3_Combined_0_15_IRQn);
    GPIO_PinInit(GPIO3, 3, &s_ledConfig);
    GPIO_PortEnableInterrupts(GPIO3, 1U << 3);
}

void CM7_GPIO2_3_IRQHandler(void)
{
    GPIO_PortClearInterruptFlags(CM7_GPIO3, 1U << 3);
    SDK_ISR_EXIT_BARRIER;
}

void config_irq_cm7_gpio3_3(void)
{
    CLOCK_EnableClock(kCLOCK_Iomuxc);
    IOMUXC_SetPinMux(IOMUXC_GPIO_AD_04_GPIO_MUX3_IO03, 0U);
    IOMUXC_GPR->GPR42 |= (1u << 3);
    NVIC_EnableIRQ(CM7_GPIO2_3_IRQn);
    GPIO_PinInit(CM7_GPIO3, 3, &s_ledConfig);
    GPIO_PortEnableInterrupts(CM7_GPIO3, 1U << 3);
}

void GPIO7_8_9_10_11_IRQHandler(void)
{
    GPIO_PortClearInterruptFlags(GPIO9, 1U << 3);
    SDK_ISR_EXIT_BARRIER;
}

void config_irq_gpio9_3(void)
{
    CLOCK_EnableClock(kCLOCK_Iomuxc);
    IOMUXC_SetPinMux(IOMUXC_GPIO_AD_04_GPIO9_IO03, 0U);
    NVIC_EnableIRQ(GPIO7_8_9_10_11_IRQn);
    GPIO_PinInit(GPIO9, 3, &s_ledConfig);
    GPIO_PortEnableInterrupts(GPIO9, 1U << 3);
}
我們把上面三個 config 函數(shù)分別加到兩個核下的 led_output 工程主函數(shù)里,并且在板卡上實(shí)測,可以使用外部高電平強(qiáng)加到 GPIO_AD_04 引腳(R1855 電阻一端),然后再移除高電平以造出輸入電平翻轉(zhuǎn),測試結(jié)果如下表。據(jù)此進(jìn)一步擴(kuò)展結(jié)論,如果希望雙核下得到一致的 GPIO 使用體驗,建議選擇 GPIO1-5、GPIO13。

137b22e4-298e-11ed-ba43-dac502259ad0.png

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 引腳
    +關(guān)注

    關(guān)注

    16

    文章

    1193

    瀏覽量

    50409
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1204

    瀏覽量

    52051
  • i.MX
    +關(guān)注

    關(guān)注

    1

    文章

    47

    瀏覽量

    35607

原文標(biāo)題:i.MX RT1170雙核下不同GPIO組的訪問以及中斷設(shè)計

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

收藏 人收藏

    評論

    相關(guān)推薦

    基于i.MX RT1170的兩輪車數(shù)字儀表盤參考設(shè)計 全面的技術(shù)解讀

    采用i.MX RT1170跨界MCU構(gòu)建的兩輪車儀表盤;全包式參考平臺:實(shí)現(xiàn)更快、更輕松的開發(fā)。恩智浦的互聯(lián)數(shù)字儀表盤參考平臺使車輛制造商能夠為兩輪車提供基本的儀表盤功能,同時還支持各種連接用例,提升騎行者體驗。
    的頭像 發(fā)表于 11-03 08:15 ?1919次閱讀
    基于<b class='flag-5'>i.MX</b> <b class='flag-5'>RT1170</b>的兩輪車數(shù)字儀表盤參考設(shè)計 全面的技術(shù)解讀

    i.MX RT1170:VGLite移植RT-Thread Nano過程講解(下)

    上篇介紹了如何移植 RT-Thread Nano 內(nèi)核與 Finsh 控制臺到 RT1170。本篇繼續(xù)介紹如何將 NXP 官方的 VGLite API 移植到 RT-Thread Nano 上。
    的頭像 發(fā)表于 11-09 11:22 ?927次閱讀

    rt1170系列MCU的外設(shè)工具有問題嗎?

    我正在為 rt1170 使用 sdk 版本 2.13。rt1170系列MCU的外設(shè)工具有問題嗎?我可以看到帶有 rt1150 evk 的外圍工具,但我看不到
    發(fā)表于 03-15 07:34

    i.MX RT1170車規(guī)級產(chǎn)品有AEC-Q100認(rèn)證嗎?

    大家好如題,i.MX RT1170車規(guī)級產(chǎn)品有AEC-Q100認(rèn)證嗎?如果是,能否提供相關(guān)文件?
    發(fā)表于 03-15 08:24

    是否可以將SPI接口顯示器與I.MX RT1170一起使用?

    是否可以將 SPI 接口顯示器與 I.MX RT1170 一起使用。如果是,請附上可以使用的驅(qū)動軟件。我找到了 使用 SPI 接口的 NHD_4_3_800480FT_CSXP_CTP-3051926 顯示器,但我找不到任何可以使用的驅(qū)動程序軟件。
    發(fā)表于 04-04 08:15

    求分享i.mx RT1170MX25L4006EM2R-12G非易失性存儲器接口的示例代碼

    基本上,我想將數(shù)據(jù)寫入/讀取 I.MX RT1170 評估板中的非易失性存儲器 (MX25L4006EM2R-12G)。1)是否有任何示例應(yīng)用程序可供參考?像 LPUART、LPI2C 等....
    發(fā)表于 04-19 09:07

    i.MX RT1170自定義引導(dǎo)加載程序,如何在i.MX RT處理器上完成?

    我將在我的自定義 i.MX RT1170 板上開發(fā)自定義引導(dǎo)加載程序。在我的例子中,閃存驅(qū)動程序?qū)⑼ㄟ^ USB 讀取以更新主要應(yīng)用程序。 我正在研究
    發(fā)表于 05-17 08:13

    是否可以使用MCUxpresso IDE為i.MX RT1170的M4和M7內(nèi)核開發(fā)軟件?

    是否可以使用 MCUxpresso IDE 為 i.MX RT1170 的 M4 和 M7 內(nèi)核開發(fā)軟件?
    發(fā)表于 05-29 07:07

    恩智浦i.MX RT1170開創(chuàng)GHz MCU時代

    自2017年上市以來,i.MX RT系列取得了優(yōu)秀的市場表現(xiàn)。i.MX RT1170跨界MCU是恩智浦i.MX
    的頭像 發(fā)表于 03-22 11:14 ?3483次閱讀

    恩智浦i.MX RT1170在將該系列帶上了更高的層面

    自2017年上市以來,i.MX RT系列取得了優(yōu)秀的市場表現(xiàn)。i.MX RT1170跨界MCU是恩智浦i.MX
    的頭像 發(fā)表于 05-18 11:15 ?3772次閱讀

    來數(shù)數(shù)!這款i.MX RT1170智能廚房解決方案,用到了哪些NXP的黑科技?

    智能廚房解決方案 一款極具科技感的智能廚房解決方案 可以讓你通過觸摸屏和語音控制 與多種家電進(jìn)行智能人機(jī)交互! 它是如何做到的? i.MX RT1170 1GHz雙核跨界MCU GUI Guider
    的頭像 發(fā)表于 02-04 12:40 ?849次閱讀

    I.MX RT1170配套PMIC PF5020使用方法

    I.MX RT1170將先進(jìn)的電源管理模塊與DC-DC和LDO集成在一起,可降低外部電源的復(fù)雜性并簡化電源時序。
    的頭像 發(fā)表于 04-01 15:54 ?2347次閱讀

    i.MX RT1170評估套件快速入門:這份保姆級教程,請收藏!

    恩智浦官網(wǎng)精彩導(dǎo)覽 i.MX RT1170評估套件快速入門 i.MX RT1170 是恩智浦推出的首款主頻超過1GHz的跨界MCU,結(jié)合了強(qiáng)悍的計算能力、多種媒體功能、實(shí)時功能,以及一
    的頭像 發(fā)表于 05-12 11:55 ?2124次閱讀
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT1170</b>評估套件快速入門:這份保姆級教程,請收藏!

    基于NXP微控制器i.MX RT1170的多人體實(shí)時檢測算法和系統(tǒng)

    基于NXP微控制器i.MX RT1170的多人體實(shí)時檢測算法和系統(tǒng)
    的頭像 發(fā)表于 10-26 16:27 ?1043次閱讀
    基于NXP微控制器<b class='flag-5'>i.MX</b> <b class='flag-5'>RT1170</b>的多人體實(shí)時檢測算法和系統(tǒng)

    恩智浦i.MX RT1170 uSDHC eMMC啟動時間

    大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RT1170 uSDHC eMMC啟動時間。
    的頭像 發(fā)表于 08-08 15:32 ?574次閱讀
    恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT1170</b> uSDHC eMMC啟動時間
    RM新时代网站-首页