这几天研究了PIC32795F512L单片机中看门狗部分内容,pic32整体中文资料较少,针对本项目的设计要求,通过学习理解如下:
1、整体了解:WDT(WATCHDOG TIMER)被使能时,工作于内部低功耗RC(Low-power RC,LPRC) 31khz振荡器时钟源。WDT可用于检测系统软件故障,如果软件未定期清零WDT,器件将被复位。可使用WDT后分频器选择各种WDT超时周期。
2、看门狗定时器相关控制寄存器:特殊功能寄存器(special function register,SFR)
(1)WDTCON为看门狗定时器控制寄存器,其中WDTCONCLR、WDTCONSET和WDTCONINV为WDTCON的原子级位操作寄存器,所谓原子级位操作,就是可以直接对寄存器中具体哪一位进行相关操作。
(2)RCON复位控制和状态寄存器,其中RCONCLR、RCONSET和RCONINV为RCON的原子级位操作寄存器。
(3)DEVCFG1器件配置寄存器
以上寄存器均与单片机看门狗部分相关,具体寄存器中的每一位的定义以及操作请参考:
http://www.doc88.com/p-402265489108.html
3、看门狗具体编程实现
如果FWDTEN器件配置位DEVCFG1<23>的值为0则可以通过软件使能或禁止WDT。在该模式下ON位WDTCON<15>会反映软件控制下的WDT状态。值为1指示WDT已使能0指示它已被禁止。用软件通过将WDT ON控制位置1来使能WDT。任何器件复位都会导致WDT ON控制位清零。该位在从SLEEP休眠模式唤醒或从IDLE空闲模式退出时不会清零。 软件WDT选项允许用户在关键代码段使能WDT并在非关键代码段禁止WDT从而最大限度地降低功耗。WDT ON控制位还可以用于在器件正常工作时禁止WDT从而不需要执行WDT处理之后在器件置为IDLE空闲或SLEEP休眠模式之前重新使能WDT以便稍后唤醒器件。
实例编程如下:
// This code fragment assumes the WDT was not enabled by
// the device configuration
// The Postscaler value must be set with the device configuration
WDTCONSET = 0x8000;// Turn on the WDT
main()
{
WDTCONSET = 0x01;// Service the WDT
... User code goes here ...
}
在实际项目中,MPLAB X IDE编译环境下,在MAIN函数初始化中作如下操作:
有必要解释程序代码中#pragma config的作用和意义,即配置 pragma 伪指令进行设置。该 pragma 伪指令具有以下形式:
#pragma config setting = state|value
#pragma config register = value
其中, setting 是配置设置描述符(如WDT),state是所需状态的文本描述(如OFF),value字段是一个可以优先用于描述符的数值。
在本项目的开发环境中,可以通过以下方式查看PIC32795F512L单片机中的相关伪指令的参数:
在界面下方可参考选择相应数值设置。
此外,实际代码中有以下几个封装好可直接调用的函数:
(1)、// WDT timeout period is set in the Device Configuration
EnableWDT(); // enable the WDT
(2) // user code
ClearWDT(); // service the WDT
(3)// A WDT event did occur
DisableWDT();
ClearEventWDT(); // clear the WDT event flag so a subsequent event can set the event bit
这些函数均可在头文件wdt.h中查到定义。
参考资料:http://www.doc88.com/p-402265489108.html
http://microchip.wikidot.com/8bit:wdt
http://blog.sina.com.cn/s/blog_7f6a64220102uxys.html
http://blog.sina.com.cn/s/blog_64ddebbc0101iqbb.html
文章评论(0条评论)
登录后参与讨论