查看: 2726|回复: 0

FAST GPIO模块详解与使用示例

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3300

    主题

    6547

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32035
    最后登录
    2024-4-26
    发表于 2019-12-17 10:54:28 | 显示全部楼层 |阅读模式
    为方便参加恩智浦大学生智能车设计竞赛的同学们,成都逐飞科技设计制作了i.MX RT1064核心板,并配套开发了相应的函数库。


    本文为逐飞科技来稿,在此分享给大家,对不参加智能车竞赛的朋友也有很大的帮助作用。


    点此回顾上期内容“GPIO详解”。

    各位朋友好,逐飞科技连载的“基于RT1064的智能车应用入门指导”开发分享又来投稿啦!希望我们能有精力坚持做好这次连载分享,同时十分感谢来自恩智浦的支持,感谢梁平老师帮忙检查修改文中错误。接下来进入我们今天分享的主题——“FAST GPIO模块详解与使用示例”。


    对i.MX RT系列MCU了解的朋友应该知道,RT1052是最先发布的RT系列MCU,在使用的过程中很多朋友发现其IO翻转的速度只有大约10M左右,很多人都认为600M的主频,GPIO的速度才只有区区的10M实在是太慢了。


    针对这个问题NXP在后来推出的RT1060系列MCU中加入了快速GPIO,大幅度的提升了GPIO速度,最高可达150M的IO翻转速率。IO翻转速率高了之后,有助于使用IO模拟IIC、SPI、8080等协议时提高速度。例如库里面的2寸并口屏幕就是采用快速GPIO来模拟8080实现的,相较于普通IO,速度提升十分明显。


    Fast GPIO模块


    FAST GPIO功能

    相较于普通的GPIO,Fast GPIO的IO翻转速率最高可达150M,而普通的GPIO的IO翻转速率大约为10M左右。


    FAST GPIO库函数


    以下函数均位于zf_gpio.c和zf_gpio.h中。
    17.png
    fast_gpio_init函数参数
    18.png
    fast_gpio_set函数参数
    19.png
    fast_gpio_get函数参数
    20.png
    fast_gpio_dir函数参数
    21.png
    fast_gpio_toggle函数参数
    22.png
    FAST GPIO库宏操作


    以下宏函数均位于zf_gpio.h中。
    23.png
    以上宏操作仅列出了B端口的宏定义,将PORTB换成PORTC、PORTD即可操作C、D端口。


    使用宏操作相较于使用库函数具有速度更快的优点,因为宏操作实际上是直接操作的寄存器,相对于库函数来说减少了函数调用的时间。



    PORTB_FAST_DR宏操作参数
    24.png
    PORTB_FAST_PSR宏操作参数
    25.png
    PORTB_FAST_SET宏操作参数
    26.png
    PORTB_FAST_CLR宏操作参数
    27.png
    PORTB_FAST_TOGGLE宏操作参数
    28.png
    GPIO使用示例

    FAST GPIO输出模式(核心板LED闪烁)


    #include "headfile.h"           //包含头文件

    int main(void)
    {
        DisableGlobalIRQ();
        board_init();               //务必保留,本函数用于初始化MPU 时钟 调试串口

        //初始化B9端口 输出模式  初始化之后输出低电平 使用默认引脚配置FAST_GPIO_PIN_CONFIG
        fast_gpio_init(B9,GPO,0,FAST_GPIO_PIN_CONFIG);

        EnableGlobalIRQ(0);

        while(1)
        {
            fast_gpio_set(B9,1);  //熄灭核心板LED
            systick_delay_ms(100);//延时100ms
            fast_gpio_set(B9,0);  //点亮核心板LED
            systick_delay_ms(100);//延时100ms
        }
    }
    编程要点1:在使用GPIO时,务必在while(1)之前对端口进行初始化,然后再进行其他的操作。


    编程要点2:在初始化GPIO时,最后一个参数可以直接使用FAST_GPIO_PIN_CONFIG宏定义参数,不需要自己去选择很多个配置参数然后相或,提高易用性。请注意这里与GPIO输出、输入、中断等的宏定义不一样

    FAST GPIO输入模式

    #include "headfile.h"           //包含头文件

    uint8 pin_status;
    int main(void)
    {
        DisableGlobalIRQ();
        board_init();               //务必保留,本函数用于初始化MPU 时钟 调试串口

        //初始化D0端口 输入模式  使用默认引脚配置FAST_GPIO_PIN_CONFIG
        fast_gpio_init(D0,GPI,0, FAST_GPIO_PIN_CONFIG);

        EnableGlobalIRQ(0);

        while(1)
        {
            pin_status = fast_gpio_get(D0);//获取D0端口电平状态
            //可以直接通过IAR或者MDK的在线调试窗口查看pin_status变量的值
            //0:低电平 1:高电平
            //D0端口接地时为低电平
            //D0端口内部设置了上拉电阻,因此悬空时为高电平
        }
    }
    编程要点:与上一个示例的注意事项一致。

    本期逐飞科技“基于RT1064的智能车应用入门指导”之“FAST GPIO模块详解与使用示例”专题分享就到这里,大家在使用库的过程中如果遇到什么问题、或发现不足、或对库有什么建议请及时联系“逐飞科技”,我们将尽快完善。


    PS:通过QQ群(逐飞科技__智能车③部:824575535)可以联系到我们,群里也方便大家讨论交流,也可与管理员私信,保障该开源库有问题时可以及时得到解决。然后再分享给各位使用,形成良性循环。接下来我们将会分章节详细介绍多个模块的使用。感谢关注“逐飞科技”,下期再见!






    作者:范兵@逐飞科技      文章出处:恩智浦MCU加油站


    签到签到
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-28 02:28 , Processed in 0.112960 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表