查看: 7137|回复: 16

[原创] 【YL-KL26Z开发】(今天第二弹)+ 看门狗简单应用

[复制链接]

该用户从未签到

42

主题

340

帖子

0

高级会员

Rank: 4

积分
722
最后登录
2016-1-9
发表于 2015-7-30 21:39:31 | 显示全部楼层 |阅读模式
接上次程序:https://www.nxpic.org.cn/module/forum/thread-600349-1-1.html


这个看门狗起始是花了一上午调试的,由于OLED显示没有思路,等到下午问了实验室的大神才解决了问题。

本次实验是看门狗定时器简单应用,首先简单介绍一下看门狗:每当程序BUG而没有定时执行喂狗程序,将执行软件复位,在没有人员的场合很实用。

KL26Z的看门狗很好配置,与之相关的寄存器只有两个:COP Control Register (SIM_COPC),Service COP (SIM_SRVCOP)

下面是程序:



看门狗初始化:
void wdogInit(void)
{
    SIM_SRVCOP = SIM_SRVCOP_SRVCOP(0x55);                               /* 系统默认为1KHz 2^10时钟周期 1s */
    SIM_SRVCOP = SIM_SRVCOP_SRVCOP(0xAA);                               /* 进行看门狗喂狗               */
    SIM_COPC  = SIM_COPC_COPT(0xc);                                       /* 重新写入一次看门狗配置       */

}

手册上的SIM_COPC配置具体看下图:
QQ截图20150730132705.png


喂狗:
void feedDog(void)
{
    SIM_SRVCOP = SIM_SRVCOP_SRVCOP(0x55);                               /* 进行看门狗喂狗               */
    SIM_SRVCOP = SIM_SRVCOP_SRVCOP(0xAA);
}

配置图:
QQ截图20150730132539.png



这里还介绍了一种特殊的运行模式:Windowed Mode 。
如图:
QQ截图20150730211850.png

手册的说明是看门狗定时器在最后的1/4时间内进行喂狗,但是实际中的应用暂时没有想到,望大神指教。
QQ截图20150730132755.png

下面是主函数:
int  main (void)
{
    unsigned char i;
    SystemCoreClockUpdate();                                            /* 时钟配置                     */
   
    wdogInit();                                                         /* 看门口初始化                 */
    gpioInit();                                                         /* GPIO初始化                   */
    if ((RCM_SRS0 & RCM_SRS0_POR_MASK) == RCM_SRS0_POR_MASK) {          /* 判断复位原因                 */
        ledSet(1);
    } else if((RCM_SRS0 & RCM_SRS0_PIN_MASK) == RCM_SRS0_PIN_MASK) {
        ledSet(2);
    } else if((RCM_SRS0 & RCM_SRS0_WDOG_MASK) == RCM_SRS0_WDOG_MASK) {
        ledSet(3);
    }

    for (i = 0; i < 30; i++) {                                          /* 带喂狗延时                   */
        feedDog();
        myDelay(100);
    }
   
   
    while (1) {
        feedDog();
        redLedSet(True);
        myDelay(100);
        while(getButton());                                             /* 按键按下时,停止喂狗  1S后看门狗复位 D7亮       */
        ledSet(0);                                                      /* 所以LED灯熄灭*/
    feedDog();
        redLedSet(False);
        myDelay(100);
    }
}

主函数实现功能是i:复位后会检测复位源。看门狗复位,D7亮;按键复位,D6亮;上电复位,D5亮。延时一段时间后,D5闪烁。

关于复位源的介绍,如下图:
QQ截图20150730133120.png

下面是视频:


在视频中可以观察到,虽然看门狗复位可以实现,但是上电复位和按键复位都是D6亮,这个问题我还没有想到原因,望大神赐教。

源工程: Demo_watchdog.zip (752.69 KB, 下载次数: 44)

评分

参与人数 1NXP金币 +40 收起 理由
小七 + 40 赞一个!

查看全部评分

回复

使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16706
    最后登录
    1970-1-1
    发表于 2015-7-30 21:56:19 | 显示全部楼层
    多谢分享,也来学习学习
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2022-3-3 09:56
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    106

    主题

    836

    帖子

    4

    金牌会员

    Rank: 6Rank: 6

    积分
    1527
    最后登录
    2023-6-12
    发表于 2015-7-30 22:25:40 | 显示全部楼层
    多谢分享,下载试试
    捕获.PNG
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    42

    主题

    340

    帖子

    0

    高级会员

    Rank: 4

    积分
    722
    最后登录
    2016-1-9
     楼主| 发表于 2015-7-31 08:53:31 | 显示全部楼层
    jinyi7016 发表于 2015-7-30 22:25
    多谢分享,下载试试

    谢谢支持
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    42

    主题

    340

    帖子

    0

    高级会员

    Rank: 4

    积分
    722
    最后登录
    2016-1-9
     楼主| 发表于 2015-7-31 08:53:46 | 显示全部楼层
    lkl0305 发表于 2015-7-30 21:56
    多谢分享,也来学习学习

    谢谢支持
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    28

    帖子

    0

    注册会员

    Rank: 2

    积分
    64
    最后登录
    2018-6-25
    发表于 2015-7-31 09:03:28 | 显示全部楼层
    支持下楼主,真心不错
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-1-24 09:50
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    654

    主题

    3262

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    13132
    最后登录
    2019-1-27
    发表于 2015-7-31 09:09:42 | 显示全部楼层
    楼主对板子学习应用的挺充分的哦
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    42

    主题

    340

    帖子

    0

    高级会员

    Rank: 4

    积分
    722
    最后登录
    2016-1-9
     楼主| 发表于 2015-7-31 09:51:00 | 显示全部楼层
    小七 发表于 2015-7-31 09:09
    楼主对板子学习应用的挺充分的哦

    学以致用
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-3 11:19
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    50

    主题

    1万

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    14090
    最后登录
    2024-4-19
    发表于 2015-7-31 09:51:29 | 显示全部楼层
    支持下楼主,真心不错 blank.png blank1.png blank2.png blank3.png blank4.png blank5.png blank6.png blank7.png blank8.png blank9.png
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-11-22 12:41
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    3

    主题

    23

    帖子

    0

    注册会员

    Rank: 2

    积分
    90
    最后登录
    1970-1-1
    发表于 2015-7-31 09:53:43 | 显示全部楼层
    你好,我的怎么不起作用,我把你的改了一下在我的程序里试验了一下
    复位不了,


    void user_wdt_oprate(bool init)
    {
        SIM_SRVCOP = SIM_SRVCOP_SRVCOP(0x55);                               /* 系统默认为1KHz 2^10时钟周期 1s */
        SIM_SRVCOP = SIM_SRVCOP_SRVCOP(0xAA);                               /* 进行看门狗喂狗               */
       
        if(init)    SIM_COPC  = SIM_COPC_COPT(0x0C);                                       /* 重新写入一次看门狗配置       */
    }


    int main (void)
    {
        hardware_init();
        user_wdt_oprate(1);
        config_peripheral();
       
    //    user_pit_init(500000);
       
        while(1)
        {
            
        }
    }


    直接断点等着看复位
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-23 20:48 , Processed in 0.107051 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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