查看: 4308|回复: 0

【飞凌RT1052】GPT定时器中断&看门狗

[复制链接]
  • TA的每日心情
    开心
    2018-4-20 15:04
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    49

    主题

    188

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    2953
    最后登录
    2023-7-24
    发表于 2018-11-28 01:11:08 | 显示全部楼层 |阅读模式
        看门狗对于单片机正常工作来说必不可少,看门狗计时器的原理就是,打开之后,如果单片机在规定时间内没有喂狗,那么触发看门狗,系统复位,也就是当单片机跑飞,无法正常喂狗的时候,系统就强制复位,让单片机恢复正常状态。
        一般项目中看门狗是与定时器中断结合使用的,因为定时器中断属于中断,较容易触发,看门狗5秒溢出一次,定时器3秒喂一次狗,就可以确保系统正常工作不会跑飞,更确保不会频繁进入定时器中断而影响系统工作。
        先看看看门狗初始化的代码:
            wdog_config_t wdog_config;
            WDOG_GetDefaultConfig(&wdog_config);
            wdog_config.timeoutValue=8;
      wdog_config.interruptTimeValue=8;
      WDOG_Init(WDOG1,&wdog_config);
            SET_WDOG_WDT(WDOG1);
    timeoutValue是看门狗计数器溢出,溢出值8,大概5秒钟溢出一次,如果不喂狗的话,那就是5秒钟复位一次:
    49.jpg
    然后看看定时器的初始化:
            gpt_config_t gptConfig;
            GPT_GetDefaultConfig(&gptConfig);
            GPT_Init(GPT2,&gptConfig);
            GPT_SetClockDivider(GPT2,3);
            GPT_SetOutputCompareValue(GPT2, kGPT_OutputCompare_Channel1,CLOCK_GetFreq(kCLOCK_IpgClk));
            GPT_EnableInterrupts(GPT2, kGPT_OutputCompare1InterruptEnable);
            EnableIRQ(GPT2_IRQn);
            GPT_StartTimer(GPT2);
    直接使用CLOCK_GetFreq(kCLOCK_IpgClk)时钟不做任何分频,中断三秒钟溢出溢出一次,那么可以在中断服务函数中喂狗:
    int flag_gpt=0;


    void GPT2_IRQHandler()
    {
            GPT_ClearStatusFlags(GPT2,kGPT_OutputCompare1Flag);
            flag_gpt=1;
      WDOG_Refresh(WDOG1);
    }


    如此操作之后,只要系统不跑飞,就一直定时喂狗,也就能保持稳定工作。
    8.gif
    工程文件(带上一帖中的串口接收功能): 工程.zip (1.24 MB, 下载次数: 17)
    今天心情不错
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-25 14:01 , Processed in 0.116593 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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