diff options
| author | marcoveeneman <marco-veeneman@hotmail.com> | 2016-05-02 15:53:26 +0200 | 
|---|---|---|
| committer | marcoveeneman <marco-veeneman@hotmail.com> | 2016-05-02 15:53:26 +0200 | 
| commit | fe1d3f21146b1d28bd281b3682a528042b80253c (patch) | |
| tree | 8fd76b61b15073d9ab1e776c753546e859f1c868 /os/hal | |
| parent | e6137bb7e44a3b75a51b70e82513c54d09cde595 (diff) | |
| parent | 99230d289cc3f1a42c3027240bcf71002d67cd72 (diff) | |
| download | ChibiOS-Contrib-fe1d3f21146b1d28bd281b3682a528042b80253c.tar.gz ChibiOS-Contrib-fe1d3f21146b1d28bd281b3682a528042b80253c.tar.bz2 ChibiOS-Contrib-fe1d3f21146b1d28bd281b3682a528042b80253c.zip | |
Merge pull request #55 from marcoveeneman/tiva-wdg-driver
Tiva WDG driver
Diffstat (limited to 'os/hal')
39 files changed, 479 insertions, 39 deletions
| diff --git a/os/hal/boards/TI_TM4C123G_LAUNCHPAD/board.c b/os/hal/boards/TI_TM4C123G_LAUNCHPAD/board.c index 9ba3993..2bbbc4c 100644 --- a/os/hal/boards/TI_TM4C123G_LAUNCHPAD/board.c +++ b/os/hal/boards/TI_TM4C123G_LAUNCHPAD/board.c @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/boards/TI_TM4C123G_LAUNCHPAD/board.h b/os/hal/boards/TI_TM4C123G_LAUNCHPAD/board.h index e8b7abd..367dce1 100644 --- a/os/hal/boards/TI_TM4C123G_LAUNCHPAD/board.h +++ b/os/hal/boards/TI_TM4C123G_LAUNCHPAD/board.h @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/boards/TI_TM4C1294_LAUNCHPAD/board.c b/os/hal/boards/TI_TM4C1294_LAUNCHPAD/board.c index cc801df..437dcf8 100644 --- a/os/hal/boards/TI_TM4C1294_LAUNCHPAD/board.c +++ b/os/hal/boards/TI_TM4C1294_LAUNCHPAD/board.c @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/boards/TI_TM4C1294_LAUNCHPAD/board.h b/os/hal/boards/TI_TM4C1294_LAUNCHPAD/board.h index 42a478a..08bb36f 100644 --- a/os/hal/boards/TI_TM4C1294_LAUNCHPAD/board.h +++ b/os/hal/boards/TI_TM4C1294_LAUNCHPAD/board.h @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/LLD/hal_ext_lld.c b/os/hal/ports/TIVA/LLD/hal_ext_lld.c index dc58d99..efe6421 100644 --- a/os/hal/ports/TIVA/LLD/hal_ext_lld.c +++ b/os/hal/ports/TIVA/LLD/hal_ext_lld.c @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/LLD/hal_ext_lld.h b/os/hal/ports/TIVA/LLD/hal_ext_lld.h index a75f167..08accb2 100644 --- a/os/hal/ports/TIVA/LLD/hal_ext_lld.h +++ b/os/hal/ports/TIVA/LLD/hal_ext_lld.h @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/LLD/hal_gpt_lld.c b/os/hal/ports/TIVA/LLD/hal_gpt_lld.c index c160687..86f2303 100644 --- a/os/hal/ports/TIVA/LLD/hal_gpt_lld.c +++ b/os/hal/ports/TIVA/LLD/hal_gpt_lld.c @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/LLD/hal_gpt_lld.h b/os/hal/ports/TIVA/LLD/hal_gpt_lld.h index b6f6667..e518e58 100644 --- a/os/hal/ports/TIVA/LLD/hal_gpt_lld.h +++ b/os/hal/ports/TIVA/LLD/hal_gpt_lld.h @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/LLD/hal_i2c_lld.c b/os/hal/ports/TIVA/LLD/hal_i2c_lld.c index f4c555b..5d80633 100644 --- a/os/hal/ports/TIVA/LLD/hal_i2c_lld.c +++ b/os/hal/ports/TIVA/LLD/hal_i2c_lld.c @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/LLD/hal_i2c_lld.h b/os/hal/ports/TIVA/LLD/hal_i2c_lld.h index d112867..460d231 100644 --- a/os/hal/ports/TIVA/LLD/hal_i2c_lld.h +++ b/os/hal/ports/TIVA/LLD/hal_i2c_lld.h @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/LLD/hal_mac_lld.c b/os/hal/ports/TIVA/LLD/hal_mac_lld.c index 3c6c739..04177b6 100644 --- a/os/hal/ports/TIVA/LLD/hal_mac_lld.c +++ b/os/hal/ports/TIVA/LLD/hal_mac_lld.c @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/LLD/hal_mac_lld.h b/os/hal/ports/TIVA/LLD/hal_mac_lld.h index 9d030d7..98036bb 100644 --- a/os/hal/ports/TIVA/LLD/hal_mac_lld.h +++ b/os/hal/ports/TIVA/LLD/hal_mac_lld.h @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/LLD/hal_pal_lld.c b/os/hal/ports/TIVA/LLD/hal_pal_lld.c index 50a9a82..5460fd4 100644 --- a/os/hal/ports/TIVA/LLD/hal_pal_lld.c +++ b/os/hal/ports/TIVA/LLD/hal_pal_lld.c @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/LLD/hal_pal_lld.h b/os/hal/ports/TIVA/LLD/hal_pal_lld.h index acde7e6..c0cd82b 100644 --- a/os/hal/ports/TIVA/LLD/hal_pal_lld.h +++ b/os/hal/ports/TIVA/LLD/hal_pal_lld.h @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/LLD/hal_pwm_lld.c b/os/hal/ports/TIVA/LLD/hal_pwm_lld.c index fdde9f8..b223a9c 100644 --- a/os/hal/ports/TIVA/LLD/hal_pwm_lld.c +++ b/os/hal/ports/TIVA/LLD/hal_pwm_lld.c @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/LLD/hal_pwm_lld.h b/os/hal/ports/TIVA/LLD/hal_pwm_lld.h index 374c563..ac64fe1 100644 --- a/os/hal/ports/TIVA/LLD/hal_pwm_lld.h +++ b/os/hal/ports/TIVA/LLD/hal_pwm_lld.h @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/LLD/hal_serial_lld.c b/os/hal/ports/TIVA/LLD/hal_serial_lld.c index 92761dc..bd1b81e 100644 --- a/os/hal/ports/TIVA/LLD/hal_serial_lld.c +++ b/os/hal/ports/TIVA/LLD/hal_serial_lld.c @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/LLD/hal_serial_lld.h b/os/hal/ports/TIVA/LLD/hal_serial_lld.h index 0301a5a..203ef6a 100644 --- a/os/hal/ports/TIVA/LLD/hal_serial_lld.h +++ b/os/hal/ports/TIVA/LLD/hal_serial_lld.h @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/LLD/hal_spi_lld.c b/os/hal/ports/TIVA/LLD/hal_spi_lld.c index cd1c3cf..ded2b99 100644 --- a/os/hal/ports/TIVA/LLD/hal_spi_lld.c +++ b/os/hal/ports/TIVA/LLD/hal_spi_lld.c @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/LLD/hal_spi_lld.h b/os/hal/ports/TIVA/LLD/hal_spi_lld.h index 810489a..2adc9ed 100644 --- a/os/hal/ports/TIVA/LLD/hal_spi_lld.h +++ b/os/hal/ports/TIVA/LLD/hal_spi_lld.h @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/LLD/hal_st_lld.c b/os/hal/ports/TIVA/LLD/hal_st_lld.c index 1109855..30fdb8a 100644 --- a/os/hal/ports/TIVA/LLD/hal_st_lld.c +++ b/os/hal/ports/TIVA/LLD/hal_st_lld.c @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/LLD/hal_st_lld.h b/os/hal/ports/TIVA/LLD/hal_st_lld.h index 61acbf0..35bf008 100644 --- a/os/hal/ports/TIVA/LLD/hal_st_lld.h +++ b/os/hal/ports/TIVA/LLD/hal_st_lld.h @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/LLD/hal_wdg_lld.c b/os/hal/ports/TIVA/LLD/hal_wdg_lld.c new file mode 100644 index 0000000..38dcef0 --- /dev/null +++ b/os/hal/ports/TIVA/LLD/hal_wdg_lld.c @@ -0,0 +1,244 @@ +/* +    Copyright (C) 2014..2016 Marco Veeneman + +    Licensed under the Apache License, Version 2.0 (the "License"); +    you may not use this file except in compliance with the License. +    You may obtain a copy of the License at + +        http://www.apache.org/licenses/LICENSE-2.0 + +    Unless required by applicable law or agreed to in writing, software +    distributed under the License is distributed on an "AS IS" BASIS, +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +    See the License for the specific language governing permissions and +    limitations under the License. +*/ + + +/** + * @file    TIVA/wdg_lld.c + * @brief   WDG Driver subsystem low level driver source. + * + * @addtogroup WDG + * @{ + */ + +#include "hal.h" + +#if HAL_USE_WDG || defined(__DOXYGEN__) + +/*===========================================================================*/ +/* Driver local definitions.                                                 */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported variables.                                                */ +/*===========================================================================*/ + +#if TIVA_WDG_USE_WDT0 || defined(__DOXYGEN__) +WDGDriver WDGD1; +#endif /* TIVA_WDG_USE_WDT0 */ + +#if TIVA_WDG_USE_WDT1 || defined(__DOXYGEN__) +WDGDriver WDGD2; +#endif /* TIVA_WDG_USE_WDT1 */ + +/*===========================================================================*/ +/* Driver local variables.                                                   */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver local functions.                                                   */ +/*===========================================================================*/ + +/** + * @brief   Shared IRQ handler. + * + * @param[in] wdgp      pointer to @p WDGDriver object. + */ +static void serve_interrupt(WDGDriver *wdgp) +{ +  uint32_t mis; + +  mis = wdgp->wdt->MIS; + +  if (mis & MIS_WDTMIS) { +    /* Invoke callback, if any */ +    if (wdgp->config->callback) { +      if (wdgp->config->callback(wdgp)) { +        /* Clear interrupt */ +        wdgp->wdt->ICR = 0; +        wdgTivaSyncWrite(wdgp); +      } +    } +  } +} + +/*===========================================================================*/ +/* Driver interrupt handlers.                                                */ +/*===========================================================================*/ + +#if TIVA_WDG_USE_WDT0 || TIVA_WDG_USE_WDT1 +/** + * @brief   WDT0/WDT1 interrupt handler. + * + * @isr + */ +OSAL_IRQ_HANDLER(TIVA_WDT_HANDLER) +{ +  OSAL_IRQ_PROLOGUE(); + +#if TIVA_WDG_USE_WDT0 +  serve_interrupt(&WDGD1); +#endif + +#if TIVA_WDG_USE_WDT1 +  serve_interrupt(&WDGD2); +#endif + +  OSAL_IRQ_EPILOGUE(); +} +#endif /* TIVA_WDG_USE_WDT0 || TIVA_WDG_USE_WDT1 */ + +/*===========================================================================*/ +/* Driver exported functions.                                                */ +/*===========================================================================*/ + +/** + * @brief   Low level WDG driver initialization. + * + * @notapi + */ +void wdg_lld_init(void) +{ +#if TIVA_WDG_USE_WDT0 +  WDGD1.state = WDG_STOP; +  WDGD1.wdt = WDT0; +#endif /* TIVA_WDG_USE_WDT0 */ + +#if TIVA_WDG_USE_WDT1 +  WDGD2.state = WDG_STOP; +  WDGD2.wdt = WDT1; +#endif /* TIVA_WDG_USE_WDT1 */ + +  /* The shared vector is initialized on driver initialization and never +     disabled because it is shared between the Watchdog Timers.*/ +  nvicEnableVector(TIVA_WDT_NUMBER, TIVA_WDG_WDT_IRQ_PRIORITY); +} + +/** + * @brief   Configures and activates the WDG peripheral. + * + * @param[in] wdgp      pointer to the @p WDGDriver object + * + * @notapi + */ +void wdg_lld_start(WDGDriver *wdgp) +{ +#if TIVA_WDG_USE_WDT0 +  if (&WDGD1 == wdgp) { +    SYSCTL->RCGCWD |= (1 << 0); + +    while (!(SYSCTL->PRWD & (1 << 0))) +      ; +  } +#endif /* TIVA_WDG_USE_WDT0 */ + +#if TIVA_WDG_USE_WDT1 +  if (&WDGD2 == wdgp) { +    SYSCTL->RCGCWD |= (1 << 1); + +    while (!(SYSCTL->PRWD & (1 << 1))) +      ; +  } +#endif /* TIVA_WDG_USE_WDT1 */ + +  wdgp->wdt->LOAD = wdgp->config->load; +  wdgTivaSyncWrite(wdgp); + +  wdgp->wdt->TEST = wdgp->config->test; +  wdgTivaSyncWrite(wdgp); + +  wdgp->wdt->CTL |= CTL_RESEN; +  wdgTivaSyncWrite(wdgp); + +  wdgp->wdt->CTL |= CTL_INTEN; +  wdgTivaSyncWrite(wdgp); +} + +/** + * @brief   Deactivates the WDG peripheral. + * + * @param[in] wdgp      pointer to the @p WDGDriver object + * + * @api + */ +void wdg_lld_stop(WDGDriver *wdgp) +{ +#if TIVA_WDG_USE_WDT0 +  if (&WDGD1 == wdgp) { +    SYSCTL->SRWD |= (1 << 0); +    SYSCTL->SRWD &= ~(1 << 0); +  } +#endif /* TIVA_WDG_USE_WDT0 */ + +#if TIVA_WDG_USE_WDT1 +  if (&WDGD2 == wdgp) { +    SYSCTL->SRWD |= (1 << 1); +    SYSCTL->SRWD &= ~(1 << 1); +  } +#endif /* TIVA_WDG_USE_WDT1 */ +} + +/** + * @brief   Reloads WDG's counter. + * + * @param[in] wdgp      pointer to the @p WDGDriver object + * + * @notapi + */ +void wdg_lld_reset(WDGDriver *wdgp) +{ +#if defined(TM4C123_USE_REVISION_6_FIX) || defined(TM4C123_USE_REVISION_7_FIX) + +#if TIVA_WDG_USE_WDT1 +  if (&WDGD2 == wdgp) { +    /* Number:      WDT#02 +     * Description: Periodically reloading the count value into the Watchdog +     *              Timer Load (WDTLOAD) register of the Watchdog Timer 1 +     *              module will not restart the count, as specified in the data +     *              sheet. +     * Workaround:  Disable the Watchdog Timer 1 module by setting the +     *              appropriate bit in the Watchdog Timer Software Reset (SRWD) +     *              register before reprogramming the counter.*/ +    wdg_lld_stop(wdgp); +    wdg_lld_start(wdgp); +    return; +  } +#endif /* TIVA_WDG_USE_WDT1 */ + +#endif /* defined(TM4C123_USE_REVISION_6_FIX) || +          defined(TM4C123_USE_REVISION_7_FIX) */ +  wdgp->wdt->LOAD = wdgp->config->load; +  wdgTivaSyncWrite(wdgp); +} + +#endif /* HAL_USE_WDG */ + +#if TIVA_WDG_USE_WDT1 +/** + * @brief   synchronize after a write to a watchdog register. + * + * @param[in] wdgp      pointer to the @p WDGDriver object. + */ +void wdgTivaSyncWrite(WDGDriver *wdgp) +{ +  if (&WDGD2 == wdgp) { +    while (!(wdgp->wdt->CTL & CTL_WRC)) { +      ; +    } +  } +} +#endif /* TIVA_WDG_USE_WDT1 */ + +/** @} */ diff --git a/os/hal/ports/TIVA/LLD/hal_wdg_lld.h b/os/hal/ports/TIVA/LLD/hal_wdg_lld.h new file mode 100644 index 0000000..f88fa26 --- /dev/null +++ b/os/hal/ports/TIVA/LLD/hal_wdg_lld.h @@ -0,0 +1,190 @@ +/* +    Copyright (C) 2014..2016 Marco Veeneman + +    Licensed under the Apache License, Version 2.0 (the "License"); +    you may not use this file except in compliance with the License. +    You may obtain a copy of the License at + +        http://www.apache.org/licenses/LICENSE-2.0 + +    Unless required by applicable law or agreed to in writing, software +    distributed under the License is distributed on an "AS IS" BASIS, +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +    See the License for the specific language governing permissions and +    limitations under the License. +*/ + + +/** + * @file    TIVA/wdg_lld.h + * @brief   WDG Driver subsystem low level driver header. + * + * @addtogroup WDG + * @{ + */ + +#ifndef _WDG_LLD_H_ +#define _WDG_LLD_H_ + +#if HAL_USE_WDG || defined(__DOXYGEN__) + +/*===========================================================================*/ +/* Driver constants.                                                         */ +/*===========================================================================*/ + +#define LOCK_UNLOCK        0x1ACCE551U +#define LOCK_LOCK          0x00000000U + +#define LOCK_IS_UNLOCKED   0U +#define LOCK_IS_LOCKED     1U + +#define TEST_STALL         (1 << 8) + +#define MIS_WDTMIS         (1 << 0) +#define RIS_WDTRIS         (1 << 0) +#define ICR_WDTICR         (1 << 0) + +#define CTL_INTEN          (1 << 0) +#define CTL_RESEN          (1 << 1) +#define CTL_INTTYPE        (1 << 2) +#define CTL_WRC            (1 << 31) + +/*===========================================================================*/ +/* Driver pre-compile time settings.                                         */ +/*===========================================================================*/ + +/** + * @name    Configuration options + * @{ + */ +/** + * @brief   WDT driver enable switch. + * @details If set to @p TRUE the support for WDT is included. + * @note    The default is @p FALSE. + */ +#if !defined(TIVA_WDG_USE_WDT) || defined(__DOXYGEN__) +#define TIVA_WDG_USE_WDT                  FALSE +#endif + +/** + * @brief   WDT interrupt priority level setting. + */ +#if !defined(TIVA_WDG_WDT_IRQ_PRIORITY) || defined(__DOXYGEN__) +#define TIVA_WDG_WDT_IRQ_PRIORITY          5 +#endif + +/** @} */ + +/*===========================================================================*/ +/* Derived constants and error checks.                                       */ +/*===========================================================================*/ + +#if TIVA_WDG_USE_WDT0 && !TIVA_HAS_WDT0 +#error "WDT0 not present in the selected device" +#endif + +#if TIVA_WDG_USE_WDT1 && !TIVA_HAS_WDT1 +#error "WDT1 not present in the selected device" +#endif + +#if !TIVA_WDG_USE_WDT0 && !TIVA_WDG_USE_WDT1 +#error "WDG driver activated but no WDT peripheral assigned" +#endif + +/*===========================================================================*/ +/* Driver data structures and types.                                         */ +/*===========================================================================*/ + +/** + * @brief   Type of a structure representing an WDG driver. + */ +typedef struct WDGDriver WDGDriver; + +/** + * @brief   WDG timeout callback type. + * + * @param[in] wdgp      pointer to the @p WDGDriver object triggering the callback. + */ +typedef bool (*wdgcallback_t)(WDGDriver *wdgp); + +/** + * @brief   Driver configuration structure. + * @note    It could be empty on some architectures. + */ +typedef struct +{ +  /** +   * @brief   Interval value used by the WDT. +   */ +  uint32_t                  load; +  /** +   * @brief   Timeout callback pointer. +   * @note    This callback is invoked on the first WDT timeout. If set to +   *          @p NULL then the callback is disabled. +   */ +   wdgcallback_t            callback; +   /** +    * @brief   Test register configuration value. +    */ +   uint16_t                 test; +} WDGConfig; + +/** + * @brief   Structure representing an WDG driver. + */ +struct WDGDriver +{ +  /** +   * @brief   Driver state. +   */ +  wdgstate_t                state; +  /** +   * @brief   Current configuration data. +   */ +  const WDGConfig           *config; +  /* End of the mandatory fields.*/ +  /** +   * @brief   Pointer to the WDT registers block. +   */ +  WDT_TypeDef               *wdt; +}; + +/*===========================================================================*/ +/* Driver macros.                                                            */ +/*===========================================================================*/ + +#if !TIVA_WDG_USE_WDT1 +#define wdgTivaSyncWrite(wdt) +#endif + +/*===========================================================================*/ +/* External declarations.                                                    */ +/*===========================================================================*/ + +#if TIVA_WDG_USE_WDT0 && !defined(__DOXYGEN__) +extern WDGDriver WDGD1; +#endif + +#if TIVA_WDG_USE_WDT1 && !defined(__DOXYGEN__) +extern WDGDriver WDGD2; +#endif + +#ifdef __cplusplus +extern "C" { +#endif +  void wdg_lld_init(void); +  void wdg_lld_start(WDGDriver *wdgp); +  void wdg_lld_stop(WDGDriver *wdgp); +  void wdg_lld_reset(WDGDriver *wdgp); +#if TIVA_WDG_USE_WDT1 +  void wdgTivaSyncWrite(WDGDriver *wdgp); +#endif +#ifdef __cplusplus +} +#endif + +#endif /* HAL_USE_WDG */ + +#endif /* _WDG_LLD_H_ */ + +/** @} */ diff --git a/os/hal/ports/TIVA/LLD/tiva_gpt.h b/os/hal/ports/TIVA/LLD/tiva_gpt.h index 0644724..114831b 100644 --- a/os/hal/ports/TIVA/LLD/tiva_gpt.h +++ b/os/hal/ports/TIVA/LLD/tiva_gpt.h @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/LLD/tiva_udma.c b/os/hal/ports/TIVA/LLD/tiva_udma.c index e4f210e..9f122b2 100644 --- a/os/hal/ports/TIVA/LLD/tiva_udma.c +++ b/os/hal/ports/TIVA/LLD/tiva_udma.c @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/LLD/tiva_udma.h b/os/hal/ports/TIVA/LLD/tiva_udma.h index 2581c90..6479b08 100644 --- a/os/hal/ports/TIVA/LLD/tiva_udma.h +++ b/os/hal/ports/TIVA/LLD/tiva_udma.h @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/TM4C123x/hal_lld.c b/os/hal/ports/TIVA/TM4C123x/hal_lld.c index f259151..ddcddb3 100644 --- a/os/hal/ports/TIVA/TM4C123x/hal_lld.c +++ b/os/hal/ports/TIVA/TM4C123x/hal_lld.c @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/TM4C123x/hal_lld.h b/os/hal/ports/TIVA/TM4C123x/hal_lld.h index ea8fc79..ec81806 100644 --- a/os/hal/ports/TIVA/TM4C123x/hal_lld.h +++ b/os/hal/ports/TIVA/TM4C123x/hal_lld.h @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/TM4C123x/platform.mk b/os/hal/ports/TIVA/TM4C123x/platform.mk index 1b8d9ac..0abafcc 100644 --- a/os/hal/ports/TIVA/TM4C123x/platform.mk +++ b/os/hal/ports/TIVA/TM4C123x/platform.mk @@ -9,7 +9,8 @@ PLATFORMSRC = ${CHIBIOS}/os/hal/ports/common/ARMCMx/nvic.c \                ${CHIBIOS_CONTRIB}/os/hal/ports/TIVA/LLD/hal_pwm_lld.c \                ${CHIBIOS_CONTRIB}/os/hal/ports/TIVA/LLD/hal_spi_lld.c \                ${CHIBIOS_CONTRIB}/os/hal/ports/TIVA/LLD/tiva_udma.c \ -              ${CHIBIOS_CONTRIB}/os/hal/ports/TIVA/LLD/hal_ext_lld.c +              ${CHIBIOS_CONTRIB}/os/hal/ports/TIVA/LLD/hal_ext_lld.c \ +              ${CHIBIOS_CONTRIB}/os/hal/ports/TIVA/LLD/hal_wdg_lld.c  # Required include directories  PLATFORMINC = ${CHIBIOS}/os/hal/ports/common/ARMCMx \ diff --git a/os/hal/ports/TIVA/TM4C123x/tiva_isr.h b/os/hal/ports/TIVA/TM4C123x/tiva_isr.h index d640e07..b380e46 100644 --- a/os/hal/ports/TIVA/TM4C123x/tiva_isr.h +++ b/os/hal/ports/TIVA/TM4C123x/tiva_isr.h @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/TM4C123x/tiva_registry.h b/os/hal/ports/TIVA/TM4C123x/tiva_registry.h index 04786e0..ac7a1d2 100644 --- a/os/hal/ports/TIVA/TM4C123x/tiva_registry.h +++ b/os/hal/ports/TIVA/TM4C123x/tiva_registry.h @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/TM4C123x/tm4c123x.h b/os/hal/ports/TIVA/TM4C123x/tm4c123x.h index b3444e9..d64afa8 100644 --- a/os/hal/ports/TIVA/TM4C123x/tm4c123x.h +++ b/os/hal/ports/TIVA/TM4C123x/tm4c123x.h @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. @@ -779,7 +779,7 @@ typedef struct    __IO uint32_t TEST;           /**< Test                                    */    __I  uint32_t _RESERVED1[505];/**< Reserved                                */    __IO uint32_t LOCK;           /**< Lock                                    */ -} WATCHDOG_TypeDef; +} WDT_TypeDef;  /**   * @} @@ -912,6 +912,8 @@ typedef struct  #define WGPT3           ((GPT_TypeDef *)    WGPT3_BASE)  #define WGPT4           ((GPT_TypeDef *)    WGPT4_BASE)  #define WGPT5           ((GPT_TypeDef *)    WGPT5_BASE) +#define WDT0            ((WDT_TypeDef *)    WDT0_BASE) +#define WDT1            ((WDT_TypeDef *)    WDT1_BASE)  #define ADC0            ((ADC_TypeDef*)     ADC0_BASE)  #define ADC1            ((ADC_TypeDef*)     ADC1_BASE)  #define UART0           ((UART_TypeDef *)   UART0_BASE) diff --git a/os/hal/ports/TIVA/TM4C129x/hal_lld.c b/os/hal/ports/TIVA/TM4C129x/hal_lld.c index 4f2a968..60d6763 100644 --- a/os/hal/ports/TIVA/TM4C129x/hal_lld.c +++ b/os/hal/ports/TIVA/TM4C129x/hal_lld.c @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/TM4C129x/hal_lld.h b/os/hal/ports/TIVA/TM4C129x/hal_lld.h index 9a8f690..e5c667d 100644 --- a/os/hal/ports/TIVA/TM4C129x/hal_lld.h +++ b/os/hal/ports/TIVA/TM4C129x/hal_lld.h @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/TM4C129x/platform.mk b/os/hal/ports/TIVA/TM4C129x/platform.mk index 6f0c0df..b8363f3 100644 --- a/os/hal/ports/TIVA/TM4C129x/platform.mk +++ b/os/hal/ports/TIVA/TM4C129x/platform.mk @@ -5,7 +5,8 @@ PLATFORMSRC = ${CHIBIOS}/os/hal/ports/common/ARMCMx/nvic.c \                ${CHIBIOS_CONTRIB}/os/hal/ports/TIVA/LLD/hal_pal_lld.c \                ${CHIBIOS_CONTRIB}/os/hal/ports/TIVA/LLD/hal_serial_lld.c \                ${CHIBIOS_CONTRIB}/os/hal/ports/TIVA/LLD/hal_mac_lld.c \ -              ${CHIBIOS_CONTRIB}/os/hal/ports/TIVA/LLD/hal_ext_lld.c +              ${CHIBIOS_CONTRIB}/os/hal/ports/TIVA/LLD/hal_ext_lld.c \ +              ${CHIBIOS_CONTRIB}/os/hal/ports/TIVA/LLD/hal_wdg_lld.c  # Required include directories  PLATFORMINC = ${CHIBIOS}/os/hal/ports/common/ARMCMx \ diff --git a/os/hal/ports/TIVA/TM4C129x/tiva_isr.h b/os/hal/ports/TIVA/TM4C129x/tiva_isr.h index b995c4f..255bfd6 100644 --- a/os/hal/ports/TIVA/TM4C129x/tiva_isr.h +++ b/os/hal/ports/TIVA/TM4C129x/tiva_isr.h @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/TM4C129x/tiva_registry.h b/os/hal/ports/TIVA/TM4C129x/tiva_registry.h index e38ee51..5815351 100644 --- a/os/hal/ports/TIVA/TM4C129x/tiva_registry.h +++ b/os/hal/ports/TIVA/TM4C129x/tiva_registry.h @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. diff --git a/os/hal/ports/TIVA/TM4C129x/tm4c129x.h b/os/hal/ports/TIVA/TM4C129x/tm4c129x.h index 462a14f..5a5f4f2 100644 --- a/os/hal/ports/TIVA/TM4C129x/tm4c129x.h +++ b/os/hal/ports/TIVA/TM4C129x/tm4c129x.h @@ -1,5 +1,5 @@  /* -    Copyright (C) 2014 Marco Veeneman +    Copyright (C) 2014..2016 Marco Veeneman      Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License. @@ -862,7 +862,7 @@ typedef struct    __IO uint32_t TEST;           /**< Test                                    */    __I  uint32_t _RESERVED1[505];/**< Reserved                                */    __IO uint32_t LOCK;           /**< Lock                                    */ -} WATCHDOG_TypeDef; +} WDG_TypeDef;  /**   * @brief   Ethernet peripheral @@ -1080,6 +1080,8 @@ typedef struct {  #define GPT5    ((GPT_TypeDef *)    GPT5_BASE)  #define GPT6    ((GPT_TypeDef *)    GPT6_BASE)  #define GPT7    ((GPT_TypeDef *)    GPT7_BASE) +#define WDT0    ((WDT_TypeDef *)    WDT0_BASE) +#define WDT1    ((WDT_TypeDef *)    WDT1_BASE)  #define ADC0    ((ADC_TypeDef*)     ADC0_BASE)  #define ADC1    ((ADC_TypeDef*)     ADC1_BASE)  #define UART0   ((UART_TypeDef *)   UART0_BASE) | 
