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

Subversion Repositories neorv32

[/] [neorv32/] [trunk/] [docs/] [datasheet/] [soc_wdt.adoc] - Blame information for rev 60

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 60 zero_gravi
<<<
2
:sectnums:
3
==== Watchdog Timer (WDT)
4
 
5
[cols="<3,<3,<4"]
6
[frame="topbot",grid="none"]
7
|=======================
8
| Hardware source file(s): | neorv32_wdt.vhd |
9
| Software driver file(s): | neorv32_wdt.c |
10
|                          | neorv32_wdt.h |
11
| Top entity port:         | none |
12
| Configuration generics:  | _IO_WDT_EN_ | implement GPIO port when _true_
13
| CPU interrupts:          | FIRQ channel 0 | watchdog timer overflow (see <<_processor_interrupts>>)
14
|=======================
15
 
16
**Theory of Operation**
17
 
18
The watchdog (WDT) provides a last resort for safety-critical applications. The WDT has an internal 20-bit
19
wide counter that needs to be reset every now and then by the user program. If the counter overflows, either
20
a system reset or an interrupt is generated (depending on the configured operation mode).
21
 
22
Configuration of the watchdog is done by a single control register _WDT_CT_. The watchdog is enabled by
23
setting the _WDT_CT_EN_ bit. The clock used to increment the internal counter is selected via the 3-bit
24
_WDT_CT_CLK_SELx_ prescaler:
25
 
26
[cols="^3,^3,>4"]
27
[options="header",grid="rows"]
28
|=======================
29
| **`WDT_CT_CLK_SELx`** | Main clock prescaler | Timeout period in clock cycles
30
| `0b000` | 2 | 2 097 152
31
| `0b001` | 4 | 4 194 304
32
| `0b010` | 8 | 8 388 608
33
| `0b011` | 64 | 67 108 864
34
| `0b100` | 128 | 134 217 728
35
| `0b101` | 1024 | 1 073 741 824
36
| `0b110` | 2048 | 2 147 483 648
37
| `0b111` | 4096 | 4 294 967 296
38
|=======================
39
 
40
Whenever the internal timer overflows the watchdog executes one of two possible actions: Either a hard
41
processor reset is triggered or an interrupt is requested at CPU's fast interrupt channel #0. The
42
WDT_CT_MODE bit defines the action to be taken on an overflow: When cleared, the Watchdog will trigger an
43
IRQ, when set the WDT will cause a system reset. The configured actions can also be triggered manually at
44
any time by setting the _WDT_CT_FORCE_ bit. The watchdog is reset by setting the _WDT_CT_RESET_ bit.
45
 
46
The cause of the last action of the watchdog can be determined via the _WDT_CT_RCAUSE_ flag. If this flag is
47
zero, the processor has been reset via the external reset signal. If this flag is set the last system reset was
48
initiated by the watchdog.
49
 
50
The Watchdog control register can be locked in order to protect the current configuration. The lock is
51
activated by setting bit _WDT_CT_LOCK_. In the locked state any write access to the configuration flags is
52
ignored (see table below, "accessible if locked"). Read accesses to the control register are not effected. The
53
lock can only be removed by a system reset (via external reset signal or via a watchdog reset action).
54
 
55
.WDT register map
56
[cols="<2,<2,<4,^1,^2,<4"]
57
[options="header",grid="all"]
58
|=======================
59
| Address | Name [C] | Bit(s), Name [C] | R/W | Writable if locked | Function
60
.9+<| `0xffffff8c` .9+<| _WDT_CT_ <|`0` _WDT_CT_EN_       ^| r/w ^| no  <| watchdog enable
61
                                  <|`1` _WDT_CT_CLK_SEL0_ ^| r/w ^| no  .3+<| 3-bit clock prescaler select
62
                                  <|`2` _WDT_CT_CLK_SEL1_ ^| r/w ^| no
63
                                  <|`3` _WDT_CT_CLK_SEL2_ ^| r/w ^| no
64
                                  <|`4` _WDT_CT_MODE_     ^| r/w ^| no  <| overflow action: `1`=reset, `0`=IRQ
65
                                  <|`5` _WDT_CT_RCAUSE_   ^| r/- ^| -   <| cause of last system reset: `0`=caused by external reset signal, `1`=caused by watchdog
66
                                  <|`6` _WDT_CT_RESET_    ^| -/w ^| yes <| watchdog reset when set, auto-clears
67
                                  <|`7` _WDT_CT_FORCE_    ^| -/w ^| yes <| force configured watchdog action when set, auto-clears
68
                                  <|`8` _WDT_CT_LOCK_     ^| r/w ^| no  <| lock access to configuration when set, clears only on system reset (via external reset signal OR watchdog reset action = reset)
69
|=======================

powered by: WebSVN 2.1.0

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