[PSoC™]

PSOC4看门狗复位和看门狗定时器同时使用

[复制链接]
428|9
手机看帖
扫描二维码
随时随地手机跟帖
善水789|  楼主 | 2024-3-25 10:21 | 显示全部楼层 |阅读模式
你好,
     PSOC4看门狗复位和看门狗定时器同时使用是否有合适的例程提供一下,谢谢。
需求:系统进入深度睡眠之前设置成看门狗定时器功能,用于唤醒系统;唤醒系统后需要设置成看门狗复位功能,用于正常的防止程序跑飞;

使用特权

评论回复
chenqianqian| | 2024-3-25 11:15 | 显示全部楼层
就只使用看门狗复位就可以了,软件定时进行喂狗操作。

使用特权

评论回复
善水789|  楼主 | 2024-3-25 11:45 | 显示全部楼层
本帖最后由 善水789 于 2024-3-25 14:25 编辑

部分代码如附件,睡眠时间只有50ms,有大神帮忙看看吗,谢谢。
示波器测量LED_sleep引脚:程序里设置的睡眠时间是100ms,测量只有50ms,唤醒后工作时间200ms是对的。
258816600f2e98be34.jpg


程序.rar

1.19 KB

部分代码

使用特权

评论回复
善水789|  楼主 | 2024-3-25 15:03 | 显示全部楼层
chenqianqian 发表于 2024-3-25 11:15
就只使用看门狗复位就可以了,软件定时进行喂狗操作。

系统要进入深度睡眠,用看门狗定时唤醒;

使用特权

评论回复
朝生| | 2024-3-26 16:02 | 显示全部楼层
准备拿看门狗定时器做什么?那个时间没啥用呀

使用特权

评论回复
鹿鼎计| | 2024-3-26 16:21 | 显示全部楼层
善水789 发表于 2024-3-25 11:45
部分代码如附件,睡眠时间只有50ms,有大神帮忙看看吗,谢谢。
示波器测量LED_sleep引脚:程序里设置的睡眠 ...

是不是时钟没有配置对?小于50ms的都能正常设置吗?

使用特权

评论回复
善水789|  楼主 | 2024-3-27 15:04 | 显示全部楼层
鹿鼎计 发表于 2024-3-26 16:21
是不是时钟没有配置对?小于50ms的都能正常设置吗?

搞定了,这个地方的问题:CySysWdtWriteMatch((uint16)CySysWdtReadCount()+ILODelayCycles);不能用CySysWdtWriteMatch((uint16)CySysWdtReadMatch ()+ILODelayCycles);
总体思路就是,刚开始初始化看门狗复位时间,禁能看门狗定时器中断;进深度睡眠之前要配置看门狗定时器定时时间,打开看门狗定时器中断;看门狗定时器中断函数里执行禁能看门狗定时器,重新配置看门狗复位时间;
初始化:
    ILODelayCycles = WDT_COUNT1_MATCH;
    CySysWdtWriteMatch(ILODelayCycles);
    /* Configure WDT to be 15-bit wraparound up-counter - 1 MSB is ignored */
    CySysWdtSetIgnoreBits(1);
    /* Start the WDT */
    CySysWdtEnable();   
    WdtIsr_StartEx(WDT_ISR);
    WdtIsr_Disable();
进睡眠之前:
    CySysWdtClearInterrupt();           //feed watchdog...
    WDT_TMR_IRQ_DISABLE();
    ILODelayCycles = WDT_MATCH_VALUE_80MS;
    CySysWdtWriteMatch((uint16)CySysWdtReadCount()+ILODelayCycles);
    WDT_TMR_IRQ_ENABLE();
    WdtIsr_Enable();
中断:
    CySysWdtClearInterrupt();           //feed watchdog...
    WDT_TMR_IRQ_DISABLE();
    ILODelayCycles = WDT_COUNT1_MATCH;
    CySysWdtWriteMatch(ILODelayCycles);
    WdtIsr_Disable();

使用特权

评论回复
LOVEEVER| | 2024-3-27 15:45 | 显示全部楼层
程序跑飞就不会喂狗了,MCU会自动复位的

使用特权

评论回复
善水789|  楼主 | 2024-3-28 09:18 | 显示全部楼层
本帖最后由 善水789 于 2024-3-29 09:15 编辑
LOVEEVER 发表于 2024-3-27 15:45
程序跑飞就不会喂狗了,MCU会自动复位的

这个地方我是这么理解的,我的设置里一直没有关闭看门狗复位,会动态的开关看门狗定时器,系统复位时间分为两种情况:
WDT_COUNT1_MATCH=6666;ILO=40k;
【1】唤醒后看门狗复位时间为(2 * 1/40k * 2的(16-1)次方) + (1/40k * 6666)= 1.6384 + 0.16665 = 1.80505秒;
【2】系统在睡眠前看门狗定时器设定是80ms进一次中断来唤醒系统,睡眠时看门狗复位时间为(32767/40k)+(32767/40k)+((40*80+CySysWdtReadCount())/40k)>1.7秒;
在系统唤醒后执行200ms按键扫描任务加了喂狗;
我认为在系统睡眠的时候因为CPU停止了,只有ILO在工作,这个时候是不用考虑喂狗的(也没办法加喂狗代码,CPU此时停住了);我在看门狗定时器中断函数里加了一次喂狗,也就是系统从深度睡眠醒来就进行一次喂狗,不影响系统正常工作时的喂狗时间。

使用特权

评论回复
jf101| | 2024-3-28 17:12 | 显示全部楼层
看门狗重要的就是喂狗操作

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

22

帖子

0

粉丝