diff --git a/apps/ChangeLog.txt b/apps/ChangeLog.txt index a70a9406d..9dcb3ad1f 100755 --- a/apps/ChangeLog.txt +++ b/apps/ChangeLog.txt @@ -225,4 +225,4 @@ * Kconfig: Continued Kconfig file updates (no longer tracking on a per-file basis in the ChangeLog) * apps/examples/watchdog: Add a watchdog timer example. - + * apps/examples/tiff: Fix wrong path used for temporary file. diff --git a/apps/examples/watchdog/watchdog.h b/apps/examples/watchdog/watchdog.h index 1b36da9b4..e5e906691 100644 --- a/apps/examples/watchdog/watchdog.h +++ b/apps/examples/watchdog/watchdog.h @@ -118,7 +118,7 @@ ****************************************************************************/ /**************************************************************************** - * Name: watchdog_devinit() + * Name: up_wdginitialize() * * Description: * Perform architecuture-specific initialization of the Watchdog hardware. @@ -127,6 +127,6 @@ * ****************************************************************************/ -int watchdog_devinit(void); +int up_wdginitialize(void); #endif /* __APPS_EXAMPLES_WATCHDOG_WATCHDOG_H */ diff --git a/apps/examples/watchdog/watchdog_main.c b/apps/examples/watchdog/watchdog_main.c index 6d1e1c43a..819f2636f 100644 --- a/apps/examples/watchdog/watchdog_main.c +++ b/apps/examples/watchdog/watchdog_main.c @@ -223,7 +223,7 @@ static void parse_args(FAR struct wdog_example_s *wdog, int argc, FAR char **arg int wdog_main(int argc, char *argv[]) { struct wdog_example_s wdog; - uint32_t elapsed; + long elapsed; int fd; int ret; @@ -235,10 +235,10 @@ int wdog_main(int argc, char *argv[]) * this test. */ - ret = watchdog_devinit(); + ret = up_wdginitialize(); if (ret != OK) { - message("wdog_main: watchdog_devinit failed: %d\n", ret); + message("wdog_main: up_wdginitialize failed: %d\n", ret); goto errout; } @@ -251,8 +251,6 @@ int wdog_main(int argc, char *argv[]) CONFIG_EXAMPLES_WATCHDOG_DEVPATH, errno); goto errout; } - message("wdog_main: starting output with frequency: %d duty: %08x count: %d\n", - info.frequency, info.duty, info.count); /* Set the watchdog timeout */ @@ -289,7 +287,7 @@ int wdog_main(int argc, char *argv[]) goto errout_with_dev; } - message(" ping elapsed=%d\n", elpased); + message(" ping elapsed=%ld\n", elapsed); msgflush(); } @@ -301,7 +299,7 @@ int wdog_main(int argc, char *argv[]) usleep(wdog.pingdelay * 1000); - message(" NO ping elapsed=%d\n", elpased); + message(" NO ping elapsed=%ld\n", elapsed); msgflush(); } diff --git a/apps/graphics/tiff/tiff_initialize.c b/apps/graphics/tiff/tiff_initialize.c index 0e5b3229c..3e1328eb2 100644 --- a/apps/graphics/tiff/tiff_initialize.c +++ b/apps/graphics/tiff/tiff_initialize.c @@ -474,10 +474,10 @@ int tiff_initialize(FAR struct tiff_info_s *info) goto errout; } - info->tmp2fd = open(info->tmpfile1, O_RDWR|O_CREAT|O_TRUNC, 0666); + info->tmp2fd = open(info->tmpfile2, O_RDWR|O_CREAT|O_TRUNC, 0666); if (info->tmp2fd < 0) { - gdbg("Failed to open %s for reading/writing: %d\n", info->tmpfile1, errno); + gdbg("Failed to open %s for reading/writing: %d\n", info->tmpfile2, errno); goto errout; } diff --git a/nuttx/Kconfig b/nuttx/Kconfig index 74257cc46..ffd0125c2 100644 --- a/nuttx/Kconfig +++ b/nuttx/Kconfig @@ -233,6 +233,12 @@ config DEBUG_SPI ---help--- Enable I2C driver debug output (disabled by default) +config DEBUG_WATCHDOG + bool "Enable watchdog timer debug output" + default n + ---help--- + Enable watchdog timer debug output (disabled by default) + endif config DEBUG_SYMBOLS diff --git a/nuttx/configs/hymini-stm32v/README.txt b/nuttx/configs/hymini-stm32v/README.txt index b50a33ccc..cadd41acf 100755 --- a/nuttx/configs/hymini-stm32v/README.txt +++ b/nuttx/configs/hymini-stm32v/README.txt @@ -363,7 +363,9 @@ HY-Mini specific Configuration Options CONFIG_STM32_TIM5 CONFIG_STM32_TIM6 CONFIG_STM32_TIM7 + CONFIG_STM32_IWDG CONFIG_STM32_WWDG + CONFIG_STM32_IWDG CONFIG_STM32_SPI2 CONFIG_STM32_SPI4 CONFIG_STM32_USART2 diff --git a/nuttx/configs/hymini-stm32v/buttons/defconfig b/nuttx/configs/hymini-stm32v/buttons/defconfig index 2abd5cbab..b9b4d59e0 100644 --- a/nuttx/configs/hymini-stm32v/buttons/defconfig +++ b/nuttx/configs/hymini-stm32v/buttons/defconfig @@ -119,6 +119,7 @@ CONFIG_STM32_TIM5=n CONFIG_STM32_TIM6=n CONFIG_STM32_TIM7=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI4=n CONFIG_STM32_USART2=y diff --git a/nuttx/configs/hymini-stm32v/nsh/defconfig b/nuttx/configs/hymini-stm32v/nsh/defconfig index bbb6c34a5..c89638f13 100755 --- a/nuttx/configs/hymini-stm32v/nsh/defconfig +++ b/nuttx/configs/hymini-stm32v/nsh/defconfig @@ -115,6 +115,7 @@ CONFIG_STM32_TIM5=n CONFIG_STM32_TIM6=n CONFIG_STM32_TIM7=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI4=n CONFIG_STM32_USART2=y diff --git a/nuttx/configs/hymini-stm32v/nsh2/defconfig b/nuttx/configs/hymini-stm32v/nsh2/defconfig index fea3b0283..2bb9a8bf0 100644 --- a/nuttx/configs/hymini-stm32v/nsh2/defconfig +++ b/nuttx/configs/hymini-stm32v/nsh2/defconfig @@ -116,6 +116,7 @@ CONFIG_STM32_TIM5=n CONFIG_STM32_TIM6=n CONFIG_STM32_TIM7=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI4=n CONFIG_STM32_USART2=n diff --git a/nuttx/configs/hymini-stm32v/nx/defconfig b/nuttx/configs/hymini-stm32v/nx/defconfig index 7058b5daa..f19b0dfab 100644 --- a/nuttx/configs/hymini-stm32v/nx/defconfig +++ b/nuttx/configs/hymini-stm32v/nx/defconfig @@ -115,6 +115,7 @@ CONFIG_STM32_TIM5=n CONFIG_STM32_TIM6=n CONFIG_STM32_TIM7=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI4=n CONFIG_STM32_USART2=y diff --git a/nuttx/configs/hymini-stm32v/nxlines/defconfig b/nuttx/configs/hymini-stm32v/nxlines/defconfig index 48ae3675e..f25914704 100644 --- a/nuttx/configs/hymini-stm32v/nxlines/defconfig +++ b/nuttx/configs/hymini-stm32v/nxlines/defconfig @@ -116,6 +116,7 @@ CONFIG_STM32_TIM5=n CONFIG_STM32_TIM6=n CONFIG_STM32_TIM7=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI4=n CONFIG_STM32_USART2=y diff --git a/nuttx/configs/hymini-stm32v/src/Makefile b/nuttx/configs/hymini-stm32v/src/Makefile index 5bb03930a..fcfb670da 100644 --- a/nuttx/configs/hymini-stm32v/src/Makefile +++ b/nuttx/configs/hymini-stm32v/src/Makefile @@ -1,7 +1,7 @@ ############################################################################ # configs/hymini-stm32v/src/Makefile # -# Copyright (C) 2009-2011 Gregory Nutt. All rights reserved. +# Copyright (C) 2009-2012 Gregory Nutt. All rights reserved. # Author: Gregory Nutt # Laurent Latil # @@ -59,6 +59,10 @@ ifeq ($(CONFIG_USBMSC),y) CSRCS += up_usbmsc.c endif +ifeq ($(CONFIG_WATCHDOG),y) +CSRCS += up_watchdog.c +endif + COBJS = $(CSRCS:.c=$(OBJEXT)) SRCS = $(ASRCS) $(CSRCS) diff --git a/nuttx/configs/hymini-stm32v/src/up_watchdog.c b/nuttx/configs/hymini-stm32v/src/up_watchdog.c new file mode 100644 index 000000000..638fae440 --- /dev/null +++ b/nuttx/configs/hymini-stm32v/src/up_watchdog.c @@ -0,0 +1,136 @@ +/************************************************************************************ + * configs/hymini-stm32v/src/up_watchdog.c + * arch/arm/src/board/up_watchdog.c + * + * Copyright (C) 2012 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ************************************************************************************/ + +/************************************************************************************ + * Included Files + ************************************************************************************/ + +#include + +#include +#include + +#include +#include + +#include "stm32_wdg.h" + +#ifdef CONFIG_WATCHDOG + +/************************************************************************************ + * Definitions + ************************************************************************************/ +/* Configuration *******************************************************************/ +/* Wathdog hardware should be enabled */ + +#if !defined(CONFIG_STM32_WWDG) && !defined(CONFIG_STM32_IWDG) +# warning "One of CONFIG_STM32_WWDG or CONFIG_STM32_IWDG must be defined" +#endif + +/* Select the path to the registered watchdog timer device */ + +#ifndef CONFIG_STM32_WDG_DEVPATH +# ifdef CONFIG_EXAMPLES_WATCHDOG_DEVPATH +# define CONFIG_STM32_WDG_DEVPATH CONFIG_EXAMPLES_WATCHDOG_DEVPATH +# else +# define CONFIG_STM32_WDG_DEVPATH "/dev/watchdog0" +# endif +#endif + +/* Use the un-calibrated LSI frequency if we have nothing better */ + +#if defined(CONFIG_STM32_IWDG) && !defined(CONFIG_STM32_LSIFREQ) +# define CONFIG_STM32_LSIFREQ STM32_LSI_FREQUENCY +#endif + +/* Debug ***************************************************************************/ +/* Non-standard debug that may be enabled just for testing the watchdog timer */ + +#ifndef CONFIG_DEBUG +# undef CONFIG_DEBUG_WATCHDOG +#endif + +#ifdef CONFIG_DEBUG_WATCHDOG +# define wdgdbg dbg +# define wdglldbg lldbg +# ifdef CONFIG_DEBUG_VERBOSE +# define wdgvdbg vdbg +# define wdgllvdbg llvdbg +# else +# define wdgvdbg(x...) +# define wdgllvdbg(x...) +# endif +#else +# define wdgdbg(x...) +# define wdglldbg(x...) +# define wdgvdbg(x...) +# define wdgllvdbg(x...) +#endif + +/************************************************************************************ + * Private Functions + ************************************************************************************/ + +/************************************************************************************ + * Public Functions + ************************************************************************************/ + +/**************************************************************************** + * Name: up_wdginitialize() + * + * Description: + * Perform architecuture-specific initialization of the Watchdog hardware. + * This interface must be provided by all configurations using + * apps/examples/watchdog + * + ****************************************************************************/ + +int up_wdginitialize(void) +{ + /* Initialize tha register the watchdog timer device */ + +#if defined(CONFIG_STM32_WWDG) + stm32_wwdginitialize(CONFIG_STM32_WDG_DEVPATH); + return OK; +#elif defined(CONFIG_STM32_IWDG) + stm32_iwdginitialize(CONFIG_STM32_WDG_DEVPATH, CONFIG_STM32_LSIFREQ); + return OK; +#else + return -ENODEV; +#endif +} + +#endif /* CONFIG_WATCHDOG */ diff --git a/nuttx/configs/hymini-stm32v/usbserial/defconfig b/nuttx/configs/hymini-stm32v/usbserial/defconfig index b594aba6d..1a9a6ab28 100755 --- a/nuttx/configs/hymini-stm32v/usbserial/defconfig +++ b/nuttx/configs/hymini-stm32v/usbserial/defconfig @@ -118,6 +118,7 @@ CONFIG_STM32_TIM5=n CONFIG_STM32_TIM6=n CONFIG_STM32_TIM7=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI4=n CONFIG_STM32_USART2=y diff --git a/nuttx/configs/hymini-stm32v/usbstorage/defconfig b/nuttx/configs/hymini-stm32v/usbstorage/defconfig index c5c0fca11..758d087b2 100755 --- a/nuttx/configs/hymini-stm32v/usbstorage/defconfig +++ b/nuttx/configs/hymini-stm32v/usbstorage/defconfig @@ -116,6 +116,7 @@ CONFIG_STM32_TIM5=n CONFIG_STM32_TIM6=n CONFIG_STM32_TIM7=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI4=n CONFIG_STM32_USART2=y diff --git a/nuttx/configs/stm3210e-eval/README.txt b/nuttx/configs/stm3210e-eval/README.txt index c356a17d5..9d7c077e8 100755 --- a/nuttx/configs/stm3210e-eval/README.txt +++ b/nuttx/configs/stm3210e-eval/README.txt @@ -464,6 +464,7 @@ STM3210E-EVAL-specific Configuration Options CONFIG_STM32_TIM6 CONFIG_STM32_TIM7 CONFIG_STM32_WWDG + CONFIG_STM32_IWDG CONFIG_STM32_SPI2 CONFIG_STM32_SPI4 CONFIG_STM32_USART2 diff --git a/nuttx/configs/stm3210e-eval/RIDE/defconfig b/nuttx/configs/stm3210e-eval/RIDE/defconfig index c091d0eb2..8566de22e 100755 --- a/nuttx/configs/stm3210e-eval/RIDE/defconfig +++ b/nuttx/configs/stm3210e-eval/RIDE/defconfig @@ -123,6 +123,7 @@ CONFIG_STM32_TIM5=n CONFIG_STM32_TIM6=n CONFIG_STM32_TIM7=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI4=n CONFIG_STM32_USART2=y diff --git a/nuttx/configs/stm3210e-eval/buttons/defconfig b/nuttx/configs/stm3210e-eval/buttons/defconfig index c257d3606..694b9bd25 100644 --- a/nuttx/configs/stm3210e-eval/buttons/defconfig +++ b/nuttx/configs/stm3210e-eval/buttons/defconfig @@ -135,6 +135,7 @@ CONFIG_STM32_TIM5=n CONFIG_STM32_TIM6=n CONFIG_STM32_TIM7=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI4=n CONFIG_STM32_USART2=y diff --git a/nuttx/configs/stm3210e-eval/composite/defconfig b/nuttx/configs/stm3210e-eval/composite/defconfig index 3eb19f965..57a4c0793 100755 --- a/nuttx/configs/stm3210e-eval/composite/defconfig +++ b/nuttx/configs/stm3210e-eval/composite/defconfig @@ -131,6 +131,7 @@ CONFIG_STM32_TIM5=n CONFIG_STM32_TIM6=n CONFIG_STM32_TIM7=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI4=n CONFIG_STM32_USART2=y diff --git a/nuttx/configs/stm3210e-eval/nsh/defconfig b/nuttx/configs/stm3210e-eval/nsh/defconfig index c81961169..39adad92f 100755 --- a/nuttx/configs/stm3210e-eval/nsh/defconfig +++ b/nuttx/configs/stm3210e-eval/nsh/defconfig @@ -131,6 +131,7 @@ CONFIG_STM32_TIM5=n CONFIG_STM32_TIM6=n CONFIG_STM32_TIM7=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI4=n CONFIG_STM32_USART2=y diff --git a/nuttx/configs/stm3210e-eval/nsh2/defconfig b/nuttx/configs/stm3210e-eval/nsh2/defconfig index 3924412df..8ad609818 100644 --- a/nuttx/configs/stm3210e-eval/nsh2/defconfig +++ b/nuttx/configs/stm3210e-eval/nsh2/defconfig @@ -152,6 +152,7 @@ CONFIG_STM32_TIM5=n CONFIG_STM32_TIM6=n CONFIG_STM32_TIM7=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI4=n CONFIG_STM32_USART2=y diff --git a/nuttx/configs/stm3210e-eval/nx/defconfig b/nuttx/configs/stm3210e-eval/nx/defconfig index c01e283c3..359cf8150 100644 --- a/nuttx/configs/stm3210e-eval/nx/defconfig +++ b/nuttx/configs/stm3210e-eval/nx/defconfig @@ -131,6 +131,7 @@ CONFIG_STM32_TIM5=n CONFIG_STM32_TIM6=n CONFIG_STM32_TIM7=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI4=n CONFIG_STM32_USART2=y diff --git a/nuttx/configs/stm3210e-eval/nxconsole/defconfig b/nuttx/configs/stm3210e-eval/nxconsole/defconfig index 6b19bcde2..4c04af514 100644 --- a/nuttx/configs/stm3210e-eval/nxconsole/defconfig +++ b/nuttx/configs/stm3210e-eval/nxconsole/defconfig @@ -131,6 +131,7 @@ CONFIG_STM32_TIM5=n CONFIG_STM32_TIM6=n CONFIG_STM32_TIM7=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI4=n CONFIG_STM32_USART2=y diff --git a/nuttx/configs/stm3210e-eval/nxlines/defconfig b/nuttx/configs/stm3210e-eval/nxlines/defconfig index 6eda15951..8139b7107 100644 --- a/nuttx/configs/stm3210e-eval/nxlines/defconfig +++ b/nuttx/configs/stm3210e-eval/nxlines/defconfig @@ -131,6 +131,7 @@ CONFIG_STM32_TIM5=n CONFIG_STM32_TIM6=n CONFIG_STM32_TIM7=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI4=n CONFIG_STM32_USART2=y diff --git a/nuttx/configs/stm3210e-eval/nxtext/defconfig b/nuttx/configs/stm3210e-eval/nxtext/defconfig index 38f0ca074..3045de58e 100644 --- a/nuttx/configs/stm3210e-eval/nxtext/defconfig +++ b/nuttx/configs/stm3210e-eval/nxtext/defconfig @@ -131,6 +131,7 @@ CONFIG_STM32_TIM5=n CONFIG_STM32_TIM6=n CONFIG_STM32_TIM7=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI4=n CONFIG_STM32_USART2=y diff --git a/nuttx/configs/stm3210e-eval/ostest/defconfig b/nuttx/configs/stm3210e-eval/ostest/defconfig index 0beef4d98..62ec95cf4 100755 --- a/nuttx/configs/stm3210e-eval/ostest/defconfig +++ b/nuttx/configs/stm3210e-eval/ostest/defconfig @@ -133,6 +133,7 @@ CONFIG_STM32_TIM5=n CONFIG_STM32_TIM6=n CONFIG_STM32_TIM7=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI4=n CONFIG_STM32_USART2=y diff --git a/nuttx/configs/stm3210e-eval/src/Makefile b/nuttx/configs/stm3210e-eval/src/Makefile index db5710c08..be12a216f 100644 --- a/nuttx/configs/stm3210e-eval/src/Makefile +++ b/nuttx/configs/stm3210e-eval/src/Makefile @@ -72,6 +72,10 @@ ifeq ($(CONFIG_CAN),y) CSRCS += up_can.c endif +ifeq ($(CONFIG_WATCHDOG),y) +CSRCS += up_watchdog.c +endif + COBJS = $(CSRCS:.c=$(OBJEXT)) SRCS = $(ASRCS) $(CSRCS) diff --git a/nuttx/configs/stm3210e-eval/src/up_watchdog.c b/nuttx/configs/stm3210e-eval/src/up_watchdog.c new file mode 100644 index 000000000..0c09f7549 --- /dev/null +++ b/nuttx/configs/stm3210e-eval/src/up_watchdog.c @@ -0,0 +1,136 @@ +/************************************************************************************ + * configs/stm3210e-eval/src/up_watchdog.c + * arch/arm/src/board/up_watchdog.c + * + * Copyright (C) 2012 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ************************************************************************************/ + +/************************************************************************************ + * Included Files + ************************************************************************************/ + +#include + +#include +#include + +#include +#include + +#include "stm32_wdg.h" + +#ifdef CONFIG_WATCHDOG + +/************************************************************************************ + * Definitions + ************************************************************************************/ +/* Configuration *******************************************************************/ +/* Wathdog hardware should be enabled */ + +#if !defined(CONFIG_STM32_WWDG) && !defined(CONFIG_STM32_IWDG) +# warning "One of CONFIG_STM32_WWDG or CONFIG_STM32_IWDG must be defined" +#endif + +/* Select the path to the registered watchdog timer device */ + +#ifndef CONFIG_STM32_WDG_DEVPATH +# ifdef CONFIG_EXAMPLES_WATCHDOG_DEVPATH +# define CONFIG_STM32_WDG_DEVPATH CONFIG_EXAMPLES_WATCHDOG_DEVPATH +# else +# define CONFIG_STM32_WDG_DEVPATH "/dev/watchdog0" +# endif +#endif + +/* Use the un-calibrated LSI frequency if we have nothing better */ + +#if defined(CONFIG_STM32_IWDG) && !defined(CONFIG_STM32_LSIFREQ) +# define CONFIG_STM32_LSIFREQ STM32_LSI_FREQUENCY +#endif + +/* Debug ***************************************************************************/ +/* Non-standard debug that may be enabled just for testing the watchdog timer */ + +#ifndef CONFIG_DEBUG +# undef CONFIG_DEBUG_WATCHDOG +#endif + +#ifdef CONFIG_DEBUG_WATCHDOG +# define wdgdbg dbg +# define wdglldbg lldbg +# ifdef CONFIG_DEBUG_VERBOSE +# define wdgvdbg vdbg +# define wdgllvdbg llvdbg +# else +# define wdgvdbg(x...) +# define wdgllvdbg(x...) +# endif +#else +# define wdgdbg(x...) +# define wdglldbg(x...) +# define wdgvdbg(x...) +# define wdgllvdbg(x...) +#endif + +/************************************************************************************ + * Private Functions + ************************************************************************************/ + +/************************************************************************************ + * Public Functions + ************************************************************************************/ + +/**************************************************************************** + * Name: up_wdginitialize() + * + * Description: + * Perform architecuture-specific initialization of the Watchdog hardware. + * This interface must be provided by all configurations using + * apps/examples/watchdog + * + ****************************************************************************/ + +int up_wdginitialize(void) +{ + /* Initialize tha register the watchdog timer device */ + +#if defined(CONFIG_STM32_WWDG) + stm32_wwdginitialize(CONFIG_STM32_WDG_DEVPATH); + return OK; +#elif defined(CONFIG_STM32_IWDG) + stm32_iwdginitialize(CONFIG_STM32_WDG_DEVPATH, CONFIG_STM32_LSIFREQ); + return OK; +#else + return -ENODEV; +#endif +} + +#endif /* CONFIG_WATCHDOG */ diff --git a/nuttx/configs/stm3210e-eval/usbserial/defconfig b/nuttx/configs/stm3210e-eval/usbserial/defconfig index d9f2bc89a..e9f1fea16 100755 --- a/nuttx/configs/stm3210e-eval/usbserial/defconfig +++ b/nuttx/configs/stm3210e-eval/usbserial/defconfig @@ -133,6 +133,7 @@ CONFIG_STM32_TIM5=n CONFIG_STM32_TIM6=n CONFIG_STM32_TIM7=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI4=n CONFIG_STM32_USART2=y diff --git a/nuttx/configs/stm3210e-eval/usbstorage/defconfig b/nuttx/configs/stm3210e-eval/usbstorage/defconfig index 494c3f7e8..82752bbde 100755 --- a/nuttx/configs/stm3210e-eval/usbstorage/defconfig +++ b/nuttx/configs/stm3210e-eval/usbstorage/defconfig @@ -131,6 +131,7 @@ CONFIG_STM32_TIM5=n CONFIG_STM32_TIM6=n CONFIG_STM32_TIM7=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI4=n CONFIG_STM32_USART2=y diff --git a/nuttx/configs/stm3220g-eval/README.txt b/nuttx/configs/stm3220g-eval/README.txt index 794d03241..327280050 100644 --- a/nuttx/configs/stm3220g-eval/README.txt +++ b/nuttx/configs/stm3220g-eval/README.txt @@ -460,6 +460,7 @@ STM3220G-EVAL-specific Configuration Options CONFIG_STM32_TIM13 CONFIG_STM32_TIM14 CONFIG_STM32_WWDG + CONFIG_STM32_IWDG CONFIG_STM32_SPI2 CONFIG_STM32_SPI3 CONFIG_STM32_USART2 diff --git a/nuttx/configs/stm3220g-eval/dhcpd/defconfig b/nuttx/configs/stm3220g-eval/dhcpd/defconfig index 7306bbd7f..db436c236 100644 --- a/nuttx/configs/stm3220g-eval/dhcpd/defconfig +++ b/nuttx/configs/stm3220g-eval/dhcpd/defconfig @@ -172,6 +172,7 @@ CONFIG_STM32_TIM12=n CONFIG_STM32_TIM13=n CONFIG_STM32_TIM14=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI3=n CONFIG_STM32_USART2=n diff --git a/nuttx/configs/stm3220g-eval/nettest/defconfig b/nuttx/configs/stm3220g-eval/nettest/defconfig index 7f43244a3..e54c502cc 100644 --- a/nuttx/configs/stm3220g-eval/nettest/defconfig +++ b/nuttx/configs/stm3220g-eval/nettest/defconfig @@ -172,6 +172,7 @@ CONFIG_STM32_TIM12=n CONFIG_STM32_TIM13=n CONFIG_STM32_TIM14=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI3=n CONFIG_STM32_USART2=n diff --git a/nuttx/configs/stm3220g-eval/nsh/defconfig b/nuttx/configs/stm3220g-eval/nsh/defconfig index 5e63d03fa..5d793f354 100644 --- a/nuttx/configs/stm3220g-eval/nsh/defconfig +++ b/nuttx/configs/stm3220g-eval/nsh/defconfig @@ -172,6 +172,7 @@ CONFIG_STM32_TIM12=n CONFIG_STM32_TIM13=n CONFIG_STM32_TIM14=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI3=n CONFIG_STM32_USART2=n diff --git a/nuttx/configs/stm3220g-eval/nsh2/defconfig b/nuttx/configs/stm3220g-eval/nsh2/defconfig index 62afbf9c2..df5a0e8d1 100644 --- a/nuttx/configs/stm3220g-eval/nsh2/defconfig +++ b/nuttx/configs/stm3220g-eval/nsh2/defconfig @@ -173,6 +173,7 @@ CONFIG_STM32_TIM12=n CONFIG_STM32_TIM13=n CONFIG_STM32_TIM14=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI3=n CONFIG_STM32_USART2=n diff --git a/nuttx/configs/stm3220g-eval/ostest/defconfig b/nuttx/configs/stm3220g-eval/ostest/defconfig index 2ed18f0fc..9859b0f9c 100644 --- a/nuttx/configs/stm3220g-eval/ostest/defconfig +++ b/nuttx/configs/stm3220g-eval/ostest/defconfig @@ -172,6 +172,7 @@ CONFIG_STM32_TIM12=n CONFIG_STM32_TIM13=n CONFIG_STM32_TIM14=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI3=n CONFIG_STM32_USART2=n diff --git a/nuttx/configs/stm3220g-eval/src/Makefile b/nuttx/configs/stm3220g-eval/src/Makefile index b79189cb1..af845744b 100644 --- a/nuttx/configs/stm3220g-eval/src/Makefile +++ b/nuttx/configs/stm3220g-eval/src/Makefile @@ -80,8 +80,8 @@ ifeq ($(CONFIG_NSH_ARCHINIT),y) CSRCS += up_nsh.c endif -ifeq ($(CONFIG_ARCH_FPU),y) -CSRCS += up_ostest.c +ifeq ($(CONFIG_WATCHDOG),y) +CSRCS += up_watchdog.c endif COBJS = $(CSRCS:.c=$(OBJEXT)) diff --git a/nuttx/configs/stm3220g-eval/src/up_watchdog.c b/nuttx/configs/stm3220g-eval/src/up_watchdog.c new file mode 100644 index 000000000..d8b635982 --- /dev/null +++ b/nuttx/configs/stm3220g-eval/src/up_watchdog.c @@ -0,0 +1,136 @@ +/************************************************************************************ + * configs/stm3220g-eval/src/up_watchdog.c + * arch/arm/src/board/up_watchdog.c + * + * Copyright (C) 2012 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ************************************************************************************/ + +/************************************************************************************ + * Included Files + ************************************************************************************/ + +#include + +#include +#include + +#include +#include + +#include "stm32_wdg.h" + +#ifdef CONFIG_WATCHDOG + +/************************************************************************************ + * Definitions + ************************************************************************************/ +/* Configuration *******************************************************************/ +/* Wathdog hardware should be enabled */ + +#if !defined(CONFIG_STM32_WWDG) && !defined(CONFIG_STM32_IWDG) +# warning "One of CONFIG_STM32_WWDG or CONFIG_STM32_IWDG must be defined" +#endif + +/* Select the path to the registered watchdog timer device */ + +#ifndef CONFIG_STM32_WDG_DEVPATH +# ifdef CONFIG_EXAMPLES_WATCHDOG_DEVPATH +# define CONFIG_STM32_WDG_DEVPATH CONFIG_EXAMPLES_WATCHDOG_DEVPATH +# else +# define CONFIG_STM32_WDG_DEVPATH "/dev/watchdog0" +# endif +#endif + +/* Use the un-calibrated LSI frequency if we have nothing better */ + +#if defined(CONFIG_STM32_IWDG) && !defined(CONFIG_STM32_LSIFREQ) +# define CONFIG_STM32_LSIFREQ STM32_LSI_FREQUENCY +#endif + +/* Debug ***************************************************************************/ +/* Non-standard debug that may be enabled just for testing the watchdog timer */ + +#ifndef CONFIG_DEBUG +# undef CONFIG_DEBUG_WATCHDOG +#endif + +#ifdef CONFIG_DEBUG_WATCHDOG +# define wdgdbg dbg +# define wdglldbg lldbg +# ifdef CONFIG_DEBUG_VERBOSE +# define wdgvdbg vdbg +# define wdgllvdbg llvdbg +# else +# define wdgvdbg(x...) +# define wdgllvdbg(x...) +# endif +#else +# define wdgdbg(x...) +# define wdglldbg(x...) +# define wdgvdbg(x...) +# define wdgllvdbg(x...) +#endif + +/************************************************************************************ + * Private Functions + ************************************************************************************/ + +/************************************************************************************ + * Public Functions + ************************************************************************************/ + +/**************************************************************************** + * Name: up_wdginitialize() + * + * Description: + * Perform architecuture-specific initialization of the Watchdog hardware. + * This interface must be provided by all configurations using + * apps/examples/watchdog + * + ****************************************************************************/ + +int up_wdginitialize(void) +{ + /* Initialize tha register the watchdog timer device */ + +#if defined(CONFIG_STM32_WWDG) + stm32_wwdginitialize(CONFIG_STM32_WDG_DEVPATH); + return OK; +#elif defined(CONFIG_STM32_IWDG) + stm32_iwdginitialize(CONFIG_STM32_WDG_DEVPATH, CONFIG_STM32_LSIFREQ); + return OK; +#else + return -ENODEV; +#endif +} + +#endif /* CONFIG_WATCHDOG */ diff --git a/nuttx/configs/stm3220g-eval/telnetd/defconfig b/nuttx/configs/stm3220g-eval/telnetd/defconfig index 854e5631a..12e036d9f 100644 --- a/nuttx/configs/stm3220g-eval/telnetd/defconfig +++ b/nuttx/configs/stm3220g-eval/telnetd/defconfig @@ -171,6 +171,7 @@ CONFIG_STM32_TIM12=n CONFIG_STM32_TIM13=n CONFIG_STM32_TIM14=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI3=n CONFIG_STM32_USART2=n diff --git a/nuttx/configs/stm3240g-eval/README.txt b/nuttx/configs/stm3240g-eval/README.txt index 5b5c62749..1fb7d6ff4 100755 --- a/nuttx/configs/stm3240g-eval/README.txt +++ b/nuttx/configs/stm3240g-eval/README.txt @@ -630,6 +630,7 @@ STM3240G-EVAL-specific Configuration Options CONFIG_STM32_TIM13 CONFIG_STM32_TIM14 CONFIG_STM32_WWDG + CONFIG_STM32_IWDG CONFIG_STM32_SPI2 CONFIG_STM32_SPI3 CONFIG_STM32_USART2 diff --git a/nuttx/configs/stm3240g-eval/dhcpd/defconfig b/nuttx/configs/stm3240g-eval/dhcpd/defconfig index 0759f8469..90d910c4e 100644 --- a/nuttx/configs/stm3240g-eval/dhcpd/defconfig +++ b/nuttx/configs/stm3240g-eval/dhcpd/defconfig @@ -174,6 +174,7 @@ CONFIG_STM32_TIM12=n CONFIG_STM32_TIM13=n CONFIG_STM32_TIM14=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI3=n CONFIG_STM32_USART2=n diff --git a/nuttx/configs/stm3240g-eval/nettest/defconfig b/nuttx/configs/stm3240g-eval/nettest/defconfig index 309a49e3c..af31d9102 100644 --- a/nuttx/configs/stm3240g-eval/nettest/defconfig +++ b/nuttx/configs/stm3240g-eval/nettest/defconfig @@ -174,6 +174,7 @@ CONFIG_STM32_TIM12=n CONFIG_STM32_TIM13=n CONFIG_STM32_TIM14=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI3=n CONFIG_STM32_USART2=n diff --git a/nuttx/configs/stm3240g-eval/nsh/defconfig b/nuttx/configs/stm3240g-eval/nsh/defconfig index fca94b213..66bf40077 100644 --- a/nuttx/configs/stm3240g-eval/nsh/defconfig +++ b/nuttx/configs/stm3240g-eval/nsh/defconfig @@ -174,6 +174,7 @@ CONFIG_STM32_TIM12=n CONFIG_STM32_TIM13=n CONFIG_STM32_TIM14=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI3=n CONFIG_STM32_USART2=n diff --git a/nuttx/configs/stm3240g-eval/nsh2/defconfig b/nuttx/configs/stm3240g-eval/nsh2/defconfig index 13c58788c..1ffc6ecd6 100644 --- a/nuttx/configs/stm3240g-eval/nsh2/defconfig +++ b/nuttx/configs/stm3240g-eval/nsh2/defconfig @@ -175,6 +175,7 @@ CONFIG_STM32_TIM12=n CONFIG_STM32_TIM13=n CONFIG_STM32_TIM14=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI3=n CONFIG_STM32_USART2=n diff --git a/nuttx/configs/stm3240g-eval/ostest/defconfig b/nuttx/configs/stm3240g-eval/ostest/defconfig index 54d393f89..b5c384473 100644 --- a/nuttx/configs/stm3240g-eval/ostest/defconfig +++ b/nuttx/configs/stm3240g-eval/ostest/defconfig @@ -174,6 +174,7 @@ CONFIG_STM32_TIM12=n CONFIG_STM32_TIM13=n CONFIG_STM32_TIM14=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI3=n CONFIG_STM32_USART2=n diff --git a/nuttx/configs/stm3240g-eval/src/Makefile b/nuttx/configs/stm3240g-eval/src/Makefile index e28eff4eb..1f532b4c0 100644 --- a/nuttx/configs/stm3240g-eval/src/Makefile +++ b/nuttx/configs/stm3240g-eval/src/Makefile @@ -84,6 +84,10 @@ ifeq ($(CONFIG_ARCH_FPU),y) CSRCS += up_ostest.c endif +ifeq ($(CONFIG_WATCHDOG),y) +CSRCS += up_watchdog.c +endif + COBJS = $(CSRCS:.c=$(OBJEXT)) SRCS = $(ASRCS) $(CSRCS) diff --git a/nuttx/configs/stm3240g-eval/telnetd/defconfig b/nuttx/configs/stm3240g-eval/telnetd/defconfig index c894455e2..befd64264 100644 --- a/nuttx/configs/stm3240g-eval/telnetd/defconfig +++ b/nuttx/configs/stm3240g-eval/telnetd/defconfig @@ -174,6 +174,7 @@ CONFIG_STM32_TIM12=n CONFIG_STM32_TIM13=n CONFIG_STM32_TIM14=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI3=n CONFIG_STM32_USART2=n diff --git a/nuttx/configs/stm32f4discovery/README.txt b/nuttx/configs/stm32f4discovery/README.txt index d9720fdf2..1ad1a2e0b 100755 --- a/nuttx/configs/stm32f4discovery/README.txt +++ b/nuttx/configs/stm32f4discovery/README.txt @@ -633,6 +633,7 @@ STM32F4Discovery-specific Configuration Options CONFIG_STM32_TIM13 CONFIG_STM32_TIM14 CONFIG_STM32_WWDG + CONFIG_STM32_IWDG CONFIG_STM32_SPI2 CONFIG_STM32_SPI3 CONFIG_STM32_USART2 @@ -835,3 +836,10 @@ Where is one of the following: Special PWM-only debug options: CONFIG_DEBUG_QENCODER + + 3. This examples supports the watchdog timer test (apps/examples/watchdog) + buty this must be manually enabled by selecting: + + CONFIG_WATCHDOG=y : Enables watchdog timer driver support + CONFIG_STM32_WWDG=y : Enables the WWDG timer facility, OR + CONFIG_STM32_IWDG=y : Enables the IWDG timer facility (but not both) diff --git a/nuttx/configs/stm32f4discovery/nsh/appconfig b/nuttx/configs/stm32f4discovery/nsh/appconfig index c6532241e..097948c87 100644 --- a/nuttx/configs/stm32f4discovery/nsh/appconfig +++ b/nuttx/configs/stm32f4discovery/nsh/appconfig @@ -61,3 +61,7 @@ ifeq ($(CONFIG_CDCACM),y) CONFIGURED_APPS += examples/cdcacm endif endif + +ifeq ($(CONFIG_WATCHDOG),y) +CONFIGURED_APPS += examples/watchdog +endif diff --git a/nuttx/configs/stm32f4discovery/nsh/defconfig b/nuttx/configs/stm32f4discovery/nsh/defconfig index c77b32ccb..0e09e1a1f 100755 --- a/nuttx/configs/stm32f4discovery/nsh/defconfig +++ b/nuttx/configs/stm32f4discovery/nsh/defconfig @@ -151,6 +151,7 @@ CONFIG_STM32_TIM12=n CONFIG_STM32_TIM13=n CONFIG_STM32_TIM14=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI3=n CONFIG_STM32_USART2=y @@ -1010,6 +1011,18 @@ CONFIG_USBMSC_PRODUCTSTR="USBdev Storage" CONFIG_USBMSC_VERSIONNO=0x0399 CONFIG_USBMSC_REMOVABLE=y +# +# Watchdog timer configuration +# +# CONFIG_WATCHDOG - Enable overall watchdog timer driver support. +# +# The STM32 also needs one of the following enabled: +# +# CONFIG_STM32_WWDG=y, OR +# CONFIG_STM32_IWDG=y (but not both) +# +CONFIG_WATCHDOG=n + # # Graphics related configuration settings # @@ -1355,6 +1368,41 @@ CONFIG_EXAMPLES_CDCACM_TRACEINTERRUPTS=n # CONFIG_EXAMPLES_PWM_DURATION - The initial PWM pulse train duration in sectonds. # as a percentage. Default: 5 seconds +# +# Settings for examples/watchdog +# + +# This test depends on these specific Watchdog/NSH configurations settings (your +# specific watchdog hardware settings might require additional settings). +# +# CONFIG_WATCHDOG- Enables watchdog timer support support. +# CONFIG_NSH_BUILTIN_APPS - Build the watchdog time test as an NSH +# built-in function. Default: Not built! The example can only be used +# as an NSH built-in application +# +# The STM32 also needs one of the following enabled: +# +# CONFIG_STM32_WWDG=y, OR +# CONFIG_STM32_IWDG=y (but not both) +# +# Specific configuration options for this example include: +# +# CONFIG_EXAMPLES_WATCHDOG_DEVPATH - The path to the Watchdog device. +# Default: /dev/watchdog0 +# CONFIG_EXAMPLES_WATCHDOG_PINGTIME - Time in milliseconds that the example +# will ping the watchdog before letting the watchdog expire. Default: 5000 +# milliseconds +# CONFIG_EXAMPLES_WATCHDOG_PINGDELAY - Time delay between pings in +# milliseconds. Default: 500 milliseconds. +# CONFIG_EXAMPLES_WATCHDOG_TIMEOUT - The watchdog timeout value in +# milliseconds before the watchdog timer expires. Default: 2000 +# milliseconds. +# +# CONFIG_EXAMPLES_WATCHDOG_DEVPATH +# CONFIG_EXAMPLES_WATCHDOG_PINGTIME +# CONFIG_EXAMPLES_WATCHDOG_PINGDELAY +# CONFIG_EXAMPLES_WATCHDOG_TIMEOUT + # # Stack and heap information # diff --git a/nuttx/configs/stm32f4discovery/ostest/defconfig b/nuttx/configs/stm32f4discovery/ostest/defconfig index 35858b6bd..b6cf8b9bd 100755 --- a/nuttx/configs/stm32f4discovery/ostest/defconfig +++ b/nuttx/configs/stm32f4discovery/ostest/defconfig @@ -151,6 +151,7 @@ CONFIG_STM32_TIM12=n CONFIG_STM32_TIM13=n CONFIG_STM32_TIM14=n CONFIG_STM32_WWDG=n +CONFIG_STM32_IWDG=n CONFIG_STM32_SPI2=n CONFIG_STM32_SPI3=n CONFIG_STM32_USART2=y diff --git a/nuttx/configs/stm32f4discovery/src/Makefile b/nuttx/configs/stm32f4discovery/src/Makefile index 55db39d03..b5f449a47 100644 --- a/nuttx/configs/stm32f4discovery/src/Makefile +++ b/nuttx/configs/stm32f4discovery/src/Makefile @@ -68,6 +68,10 @@ ifeq ($(CONFIG_QENCODER),y) CSRCS += up_qencoder.c endif +ifeq ($(CONFIG_WATCHDOG),y) +CSRCS += up_watchdog.c +endif + COBJS = $(CSRCS:.c=$(OBJEXT)) SRCS = $(ASRCS) $(CSRCS) diff --git a/nuttx/configs/stm32f4discovery/src/up_watchdog.c b/nuttx/configs/stm32f4discovery/src/up_watchdog.c new file mode 100644 index 000000000..4bef40f78 --- /dev/null +++ b/nuttx/configs/stm32f4discovery/src/up_watchdog.c @@ -0,0 +1,136 @@ +/************************************************************************************ + * configs/stm32f4discovery/src/up_watchdog.c + * arch/arm/src/board/up_watchdog.c + * + * Copyright (C) 2012 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ************************************************************************************/ + +/************************************************************************************ + * Included Files + ************************************************************************************/ + +#include + +#include +#include + +#include +#include + +#include "stm32_wdg.h" + +#ifdef CONFIG_WATCHDOG + +/************************************************************************************ + * Definitions + ************************************************************************************/ +/* Configuration *******************************************************************/ +/* Wathdog hardware should be enabled */ + +#if !defined(CONFIG_STM32_WWDG) && !defined(CONFIG_STM32_IWDG) +# warning "One of CONFIG_STM32_WWDG or CONFIG_STM32_IWDG must be defined" +#endif + +/* Select the path to the registered watchdog timer device */ + +#ifndef CONFIG_STM32_WDG_DEVPATH +# ifdef CONFIG_EXAMPLES_WATCHDOG_DEVPATH +# define CONFIG_STM32_WDG_DEVPATH CONFIG_EXAMPLES_WATCHDOG_DEVPATH +# else +# define CONFIG_STM32_WDG_DEVPATH "/dev/watchdog0" +# endif +#endif + +/* Use the un-calibrated LSI frequency if we have nothing better */ + +#if defined(CONFIG_STM32_IWDG) && !defined(CONFIG_STM32_LSIFREQ) +# define CONFIG_STM32_LSIFREQ STM32_LSI_FREQUENCY +#endif + +/* Debug ***************************************************************************/ +/* Non-standard debug that may be enabled just for testing the watchdog timer */ + +#ifndef CONFIG_DEBUG +# undef CONFIG_DEBUG_WATCHDOG +#endif + +#ifdef CONFIG_DEBUG_WATCHDOG +# define wdgdbg dbg +# define wdglldbg lldbg +# ifdef CONFIG_DEBUG_VERBOSE +# define wdgvdbg vdbg +# define wdgllvdbg llvdbg +# else +# define wdgvdbg(x...) +# define wdgllvdbg(x...) +# endif +#else +# define wdgdbg(x...) +# define wdglldbg(x...) +# define wdgvdbg(x...) +# define wdgllvdbg(x...) +#endif + +/************************************************************************************ + * Private Functions + ************************************************************************************/ + +/************************************************************************************ + * Public Functions + ************************************************************************************/ + +/**************************************************************************** + * Name: up_wdginitialize() + * + * Description: + * Perform architecuture-specific initialization of the Watchdog hardware. + * This interface must be provided by all configurations using + * apps/examples/watchdog + * + ****************************************************************************/ + +int up_wdginitialize(void) +{ + /* Initialize tha register the watchdog timer device */ + +#if defined(CONFIG_STM32_WWDG) + stm32_wwdginitialize(CONFIG_STM32_WDG_DEVPATH); + return OK; +#elif defined(CONFIG_STM32_IWDG) + stm32_iwdginitialize(CONFIG_STM32_WDG_DEVPATH, CONFIG_STM32_LSIFREQ); + return OK; +#else + return -ENODEV; +#endif +} + +#endif /* CONFIG_WATCHDOG */ diff --git a/nuttx/drivers/watchdog.c b/nuttx/drivers/watchdog.c index 2f2f22ce6..d7ee30365 100644 --- a/nuttx/drivers/watchdog.c +++ b/nuttx/drivers/watchdog.c @@ -478,6 +478,7 @@ FAR void *watchdog_register(FAR const char *path, int ret; DEBUGASSERT(path && lower); + wdvdbg("Registering: %s\n", path); /* Allocate the upper-half data structure */ @@ -548,14 +549,14 @@ void watchdog_unregister(FAR void *handle) FAR struct watchdog_upperhalf_s *upper; FAR struct watchdog_lowerhalf_s *lower; - wdvdbg("cmd: %d arg: %ld\n", cmd, arg); - /* Recover the pointer to the upper-half driver state */ upper = (FAR struct watchdog_upperhalf_s *)handle; lower = upper->lower; DEBUGASSERT(upper && lower); + wdvdbg("Unregistering: %s\n", upper->path); + /* Disable the watchdog timer */ DEBUGASSERT(lower->ops->stop); /* Required */ diff --git a/nuttx/include/nuttx/watchdog.h b/nuttx/include/nuttx/watchdog.h index 83219caf2..2372b2411 100755 --- a/nuttx/include/nuttx/watchdog.h +++ b/nuttx/include/nuttx/watchdog.h @@ -41,6 +41,8 @@ ****************************************************************************/ #include +#include +#include #include #ifdef CONFIG_WATCHDOG