查看: 2225|回复: 3

[分享] KL03 开关 VREF 导致进入 HardFault

[复制链接]
  • TA的每日心情
    慵懒
    2016-11-24 10:19
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    50

    主题

    1028

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2870
    最后登录
    1970-1-1
    发表于 2015-5-14 16:03:31 | 显示全部楼层 |阅读模式
    因为需要降低功耗,因此在采样时才打开 VREF ,采样完成后即关闭 VREF。开关 VREF 比较频繁,大概 10ms 一次。但是在操作过程中却经常导致 HardFault 硬错误中断,而且一旦进入该错误中断,复位后如果有打开或关闭 VREF ,则会再次进入 HardFault 。只有重新上电复位后才能正常工作。

    PS:绝对不是堆栈溢出的原因,我现在已经将堆栈增加至很大了。而且出现该错误的时候,函数嵌套才3层而已,且没有参数传递,函数内局部变量也很少。

    附代码如下:

    void VREF_Open(void)
    {
    uint32_t i = 0;

    if(VrefInfo.Open)
      return;

    SIM->SCGC4 |= SIM_SCGC4_VREF_MASK;
      
    VREF->TRM |= VREF_ChopOscEnable;
    VREF->SC   = VREF_Enable | VREF_ICOMPCmd | VREF_BufMode;
    //for(i = 0;i < 10000;i++); // wait 300ns
    for(i = 0;i < 5000;i++); // wait 300ns
    VREF->SC  |= VREF_RegulatorEnable;

    VrefInfo.Open = 1;

    debugPrintf(VREF_DEBUG,("Enable internal voltage reference!\r\n"));
    }

    void VREF_Close(void)
    {
    if(VrefInfo.Open)
    {
      VREF->SC    = 0;
      VREF->TRM  &= ~(uint8_t)VREF_ChopOscEnable;
      SIM->SCGC4 &= ~(uint32_t)SIM_SCGC4_VREF_MASK;
      
      VrefInfo.Open = 0;
      
      debugPrintf(VREF_DEBUG,("Disable internal voltage reference!\r\n"));
    }
    }
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-11-24 10:19
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    50

    主题

    1028

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2870
    最后登录
    1970-1-1
     楼主| 发表于 2015-5-14 16:07:22 | 显示全部楼层
    一旦进入HardFault,通过调试器复位,或者看门狗复位后,在第一次调用 VrefClose 都会再次进入 HardFault,只有重新上电复位才可以。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2015-5-22 15:42:17 | 显示全部楼层
    楼主你好
    请问你的VREF供给哪些模块使用了?
    请看参考手册KL03P24M48SF0RM的“30.1.1 Clock Gating”章节对时钟门开关先后顺序的描述:
    VREF Clock Gate.jpg
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-11-24 10:19
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    50

    主题

    1028

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2870
    最后登录
    1970-1-1
     楼主| 发表于 2015-5-22 15:58:15 | 显示全部楼层
    FSL_TICS_Robin 发表于 2015-5-22 15:42
    楼主你好
    请问你的VREF供给哪些模块使用了?
    请看参考手册KL03P24M48SF0RM的“30.1.1 Clock Gating”章节对 ...

    问题已经解决了。只是这个问题出现的很是莫名其妙,解决的也很是莫名其妙。我的中断函数执行时间稍微有点时间长了,大概300us的样子,把中断处理放外面就好了。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-26 19:11 , Processed in 0.086299 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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