当前位置: 首页 > news >正文

记一次按键中断的bug

 一次使用mk800E的芯片做开发,增加一个5V_dev 的IO中断。

配置如下:

初始化如下:

gpio_det_init(GPIO_DETHandler);

以下为我的配置:检查了下配置似乎没有毛病
void  gpio_det_init(GPIO_IRQ_HANDLER_T irq_handler)
{
    #if !RESPON_FLAG
        // 5V_DET   --- //
        gpio_det_irq_callback = irq_handler;
        gpio_pin_set_dir(DET_5V, GPIO_DIR_IN, 0);
        io_pull_set(DET_5V, IO_PULL_DOWN, IO_PULL_UP_NONE);
        gpio_enable_irq(DET_5V, GPIO_IRQ_TYPE_RISING_EDGE, gpio_det_irq_callback);

     power_wakeup_enable((enum POWER_WAKEUP_SOURCE_T)DET_5V, POWER_WAKEUP_LEVEL_HIGH);
    #endif
}

    // 5V_DET   ---默认下拉输入 //
     gpio_det_init(GPIO_DETHandler);

static void GPIO_DETHandler(enum IO_PIN_T pin)
{
        LOG_INFO(TRACE_MODULE_APP, "GPIO_IRQ\n");

        if(pin == DET_5V)
        {
            
            app_button_event_set(APP_CHARGE_EVT);
        }
}

但接入5v充电的时候,发现一直触发该中断,无法停下来。

一开始怀疑中断flag 没有清除,检查过后发现是清除了的。

后面问了原厂才知道:

从power down唤醒后,GPIO中断行为要重新配置,参考board.c的restore power down函数。

然后做了配置,问题解决。

总结:有时候需要弄懂一些代码的意思还是需要多看,积累经验。

http://www.dtcms.com/a/49051.html

相关文章:

  • C++中函数的调用
  • 【论文笔记】Attentive Eraser
  • 利用Java爬虫获取1688店铺所有商品信息:实战指南
  • 探秘基带算法:从原理到5G时代的通信变革【七】FFT/DFT
  • C++11之右值引用
  • Pycharm操作(二)设置字体大小
  • 基于深度学习的网络摄像头图像实时分类实践:从理论到完整实现
  • 集群、分布式与微服务架构 区别
  • 常用 nvm 命令指南
  • 懒加载能够解决Spring循环依赖吗
  • golang lumberjack 日志包
  • 【Linux】之【Bug】VMware 虚拟机开机 一直卡在黑屏左上角下划线闪烁界面
  • PostgreSQL中的模式(Schema)
  • 基于值函数的强化学习算法之SARSA详解
  • 02 HarmonyOS Next仪表盘案例详解(一):基础篇
  • Python执行脚本并捕获输出
  • linux下手动升级ollama
  • Windows逆向工程入门之MASM过程调用机制深度解析
  • 【前端css】position定位
  • 虚拟机IP的配置,让它上网
  • [BUUCTF]web--wp(持续更新中)
  • 嵌入式C语言学习记录之-14~17day
  • 2024第十六届蓝桥杯模拟赛(第二期)-Python
  • RT-DETR融合YOLOv12中的R-ELAN结构
  • NModbus 连接到Modbus服务器(Modbus TCP)
  • 详解DeepSeek模型底层原理及和ChatGPT区别点
  • 【通俗讲解电子电路】——从零开始理解生活中的电路(三)
  • 什么是 Prompt?——一篇详细的介绍
  • 一周学会Flask3 Python Web开发-Flask3之表单处理WTForms安装与定义WTForms表单类
  • 【向量数据库Weaviate】 和Elasticsearch的区别