0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

i.MX RT1170的GPIO外设的使用

恩智浦MCU加油站 来源:恩智浦MCU加油站 作者:恩智浦MCU加油站 2022-09-01 08:46 次阅读

在双核的i.MX RT1170下设计应用程序,有一个比较重要的考虑点是片内外设资源共享以及任务分配问题,同样一个任务既可以放在默认主核CM7下做,也可以放在默认从核 CM4下去完成。如果这个任务跟片内外设有关,那就得考虑该外设是否在两个核下设计与使用一致,这在项目开始前必须要调研清楚。

今天就和大家聊一聊i.MX RT1170的GPIO外设的使用,在两个核下有什么异同以及注意点。

在正文开始之前,建议大家先浏览一下我之前写的关于GPIO的两篇文章:《以i.MX RT1xxx的GPIO模块为例谈谈中断处理函数(IRQHandler)的标准流程》、《聊聊i.MX RT1xxx上的普通GPIO与高速GPIO差异及其用法》。

注:本文内容虽以i.MX RT1170为例,但同样适用i.MX RT1160。

一、从引脚看GPIO分组

先聊聊GPIO分组,目前 i.MX RT1170 芯片封装主要是BGA289,除去电源、地、时钟、专用外设引脚外,可用作通用I/O的引脚剩下174个,而芯片内部GPIO模块多达 16个(GPIO1-13、CM7_GPIO2-3),显然GPIO模块太富裕了,显得硬件I/O引脚资源有点紧张,所以不可避免地多个GPIO 模块要复用硬件 I/O引脚,复用关系如下:

GPIO1与GPIO7复用同一组I/O引脚,共32个pin。

GPIO2与GPIO8以及CM7_GPIO2复用同一组I/O引脚,共32个pin。

GPIO3与GPIO9以及CM7_GPIO3复用同一组I/O引脚,共32个pin。

GPIO4与GPIO10复用同一组I/O引脚,共32个pin。

GPIO5与GPIO11复用同一组I/O引脚,共17个pin。

GPIO6与GPIO12复用同一组I/O引脚,共16 个pin。

GPIO13独享一组I/O引脚,共13个pin。

下图是i.MX RT1170 GPIO相关的Pinmux表,其中GPIO1-6、GPIO13主要在Alt5选项里,GPIO7-12主要在 Alt10 选项里,并且大部分I/O引脚默认功能就是GPIO(见表中 DEF 一栏)。此外表中并未看到CM7_GPIO2-3选项,这是因为其和GPIO2-3共用了 Alt5选项(需进一步通过IOMUXC_GPR->GPR40-43寄存器设置)。 13388f24-298e-11ed-ba43-dac502259ad0.png

二、关于GPIO外设访问

知道了GPIO分组以及I/O引脚复用情况,那么这些GPIO模块是否可以被i.MX RT1170 两个核(CM7/CM4)对等访问呢?我们用官方例程 SDK_2.11.1_MIMXRT1170-EVKoardsevkmimxrt1170driver_examplesgpioled_output 来做测试,这个例程操作的是 MIMXRT1170-EVK 板卡上用于连接 LED 灯的引脚 GPIO_AD_04,从上一节里我们得知这个 I/O 引脚可被用作 GPIO3[3]、CM7_GPIO3[3]、GPIO9[3],因此我们编写了如下三个相应的 gpio 翻转测试函数:)。

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);
    }
}

我们把上面三个函数分别加到两个核下的 led_output 工程主函数里,并且在板卡上实测,结果如下表。

据此进一步扩展结论,除了 CM7_GPIO2-3 无法在 CM4 内核下被访问外,其余 GPIO1-13 在两个核下都能被正常访问。

注:在 CM4 系统地址映射里,CM7_GPIO2_BASE 0x42008000u、CM7_GPIO3_BASE 0x4200C000u 地址都是不可访问状态。

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

三、关于GPIO中断设计

除了 GPIO 外设一般寄存器访问之外,GPIO 中断方面是不是在 i.MX RT1170 两个核(CM7/CM4)下设计也一致呢?这得对比 MIMXRT1176_cm7.h 和 MIMXRT1176_cm4.h 头文件里关于 IRQn_Type 的定义,我将相同项去掉了,只保留差异项的定义对比如下(GPIO 相关的全部保留了):

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

大部分外设中断号定义在两个核下都是一致的,这意味着 i.MX RT1170 两个核设计上其实是对等关系。但是 GPIO 中断这里确实是有不小的区别的:

GPIO1-5、GPIO13 中断在两个核下定义一致

GPIO6、CM7_GPIO2-3 中断仅在 CM7 核下有定义

GPIO7-12 中断仅在 CM4 核下有定义

继续以上一节操作的 MIMXRT1170-EVK 板卡上用于连接 LED 灯的引脚 GPIO_AD_04 为例测试其中断情况,编写了相关中断配置使能函数如下:

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 函数分别加到两个核下的 led_output 工程主函数里,并且在板卡上实测,可以使用外部高电平强加到 GPIO_AD_04 引脚(R1855 电阻一端),然后再移除高电平以造出输入电平翻转,测试结果如下表。据此进一步扩展结论,如果希望双核下得到一致的 GPIO 使用体验,建议选择 GPIO1-5、GPIO13。

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

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 引脚
    +关注

    关注

    16

    文章

    1177

    浏览量

    50182
  • GPIO
    +关注

    关注

    16

    文章

    1189

    浏览量

    51852
  • i.MX
    +关注

    关注

    1

    文章

    47

    浏览量

    35548

