Boen_Shi 8be2866433 feat(base): 初始化 MSPM0 开发环境
- 添加头文件和配置文件支持
- 更新.gitignore忽略编译和IDE相关文件
- 添加基础的bsp代码
2026-07-16 14:45:26 +08:00

617 lines
20 KiB
C

/*
* Copyright (c) 2020, Texas Instruments Incorporated
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * 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.
*
* * Neither the name of Texas Instruments Incorporated 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.
*/
/*!****************************************************************************
* @file dl_wwdt.h
* @brief Window Watchdog Timer (WWDT) Driver Library
* @defgroup WWDT Window Watchdog Timer (WWDT)
*
* @anchor ti_dl_dl_wwdt_Overview
* # Overview
*
* The Window Watchdog Timer Driver Library allows full configuration of
* the MSPM0 WWDT module.
* The window watchdog timer (WWDT) supervises code execution.
* If the application software does not successfully reset the window
* watchdog within the programmed open time window, the window watchdog
* generates a SYSRST.
*
* <hr>
******************************************************************************
*/
/** @addtogroup WWDT
* @{
*/
#ifndef ti_dl_dl_wwdt__include
#define ti_dl_dl_wwdt__include
#include <stdbool.h>
#include <stdint.h>
#include <ti/devices/msp/msp.h>
#ifdef __MSPM0_HAS_WWDT__
#ifdef __cplusplus
extern "C" {
#endif
/* clang-format off */
/*! @enum DL_WWDT_CLOCK_DIVIDE */
typedef enum {
/*! Clock source divide by 1 */
DL_WWDT_CLOCK_DIVIDE_1 = 0x00000000,
/*! Clock source divide by 2 */
DL_WWDT_CLOCK_DIVIDE_2 = 0x00000001,
/*! Clock source divide by 3 */
DL_WWDT_CLOCK_DIVIDE_3 = 0x00000002,
/*! Clock source divide by 4 */
DL_WWDT_CLOCK_DIVIDE_4 = 0x00000003,
/*! Clock source divide by 5 */
DL_WWDT_CLOCK_DIVIDE_5 = 0x00000004,
/*! Clock source divide by 6 */
DL_WWDT_CLOCK_DIVIDE_6 = 0x00000005,
/*! Clock source divide by 7 */
DL_WWDT_CLOCK_DIVIDE_7 = 0x00000006,
/*! Clock source divide by 8 */
DL_WWDT_CLOCK_DIVIDE_8 = 0x00000007
} DL_WWDT_CLOCK_DIVIDE;
/*! @enum DL_WWDT_WINDOW */
typedef enum {
/*! Window 0 active */
DL_WWDT_WINDOW0 = WWDT_WWDTCTL1_WINSEL_WIN0,
/*! Window 1 active */
DL_WWDT_WINDOW1 = WWDT_WWDTCTL1_WINSEL_WIN1
} DL_WWDT_WINDOW;
/*! @enum DL_WWDT_WINDOW_PERIOD */
typedef enum {
/*! 0% closed window period */
DL_WWDT_WINDOW_PERIOD_0 = WWDT_WWDTCTL0_WINDOW0_SIZE_0,
/*! 12% closed window period */
DL_WWDT_WINDOW_PERIOD_12 = WWDT_WWDTCTL0_WINDOW0_SIZE_12,
/*! 18% closed window period */
DL_WWDT_WINDOW_PERIOD_18 = WWDT_WWDTCTL0_WINDOW0_SIZE_18,
/*! 25% closed window period */
DL_WWDT_WINDOW_PERIOD_25 = WWDT_WWDTCTL0_WINDOW0_SIZE_25,
/*! 50% closed window period */
DL_WWDT_WINDOW_PERIOD_50 = WWDT_WWDTCTL0_WINDOW0_SIZE_50,
/*! 75% closed window period */
DL_WWDT_WINDOW_PERIOD_75 = WWDT_WWDTCTL0_WINDOW0_SIZE_75,
/*! 81% closed window period */
DL_WWDT_WINDOW_PERIOD_81 = WWDT_WWDTCTL0_WINDOW0_SIZE_81,
/*! 87% closed window period */
DL_WWDT_WINDOW_PERIOD_87 = WWDT_WWDTCTL0_WINDOW0_SIZE_87
} DL_WWDT_WINDOW_PERIOD;
/*! @enum DL_WWDT_TIMER_PERIOD */
typedef enum {
/*! 2^6 timer period count */
DL_WWDT_TIMER_PERIOD_6_BITS = WWDT_WWDTCTL0_PER_EN_6,
/*! 2^8 timer period count */
DL_WWDT_TIMER_PERIOD_8_BITS = WWDT_WWDTCTL0_PER_EN_8,
/*! 2^10 timer period count */
DL_WWDT_TIMER_PERIOD_10_BITS = WWDT_WWDTCTL0_PER_EN_10,
/*! 2^12 timer period count */
DL_WWDT_TIMER_PERIOD_12_BITS = WWDT_WWDTCTL0_PER_EN_12,
/*! 2^15 timer period count */
DL_WWDT_TIMER_PERIOD_15_BITS = WWDT_WWDTCTL0_PER_EN_15,
/*! 2^18 timer period count */
DL_WWDT_TIMER_PERIOD_18_BITS = WWDT_WWDTCTL0_PER_EN_18,
/*! 2^21 timer period count */
DL_WWDT_TIMER_PERIOD_21_BITS = WWDT_WWDTCTL0_PER_EN_21,
/*! 2^25 timer period count */
DL_WWDT_TIMER_PERIOD_25_BITS = WWDT_WWDTCTL0_PER_EN_25
} DL_WWDT_TIMER_PERIOD;
/*! @enum DL_WWDT_SLEEP_MODE */
typedef enum {
/*! Stop the watchdog while in sleep */
DL_WWDT_STOP_IN_SLEEP = WWDT_WWDTCTL0_STISM_STOP,
/*! Keep the watchdog running in sleep */
DL_WWDT_RUN_IN_SLEEP = WWDT_WWDTCTL0_STISM_CONT
} DL_WWDT_SLEEP_MODE;
/*! @enum DL_WWDT_MODE */
typedef enum {
/*! The watchdog is in watchdog mode */
DL_WWDT_WATCHDOG_MODE = 0x0,
/*! The watchdog is in interval timer mode */
DL_WWDT_INTERVAL_TIMER_MODE = WWDT_WWDTCTL0_MODE_INTERVAL
} DL_WWDT_MODE;
/*! @enum DL_WWDT_IIDX */
typedef enum {
/*! Interrupt index for WWDT if no interrupt is pending */
DL_WWDT_IIDX_NO_INT = WWDT_IIDX_STAT_NO_INTR,
/*! WWDT interrupt index for interval timer */
DL_WWDT_IIDX_INTERVAL_TIMER = WWDT_IIDX_STAT_INTTIM
} DL_WWDT_IIDX;
/*! @enum DL_WWDT_CORE_HALT */
typedef enum {
/*! WWDT will halt with core */
DL_WWDT_CORE_HALT_STOP = WWDT_PDBGCTL_FREE_STOP,
/*! WWDT ignores the state of the core halted input */
DL_WWDT_CORE_HALT_FREE_RUN = WWDT_PDBGCTL_FREE_RUN,
} DL_WWDT_CORE_HALT;
/* clang-format on */
/*!
* @brief Initializes the Window Watchdog Timer in watchdog mode
*
* While in watchdog mode, the Window Watchdog Timer must be serviced
* periodically or the device will be reset. After calling this initialization
* API the watchdog will automatically start running with whatever window is
* currently selected. See @ref DL_WWDT_setActiveWindow for setting the active
* window, this is typically window 0 upon startup.
*
* Once running, the watchdog will need to be restarted periodically with @ref
* DL_WWDT_restart.
*
* The watchdog can only be initialized once, so this API can only be called
* once, and you may not later call @ref DL_WWDT_initIntervalTimerMode.
*
* @param[in] wwdt Pointer to the register overlay for
* peripheral
* @param[in] divider Clock divider for the timer. One of @ref
* DL_WWDT_CLOCK_DIVIDE.
* @param[in] period Period for the timer. One of @ref
* DL_WWDT_TIMER_PERIOD.
* @param[in] sleepMode Enable/disable the timer running in sleep
* mode. One of @ref DL_WWDT_SLEEP_MODE.
* @param[in] window0ClosedPeriod The percentage of the total period that
* reset window 0 should be closed. One of
* @ref DL_WWDT_WINDOW_PERIOD.
* @param[in] window1ClosedPeriod The percentage of the total period that
* reset window 1 should be closed. One of
* @ref DL_WWDT_WINDOW_PERIOD.
*
* @sa DL_WWDT_initIntervalTimerMode
* @sa DL_WWDT_setActiveWindow
* @sa DL_WWDT_restart
*
*/
__STATIC_INLINE void DL_WWDT_initWatchdogMode(WWDT_Regs *wwdt,
DL_WWDT_CLOCK_DIVIDE divider, DL_WWDT_TIMER_PERIOD period,
DL_WWDT_SLEEP_MODE sleepMode, DL_WWDT_WINDOW_PERIOD window0ClosedPeriod,
DL_WWDT_WINDOW_PERIOD window1ClosedPeriod)
{
/* Window1 is shifted because the #defines used as an input are shared
between window 0 and window 1 */
wwdt->WWDTCTL0 =
(WWDT_WWDTCTL0_KEY_UNLOCK_W | (uint32_t) divider | (uint32_t) period |
(uint32_t) sleepMode | (uint32_t) window0ClosedPeriod |
((uint32_t) window1ClosedPeriod << 4));
}
/*!
* @brief Initializes the Window Watchdog Timer in interval timer mode
*
* The Window Watchdog Timer can be used as a simple interval timer if you do
* not need watchdog/reset functionality. After calling this initialization
* API the timer will automatically start running and start interrupting
* periodically.
*
* The WWDT can only be initialized once, so this API can only be called once,
* and you may not later call @ref DL_WWDT_initWatchdogMode.
*
* @param[in] wwdt Pointer to the register overlay for peripheral
* @param[in] divider Clock divider for the timer. One of
* @ref DL_WWDT_CLOCK_DIVIDE.
* @param[in] period Period for the timer. One of @ref
* DL_WWDT_TIMER_PERIOD.
* @param[in] sleepMode Enable/disable the timer running in sleep mode. One
* of @ref DL_WWDT_SLEEP_MODE.
*
* @sa DL_WWDT_initWatchdogMode
*/
__STATIC_INLINE void DL_WWDT_initIntervalTimerMode(WWDT_Regs *wwdt,
DL_WWDT_CLOCK_DIVIDE divider, DL_WWDT_TIMER_PERIOD period,
DL_WWDT_SLEEP_MODE sleepMode)
{
wwdt->WWDTCTL0 =
(WWDT_WWDTCTL0_KEY_UNLOCK_W | (uint32_t) divider | (uint32_t) period |
(uint32_t) sleepMode | WWDT_WWDTCTL0_MODE_INTERVAL);
}
/**
* @brief Enables the Peripheral Write Enable (PWREN) register for the WWDT
*
* Before any peripheral registers can be configured by software, the
* peripheral itself must be enabled by writing the ENABLE bit together with
* the appropriate KEY value to the peripheral's PWREN register.
*
* @param wwdt Pointer to the register overlay for the peripheral
*/
__STATIC_INLINE void DL_WWDT_enablePower(WWDT_Regs *wwdt)
{
wwdt->GPRCM.PWREN = (WWDT_PWREN_KEY_UNLOCK_W | WWDT_PWREN_ENABLE_ENABLE);
}
/**
* @brief Disables the Peripheral Write Enable (PWREN) register for the WWDT
*
* When the PWREN.ENABLE bit is cleared, the peripheral's registers are not
* accessible for read/write operations.
*
* @note This API does not provide large power savings.
*
* @param wwdt Pointer to the register overlay for the peripheral
*/
__STATIC_INLINE void DL_WWDT_disablePower(WWDT_Regs *wwdt)
{
wwdt->GPRCM.PWREN = (WWDT_PWREN_KEY_UNLOCK_W | WWDT_PWREN_ENABLE_DISABLE);
}
/**
* @brief Returns if the Peripheral Write Enable (PWREN) register for the WWDT
* is enabled
*
* Before any peripheral registers can be configured by software, the
* peripheral itself must be enabled by writing the ENABLE bit together with
* the appropriate KEY value to the peripheral's PWREN register.
*
* When the PWREN.ENABLE bit is cleared, the peripheral's registers are not
* accessible for read/write operations.
*
* @param wwdt Pointer to the register overlay for the peripheral
*
* @return true if peripheral register access is enabled
* @return false if peripheral register access is disabled
*/
__STATIC_INLINE bool DL_WWDT_isPowerEnabled(WWDT_Regs *wwdt)
{
return ((wwdt->GPRCM.PWREN & WWDT_PWREN_ENABLE_MASK) ==
WWDT_PWREN_ENABLE_ENABLE);
}
/**
* @brief Resets wwdt peripheral
*
* @param wwdt Pointer to the register overlay for the peripheral
*/
__STATIC_INLINE void DL_WWDT_reset(WWDT_Regs *wwdt)
{
wwdt->GPRCM.RSTCTL =
(WWDT_RSTCTL_KEY_UNLOCK_W | WWDT_RSTCTL_RESETSTKYCLR_CLR |
WWDT_RSTCTL_RESETASSERT_ASSERT);
}
/**
* @brief Returns if wwdt peripheral was reset
*
* @param wwdt Pointer to the register overlay for the peripheral
*
* @return true if peripheral was reset
* @return false if peripheral wasn't reset
*
*/
__STATIC_INLINE bool DL_WWDT_isReset(WWDT_Regs *wwdt)
{
return ((wwdt->GPRCM.STAT & WWDT_STAT_RESETSTKY_MASK) ==
WWDT_STAT_RESETSTKY_RESET);
}
/*!
* @brief Restarts the Window Watchdog
*
* When the Window Watchdog Timer is in watchdog mode it must be periodically
* serviced to avoid a hardware reset. This API must be called after the
* closed window of the watchdog has passed but before the watchdog resets the
* device.
*
* @param[in] wwdt Pointer to the register overlay for peripheral
*/
__STATIC_INLINE void DL_WWDT_restart(WWDT_Regs *wwdt)
{
wwdt->WWDTCNTRST = 0x00A7;
}
/*!
* @brief Checks if the Window Watchdog Timer is actively running
*
* @param[in] wwdt Pointer to the register overlay for peripheral
*
* @return Returns the running status of the Window Watchdog Timer
*
* @retval true The Window Watchdog Timer is running
* @retval false The Window Watchdog Timer is not running
*/
__STATIC_INLINE bool DL_WWDT_isRunning(WWDT_Regs *wwdt)
{
return (wwdt->WWDTSTAT == WWDT_WWDTSTAT_RUN_ON);
}
/*!
* @brief Set the active window being used
*
* The Window Watchdog Timer module allows you to switch between two different
* configured windows. This allows you to configure the watchdog with two
* different window sizes and switch between them during your application.
*
* @param[in] wwdt Pointer to the register overlay for peripheral
* @param[in] window The window to set as active. One of @ref
* DL_WWDT_WINDOW.
*
*/
__STATIC_INLINE void DL_WWDT_setActiveWindow(
WWDT_Regs *wwdt, DL_WWDT_WINDOW window)
{
wwdt->WWDTCTL1 = (WWDT_WWDTCTL1_KEY_UNLOCK_W | (uint32_t) window);
}
/*!
* @brief Get the active window being used
*
* @param[in] wwdt Pointer to the register overlay for peripheral
*
* @return The active window being used
*
* @retval One of @ref DL_WWDT_WINDOW
*/
__STATIC_INLINE DL_WWDT_WINDOW DL_WWDT_getActiveWindow(WWDT_Regs *wwdt)
{
uint32_t window = (wwdt->WWDTCTL1 & WWDT_WWDTCTL1_WINSEL_MASK);
return (DL_WWDT_WINDOW)(window);
}
/*!
* @brief Get the sleep mode being used
*
* @param[in] wwdt Pointer to the register overlay for peripheral
*
* @return The current sleep mode
*
* @retval One of @ref DL_WWDT_SLEEP_MODE
*/
__STATIC_INLINE DL_WWDT_SLEEP_MODE DL_WWDT_getSleepMode(WWDT_Regs *wwdt)
{
uint32_t mode = (wwdt->WWDTCTL0 & WWDT_WWDTCTL0_STISM_MASK);
return (DL_WWDT_SLEEP_MODE)(mode);
}
/*!
* @brief Get the mode the watchdog is running in
*
* @param[in] wwdt Pointer to the register overlay for peripheral
*
* @return The current mode the watchdog is running in
*
* @retval One of @ref DL_WWDT_MODE
*/
__STATIC_INLINE DL_WWDT_MODE DL_WWDT_getMode(WWDT_Regs *wwdt)
{
uint32_t mode = (wwdt->WWDTCTL0 & WWDT_WWDTCTL0_MODE_MASK);
return (DL_WWDT_MODE)(mode);
}
/*!
* @brief Get the window closed percentage for a watchdog window
*
* @param[in] wwdt Pointer to the register overlay for peripheral
* @param[in] window The window to get the closed window percentage of. One
* of @ref DL_WWDT_WINDOW.
*
* @return The desired window's closed percentage
*
* @retval One of @ref DL_WWDT_WINDOW_PERIOD
*/
__STATIC_INLINE DL_WWDT_WINDOW_PERIOD DL_WWDT_getWindowPeriod(
WWDT_Regs *wwdt, DL_WWDT_WINDOW window)
{
uint32_t period;
if (window == DL_WWDT_WINDOW0) {
period = (wwdt->WWDTCTL0 & WWDT_WWDTCTL0_WINDOW0_MASK);
} else {
period = ((wwdt->WWDTCTL0 & WWDT_WWDTCTL0_WINDOW1_MASK) >> 4);
}
return (DL_WWDT_WINDOW_PERIOD)(period);
}
/*!
* @brief Get the timer period for the watchdog
*
* @param[in] wwdt Pointer to the register overlay for peripheral
*
* @return The current timer period for the watchdog
*
* @retval One of @ref DL_WWDT_TIMER_PERIOD
*/
__STATIC_INLINE DL_WWDT_TIMER_PERIOD DL_WWDT_getTimerPeriod(WWDT_Regs *wwdt)
{
uint32_t period = (wwdt->WWDTCTL0 & WWDT_WWDTCTL0_PER_MASK);
return (DL_WWDT_TIMER_PERIOD)(period);
}
/*!
* @brief Get the clock divider for the watchdog
*
* @param[in] wwdt Pointer to the register overlay for peripheral
*
* @return The current clock divider used
*
* @retval One of @ref DL_WWDT_CLOCK_DIVIDE
*/
__STATIC_INLINE DL_WWDT_CLOCK_DIVIDE DL_WWDT_getClockDivider(WWDT_Regs *wwdt)
{
uint32_t clockDivider = (wwdt->WWDTCTL0 & WWDT_WWDTCTL0_CLKDIV_MASK);
return (DL_WWDT_CLOCK_DIVIDE)(clockDivider);
}
/**
* @brief Enable WWDT interrupt
*
* @param[in] wwdt Pointer to the register overlay for the peripheral
*/
__STATIC_INLINE void DL_WWDT_enableInterrupt(WWDT_Regs *wwdt)
{
wwdt->CPU_INT.IMASK = WWDT_IMASK_INTTIM_SET;
}
/**
* @brief Disable WWDT interrupt
*
* @param[in] wwdt Pointer to the register overlay for the peripheral
*/
__STATIC_INLINE void DL_WWDT_disableInterrupt(WWDT_Regs *wwdt)
{
wwdt->CPU_INT.IMASK = WWDT_IMASK_INTTIM_CLR;
}
/**
* @brief Check if WWDT interrupt is enabled
*
* @param[in] wwdt Pointer to the register overlay for the peripheral
*
* @return If the WWDT interrupt is enabled
*
* @retval true The WWDT interrupt is enabled
* @retval false The WWDT interrupt is disabled
*/
__STATIC_INLINE bool DL_WWDT_isInterruptEnabled(WWDT_Regs *wwdt)
{
return ((wwdt->CPU_INT.IMASK & WWDT_IMASK_INTTIM_SET) ==
WWDT_IMASK_INTTIM_SET);
}
/**
* @brief Check interrupt flag of enabled WWDT interrupt
*
* Checks if the WWDT interrupt that was previously enabled is pending.
*
* @param[in] wwdt Pointer to the register overlay for the peripheral
*
* @return If the enabled WWDT interrupt is pending
*
* @retval true The WWDT interrupt is pending
* @retval false The WWDT interrupt is not pending
*
* @sa DL_WWDT_enableInterrupt
*/
__STATIC_INLINE bool DL_WWDT_getEnabledInterruptStatus(WWDT_Regs *wwdt)
{
return ((wwdt->CPU_INT.MIS & WWDT_MIS_INTTIM_SET) == WWDT_MIS_INTTIM_SET);
}
/**
* @brief Check interrupt flag of any WWDT interrupt
*
* Checks if the WWDT interrupt is pending. Interrupt does not have to
* be previously enabled.
*
* @param[in] wwdt Pointer to the register overlay for the peripheral
*
* @return If the WWDT interrupt is pending
*
* @retval true The WWDT interrupt is pending
* @retval false The WWDT interrupt is not pending
*/
__STATIC_INLINE uint32_t DL_WWDT_getRawInterruptStatus(WWDT_Regs *wwdt)
{
return (wwdt->CPU_INT.RIS & WWDT_RIS_INTTIM_SET);
}
/**
* @brief Get highest priority pending WWDT interrupt
*
* Checks if any of the WWDT interrupts are pending. Interrupts do not have to
* be previously enabled.
*
* @param[in] wwdt Pointer to the register overlay for the peripheral
*
* @return The highest priority pending WWDT interrupt
*
* @retval One of @ref DL_WWDT_IIDX
*/
__STATIC_INLINE DL_WWDT_IIDX DL_WWDT_getPendingInterrupt(WWDT_Regs *wwdt)
{
return (DL_WWDT_IIDX)(wwdt->CPU_INT.IIDX);
}
/**
* @brief Clear pending WWDT interrupt
*
* @param[in] wwdt Pointer to the register overlay for the peripheral
*/
__STATIC_INLINE void DL_WWDT_clearInterruptStatus(WWDT_Regs *wwdt)
{
wwdt->CPU_INT.ICLR = WWDT_ICLR_INTTIM_CLR;
}
/**
* @brief Configures WWDT behavior when the core is halted.
*
* @param[in] wwdt Pointer to the register overlay for the peripheral
*
* @param[in] haltMode WWDT halt behavior. One of @ref DL_WWDT_CORE_HALT.
*
*/
__STATIC_INLINE void DL_WWDT_setCoreHaltBehavior(
WWDT_Regs *wwdt, DL_WWDT_CORE_HALT haltMode)
{
wwdt->PDBGCTL = (uint32_t) haltMode;
}
/**
* @brief Get WWDT behavior when the core is halted.
*
* @param[in] wwdt Pointer to the register overlay for the peripheral
*
* @return WWDT bahvior when core is halted. One of
* @ref DL_WWDT_CORE_HALT
*
*/
__STATIC_INLINE DL_WWDT_CORE_HALT DL_WWDT_getCoreHaltBehavior(WWDT_Regs *wwdt)
{
uint32_t haltMode = (wwdt->PDBGCTL & WWDT_PDBGCTL_FREE_MASK);
return (DL_WWDT_CORE_HALT) haltMode;
}
#ifdef __cplusplus
}
#endif
#endif /* __MSPM0_HAS_WWDT__ */
#endif /* ti_dl_dl_wwdt__include */
/** @}*/