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_LPC546XX/TOOLCHAIN_IAR/fsl_sctimer.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 |
---|---|---|---|
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_ */ |