原文标题:i.MX RT1170双核下不同GPIO组的访问以及中断设计

文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于i.MX RT1170的两轮车数字仪表盘参考设计 全面的技术解读

    采用i.MX RT1170跨界MCU构建的两轮车仪表盘;全包式参考平台:实现更快、更轻松的开发。恩智浦的互联数字仪表盘参考平台使车辆制造商能够为两轮车提供基本的仪表盘功能,同时还支持各种连接用例,提升骑行者体验。
    的头像 发表于 11-03 08:15 1790次阅读
    基于<b class='flag-5'>i.MX</b> <b class='flag-5'>RT1170</b>的两轮车数字仪表盘参考设计 全面的技术解读

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

    上篇介绍了如何移植 RT-Thread Nano 内核与 Finsh 控制台到 RT1170。本篇继续介绍如何将 NXP 官方的 VGLite API 移植到 RT-Thread Nano 上。
    的头像 发表于 11-09 11:22 864次阅读

    rt1170系列MCU的外设工具有问题吗?

    我正在为 rt1170 使用 sdk 版本 2.13。rt1170系列MCU的外设工具有问题吗?我可以看到带有 rt1150 evk 的外围工具,但我看不到
    发表于 03-15 07:34

    i.MX RT1170车规级产品有AEC-Q100认证吗?

    大家好如题,i.MX RT1170车规级产品有AEC-Q100认证吗?如果是,能否提供相关文件?
    发表于 03-15 08:24

    是否可以将SPI接口显示器与I.MX RT1170一起使用?

    是否可以将 SPI 接口显示器与 I.MX RT1170 一起使用。如果是,请附上可以使用的驱动软件。我找到了 使用 SPI 接口的 NHD_4_3_800480FT_CSXP_CTP-3051926 显示器,但我找不到任何可以使用的驱动程序软件。
    发表于 04-04 08:15

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

    基本上,我想将数据写入/读取 I.MX RT1170 评估板中的非易失性存储器 (MX25L4006EM2R-12G)。1)是否有任何示例应用程序可供参考?像 LPUART、LPI2C 等....
    发表于 04-19 09:07

    i.MX RT1170自定义引导加载程序,如何在i.MX RT处理器上完成?

    我将在我的自定义 i.MX RT1170 板上开发自定义引导加载程序。在我的例子中,闪存驱动程序将通过 USB 读取以更新主要应用程序。 我正在研究
    发表于 05-17 08:13

    是否可以使用MCUxpresso IDE为i.MX RT1170的M4和M7内核开发软件?

    是否可以使用 MCUxpresso IDE 为 i.MX RT1170 的 M4 和 M7 内核开发软件?
    发表于 05-29 07:07

    恩智浦i.MX RT1170开创GHz MCU时代

    自2017年上市以来,i.MX RT系列取得了优秀的市场表现。i.MX RT1170跨界MCU是恩智浦i.MX
    的头像 发表于 03-22 11:14 3417次阅读

    恩智浦i.MX RT1170在将该系列带上了更高的层面

    自2017年上市以来,i.MX RT系列取得了优秀的市场表现。i.MX RT1170跨界MCU是恩智浦i.MX
    的头像 发表于 05-18 11:15 3734次阅读

    来数数!这款i.MX RT1170智能厨房解决方案,用到了哪些NXP的黑科技?

    智能厨房解决方案 一款极具科技感的智能厨房解决方案 可以让你通过触摸屏和语音控制 与多种家电进行智能人机交互! 它是如何做到的? i.MX RT1170 1GHz双核跨界MCU GUI Guider
    的头像 发表于 02-04 12:40 822次阅读

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

    I.MX RT1170将先进的电源管理模块与DC-DC和LDO集成在一起,可降低外部电源的复杂性并简化电源时序。
    的头像 发表于 04-01 15:54 2267次阅读

    i.MX RT1170评估套件快速入门:这份保姆级教程,请收藏!

    恩智浦官网精彩导览 i.MX RT1170评估套件快速入门 i.MX RT1170 是恩智浦推出的首款主频超过1GHz的跨界MCU,结合了强悍的计算能力、多种媒体功能、实时功能,以及一
    的头像 发表于 05-12 11:55 2057次阅读
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT1170</b>评估套件快速入门:这份保姆级教程,请收藏!

    基于NXP微控制器i.MX RT1170的多人体实时检测算法和系统

    基于NXP微控制器i.MX RT1170的多人体实时检测算法和系统
    的头像 发表于 10-26 16:27 1006次阅读
    基于NXP微控制器<b class='flag-5'>i.MX</b> <b class='flag-5'>RT1170</b>的多人体实时检测算法和系统

    恩智浦i.MX RT1170 uSDHC eMMC启动时间

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1170 uSDHC eMMC启动时间。
    的头像 发表于 08-08 15:32 494次阅读
    恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT1170</b> uSDHC eMMC启动时间