ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

101-SLM130(NB-IOT)C-SDK(OpenCPU)学习开发-GPIO输入检测,中断

2022-04-25 21:02:15  阅读:217  来源: 互联网

标签:OpenCPU SLM130 PIN NB PAD GPIO include config define


<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/LearnEC616_SLM130" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

<iframe frameborder="0" height="1500" name="ifd" scrolling="auto" src="https://mnifdv.cn/resource/cnblogs/LearnEC616_SLM130" width="100%"></iframe>

 

说明(一定要看完上一节)

1,BOOT按键连接了GPIO1, 咱就用这个引脚做测试

 

 

 

 

 

配置GPIO1为输入模式

 

 

#include <stdio.h>
#include "app.h"
#include "bsp.h"
#include "bsp_custom.h"
#include "pad_ec616.h"
#include "gpio_ec616.h"

#define GPIO_PIN_NUMBER    (1) //GPIO编号

#define GPIO_PORT          (GPIO_PIN_NUMBER/16) //在哪个端口上(P0 / P1 / P2)
#define GPIO_PIN           (GPIO_PIN_NUMBER%16) //在端口上的编号

#define GPIO_PAD_INDEX     (12) //引脚对应的PAD地址, 这个看手册哈
#define GPIO_PAD_ALT_FUNC  (PAD_MuxAlt0) //使用其第几功能

void gpio_init(void)
{
    /*配置GPIO的功能*/
    pad_config_t padConfig;
    PAD_GetDefaultConfig(&padConfig);

    padConfig.mux = GPIO_PAD_ALT_FUNC;//设置使用其第几功能
    PAD_SetPinConfig(GPIO_PAD_INDEX, &padConfig);//配置PAD
    PAD_SetPinPullConfig(GPIO_PAD_INDEX, PAD_InternalPullUp);//设置内部上下拉

    /*配置GPIO的输入输出初始化*/
    gpio_pin_config_t config;
    config.pinDirection = GPIO_DirectionInput;//输入模式

    GPIO_PinConfig(GPIO_PORT, GPIO_PIN, &config);//配置
}

uint32_t value=0;
void main_entry(void)
{
    BSP_CommonInit();//官方底层初始化函数,默认写上就可以
    BSP_CustomInit();//配置串口打印
    gpio_init();
    while (1)
    {
        value  = value+1;
        if (value>1000000)//延时一会,避免疯狂打印
        {
            value=0;
            printf("leven=%d\r\n",GPIO_PinRead(GPIO_PORT,GPIO_PIN));//打印引脚电平
        }
    }
}

 

 

 

 

 

 

 

配置GPIO1为中断模式(下降沿触发)

 

 

 

#include <stdio.h>
#include "app.h"
#include "bsp.h"
#include "bsp_custom.h"
#include "pad_ec616.h"
#include "gpio_ec616.h"

#define GPIO_PIN_NUMBER    (1) //GPIO编号

#define GPIO_PORT          (GPIO_PIN_NUMBER/16) //在哪个端口上(P0 / P1 / P2)
#define GPIO_PIN           (GPIO_PIN_NUMBER%16) //在端口上的编号

#define GPIO_PAD_INDEX     (12) //引脚对应的PAD地址, 这个看手册哈
#define GPIO_PAD_ALT_FUNC  (PAD_MuxAlt0) //使用其第几功能

void gpio_init_interrupt(void)
{
    /*配置GPIO的功能*/
    pad_config_t padConfig;
    PAD_GetDefaultConfig(&padConfig);
    padConfig.mux = GPIO_PAD_ALT_FUNC;//设置使用其第几功能
    PAD_SetPinConfig(GPIO_PAD_INDEX, &padConfig);//配置PAD
    PAD_SetPinPullConfig(GPIO_PAD_INDEX, PAD_InternalPullUp);//设置内部上下拉

    /*配置GPIO的输入输出初始化*/
    gpio_pin_config_t config;
    config.pinDirection = GPIO_DirectionInput;//输入模式
    config.misc.interruptConfig = GPIO_InterruptFallingEdge;//设置为下降沿中断
    GPIO_PinConfig(GPIO_PORT, GPIO_PIN, &config);//配置
}

uint8_t gpio_interrupt_flag =0;
void gpio_interrupt_fun()
{
    uint16_t portIrqMask = GPIO_SaveAndSetIRQMask(GPIO_PORT);//禁止端口中断防止中断溢出
    if (GPIO_GetInterruptFlags(GPIO_PORT) & (1 << GPIO_PIN))//引脚产生中断
    {
        gpio_interrupt_flag=1;
        GPIO_ClearInterruptFlags(GPIO_PORT, 1 << GPIO_PIN);//清除引脚中断标志
    }
    GPIO_RestoreIRQMask(GPIO_PORT, portIrqMask);//恢复端口中断
}

void main_entry(void)
{
    BSP_CommonInit();//官方底层初始化函数,默认写上就可以
    BSP_CustomInit();//配置串口打印
    gpio_init_interrupt();
    //使能GPIO中断(所有的引脚共用一个中断函数)
    XIC_SetVector(PXIC_Gpio_IRQn, gpio_interrupt_fun);//配置GPIO中断函数
    XIC_EnableIRQ(PXIC_Gpio_IRQn);//使能
    while (1)
    {
        if (gpio_interrupt_flag==1)//检测到中断
        {
            gpio_interrupt_flag=0;
            printf("gpio_interrupt_flag\r\n");
        }
    }
}

 

每次按下按键就会打印下

 

 

 

程序说明

1,初始引脚的时候设置为下降沿中断

 

 

 

2,设置GPIO中断函数, 检测到中断,打印

 

标签:OpenCPU,SLM130,PIN,NB,PAD,GPIO,include,config,define
来源: https://www.cnblogs.com/yangfengwu/p/16191994.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有