查看: 2015|回复: 0

[分享] RT1064学习笔记(4)--GPIO中断例程(GPIO Interrupt Demo)

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

    [LV.8]以坛为家I

    3298

    主题

    6545

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32004
    最后登录
    2024-4-9
    发表于 2020-5-14 09:42:00 | 显示全部楼层 |阅读模式
    RT1064学习笔记(4)--GPIO中断例程(GPIO Interrupt Demo)


    RT1064之GPIO中断例程
    Ps:本例程主要作用是,展示如何使用GPIO Interrupt以及GPIO中断的概念
    主板为:逐飞RT1064 + 母板


    一,GPIO中断简介(基于RT1052)
    RT1052 拥有 5 组 GPIO,每组 GPIO 拥有 32 个 GPIO 输入输出引脚,每个输入输出引脚都能够触发中断。 RT1052 并没有为每个输入输出引脚分配一个中断号,而是为每组GPIO 分配两个中断编号,其中低 16 个输入输出引脚(GPIOx_n, x 取 1 到 5, n 取 0 到 15)共用一个中断编号,高 16 个输入输出引脚使用另外一个中断编号。


    二,GPIO端口介绍
    1. <font size="3" face="微软雅黑">//gpio的中断函数名称为GPIO2_Combined_16_31_IRQHandler,定义在isr.c文件内
    2. //GPIO0表示A端口 RT没有这个端口
    3. //GPIO1表示B端口
    4. //GPIO2表示C端口 0_15表示C0-C15 IO口的中断响应都由这个中断函数管理 16_31表示C16-C31 IO口的中断响应都由这个中断函数管理
    5. //GPIO3表示D端口
    6. //GPIO4表示E端口 RT1064该端口全部IO被SDRAM占用
    7. //GPIO5表示F端口 RT仅有三个端口,但是功能特殊核心板并未引出
    8. </font>
    复制代码
    三,GPIO库函数介绍
    1)gpio_init()函数使用
    1. <font size="3" face="微软雅黑">/-------------------------------------------------------------------------------------------------------------------
    2. //  @brief      GPIO初始化
    3. //  @param      pin         选择的引脚 (可选择范围由 common.h 内PIN_enum枚举值确定)
    4. //  @param      dir         引脚的方向   输出:GPO   输入:GPI
    5. //  @param      dat         引脚初始化时设置的电平状态,输出时有效 0:低电平 1:高电平
    6. //  @param      pinconf     引脚配置(可设置参数由zf_iomuxc.h文件内PINCONF_enum枚举值确定,多个条件使用 | 相或)
    7. //  @return     void
    8. //  Sample usage:           gpio_init(D0, GPO, 1, GPIO_PIN_CONFIG);//D0初始化为GPIO功能、输出模式、输出高电平、上拉47K IO速度100MHZ 驱动强度R0
    9. //-------------------------------------------------------------------------------------------------------------------
    10. void gpio_init(PIN_enum pin, GPIODIR_enum dir, uint8 dat, uint32 pinconf)
    11. </font>
    复制代码
    2)gpio_interrupt_init()函数
    1. <font size="3" face="微软雅黑">/-------------------------------------------------------------------------------------------------------------------
    2. //  @brief      GPIO 外部中断初始化
    3. //  @param      pin         选择的引脚 (可选择范围由 common.h 内PIN_enum枚举值确定)
    4. //  @param      trigger     中断触发方式 选择范围参见h文件TRIGGER_enum枚举
    5. //  @param      pinconf     引脚配置 (可设置参数由zf_iomuxc.h文件内PINCONF_enum枚举值确定,多个条件使用 | 相或)
    6. //  @return     void        
    7. //  Sample usage:           gpio_interrupt_init(D0,RISING,GPIO_INT_CONFIG);//D0上升沿中断
    8. //-------------------------------------------------------------------------------------------------------------------
    9. void gpio_interrupt_init(PIN_enum pin, TRIGGER_enum trigger, uint32 pinconf)
    10. </font>
    复制代码
    3)设置中断优先级
    1. <font size="3" face="微软雅黑"> NVIC_SetPriority(GPIO2_Combined_16_31_IRQn,15);        
    2. //设置中断优先级 范围0-15 越小优先级越高</font>
    复制代码
    4)gpio_toggle()设置优先级
    1. <font size="3" face="微软雅黑">//-------------------------------------------------------------------------------------------------------------------
    2. //  @brief      GPIO 翻转
    3. //  @param      pin         选择的引脚 (可选择范围由 common.h 内PIN_enum枚举值确定)
    4. //  @return     void        
    5. //  Sample usage:           gpio_toggle(D0);//D0引脚电平翻转
    6. //-------------------------------------------------------------------------------------------------------------------
    7. void gpio_toggle(PIN_enum pin)
    8. {
    9.     GPIO_PortToggle(PORTPTR[pin>>5],1<<(pin&0x1f));
    10. }
    11. </font>
    复制代码
    四,while(1)循环中代码
    1. <font size="3" face="微软雅黑"> while(1)
    2.     {
    3.         gpio_toggle(C17);//设置引脚电平为高电平
    4.         systick_delay_ms(100);
    5.         
    6.     }</font>
    复制代码
    五,整体代码与运行结果展示
    1. <font size="3" face="微软雅黑">#include "headfile.h"


    2. uint8 gpio_status;
    3. int main(void)
    4. {
    5.     DisableGlobalIRQ();
    6.     board_init();   //务必保留,本函数用于初始化MPU 时钟 调试串口
    7.    
    8.    
    9.     //初始化GPIO C17 为输出 默认输出低电平 使用默认引脚配置GPIO_PIN_CONFIG
    10.     gpio_init(C17,GPO,0,GPIO_PIN_CONFIG);
    11.    
    12.     //初始化GPIO C16 中断模式 使用默认引脚配置GPIO_INT_CONFIG
    13.     gpio_interrupt_init(C16,RISING,GPIO_INT_CONFIG);
    14.     NVIC_SetPriority(GPIO2_Combined_16_31_IRQn,15);         //设置中断优先级 范围0-15 越小优先级越高
    15.    
    16.     EnableGlobalIRQ(0);
    17.    
    18.    
    19.     //将C16 C17使用杜邦线链接起来然后在线调试查看gpio_int_test变量
    20.     //变量会持续增加
    21.    
    22.     //gpio的中断函数名称为GPIO2_Combined_16_31_IRQHandler,定义在isr.c文件内
    23.     //GPIO0表示A端口  RT没有这个端口
    24.     //GPIO1表示B端口
    25.     //GPIO2表示C端口  0_15表示C0-C15 IO口的中断响应都由这个中断函数管理  16_31表示C16-C31 IO口的中断响应都由这个中断函数管理
    26.     //GPIO3表示D端口
    27.     //GPIO4表示E端口  RT1064该端口全部IO被SDRAM占用
    28.     //GPIO5表示F端口  RT仅有三个端口,但是功能特殊核心板并未引出
    29.    
    30.     while(1)
    31.     {
    32.         gpio_toggle(C17);//设置引脚电平为高电平
    33.         systick_delay_ms(100);
    34.     }
    35. }
    36. </font>
    复制代码
    2) 将C16 C17使用杜邦线链接起来然后在线调试查看gpio_int_test变量,变量会持续增加
    3.png


    文章出处:CSDN

    签到签到
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-20 20:23 , Processed in 0.112905 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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