OpenCores
URL https://opencores.org/ocsvn/neorv32/neorv32/trunk

Subversion Repositories neorv32

[/] [neorv32/] [trunk/] [docs/] [datasheet/] [soc_wdt.adoc] - Diff between revs 66 and 69

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 66 Rev 69
Line 11... Line 11...
| Top entity port:         | none |
| Top entity port:         | none |
| Configuration generics:  | _IO_WDT_EN_ | implement GPIO port when _true_
| Configuration generics:  | _IO_WDT_EN_ | implement GPIO port when _true_
| CPU interrupts:          | fast IRQ channel 0 | watchdog timer overflow (see <<_processor_interrupts>>)
| CPU interrupts:          | fast IRQ channel 0 | watchdog timer overflow (see <<_processor_interrupts>>)
|=======================
|=======================
 
 
 
 
**Theory of Operation**
**Theory of Operation**
 
 
The watchdog (WDT) provides a last resort for safety-critical applications. The WDT has an internal 20-bit
The watchdog (WDT) provides a last resort for safety-critical applications. The WDT has an internal 20-bit
wide counter that needs to be reset every now and then by the user program. If the counter overflows, either
wide counter that needs to be reset every now and then by the user program. If the counter overflows, either
a system reset or an interrupt is generated (depending on the configured operation mode).
a system reset or an interrupt is generated (depending on the configured operation mode).
 
The _WDT_CTRL_HALF_ flag of the control register `CTRL` indicates that at least half of the maximum timeout
 
value has been reached.
 
 
Configuration of the watchdog is done by a single control register `CTRL`. The watchdog is enabled by
The watchdog is enabled by setting the _WDT_CTRL_EN_ bit. The clock used to increment the internal counter
setting the _WDT_CTRL_EN_ bit. The clock used to increment the internal counter is selected via the 3-bit
is selected via the 3-bit _WDT_CTRL_CLK_SELx_ prescaler:
_WDT_CTRL_CLK_SELx_ prescaler:
 
 
 
[cols="^3,^3,>4"]
[cols="^3,^3,>4"]
[options="header",grid="rows"]
[options="header",grid="rows"]
|=======================
|=======================
| **`WDT_CTRL_CLK_SELx`** | Main clock prescaler | Timeout period in clock cycles
| **`WDT_CTRL_CLK_SELx`** | Main clock prescaler | Timeout period in clock cycles
Line 42... Line 44...
WDT_CTRL_MODE bit defines the action to be taken on an overflow: When cleared, the Watchdog will assert an
WDT_CTRL_MODE bit defines the action to be taken on an overflow: When cleared, the Watchdog will assert an
IRQ, when set the WDT will cause a system reset. The configured action can also be triggered manually at
IRQ, when set the WDT will cause a system reset. The configured action can also be triggered manually at
any time by setting the _WDT_CTRL_FORCE_ bit. The watchdog is reset by setting the _WDT_CTRL_RESET_ bit.
any time by setting the _WDT_CTRL_FORCE_ bit. The watchdog is reset by setting the _WDT_CTRL_RESET_ bit.
 
 
A watchdog interrupt can only occur if the watchdog is enabled and interrupt mode is enabled.
A watchdog interrupt can only occur if the watchdog is enabled and interrupt mode is enabled.
A pending interrupt is cleared by either disabling the watchdog or by resetting the watchdog.
A triggered interrupt has to be cleared again by setting the according `mip` CSR bit.
 
 
The cause of the last action of the watchdog can be determined via the _WDT_CTRL_RCAUSE_ flag. If this flag is
The cause of the last action of the watchdog can be determined via the _WDT_CTRL_RCAUSE_ flag. If this flag is
zero, the processor has been reset via the external reset signal. If this flag is set the last system reset was
zero, the processor has been reset via the external reset signal. If this flag is set the last system reset was
initiated by the watchdog.
initiated by the watchdog.
 
 
The Watchdog control register can be locked in order to protect the current configuration. The lock is
The Watchdog control register can be locked in order to protect the current configuration. The lock is
activated by setting bit _WDT_CTRL_LOCK_. In the locked state any write access to the configuration flags is
activated by setting bit _WDT_CTRL_LOCK_. In the locked state any write access to the configuration flags is
ignored (see table below, "accessible if locked"). Read accesses to the control register are not effected. The
ignored (see table below, "writable if locked"). Read accesses to the control register are not effected. The
lock can only be removed by a system reset (via external reset signal or via a watchdog reset action).
lock can only be removed by a system reset (via external reset signal or via a watchdog reset action).
 
 
 
