mbed official / mbed

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

Committer:
AnnaBridge
Date:
Fri Feb 16 16:16:41 2018 +0000
Revision:
161:aa5281ff4a02
Child:
170:e95d10626187
mbed library. Release version 159.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 161:aa5281ff4a02 1 /*
AnnaBridge 161:aa5281ff4a02 2 * Copyright (c) 2015, Freescale Semiconductor, Inc.
AnnaBridge 161:aa5281ff4a02 3 * Copyright 2016-2017 NXP
AnnaBridge 161:aa5281ff4a02 4 *
AnnaBridge 161:aa5281ff4a02 5 * Redistribution and use in source and binary forms, with or without modification,
AnnaBridge 161:aa5281ff4a02 6 * are permitted provided that the following conditions are met:
AnnaBridge 161:aa5281ff4a02 7 *
AnnaBridge 161:aa5281ff4a02 8 * o Redistributions of source code must retain the above copyright notice, this list
AnnaBridge 161:aa5281ff4a02 9 * of conditions and the following disclaimer.
AnnaBridge 161:aa5281ff4a02 10 *
AnnaBridge 161:aa5281ff4a02 11 * o Redistributions in binary form must reproduce the above copyright notice, this
AnnaBridge 161:aa5281ff4a02 12 * list of conditions and the following disclaimer in the documentation and/or
AnnaBridge 161:aa5281ff4a02 13 * other materials provided with the distribution.
AnnaBridge 161:aa5281ff4a02 14 *
AnnaBridge 161:aa5281ff4a02 15 * o Neither the name of the copyright holder nor the names of its
AnnaBridge 161:aa5281ff4a02 16 * contributors may be used to endorse or promote products derived from this
AnnaBridge 161:aa5281ff4a02 17 * software without specific prior written permission.
AnnaBridge 161:aa5281ff4a02 18 *
AnnaBridge 161:aa5281ff4a02 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
AnnaBridge 161:aa5281ff4a02 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
AnnaBridge 161:aa5281ff4a02 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
AnnaBridge 161:aa5281ff4a02 22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
AnnaBridge 161:aa5281ff4a02 23 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
AnnaBridge 161:aa5281ff4a02 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
AnnaBridge 161:aa5281ff4a02 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
AnnaBridge 161:aa5281ff4a02 26 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
AnnaBridge 161:aa5281ff4a02 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
AnnaBridge 161:aa5281ff4a02 28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
AnnaBridge 161:aa5281ff4a02 29 */
AnnaBridge 161:aa5281ff4a02 30 #ifndef _FSL_EWM_H_
AnnaBridge 161:aa5281ff4a02 31 #define _FSL_EWM_H_
AnnaBridge 161:aa5281ff4a02 32
AnnaBridge 161:aa5281ff4a02 33 #include "fsl_common.h"
AnnaBridge 161:aa5281ff4a02 34
AnnaBridge 161:aa5281ff4a02 35 /*!
AnnaBridge 161:aa5281ff4a02 36 * @addtogroup ewm
AnnaBridge 161:aa5281ff4a02 37 * @{
AnnaBridge 161:aa5281ff4a02 38 */
AnnaBridge 161:aa5281ff4a02 39
AnnaBridge 161:aa5281ff4a02 40
AnnaBridge 161:aa5281ff4a02 41 /*******************************************************************************
AnnaBridge 161:aa5281ff4a02 42 * Definitions
AnnaBridge 161:aa5281ff4a02 43 *******************************************************************************/
AnnaBridge 161:aa5281ff4a02 44
AnnaBridge 161:aa5281ff4a02 45 /*! @name Driver version */
AnnaBridge 161:aa5281ff4a02 46 /*@{*/
AnnaBridge 161:aa5281ff4a02 47 /*! @brief EWM driver version 2.0.1. */
AnnaBridge 161:aa5281ff4a02 48 #define FSL_EWM_DRIVER_VERSION (MAKE_VERSION(2, 0, 1))
AnnaBridge 161:aa5281ff4a02 49 /*@}*/
AnnaBridge 161:aa5281ff4a02 50
AnnaBridge 161:aa5281ff4a02 51 /*! @brief Describes EWM clock source. */
AnnaBridge 161:aa5281ff4a02 52 #if defined(FSL_FEATURE_EWM_HAS_CLOCK_SELECT) && FSL_FEATURE_EWM_HAS_CLOCK_SELECT
AnnaBridge 161:aa5281ff4a02 53 typedef enum _ewm_lpo_clock_source
AnnaBridge 161:aa5281ff4a02 54 {
AnnaBridge 161:aa5281ff4a02 55 kEWM_LpoClockSource0 = 0U, /*!< EWM clock sourced from lpo_clk[0]*/
AnnaBridge 161:aa5281ff4a02 56 kEWM_LpoClockSource1 = 1U, /*!< EWM clock sourced from lpo_clk[1]*/
AnnaBridge 161:aa5281ff4a02 57 kEWM_LpoClockSource2 = 2U, /*!< EWM clock sourced from lpo_clk[2]*/
AnnaBridge 161:aa5281ff4a02 58 kEWM_LpoClockSource3 = 3U, /*!< EWM clock sourced from lpo_clk[3]*/
AnnaBridge 161:aa5281ff4a02 59 } ewm_lpo_clock_source_t;
AnnaBridge 161:aa5281ff4a02 60 #endif /* FSL_FEATURE_EWM_HAS_CLOCK_SELECT */
AnnaBridge 161:aa5281ff4a02 61
AnnaBridge 161:aa5281ff4a02 62 /*!
AnnaBridge 161:aa5281ff4a02 63 * @brief Data structure for EWM configuration.
AnnaBridge 161:aa5281ff4a02 64 *
AnnaBridge 161:aa5281ff4a02 65 * This structure is used to configure the EWM.
AnnaBridge 161:aa5281ff4a02 66 */
AnnaBridge 161:aa5281ff4a02 67 typedef struct _ewm_config
AnnaBridge 161:aa5281ff4a02 68 {
AnnaBridge 161:aa5281ff4a02 69 bool enableEwm; /*!< Enable EWM module */
AnnaBridge 161:aa5281ff4a02 70 bool enableEwmInput; /*!< Enable EWM_in input */
AnnaBridge 161:aa5281ff4a02 71 bool setInputAssertLogic; /*!< EWM_in signal assertion state */
AnnaBridge 161:aa5281ff4a02 72 bool enableInterrupt; /*!< Enable EWM interrupt */
AnnaBridge 161:aa5281ff4a02 73 #if defined(FSL_FEATURE_EWM_HAS_CLOCK_SELECT) && FSL_FEATURE_EWM_HAS_CLOCK_SELECT
AnnaBridge 161:aa5281ff4a02 74 ewm_lpo_clock_source_t clockSource; /*!< Clock source select */
AnnaBridge 161:aa5281ff4a02 75 #endif /* FSL_FEATURE_EWM_HAS_CLOCK_SELECT */
AnnaBridge 161:aa5281ff4a02 76 #if defined(FSL_FEATURE_EWM_HAS_PRESCALER) && FSL_FEATURE_EWM_HAS_PRESCALER
AnnaBridge 161:aa5281ff4a02 77 uint8_t prescaler; /*!< Clock prescaler value */
AnnaBridge 161:aa5281ff4a02 78 #endif /* FSL_FEATURE_EWM_HAS_PRESCALER */
AnnaBridge 161:aa5281ff4a02 79 uint8_t compareLowValue; /*!< Compare low-register value */
AnnaBridge 161:aa5281ff4a02 80 uint8_t compareHighValue; /*!< Compare high-register value */
AnnaBridge 161:aa5281ff4a02 81 } ewm_config_t;
AnnaBridge 161:aa5281ff4a02 82
AnnaBridge 161:aa5281ff4a02 83 /*!
AnnaBridge 161:aa5281ff4a02 84 * @brief EWM interrupt configuration structure with default settings all disabled.
AnnaBridge 161:aa5281ff4a02 85 *
AnnaBridge 161:aa5281ff4a02 86 * This structure contains the settings for all of EWM interrupt configurations.
AnnaBridge 161:aa5281ff4a02 87 */
AnnaBridge 161:aa5281ff4a02 88 enum _ewm_interrupt_enable_t
AnnaBridge 161:aa5281ff4a02 89 {
AnnaBridge 161:aa5281ff4a02 90 kEWM_InterruptEnable = EWM_CTRL_INTEN_MASK, /*!< Enable the EWM to generate an interrupt*/
AnnaBridge 161:aa5281ff4a02 91 };
AnnaBridge 161:aa5281ff4a02 92
AnnaBridge 161:aa5281ff4a02 93 /*!
AnnaBridge 161:aa5281ff4a02 94 * @brief EWM status flags.
AnnaBridge 161:aa5281ff4a02 95 *
AnnaBridge 161:aa5281ff4a02 96 * This structure contains the constants for the EWM status flags for use in the EWM functions.
AnnaBridge 161:aa5281ff4a02 97 */
AnnaBridge 161:aa5281ff4a02 98 enum _ewm_status_flags_t
AnnaBridge 161:aa5281ff4a02 99 {
AnnaBridge 161:aa5281ff4a02 100 kEWM_RunningFlag = EWM_CTRL_EWMEN_MASK, /*!< Running flag, set when EWM is enabled*/
AnnaBridge 161:aa5281ff4a02 101 };
AnnaBridge 161:aa5281ff4a02 102
AnnaBridge 161:aa5281ff4a02 103 /*******************************************************************************
AnnaBridge 161:aa5281ff4a02 104 * API
AnnaBridge 161:aa5281ff4a02 105 *******************************************************************************/
AnnaBridge 161:aa5281ff4a02 106
AnnaBridge 161:aa5281ff4a02 107 #if defined(__cplusplus)
AnnaBridge 161:aa5281ff4a02 108 extern "C" {
AnnaBridge 161:aa5281ff4a02 109 #endif /* __cplusplus */
AnnaBridge 161:aa5281ff4a02 110
AnnaBridge 161:aa5281ff4a02 111 /*!
AnnaBridge 161:aa5281ff4a02 112 * @name EWM initialization and de-initialization
AnnaBridge 161:aa5281ff4a02 113 * @{
AnnaBridge 161:aa5281ff4a02 114 */
AnnaBridge 161:aa5281ff4a02 115
AnnaBridge 161:aa5281ff4a02 116 /*!
AnnaBridge 161:aa5281ff4a02 117 * @brief Initializes the EWM peripheral.
AnnaBridge 161:aa5281ff4a02 118 *
AnnaBridge 161:aa5281ff4a02 119 * This function is used to initialize the EWM. After calling, the EWM
AnnaBridge 161:aa5281ff4a02 120 * runs immediately according to the configuration.
AnnaBridge 161:aa5281ff4a02 121 * Note that, except for the interrupt enable control bit, other control bits and registers are write once after a
AnnaBridge 161:aa5281ff4a02 122 * CPU reset. Modifying them more than once generates a bus transfer error.
AnnaBridge 161:aa5281ff4a02 123 *
AnnaBridge 161:aa5281ff4a02 124 * This is an example.
AnnaBridge 161:aa5281ff4a02 125 * @code
AnnaBridge 161:aa5281ff4a02 126 * ewm_config_t config;
AnnaBridge 161:aa5281ff4a02 127 * EWM_GetDefaultConfig(&config);
AnnaBridge 161:aa5281ff4a02 128 * config.compareHighValue = 0xAAU;
AnnaBridge 161:aa5281ff4a02 129 * EWM_Init(ewm_base,&config);
AnnaBridge 161:aa5281ff4a02 130 * @endcode
AnnaBridge 161:aa5281ff4a02 131 *
AnnaBridge 161:aa5281ff4a02 132 * @param base EWM peripheral base address
AnnaBridge 161:aa5281ff4a02 133 * @param config The configuration of the EWM
AnnaBridge 161:aa5281ff4a02 134 */
AnnaBridge 161:aa5281ff4a02 135 void EWM_Init(EWM_Type *base, const ewm_config_t *config);
AnnaBridge 161:aa5281ff4a02 136
AnnaBridge 161:aa5281ff4a02 137 /*!
AnnaBridge 161:aa5281ff4a02 138 * @brief Deinitializes the EWM peripheral.
AnnaBridge 161:aa5281ff4a02 139 *
AnnaBridge 161:aa5281ff4a02 140 * This function is used to shut down the EWM.
AnnaBridge 161:aa5281ff4a02 141 *
AnnaBridge 161:aa5281ff4a02 142 * @param base EWM peripheral base address
AnnaBridge 161:aa5281ff4a02 143 */
AnnaBridge 161:aa5281ff4a02 144 void EWM_Deinit(EWM_Type *base);
AnnaBridge 161:aa5281ff4a02 145
AnnaBridge 161:aa5281ff4a02 146 /*!
AnnaBridge 161:aa5281ff4a02 147 * @brief Initializes the EWM configuration structure.
AnnaBridge 161:aa5281ff4a02 148 *
AnnaBridge 161:aa5281ff4a02 149 * This function initializes the EWM configuration structure to default values. The default
AnnaBridge 161:aa5281ff4a02 150 * values are as follows.
AnnaBridge 161:aa5281ff4a02 151 * @code
AnnaBridge 161:aa5281ff4a02 152 * ewmConfig->enableEwm = true;
AnnaBridge 161:aa5281ff4a02 153 * ewmConfig->enableEwmInput = false;
AnnaBridge 161:aa5281ff4a02 154 * ewmConfig->setInputAssertLogic = false;
AnnaBridge 161:aa5281ff4a02 155 * ewmConfig->enableInterrupt = false;
AnnaBridge 161:aa5281ff4a02 156 * ewmConfig->ewm_lpo_clock_source_t = kEWM_LpoClockSource0;
AnnaBridge 161:aa5281ff4a02 157 * ewmConfig->prescaler = 0;
AnnaBridge 161:aa5281ff4a02 158 * ewmConfig->compareLowValue = 0;
AnnaBridge 161:aa5281ff4a02 159 * ewmConfig->compareHighValue = 0xFEU;
AnnaBridge 161:aa5281ff4a02 160 * @endcode
AnnaBridge 161:aa5281ff4a02 161 *
AnnaBridge 161:aa5281ff4a02 162 * @param config Pointer to the EWM configuration structure.
AnnaBridge 161:aa5281ff4a02 163 * @see ewm_config_t
AnnaBridge 161:aa5281ff4a02 164 */
AnnaBridge 161:aa5281ff4a02 165 void EWM_GetDefaultConfig(ewm_config_t *config);
AnnaBridge 161:aa5281ff4a02 166
AnnaBridge 161:aa5281ff4a02 167 /* @} */
AnnaBridge 161:aa5281ff4a02 168
AnnaBridge 161:aa5281ff4a02 169 /*!
AnnaBridge 161:aa5281ff4a02 170 * @name EWM functional Operation
AnnaBridge 161:aa5281ff4a02 171 * @{
AnnaBridge 161:aa5281ff4a02 172 */
AnnaBridge 161:aa5281ff4a02 173
AnnaBridge 161:aa5281ff4a02 174 /*!
AnnaBridge 161:aa5281ff4a02 175 * @brief Enables the EWM interrupt.
AnnaBridge 161:aa5281ff4a02 176 *
AnnaBridge 161:aa5281ff4a02 177 * This function enables the EWM interrupt.
AnnaBridge 161:aa5281ff4a02 178 *
AnnaBridge 161:aa5281ff4a02 179 * @param base EWM peripheral base address
AnnaBridge 161:aa5281ff4a02 180 * @param mask The interrupts to enable
AnnaBridge 161:aa5281ff4a02 181 * The parameter can be combination of the following source if defined
AnnaBridge 161:aa5281ff4a02 182 * @arg kEWM_InterruptEnable
AnnaBridge 161:aa5281ff4a02 183 */
AnnaBridge 161:aa5281ff4a02 184 static inline void EWM_EnableInterrupts(EWM_Type *base, uint32_t mask)
AnnaBridge 161:aa5281ff4a02 185 {
AnnaBridge 161:aa5281ff4a02 186 base->CTRL |= mask;
AnnaBridge 161:aa5281ff4a02 187 }
AnnaBridge 161:aa5281ff4a02 188
AnnaBridge 161:aa5281ff4a02 189 /*!
AnnaBridge 161:aa5281ff4a02 190 * @brief Disables the EWM interrupt.
AnnaBridge 161:aa5281ff4a02 191 *
AnnaBridge 161:aa5281ff4a02 192 * This function enables the EWM interrupt.
AnnaBridge 161:aa5281ff4a02 193 *
AnnaBridge 161:aa5281ff4a02 194 * @param base EWM peripheral base address
AnnaBridge 161:aa5281ff4a02 195 * @param mask The interrupts to disable
AnnaBridge 161:aa5281ff4a02 196 * The parameter can be combination of the following source if defined
AnnaBridge 161:aa5281ff4a02 197 * @arg kEWM_InterruptEnable
AnnaBridge 161:aa5281ff4a02 198 */
AnnaBridge 161:aa5281ff4a02 199 static inline void EWM_DisableInterrupts(EWM_Type *base, uint32_t mask)
AnnaBridge 161:aa5281ff4a02 200 {
AnnaBridge 161:aa5281ff4a02 201 base->CTRL &= ~mask;
AnnaBridge 161:aa5281ff4a02 202 }
AnnaBridge 161:aa5281ff4a02 203
AnnaBridge 161:aa5281ff4a02 204 /*!
AnnaBridge 161:aa5281ff4a02 205 * @brief Gets all status flags.
AnnaBridge 161:aa5281ff4a02 206 *
AnnaBridge 161:aa5281ff4a02 207 * This function gets all status flags.
AnnaBridge 161:aa5281ff4a02 208 *
AnnaBridge 161:aa5281ff4a02 209 * This is an example for getting the running flag.
AnnaBridge 161:aa5281ff4a02 210 * @code
AnnaBridge 161:aa5281ff4a02 211 * uint32_t status;
AnnaBridge 161:aa5281ff4a02 212 * status = EWM_GetStatusFlags(ewm_base) & kEWM_RunningFlag;
AnnaBridge 161:aa5281ff4a02 213 * @endcode
AnnaBridge 161:aa5281ff4a02 214 * @param base EWM peripheral base address
AnnaBridge 161:aa5281ff4a02 215 * @return State of the status flag: asserted (true) or not-asserted (false).@see _ewm_status_flags_t
AnnaBridge 161:aa5281ff4a02 216 * - True: a related status flag has been set.
AnnaBridge 161:aa5281ff4a02 217 * - False: a related status flag is not set.
AnnaBridge 161:aa5281ff4a02 218 */
AnnaBridge 161:aa5281ff4a02 219 static inline uint32_t EWM_GetStatusFlags(EWM_Type *base)
AnnaBridge 161:aa5281ff4a02 220 {
AnnaBridge 161:aa5281ff4a02 221 return (base->CTRL & EWM_CTRL_EWMEN_MASK);
AnnaBridge 161:aa5281ff4a02 222 }
AnnaBridge 161:aa5281ff4a02 223
AnnaBridge 161:aa5281ff4a02 224 /*!
AnnaBridge 161:aa5281ff4a02 225 * @brief Services the EWM.
AnnaBridge 161:aa5281ff4a02 226 *
AnnaBridge 161:aa5281ff4a02 227 * This function resets the EWM counter to zero.
AnnaBridge 161:aa5281ff4a02 228 *
AnnaBridge 161:aa5281ff4a02 229 * @param base EWM peripheral base address
AnnaBridge 161:aa5281ff4a02 230 */
AnnaBridge 161:aa5281ff4a02 231 void EWM_Refresh(EWM_Type *base);
AnnaBridge 161:aa5281ff4a02 232
AnnaBridge 161:aa5281ff4a02 233 /*@}*/
AnnaBridge 161:aa5281ff4a02 234
AnnaBridge 161:aa5281ff4a02 235 #if defined(__cplusplus)
AnnaBridge 161:aa5281ff4a02 236 }
AnnaBridge 161:aa5281ff4a02 237 #endif /* __cplusplus */
AnnaBridge 161:aa5281ff4a02 238
AnnaBridge 161:aa5281ff4a02 239 /*! @}*/
AnnaBridge 161:aa5281ff4a02 240
AnnaBridge 161:aa5281ff4a02 241 #endif /* _FSL_EWM_H_ */