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.




