Hi,
I'm configured timer3 to act as a watchdog and when I inspect the register WDTCR, the WDFLAG is set i.e. However the WDOUT pin is not being asserted low.
volatile CSL_TmrRegsOvly gCSL_WDTmrRegs; //declare WatchDog timer register #define WATCHDOG_PERIOD 1000 //msec void WatchDogInit(void) { gCSL_WDTmrRegs = (CSL_TmrRegsOvly) CSL_TMR_3_REGS; gCSL_WDTmrRegs->EMUMGT_CLKSPD= CSL_TMR_EMUMGT_CLKSPD_RESETVAL; gCSL_WDTmrRegs->TIMLO = CSL_TMR_TIMLO_RESETVAL; gCSL_WDTmrRegs->TIMHI = CSL_TMR_TIMHI_RESETVAL; gCSL_WDTmrRegs->PRDLO = CSL_TMR_PRDLO_RESETVAL; gCSL_WDTmrRegs->PRDHI = CSL_TMR_PRDHI_RESETVAL; gCSL_WDTmrRegs->TCR = CSL_TMR_TCR_RESETVAL; gCSL_WDTmrRegs->TGCR = CSL_TMR_TGCR_RESETVAL; gCSL_WDTmrRegs->WDTCR = CSL_TMR_WDTCR_WDFLAG_MASK; //clear //set the Emulation mode FREE and SOFT (stop immediately) gCSL_WDTmrRegs->EMUMGT_CLKSPD &= ~(CSL_TMR_EMUMGT_CLKSPD_SOFT_MASK | CSL_TMR_EMUMGT_CLKSPD_FREE_MASK); //set the period //convert the WATCHDOG_PERIOD (msec) to timer3 period divFactor = (gCSL_WDTmrRegs->EMUMGT_CLKSPD & CSL_TMR_EMUMGT_CLKSPD_CLKDIV_MASK) >> CSL_TMR_EMUMGT_CLKSPD_CLKDIV_SHIFT; gCSL_WDTmrRegs->PRDLO = (WATCHDOG_PERIOD * CLK_countspms())/divFactor; gCSL_WDTmrRegs->PRDHI = CSL_TMR_PRDHI_RESETVAL; //set to 64 bits watchdog configuration gCSL_WDTmrRegs->TGCR = ((2 << CSL_TMR_TGCR_TIMMODE_SHIFT ) | (1 << CSL_TMR_TGCR_TIMHIRS_SHIFT ) | (1 << CSL_TMR_TGCR_TIMLORS_SHIFT )); //timer is enabled 1 time //There is no point in enabling it continuously since the timer will not //increment once the timeOut state has been reached. gCSL_WDTmrRegs->TCR = ((1 << CSL_TMR_TCR_ENAMODE_LO_SHIFT ) | (3 << CSL_TMR_TCR_PWID_LO_SHIFT )); //enable the watchdog gCSL_WDTmrRegs->WDTCR = ((CSL_TMR_WDTCR_WDEN_ENABLE << CSL_TMR_WDTCR_WDEN_SHIFT )); // Watchdog timer service keys (Reset counters) gCSL_WDTmrRegs->WDTCR = ((CSL_TMR_WDTCR_WDEN_ENABLE << CSL_TMR_WDTCR_WDEN_SHIFT ) | (CSL_TMR_WDTCR_WDKEY_CMD1 << CSL_TMR_WDTCR_WDKEY_SHIFT)); gCSL_WDTmrRegs->WDTCR = ((CSL_TMR_WDTCR_WDEN_ENABLE << CSL_TMR_WDTCR_WDEN_SHIFT ) | (CSL_TMR_WDTCR_WDKEY_CMD2 << CSL_TMR_WDTCR_WDKEY_SHIFT)); } //this is a periodic functions that is called every 100msec void WatchDogKickPrd(void) { gCSL_WDTmrRegs->WDTCR = ((CSL_TMR_WDTCR_WDEN_ENABLE << CSL_TMR_WDTCR_WDEN_SHIFT ) | (CSL_TMR_WDTCR_WDKEY_CMD1 << CSL_TMR_WDTCR_WDKEY_SHIFT)); gCSL_WDTmrRegs->WDTCR = ((CSL_TMR_WDTCR_WDEN_ENABLE << CSL_TMR_WDTCR_WDEN_SHIFT ) | (CSL_TMR_WDTCR_WDKEY_CMD2 << CSL_TMR_WDTCR_WDKEY_SHIFT)); } void main(void) { WatchDogInit(); }
Did I miss something?
Khaled.