首页 > 其他分享 >安信可小安派【IO中断】基于AI-M6X MCU

安信可小安派【IO中断】基于AI-M6X MCU

时间:2023-10-24 19:22:05浏览次数:35  
标签:bflb AI M6X MODE IO GPIO gpio INT define

最近在研究小安派的中断。 昨晚写了一个Demo来进行测试。 关于什么是中断这里已经讲的很清楚了。 首先贴上引用参考。
第一个是泽哥写的中断:

  1. http://ai-thinker.com/forum.php?mod=viewthread&tid=562&highlight=%E4%B8%AD%E6%96%AD&_dsign=fe47e0a0
复制代码 这个是我自己写的:

  1. http://ai-thinker.com/forum.php?mod=viewthread&tid=577&extra=&_dsign=5aff987a
复制代码


由于原理大家都清楚,这里直接上代码:

  1. #include "bflb_mtimer.h"
    #include "board.h"
    #include "bflb_gpio.h"
    #define DBG_TAG "MAIN"
    #include "log.h"
    
    struct bflb_device_s *gpio;
    struct bflb_device_s *led;
    
    /**
     * @brief 中断回调函数
     *
     */
    void interrupted_function()
    {
       // 其实没有必要写这个判断,进来的话一定时触发了中断
       bool intstatus = bflb_gpio_get_intstatus(gpio, GPIO_PIN_10);
       if (intstatus)
       {
          printf("Interrupt \r\n");
          // 清除中断号
          bflb_gpio_int_clear(gpio, GPIO_PIN_10);
          printf("clean successful \r\n");
       }
    }
    
    void init_GPIO_interruption()
    {
    
       // 高电平触发
       bflb_gpio_int_init(gpio, GPIO_PIN_10, GPIO_INT_TRIG_MODE_SYNC_HIGH_LEVEL);
       // 是否屏蔽中断
       bflb_gpio_int_mask(gpio, GPIO_PIN_10, 0);
       // 绑定中断回调函数
       bflb_irq_attach(gpio->irq_num, interrupted_function, NULL);
    }
    
    int main(void)
    {
       board_init();
       // 初始化GPIO
       gpio = bflb_device_get_by_name("gpio");
       // 初始化中断
       init_GPIO_interruption();
       // 根据GPIO中断号开启中断
       bflb_irq_enable(gpio->irq_num);
       while (1)
       {
          // 未触发中断
          printf("correct!");
       };
    }
    

      

复制代码


实验现象:
使用串口工具连接后控制台会持续打印Interrupt 和clean successful 如果此时把IO10号口接一根杜邦线到GND。 那么则会显示correct。

教程部分:


这里主要是用到了两个库文件, #include "bflb_gpio.h" 和 bflb_irq.h




#define GPIO_INT_TRIG_MODE_SYNC_FALLING_EDGE 0
#define GPIO_INT_TRIG_MODE_SYNC_RISING_EDGE  1
#define GPIO_INT_TRIG_MODE_SYNC_LOW_LEVEL    2
#define GPIO_INT_TRIG_MODE_SYNC_HIGH_LEVEL   3
#if defined(BL602) || defined(BL702)
#define GPIO_INT_TRIG_MODE_ASYNC_FALLING_EDGE 4
#define GPIO_INT_TRIG_MODE_ASYNC_RISING_EDGE  5
#define GPIO_INT_TRIG_MODE_ASYNC_LOW_LEVEL    6
#define GPIO_INT_TRIG_MODE_ASYNC_HIGH_LEVEL   7
#else
#define GPIO_INT_TRIG_MODE_SYNC_FALLING_RISING_EDGE 4
#define GPIO_INT_TRIG_MODE_ASYNC_FALLING_EDGE       8
#define GPIO_INT_TRIG_MODE_ASYNC_RISING_EDGE        9
#define GPIO_INT_TRIG_MODE_ASYNC_LOW_LEVEL          10
#define GPIO_INT_TRIG_MODE_ASYNC_HIGH_LEVEL         11




方法如下:







/**
* @brief 是否屏蔽GPIO中断,如果这里屏蔽了的话, 无法进入中断
*
* @param [in] dev device handle
* @param [in] pin gpio pin, use @ref GPIO_PIN
* @param [in] mask true means disable, false means enable
*/
void bflb_gpio_int_mask(struct bflb_device_s *dev, uint8_t pin, bool mask);




/**
* @brief 获取GPIO中断状态
*
* @param [in] dev device handle
* @param [in] pin gpio pin, use @ref GPIO_PIN
* @return true means yes, false means no
*/
bool bflb_gpio_get_intstatus(struct bflb_device_s *dev, uint8_t pin);



