This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

F28335 problem with low power mode using the watchdog to wake up from standby

Other Parts Discussed in Thread: CONTROLSUITE

Hi,

the wake up from standby low power mode using the watchdog works for several times, but sometimes the DSP remains in standby mode. I added code to check the required register settings before executing the IDLE instrcution, but the malfunction also occurs. The emulator cannot be used because of the connection to the processor is lost if  the IDLE instruction is executed. Is it a problem of the processor? Here are the related code:

-----------------------------------------------------------------------------------------
Initialization:
-----------------------------------------------------------------------------------------
    /* Configure low power mode of DSP - wake up on watchdog event */
    EALLOW;
    SysCtrlRegs.LPMCR0.bit.WDINTE = 1u;
    SysCtrlRegs.LPMCR0.bit.LPM = 1u;
    EDIS;
-----------------------------------------------------------------------------------------


-----------------------------------------------------------------------------------------
Enter low power mode (RTOS task):
-----------------------------------------------------------------------------------------
        if (wdogdrv_CfgPwrDwnWakeUp_bol())
        {
            /* DO NOT enter low power mode when the device is operating in limp mode */
            if (0u == SysCtrlRegs.PLLSTS.bit.MCLKSTS)
            {
                CpuPowerDown_vd();
            }
           
            /* change watchdog mode back to reset (delay of min. 512 OSC CLK = 25.6µs) */
            if (!wdogdrv_CfgResetMode_bol())
            {
                /* delay of 25.6µs */
                utils_DelayUS_vd(WDOG_INIT_DELAY);

                (void)wdogdrv_CfgResetMode_bol();
            }
        }
-----------------------------------------------------------------------------------------

#pragma CODE_SECTION(CpuPowerDown_vd, "ramfuncs")
static void CpuPowerDown_vd(void)
{
    volatile uint16_t restoreIrq_u16;

    restoreIrq_u16 = Hwi_enableInterrupt(39);

    hw_TEST_PIN3_LOW;

    asm(" RPT #7 || NOP "); /* flush instruction pipeline */
    asm(" IDLE ");          /* CPU goes into power down mode */

    hw_TEST_PIN3_HIGH;

    Hwi_restoreInterrupt(39, restoreIrq_u16);
}

-----------------------------------------------------------------------------------------

bool wdogdrv_CfgPwrDwnWakeUp_bol(void)
{
    bool retVal_bol = false;

    EALLOW; /* Enable EALLOW protected register access */
    if (0u != (SysCtrlRegs.SCSR & WDINTSTATUS))
    {
        /* reset counter */
        SysCtrlRegs.WDKEY = WDOG_RESET_SEQ1;
        SysCtrlRegs.WDKEY = WDOG_RESET_SEQ2;
        /* Set watchdog mode to "interrupt mode" */
        SysCtrlRegs.SCSR = WDOG_INTR_MODE;
        /* WDCR.WDPS:   7 -> WDCLK = OSCCLK/512/4 -> 26.2ms
         * WDCR.WDCHK:  ALWAYS write 1,0,1 to these bits
         * WDCR.WDDIS:  0 -> watchdog is enabled
         * WDCR.WDFLAG: 1 -> write a 1 to clear the condition. Writes of 0 are ignored.
         */
        SysCtrlRegs.WDCR = (WDOG_ENABLE | WDOG_WDPS_DIV4);

        retVal_bol = true;
    }
    EDIS; /* Disable EALLOW protected register access */

    return retVal_bol;
}

-----------------------------------------------------------------------------------------

bool wdogdrv_CfgResetMode_bol(void)
{
    bool retVal_bol = false;

    EALLOW; /* Enable EALLOW protected register access */
    if (0u != (SysCtrlRegs.SCSR & WDINTSTATUS))
    {
        /* reset counter */
        SysCtrlRegs.WDKEY = WDOG_RESET_SEQ1;
        SysCtrlRegs.WDKEY = WDOG_RESET_SEQ2;
        /* Set watchdog mode to "reset mode" */
        SysCtrlRegs.SCSR = WDOG_RESET_MODE;
        /* WDCR.WDPS:   7 -> WDCLK = OSCCLK/512/64
         * WDCR.WDCHK:  ALWAYS write 1,0,1 to these bits
         * WDCR.WDDIS:  0 -> watchdog is enabled
         * WDCR.WDFLAG: 1 -> write a 1 to clear the condition. Writes of 0 are ignored.
         */
        SysCtrlRegs.WDCR = (WDOG_ENABLE | WDOG_WDPS);

        retVal_bol = true;
    }
    EDIS; /* Disable EALLOW protected register access */

    return retVal_bol;
}

