rp2/machine_wdt: Check for the maximum timeout value of watchdog.

The value will be checked for timeout <= 8388.  Notes were added to the
documentation.
This commit is contained in:
robert-hh 2022-08-22 08:09:02 +02:00 committed by Damien George
parent 8308f9c977
commit 47c45d0e7f
3 changed files with 12 additions and 3 deletions

View File

@ -15,7 +15,7 @@ Example usage::
wdt = WDT(timeout=2000) # enable it with a timeout of 2s
wdt.feed()
Availability of this class: pyboard, WiPy, esp8266, esp32.
Availability of this class: pyboard, WiPy, esp8266, esp32, rp2040, mimxrt.
Constructors
------------
@ -26,7 +26,8 @@ Constructors
Once it is running the timeout cannot be changed and the WDT cannot be stopped either.
Notes: On the esp32 the minimum timeout is 1 second. On the esp8266 a timeout
cannot be specified, it is determined by the underlying system.
cannot be specified, it is determined by the underlying system. On rp2040 devices,
the maximum timeout is 8388 ms.
Methods
-------

View File

@ -296,6 +296,7 @@ See :ref:`machine.WDT <machine.WDT>`. ::
wdt = WDT(timeout=5000)
wdt.feed()
The maximum value for timeout is 8388 ms.
OneWire driver
--------------

View File

@ -29,6 +29,9 @@
#include "hardware/watchdog.h"
// The maximum timeout in milliseconds is: 0xffffff / 2 / 1000
#define WDT_TIMEOUT_MAX 8388
typedef struct _machine_wdt_obj_t {
mp_obj_base_t base;
} machine_wdt_obj_t;
@ -53,7 +56,11 @@ STATIC mp_obj_t machine_wdt_make_new(const mp_obj_type_t *type, size_t n_args, s
}
// Start the watchdog (timeout is in milliseconds).
watchdog_enable(args[ARG_timeout].u_int, false);
uint32_t timeout = args[ARG_timeout].u_int;
if (timeout > WDT_TIMEOUT_MAX) {
mp_raise_ValueError(MP_ERROR_TEXT("timeout exceeds " MP_STRINGIFY(WDT_TIMEOUT_MAX)));
}
watchdog_enable(timeout, false);
return MP_OBJ_FROM_PTR(&machine_wdt);
}