.Watchdog Operation during Debugging
 
[IMPORTANT]
 
By default the watchdog pauses operation when the CPU enters debug mode and will resume normal operation after
 
the CPU has left debug mode. This will prevent an unintended watchdog timeout (and a hardware reset if configured)
 
during a debug session. However, the watchdog can be configured to keep operating even when the CPU is in debug
 
mode by setting the control register's _WDT_CTRL_DBEN_ bit. If the CPU's debug mode is not implemented this flag
 
is hardwired to zero.
 
 
 
 
.WDT register map (`struct NEORV32_WDT`)
.WDT register map (`struct NEORV32_WDT`)
[cols="<2,<2,<4,^1,^2,<4"]
[cols="<2,<2,<4,^1,^1,^2,<4"]
[options="header",grid="all"]
[options="header",grid="all"]
|=======================
|=======================
| Address | Name [C] | Bit(s), Name [C] | R/W | Writable if locked | Function
| Address | Name [C] | Bit(s), Name [C] | R/W | Reset value | Writable if locked | Function
.9+<| `0xffffffbc` .9+<| `NEORV32_WDT.CTRL` <|`0` _WDT_CTRL_EN_       ^| r/w ^| no  <| watchdog enable
.11+<| `0xffffffbc` .11+<| `NEORV32_WDT.CTRL` <|`0` _WDT_CTRL_EN_       ^| r/w ^| `0` ^| no  <| watchdog enable
                                            <|`1` _WDT_CTRL_CLK_SEL0_ ^| r/w ^| no  .3+<| 3-bit clock prescaler select
                                              <|`1` _WDT_CTRL_CLK_SEL0_ ^| r/w ^| `0` ^| no  .3+<| 3-bit clock prescaler select
                                            <|`2` _WDT_CTRL_CLK_SEL1_ ^| r/w ^| no
                                              <|`2` _WDT_CTRL_CLK_SEL1_ ^| r/w ^| `0` ^| no
                                            <|`3` _WDT_CTRL_CLK_SEL2_ ^| r/w ^| no
                                              <|`3` _WDT_CTRL_CLK_SEL2_ ^| r/w ^| `0` ^| no
                                            <|`4` _WDT_CTRL_MODE_     ^| r/w ^| no  <| overflow action: `1`=reset, `0`=IRQ
                                              <|`4` _WDT_CTRL_MODE_     ^| r/w ^| `0` ^| no  <| overflow action: `1`=reset, `0`=IRQ
                                            <|`5` _WDT_CTRL_RCAUSE_   ^| r/- ^| -   <| cause of last system reset: `0`=caused by external reset signal, `1`=caused by watchdog
                                              <|`5` _WDT_CTRL_RCAUSE_   ^| r/- ^| `0` ^| -   <| cause of last system reset: `0`=caused by external reset signal, `1`=caused by watchdog
                                            <|`6` _WDT_CTRL_RESET_    ^| -/w ^| yes <| watchdog reset when set, auto-clears
                                              <|`6` _WDT_CTRL_RESET_    ^| -/w ^| -   ^| yes <| watchdog reset when set, auto-clears
                                            <|`7` _WDT_CTRL_FORCE_    ^| -/w ^| yes <| force configured watchdog action when set, auto-clears
                                              <|`7` _WDT_CTRL_FORCE_    ^| -/w ^| -   ^| yes <| force configured watchdog action when set, auto-clears
                                            <|`8` _WDT_CTRL_LOCK_     ^| r/w ^| no  <| lock access to configuration when set, clears only on system reset (via external reset signal OR watchdog reset action = reset)
                                              <|`8` _WDT_CTRL_LOCK_     ^| r/w ^| `0` ^| no  <| lock access to configuration when set, clears only on system reset (via external reset signal OR watchdog reset action = reset)
 
                                              <|`9` _WDT_CTRL_DBEN_     ^| r/w ^| `0` ^| no  <| allow WDT to continue operation even when in debug mode
 
                                              <|`10` _WDT_CTRL_HALF_    ^| r/- ^| `0` ^| -   <| set if at least half of the max. timeout counter value has been reached
|=======================
|=======================

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.