我有一个PIC32重置功能:
void reset_cpu(void)
{
WDTCON=0x8000;
EnableWDT(); // enable the WDT
ClearWDT();
while(1){};
}它在PIC32MX360F512L上工作,但在PIC32MX695F512L上不起作用。它只会永远旋转。有人能告诉我为什么,或者建议另一种方法来重置我的处理器吗?
发布于 2015-03-09 23:49:56
如果使用plib.h,只需调用以下函数:
void reset_cpu(void)
{
SoftReset();
while(1){};
}这具有触发即时重置的优点。从重新安置.h:
如何工作:此函数执行下列步骤:
请记住,plib是过时的,不久将从MPLAB XC32中删除。值得考虑新设计的和谐:http://www.microchip.com/mplabharmony
发布于 2014-05-30 23:55:04
当我看到这两个微控制器的数据表时,没有什么能让我立竿见影。不过,我有几个建议。
首先,在您的函数中执行以下操作:
WDTCON=0x8000;
EnableWDT();如果您查看plib.h,您将看到它引用了wdt.h。在wdt.h中,您可以看到EnableWDT()只是一个扩展到以下内容的宏:
WDTCONSET = _WDTCON_WDTCLR_MASK在那里面具是0x00008000。基本上,您要执行两次相同的操作。只需让宏负责启用它。
此外,由于您正在使用看门狗重置您的设备,没有必要清除看门狗。ClearWDT()只是重置看门狗,并使您的while(1)循环运行更长。所以,我会这样写你的函数:
void reset_cpu(void)
{
EnableWDT();
while(1){};
}最后,我建议查看一下,以确保在IDE中选择了正确的处理器。我不确定这是否会导致您的问题,但是如果您选择了PIC32MX360F512L并尝试在PIC32MX695F512L上运行它,您最终可能会得到错误的注册定义(假设您正在使用#include "xc.h")。
我还将检查您是如何设置设备配置位的。可以在看门狗上设置非常长的超时时间。
https://stackoverflow.com/questions/23962885
复制相似问题