dsPIC33EV64GM106的deadman timer(DMT)

最近在使用dsPIC33EV64GM106单片机开发项目时发现一个问题,下午下班后把电路板所有LED点亮进行老化测试,第二天来到发现LED都灭掉了,经试验,发现是单片机每隔半个小时左右复位一次。
发现问题后试过把所有程序全部屏蔽(除了can初始化,因为需要开机发送一次can帧判断是否重启),发现还是会出现重启问题,只不过由半个小时一次变成50分钟一次(这里发现重启时间好像和代码量有关)。
把所有程序都屏蔽掉问题还是能出现,那就怀疑是PIC单片机配置字的问题了,因为项目初始时是我一个同事负责,所以我并没有详细去看配置字,这次发现问题后挨个查看配置字,如下代码:

#pragma config BWRP = OFF               // Boot Segment Write-Protect Bit (Boot Segment may be written)
#pragma config BSS = DISABLED           // Boot Segment Code-Protect Level bits (No Protection (other than BWRP))
#pragma config BSS2 = OFF               // Boot Segment Control Bit (No Boot Segment)
#pragma config GWRP = OFF               // General Segment Write-Protect Bit (General Segment may be written)
#pragma config GSS = DISABLED           // General Segment Code-Protect Level bits (No Protection (other than GWRP))
#pragma config CWRP = OFF               // Configuration Segment Write-Protect Bit (Configuration Segment may be written)
#pragma config CSS = DISABLED           // Configuration Segment Code-Protect Level bits (No Protection (other than CWRP))
#pragma config AIVTDIS = DISABLE        // Alternate Interrupt Vector Table Disable Bit  (Disable Alternate Vector Table)
     
     // FBSLIM
#pragma config BSLIM = 0x1FFF           // Boot Segment Code Flash Page Address Limit Bits (Boot Segment Flash Page Address Limit (0-0x1FFF))
     
     // FOSCSEL
#pragma config FNOSC = PRI              // Initial oscillator Source Selection Bits (Primary Oscillator (XT, HS, EC))
#pragma config IESO = ON                // Two Speed Oscillator Start-Up Bit (Start up device with FRC,then automatically switch to user selected oscillator source)
     
     // FOSC
#pragma config POSCMD = HS              // Primary Oscillator Mode Select Bits (Primary Oscillator disabled)
#pragma config OSCIOFNC = OFF           // OSC2 Pin I/O Function Enable Bit (OSC2 is clock output)
#pragma config IOL1WAY = ON             // Peripheral Pin Select Configuration Bit (Allow Only One reconfiguration)
#pragma config FCKSM = CSDCMD           // Clock Switching Mode Bits (Both Clock Switching and Fail-safe Clock Monitor are disabled)
#pragma config PLLKEN = ON              // PLL Lock Enable Bit (Clock switch to PLL source will wait until the PLL lock signal is valid)
     
     // FWDT
#pragma config WDTPOST = PS1024        // Watchdog Timer Postscaler Bits (1:32,768)
#pragma config WDTPRE = PR128           // Watchdog Timer Prescaler Bit (1:128)
#pragma config FWDTEN = OFF              // Watchdog Timer Enable Bits (WDT Enabled)
#pragma config WINDIS = OFF             // Watchdog Timer Window Enable Bit (Watchdog timer in Non-Window Mode)
#pragma config WDTWIN = WIN25           // Watchdog Window Select Bits (WDT Window is 25% of WDT period)
     
     // FPOR
#pragma config BOREN0 = ON              // Brown Out Reset Detection Bit (BOR is Enabled)
     
     // FICD
#pragma config ICS = PGD1               // ICD Communication Channel Select Bits (Communicate on PGEC1 and PGED1)
     
     // FDMTINTVL
#pragma config DMTIVTL = 0xFFFF         // Lower 16 Bits of 32 Bit DMT Window Interval (Lower 16 bits of 32 bit DMT window interval (0-0xFFFF))
     
     // FDMTINTVH
#pragma config DMTIVTH = 0xFFFF         // Upper 16 Bits of 32 Bit DMT Window Interval (Upper 16 bits of 32 bit DMT window interval (0-0xFFFF))
     
     // FDMTCNTL
#pragma config DMTCNTL = 0xFFFF         // Lower 16 Bits of 32 Bit DMT Instruction Count Time-Out Value (Lower 16 bits of 32 bit DMT instruction count time-out value (0-0xFFFF))
     
     // FDMTCNTH
#pragma config DMTCNTH = 0xFFFF         // Upper 16 Bits of 32 Bit DMT Instruction Count Time-Out Value (Upper 16 bits of 32 bit DMT instruction count time-out value (0-0xFFFF))
     
     // FDMT
#pragma config DMTEN = DISABLE           // Dead Man Timer Enable Bit (Dead Man Timer is Enabled and cannot be disabled by software)
     
     // FDEVOPT
#pragma config PWMLOCK = ON             // PWM Lock Enable Bit (Certain PWM registers may only be written after key sequence)
#pragma config ALTI2C1 = OFF            // Alternate I2C1 Pins Selection Bit (I2C1 mapped to SDA1/SCL1 pins)
     
     // FALTREG
#pragma config CTXT1 = NONE             // Interrupt Priority Level (IPL) Selection Bits For Alternate Working Register Set 1 (Not Assigned)
#pragma config CTXT2 = NONE             // Interrupt Priority Level (IPL) Selection Bits For Alternate Working Register Set 2 (Not Assigned)

关于deadman timer定时器:

查了一下,网上关于deadman timer(以下简称DMT)的资料比较少,数据手册中关于DMT的介绍如下图:
dsPIC33EV64GM106的deadman timer(DMT)_第1张图片
PIC的这个程序监控定时器和STM32的窗口看门狗类似,必须要在指定的时间段喂狗,不然是没有作用的,楼主本人也是一个小白,所码的代码还不需要用到这个功能,因此直接在配置字里面关闭此功能。

你可能感兴趣的:(dsPIC33EV64GM106的deadman timer(DMT))