首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PIC32 WDT重置对某些PIC32不起作用

PIC32 WDT重置对某些PIC32不起作用
EN

Stack Overflow用户
提问于 2014-05-30 20:26:13
回答 2查看 3.2K关注 0票数 1

我有一个PIC32重置功能:

代码语言:javascript
复制
  void reset_cpu(void)
  {
        WDTCON=0x8000;
        EnableWDT(); // enable the WDT 
        ClearWDT(); 
        while(1){};
  }

它在PIC32MX360F512L上工作,但在PIC32MX695F512L上不起作用。它只会永远旋转。有人能告诉我为什么,或者建议另一种方法来重置我的处理器吗?

EN

回答 2

Stack Overflow用户

发布于 2015-03-09 23:49:56

如果使用plib.h,只需调用以下函数:

代码语言:javascript
复制
void reset_cpu(void)
{
    SoftReset();
    while(1){};
}

这具有触发即时重置的优点。从重新安置.h:

如何工作:此函数执行下列步骤:

  • 步骤1-执行“解锁”序列以访问RSWRST寄存器。
  • 第二步-写一个'1‘到RSWRST.SWRST位,以启动软件重置。
  • 步骤3- RSWRST寄存器的读取必须遵循写入。此操作触发软件重置,软件重置应在下一个时钟周期发生。

请记住,plib是过时的,不久将从MPLAB XC32中删除。值得考虑新设计的和谐:http://www.microchip.com/mplabharmony

票数 1
EN

Stack Overflow用户

发布于 2014-05-30 23:55:04

当我看到这两个微控制器的数据表时,没有什么能让我立竿见影。不过,我有几个建议。

首先,在您的函数中执行以下操作:

代码语言:javascript
复制
WDTCON=0x8000;
EnableWDT();

如果您查看plib.h,您将看到它引用了wdt.h。在wdt.h中,您可以看到EnableWDT()只是一个扩展到以下内容的宏:

代码语言:javascript
复制
WDTCONSET = _WDTCON_WDTCLR_MASK

在那里面具是0x00008000。基本上,您要执行两次相同的操作。只需让宏负责启用它。

此外,由于您正在使用看门狗重置您的设备,没有必要清除看门狗。ClearWDT()只是重置看门狗,并使您的while(1)循环运行更长。所以,我会这样写你的函数:

代码语言:javascript
复制
void reset_cpu(void)
{
    EnableWDT();
    while(1){};
}

最后,我建议查看一下,以确保在IDE中选择了正确的处理器。我不确定这是否会导致您的问题,但是如果您选择了PIC32MX360F512L并尝试在PIC32MX695F512L上运行它,您最终可能会得到错误的注册定义(假设您正在使用#include "xc.h")。

我还将检查您是如何设置设备配置位的。可以在看门狗上设置非常长的超时时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23962885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档