The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.
Dependents: hello SerialTestv11 SerialTestv12 Sierpinski ... more
mbed 2
This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.
TARGET_LPC54114/TOOLCHAIN_GCC_ARM/fsl_mrt.h@172:65be27845400, 2019-02-20 (annotated)
- Committer:
- AnnaBridge
- Date:
- Wed Feb 20 20:53:29 2019 +0000
- Revision:
- 172:65be27845400
- Parent:
- 171:3a7713b1edbc
mbed library release version 165
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Kojto | 148:fd96258d940d | 1 | /* |
Kojto | 148:fd96258d940d | 2 | * Copyright (c) 2016, Freescale Semiconductor, Inc. |
Kojto | 148:fd96258d940d | 3 | * All rights reserved. |
Kojto | 148:fd96258d940d | 4 | * |
Kojto | 148:fd96258d940d | 5 | * Redistribution and use in source and binary forms, with or without modification, |
Kojto | 148:fd96258d940d | 6 | * are permitted provided that the following conditions are met: |
Kojto | 148:fd96258d940d | 7 | * |
Kojto | 148:fd96258d940d | 8 | * o Redistributions of source code must retain the above copyright notice, this list |
Kojto | 148:fd96258d940d | 9 | * of conditions and the following disclaimer. |
Kojto | 148:fd96258d940d | 10 | * |
Kojto | 148:fd96258d940d | 11 | * o Redistributions in binary form must reproduce the above copyright notice, this |
Kojto | 148:fd96258d940d | 12 | * list of conditions and the following disclaimer in the documentation and/or |
Kojto | 148:fd96258d940d | 13 | * other materials provided with the distribution. |
Kojto | 148:fd96258d940d | 14 | * |
Kojto | 148:fd96258d940d | 15 | * o Neither the name of Freescale Semiconductor, Inc. nor the names of its |
Kojto | 148:fd96258d940d | 16 | * contributors may be used to endorse or promote products derived from this |
Kojto | 148:fd96258d940d | 17 | * software without specific prior written permission. |
Kojto | 148:fd96258d940d | 18 | * |
Kojto | 148:fd96258d940d | 19 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
Kojto | 148:fd96258d940d | 20 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
Kojto | 148:fd96258d940d | 21 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
Kojto | 148:fd96258d940d | 22 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR |
Kojto | 148:fd96258d940d | 23 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
Kojto | 148:fd96258d940d | 24 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
Kojto | 148:fd96258d940d | 25 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON |
Kojto | 148:fd96258d940d | 26 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
Kojto | 148:fd96258d940d | 27 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
Kojto | 148:fd96258d940d | 28 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
Kojto | 148:fd96258d940d | 29 | */ |
Kojto | 148:fd96258d940d | 30 | #ifndef _FSL_MRT_H_ |
Kojto | 148:fd96258d940d | 31 | #define _FSL_MRT_H_ |
Kojto | 148:fd96258d940d | 32 | |
Kojto | 148:fd96258d940d | 33 | #include "fsl_common.h" |
Kojto | 148:fd96258d940d | 34 | |
Kojto | 148:fd96258d940d | 35 | /*! |
Kojto | 148:fd96258d940d | 36 | * @addtogroup mrt |
Kojto | 148:fd96258d940d | 37 | * @{ |
Kojto | 148:fd96258d940d | 38 | */ |
Kojto | 148:fd96258d940d | 39 | |
Kojto | 148:fd96258d940d | 40 | /*! @file */ |
Kojto | 148:fd96258d940d | 41 | |
Kojto | 148:fd96258d940d | 42 | /******************************************************************************* |
Kojto | 148:fd96258d940d | 43 | * Definitions |
Kojto | 148:fd96258d940d | 44 | ******************************************************************************/ |
Kojto | 148:fd96258d940d | 45 | |
Kojto | 148:fd96258d940d | 46 | /*! @name Driver version */ |
Kojto | 148:fd96258d940d | 47 | /*@{*/ |
Kojto | 148:fd96258d940d | 48 | #define FSL_MRT_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) /*!< Version 2.0.0 */ |
Kojto | 148:fd96258d940d | 49 | /*@}*/ |
Kojto | 148:fd96258d940d | 50 | |
Kojto | 148:fd96258d940d | 51 | /*! @brief List of MRT channels */ |
Kojto | 148:fd96258d940d | 52 | typedef enum _mrt_chnl |
Kojto | 148:fd96258d940d | 53 | { |
Kojto | 148:fd96258d940d | 54 | kMRT_Channel_0 = 0U, /*!< MRT channel number 0*/ |
Kojto | 148:fd96258d940d | 55 | kMRT_Channel_1, /*!< MRT channel number 1 */ |
Kojto | 148:fd96258d940d | 56 | kMRT_Channel_2, /*!< MRT channel number 2 */ |
Kojto | 148:fd96258d940d | 57 | kMRT_Channel_3 /*!< MRT channel number 3 */ |
Kojto | 148:fd96258d940d | 58 | } mrt_chnl_t; |
Kojto | 148:fd96258d940d | 59 | |
Kojto | 148:fd96258d940d | 60 | /*! @brief List of MRT timer modes */ |
Kojto | 148:fd96258d940d | 61 | typedef enum _mrt_timer_mode |
Kojto | 148:fd96258d940d | 62 | { |
Kojto | 148:fd96258d940d | 63 | kMRT_RepeatMode = (0 << MRT_CHANNEL_CTRL_MODE_SHIFT), /*!< Repeat Interrupt mode */ |
Kojto | 148:fd96258d940d | 64 | kMRT_OneShotMode = (1 << MRT_CHANNEL_CTRL_MODE_SHIFT), /*!< One-shot Interrupt mode */ |
Kojto | 148:fd96258d940d | 65 | kMRT_OneShotStallMode = (2 << MRT_CHANNEL_CTRL_MODE_SHIFT) /*!< One-shot stall mode */ |
Kojto | 148:fd96258d940d | 66 | } mrt_timer_mode_t; |
Kojto | 148:fd96258d940d | 67 | |
Kojto | 148:fd96258d940d | 68 | /*! @brief List of MRT interrupts */ |
Kojto | 148:fd96258d940d | 69 | typedef enum _mrt_interrupt_enable |
Kojto | 148:fd96258d940d | 70 | { |
Kojto | 148:fd96258d940d | 71 | kMRT_TimerInterruptEnable = MRT_CHANNEL_CTRL_INTEN_MASK /*!< Timer interrupt enable*/ |
Kojto | 148:fd96258d940d | 72 | } mrt_interrupt_enable_t; |
Kojto | 148:fd96258d940d | 73 | |
Kojto | 148:fd96258d940d | 74 | /*! @brief List of MRT status flags */ |
Kojto | 148:fd96258d940d | 75 | typedef enum _mrt_status_flags |
Kojto | 148:fd96258d940d | 76 | { |
Kojto | 148:fd96258d940d | 77 | kMRT_TimerInterruptFlag = MRT_CHANNEL_STAT_INTFLAG_MASK, /*!< Timer interrupt flag */ |
Kojto | 148:fd96258d940d | 78 | kMRT_TimerRunFlag = MRT_CHANNEL_STAT_RUN_MASK, /*!< Indicates state of the timer */ |
Kojto | 148:fd96258d940d | 79 | } mrt_status_flags_t; |
Kojto | 148:fd96258d940d | 80 | |
Kojto | 148:fd96258d940d | 81 | /*! |
Kojto | 148:fd96258d940d | 82 | * @brief MRT configuration structure |
Kojto | 148:fd96258d940d | 83 | * |
Kojto | 148:fd96258d940d | 84 | * This structure holds the configuration settings for the MRT peripheral. To initialize this |
Kojto | 148:fd96258d940d | 85 | * structure to reasonable defaults, call the MRT_GetDefaultConfig() function and pass a |
Kojto | 148:fd96258d940d | 86 | * pointer to your config structure instance. |
Kojto | 148:fd96258d940d | 87 | * |
Kojto | 148:fd96258d940d | 88 | * The config struct can be made const so it resides in flash |
Kojto | 148:fd96258d940d | 89 | */ |
Kojto | 148:fd96258d940d | 90 | typedef struct _mrt_config |
Kojto | 148:fd96258d940d | 91 | { |
Kojto | 148:fd96258d940d | 92 | bool enableMultiTask; /*!< true: Timers run in multi-task mode; false: Timers run in hardware status mode */ |
Kojto | 148:fd96258d940d | 93 | } mrt_config_t; |
Kojto | 148:fd96258d940d | 94 | |
Kojto | 148:fd96258d940d | 95 | /******************************************************************************* |
Kojto | 148:fd96258d940d | 96 | * API |
Kojto | 148:fd96258d940d | 97 | ******************************************************************************/ |
Kojto | 148:fd96258d940d | 98 | |
Kojto | 148:fd96258d940d | 99 | #if defined(__cplusplus) |
Kojto | 148:fd96258d940d | 100 | extern "C" { |
Kojto | 148:fd96258d940d | 101 | #endif |
Kojto | 148:fd96258d940d | 102 | |
Kojto | 148:fd96258d940d | 103 | /*! |
Kojto | 148:fd96258d940d | 104 | * @name Initialization and deinitialization |
Kojto | 148:fd96258d940d | 105 | * @{ |
Kojto | 148:fd96258d940d | 106 | */ |
Kojto | 148:fd96258d940d | 107 | |
Kojto | 148:fd96258d940d | 108 | /*! |
Kojto | 148:fd96258d940d | 109 | * @brief Ungates the MRT clock and configures the peripheral for basic operation. |
Kojto | 148:fd96258d940d | 110 | * |
Kojto | 148:fd96258d940d | 111 | * @note This API should be called at the beginning of the application using the MRT driver. |
Kojto | 148:fd96258d940d | 112 | * |
Kojto | 148:fd96258d940d | 113 | * @param base Multi-Rate timer peripheral base address |
Kojto | 148:fd96258d940d | 114 | * @param config Pointer to user's MRT config structure |
Kojto | 148:fd96258d940d | 115 | */ |
Kojto | 148:fd96258d940d | 116 | void MRT_Init(MRT_Type *base, const mrt_config_t *config); |
Kojto | 148:fd96258d940d | 117 | |
Kojto | 148:fd96258d940d | 118 | /*! |
Kojto | 148:fd96258d940d | 119 | * @brief Gate the MRT clock |
Kojto | 148:fd96258d940d | 120 | * |
Kojto | 148:fd96258d940d | 121 | * @param base Multi-Rate timer peripheral base address |
Kojto | 148:fd96258d940d | 122 | */ |
Kojto | 148:fd96258d940d | 123 | void MRT_Deinit(MRT_Type *base); |
Kojto | 148:fd96258d940d | 124 | |
Kojto | 148:fd96258d940d | 125 | /*! |
Kojto | 148:fd96258d940d | 126 | * @brief Fill in the MRT config struct with the default settings |
Kojto | 148:fd96258d940d | 127 | * |
Kojto | 148:fd96258d940d | 128 | * The default values are: |
Kojto | 148:fd96258d940d | 129 | * @code |
Kojto | 148:fd96258d940d | 130 | * config->enableMultiTask = false; |
Kojto | 148:fd96258d940d | 131 | * @endcode |
Kojto | 148:fd96258d940d | 132 | * @param config Pointer to user's MRT config structure. |
Kojto | 148:fd96258d940d | 133 | */ |
Kojto | 148:fd96258d940d | 134 | static inline void MRT_GetDefaultConfig(mrt_config_t *config) |
Kojto | 148:fd96258d940d | 135 | { |
Kojto | 148:fd96258d940d | 136 | assert(config); |
Kojto | 148:fd96258d940d | 137 | |
Kojto | 148:fd96258d940d | 138 | /* Use hardware status operating mode */ |
Kojto | 148:fd96258d940d | 139 | config->enableMultiTask = false; |
Kojto | 148:fd96258d940d | 140 | } |
Kojto | 148:fd96258d940d | 141 | |
Kojto | 148:fd96258d940d | 142 | /*! |
Kojto | 148:fd96258d940d | 143 | * @brief Sets up an MRT channel mode. |
Kojto | 148:fd96258d940d | 144 | * |
Kojto | 148:fd96258d940d | 145 | * @param base Multi-Rate timer peripheral base address |
Kojto | 148:fd96258d940d | 146 | * @param channel Channel that is being configured. |
Kojto | 148:fd96258d940d | 147 | * @param mode Timer mode to use for the channel. |
Kojto | 148:fd96258d940d | 148 | */ |
Kojto | 148:fd96258d940d | 149 | static inline void MRT_SetupChannelMode(MRT_Type *base, mrt_chnl_t channel, const mrt_timer_mode_t mode) |
Kojto | 148:fd96258d940d | 150 | { |
Kojto | 148:fd96258d940d | 151 | uint32_t reg = base->CHANNEL[channel].CTRL; |
Kojto | 148:fd96258d940d | 152 | |
Kojto | 148:fd96258d940d | 153 | /* Clear old value */ |
Kojto | 148:fd96258d940d | 154 | reg &= ~MRT_CHANNEL_CTRL_MODE_MASK; |
Kojto | 148:fd96258d940d | 155 | /* Add the new mode */ |
Kojto | 148:fd96258d940d | 156 | reg |= mode; |
Kojto | 148:fd96258d940d | 157 | |
Kojto | 148:fd96258d940d | 158 | base->CHANNEL[channel].CTRL = reg; |
Kojto | 148:fd96258d940d | 159 | } |
Kojto | 148:fd96258d940d | 160 | |
Kojto | 148:fd96258d940d | 161 | /*! @}*/ |
Kojto | 148:fd96258d940d | 162 | |
Kojto | 148:fd96258d940d | 163 | /*! |
Kojto | 148:fd96258d940d | 164 | * @name Interrupt Interface |
Kojto | 148:fd96258d940d | 165 | * @{ |
Kojto | 148:fd96258d940d | 166 | */ |
Kojto | 148:fd96258d940d | 167 | |
Kojto | 148:fd96258d940d | 168 | /*! |
Kojto | 148:fd96258d940d | 169 | * @brief Enables the MRT interrupt. |
Kojto | 148:fd96258d940d | 170 | * |
Kojto | 148:fd96258d940d | 171 | * @param base Multi-Rate timer peripheral base address |
Kojto | 148:fd96258d940d | 172 | * @param channel Timer channel number |
Kojto | 148:fd96258d940d | 173 | * @param mask The interrupts to enable. This is a logical OR of members of the |
Kojto | 148:fd96258d940d | 174 | * enumeration ::mrt_interrupt_enable_t |
Kojto | 148:fd96258d940d | 175 | */ |
Kojto | 148:fd96258d940d | 176 | static inline void MRT_EnableInterrupts(MRT_Type *base, mrt_chnl_t channel, uint32_t mask) |
Kojto | 148:fd96258d940d | 177 | { |
Kojto | 148:fd96258d940d | 178 | base->CHANNEL[channel].CTRL |= mask; |
Kojto | 148:fd96258d940d | 179 | } |
Kojto | 148:fd96258d940d | 180 | |
Kojto | 148:fd96258d940d | 181 | /*! |
Kojto | 148:fd96258d940d | 182 | * @brief Disables the selected MRT interrupt. |
Kojto | 148:fd96258d940d | 183 | * |
Kojto | 148:fd96258d940d | 184 | * @param base Multi-Rate timer peripheral base address |
Kojto | 148:fd96258d940d | 185 | * @param channel Timer channel number |
Kojto | 148:fd96258d940d | 186 | * @param mask The interrupts to disable. This is a logical OR of members of the |
Kojto | 148:fd96258d940d | 187 | * enumeration ::mrt_interrupt_enable_t |
Kojto | 148:fd96258d940d | 188 | */ |
Kojto | 148:fd96258d940d | 189 | static inline void MRT_DisableInterrupts(MRT_Type *base, mrt_chnl_t channel, uint32_t mask) |
Kojto | 148:fd96258d940d | 190 | { |
Kojto | 148:fd96258d940d | 191 | base->CHANNEL[channel].CTRL &= ~mask; |
Kojto | 148:fd96258d940d | 192 | } |
Kojto | 148:fd96258d940d | 193 | |
Kojto | 148:fd96258d940d | 194 | /*! |
Kojto | 148:fd96258d940d | 195 | * @brief Gets the enabled MRT interrupts. |
Kojto | 148:fd96258d940d | 196 | * |
Kojto | 148:fd96258d940d | 197 | * @param base Multi-Rate timer peripheral base address |
Kojto | 148:fd96258d940d | 198 | * @param channel Timer channel number |
Kojto | 148:fd96258d940d | 199 | * |
Kojto | 148:fd96258d940d | 200 | * @return The enabled interrupts. This is the logical OR of members of the |
Kojto | 148:fd96258d940d | 201 | * enumeration ::mrt_interrupt_enable_t |
Kojto | 148:fd96258d940d | 202 | */ |
Kojto | 148:fd96258d940d | 203 | static inline uint32_t MRT_GetEnabledInterrupts(MRT_Type *base, mrt_chnl_t channel) |
Kojto | 148:fd96258d940d | 204 | { |
Kojto | 148:fd96258d940d | 205 | return (base->CHANNEL[channel].CTRL & MRT_CHANNEL_CTRL_INTEN_MASK); |
Kojto | 148:fd96258d940d | 206 | } |
Kojto | 148:fd96258d940d | 207 | |
Kojto | 148:fd96258d940d | 208 | /*! @}*/ |
Kojto | 148:fd96258d940d | 209 | |
Kojto | 148:fd96258d940d | 210 | /*! |
Kojto | 148:fd96258d940d | 211 | * @name Status Interface |
Kojto | 148:fd96258d940d | 212 | * @{ |
Kojto | 148:fd96258d940d | 213 | */ |
Kojto | 148:fd96258d940d | 214 | |
Kojto | 148:fd96258d940d | 215 | /*! |
Kojto | 148:fd96258d940d | 216 | * @brief Gets the MRT status flags |
Kojto | 148:fd96258d940d | 217 | * |
Kojto | 148:fd96258d940d | 218 | * @param base Multi-Rate timer peripheral base address |
Kojto | 148:fd96258d940d | 219 | * @param channel Timer channel number |
Kojto | 148:fd96258d940d | 220 | * |
Kojto | 148:fd96258d940d | 221 | * @return The status flags. This is the logical OR of members of the |
Kojto | 148:fd96258d940d | 222 | * enumeration ::mrt_status_flags_t |
Kojto | 148:fd96258d940d | 223 | */ |
Kojto | 148:fd96258d940d | 224 | static inline uint32_t MRT_GetStatusFlags(MRT_Type *base, mrt_chnl_t channel) |
Kojto | 148:fd96258d940d | 225 | { |
Kojto | 148:fd96258d940d | 226 | return (base->CHANNEL[channel].STAT & (MRT_CHANNEL_STAT_INTFLAG_MASK | MRT_CHANNEL_STAT_RUN_MASK)); |
Kojto | 148:fd96258d940d | 227 | } |
Kojto | 148:fd96258d940d | 228 | |
Kojto | 148:fd96258d940d | 229 | /*! |
Kojto | 148:fd96258d940d | 230 | * @brief Clears the MRT status flags. |
Kojto | 148:fd96258d940d | 231 | * |
Kojto | 148:fd96258d940d | 232 | * @param base Multi-Rate timer peripheral base address |
Kojto | 148:fd96258d940d | 233 | * @param channel Timer channel number |
Kojto | 148:fd96258d940d | 234 | * @param mask The status flags to clear. This is a logical OR of members of the |
Kojto | 148:fd96258d940d | 235 | * enumeration ::mrt_status_flags_t |
Kojto | 148:fd96258d940d | 236 | */ |
Kojto | 148:fd96258d940d | 237 | static inline void MRT_ClearStatusFlags(MRT_Type *base, mrt_chnl_t channel, uint32_t mask) |
Kojto | 148:fd96258d940d | 238 | { |
Kojto | 148:fd96258d940d | 239 | base->CHANNEL[channel].STAT = (mask & MRT_CHANNEL_STAT_INTFLAG_MASK); |
Kojto | 148:fd96258d940d | 240 | } |
Kojto | 148:fd96258d940d | 241 | |
Kojto | 148:fd96258d940d | 242 | /*! @}*/ |
Kojto | 148:fd96258d940d | 243 | |
Kojto | 148:fd96258d940d | 244 | /*! |
Kojto | 148:fd96258d940d | 245 | * @name Read and Write the timer period |
Kojto | 148:fd96258d940d | 246 | * @{ |
Kojto | 148:fd96258d940d | 247 | */ |
Kojto | 148:fd96258d940d | 248 | |
Kojto | 148:fd96258d940d | 249 | /*! |
Kojto | 148:fd96258d940d | 250 | * @brief Used to update the timer period in units of count. |
Kojto | 148:fd96258d940d | 251 | * |
Kojto | 148:fd96258d940d | 252 | * The new value will be immediately loaded or will be loaded at the end of the current time |
Kojto | 148:fd96258d940d | 253 | * interval. For one-shot interrupt mode the new value will be immediately loaded. |
Kojto | 148:fd96258d940d | 254 | * |
Kojto | 148:fd96258d940d | 255 | * @note User can call the utility macros provided in fsl_common.h to convert to ticks |
Kojto | 148:fd96258d940d | 256 | * |
Kojto | 148:fd96258d940d | 257 | * @param base Multi-Rate timer peripheral base address |
Kojto | 148:fd96258d940d | 258 | * @param channel Timer channel number |
Kojto | 148:fd96258d940d | 259 | * @param count Timer period in units of ticks |
Kojto | 148:fd96258d940d | 260 | * @param immediateLoad true: Load the new value immediately into the TIMER register; |
Kojto | 148:fd96258d940d | 261 | * false: Load the new value at the end of current timer interval |
Kojto | 148:fd96258d940d | 262 | */ |
Kojto | 148:fd96258d940d | 263 | void MRT_UpdateTimerPeriod(MRT_Type *base, mrt_chnl_t channel, uint32_t count, bool immediateLoad); |
Kojto | 148:fd96258d940d | 264 | |
Kojto | 148:fd96258d940d | 265 | /*! |
Kojto | 148:fd96258d940d | 266 | * @brief Reads the current timer counting value. |
Kojto | 148:fd96258d940d | 267 | * |
Kojto | 148:fd96258d940d | 268 | * This function returns the real-time timer counting value, in a range from 0 to a |
Kojto | 148:fd96258d940d | 269 | * timer period. |
Kojto | 148:fd96258d940d | 270 | * |
Kojto | 148:fd96258d940d | 271 | * @note User can call the utility macros provided in fsl_common.h to convert ticks to usec or msec |
Kojto | 148:fd96258d940d | 272 | * |
Kojto | 148:fd96258d940d | 273 | * @param base Multi-Rate timer peripheral base address |
Kojto | 148:fd96258d940d | 274 | * @param channel Timer channel number |
Kojto | 148:fd96258d940d | 275 | * |
Kojto | 148:fd96258d940d | 276 | * @return Current timer counting value in ticks |
Kojto | 148:fd96258d940d | 277 | */ |
Kojto | 148:fd96258d940d | 278 | static inline uint32_t MRT_GetCurrentTimerCount(MRT_Type *base, mrt_chnl_t channel) |
Kojto | 148:fd96258d940d | 279 | { |
Kojto | 148:fd96258d940d | 280 | return base->CHANNEL[channel].TIMER; |
Kojto | 148:fd96258d940d | 281 | } |
Kojto | 148:fd96258d940d | 282 | |
Kojto | 148:fd96258d940d | 283 | /*! @}*/ |
Kojto | 148:fd96258d940d | 284 | |
Kojto | 148:fd96258d940d | 285 | /*! |
Kojto | 148:fd96258d940d | 286 | * @name Timer Start and Stop |
Kojto | 148:fd96258d940d | 287 | * @{ |
Kojto | 148:fd96258d940d | 288 | */ |
Kojto | 148:fd96258d940d | 289 | |
Kojto | 148:fd96258d940d | 290 | /*! |
Kojto | 148:fd96258d940d | 291 | * @brief Starts the timer counting. |
Kojto | 148:fd96258d940d | 292 | * |
Kojto | 148:fd96258d940d | 293 | * After calling this function, timers load period value, counts down to 0 and |
Kojto | 148:fd96258d940d | 294 | * depending on the timer mode it will either load the respective start value again or stop. |
Kojto | 148:fd96258d940d | 295 | * |
Kojto | 148:fd96258d940d | 296 | * @note User can call the utility macros provided in fsl_common.h to convert to ticks |
Kojto | 148:fd96258d940d | 297 | * |
Kojto | 148:fd96258d940d | 298 | * @param base Multi-Rate timer peripheral base address |
Kojto | 148:fd96258d940d | 299 | * @param channel Timer channel number. |
Kojto | 148:fd96258d940d | 300 | * @param count Timer period in units of ticks |
Kojto | 148:fd96258d940d | 301 | */ |
Kojto | 148:fd96258d940d | 302 | static inline void MRT_StartTimer(MRT_Type *base, mrt_chnl_t channel, uint32_t count) |
Kojto | 148:fd96258d940d | 303 | { |
Kojto | 148:fd96258d940d | 304 | /* Write the timer interval value */ |
Kojto | 148:fd96258d940d | 305 | base->CHANNEL[channel].INTVAL = count; |
Kojto | 148:fd96258d940d | 306 | } |
Kojto | 148:fd96258d940d | 307 | |
Kojto | 148:fd96258d940d | 308 | /*! |
Kojto | 148:fd96258d940d | 309 | * @brief Stops the timer counting. |
Kojto | 148:fd96258d940d | 310 | * |
Kojto | 148:fd96258d940d | 311 | * This function stops the timer from counting. |
Kojto | 148:fd96258d940d | 312 | * |
Kojto | 148:fd96258d940d | 313 | * @param base Multi-Rate timer peripheral base address |
Kojto | 148:fd96258d940d | 314 | * @param channel Timer channel number. |
Kojto | 148:fd96258d940d | 315 | */ |
Kojto | 148:fd96258d940d | 316 | static inline void MRT_StopTimer(MRT_Type *base, mrt_chnl_t channel) |
Kojto | 148:fd96258d940d | 317 | { |
Kojto | 148:fd96258d940d | 318 | /* Stop the timer immediately */ |
Kojto | 148:fd96258d940d | 319 | base->CHANNEL[channel].INTVAL = MRT_CHANNEL_INTVAL_LOAD_MASK; |
Kojto | 148:fd96258d940d | 320 | } |
Kojto | 148:fd96258d940d | 321 | |
Kojto | 148:fd96258d940d | 322 | /*! @}*/ |
Kojto | 148:fd96258d940d | 323 | |
Kojto | 148:fd96258d940d | 324 | /*! |
Kojto | 148:fd96258d940d | 325 | * @name Get & release channel |
Kojto | 148:fd96258d940d | 326 | * @{ |
Kojto | 148:fd96258d940d | 327 | */ |
Kojto | 148:fd96258d940d | 328 | |
Kojto | 148:fd96258d940d | 329 | /*! |
Kojto | 148:fd96258d940d | 330 | * @brief Find the available channel. |
Kojto | 148:fd96258d940d | 331 | * |
Kojto | 148:fd96258d940d | 332 | * This function returns the lowest available channel number. |
Kojto | 148:fd96258d940d | 333 | * |
Kojto | 148:fd96258d940d | 334 | * @param base Multi-Rate timer peripheral base address |
Kojto | 148:fd96258d940d | 335 | */ |
Kojto | 148:fd96258d940d | 336 | static inline uint32_t MRT_GetIdleChannel(MRT_Type *base) |
Kojto | 148:fd96258d940d | 337 | { |
Kojto | 148:fd96258d940d | 338 | return base->IDLE_CH; |
Kojto | 148:fd96258d940d | 339 | } |
Kojto | 148:fd96258d940d | 340 | |
Kojto | 148:fd96258d940d | 341 | /*! |
Kojto | 148:fd96258d940d | 342 | * @brief Release the channel when the timer is using the multi-task mode. |
Kojto | 148:fd96258d940d | 343 | * |
Kojto | 148:fd96258d940d | 344 | * In multi-task mode, the INUSE flags allow more control over when MRT channels are released for |
Kojto | 148:fd96258d940d | 345 | * further use. The user can hold on to a channel acquired by calling MRT_GetIdleChannel() for as |
Kojto | 148:fd96258d940d | 346 | * long as it is needed and release it by calling this function. This removes the need to ask for |
Kojto | 148:fd96258d940d | 347 | * an available channel for every use. |
Kojto | 148:fd96258d940d | 348 | * |
Kojto | 148:fd96258d940d | 349 | * @param base Multi-Rate timer peripheral base address |
Kojto | 148:fd96258d940d | 350 | * @param channel Timer channel number. |
Kojto | 148:fd96258d940d | 351 | */ |
Kojto | 148:fd96258d940d | 352 | static inline void MRT_ReleaseChannel(MRT_Type *base, mrt_chnl_t channel) |
Kojto | 148:fd96258d940d | 353 | { |
Kojto | 148:fd96258d940d | 354 | uint32_t reg = base->CHANNEL[channel].STAT; |
Kojto | 148:fd96258d940d | 355 | |
Kojto | 148:fd96258d940d | 356 | /* Clear flag bits to prevent accidentally clearing anything when writing back */ |
Kojto | 148:fd96258d940d | 357 | reg = ~MRT_CHANNEL_STAT_INTFLAG_MASK; |
Kojto | 148:fd96258d940d | 358 | reg |= MRT_CHANNEL_STAT_INUSE_MASK; |
Kojto | 148:fd96258d940d | 359 | |
Kojto | 148:fd96258d940d | 360 | base->CHANNEL[channel].STAT = reg; |
Kojto | 148:fd96258d940d | 361 | } |
Kojto | 148:fd96258d940d | 362 | |
Kojto | 148:fd96258d940d | 363 | /*! @}*/ |
Kojto | 148:fd96258d940d | 364 | |
Kojto | 148:fd96258d940d | 365 | #if defined(__cplusplus) |
Kojto | 148:fd96258d940d | 366 | } |
Kojto | 148:fd96258d940d | 367 | #endif |
Kojto | 148:fd96258d940d | 368 | |
Kojto | 148:fd96258d940d | 369 | /*! @}*/ |
Kojto | 148:fd96258d940d | 370 | |
Kojto | 148:fd96258d940d | 371 | #endif /* _FSL_MRT_H_ */ |