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 171:3a7713b1edbc 1 /*
AnnaBridge 171:3a7713b1edbc 2 * The Clear BSD License
AnnaBridge 171:3a7713b1edbc 3 * Copyright (c) 2016, Freescale Semiconductor, Inc.
AnnaBridge 171:3a7713b1edbc 4 * Copyright 2016-2017 NXP
AnnaBridge 171:3a7713b1edbc 5 * All rights reserved.
AnnaBridge 171:3a7713b1edbc 6 *
AnnaBridge 171:3a7713b1edbc 7 * Redistribution and use in source and binary forms, with or without modification,
AnnaBridge 171:3a7713b1edbc 8 * are permitted (subject to the limitations in the disclaimer below) provided
AnnaBridge 171:3a7713b1edbc 9 * that the following conditions are met:
AnnaBridge 171:3a7713b1edbc 10 *
AnnaBridge 171:3a7713b1edbc 11 * o Redistributions of source code must retain the above copyright notice, this list
AnnaBridge 171:3a7713b1edbc 12 * of conditions and the following disclaimer.
AnnaBridge 171:3a7713b1edbc 13 *
AnnaBridge 171:3a7713b1edbc 14 * o Redistributions in binary form must reproduce the above copyright notice, this
AnnaBridge 171:3a7713b1edbc 15 * list of conditions and the following disclaimer in the documentation and/or
AnnaBridge 171:3a7713b1edbc 16 * other materials provided with the distribution.
AnnaBridge 171:3a7713b1edbc 17 *
AnnaBridge 171:3a7713b1edbc 18 * o Neither the name of the copyright holder nor the names of its
AnnaBridge 171:3a7713b1edbc 19 * contributors may be used to endorse or promote products derived from this
AnnaBridge 171:3a7713b1edbc 20 * software without specific prior written permission.
AnnaBridge 171:3a7713b1edbc 21 *
AnnaBridge 171:3a7713b1edbc 22 * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
AnnaBridge 171:3a7713b1edbc 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
AnnaBridge 171:3a7713b1edbc 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
AnnaBridge 171:3a7713b1edbc 25 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
AnnaBridge 171:3a7713b1edbc 26 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
AnnaBridge 171:3a7713b1edbc 27 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
AnnaBridge 171:3a7713b1edbc 28 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
AnnaBridge 171:3a7713b1edbc 29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
AnnaBridge 171:3a7713b1edbc 30 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
AnnaBridge 171:3a7713b1edbc 31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
AnnaBridge 171:3a7713b1edbc 32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
AnnaBridge 171:3a7713b1edbc 33 */
AnnaBridge 171:3a7713b1edbc 34 #ifndef _FSL_SCTIMER_H_
AnnaBridge 171:3a7713b1edbc 35 #define _FSL_SCTIMER_H_
AnnaBridge 171:3a7713b1edbc 36
AnnaBridge 171:3a7713b1edbc 37 #include "fsl_common.h"
AnnaBridge 171:3a7713b1edbc 38
AnnaBridge 171:3a7713b1edbc 39 /*!
AnnaBridge 171:3a7713b1edbc 40 * @addtogroup sctimer
AnnaBridge 171:3a7713b1edbc 41 * @{
AnnaBridge 171:3a7713b1edbc 42 */
AnnaBridge 171:3a7713b1edbc 43
AnnaBridge 171:3a7713b1edbc 44 /*! @file */
AnnaBridge 171:3a7713b1edbc 45
AnnaBridge 171:3a7713b1edbc 46 /*******************************************************************************
AnnaBridge 171:3a7713b1edbc 47 * Definitions
AnnaBridge 171:3a7713b1edbc 48 ******************************************************************************/
AnnaBridge 171:3a7713b1edbc 49
AnnaBridge 171:3a7713b1edbc 50 /*! @name Driver version */
AnnaBridge 171:3a7713b1edbc 51 /*@{*/
AnnaBridge 171:3a7713b1edbc 52 #define FSL_SCTIMER_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) /*!< Version 2.0.0 */
AnnaBridge 171:3a7713b1edbc 53 /*@}*/
AnnaBridge 171:3a7713b1edbc 54
AnnaBridge 171:3a7713b1edbc 55 /*! @brief SCTimer PWM operation modes */
AnnaBridge 171:3a7713b1edbc 56 typedef enum _sctimer_pwm_mode
AnnaBridge 171:3a7713b1edbc 57 {
AnnaBridge 171:3a7713b1edbc 58 kSCTIMER_EdgeAlignedPwm = 0U, /*!< Edge-aligned PWM */
AnnaBridge 171:3a7713b1edbc 59 kSCTIMER_CenterAlignedPwm /*!< Center-aligned PWM */
AnnaBridge 171:3a7713b1edbc 60 } sctimer_pwm_mode_t;
AnnaBridge 171:3a7713b1edbc 61
AnnaBridge 171:3a7713b1edbc 62 /*! @brief SCTimer counters when working as two independent 16-bit counters */
AnnaBridge 171:3a7713b1edbc 63 typedef enum _sctimer_counter
AnnaBridge 171:3a7713b1edbc 64 {
AnnaBridge 171:3a7713b1edbc 65 kSCTIMER_Counter_L = 0U, /*!< Counter L */
AnnaBridge 171:3a7713b1edbc 66 kSCTIMER_Counter_H /*!< Counter H */
AnnaBridge 171:3a7713b1edbc 67 } sctimer_counter_t;
AnnaBridge 171:3a7713b1edbc 68
AnnaBridge 171:3a7713b1edbc 69 /*! @brief List of SCTimer input pins */
AnnaBridge 171:3a7713b1edbc 70 typedef enum _sctimer_input
AnnaBridge 171:3a7713b1edbc 71 {
AnnaBridge 171:3a7713b1edbc 72 kSCTIMER_Input_0 = 0U, /*!< SCTIMER input 0 */
AnnaBridge 171:3a7713b1edbc 73 kSCTIMER_Input_1, /*!< SCTIMER input 1 */
AnnaBridge 171:3a7713b1edbc 74 kSCTIMER_Input_2, /*!< SCTIMER input 2 */
AnnaBridge 171:3a7713b1edbc 75 kSCTIMER_Input_3, /*!< SCTIMER input 3 */
AnnaBridge 171:3a7713b1edbc 76 kSCTIMER_Input_4, /*!< SCTIMER input 4 */
AnnaBridge 171:3a7713b1edbc 77 kSCTIMER_Input_5, /*!< SCTIMER input 5 */
AnnaBridge 171:3a7713b1edbc 78 kSCTIMER_Input_6, /*!< SCTIMER input 6 */
AnnaBridge 171:3a7713b1edbc 79 kSCTIMER_Input_7 /*!< SCTIMER input 7 */
AnnaBridge 171:3a7713b1edbc 80 } sctimer_input_t;
AnnaBridge 171:3a7713b1edbc 81
AnnaBridge 171:3a7713b1edbc 82 /*! @brief List of SCTimer output pins */
AnnaBridge 171:3a7713b1edbc 83 typedef enum _sctimer_out
AnnaBridge 171:3a7713b1edbc 84 {
AnnaBridge 171:3a7713b1edbc 85 kSCTIMER_Out_0 = 0U, /*!< SCTIMER output 0*/
AnnaBridge 171:3a7713b1edbc 86 kSCTIMER_Out_1, /*!< SCTIMER output 1 */
AnnaBridge 171:3a7713b1edbc 87 kSCTIMER_Out_2, /*!< SCTIMER output 2 */
AnnaBridge 171:3a7713b1edbc 88 kSCTIMER_Out_3, /*!< SCTIMER output 3 */
AnnaBridge 171:3a7713b1edbc 89 kSCTIMER_Out_4, /*!< SCTIMER output 4 */
AnnaBridge 171:3a7713b1edbc 90 kSCTIMER_Out_5, /*!< SCTIMER output 5 */
AnnaBridge 171:3a7713b1edbc 91 kSCTIMER_Out_6, /*!< SCTIMER output 6 */
AnnaBridge 171:3a7713b1edbc 92 kSCTIMER_Out_7 /*!< SCTIMER output 7 */
AnnaBridge 171:3a7713b1edbc 93 } sctimer_out_t;
AnnaBridge 171:3a7713b1edbc 94
AnnaBridge 171:3a7713b1edbc 95 /*! @brief SCTimer PWM output pulse mode: high-true, low-true or no output */
AnnaBridge 171:3a7713b1edbc 96 typedef enum _sctimer_pwm_level_select
AnnaBridge 171:3a7713b1edbc 97 {
AnnaBridge 171:3a7713b1edbc 98 kSCTIMER_LowTrue = 0U, /*!< Low true pulses */
AnnaBridge 171:3a7713b1edbc 99 kSCTIMER_HighTrue /*!< High true pulses */
AnnaBridge 171:3a7713b1edbc 100 } sctimer_pwm_level_select_t;
AnnaBridge 171:3a7713b1edbc 101
AnnaBridge 171:3a7713b1edbc 102 /*! @brief Options to configure a SCTimer PWM signal */
AnnaBridge 171:3a7713b1edbc 103 typedef struct _sctimer_pwm_signal_param
AnnaBridge 171:3a7713b1edbc 104 {
AnnaBridge 171:3a7713b1edbc 105 sctimer_out_t output; /*!< The output pin to use to generate the PWM signal */
AnnaBridge 171:3a7713b1edbc 106 sctimer_pwm_level_select_t level; /*!< PWM output active level select. */
AnnaBridge 171:3a7713b1edbc 107 uint8_t dutyCyclePercent; /*!< PWM pulse width, value should be between 1 to 100
AnnaBridge 171:3a7713b1edbc 108 100 = always active signal (100% duty cycle).*/
AnnaBridge 171:3a7713b1edbc 109 } sctimer_pwm_signal_param_t;
AnnaBridge 171:3a7713b1edbc 110
AnnaBridge 171:3a7713b1edbc 111 /*! @brief SCTimer clock mode options */
AnnaBridge 171:3a7713b1edbc 112 typedef enum _sctimer_clock_mode
AnnaBridge 171:3a7713b1edbc 113 {
AnnaBridge 171:3a7713b1edbc 114 kSCTIMER_System_ClockMode = 0U, /*!< System Clock Mode */
AnnaBridge 171:3a7713b1edbc 115 kSCTIMER_Sampled_ClockMode, /*!< Sampled System Clock Mode */
AnnaBridge 171:3a7713b1edbc 116 kSCTIMER_Input_ClockMode, /*!< SCT Input Clock Mode */
AnnaBridge 171:3a7713b1edbc 117 kSCTIMER_Asynchronous_ClockMode /*!< Asynchronous Mode */
AnnaBridge 171:3a7713b1edbc 118 } sctimer_clock_mode_t;
AnnaBridge 171:3a7713b1edbc 119
AnnaBridge 171:3a7713b1edbc 120 /*! @brief SCTimer clock select options */
AnnaBridge 171:3a7713b1edbc 121 typedef enum _sctimer_clock_select
AnnaBridge 171:3a7713b1edbc 122 {
AnnaBridge 171:3a7713b1edbc 123 kSCTIMER_Clock_On_Rise_Input_0 = 0U, /*!< Rising edges on input 0 */
AnnaBridge 171:3a7713b1edbc 124 kSCTIMER_Clock_On_Fall_Input_0, /*!< Falling edges on input 0 */
AnnaBridge 171:3a7713b1edbc 125 kSCTIMER_Clock_On_Rise_Input_1, /*!< Rising edges on input 1 */
AnnaBridge 171:3a7713b1edbc 126 kSCTIMER_Clock_On_Fall_Input_1, /*!< Falling edges on input 1 */
AnnaBridge 171:3a7713b1edbc 127 kSCTIMER_Clock_On_Rise_Input_2, /*!< Rising edges on input 2 */
AnnaBridge 171:3a7713b1edbc 128 kSCTIMER_Clock_On_Fall_Input_2, /*!< Falling edges on input 2 */
AnnaBridge 171:3a7713b1edbc 129 kSCTIMER_Clock_On_Rise_Input_3, /*!< Rising edges on input 3 */
AnnaBridge 171:3a7713b1edbc 130 kSCTIMER_Clock_On_Fall_Input_3, /*!< Falling edges on input 3 */
AnnaBridge 171:3a7713b1edbc 131 kSCTIMER_Clock_On_Rise_Input_4, /*!< Rising edges on input 4 */
AnnaBridge 171:3a7713b1edbc 132 kSCTIMER_Clock_On_Fall_Input_4, /*!< Falling edges on input 4 */
AnnaBridge 171:3a7713b1edbc 133 kSCTIMER_Clock_On_Rise_Input_5, /*!< Rising edges on input 5 */
AnnaBridge 171:3a7713b1edbc 134 kSCTIMER_Clock_On_Fall_Input_5, /*!< Falling edges on input 5 */
AnnaBridge 171:3a7713b1edbc 135 kSCTIMER_Clock_On_Rise_Input_6, /*!< Rising edges on input 6 */
AnnaBridge 171:3a7713b1edbc 136 kSCTIMER_Clock_On_Fall_Input_6, /*!< Falling edges on input 6 */
AnnaBridge 171:3a7713b1edbc 137 kSCTIMER_Clock_On_Rise_Input_7, /*!< Rising edges on input 7 */
AnnaBridge 171:3a7713b1edbc 138 kSCTIMER_Clock_On_Fall_Input_7 /*!< Falling edges on input 7 */
AnnaBridge 171:3a7713b1edbc 139 } sctimer_clock_select_t;
AnnaBridge 171:3a7713b1edbc 140
AnnaBridge 171:3a7713b1edbc 141 /*!
AnnaBridge 171:3a7713b1edbc 142 * @brief SCTimer output conflict resolution options.
AnnaBridge 171:3a7713b1edbc 143 *
AnnaBridge 171:3a7713b1edbc 144 * Specifies what action should be taken if multiple events dictate that a given output should be
AnnaBridge 171:3a7713b1edbc 145 * both set and cleared at the same time
AnnaBridge 171:3a7713b1edbc 146 */
AnnaBridge 171:3a7713b1edbc 147 typedef enum _sctimer_conflict_resolution
AnnaBridge 171:3a7713b1edbc 148 {
AnnaBridge 171:3a7713b1edbc 149 kSCTIMER_ResolveNone = 0U, /*!< No change */
AnnaBridge 171:3a7713b1edbc 150 kSCTIMER_ResolveSet, /*!< Set output */
AnnaBridge 171:3a7713b1edbc 151 kSCTIMER_ResolveClear, /*!< Clear output */
AnnaBridge 171:3a7713b1edbc 152 kSCTIMER_ResolveToggle /*!< Toggle output */
AnnaBridge 171:3a7713b1edbc 153 } sctimer_conflict_resolution_t;
AnnaBridge 171:3a7713b1edbc 154
AnnaBridge 171:3a7713b1edbc 155 /*! @brief List of SCTimer event types */
AnnaBridge 171:3a7713b1edbc 156 typedef enum _sctimer_event
AnnaBridge 171:3a7713b1edbc 157 {
AnnaBridge 171:3a7713b1edbc 158 kSCTIMER_InputLowOrMatchEvent =
AnnaBridge 171:3a7713b1edbc 159 (0 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (0 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (0 << SCT_EVENT_CTRL_OUTSEL_SHIFT),
AnnaBridge 171:3a7713b1edbc 160 kSCTIMER_InputRiseOrMatchEvent =
AnnaBridge 171:3a7713b1edbc 161 (0 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (1 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (0 << SCT_EVENT_CTRL_OUTSEL_SHIFT),
AnnaBridge 171:3a7713b1edbc 162 kSCTIMER_InputFallOrMatchEvent =
AnnaBridge 171:3a7713b1edbc 163 (0 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (2 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (0 << SCT_EVENT_CTRL_OUTSEL_SHIFT),
AnnaBridge 171:3a7713b1edbc 164 kSCTIMER_InputHighOrMatchEvent =
AnnaBridge 171:3a7713b1edbc 165 (0 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (3 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (0 << SCT_EVENT_CTRL_OUTSEL_SHIFT),
AnnaBridge 171:3a7713b1edbc 166
AnnaBridge 171:3a7713b1edbc 167 kSCTIMER_MatchEventOnly =
AnnaBridge 171:3a7713b1edbc 168 (1 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (0 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (0 << SCT_EVENT_CTRL_OUTSEL_SHIFT),
AnnaBridge 171:3a7713b1edbc 169
AnnaBridge 171:3a7713b1edbc 170 kSCTIMER_InputLowEvent =
AnnaBridge 171:3a7713b1edbc 171 (2 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (0 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (0 << SCT_EVENT_CTRL_OUTSEL_SHIFT),
AnnaBridge 171:3a7713b1edbc 172 kSCTIMER_InputRiseEvent =
AnnaBridge 171:3a7713b1edbc 173 (2 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (1 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (0 << SCT_EVENT_CTRL_OUTSEL_SHIFT),
AnnaBridge 171:3a7713b1edbc 174 kSCTIMER_InputFallEvent =
AnnaBridge 171:3a7713b1edbc 175 (2 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (2 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (0 << SCT_EVENT_CTRL_OUTSEL_SHIFT),
AnnaBridge 171:3a7713b1edbc 176 kSCTIMER_InputHighEvent =
AnnaBridge 171:3a7713b1edbc 177 (2 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (3 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (0 << SCT_EVENT_CTRL_OUTSEL_SHIFT),
AnnaBridge 171:3a7713b1edbc 178
AnnaBridge 171:3a7713b1edbc 179 kSCTIMER_InputLowAndMatchEvent =
AnnaBridge 171:3a7713b1edbc 180 (3 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (0 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (0 << SCT_EVENT_CTRL_OUTSEL_SHIFT),
AnnaBridge 171:3a7713b1edbc 181 kSCTIMER_InputRiseAndMatchEvent =
AnnaBridge 171:3a7713b1edbc 182 (3 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (1 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (0 << SCT_EVENT_CTRL_OUTSEL_SHIFT),
AnnaBridge 171:3a7713b1edbc 183 kSCTIMER_InputFallAndMatchEvent =
AnnaBridge 171:3a7713b1edbc 184 (3 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (2 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (0 << SCT_EVENT_CTRL_OUTSEL_SHIFT),
AnnaBridge 171:3a7713b1edbc 185 kSCTIMER_InputHighAndMatchEvent =
AnnaBridge 171:3a7713b1edbc 186 (3 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (3 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (0 << SCT_EVENT_CTRL_OUTSEL_SHIFT),
AnnaBridge 171:3a7713b1edbc 187
AnnaBridge 171:3a7713b1edbc 188 kSCTIMER_OutputLowOrMatchEvent =
AnnaBridge 171:3a7713b1edbc 189 (0 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (0 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (1 << SCT_EVENT_CTRL_OUTSEL_SHIFT),
AnnaBridge 171:3a7713b1edbc 190 kSCTIMER_OutputRiseOrMatchEvent =
AnnaBridge 171:3a7713b1edbc 191 (0 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (1 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (1 << SCT_EVENT_CTRL_OUTSEL_SHIFT),
AnnaBridge 171:3a7713b1edbc 192 kSCTIMER_OutputFallOrMatchEvent =
AnnaBridge 171:3a7713b1edbc 193 (0 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (2 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (1 << SCT_EVENT_CTRL_OUTSEL_SHIFT),
AnnaBridge 171:3a7713b1edbc 194 kSCTIMER_OutputHighOrMatchEvent =
AnnaBridge 171:3a7713b1edbc 195 (0 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (3 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (1 << SCT_EVENT_CTRL_OUTSEL_SHIFT),
AnnaBridge 171:3a7713b1edbc 196
AnnaBridge 171:3a7713b1edbc 197 kSCTIMER_OutputLowEvent =
AnnaBridge 171:3a7713b1edbc 198 (2 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (0 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (1 << SCT_EVENT_CTRL_OUTSEL_SHIFT),
AnnaBridge 171:3a7713b1edbc 199 kSCTIMER_OutputRiseEvent =
AnnaBridge 171:3a7713b1edbc 200 (2 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (1 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (1 << SCT_EVENT_CTRL_OUTSEL_SHIFT),
AnnaBridge 171:3a7713b1edbc 201 kSCTIMER_OutputFallEvent =
AnnaBridge 171:3a7713b1edbc 202 (2 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (2 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (1 << SCT_EVENT_CTRL_OUTSEL_SHIFT),
AnnaBridge 171:3a7713b1edbc 203 kSCTIMER_OutputHighEvent =
AnnaBridge 171:3a7713b1edbc 204 (2 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (3 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (1 << SCT_EVENT_CTRL_OUTSEL_SHIFT),
AnnaBridge 171:3a7713b1edbc 205
AnnaBridge 171:3a7713b1edbc 206 kSCTIMER_OutputLowAndMatchEvent =
AnnaBridge 171:3a7713b1edbc 207 (3 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (0 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (1 << SCT_EVENT_CTRL_OUTSEL_SHIFT),
AnnaBridge 171:3a7713b1edbc 208 kSCTIMER_OutputRiseAndMatchEvent =
AnnaBridge 171:3a7713b1edbc 209 (3 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (1 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (1 << SCT_EVENT_CTRL_OUTSEL_SHIFT),
AnnaBridge 171:3a7713b1edbc 210 kSCTIMER_OutputFallAndMatchEvent =
AnnaBridge 171:3a7713b1edbc 211 (3 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (2 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (1 << SCT_EVENT_CTRL_OUTSEL_SHIFT),
AnnaBridge 171:3a7713b1edbc 212 kSCTIMER_OutputHighAndMatchEvent =
AnnaBridge 171:3a7713b1edbc 213 (3 << SCT_EVENT_CTRL_COMBMODE_SHIFT) + (3 << SCT_EVENT_CTRL_IOCOND_SHIFT) + (1 << SCT_EVENT_CTRL_OUTSEL_SHIFT)
AnnaBridge 171:3a7713b1edbc 214 } sctimer_event_t;
AnnaBridge 171:3a7713b1edbc 215
AnnaBridge 171:3a7713b1edbc 216 /*! @brief SCTimer callback typedef. */
AnnaBridge 171:3a7713b1edbc 217 typedef void (*sctimer_event_callback_t)(void);
AnnaBridge 171:3a7713b1edbc 218
AnnaBridge 171:3a7713b1edbc 219 /*! @brief List of SCTimer interrupts */
AnnaBridge 171:3a7713b1edbc 220 typedef enum _sctimer_interrupt_enable
AnnaBridge 171:3a7713b1edbc 221 {
AnnaBridge 171:3a7713b1edbc 222 kSCTIMER_Event0InterruptEnable = (1U << 0), /*!< Event 0 interrupt */
AnnaBridge 171:3a7713b1edbc 223 kSCTIMER_Event1InterruptEnable = (1U << 1), /*!< Event 1 interrupt */
AnnaBridge 171:3a7713b1edbc 224 kSCTIMER_Event2InterruptEnable = (1U << 2), /*!< Event 2 interrupt */
AnnaBridge 171:3a7713b1edbc 225 kSCTIMER_Event3InterruptEnable = (1U << 3), /*!< Event 3 interrupt */
AnnaBridge 171:3a7713b1edbc 226 kSCTIMER_Event4InterruptEnable = (1U << 4), /*!< Event 4 interrupt */
AnnaBridge 171:3a7713b1edbc 227 kSCTIMER_Event5InterruptEnable = (1U << 5), /*!< Event 5 interrupt */
AnnaBridge 171:3a7713b1edbc 228 kSCTIMER_Event6InterruptEnable = (1U << 6), /*!< Event 6 interrupt */
AnnaBridge 171:3a7713b1edbc 229 kSCTIMER_Event7InterruptEnable = (1U << 7), /*!< Event 7 interrupt */
AnnaBridge 171:3a7713b1edbc 230 kSCTIMER_Event8InterruptEnable = (1U << 8), /*!< Event 8 interrupt */
AnnaBridge 171:3a7713b1edbc 231 kSCTIMER_Event9InterruptEnable = (1U << 9), /*!< Event 9 interrupt */
AnnaBridge 171:3a7713b1edbc 232 kSCTIMER_Event10InterruptEnable = (1U << 10), /*!< Event 10 interrupt */
AnnaBridge 171:3a7713b1edbc 233 kSCTIMER_Event11InterruptEnable = (1U << 11), /*!< Event 11 interrupt */
AnnaBridge 171:3a7713b1edbc 234 kSCTIMER_Event12InterruptEnable = (1U << 12), /*!< Event 12 interrupt */
AnnaBridge 171:3a7713b1edbc 235 } sctimer_interrupt_enable_t;
AnnaBridge 171:3a7713b1edbc 236
AnnaBridge 171:3a7713b1edbc 237 /*! @brief List of SCTimer flags */
AnnaBridge 171:3a7713b1edbc 238 typedef enum _sctimer_status_flags
AnnaBridge 171:3a7713b1edbc 239 {
AnnaBridge 171:3a7713b1edbc 240 kSCTIMER_Event0Flag = (1U << 0), /*!< Event 0 Flag */
AnnaBridge 171:3a7713b1edbc 241 kSCTIMER_Event1Flag = (1U << 1), /*!< Event 1 Flag */
AnnaBridge 171:3a7713b1edbc 242 kSCTIMER_Event2Flag = (1U << 2), /*!< Event 2 Flag */
AnnaBridge 171:3a7713b1edbc 243 kSCTIMER_Event3Flag = (1U << 3), /*!< Event 3 Flag */
AnnaBridge 171:3a7713b1edbc 244 kSCTIMER_Event4Flag = (1U << 4), /*!< Event 4 Flag */
AnnaBridge 171:3a7713b1edbc 245 kSCTIMER_Event5Flag = (1U << 5), /*!< Event 5 Flag */
AnnaBridge 171:3a7713b1edbc 246 kSCTIMER_Event6Flag = (1U << 6), /*!< Event 6 Flag */
AnnaBridge 171:3a7713b1edbc 247 kSCTIMER_Event7Flag = (1U << 7), /*!< Event 7 Flag */
AnnaBridge 171:3a7713b1edbc 248 kSCTIMER_Event8Flag = (1U << 8), /*!< Event 8 Flag */
AnnaBridge 171:3a7713b1edbc 249 kSCTIMER_Event9Flag = (1U << 9), /*!< Event 9 Flag */
AnnaBridge 171:3a7713b1edbc 250 kSCTIMER_Event10Flag = (1U << 10), /*!< Event 10 Flag */
AnnaBridge 171:3a7713b1edbc 251 kSCTIMER_Event11Flag = (1U << 11), /*!< Event 11 Flag */
AnnaBridge 171:3a7713b1edbc 252 kSCTIMER_Event12Flag = (1U << 12), /*!< Event 12 Flag */
AnnaBridge 171:3a7713b1edbc 253 kSCTIMER_BusErrorLFlag =
AnnaBridge 171:3a7713b1edbc 254 (1U << SCT_CONFLAG_BUSERRL_SHIFT), /*!< Bus error due to write when L counter was not halted */
AnnaBridge 171:3a7713b1edbc 255 kSCTIMER_BusErrorHFlag =
AnnaBridge 171:3a7713b1edbc 256 (1U << SCT_CONFLAG_BUSERRH_SHIFT) /*!< Bus error due to write when H counter was not halted */
AnnaBridge 171:3a7713b1edbc 257 } sctimer_status_flags_t;
AnnaBridge 171:3a7713b1edbc 258
AnnaBridge 171:3a7713b1edbc 259 /*!
AnnaBridge 171:3a7713b1edbc 260 * @brief SCTimer configuration structure
AnnaBridge 171:3a7713b1edbc 261 *
AnnaBridge 171:3a7713b1edbc 262 * This structure holds the configuration settings for the SCTimer peripheral. To initialize this
AnnaBridge 171:3a7713b1edbc 263 * structure to reasonable defaults, call the SCTMR_GetDefaultConfig() function and pass a
AnnaBridge 171:3a7713b1edbc 264 * pointer to the configuration structure instance.
AnnaBridge 171:3a7713b1edbc 265 *
AnnaBridge 171:3a7713b1edbc 266 * The configuration structure can be made constant so as to reside in flash.
AnnaBridge 171:3a7713b1edbc 267 */
AnnaBridge 171:3a7713b1edbc 268 typedef struct _sctimer_config
AnnaBridge 171:3a7713b1edbc 269 {
AnnaBridge 171:3a7713b1edbc 270 bool enableCounterUnify; /*!< true: SCT operates as a unified 32-bit counter;
AnnaBridge 171:3a7713b1edbc 271 false: SCT operates as two 16-bit counters */
AnnaBridge 171:3a7713b1edbc 272 sctimer_clock_mode_t clockMode; /*!< SCT clock mode value */
AnnaBridge 171:3a7713b1edbc 273 sctimer_clock_select_t clockSelect; /*!< SCT clock select value */
AnnaBridge 171:3a7713b1edbc 274 bool enableBidirection_l; /*!< true: Up-down count mode for the L or unified counter
AnnaBridge 171:3a7713b1edbc 275 false: Up count mode only for the L or unified counter */
AnnaBridge 171:3a7713b1edbc 276 bool enableBidirection_h; /*!< true: Up-down count mode for the H or unified counter
AnnaBridge 171:3a7713b1edbc 277 false: Up count mode only for the H or unified counter.
AnnaBridge 171:3a7713b1edbc 278 This field is used only if the enableCounterUnify is set
AnnaBridge 171:3a7713b1edbc 279 to false */
AnnaBridge 171:3a7713b1edbc 280 uint8_t prescale_l; /*!< Prescale value to produce the L or unified counter clock */
AnnaBridge 171:3a7713b1edbc 281 uint8_t prescale_h; /*!< Prescale value to produce the H counter clock.
AnnaBridge 171:3a7713b1edbc 282 This field is used only if the enableCounterUnify is set
AnnaBridge 171:3a7713b1edbc 283 to false */
AnnaBridge 171:3a7713b1edbc 284 uint8_t outInitState; /*!< Defines the initial output value */
AnnaBridge 171:3a7713b1edbc 285 } sctimer_config_t;
AnnaBridge 171:3a7713b1edbc 286
AnnaBridge 171:3a7713b1edbc 287 /*******************************************************************************
AnnaBridge 171:3a7713b1edbc 288 * API
AnnaBridge 171:3a7713b1edbc 289 ******************************************************************************/
AnnaBridge 171:3a7713b1edbc 290
AnnaBridge 171:3a7713b1edbc 291 #if defined(__cplusplus)
AnnaBridge 171:3a7713b1edbc 292 extern "C" {
AnnaBridge 171:3a7713b1edbc 293 #endif
AnnaBridge 171:3a7713b1edbc 294
AnnaBridge 171:3a7713b1edbc 295 /*!
AnnaBridge 171:3a7713b1edbc 296 * @name Initialization and deinitialization
AnnaBridge 171:3a7713b1edbc 297 * @{
AnnaBridge 171:3a7713b1edbc 298 */
AnnaBridge 171:3a7713b1edbc 299
AnnaBridge 171:3a7713b1edbc 300 /*!
AnnaBridge 171:3a7713b1edbc 301 * @brief Ungates the SCTimer clock and configures the peripheral for basic operation.
AnnaBridge 171:3a7713b1edbc 302 *
AnnaBridge 171:3a7713b1edbc 303 * @note This API should be called at the beginning of the application using the SCTimer driver.
AnnaBridge 171:3a7713b1edbc 304 *
AnnaBridge 171:3a7713b1edbc 305 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 306 * @param config Pointer to the user configuration structure.
AnnaBridge 171:3a7713b1edbc 307 *
AnnaBridge 171:3a7713b1edbc 308 * @return kStatus_Success indicates success; Else indicates failure.
AnnaBridge 171:3a7713b1edbc 309 */
AnnaBridge 171:3a7713b1edbc 310 status_t SCTIMER_Init(SCT_Type *base, const sctimer_config_t *config);
AnnaBridge 171:3a7713b1edbc 311
AnnaBridge 171:3a7713b1edbc 312 /*!
AnnaBridge 171:3a7713b1edbc 313 * @brief Gates the SCTimer clock.
AnnaBridge 171:3a7713b1edbc 314 *
AnnaBridge 171:3a7713b1edbc 315 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 316 */
AnnaBridge 171:3a7713b1edbc 317 void SCTIMER_Deinit(SCT_Type *base);
AnnaBridge 171:3a7713b1edbc 318
AnnaBridge 171:3a7713b1edbc 319 /*!
AnnaBridge 171:3a7713b1edbc 320 * @brief Fills in the SCTimer configuration structure with the default settings.
AnnaBridge 171:3a7713b1edbc 321 *
AnnaBridge 171:3a7713b1edbc 322 * The default values are:
AnnaBridge 171:3a7713b1edbc 323 * @code
AnnaBridge 171:3a7713b1edbc 324 * config->enableCounterUnify = true;
AnnaBridge 171:3a7713b1edbc 325 * config->clockMode = kSCTIMER_System_ClockMode;
AnnaBridge 171:3a7713b1edbc 326 * config->clockSelect = kSCTIMER_Clock_On_Rise_Input_0;
AnnaBridge 171:3a7713b1edbc 327 * config->enableBidirection_l = false;
AnnaBridge 171:3a7713b1edbc 328 * config->enableBidirection_h = false;
AnnaBridge 171:3a7713b1edbc 329 * config->prescale_l = 0;
AnnaBridge 171:3a7713b1edbc 330 * config->prescale_h = 0;
AnnaBridge 171:3a7713b1edbc 331 * config->outInitState = 0;
AnnaBridge 171:3a7713b1edbc 332 * @endcode
AnnaBridge 171:3a7713b1edbc 333 * @param config Pointer to the user configuration structure.
AnnaBridge 171:3a7713b1edbc 334 */
AnnaBridge 171:3a7713b1edbc 335 void SCTIMER_GetDefaultConfig(sctimer_config_t *config);
AnnaBridge 171:3a7713b1edbc 336
AnnaBridge 171:3a7713b1edbc 337 /*! @}*/
AnnaBridge 171:3a7713b1edbc 338
AnnaBridge 171:3a7713b1edbc 339 /*!
AnnaBridge 171:3a7713b1edbc 340 * @name PWM setup operations
AnnaBridge 171:3a7713b1edbc 341 * @{
AnnaBridge 171:3a7713b1edbc 342 */
AnnaBridge 171:3a7713b1edbc 343
AnnaBridge 171:3a7713b1edbc 344 /*!
AnnaBridge 171:3a7713b1edbc 345 * @brief Configures the PWM signal parameters.
AnnaBridge 171:3a7713b1edbc 346 *
AnnaBridge 171:3a7713b1edbc 347 * Call this function to configure the PWM signal period, mode, duty cycle, and edge. This
AnnaBridge 171:3a7713b1edbc 348 * function will create 2 events; one of the events will trigger on match with the pulse value
AnnaBridge 171:3a7713b1edbc 349 * and the other will trigger when the counter matches the PWM period. The PWM period event is
AnnaBridge 171:3a7713b1edbc 350 * also used as a limit event to reset the counter or change direction. Both events are enabled
AnnaBridge 171:3a7713b1edbc 351 * for the same state. The state number can be retrieved by calling the function
AnnaBridge 171:3a7713b1edbc 352 * SCTIMER_GetCurrentStateNumber().
AnnaBridge 171:3a7713b1edbc 353 * The counter is set to operate as one 32-bit counter (unify bit is set to 1).
AnnaBridge 171:3a7713b1edbc 354 * The counter operates in bi-directional mode when generating a center-aligned PWM.
AnnaBridge 171:3a7713b1edbc 355 *
AnnaBridge 171:3a7713b1edbc 356 * @note When setting PWM output from multiple output pins, they all should use the same PWM mode
AnnaBridge 171:3a7713b1edbc 357 * i.e all PWM's should be either edge-aligned or center-aligned.
AnnaBridge 171:3a7713b1edbc 358 * When using this API, the PWM signal frequency of all the initialized channels must be the same.
AnnaBridge 171:3a7713b1edbc 359 * Otherwise all the initialized channels' PWM signal frequency is equal to the last call to the
AnnaBridge 171:3a7713b1edbc 360 * API's pwmFreq_Hz.
AnnaBridge 171:3a7713b1edbc 361 *
AnnaBridge 171:3a7713b1edbc 362 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 363 * @param pwmParams PWM parameters to configure the output
AnnaBridge 171:3a7713b1edbc 364 * @param mode PWM operation mode, options available in enumeration ::sctimer_pwm_mode_t
AnnaBridge 171:3a7713b1edbc 365 * @param pwmFreq_Hz PWM signal frequency in Hz
AnnaBridge 171:3a7713b1edbc 366 * @param srcClock_Hz SCTimer counter clock in Hz
AnnaBridge 171:3a7713b1edbc 367 * @param event Pointer to a variable where the PWM period event number is stored
AnnaBridge 171:3a7713b1edbc 368 *
AnnaBridge 171:3a7713b1edbc 369 * @return kStatus_Success on success
AnnaBridge 171:3a7713b1edbc 370 * kStatus_Fail If we have hit the limit in terms of number of events created or if
AnnaBridge 171:3a7713b1edbc 371 * an incorrect PWM dutycylce is passed in.
AnnaBridge 171:3a7713b1edbc 372 */
AnnaBridge 171:3a7713b1edbc 373 status_t SCTIMER_SetupPwm(SCT_Type *base,
AnnaBridge 171:3a7713b1edbc 374 const sctimer_pwm_signal_param_t *pwmParams,
AnnaBridge 171:3a7713b1edbc 375 sctimer_pwm_mode_t mode,
AnnaBridge 171:3a7713b1edbc 376 uint32_t pwmFreq_Hz,
AnnaBridge 171:3a7713b1edbc 377 uint32_t srcClock_Hz,
AnnaBridge 171:3a7713b1edbc 378 uint32_t *event);
AnnaBridge 171:3a7713b1edbc 379
AnnaBridge 171:3a7713b1edbc 380 /*!
AnnaBridge 171:3a7713b1edbc 381 * @brief Updates the duty cycle of an active PWM signal.
AnnaBridge 171:3a7713b1edbc 382 *
AnnaBridge 171:3a7713b1edbc 383 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 384 * @param output The output to configure
AnnaBridge 171:3a7713b1edbc 385 * @param dutyCyclePercent New PWM pulse width; the value should be between 1 to 100
AnnaBridge 171:3a7713b1edbc 386 * @param event Event number associated with this PWM signal. This was returned to the user by the
AnnaBridge 171:3a7713b1edbc 387 * function SCTIMER_SetupPwm().
AnnaBridge 171:3a7713b1edbc 388 */
AnnaBridge 171:3a7713b1edbc 389 void SCTIMER_UpdatePwmDutycycle(SCT_Type *base, sctimer_out_t output, uint8_t dutyCyclePercent, uint32_t event);
AnnaBridge 171:3a7713b1edbc 390
AnnaBridge 171:3a7713b1edbc 391 /*!
AnnaBridge 171:3a7713b1edbc 392 * @name Interrupt Interface
AnnaBridge 171:3a7713b1edbc 393 * @{
AnnaBridge 171:3a7713b1edbc 394 */
AnnaBridge 171:3a7713b1edbc 395
AnnaBridge 171:3a7713b1edbc 396 /*!
AnnaBridge 171:3a7713b1edbc 397 * @brief Enables the selected SCTimer interrupts.
AnnaBridge 171:3a7713b1edbc 398 *
AnnaBridge 171:3a7713b1edbc 399 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 400 * @param mask The interrupts to enable. This is a logical OR of members of the
AnnaBridge 171:3a7713b1edbc 401 * enumeration ::sctimer_interrupt_enable_t
AnnaBridge 171:3a7713b1edbc 402 */
AnnaBridge 171:3a7713b1edbc 403 static inline void SCTIMER_EnableInterrupts(SCT_Type *base, uint32_t mask)
AnnaBridge 171:3a7713b1edbc 404 {
AnnaBridge 171:3a7713b1edbc 405 base->EVEN |= mask;
AnnaBridge 171:3a7713b1edbc 406 }
AnnaBridge 171:3a7713b1edbc 407
AnnaBridge 171:3a7713b1edbc 408 /*!
AnnaBridge 171:3a7713b1edbc 409 * @brief Disables the selected SCTimer interrupts.
AnnaBridge 171:3a7713b1edbc 410 *
AnnaBridge 171:3a7713b1edbc 411 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 412 * @param mask The interrupts to enable. This is a logical OR of members of the
AnnaBridge 171:3a7713b1edbc 413 * enumeration ::sctimer_interrupt_enable_t
AnnaBridge 171:3a7713b1edbc 414 */
AnnaBridge 171:3a7713b1edbc 415 static inline void SCTIMER_DisableInterrupts(SCT_Type *base, uint32_t mask)
AnnaBridge 171:3a7713b1edbc 416 {
AnnaBridge 171:3a7713b1edbc 417 base->EVEN &= ~mask;
AnnaBridge 171:3a7713b1edbc 418 }
AnnaBridge 171:3a7713b1edbc 419
AnnaBridge 171:3a7713b1edbc 420 /*!
AnnaBridge 171:3a7713b1edbc 421 * @brief Gets the enabled SCTimer interrupts.
AnnaBridge 171:3a7713b1edbc 422 *
AnnaBridge 171:3a7713b1edbc 423 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 424 *
AnnaBridge 171:3a7713b1edbc 425 * @return The enabled interrupts. This is the logical OR of members of the
AnnaBridge 171:3a7713b1edbc 426 * enumeration ::sctimer_interrupt_enable_t
AnnaBridge 171:3a7713b1edbc 427 */
AnnaBridge 171:3a7713b1edbc 428 static inline uint32_t SCTIMER_GetEnabledInterrupts(SCT_Type *base)
AnnaBridge 171:3a7713b1edbc 429 {
AnnaBridge 171:3a7713b1edbc 430 return (base->EVEN & 0xFFFFU);
AnnaBridge 171:3a7713b1edbc 431 }
AnnaBridge 171:3a7713b1edbc 432
AnnaBridge 171:3a7713b1edbc 433 /*! @}*/
AnnaBridge 171:3a7713b1edbc 434
AnnaBridge 171:3a7713b1edbc 435 /*!
AnnaBridge 171:3a7713b1edbc 436 * @name Status Interface
AnnaBridge 171:3a7713b1edbc 437 * @{
AnnaBridge 171:3a7713b1edbc 438 */
AnnaBridge 171:3a7713b1edbc 439
AnnaBridge 171:3a7713b1edbc 440 /*!
AnnaBridge 171:3a7713b1edbc 441 * @brief Gets the SCTimer status flags.
AnnaBridge 171:3a7713b1edbc 442 *
AnnaBridge 171:3a7713b1edbc 443 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 444 *
AnnaBridge 171:3a7713b1edbc 445 * @return The status flags. This is the logical OR of members of the
AnnaBridge 171:3a7713b1edbc 446 * enumeration ::sctimer_status_flags_t
AnnaBridge 171:3a7713b1edbc 447 */
AnnaBridge 171:3a7713b1edbc 448 static inline uint32_t SCTIMER_GetStatusFlags(SCT_Type *base)
AnnaBridge 171:3a7713b1edbc 449 {
AnnaBridge 171:3a7713b1edbc 450 uint32_t statusFlags = 0;
AnnaBridge 171:3a7713b1edbc 451
AnnaBridge 171:3a7713b1edbc 452 /* Add the recorded events */
AnnaBridge 171:3a7713b1edbc 453 statusFlags = (base->EVFLAG & 0xFFFFU);
AnnaBridge 171:3a7713b1edbc 454
AnnaBridge 171:3a7713b1edbc 455 /* Add bus error flags */
AnnaBridge 171:3a7713b1edbc 456 statusFlags |= (base->CONFLAG & (SCT_CONFLAG_BUSERRL_MASK | SCT_CONFLAG_BUSERRH_MASK));
AnnaBridge 171:3a7713b1edbc 457
AnnaBridge 171:3a7713b1edbc 458 return statusFlags;
AnnaBridge 171:3a7713b1edbc 459 }
AnnaBridge 171:3a7713b1edbc 460
AnnaBridge 171:3a7713b1edbc 461 /*!
AnnaBridge 171:3a7713b1edbc 462 * @brief Clears the SCTimer status flags.
AnnaBridge 171:3a7713b1edbc 463 *
AnnaBridge 171:3a7713b1edbc 464 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 465 * @param mask The status flags to clear. This is a logical OR of members of the
AnnaBridge 171:3a7713b1edbc 466 * enumeration ::sctimer_status_flags_t
AnnaBridge 171:3a7713b1edbc 467 */
AnnaBridge 171:3a7713b1edbc 468 static inline void SCTIMER_ClearStatusFlags(SCT_Type *base, uint32_t mask)
AnnaBridge 171:3a7713b1edbc 469 {
AnnaBridge 171:3a7713b1edbc 470 /* Write to the flag registers */
AnnaBridge 171:3a7713b1edbc 471 base->EVFLAG = (mask & 0xFFFFU);
AnnaBridge 171:3a7713b1edbc 472 base->CONFLAG = (mask & (SCT_CONFLAG_BUSERRL_MASK | SCT_CONFLAG_BUSERRH_MASK));
AnnaBridge 171:3a7713b1edbc 473 }
AnnaBridge 171:3a7713b1edbc 474
AnnaBridge 171:3a7713b1edbc 475 /*! @}*/
AnnaBridge 171:3a7713b1edbc 476
AnnaBridge 171:3a7713b1edbc 477 /*!
AnnaBridge 171:3a7713b1edbc 478 * @name Counter Start and Stop
AnnaBridge 171:3a7713b1edbc 479 * @{
AnnaBridge 171:3a7713b1edbc 480 */
AnnaBridge 171:3a7713b1edbc 481
AnnaBridge 171:3a7713b1edbc 482 /*!
AnnaBridge 171:3a7713b1edbc 483 * @brief Starts the SCTimer counter.
AnnaBridge 171:3a7713b1edbc 484 *
AnnaBridge 171:3a7713b1edbc 485 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 486 * @param countertoStart SCTimer counter to start; if unify mode is set then function always
AnnaBridge 171:3a7713b1edbc 487 * writes to HALT_L bit
AnnaBridge 171:3a7713b1edbc 488 */
AnnaBridge 171:3a7713b1edbc 489 static inline void SCTIMER_StartTimer(SCT_Type *base, sctimer_counter_t countertoStart)
AnnaBridge 171:3a7713b1edbc 490 {
AnnaBridge 171:3a7713b1edbc 491 /* Clear HALT_L bit if counter is operating in 32-bit mode or user wants to start L counter */
AnnaBridge 171:3a7713b1edbc 492 if ((base->CONFIG & SCT_CONFIG_UNIFY_MASK) || (countertoStart == kSCTIMER_Counter_L))
AnnaBridge 171:3a7713b1edbc 493 {
AnnaBridge 171:3a7713b1edbc 494 base->CTRL &= ~(SCT_CTRL_HALT_L_MASK);
AnnaBridge 171:3a7713b1edbc 495 }
AnnaBridge 171:3a7713b1edbc 496 else
AnnaBridge 171:3a7713b1edbc 497 {
AnnaBridge 171:3a7713b1edbc 498 /* Start H counter */
AnnaBridge 171:3a7713b1edbc 499 base->CTRL &= ~(SCT_CTRL_HALT_H_MASK);
AnnaBridge 171:3a7713b1edbc 500 }
AnnaBridge 171:3a7713b1edbc 501 }
AnnaBridge 171:3a7713b1edbc 502
AnnaBridge 171:3a7713b1edbc 503 /*!
AnnaBridge 171:3a7713b1edbc 504 * @brief Halts the SCTimer counter.
AnnaBridge 171:3a7713b1edbc 505 *
AnnaBridge 171:3a7713b1edbc 506 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 507 * @param countertoStop SCTimer counter to stop; if unify mode is set then function always
AnnaBridge 171:3a7713b1edbc 508 * writes to HALT_L bit
AnnaBridge 171:3a7713b1edbc 509 */
AnnaBridge 171:3a7713b1edbc 510 static inline void SCTIMER_StopTimer(SCT_Type *base, sctimer_counter_t countertoStop)
AnnaBridge 171:3a7713b1edbc 511 {
AnnaBridge 171:3a7713b1edbc 512 /* Set HALT_L bit if counter is operating in 32-bit mode or user wants to stop L counter */
AnnaBridge 171:3a7713b1edbc 513 if ((base->CONFIG & SCT_CONFIG_UNIFY_MASK) || (countertoStop == kSCTIMER_Counter_L))
AnnaBridge 171:3a7713b1edbc 514 {
AnnaBridge 171:3a7713b1edbc 515 base->CTRL |= (SCT_CTRL_HALT_L_MASK);
AnnaBridge 171:3a7713b1edbc 516 }
AnnaBridge 171:3a7713b1edbc 517 else
AnnaBridge 171:3a7713b1edbc 518 {
AnnaBridge 171:3a7713b1edbc 519 /* Stop H counter */
AnnaBridge 171:3a7713b1edbc 520 base->CTRL |= (SCT_CTRL_HALT_H_MASK);
AnnaBridge 171:3a7713b1edbc 521 }
AnnaBridge 171:3a7713b1edbc 522 }
AnnaBridge 171:3a7713b1edbc 523
AnnaBridge 171:3a7713b1edbc 524 /*! @}*/
AnnaBridge 171:3a7713b1edbc 525
AnnaBridge 171:3a7713b1edbc 526 /*!
AnnaBridge 171:3a7713b1edbc 527 * @name Functions to create a new event and manage the state logic
AnnaBridge 171:3a7713b1edbc 528 * @{
AnnaBridge 171:3a7713b1edbc 529 */
AnnaBridge 171:3a7713b1edbc 530
AnnaBridge 171:3a7713b1edbc 531 /*!
AnnaBridge 171:3a7713b1edbc 532 * @brief Create an event that is triggered on a match or IO and schedule in current state.
AnnaBridge 171:3a7713b1edbc 533 *
AnnaBridge 171:3a7713b1edbc 534 * This function will configure an event using the options provided by the user. If the event type uses
AnnaBridge 171:3a7713b1edbc 535 * the counter match, then the function will set the user provided match value into a match register
AnnaBridge 171:3a7713b1edbc 536 * and put this match register number into the event control register.
AnnaBridge 171:3a7713b1edbc 537 * The event is enabled for the current state and the event number is increased by one at the end.
AnnaBridge 171:3a7713b1edbc 538 * The function returns the event number; this event number can be used to configure actions to be
AnnaBridge 171:3a7713b1edbc 539 * done when this event is triggered.
AnnaBridge 171:3a7713b1edbc 540 *
AnnaBridge 171:3a7713b1edbc 541 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 542 * @param howToMonitor Event type; options are available in the enumeration ::sctimer_interrupt_enable_t
AnnaBridge 171:3a7713b1edbc 543 * @param matchValue The match value that will be programmed to a match register
AnnaBridge 171:3a7713b1edbc 544 * @param whichIO The input or output that will be involved in event triggering. This field
AnnaBridge 171:3a7713b1edbc 545 * is ignored if the event type is "match only"
AnnaBridge 171:3a7713b1edbc 546 * @param whichCounter SCTimer counter to use when operating in 16-bit mode. In 32-bit mode, this
AnnaBridge 171:3a7713b1edbc 547 * field has no meaning as we have only 1 unified counter; hence ignored.
AnnaBridge 171:3a7713b1edbc 548 * @param event Pointer to a variable where the new event number is stored
AnnaBridge 171:3a7713b1edbc 549 *
AnnaBridge 171:3a7713b1edbc 550 * @return kStatus_Success on success
AnnaBridge 171:3a7713b1edbc 551 * kStatus_Error if we have hit the limit in terms of number of events created or
AnnaBridge 171:3a7713b1edbc 552 if we have reached the limit in terms of number of match registers
AnnaBridge 171:3a7713b1edbc 553 */
AnnaBridge 171:3a7713b1edbc 554 status_t SCTIMER_CreateAndScheduleEvent(SCT_Type *base,
AnnaBridge 171:3a7713b1edbc 555 sctimer_event_t howToMonitor,
AnnaBridge 171:3a7713b1edbc 556 uint32_t matchValue,
AnnaBridge 171:3a7713b1edbc 557 uint32_t whichIO,
AnnaBridge 171:3a7713b1edbc 558 sctimer_counter_t whichCounter,
AnnaBridge 171:3a7713b1edbc 559 uint32_t *event);
AnnaBridge 171:3a7713b1edbc 560
AnnaBridge 171:3a7713b1edbc 561 /*!
AnnaBridge 171:3a7713b1edbc 562 * @brief Enable an event in the current state.
AnnaBridge 171:3a7713b1edbc 563 *
AnnaBridge 171:3a7713b1edbc 564 * This function will allow the event passed in to trigger in the current state. The event must
AnnaBridge 171:3a7713b1edbc 565 * be created earlier by either calling the function SCTIMER_SetupPwm() or function
AnnaBridge 171:3a7713b1edbc 566 * SCTIMER_CreateAndScheduleEvent() .
AnnaBridge 171:3a7713b1edbc 567 *
AnnaBridge 171:3a7713b1edbc 568 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 569 * @param event Event number to enable in the current state
AnnaBridge 171:3a7713b1edbc 570 *
AnnaBridge 171:3a7713b1edbc 571 */
AnnaBridge 171:3a7713b1edbc 572 void SCTIMER_ScheduleEvent(SCT_Type *base, uint32_t event);
AnnaBridge 171:3a7713b1edbc 573
AnnaBridge 171:3a7713b1edbc 574 /*!
AnnaBridge 171:3a7713b1edbc 575 * @brief Increase the state by 1
AnnaBridge 171:3a7713b1edbc 576 *
AnnaBridge 171:3a7713b1edbc 577 * All future events created by calling the function SCTIMER_ScheduleEvent() will be enabled in this new
AnnaBridge 171:3a7713b1edbc 578 * state.
AnnaBridge 171:3a7713b1edbc 579 *
AnnaBridge 171:3a7713b1edbc 580 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 581 *
AnnaBridge 171:3a7713b1edbc 582 * @return kStatus_Success on success
AnnaBridge 171:3a7713b1edbc 583 * kStatus_Error if we have hit the limit in terms of states used
AnnaBridge 171:3a7713b1edbc 584
AnnaBridge 171:3a7713b1edbc 585 */
AnnaBridge 171:3a7713b1edbc 586 status_t SCTIMER_IncreaseState(SCT_Type *base);
AnnaBridge 171:3a7713b1edbc 587
AnnaBridge 171:3a7713b1edbc 588 /*!
AnnaBridge 171:3a7713b1edbc 589 * @brief Provides the current state
AnnaBridge 171:3a7713b1edbc 590 *
AnnaBridge 171:3a7713b1edbc 591 * User can use this to set the next state by calling the function SCTIMER_SetupNextStateAction().
AnnaBridge 171:3a7713b1edbc 592 *
AnnaBridge 171:3a7713b1edbc 593 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 594 *
AnnaBridge 171:3a7713b1edbc 595 * @return The current state
AnnaBridge 171:3a7713b1edbc 596 */
AnnaBridge 171:3a7713b1edbc 597 uint32_t SCTIMER_GetCurrentState(SCT_Type *base);
AnnaBridge 171:3a7713b1edbc 598
AnnaBridge 171:3a7713b1edbc 599 /*! @}*/
AnnaBridge 171:3a7713b1edbc 600
AnnaBridge 171:3a7713b1edbc 601 /*!
AnnaBridge 171:3a7713b1edbc 602 * @name Actions to take in response to an event
AnnaBridge 171:3a7713b1edbc 603 * @{
AnnaBridge 171:3a7713b1edbc 604 */
AnnaBridge 171:3a7713b1edbc 605
AnnaBridge 171:3a7713b1edbc 606 /*!
AnnaBridge 171:3a7713b1edbc 607 * @brief Setup capture of the counter value on trigger of a selected event
AnnaBridge 171:3a7713b1edbc 608 *
AnnaBridge 171:3a7713b1edbc 609 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 610 * @param whichCounter SCTimer counter to use when operating in 16-bit mode. In 32-bit mode, this
AnnaBridge 171:3a7713b1edbc 611 * field has no meaning as only the Counter_L bits are used.
AnnaBridge 171:3a7713b1edbc 612 * @param captureRegister Pointer to a variable where the capture register number will be returned. User
AnnaBridge 171:3a7713b1edbc 613 * can read the captured value from this register when the specified event is triggered.
AnnaBridge 171:3a7713b1edbc 614 * @param event Event number that will trigger the capture
AnnaBridge 171:3a7713b1edbc 615 *
AnnaBridge 171:3a7713b1edbc 616 * @return kStatus_Success on success
AnnaBridge 171:3a7713b1edbc 617 * kStatus_Error if we have hit the limit in terms of number of match/capture registers available
AnnaBridge 171:3a7713b1edbc 618 */
AnnaBridge 171:3a7713b1edbc 619 status_t SCTIMER_SetupCaptureAction(SCT_Type *base,
AnnaBridge 171:3a7713b1edbc 620 sctimer_counter_t whichCounter,
AnnaBridge 171:3a7713b1edbc 621 uint32_t *captureRegister,
AnnaBridge 171:3a7713b1edbc 622 uint32_t event);
AnnaBridge 171:3a7713b1edbc 623
AnnaBridge 171:3a7713b1edbc 624 /*!
AnnaBridge 171:3a7713b1edbc 625 * @brief Receive noticification when the event trigger an interrupt.
AnnaBridge 171:3a7713b1edbc 626 *
AnnaBridge 171:3a7713b1edbc 627 * If the interrupt for the event is enabled by the user, then a callback can be registered
AnnaBridge 171:3a7713b1edbc 628 * which will be invoked when the event is triggered
AnnaBridge 171:3a7713b1edbc 629 *
AnnaBridge 171:3a7713b1edbc 630 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 631 * @param event Event number that will trigger the interrupt
AnnaBridge 171:3a7713b1edbc 632 * @param callback Function to invoke when the event is triggered
AnnaBridge 171:3a7713b1edbc 633 */
AnnaBridge 171:3a7713b1edbc 634
AnnaBridge 171:3a7713b1edbc 635 void SCTIMER_SetCallback(SCT_Type *base, sctimer_event_callback_t callback, uint32_t event);
AnnaBridge 171:3a7713b1edbc 636
AnnaBridge 171:3a7713b1edbc 637 /*!
AnnaBridge 171:3a7713b1edbc 638 * @brief Transition to the specified state.
AnnaBridge 171:3a7713b1edbc 639 *
AnnaBridge 171:3a7713b1edbc 640 * This transition will be triggered by the event number that is passed in by the user.
AnnaBridge 171:3a7713b1edbc 641 *
AnnaBridge 171:3a7713b1edbc 642 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 643 * @param nextState The next state SCTimer will transition to
AnnaBridge 171:3a7713b1edbc 644 * @param event Event number that will trigger the state transition
AnnaBridge 171:3a7713b1edbc 645 */
AnnaBridge 171:3a7713b1edbc 646 static inline void SCTIMER_SetupNextStateAction(SCT_Type *base, uint32_t nextState, uint32_t event)
AnnaBridge 171:3a7713b1edbc 647 {
AnnaBridge 171:3a7713b1edbc 648 uint32_t reg = base->EVENT[event].CTRL;
AnnaBridge 171:3a7713b1edbc 649
AnnaBridge 171:3a7713b1edbc 650 reg &= ~(SCT_EVENT_CTRL_STATEV_MASK);
AnnaBridge 171:3a7713b1edbc 651 /* Load the STATEV value when the event occurs to be the next state */
AnnaBridge 171:3a7713b1edbc 652 reg |= SCT_EVENT_CTRL_STATEV(nextState) | SCT_EVENT_CTRL_STATELD_MASK;
AnnaBridge 171:3a7713b1edbc 653
AnnaBridge 171:3a7713b1edbc 654 base->EVENT[event].CTRL = reg;
AnnaBridge 171:3a7713b1edbc 655 }
AnnaBridge 171:3a7713b1edbc 656
AnnaBridge 171:3a7713b1edbc 657 /*!
AnnaBridge 171:3a7713b1edbc 658 * @brief Set the Output.
AnnaBridge 171:3a7713b1edbc 659 *
AnnaBridge 171:3a7713b1edbc 660 * This output will be set when the event number that is passed in by the user is triggered.
AnnaBridge 171:3a7713b1edbc 661 *
AnnaBridge 171:3a7713b1edbc 662 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 663 * @param whichIO The output to set
AnnaBridge 171:3a7713b1edbc 664 * @param event Event number that will trigger the output change
AnnaBridge 171:3a7713b1edbc 665 */
AnnaBridge 171:3a7713b1edbc 666 static inline void SCTIMER_SetupOutputSetAction(SCT_Type *base, uint32_t whichIO, uint32_t event)
AnnaBridge 171:3a7713b1edbc 667 {
AnnaBridge 171:3a7713b1edbc 668 base->OUT[whichIO].SET |= (1U << event);
AnnaBridge 171:3a7713b1edbc 669 }
AnnaBridge 171:3a7713b1edbc 670
AnnaBridge 171:3a7713b1edbc 671 /*!
AnnaBridge 171:3a7713b1edbc 672 * @brief Clear the Output.
AnnaBridge 171:3a7713b1edbc 673 *
AnnaBridge 171:3a7713b1edbc 674 * This output will be cleared when the event number that is passed in by the user is triggered.
AnnaBridge 171:3a7713b1edbc 675 *
AnnaBridge 171:3a7713b1edbc 676 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 677 * @param whichIO The output to clear
AnnaBridge 171:3a7713b1edbc 678 * @param event Event number that will trigger the output change
AnnaBridge 171:3a7713b1edbc 679 */
AnnaBridge 171:3a7713b1edbc 680 static inline void SCTIMER_SetupOutputClearAction(SCT_Type *base, uint32_t whichIO, uint32_t event)
AnnaBridge 171:3a7713b1edbc 681 {
AnnaBridge 171:3a7713b1edbc 682 base->OUT[whichIO].CLR |= (1U << event);
AnnaBridge 171:3a7713b1edbc 683 }
AnnaBridge 171:3a7713b1edbc 684
AnnaBridge 171:3a7713b1edbc 685 /*!
AnnaBridge 171:3a7713b1edbc 686 * @brief Toggle the output level.
AnnaBridge 171:3a7713b1edbc 687 *
AnnaBridge 171:3a7713b1edbc 688 * This change in the output level is triggered by the event number that is passed in by the user.
AnnaBridge 171:3a7713b1edbc 689 *
AnnaBridge 171:3a7713b1edbc 690 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 691 * @param whichIO The output to toggle
AnnaBridge 171:3a7713b1edbc 692 * @param event Event number that will trigger the output change
AnnaBridge 171:3a7713b1edbc 693 */
AnnaBridge 171:3a7713b1edbc 694 void SCTIMER_SetupOutputToggleAction(SCT_Type *base, uint32_t whichIO, uint32_t event);
AnnaBridge 171:3a7713b1edbc 695
AnnaBridge 171:3a7713b1edbc 696 /*!
AnnaBridge 171:3a7713b1edbc 697 * @brief Limit the running counter.
AnnaBridge 171:3a7713b1edbc 698 *
AnnaBridge 171:3a7713b1edbc 699 * The counter is limited when the event number that is passed in by the user is triggered.
AnnaBridge 171:3a7713b1edbc 700 *
AnnaBridge 171:3a7713b1edbc 701 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 702 * @param whichCounter SCTimer counter to use when operating in 16-bit mode. In 32-bit mode, this
AnnaBridge 171:3a7713b1edbc 703 * field has no meaning as only the Counter_L bits are used.
AnnaBridge 171:3a7713b1edbc 704 * @param event Event number that will trigger the counter to be limited
AnnaBridge 171:3a7713b1edbc 705 */
AnnaBridge 171:3a7713b1edbc 706 static inline void SCTIMER_SetupCounterLimitAction(SCT_Type *base, sctimer_counter_t whichCounter, uint32_t event)
AnnaBridge 171:3a7713b1edbc 707 {
AnnaBridge 171:3a7713b1edbc 708 /* Use Counter_L bits if counter is operating in 32-bit mode or user wants to setup the L counter */
AnnaBridge 171:3a7713b1edbc 709 if ((base->CONFIG & SCT_CONFIG_UNIFY_MASK) || (whichCounter == kSCTIMER_Counter_L))
AnnaBridge 171:3a7713b1edbc 710 {
AnnaBridge 171:3a7713b1edbc 711 base->LIMIT |= SCT_LIMIT_LIMMSK_L(1U << event);
AnnaBridge 171:3a7713b1edbc 712 }
AnnaBridge 171:3a7713b1edbc 713 else
AnnaBridge 171:3a7713b1edbc 714 {
AnnaBridge 171:3a7713b1edbc 715 base->LIMIT |= SCT_LIMIT_LIMMSK_H(1U << event);
AnnaBridge 171:3a7713b1edbc 716 }
AnnaBridge 171:3a7713b1edbc 717 }
AnnaBridge 171:3a7713b1edbc 718
AnnaBridge 171:3a7713b1edbc 719 /*!
AnnaBridge 171:3a7713b1edbc 720 * @brief Stop the running counter.
AnnaBridge 171:3a7713b1edbc 721 *
AnnaBridge 171:3a7713b1edbc 722 * The counter is stopped when the event number that is passed in by the user is triggered.
AnnaBridge 171:3a7713b1edbc 723 *
AnnaBridge 171:3a7713b1edbc 724 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 725 * @param whichCounter SCTimer counter to use when operating in 16-bit mode. In 32-bit mode, this
AnnaBridge 171:3a7713b1edbc 726 * field has no meaning as only the Counter_L bits are used.
AnnaBridge 171:3a7713b1edbc 727 * @param event Event number that will trigger the counter to be stopped
AnnaBridge 171:3a7713b1edbc 728 */
AnnaBridge 171:3a7713b1edbc 729 static inline void SCTIMER_SetupCounterStopAction(SCT_Type *base, sctimer_counter_t whichCounter, uint32_t event)
AnnaBridge 171:3a7713b1edbc 730 {
AnnaBridge 171:3a7713b1edbc 731 /* Use Counter_L bits if counter is operating in 32-bit mode or user wants to setup the L counter */
AnnaBridge 171:3a7713b1edbc 732 if ((base->CONFIG & SCT_CONFIG_UNIFY_MASK) || (whichCounter == kSCTIMER_Counter_L))
AnnaBridge 171:3a7713b1edbc 733 {
AnnaBridge 171:3a7713b1edbc 734 base->STOP |= SCT_STOP_STOPMSK_L(1U << event);
AnnaBridge 171:3a7713b1edbc 735 }
AnnaBridge 171:3a7713b1edbc 736 else
AnnaBridge 171:3a7713b1edbc 737 {
AnnaBridge 171:3a7713b1edbc 738 base->STOP |= SCT_STOP_STOPMSK_H(1U << event);
AnnaBridge 171:3a7713b1edbc 739 }
AnnaBridge 171:3a7713b1edbc 740 }
AnnaBridge 171:3a7713b1edbc 741
AnnaBridge 171:3a7713b1edbc 742 /*!
AnnaBridge 171:3a7713b1edbc 743 * @brief Re-start the stopped counter.
AnnaBridge 171:3a7713b1edbc 744 *
AnnaBridge 171:3a7713b1edbc 745 * The counter will re-start when the event number that is passed in by the user is triggered.
AnnaBridge 171:3a7713b1edbc 746 *
AnnaBridge 171:3a7713b1edbc 747 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 748 * @param whichCounter SCTimer counter to use when operating in 16-bit mode. In 32-bit mode, this
AnnaBridge 171:3a7713b1edbc 749 * field has no meaning as only the Counter_L bits are used.
AnnaBridge 171:3a7713b1edbc 750 * @param event Event number that will trigger the counter to re-start
AnnaBridge 171:3a7713b1edbc 751 */
AnnaBridge 171:3a7713b1edbc 752 static inline void SCTIMER_SetupCounterStartAction(SCT_Type *base, sctimer_counter_t whichCounter, uint32_t event)
AnnaBridge 171:3a7713b1edbc 753 {
AnnaBridge 171:3a7713b1edbc 754 /* Use Counter_L bits if counter is operating in 32-bit mode or user wants to setup the L counter */
AnnaBridge 171:3a7713b1edbc 755 if ((base->CONFIG & SCT_CONFIG_UNIFY_MASK) || (whichCounter == kSCTIMER_Counter_L))
AnnaBridge 171:3a7713b1edbc 756 {
AnnaBridge 171:3a7713b1edbc 757 base->START |= SCT_START_STARTMSK_L(1U << event);
AnnaBridge 171:3a7713b1edbc 758 }
AnnaBridge 171:3a7713b1edbc 759 else
AnnaBridge 171:3a7713b1edbc 760 {
AnnaBridge 171:3a7713b1edbc 761 base->START |= SCT_START_STARTMSK_H(1U << event);
AnnaBridge 171:3a7713b1edbc 762 }
AnnaBridge 171:3a7713b1edbc 763 }
AnnaBridge 171:3a7713b1edbc 764
AnnaBridge 171:3a7713b1edbc 765 /*!
AnnaBridge 171:3a7713b1edbc 766 * @brief Halt the running counter.
AnnaBridge 171:3a7713b1edbc 767 *
AnnaBridge 171:3a7713b1edbc 768 * The counter is disabled (halted) when the event number that is passed in by the user is
AnnaBridge 171:3a7713b1edbc 769 * triggered. When the counter is halted, all further events are disabled. The HALT condition
AnnaBridge 171:3a7713b1edbc 770 * can only be removed by calling the SCTIMER_StartTimer() function.
AnnaBridge 171:3a7713b1edbc 771 *
AnnaBridge 171:3a7713b1edbc 772 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 773 * @param whichCounter SCTimer counter to use when operating in 16-bit mode. In 32-bit mode, this
AnnaBridge 171:3a7713b1edbc 774 * field has no meaning as only the Counter_L bits are used.
AnnaBridge 171:3a7713b1edbc 775 * @param event Event number that will trigger the counter to be halted
AnnaBridge 171:3a7713b1edbc 776 */
AnnaBridge 171:3a7713b1edbc 777 static inline void SCTIMER_SetupCounterHaltAction(SCT_Type *base, sctimer_counter_t whichCounter, uint32_t event)
AnnaBridge 171:3a7713b1edbc 778 {
AnnaBridge 171:3a7713b1edbc 779 /* Use Counter_L bits if counter is operating in 32-bit mode or user wants to setup the L counter */
AnnaBridge 171:3a7713b1edbc 780 if ((base->CONFIG & SCT_CONFIG_UNIFY_MASK) || (whichCounter == kSCTIMER_Counter_L))
AnnaBridge 171:3a7713b1edbc 781 {
AnnaBridge 171:3a7713b1edbc 782 base->HALT |= SCT_HALT_HALTMSK_L(1U << event);
AnnaBridge 171:3a7713b1edbc 783 }
AnnaBridge 171:3a7713b1edbc 784 else
AnnaBridge 171:3a7713b1edbc 785 {
AnnaBridge 171:3a7713b1edbc 786 base->HALT |= SCT_HALT_HALTMSK_H(1U << event);
AnnaBridge 171:3a7713b1edbc 787 }
AnnaBridge 171:3a7713b1edbc 788 }
AnnaBridge 171:3a7713b1edbc 789
AnnaBridge 171:3a7713b1edbc 790 /*!
AnnaBridge 171:3a7713b1edbc 791 * @brief Generate a DMA request.
AnnaBridge 171:3a7713b1edbc 792 *
AnnaBridge 171:3a7713b1edbc 793 * DMA request will be triggered by the event number that is passed in by the user.
AnnaBridge 171:3a7713b1edbc 794 *
AnnaBridge 171:3a7713b1edbc 795 * @param base SCTimer peripheral base address
AnnaBridge 171:3a7713b1edbc 796 * @param dmaNumber The DMA request to generate
AnnaBridge 171:3a7713b1edbc 797 * @param event Event number that will trigger the DMA request
AnnaBridge 171:3a7713b1edbc 798 */
AnnaBridge 171:3a7713b1edbc 799 static inline void SCTIMER_SetupDmaTriggerAction(SCT_Type *base, uint32_t dmaNumber, uint32_t event)
AnnaBridge 171:3a7713b1edbc 800 {
AnnaBridge 171:3a7713b1edbc 801 if (dmaNumber == 0)
AnnaBridge 171:3a7713b1edbc 802 {
AnnaBridge 171:3a7713b1edbc 803 base->DMA0REQUEST |= (1U << event);
AnnaBridge 171:3a7713b1edbc 804 }
AnnaBridge 171:3a7713b1edbc 805 else
AnnaBridge 171:3a7713b1edbc 806 {
AnnaBridge 171:3a7713b1edbc 807 base->DMA1REQUEST |= (1U << event);
AnnaBridge 171:3a7713b1edbc 808 }
AnnaBridge 171:3a7713b1edbc 809 }
AnnaBridge 171:3a7713b1edbc 810
AnnaBridge 171:3a7713b1edbc 811 /*!
AnnaBridge 171:3a7713b1edbc 812 * @brief SCTimer interrupt handler.
AnnaBridge 171:3a7713b1edbc 813 *
AnnaBridge 171:3a7713b1edbc 814 * @param base SCTimer peripheral base address.
AnnaBridge 171:3a7713b1edbc 815 */
AnnaBridge 171:3a7713b1edbc 816 void SCTIMER_EventHandleIRQ(SCT_Type *base);
AnnaBridge 171:3a7713b1edbc 817
AnnaBridge 171:3a7713b1edbc 818 /*! @}*/
AnnaBridge 171:3a7713b1edbc 819
AnnaBridge 171:3a7713b1edbc 820 #if defined(__cplusplus)
AnnaBridge 171:3a7713b1edbc 821 }
AnnaBridge 171:3a7713b1edbc 822 #endif
AnnaBridge 171:3a7713b1edbc 823
AnnaBridge 171:3a7713b1edbc 824 /*! @}*/
AnnaBridge 171:3a7713b1edbc 825
AnnaBridge 171:3a7713b1edbc 826 #endif /* _FSL_SCTIMER_H_ */