The sources are compiled and linked with the Code Composer Studio Version 5.3.00.90, Code Generation Tool: 6.1.10 and SYS BIOS Version: 6.34.02.18.

Thanks and regards

Thorsten

  • Thorsten,

    I am sorry to hear that you are having issues. I have a few questions for you.

    1. What percentage of standby entries do you have a failure? 1 out of 10? 1 out of 3? 1 of 100?
    2. How many devices are you experiencing this issue?
    3. Have you tried running this Standby entry/exit WITHOUT SYS/BIOS running? Can you try this a report the results?
    4. Do you Configure any GPIOs for standby wakeup?
    5. If you run the lpm_standbywake example in controlSuite, do you experience the same thing?
    6. If you disable all interrupts except the LPM wake, do you still experience this issue?

    Regards,
    Mark
  • Hi Mark,thanks for your answer.
    To 1) The standby mode is entered every second and it is running about 15 to 90 minutes. In the majority of cases the DSP remains in standby mode 20 minutes (1200 to 1500 cycles).
    To 2) I also tested the firmware on different targets (own PCBA and eZdspF28335).
    To 3) A test without SYS/BIOS is not done. This will be my next step.
    To 4) Yes, the results are the same like wake up by watch dog event.
    To 5) This will be my next step, but the example does not use the watch dog wake up from standby mode.
    To 6) Yes, see code snippet (CpuPowerDown_vd).Thankes and regardsThorsten
  • Thorsten,

    1) Can you clarify this? Can you tell me the percentage of times the device fails to wake from Standby?

    2) So you are saying that the results are the same regardless of device or board?

    3) I am very interested to see the results. Please let us know when you have done this

    4) Also you say that GPIO wake yields the same results as watch dog wake . Does this mean that the GPIO wakeup event also periodically fails to wake the device from Standby?

    5) This should be a straghtforward change. you can modify the example to wake with the watchdog.

    6) That code snippet shows that the WakeINT interrupt is enabled. Do  you disable the rest of them?

    Thanks!

    -Mark

  • Hi Mark,
    1) After 1200 to 1500 wake up from standby cycles the DSP remains in standby mode.
    2) Yes, that was the reason to test the firmware on an evaluation board. The problem seems to be in firmware or device.
    3) Because of a firmware release, I have to disable the low power mode of the DSP.
    4) Yes, that is right.
    5) Do you have an idea, what is going wrong with the low power mode? Can you please send me the modified example code?
    6) Oh, yes. This part of the code is missing. I am using the function Hwi_disable() of the SYS/BIOS.

    Thanks,
    Thorsten
  • Hi Mark,
    I modified the example code "LPM Wake Up Standby" from the control SUITE, but the wake up from standby mode works only a few times. I connected a function generator to trigger the low power mode (GPIO0). GPIO76 is used as test pin.

    //###########################################################################
    // Description:
    //! \addtogroup f2833x_example_list
    //! <h1>Low Power Modes: Device Standby Mode and Wakeup (lpm_standbywake)</h1>
    //!
    //! This example puts the device into STANDBY mode. If the lowest
    //! possible current consumption in STANDBY mode is desired, the
    //! JTAG connector must be removed from the device board while
    //! the device is in STANDBY mode.
    //!
    //! GPIO0 is configured as the LPM wakeup pin to trigger a
    //! WAKEINT interrupt upon detection of a low pulse.
    //! Initially, pull GPIO0 high externally. To wake device
    //! from standby mode, pull GPIO0 low for at least (2+QUALSTDBY)
    //! OSCLKS, then pull it high again.
    //!
    //! The example then wakes up the device from STANDBY using GPIO0.
    //! GPIO0 wakes the device from STANDBY mode when a low pulse
    //! (signal goes high->low->high)is detected on the pin.
    //! This pin must be pulsed by an external agent for wakeup.
    //!
    //! As soon as GPIO0 goes high again after the pulse, the device
    //! should wake up, and GPIO1 can be observed to toggle.
    //!
    //! \b External \b Connections \n
    //! - To observe when device wakes from STANDBY mode, monitor
    //! GPIO1 with an oscilloscope (set to 1 in WAKEINT ISR)
    //
    //###########################################################################
    // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V140 $
    // $Release Date: March 4, 2015 $
    // $Copyright: Copyright (C) 2007-2015 Texas Instruments Incorporated -
    // http://www.ti.com/ ALL RIGHTS RESERVED $
    //###########################################################################

    #include "DSP28x_Project.h" // Device Headerfile and Examples Include File

    // Prototype statements for functions found within this file.

    __interrupt void WAKE_ISR(void); // ISR for WAKEINT

    static Uint32 counts_u32 = 0;


    void main()
    {
    volatile Uint16 pin_u16;

    // Step 1. Initialize System Control:
    // PLL, WatchDog, enable Peripheral Clocks
    // This example function is found in the DSP2833x_SysCtrl.c file.
    InitSysCtrl();

    // Step 2. Initialize GPIO:
    // This example function is found in the DSP2833x_Gpio.c file and
    // illustrates how to set the GPIO to it's default state.
    // InitGpio(); // Skipped for this example

    EALLOW;
    GpioCtrlRegs.GPAPUD.all = 0; // Enable all Pull-ups
    GpioCtrlRegs.GPBPUD.all = 0;
    GpioCtrlRegs.GPCDIR.bit.GPIO76 = 1; // GPIO76 set in the ISR to indicate device woken up.
    //GpioIntRegs.GPIOLPMSEL.bit.GPIO0 = 1; // Choose GPIO0 pin for wakeup
    EDIS;

    // Step 3. Clear all interrupts and initialize PIE vector table:
    // Disable CPU interrupts
    DINT;

    // Initialize the PIE control registers to their default state.
    // The default state is all PIE interrupts disabled and flags
    // are cleared.
    // This function is found in the DSP2833x_PieCtrl.c file.
    InitPieCtrl();

    // Disable CPU interrupts and clear all CPU interrupt flags:
    IER = 0x0000;
    IFR = 0x0000;

    // Initialize the PIE vector table with pointers to the shell Interrupt
    // Service Routines (ISR).
    // This will populate the entire table, even if the interrupt
    // is not used in this example. This is useful for debug purposes.
    // The shell ISR routines are found in DSP2833x_DefaultIsr.c.
    // This function is found in DSP2833x_PieVect.c.
    InitPieVectTable();

    // Interrupts that are used in this example are re-mapped to
    // ISR functions found within this file.
    EALLOW; // This is needed to write to EALLOW protected registers
    PieVectTable.WAKEINT = &WAKE_ISR;
    EDIS;

    // Step 4. Initialize all the Device Peripherals:
    // Not applicable for this example.

    // Step 5. User specific code, enable interrupts:

    // Enable CPU INT1 which is connected to WakeInt:
    IER |= M_INT1;

    // Enable WAKEINT in the PIE: Group 1 interrupt 8
    PieCtrlRegs.PIEIER1.bit.INTx8 = 1;
    PieCtrlRegs.PIEACK.bit.ACK1 = 1;
    // Enable global Interrupts:
    EINT; // Enable Global interrupt INTM

    EALLOW;
    SysCtrlRegs.LPMCR0.bit.WDINTE = 1;
    // Choose qualification cycles in LPMCR0 register
    SysCtrlRegs.LPMCR0.bit.QUALSTDBY = 0; // The wakeup signal should be (2+QUALSTDBY) OSCCLKs wide.
    // Write the LPM code value
    if (SysCtrlRegs.PLLSTS.bit.MCLKSTS != 1) // Only enter Standby mode when PLL is not in limp mode.
    {
    SysCtrlRegs.LPMCR0.bit.LPM = 0x0001; // LPM mode = Standby
    }
    EDIS;

    // Enable the watchdog
    EALLOW;
    /* Set watchdog mode to "interrupt mode" */
    SysCtrlRegs.SCSR = 0x0002;
    EDIS;

    for(;;) // Loop here after wake-up.
    {
    // wait until wake up pin goes low
    do
    {
    pin_u16 = GpioDataRegs.GPADAT.bit.GPIO0;
    } while (0 != pin_u16);
    EALLOW;
    SysCtrlRegs.WDKEY = 0x0055;
    SysCtrlRegs.WDKEY = 0x00AA;
    /* WDCR.WDPS: 7 -> WDCLK = OSCCLK/512/4 -> 26.2ms
    * WDCR.WDCHK: ALWAYS write 1,0,1 to these bits
    * WDCR.WDDIS: 0 -> watchdog is enabled
    * WDCR.WDFLAG: 1 -> write a 1 to clear the condition. Writes of 0 are ignored.
    */
    SysCtrlRegs.WDCR = 0x00AB;
    EDIS;
    GpioDataRegs.GPCCLEAR.bit.GPIO76 = 1;
    // Force device into STANDBY
    __asm(" IDLE"); // Device waits in IDLE until falling edge on GPIO0/XNMI pin
    // wakes device from Standby mode.
    GpioDataRegs.GPCSET.bit.GPIO76 = 1;
    }
    }

    /* ----------------------------------------------- */
    /* ISR for WAKEINT - Will be executed when */
    /* low pulse triggered on GPIO0 pin */
    /* ------------------------------------------------*/
    __interrupt void WAKE_ISR(void)
    {
    PieCtrlRegs.PIEACK.bit.ACK1 = 1;
    EALLOW;
    SysCtrlRegs.WDCR= 0x0068;
    EDIS;
    counts_u32++;
    }

    What is wrong? Do you have an idea?

    Thanks and regards
    Thorsten
  • Thorsten,

    Please out the attached code. I am running on an F28335 Control Card. Rather Than GPIO76, I am using GPIO1, you can change this if you cannot use GPIO1. This has woke up 90,000+ times (and counting). It is still running while I type this response.
    /cfs-file/__key/communityserver-discussions-components-files/171/Example_5F00_2833xStandbyWake.c

    I have tried your code, and you are correct, it does not work as you have said. I have not spent much time yet digging into why it does not at this moment. I have a feeling the WD  is not configured properly. Please try the code I have sent while I look into your code a little more and try to figure out what is going on.

    -Mark

  • Hi Mark,
    thanks for your help, but I cannot open your attachment...

    I get the following message: "Unfortunately, the page you've requested no longer exists. Please use the search form above to locate the information you're interested in."

    Regards,
    Thorsten
  • Hi Mark,
    I changed my code as follows (initialize the watchdog only once and wait after wake up until the watchdog interrupt flag is reset) and it works (DSP woke up 150000+ times):

    // Enable the watchdog
    EALLOW;
    SysCtrlRegs.WDKEY = 0x0055;
    SysCtrlRegs.WDKEY = 0x00AA;
    /* Set watchdog mode to "interrupt mode" */
    SysCtrlRegs.SCSR = 0x0002;
    /* WDCR.WDPS: 7 -> WDCLK = OSCCLK/512/4 -> 26.2ms
    * WDCR.WDCHK: ALWAYS write 1,0,1 to these bits
    * WDCR.WDDIS: 0 -> watchdog is enabled
    * WDCR.WDFLAG: 1 -> write a 1 to clear the condition. Writes of 0 are ignored.
    */
    SysCtrlRegs.WDCR = 0x00AB;
    EDIS;

    for(;;) // Loop here after wake-up.
    {
    // wait until wake up pin goes low
    do
    {
    ServiceDog();
    pin_u16 = GpioDataRegs.GPADAT.bit.GPIO0;
    } while (0 != pin_u16);

    GpioDataRegs.GPCCLEAR.bit.GPIO76 = 1;
    // Force device into STANDBY
    __asm(" IDLE"); // Device waits in IDLE until falling edge on GPIO0/XNMI pin
    // wakes device from Standby mode.
    GpioDataRegs.GPCSET.bit.GPIO76 = 1;

    do
    {
    pin_u16 = (SysCtrlRegs.SCSR & 0x0004);
    } while (0 == pin_u16);
    }
    }

    /* ----------------------------------------------- */
    /* ISR for WAKEINT - Will be executed when */
    /* low pulse triggered on GPIO0 pin */
    /* ------------------------------------------------*/
    __interrupt void WAKE_ISR(void)
    {
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
    counts_u32++;
    }

    Is it a problem to disable/enable/reconfigure the watchdog at run-time?

    Thanks and regards,
    Thorsten
  • Well it looks like the upload just failed is all. Try this link: 

    3034.Example_2833xStandbyWake.c
    //###########################################################################
    // Description:
    //!  \addtogroup f2833x_example_list
    //!  <h1>Low Power Modes: Device Standby Mode and Wakeup (lpm_standbywake)</h1>
    //!
    //!  This example puts the device into STANDBY mode. If the lowest
    //!  possible current consumption in STANDBY mode is desired, the
    //!  JTAG connector must be removed from the device board while
    //!  the device is in STANDBY mode.
    //!
    //!  GPIO0 is configured as the LPM wakeup pin to trigger a
    //!  WAKEINT interrupt upon detection of a low pulse.
    //!  Initially, pull GPIO0 high externally. To wake device
    //!  from standby mode, pull GPIO0 low for at least (2+QUALSTDBY)
    //!  OSCLKS, then pull it high again.
    //!
    //!  The example then wakes up the device from STANDBY using GPIO0.
    //!  GPIO0 wakes the device from STANDBY mode when a low pulse
    //!  (signal goes high->low->high)is detected on the pin.
    //!  This pin must be pulsed by an external agent for wakeup.
    //!
    //!  As soon as GPIO0 goes high again after the pulse, the device
    //!  should wake up, and GPIO1 can be observed to toggle.
    //!
    //! \b External \b Connections \n
    //!  - To observe when device wakes from STANDBY mode, monitor
    //!    GPIO1 with an oscilloscope (set to 1 in WAKEINT ISR)
    //
    //###########################################################################
    // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V140 $
    // $Release Date: March  4, 2015 $
    // $Copyright: Copyright (C) 2007-2015 Texas Instruments Incorporated -
    //             http://www.ti.com/ ALL RIGHTS RESERVED $
    //###########################################################################
    
    #include "DSP28x_Project.h"     // Device Headerfile and Examples Include File
    
    // Prototype statements for functions found within this file.
    
    __interrupt void WAKE_ISR(void);  	// ISR for WAKEINT
    
    // These are defined by the linker (see F2808.cmd)
    extern Uint16 RamfuncsLoadStart;
    extern Uint16 RamfuncsLoadEnd;
    extern Uint16 RamfuncsRunStart;
    extern Uint16 RamfuncsLoadSize;
    
    Uint32 WakeCount;
    
    void main()
    {
    	// Step 1. Initialize System Control:
    	// PLL, WatchDog, enable Peripheral Clocks
    	// This example function is found in the DSP2833x_SysCtrl.c file.
    	InitSysCtrl();
    
    	memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (Uint32)&RamfuncsLoadSize);
    
    	InitFlash();
    
    	// Step 2. Initialize GPIO:
    	// This example function is found in the DSP2833x_Gpio.c file and
    	// illustrates how to set the GPIO to it's default state.
    	// InitGpio();  // Skipped for this example
    
    	EALLOW;
    	GpioCtrlRegs.GPAPUD.all = 0;            // Enable all Pull-ups
    	GpioCtrlRegs.GPBPUD.all = 0;
    	GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;	    // GPIO1 set in the ISR to indicate device woken up.
    	GpioIntRegs.GPIOLPMSEL.bit.GPIO0 = 1;	// Choose GPIO0 pin for wakeup
    	EDIS;
    
    	// Step 3. Clear all interrupts and initialize PIE vector table:
    	// Disable CPU interrupts
    	DINT;
    
    	// Initialize the PIE control registers to their default state.
    	// The default state is all PIE interrupts disabled and flags
    	// are cleared.
    	// This function is found in the DSP2833x_PieCtrl.c file.
    	InitPieCtrl();
    
    	// Disable CPU interrupts and clear all CPU interrupt flags:
    	IER = 0x0000;
    	IFR = 0x0000;
    
    	// Initialize the PIE vector table with pointers to the shell Interrupt
    	// Service Routines (ISR).
    	// This will populate the entire table, even if the interrupt
    	// is not used in this example.  This is useful for debug purposes.
    	// The shell ISR routines are found in DSP2833x_DefaultIsr.c.
    	// This function is found in DSP2833x_PieVect.c.
    	InitPieVectTable();
    
    	// Interrupts that are used in this example are re-mapped to
    	// ISR functions found within this file.
    	EALLOW;  // This is needed to write to EALLOW protected registers
    	PieVectTable.WAKEINT = &WAKE_ISR;
    	EDIS;
    
    	// Step 4. Initialize all the Device Peripherals:
    	// Not applicable for this example.
    
    	// Step 5. User specific code, enable interrupts:
    
    	// Enable CPU INT1 which is connected to WakeInt:
    	IER |= M_INT1;
    
    	// Enable WAKEINT in the PIE: Group 1 interrupt 8
    	PieCtrlRegs.PIEIER1.bit.INTx8 = 1;
    	PieCtrlRegs.PIEACK.bit.ACK1 = 1;
    	// Enable global Interrupts:
    	EINT;   // Enable Global interrupt INTM
    
    
    	// Write the LPM code value
    	EALLOW;
    	// Choose qualification cycles in LPMCR0 register
    	SysCtrlRegs.LPMCR0.bit.QUALSTDBY = 0;		// The wakeup signal should be (2+QUALSTDBY) OSCCLKs wide.
    	SysCtrlRegs.LPMCR0.bit.LPM = 0x0001;   		// LPM mode = Standby
    	SysCtrlRegs.LPMCR0.bit.WDINTE = 0x0001;  	// WDINT wake enabled
    	EDIS;
    
    	WakeCount = 0; // Count interrupts
    
    	// Connect the watchdog to the WAKEINT interrupt of the PIE
    	// Write to the whole SCSR register to avoid clearing WDOVERRIDE bit
    	EALLOW;
    	SysCtrlRegs.SCSR |= BIT1;
    	EDIS;
    
    	// loop endlessly
    	for(;;)
    	{
    
    
    		if (SysCtrlRegs.PLLSTS.bit.MCLKSTS != 1) // Only enter Standby mode when PLL is not in limp mode.
    		{
    			if(GpioDataRegs.GPADAT.bit.GPIO0 !=0)	// will not enter Standby if the WAKE I/O is already set
    			{
    
    				// clear the WD counter and then re-enable WD
    				EALLOW;
    				SysCtrlRegs.WDKEY = 0x55;
    				SysCtrlRegs.WDKEY = 0xAA;
    				SysCtrlRegs.WDCR = 0x0029;
    				EDIS;
    
    				GpioDataRegs.GPASET.bit.GPIO1 = 1;	// Set monitor High
    				__asm(" IDLE");		// Force device into STANDBY
    
    			}
    		}
    		else
    		{
    			// we are in limp mode, do not enter standby.
    			while(1);
    		}
    
    		// Device waits in IDLE until falling edge on GPIO0/XNMI pin
    		// or WDINT wakes device from Standby mode.
    
    		// we have woken up, delay to show up on the scope
    		DELAY_US(1000);
    	}
    }
    
    /* ----------------------------------------------- */
    /* ISR for WAKEINT - Will be executed when         */
    /* low pulse triggered on GPIO0 pin                */
    /* ------------------------------------------------*/
    __interrupt void WAKE_ISR(void)
    {
    	WakeCount++;
    
    	EALLOW;
    	SysCtrlRegs.WDCR = 0x68;
    	EDIS;
    
    
    	GpioDataRegs.GPACLEAR.bit.GPIO1 = 1;	// Toggle GPIO1 in the ISR - monitored with oscilloscope
    	PieCtrlRegs.PIEACK.bit.ACK1 = 1;
    }
    

  • Hi Mark,
    I get your code. Thanks!

    Do you have a more detailed description of the low power modes of the DSP and the watchdog (application note, e.g.)?

    Thanks and regards
    Thorsten
  • Throsten,

    Does the code work for you?

    Answering your question from a previous post: There are no issues with disabling and re-enabling the watchdog during run-time. one important note is to always ensure that you are not disabling the WD while the WDINT signal is active, as it may lead to unexpected results.

    I would like to revise my WAKEINT code to be the following

    :

    In the ISR we will wait until the WDINT is not active before disabling the WD. 

    We do not have any additional information that I know of. What you can find in the User Guides, Datasheets, and example code is what we have for LPMs and the Watchdog. I can see what we can do here about getting some more information in these documents. 

    Can you integrate the WD code into your SYS/BIOS project and report back? Did this resolve your issues?

    -Mark

  • Hi Mark,
    I changed the wake ISR similar to your code, but it works only for about 1200 wake up cycles. My SYS/BIOS project includes another ISR, which is in the same PIE group. Can this be a problem?

    Thanks,
    Thorsten