Correct some problems with SAM3/4 watchdog driver. Includes some small improvements. From Max Neklyudov.
This commit is contained in:
parent
e6216a9175
commit
b13e182099
@ -1,7 +1,7 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* arch/arm/src/sam34/sam_wdt.c
|
* arch/arm/src/sam34/sam_wdt.c
|
||||||
*
|
*
|
||||||
* Copyright (C) 2014 Gregory Nutt. All rights reserved.
|
* Copyright (C) 2014-2015 Gregory Nutt. All rights reserved.
|
||||||
* Authors: Gregory Nutt <gnutt@nuttx.org>
|
* Authors: Gregory Nutt <gnutt@nuttx.org>
|
||||||
* Bob Doiron
|
* Bob Doiron
|
||||||
*
|
*
|
||||||
@ -631,7 +631,7 @@ static int sam34_ioctl(FAR struct watchdog_lowerhalf_s *lower, int cmd,
|
|||||||
else if (mintime < priv->timeout)
|
else if (mintime < priv->timeout)
|
||||||
{
|
{
|
||||||
uint32_t window = (((priv->timeout - mintime) * WDT_FCLK) / 1000) - 1;
|
uint32_t window = (((priv->timeout - mintime) * WDT_FCLK) / 1000) - 1;
|
||||||
DEBUGASSERT(window < priv->reload);
|
DEBUGASSERT(window <= priv->reload);
|
||||||
priv->window = window;
|
priv->window = window;
|
||||||
ret = OK;
|
ret = OK;
|
||||||
}
|
}
|
||||||
@ -664,6 +664,12 @@ static int sam34_ioctl(FAR struct watchdog_lowerhalf_s *lower, int cmd,
|
|||||||
void sam_wdtinitialize(FAR const char *devpath)
|
void sam_wdtinitialize(FAR const char *devpath)
|
||||||
{
|
{
|
||||||
FAR struct sam34_lowerhalf_s *priv = &g_wdgdev;
|
FAR struct sam34_lowerhalf_s *priv = &g_wdgdev;
|
||||||
|
uint32_t mr_val;
|
||||||
|
|
||||||
|
/* Enable watchdog with 5 sec timeout */
|
||||||
|
|
||||||
|
mr_val |= (WDT_MR_WDD((5) * WDT_FCLK) | WDT_MR_WDV((5) * WDT_FCLK) | WDT_MR_WDRSTEN);
|
||||||
|
sam34_putreg(mr_val, SAM_WDT_MR);
|
||||||
|
|
||||||
wdvdbg("Entry: devpath=%s\n", devpath);
|
wdvdbg("Entry: devpath=%s\n", devpath);
|
||||||
|
|
||||||
@ -690,6 +696,10 @@ void sam_wdtinitialize(FAR const char *devpath)
|
|||||||
sam34_settimeout((FAR struct watchdog_lowerhalf_s *)priv,
|
sam34_settimeout((FAR struct watchdog_lowerhalf_s *)priv,
|
||||||
CONFIG_WDT_TIMEOUT);
|
CONFIG_WDT_TIMEOUT);
|
||||||
|
|
||||||
|
/* Disable minimum time feature for now. */
|
||||||
|
|
||||||
|
priv->window = priv->reload;
|
||||||
|
|
||||||
/* Register the watchdog driver as /dev/watchdog0 */
|
/* Register the watchdog driver as /dev/watchdog0 */
|
||||||
|
|
||||||
(void)watchdog_register(devpath, (FAR struct watchdog_lowerhalf_s *)priv);
|
(void)watchdog_register(devpath, (FAR struct watchdog_lowerhalf_s *)priv);
|
||||||
|
Loading…
Reference in New Issue
Block a user