/**
* @brief 清除GPIO中断位
*
* @param [in] dev device handle
* @param [in] pin gpio pin, use @ref GPIO_PIN
*/
void bflb_gpio_int_clear(struct bflb_device_s *dev, uint8_t pin);








/**
* @brief 绑定GPIO中断到某一个方法上
*
* @param [in] irq irq number
* @param [in] isr interrupt callback
* @param [in] 这个参数泽哥好像写错了,这个参数好像是数据回调函数的形参。 如果不需要传递 传递NULL即可
* @return A negated errno value on failure.
*/
int bflb_irq_attach(int irq, irq_callback isr, void *arg);

 

标签:bflb,AI,M6X,MODE,IO,GPIO,gpio,INT,define
From: https://www.cnblogs.com/Mzcc/p/17785576.html

相关文章

  • 论文:Going Deeper with Convolutions-GoogleNet
    论文名:GoingDeeperwithConvolutions深入了解卷积了解GoogleNet研究问题:研究方法:主要结论:模型:问题:行文结构梳理:......
  • Visual Studio code中运行JS代码
    第一步:安装插件: 下面output可以看到输出  2、visualstudiocode中如何创建项目;参考地址:https://blog.csdn.net/weixin_45991687/article/details/123859403?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169814378016800180691969%2522%252C%2522scm%25......
  • 第 73 届前端早早聊大会 - 前端搞 AI - 本周六 AI 之夜
    一、前端早早聊大会前端早早聊大会,前端成长新起点,帮你提前三星期,站在新的起跑线。目标:单主题、多讲师、用得上、听得懂、抄得走主办方:前端早早聊大会已经举办86期,86个周末,86个话题,600位讲师,600场技术分享,600个小时直播。查看历届大会行程:https://www.zaozao.run/course历届......
  • Containerd命令行
    版本:containerd最新版本V1.5.5一、管理工具:ctr名字:ctr (containerdCLI)用法:CTR[globaloptions]command[commandoptions][arguments…]描述:CTR是一个不受支持的用于交互的调试和管理客户机使用容器守护进程。因为它不受支持,选项和操作不能保证向后兼容或容器项目从一个......
  • python selenium 利用pyautogui+ActionChains 完美解决我的滑块验证登录问题
    在解决滑块验证的时候不知道什么原因明明是滑块已经对上了,代码执行就是会校验不通过,手动时就可以,中间也做利用ActionChains模块减速滑动轨迹的操作,但仍然不行,后面在执行代码中添加了pyautogui模块使鼠标悬停在屏幕中的某个点而不改变ActionChains鼠标的定位后终于每次都能通过了fro......
  • 安防监控视频汇聚平台EasyCVR增加AI算法列表接口的实现方法
    安防监控视频汇聚平台EasyCVR基于云边端一体化架构,具有强大的数据接入、处理及分发能力,可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能分析等功能。平台既具备传统安防监控的能力,也支持提供AI算力算法接入的能力。今天我们......
  • 智慧垃圾站:AI视频智能识别技术助力智慧环保项目,以“智”替人强监管
    一、背景分析建设“技术先进、架构合理、开放智能、安全可靠”的智慧环保平台,整合环境相关的数据,对接已建业务系统,将环境相关数据进行统一管理,结合GIS技术进行监测、监控信息的展现和挖掘分析,实现业务数据的快速收集、全面整合、深度挖掘、智能分析、按需共享,发挥数据资源价值,构建......
  • 智慧垃圾站:AI视频智能识别技术助力智慧环保项目,以“智”替人强监管
    一、背景分析建设“技术先进、架构合理、开放智能、安全可靠”的智慧环保平台,整合环境相关的数据,对接已建业务系统,将环境相关数据进行统一管理,结合GIS技术进行监测、监控信息的展现和挖掘分析,实现业务数据的快速收集、全面整合、深度挖掘、智能分析、按需共享,发挥数据资源价值,构......
  • The ConnectionString property has not been initialized.
     原因:情况1DbContext中没有指定连接字符串解决: 情况2appsettings.json配置文件的属性没有设置为始终复制 ......
  • 安防监控视频汇聚平台EasyCVR增加AI算法列表接口的实现方法
    安防监控视频汇聚平台EasyCVR基于云边端一体化架构,具有强大的数据接入、处理及分发能力,可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能分析等功能。平台既具备传统安防监控的能力,也支持提供AI算力算法接入的能力。今天......