I am using ARM cortex A9 core in Zynq. I want to trap any bugs in hardware or my firmware. I intend to use watchdog module in interrupt mode and connect it to Global interrupt controller (ScuGic). When the watchdog counter decrements to zero, it is to be reloaded by the ISR and prevent device from a reset. Incase of a problem, the ISR is expected to NOT be serviced before Time-out and hence triggering a software reset. However, the private watchdog runs in two modes
1. Watchdog mode: In this mode it ignores Interrupt settings in its Control register. It decrements a counter to zero, and resets the system; without landing into ISR and not giving me a chance to reload the counter.
2. Timer mode: In this mode, the ISR is reached but if my code does not reload the counter, then no action is taken i.e. no reset occurs.
How can I use this module to fit my requirement, please help.
This is a strange way to use a watchdog. The common way is that some background task will reload the timer. In case this task cannot do this in time you either get the interrupt (if you want to do special things) or the system is reset.
Using watchdog, for the first time so i thought of interrupt based method for a bare-metal application. For RTOS, I will now use your suggested method of creating a low -priority task and keep reloading watchdog timer. If a high priority task fails to finish on time---> reset. For bare-metal I have found a work around it by using a dedicated timer in interrupt mode. Inside Timer's ISR, i reload Timer's own counter as well as watchdogs counter.