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.

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?

UserRevisionLine numberNew contents of line
AnnaBridge 161:aa5281ff4a02 1 /*
AnnaBridge 170:e95d10626187 2 * The Clear BSD License
AnnaBridge 161:aa5281ff4a02 3 * Copyright (c) 2015, Freescale Semiconductor, Inc.
AnnaBridge 161:aa5281ff4a02 4 * Copyright 2016-2017 NXP
AnnaBridge 170:e95d10626187 5 * All rights reserved.
AnnaBridge 170:e95d10626187 6 *
AnnaBridge 161:aa5281ff4a02 7 * Redistribution and use in source and binary forms, with or without modification,
AnnaBridge 170:e95d10626187 8 * are permitted (subject to the limitations in the disclaimer below) provided
AnnaBridge 170:e95d10626187 9 * that the following conditions are met:
AnnaBridge 161:aa5281ff4a02 10 *
AnnaBridge 161:aa5281ff4a02 11 * o Redistributions of source code must retain the above copyright notice, this list
AnnaBridge 161:aa5281ff4a02 12 * of conditions and the following disclaimer.
AnnaBridge 161:aa5281ff4a02 13 *
AnnaBridge 161:aa5281ff4a02 14 * o Redistributions in binary form must reproduce the above copyright notice, this
AnnaBridge 161:aa5281ff4a02 15 * list of conditions and the following disclaimer in the documentation and/or
AnnaBridge 161:aa5281ff4a02 16 * other materials provided with the distribution.
AnnaBridge 161:aa5281ff4a02 17 *
AnnaBridge 161:aa5281ff4a02 18 * o Neither the name of the copyright holder nor the names of its
AnnaBridge 161:aa5281ff4a02 19 * contributors may be used to endorse or promote products derived from this
AnnaBridge 161:aa5281ff4a02 20 * software without specific prior written permission.
AnnaBridge 161:aa5281ff4a02 21 *
AnnaBridge 170:e95d10626187 22 * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
AnnaBridge 161:aa5281ff4a02 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
AnnaBridge 161:aa5281ff4a02 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
AnnaBridge 161:aa5281ff4a02 25 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
AnnaBridge 161:aa5281ff4a02 26 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
AnnaBridge 161:aa5281ff4a02 27 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
AnnaBridge 161:aa5281ff4a02 28 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
AnnaBridge 161:aa5281ff4a02 29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
AnnaBridge 161:aa5281ff4a02 30 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
AnnaBridge 161:aa5281ff4a02 31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
AnnaBridge 161:aa5281ff4a02 32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
AnnaBridge 161:aa5281ff4a02 33 */
AnnaBridge 161:aa5281ff4a02 34
AnnaBridge 161:aa5281ff4a02 35 #ifndef _FSL_GPT_H_
AnnaBridge 161:aa5281ff4a02 36 #define _FSL_GPT_H_
AnnaBridge 161:aa5281ff4a02 37
AnnaBridge 161:aa5281ff4a02 38 #include "fsl_common.h"
AnnaBridge 161:aa5281ff4a02 39
AnnaBridge 161:aa5281ff4a02 40 /*!
AnnaBridge 161:aa5281ff4a02 41 * @addtogroup gpt
AnnaBridge 161:aa5281ff4a02 42 * @{
AnnaBridge 161:aa5281ff4a02 43 */
AnnaBridge 161:aa5281ff4a02 44
AnnaBridge 161:aa5281ff4a02 45 /*******************************************************************************
AnnaBridge 161:aa5281ff4a02 46 * Definitions
AnnaBridge 161:aa5281ff4a02 47 ******************************************************************************/
AnnaBridge 161:aa5281ff4a02 48
AnnaBridge 161:aa5281ff4a02 49 /*! @name Driver version */
AnnaBridge 161:aa5281ff4a02 50 /*@{*/
AnnaBridge 161:aa5281ff4a02 51 #define FSL_GPT_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) /*!< Version 2.0.0 */
AnnaBridge 161:aa5281ff4a02 52 /*@}*/
AnnaBridge 161:aa5281ff4a02 53
AnnaBridge 161:aa5281ff4a02 54 /*!
AnnaBridge 161:aa5281ff4a02 55 * @brief List of clock sources
AnnaBridge 161:aa5281ff4a02 56 * @note Actual number of clock sources is SoC dependent
AnnaBridge 161:aa5281ff4a02 57 */
AnnaBridge 161:aa5281ff4a02 58 typedef enum _gpt_clock_source
AnnaBridge 161:aa5281ff4a02 59 {
AnnaBridge 161:aa5281ff4a02 60 kGPT_ClockSource_Off = 0U, /*!< GPT Clock Source Off.*/
AnnaBridge 161:aa5281ff4a02 61 kGPT_ClockSource_Periph = 1U, /*!< GPT Clock Source from Peripheral Clock.*/
AnnaBridge 161:aa5281ff4a02 62 kGPT_ClockSource_HighFreq = 2U, /*!< GPT Clock Source from High Frequency Reference Clock.*/
AnnaBridge 161:aa5281ff4a02 63 kGPT_ClockSource_Ext = 3U, /*!< GPT Clock Source from external pin.*/
AnnaBridge 161:aa5281ff4a02 64 kGPT_ClockSource_LowFreq = 4U, /*!< GPT Clock Source from Low Frequency Reference Clock.*/
AnnaBridge 161:aa5281ff4a02 65 kGPT_ClockSource_Osc = 5U, /*!< GPT Clock Source from Crystal oscillator.*/
AnnaBridge 161:aa5281ff4a02 66 } gpt_clock_source_t;
AnnaBridge 161:aa5281ff4a02 67
AnnaBridge 161:aa5281ff4a02 68 /*! @brief List of input capture channel number. */
AnnaBridge 161:aa5281ff4a02 69 typedef enum _gpt_input_capture_channel
AnnaBridge 161:aa5281ff4a02 70 {
AnnaBridge 161:aa5281ff4a02 71 kGPT_InputCapture_Channel1 = 0U, /*!< GPT Input Capture Channel1.*/
AnnaBridge 161:aa5281ff4a02 72 kGPT_InputCapture_Channel2 = 1U, /*!< GPT Input Capture Channel2.*/
AnnaBridge 161:aa5281ff4a02 73 } gpt_input_capture_channel_t;
AnnaBridge 161:aa5281ff4a02 74
AnnaBridge 161:aa5281ff4a02 75 /*! @brief List of input capture operation mode. */
AnnaBridge 161:aa5281ff4a02 76 typedef enum _gpt_input_operation_mode
AnnaBridge 161:aa5281ff4a02 77 {
AnnaBridge 161:aa5281ff4a02 78 kGPT_InputOperation_Disabled = 0U, /*!< Don't capture.*/
AnnaBridge 161:aa5281ff4a02 79 kGPT_InputOperation_RiseEdge = 1U, /*!< Capture on rising edge of input pin.*/
AnnaBridge 161:aa5281ff4a02 80 kGPT_InputOperation_FallEdge = 2U, /*!< Capture on falling edge of input pin.*/
AnnaBridge 161:aa5281ff4a02 81 kGPT_InputOperation_BothEdge = 3U, /*!< Capture on both edges of input pin.*/
AnnaBridge 161:aa5281ff4a02 82 } gpt_input_operation_mode_t;
AnnaBridge 161:aa5281ff4a02 83
AnnaBridge 161:aa5281ff4a02 84 /*! @brief List of output compare channel number. */
AnnaBridge 161:aa5281ff4a02 85 typedef enum _gpt_output_compare_channel
AnnaBridge 161:aa5281ff4a02 86 {
AnnaBridge 161:aa5281ff4a02 87 kGPT_OutputCompare_Channel1 = 0U, /*!< Output Compare Channel1.*/
AnnaBridge 161:aa5281ff4a02 88 kGPT_OutputCompare_Channel2 = 1U, /*!< Output Compare Channel2.*/
AnnaBridge 161:aa5281ff4a02 89 kGPT_OutputCompare_Channel3 = 2U, /*!< Output Compare Channel3.*/
AnnaBridge 161:aa5281ff4a02 90 } gpt_output_compare_channel_t;
AnnaBridge 161:aa5281ff4a02 91
AnnaBridge 161:aa5281ff4a02 92 /*! @brief List of output compare operation mode. */
AnnaBridge 161:aa5281ff4a02 93 typedef enum _gpt_output_operation_mode
AnnaBridge 161:aa5281ff4a02 94 {
AnnaBridge 161:aa5281ff4a02 95 kGPT_OutputOperation_Disconnected = 0U, /*!< Don't change output pin.*/
AnnaBridge 161:aa5281ff4a02 96 kGPT_OutputOperation_Toggle = 1U, /*!< Toggle output pin.*/
AnnaBridge 161:aa5281ff4a02 97 kGPT_OutputOperation_Clear = 2U, /*!< Set output pin low.*/
AnnaBridge 161:aa5281ff4a02 98 kGPT_OutputOperation_Set = 3U, /*!< Set output pin high.*/
AnnaBridge 161:aa5281ff4a02 99 kGPT_OutputOperation_Activelow = 4U, /*!< Generate a active low pulse on output pin.*/
AnnaBridge 161:aa5281ff4a02 100 } gpt_output_operation_mode_t;
AnnaBridge 161:aa5281ff4a02 101
AnnaBridge 161:aa5281ff4a02 102 /*! @brief List of GPT interrupts */
AnnaBridge 161:aa5281ff4a02 103 typedef enum _gpt_interrupt_enable
AnnaBridge 161:aa5281ff4a02 104 {
AnnaBridge 161:aa5281ff4a02 105 kGPT_OutputCompare1InterruptEnable = GPT_IR_OF1IE_MASK, /*!< Output Compare Channel1 interrupt enable*/
AnnaBridge 161:aa5281ff4a02 106 kGPT_OutputCompare2InterruptEnable = GPT_IR_OF2IE_MASK, /*!< Output Compare Channel2 interrupt enable*/
AnnaBridge 161:aa5281ff4a02 107 kGPT_OutputCompare3InterruptEnable = GPT_IR_OF3IE_MASK, /*!< Output Compare Channel3 interrupt enable*/
AnnaBridge 161:aa5281ff4a02 108 kGPT_InputCapture1InterruptEnable = GPT_IR_IF1IE_MASK, /*!< Input Capture Channel1 interrupt enable*/
AnnaBridge 161:aa5281ff4a02 109 kGPT_InputCapture2InterruptEnable = GPT_IR_IF2IE_MASK, /*!< Input Capture Channel1 interrupt enable*/
AnnaBridge 161:aa5281ff4a02 110 kGPT_RollOverFlagInterruptEnable = GPT_IR_ROVIE_MASK, /*!< Counter rolled over interrupt enable*/
AnnaBridge 161:aa5281ff4a02 111 } gpt_interrupt_enable_t;
AnnaBridge 161:aa5281ff4a02 112
AnnaBridge 161:aa5281ff4a02 113 /*! @brief Status flag. */
AnnaBridge 161:aa5281ff4a02 114 typedef enum _gpt_status_flag
AnnaBridge 161:aa5281ff4a02 115 {
AnnaBridge 161:aa5281ff4a02 116 kGPT_OutputCompare1Flag = GPT_SR_OF1_MASK, /*!< Output compare channel 1 event.*/
AnnaBridge 161:aa5281ff4a02 117 kGPT_OutputCompare2Flag = GPT_SR_OF2_MASK, /*!< Output compare channel 2 event.*/
AnnaBridge 161:aa5281ff4a02 118 kGPT_OutputCompare3Flag = GPT_SR_OF3_MASK, /*!< Output compare channel 3 event.*/
AnnaBridge 161:aa5281ff4a02 119 kGPT_InputCapture1Flag = GPT_SR_IF1_MASK, /*!< Input Capture channel 1 event.*/
AnnaBridge 161:aa5281ff4a02 120 kGPT_InputCapture2Flag = GPT_SR_IF2_MASK, /*!< Input Capture channel 2 event.*/
AnnaBridge 161:aa5281ff4a02 121 kGPT_RollOverFlag = GPT_SR_ROV_MASK, /*!< Counter reaches maximum value and rolled over to 0 event.*/
AnnaBridge 161:aa5281ff4a02 122 } gpt_status_flag_t;
AnnaBridge 161:aa5281ff4a02 123
AnnaBridge 161:aa5281ff4a02 124 /*! @brief Structure to configure the running mode. */
AnnaBridge 161:aa5281ff4a02 125 typedef struct _gpt_init_config
AnnaBridge 161:aa5281ff4a02 126 {
AnnaBridge 161:aa5281ff4a02 127 gpt_clock_source_t clockSource; /*!< clock source for GPT module. */
AnnaBridge 161:aa5281ff4a02 128 uint32_t divider; /*!< clock divider (prescaler+1) from clock source to counter. */
AnnaBridge 161:aa5281ff4a02 129 bool enableFreeRun; /*!< true: FreeRun mode, false: Restart mode. */
AnnaBridge 161:aa5281ff4a02 130 bool enableRunInWait; /*!< GPT enabled in wait mode. */
AnnaBridge 161:aa5281ff4a02 131 bool enableRunInStop; /*!< GPT enabled in stop mode. */
AnnaBridge 161:aa5281ff4a02 132 bool enableRunInDoze; /*!< GPT enabled in doze mode. */
AnnaBridge 161:aa5281ff4a02 133 bool enableRunInDbg; /*!< GPT enabled in debug mode. */
AnnaBridge 161:aa5281ff4a02 134 bool enableMode; /*!< true: counter reset to 0 when enabled;
AnnaBridge 161:aa5281ff4a02 135 false: counter retain its value when enabled. */
AnnaBridge 161:aa5281ff4a02 136 } gpt_config_t;
AnnaBridge 161:aa5281ff4a02 137
AnnaBridge 161:aa5281ff4a02 138 /*******************************************************************************
AnnaBridge 161:aa5281ff4a02 139 * API
AnnaBridge 161:aa5281ff4a02 140 ******************************************************************************/
AnnaBridge 161:aa5281ff4a02 141
AnnaBridge 161:aa5281ff4a02 142 #if defined(__cplusplus)
AnnaBridge 161:aa5281ff4a02 143 extern "C" {
AnnaBridge 161:aa5281ff4a02 144 #endif
AnnaBridge 161:aa5281ff4a02 145
AnnaBridge 161:aa5281ff4a02 146 /*!
AnnaBridge 161:aa5281ff4a02 147 * @name Initialization and deinitialization
AnnaBridge 161:aa5281ff4a02 148 * @{
AnnaBridge 161:aa5281ff4a02 149 */
AnnaBridge 161:aa5281ff4a02 150
AnnaBridge 161:aa5281ff4a02 151 /*!
AnnaBridge 161:aa5281ff4a02 152 * @brief Initialize GPT to reset state and initialize running mode.
AnnaBridge 161:aa5281ff4a02 153 *
AnnaBridge 161:aa5281ff4a02 154 * @param base GPT peripheral base address.
AnnaBridge 161:aa5281ff4a02 155 * @param initConfig GPT mode setting configuration.
AnnaBridge 161:aa5281ff4a02 156 */
AnnaBridge 161:aa5281ff4a02 157 void GPT_Init(GPT_Type *base, const gpt_config_t *initConfig);
AnnaBridge 161:aa5281ff4a02 158
AnnaBridge 161:aa5281ff4a02 159 /*!
AnnaBridge 161:aa5281ff4a02 160 * @brief Disables the module and gates the GPT clock.
AnnaBridge 161:aa5281ff4a02 161 *
AnnaBridge 161:aa5281ff4a02 162 * @param base GPT peripheral base address.
AnnaBridge 161:aa5281ff4a02 163 */
AnnaBridge 161:aa5281ff4a02 164 void GPT_Deinit(GPT_Type *base);
AnnaBridge 161:aa5281ff4a02 165
AnnaBridge 161:aa5281ff4a02 166 /*!
AnnaBridge 161:aa5281ff4a02 167 * @brief Fills in the GPT configuration structure with default settings.
AnnaBridge 161:aa5281ff4a02 168 *
AnnaBridge 161:aa5281ff4a02 169 * The default values are:
AnnaBridge 161:aa5281ff4a02 170 * @code
AnnaBridge 161:aa5281ff4a02 171 * config->clockSource = kGPT_ClockSource_Periph;
AnnaBridge 161:aa5281ff4a02 172 * config->divider = 1U;
AnnaBridge 161:aa5281ff4a02 173 * config->enableRunInStop = true;
AnnaBridge 161:aa5281ff4a02 174 * config->enableRunInWait = true;
AnnaBridge 161:aa5281ff4a02 175 * config->enableRunInDoze = false;
AnnaBridge 161:aa5281ff4a02 176 * config->enableRunInDbg = false;
AnnaBridge 161:aa5281ff4a02 177 * config->enableFreeRun = true;
AnnaBridge 161:aa5281ff4a02 178 * config->enableMode = true;
AnnaBridge 161:aa5281ff4a02 179 * @endcode
AnnaBridge 161:aa5281ff4a02 180 * @param config Pointer to the user configuration structure.
AnnaBridge 161:aa5281ff4a02 181 */
AnnaBridge 161:aa5281ff4a02 182 void GPT_GetDefaultConfig(gpt_config_t *config);
AnnaBridge 161:aa5281ff4a02 183
AnnaBridge 161:aa5281ff4a02 184 /*!
AnnaBridge 161:aa5281ff4a02 185 * @name Software Reset
AnnaBridge 161:aa5281ff4a02 186 * @{
AnnaBridge 161:aa5281ff4a02 187 */
AnnaBridge 161:aa5281ff4a02 188
AnnaBridge 161:aa5281ff4a02 189 /*!
AnnaBridge 161:aa5281ff4a02 190 * @brief Software reset of GPT module.
AnnaBridge 161:aa5281ff4a02 191 *
AnnaBridge 161:aa5281ff4a02 192 * @param base GPT peripheral base address.
AnnaBridge 161:aa5281ff4a02 193 */
AnnaBridge 161:aa5281ff4a02 194 static inline void GPT_SoftwareReset(GPT_Type *base)
AnnaBridge 161:aa5281ff4a02 195 {
AnnaBridge 161:aa5281ff4a02 196 base->CR |= GPT_CR_SWR_MASK;
AnnaBridge 161:aa5281ff4a02 197 /* Wait reset finished. */
AnnaBridge 161:aa5281ff4a02 198 while ((base->CR & GPT_CR_SWR_MASK) == GPT_CR_SWR_MASK)
AnnaBridge 161:aa5281ff4a02 199 {
AnnaBridge 161:aa5281ff4a02 200 }
AnnaBridge 161:aa5281ff4a02 201 }
AnnaBridge 161:aa5281ff4a02 202
AnnaBridge 161:aa5281ff4a02 203 /*!
AnnaBridge 161:aa5281ff4a02 204 * @name Clock source and frequency control
AnnaBridge 161:aa5281ff4a02 205 * @{
AnnaBridge 161:aa5281ff4a02 206 */
AnnaBridge 161:aa5281ff4a02 207
AnnaBridge 161:aa5281ff4a02 208 /*!
AnnaBridge 161:aa5281ff4a02 209 * @brief Set clock source of GPT.
AnnaBridge 161:aa5281ff4a02 210 *
AnnaBridge 161:aa5281ff4a02 211 * @param base GPT peripheral base address.
AnnaBridge 161:aa5281ff4a02 212 * @param source Clock source (see @ref gpt_clock_source_t typedef enumeration).
AnnaBridge 161:aa5281ff4a02 213 */
AnnaBridge 161:aa5281ff4a02 214 static inline void GPT_SetClockSource(GPT_Type *base, gpt_clock_source_t source)
AnnaBridge 161:aa5281ff4a02 215 {
AnnaBridge 161:aa5281ff4a02 216 if (source == kGPT_ClockSource_Osc)
AnnaBridge 161:aa5281ff4a02 217 {
AnnaBridge 161:aa5281ff4a02 218 base->CR = (base->CR & ~GPT_CR_CLKSRC_MASK) | GPT_CR_EN_24M_MASK | GPT_CR_CLKSRC(source);
AnnaBridge 161:aa5281ff4a02 219 }
AnnaBridge 161:aa5281ff4a02 220 else
AnnaBridge 161:aa5281ff4a02 221 {
AnnaBridge 161:aa5281ff4a02 222 base->CR = (base->CR & ~(GPT_CR_CLKSRC_MASK | GPT_CR_EN_24M_MASK)) | GPT_CR_CLKSRC(source);
AnnaBridge 161:aa5281ff4a02 223 }
AnnaBridge 161:aa5281ff4a02 224 }
AnnaBridge 161:aa5281ff4a02 225
AnnaBridge 161:aa5281ff4a02 226 /*!
AnnaBridge 161:aa5281ff4a02 227 * @brief Get clock source of GPT.
AnnaBridge 161:aa5281ff4a02 228 *
AnnaBridge 161:aa5281ff4a02 229 * @param base GPT peripheral base address.
AnnaBridge 161:aa5281ff4a02 230 * @return clock source (see @ref gpt_clock_source_t typedef enumeration).
AnnaBridge 161:aa5281ff4a02 231 */
AnnaBridge 161:aa5281ff4a02 232 static inline gpt_clock_source_t GPT_GetClockSource(GPT_Type *base)
AnnaBridge 161:aa5281ff4a02 233 {
AnnaBridge 161:aa5281ff4a02 234 return (gpt_clock_source_t)((base->CR & GPT_CR_CLKSRC_MASK) >> GPT_CR_CLKSRC_SHIFT);
AnnaBridge 161:aa5281ff4a02 235 }
AnnaBridge 161:aa5281ff4a02 236
AnnaBridge 161:aa5281ff4a02 237 /*!
AnnaBridge 161:aa5281ff4a02 238 * @brief Set pre scaler of GPT.
AnnaBridge 161:aa5281ff4a02 239 *
AnnaBridge 161:aa5281ff4a02 240 * @param base GPT peripheral base address.
AnnaBridge 161:aa5281ff4a02 241 * @param divider Divider of GPT (1-4096).
AnnaBridge 161:aa5281ff4a02 242 */
AnnaBridge 161:aa5281ff4a02 243 static inline void GPT_SetClockDivider(GPT_Type *base, uint32_t divider)
AnnaBridge 161:aa5281ff4a02 244 {
AnnaBridge 161:aa5281ff4a02 245 assert(divider - 1 <= GPT_PR_PRESCALER_MASK);
AnnaBridge 161:aa5281ff4a02 246
AnnaBridge 161:aa5281ff4a02 247 base->PR = (base->PR & ~GPT_PR_PRESCALER_MASK) | GPT_PR_PRESCALER(divider - 1);
AnnaBridge 161:aa5281ff4a02 248 }
AnnaBridge 161:aa5281ff4a02 249
AnnaBridge 161:aa5281ff4a02 250 /*!
AnnaBridge 161:aa5281ff4a02 251 * @brief Get clock divider in GPT module.
AnnaBridge 161:aa5281ff4a02 252 *
AnnaBridge 161:aa5281ff4a02 253 * @param base GPT peripheral base address.
AnnaBridge 161:aa5281ff4a02 254 * @return clock divider in GPT module (1-4096).
AnnaBridge 161:aa5281ff4a02 255 */
AnnaBridge 161:aa5281ff4a02 256 static inline uint32_t GPT_GetClockDivider(GPT_Type *base)
AnnaBridge 161:aa5281ff4a02 257 {
AnnaBridge 161:aa5281ff4a02 258 return ((base->PR & GPT_PR_PRESCALER_MASK) >> GPT_PR_PRESCALER_SHIFT) + 1;
AnnaBridge 161:aa5281ff4a02 259 }
AnnaBridge 161:aa5281ff4a02 260
AnnaBridge 161:aa5281ff4a02 261 /*!
AnnaBridge 161:aa5281ff4a02 262 * @brief OSC 24M pre-scaler before selected by clock source.
AnnaBridge 161:aa5281ff4a02 263 *
AnnaBridge 161:aa5281ff4a02 264 * @param base GPT peripheral base address.
AnnaBridge 161:aa5281ff4a02 265 * @param divider OSC Divider(1-16).
AnnaBridge 161:aa5281ff4a02 266 */
AnnaBridge 161:aa5281ff4a02 267 static inline void GPT_SetOscClockDivider(GPT_Type *base, uint32_t divider)
AnnaBridge 161:aa5281ff4a02 268 {
AnnaBridge 161:aa5281ff4a02 269 assert(divider - 1 <= (GPT_PR_PRESCALER24M_MASK >> GPT_PR_PRESCALER24M_SHIFT));
AnnaBridge 161:aa5281ff4a02 270
AnnaBridge 161:aa5281ff4a02 271 base->PR = (base->PR & ~GPT_PR_PRESCALER24M_MASK) | GPT_PR_PRESCALER24M(divider - 1);
AnnaBridge 161:aa5281ff4a02 272 }
AnnaBridge 161:aa5281ff4a02 273
AnnaBridge 161:aa5281ff4a02 274 /*!
AnnaBridge 161:aa5281ff4a02 275 * @brief Get OSC 24M clock divider in GPT module.
AnnaBridge 161:aa5281ff4a02 276 *
AnnaBridge 161:aa5281ff4a02 277 * @param base GPT peripheral base address.
AnnaBridge 161:aa5281ff4a02 278 * @return OSC clock divider in GPT module (1-16).
AnnaBridge 161:aa5281ff4a02 279 */
AnnaBridge 161:aa5281ff4a02 280 static inline uint32_t GPT_GetOscClockDivider(GPT_Type *base)
AnnaBridge 161:aa5281ff4a02 281 {
AnnaBridge 161:aa5281ff4a02 282 return ((base->PR & GPT_PR_PRESCALER24M_MASK) >> GPT_PR_PRESCALER24M_SHIFT) + 1;
AnnaBridge 161:aa5281ff4a02 283 }
AnnaBridge 161:aa5281ff4a02 284
AnnaBridge 161:aa5281ff4a02 285 /*! @}*/
AnnaBridge 161:aa5281ff4a02 286
AnnaBridge 161:aa5281ff4a02 287 /*!
AnnaBridge 161:aa5281ff4a02 288 * @name Timer Start and Stop
AnnaBridge 161:aa5281ff4a02 289 * @{
AnnaBridge 161:aa5281ff4a02 290 */
AnnaBridge 161:aa5281ff4a02 291 /*!
AnnaBridge 161:aa5281ff4a02 292 * @brief Start GPT timer.
AnnaBridge 161:aa5281ff4a02 293 *
AnnaBridge 161:aa5281ff4a02 294 * @param base GPT peripheral base address.
AnnaBridge 161:aa5281ff4a02 295 */
AnnaBridge 161:aa5281ff4a02 296 static inline void GPT_StartTimer(GPT_Type *base)
AnnaBridge 161:aa5281ff4a02 297 {
AnnaBridge 161:aa5281ff4a02 298 base->CR |= GPT_CR_EN_MASK;
AnnaBridge 161:aa5281ff4a02 299 }
AnnaBridge 161:aa5281ff4a02 300
AnnaBridge 161:aa5281ff4a02 301 /*!
AnnaBridge 161:aa5281ff4a02 302 * @brief Stop GPT timer.
AnnaBridge 161:aa5281ff4a02 303 *
AnnaBridge 161:aa5281ff4a02 304 * @param base GPT peripheral base address.
AnnaBridge 161:aa5281ff4a02 305 */
AnnaBridge 161:aa5281ff4a02 306 static inline void GPT_StopTimer(GPT_Type *base)
AnnaBridge 161:aa5281ff4a02 307 {
AnnaBridge 161:aa5281ff4a02 308 base->CR &= ~GPT_CR_EN_MASK;
AnnaBridge 161:aa5281ff4a02 309 }
AnnaBridge 161:aa5281ff4a02 310
AnnaBridge 161:aa5281ff4a02 311 /*!
AnnaBridge 161:aa5281ff4a02 312 * @name Read the timer period
AnnaBridge 161:aa5281ff4a02 313 * @{
AnnaBridge 161:aa5281ff4a02 314 */
AnnaBridge 161:aa5281ff4a02 315
AnnaBridge 161:aa5281ff4a02 316 /*!
AnnaBridge 161:aa5281ff4a02 317 * @brief Reads the current GPT counting value.
AnnaBridge 161:aa5281ff4a02 318 *
AnnaBridge 161:aa5281ff4a02 319 * @param base GPT peripheral base address.
AnnaBridge 161:aa5281ff4a02 320 * @return Current GPT counter value.
AnnaBridge 161:aa5281ff4a02 321 */
AnnaBridge 161:aa5281ff4a02 322 static inline uint32_t GPT_GetCurrentTimerCount(GPT_Type *base)
AnnaBridge 161:aa5281ff4a02 323 {
AnnaBridge 161:aa5281ff4a02 324 return base->CNT;
AnnaBridge 161:aa5281ff4a02 325 }
AnnaBridge 161:aa5281ff4a02 326
AnnaBridge 161:aa5281ff4a02 327 /*@}*/
AnnaBridge 161:aa5281ff4a02 328
AnnaBridge 161:aa5281ff4a02 329 /*!
AnnaBridge 161:aa5281ff4a02 330 * @name GPT Input/Output Signal Control
AnnaBridge 161:aa5281ff4a02 331 * @{
AnnaBridge 161:aa5281ff4a02 332 */
AnnaBridge 161:aa5281ff4a02 333
AnnaBridge 161:aa5281ff4a02 334 /*!
AnnaBridge 161:aa5281ff4a02 335 * @brief Set GPT operation mode of input capture channel.
AnnaBridge 161:aa5281ff4a02 336 *
AnnaBridge 161:aa5281ff4a02 337 * @param base GPT peripheral base address.
AnnaBridge 161:aa5281ff4a02 338 * @param channel GPT capture channel (see @ref gpt_input_capture_channel_t typedef enumeration).
AnnaBridge 161:aa5281ff4a02 339 * @param mode GPT input capture operation mode (see @ref gpt_input_operation_mode_t typedef enumeration).
AnnaBridge 161:aa5281ff4a02 340 */
AnnaBridge 161:aa5281ff4a02 341 static inline void GPT_SetInputOperationMode(GPT_Type *base,
AnnaBridge 161:aa5281ff4a02 342 gpt_input_capture_channel_t channel,
AnnaBridge 161:aa5281ff4a02 343 gpt_input_operation_mode_t mode)
AnnaBridge 161:aa5281ff4a02 344 {
AnnaBridge 161:aa5281ff4a02 345 assert(channel <= kGPT_InputCapture_Channel2);
AnnaBridge 161:aa5281ff4a02 346
AnnaBridge 161:aa5281ff4a02 347 base->CR = (base->CR & ~(GPT_CR_IM1_MASK << (channel * 2))) | (GPT_CR_IM1(mode) << (channel * 2));
AnnaBridge 161:aa5281ff4a02 348 }
AnnaBridge 161:aa5281ff4a02 349
AnnaBridge 161:aa5281ff4a02 350 /*!
AnnaBridge 161:aa5281ff4a02 351 * @brief Get GPT operation mode of input capture channel.
AnnaBridge 161:aa5281ff4a02 352 *
AnnaBridge 161:aa5281ff4a02 353 * @param base GPT peripheral base address.
AnnaBridge 161:aa5281ff4a02 354 * @param channel GPT capture channel (see @ref gpt_input_capture_channel_t typedef enumeration).
AnnaBridge 161:aa5281ff4a02 355 * @return GPT input capture operation mode (see @ref gpt_input_operation_mode_t typedef enumeration).
AnnaBridge 161:aa5281ff4a02 356 */
AnnaBridge 161:aa5281ff4a02 357 static inline gpt_input_operation_mode_t GPT_GetInputOperationMode(GPT_Type *base, gpt_input_capture_channel_t channel)
AnnaBridge 161:aa5281ff4a02 358 {
AnnaBridge 161:aa5281ff4a02 359 assert(channel <= kGPT_InputCapture_Channel2);
AnnaBridge 161:aa5281ff4a02 360
AnnaBridge 161:aa5281ff4a02 361 return (gpt_input_operation_mode_t)((base->CR >> (GPT_CR_IM1_SHIFT + channel * 2)) &
AnnaBridge 161:aa5281ff4a02 362 (GPT_CR_IM1_MASK >> GPT_CR_IM1_SHIFT));
AnnaBridge 161:aa5281ff4a02 363 }
AnnaBridge 161:aa5281ff4a02 364
AnnaBridge 161:aa5281ff4a02 365 /*!
AnnaBridge 161:aa5281ff4a02 366 * @brief Get GPT input capture value of certain channel.
AnnaBridge 161:aa5281ff4a02 367 *
AnnaBridge 161:aa5281ff4a02 368 * @param base GPT peripheral base address.
AnnaBridge 161:aa5281ff4a02 369 * @param channel GPT capture channel (see @ref gpt_input_capture_channel_t typedef enumeration).
AnnaBridge 161:aa5281ff4a02 370 * @return GPT input capture value.
AnnaBridge 161:aa5281ff4a02 371 */
AnnaBridge 161:aa5281ff4a02 372 static inline uint32_t GPT_GetInputCaptureValue(GPT_Type *base, gpt_input_capture_channel_t channel)
AnnaBridge 161:aa5281ff4a02 373 {
AnnaBridge 161:aa5281ff4a02 374 assert(channel <= kGPT_InputCapture_Channel2);
AnnaBridge 161:aa5281ff4a02 375
AnnaBridge 161:aa5281ff4a02 376 return *(&base->ICR[0] + channel);
AnnaBridge 161:aa5281ff4a02 377 }
AnnaBridge 161:aa5281ff4a02 378
AnnaBridge 161:aa5281ff4a02 379 /*!
AnnaBridge 161:aa5281ff4a02 380 * @brief Set GPT operation mode of output compare channel.
AnnaBridge 161:aa5281ff4a02 381 *
AnnaBridge 161:aa5281ff4a02 382 * @param base GPT peripheral base address.
AnnaBridge 161:aa5281ff4a02 383 * @param channel GPT output compare channel (see @ref gpt_output_compare_channel_t typedef enumeration).
AnnaBridge 161:aa5281ff4a02 384 * @param mode GPT output operation mode (see @ref gpt_output_operation_mode_t typedef enumeration).
AnnaBridge 161:aa5281ff4a02 385 */
AnnaBridge 161:aa5281ff4a02 386 static inline void GPT_SetOutputOperationMode(GPT_Type *base,
AnnaBridge 161:aa5281ff4a02 387 gpt_output_compare_channel_t channel,
AnnaBridge 161:aa5281ff4a02 388 gpt_output_operation_mode_t mode)
AnnaBridge 161:aa5281ff4a02 389 {
AnnaBridge 161:aa5281ff4a02 390 assert(channel <= kGPT_OutputCompare_Channel3);
AnnaBridge 161:aa5281ff4a02 391
AnnaBridge 161:aa5281ff4a02 392 base->CR = (base->CR & ~(GPT_CR_OM1_MASK << (channel * 3))) | (GPT_CR_OM1(mode) << (channel * 3));
AnnaBridge 161:aa5281ff4a02 393 }
AnnaBridge 161:aa5281ff4a02 394
AnnaBridge 161:aa5281ff4a02 395 /*!
AnnaBridge 161:aa5281ff4a02 396 * @brief Get GPT operation mode of output compare channel.
AnnaBridge 161:aa5281ff4a02 397 *
AnnaBridge 161:aa5281ff4a02 398 * @param base GPT peripheral base address.
AnnaBridge 161:aa5281ff4a02 399 * @param channel GPT output compare channel (see @ref gpt_output_compare_channel_t typedef enumeration).
AnnaBridge 161:aa5281ff4a02 400 * @return GPT output operation mode (see @ref gpt_output_operation_mode_t typedef enumeration).
AnnaBridge 161:aa5281ff4a02 401 */
AnnaBridge 161:aa5281ff4a02 402 static inline gpt_output_operation_mode_t GPT_GetOutputOperationMode(GPT_Type *base,
AnnaBridge 161:aa5281ff4a02 403 gpt_output_compare_channel_t channel)
AnnaBridge 161:aa5281ff4a02 404 {
AnnaBridge 161:aa5281ff4a02 405 assert(channel <= kGPT_OutputCompare_Channel3);
AnnaBridge 161:aa5281ff4a02 406
AnnaBridge 161:aa5281ff4a02 407 return (gpt_output_operation_mode_t)((base->CR >> (GPT_CR_OM1_SHIFT + channel * 3)) &
AnnaBridge 161:aa5281ff4a02 408 (GPT_CR_OM1_MASK >> GPT_CR_OM1_SHIFT));
AnnaBridge 161:aa5281ff4a02 409 }
AnnaBridge 161:aa5281ff4a02 410
AnnaBridge 161:aa5281ff4a02 411 /*!
AnnaBridge 161:aa5281ff4a02 412 * @brief Set GPT output compare value of output compare channel.
AnnaBridge 161:aa5281ff4a02 413 *
AnnaBridge 161:aa5281ff4a02 414 * @param base GPT peripheral base address.
AnnaBridge 161:aa5281ff4a02 415 * @param channel GPT output compare channel (see @ref gpt_output_compare_channel_t typedef enumeration).
AnnaBridge 161:aa5281ff4a02 416 * @param value GPT output compare value.
AnnaBridge 161:aa5281ff4a02 417 */
AnnaBridge 161:aa5281ff4a02 418 static inline void GPT_SetOutputCompareValue(GPT_Type *base, gpt_output_compare_channel_t channel, uint32_t value)
AnnaBridge 161:aa5281ff4a02 419 {
AnnaBridge 161:aa5281ff4a02 420 assert(channel <= kGPT_OutputCompare_Channel3);
AnnaBridge 161:aa5281ff4a02 421
AnnaBridge 161:aa5281ff4a02 422 *(&base->OCR[0] + channel) = value;
AnnaBridge 161:aa5281ff4a02 423 }
AnnaBridge 161:aa5281ff4a02 424
AnnaBridge 161:aa5281ff4a02 425 /*!
AnnaBridge 161:aa5281ff4a02 426 * @brief Get GPT output compare value of output compare channel.
AnnaBridge 161:aa5281ff4a02 427 *
AnnaBridge 161:aa5281ff4a02 428 * @param base GPT peripheral base address.
AnnaBridge 161:aa5281ff4a02 429 * @param channel GPT output compare channel (see @ref gpt_output_compare_channel_t typedef enumeration).
AnnaBridge 161:aa5281ff4a02 430 * @return GPT output compare value.
AnnaBridge 161:aa5281ff4a02 431 */
AnnaBridge 161:aa5281ff4a02 432 static inline uint32_t GPT_GetOutputCompareValue(GPT_Type *base, gpt_output_compare_channel_t channel)
AnnaBridge 161:aa5281ff4a02 433 {
AnnaBridge 161:aa5281ff4a02 434 assert(channel <= kGPT_OutputCompare_Channel3);
AnnaBridge 161:aa5281ff4a02 435
AnnaBridge 161:aa5281ff4a02 436 return *(&base->OCR[0] + channel);
AnnaBridge 161:aa5281ff4a02 437 }
AnnaBridge 161:aa5281ff4a02 438
AnnaBridge 161:aa5281ff4a02 439 /*!
AnnaBridge 161:aa5281ff4a02 440 * @brief Force GPT output action on output compare channel, ignoring comparator.
AnnaBridge 161:aa5281ff4a02 441 *
AnnaBridge 161:aa5281ff4a02 442 * @param base GPT peripheral base address.
AnnaBridge 161:aa5281ff4a02 443 * @param channel GPT output compare channel (see @ref gpt_output_compare_channel_t typedef enumeration).
AnnaBridge 161:aa5281ff4a02 444 */
AnnaBridge 161:aa5281ff4a02 445 static inline void GPT_ForceOutput(GPT_Type *base, gpt_output_compare_channel_t channel)
AnnaBridge 161:aa5281ff4a02 446 {
AnnaBridge 161:aa5281ff4a02 447 assert(channel <= kGPT_OutputCompare_Channel3);
AnnaBridge 161:aa5281ff4a02 448
AnnaBridge 161:aa5281ff4a02 449 base->CR |= (GPT_CR_FO1_MASK << channel);
AnnaBridge 161:aa5281ff4a02 450 }
AnnaBridge 161:aa5281ff4a02 451
AnnaBridge 161:aa5281ff4a02 452 /*@}*/
AnnaBridge 161:aa5281ff4a02 453
AnnaBridge 161:aa5281ff4a02 454 /*!
AnnaBridge 161:aa5281ff4a02 455 * @name GPT Interrupt and Status Interface
AnnaBridge 161:aa5281ff4a02 456 * @{
AnnaBridge 161:aa5281ff4a02 457 */
AnnaBridge 161:aa5281ff4a02 458
AnnaBridge 161:aa5281ff4a02 459 /*!
AnnaBridge 161:aa5281ff4a02 460 * @brief Enables the selected GPT interrupts.
AnnaBridge 161:aa5281ff4a02 461 *
AnnaBridge 161:aa5281ff4a02 462 * @param base GPT peripheral base address.
AnnaBridge 161:aa5281ff4a02 463 * @param mask The interrupts to enable. This is a logical OR of members of the
AnnaBridge 161:aa5281ff4a02 464 * enumeration ::gpt_interrupt_enable_t
AnnaBridge 161:aa5281ff4a02 465 */
AnnaBridge 161:aa5281ff4a02 466 static inline void GPT_EnableInterrupts(GPT_Type *base, uint32_t mask)
AnnaBridge 161:aa5281ff4a02 467 {
AnnaBridge 161:aa5281ff4a02 468 base->IR |= mask;
AnnaBridge 161:aa5281ff4a02 469 }
AnnaBridge 161:aa5281ff4a02 470
AnnaBridge 161:aa5281ff4a02 471 /*!
AnnaBridge 161:aa5281ff4a02 472 * @brief Disables the selected GPT interrupts.
AnnaBridge 161:aa5281ff4a02 473 *
AnnaBridge 161:aa5281ff4a02 474 * @param base GPT peripheral base address
AnnaBridge 161:aa5281ff4a02 475 * @param mask The interrupts to disable. This is a logical OR of members of the
AnnaBridge 161:aa5281ff4a02 476 * enumeration ::gpt_interrupt_enable_t
AnnaBridge 161:aa5281ff4a02 477 */
AnnaBridge 161:aa5281ff4a02 478 static inline void GPT_DisableInterrupts(GPT_Type *base, uint32_t mask)
AnnaBridge 161:aa5281ff4a02 479 {
AnnaBridge 161:aa5281ff4a02 480 base->IR &= ~mask;
AnnaBridge 161:aa5281ff4a02 481 }
AnnaBridge 161:aa5281ff4a02 482
AnnaBridge 161:aa5281ff4a02 483 /*!
AnnaBridge 161:aa5281ff4a02 484 * @brief Gets the enabled GPT interrupts.
AnnaBridge 161:aa5281ff4a02 485 *
AnnaBridge 161:aa5281ff4a02 486 * @param base GPT peripheral base address
AnnaBridge 161:aa5281ff4a02 487 *
AnnaBridge 161:aa5281ff4a02 488 * @return The enabled interrupts. This is the logical OR of members of the
AnnaBridge 161:aa5281ff4a02 489 * enumeration ::gpt_interrupt_enable_t
AnnaBridge 161:aa5281ff4a02 490 */
AnnaBridge 161:aa5281ff4a02 491 static inline uint32_t GPT_GetEnabledInterrupts(GPT_Type *base)
AnnaBridge 161:aa5281ff4a02 492 {
AnnaBridge 161:aa5281ff4a02 493 return (base->IR & (GPT_IR_OF1IE_MASK | GPT_IR_OF2IE_MASK | GPT_IR_OF3IE_MASK | GPT_IR_IF1IE_MASK |
AnnaBridge 161:aa5281ff4a02 494 GPT_IR_IF2IE_MASK | GPT_IR_ROVIE_MASK));
AnnaBridge 161:aa5281ff4a02 495 }
AnnaBridge 161:aa5281ff4a02 496
AnnaBridge 161:aa5281ff4a02 497 /*!
AnnaBridge 161:aa5281ff4a02 498 * @name Status Interface
AnnaBridge 161:aa5281ff4a02 499 * @{
AnnaBridge 161:aa5281ff4a02 500 */
AnnaBridge 161:aa5281ff4a02 501
AnnaBridge 161:aa5281ff4a02 502 /*!
AnnaBridge 161:aa5281ff4a02 503 * @brief Get GPT status flags.
AnnaBridge 161:aa5281ff4a02 504 *
AnnaBridge 161:aa5281ff4a02 505 * @param base GPT peripheral base address.
AnnaBridge 161:aa5281ff4a02 506 * @param flags GPT status flag mask (see @ref gpt_status_flag_t for bit definition).
AnnaBridge 161:aa5281ff4a02 507 * @return GPT status, each bit represents one status flag.
AnnaBridge 161:aa5281ff4a02 508 */
AnnaBridge 161:aa5281ff4a02 509 static inline uint32_t GPT_GetStatusFlags(GPT_Type *base, gpt_status_flag_t flags)
AnnaBridge 161:aa5281ff4a02 510 {
AnnaBridge 161:aa5281ff4a02 511 return base->SR & flags;
AnnaBridge 161:aa5281ff4a02 512 }
AnnaBridge 161:aa5281ff4a02 513
AnnaBridge 161:aa5281ff4a02 514 /*!
AnnaBridge 161:aa5281ff4a02 515 * @brief Clears the GPT status flags.
AnnaBridge 161:aa5281ff4a02 516 *
AnnaBridge 161:aa5281ff4a02 517 * @param base GPT peripheral base address.
AnnaBridge 161:aa5281ff4a02 518 * @param flags GPT status flag mask (see @ref gpt_status_flag_t for bit definition).
AnnaBridge 161:aa5281ff4a02 519 */
AnnaBridge 161:aa5281ff4a02 520 static inline void GPT_ClearStatusFlags(GPT_Type *base, gpt_status_flag_t flags)
AnnaBridge 161:aa5281ff4a02 521 {
AnnaBridge 161:aa5281ff4a02 522 base->SR = flags;
AnnaBridge 161:aa5281ff4a02 523 }
AnnaBridge 161:aa5281ff4a02 524
AnnaBridge 161:aa5281ff4a02 525 /*@}*/
AnnaBridge 161:aa5281ff4a02 526
AnnaBridge 161:aa5281ff4a02 527 #if defined(__cplusplus)
AnnaBridge 161:aa5281ff4a02 528 }
AnnaBridge 161:aa5281ff4a02 529 #endif
AnnaBridge 161:aa5281ff4a02 530
AnnaBridge 161:aa5281ff4a02 531 /*! @}*/
AnnaBridge 161:aa5281ff4a02 532
AnnaBridge 161:aa5281ff4a02 533 #endif /* _FSL_GPT_H_ */