The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
AnnaBridge
Date:
Wed Feb 20 20:53:29 2019 +0000
Revision:
172:65be27845400
Parent:
171:3a7713b1edbc
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 161:aa5281ff4a02 1 /*
AnnaBridge 170:e95d10626187 2 * The Clear BSD License
AnnaBridge 161:aa5281ff4a02 3 * Copyright (c) 2015, Freescale Semiconductor, Inc.
AnnaBridge 161:aa5281ff4a02 4 * Copyright 2016-2017 NXP
AnnaBridge 170:e95d10626187 5 * All rights reserved.
AnnaBridge 170:e95d10626187 6 *
AnnaBridge 161:aa5281ff4a02 7 * Redistribution and use in source and binary forms, with or without modification,
AnnaBridge 170:e95d10626187 8 * are permitted (subject to the limitations in the disclaimer below) provided
AnnaBridge 170:e95d10626187 9 * that the following conditions are met:
AnnaBridge 161:aa5281ff4a02 10 *
AnnaBridge 161:aa5281ff4a02 11 * o Redistributions of source code must retain the above copyright notice, this list
AnnaBridge 161:aa5281ff4a02 12 * of conditions and the following disclaimer.
AnnaBridge 161:aa5281ff4a02 13 *
AnnaBridge 161:aa5281ff4a02 14 * o Redistributions in binary form must reproduce the above copyright notice, this
AnnaBridge 161:aa5281ff4a02 15 * list of conditions and the following disclaimer in the documentation and/or
AnnaBridge 161:aa5281ff4a02 16 * other materials provided with the distribution.
AnnaBridge 161:aa5281ff4a02 17 *
AnnaBridge 161:aa5281ff4a02 18 * o Neither the name of the copyright holder nor the names of its
AnnaBridge 161:aa5281ff4a02 19 * contributors may be used to endorse or promote products derived from this
AnnaBridge 161:aa5281ff4a02 20 * software without specific prior written permission.
AnnaBridge 161:aa5281ff4a02 21 *
AnnaBridge 170:e95d10626187 22 * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
AnnaBridge 161:aa5281ff4a02 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
AnnaBridge 161:aa5281ff4a02 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
AnnaBridge 161:aa5281ff4a02 25 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
AnnaBridge 161:aa5281ff4a02 26 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
AnnaBridge 161:aa5281ff4a02 27 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
AnnaBridge 161:aa5281ff4a02 28 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
AnnaBridge 161:aa5281ff4a02 29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
AnnaBridge 161:aa5281ff4a02 30 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
AnnaBridge 161:aa5281ff4a02 31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
AnnaBridge 161:aa5281ff4a02 32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
AnnaBridge 161:aa5281ff4a02 33 */
AnnaBridge 161:aa5281ff4a02 34 #ifndef _FSL_PWM_H_
AnnaBridge 161:aa5281ff4a02 35 #define _FSL_PWM_H_
AnnaBridge 161:aa5281ff4a02 36
AnnaBridge 161:aa5281ff4a02 37 #include "fsl_common.h"
AnnaBridge 161:aa5281ff4a02 38
AnnaBridge 161:aa5281ff4a02 39 /*!
AnnaBridge 161:aa5281ff4a02 40 * @addtogroup pwm_driver
AnnaBridge 161:aa5281ff4a02 41 * @{
AnnaBridge 161:aa5281ff4a02 42 */
AnnaBridge 161:aa5281ff4a02 43
AnnaBridge 161:aa5281ff4a02 44
AnnaBridge 161:aa5281ff4a02 45 /*******************************************************************************
AnnaBridge 161:aa5281ff4a02 46 * Definitions
AnnaBridge 161:aa5281ff4a02 47 ******************************************************************************/
AnnaBridge 161:aa5281ff4a02 48
AnnaBridge 161:aa5281ff4a02 49 /*! @name Driver version */
AnnaBridge 161:aa5281ff4a02 50 /*@{*/
AnnaBridge 161:aa5281ff4a02 51 #define FSL_PWM_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) /*!< Version 2.0.0 */
AnnaBridge 161:aa5281ff4a02 52 /*@}*/
AnnaBridge 161:aa5281ff4a02 53
AnnaBridge 161:aa5281ff4a02 54 /*! Number of bits per submodule for software output control */
AnnaBridge 161:aa5281ff4a02 55 #define PWM_SUBMODULE_SWCONTROL_WIDTH 2
AnnaBridge 161:aa5281ff4a02 56
AnnaBridge 161:aa5281ff4a02 57 /*! @brief List of PWM submodules */
AnnaBridge 161:aa5281ff4a02 58 typedef enum _pwm_submodule
AnnaBridge 161:aa5281ff4a02 59 {
AnnaBridge 161:aa5281ff4a02 60 kPWM_Module_0 = 0U, /*!< Submodule 0 */
AnnaBridge 161:aa5281ff4a02 61 kPWM_Module_1, /*!< Submodule 1 */
AnnaBridge 161:aa5281ff4a02 62 kPWM_Module_2, /*!< Submodule 2 */
AnnaBridge 161:aa5281ff4a02 63 kPWM_Module_3 /*!< Submodule 3 */
AnnaBridge 161:aa5281ff4a02 64 } pwm_submodule_t;
AnnaBridge 161:aa5281ff4a02 65
AnnaBridge 161:aa5281ff4a02 66 /*! @brief List of PWM channels in each module */
AnnaBridge 161:aa5281ff4a02 67 typedef enum _pwm_channels
AnnaBridge 161:aa5281ff4a02 68 {
AnnaBridge 161:aa5281ff4a02 69 kPWM_PwmB = 0U,
AnnaBridge 161:aa5281ff4a02 70 kPWM_PwmA,
AnnaBridge 161:aa5281ff4a02 71 kPWM_PwmX
AnnaBridge 161:aa5281ff4a02 72 } pwm_channels_t;
AnnaBridge 161:aa5281ff4a02 73
AnnaBridge 161:aa5281ff4a02 74 /*! @brief List of PWM value registers */
AnnaBridge 161:aa5281ff4a02 75 typedef enum _pwm_value_register
AnnaBridge 161:aa5281ff4a02 76 {
AnnaBridge 161:aa5281ff4a02 77 kPWM_ValueRegister_0 = 0U, /*!< PWM Value0 register */
AnnaBridge 161:aa5281ff4a02 78 kPWM_ValueRegister_1, /*!< PWM Value1 register */
AnnaBridge 161:aa5281ff4a02 79 kPWM_ValueRegister_2, /*!< PWM Value2 register */
AnnaBridge 161:aa5281ff4a02 80 kPWM_ValueRegister_3, /*!< PWM Value3 register */
AnnaBridge 161:aa5281ff4a02 81 kPWM_ValueRegister_4, /*!< PWM Value4 register */
AnnaBridge 161:aa5281ff4a02 82 kPWM_ValueRegister_5 /*!< PWM Value5 register */
AnnaBridge 161:aa5281ff4a02 83 } pwm_value_register_t;
AnnaBridge 161:aa5281ff4a02 84
AnnaBridge 161:aa5281ff4a02 85 /*! @brief PWM clock source selection.*/
AnnaBridge 161:aa5281ff4a02 86 typedef enum _pwm_clock_source
AnnaBridge 161:aa5281ff4a02 87 {
AnnaBridge 161:aa5281ff4a02 88 kPWM_BusClock = 0U, /*!< The IPBus clock is used as the clock */
AnnaBridge 161:aa5281ff4a02 89 kPWM_ExternalClock, /*!< EXT_CLK is used as the clock */
AnnaBridge 161:aa5281ff4a02 90 kPWM_Submodule0Clock /*!< Clock of the submodule 0 (AUX_CLK) is used as the source clock */
AnnaBridge 161:aa5281ff4a02 91 } pwm_clock_source_t;
AnnaBridge 161:aa5281ff4a02 92
AnnaBridge 161:aa5281ff4a02 93 /*! @brief PWM prescaler factor selection for clock source*/
AnnaBridge 161:aa5281ff4a02 94 typedef enum _pwm_clock_prescale
AnnaBridge 161:aa5281ff4a02 95 {
AnnaBridge 161:aa5281ff4a02 96 kPWM_Prescale_Divide_1 = 0U, /*!< PWM clock frequency = fclk/1 */
AnnaBridge 161:aa5281ff4a02 97 kPWM_Prescale_Divide_2, /*!< PWM clock frequency = fclk/2 */
AnnaBridge 161:aa5281ff4a02 98 kPWM_Prescale_Divide_4, /*!< PWM clock frequency = fclk/4 */
AnnaBridge 161:aa5281ff4a02 99 kPWM_Prescale_Divide_8, /*!< PWM clock frequency = fclk/8 */
AnnaBridge 161:aa5281ff4a02 100 kPWM_Prescale_Divide_16, /*!< PWM clock frequency = fclk/16 */
AnnaBridge 161:aa5281ff4a02 101 kPWM_Prescale_Divide_32, /*!< PWM clock frequency = fclk/32 */
AnnaBridge 161:aa5281ff4a02 102 kPWM_Prescale_Divide_64, /*!< PWM clock frequency = fclk/64 */
AnnaBridge 161:aa5281ff4a02 103 kPWM_Prescale_Divide_128 /*!< PWM clock frequency = fclk/128 */
AnnaBridge 161:aa5281ff4a02 104 } pwm_clock_prescale_t;
AnnaBridge 161:aa5281ff4a02 105
AnnaBridge 161:aa5281ff4a02 106 /*! @brief Options that can trigger a PWM FORCE_OUT */
AnnaBridge 161:aa5281ff4a02 107 typedef enum _pwm_force_output_trigger
AnnaBridge 161:aa5281ff4a02 108 {
AnnaBridge 161:aa5281ff4a02 109 kPWM_Force_Local = 0U, /*!< The local force signal, CTRL2[FORCE], from the submodule is used to force updates */
AnnaBridge 161:aa5281ff4a02 110 kPWM_Force_Master, /*!< The master force signal from submodule 0 is used to force updates */
AnnaBridge 161:aa5281ff4a02 111 kPWM_Force_LocalReload, /*!< The local reload signal from this submodule is used to force updates without regard to
AnnaBridge 161:aa5281ff4a02 112 the state of LDOK */
AnnaBridge 161:aa5281ff4a02 113 kPWM_Force_MasterReload, /*!< The master reload signal from submodule 0 is used to force updates if LDOK is set */
AnnaBridge 161:aa5281ff4a02 114 kPWM_Force_LocalSync, /*!< The local sync signal from this submodule is used to force updates */
AnnaBridge 161:aa5281ff4a02 115 kPWM_Force_MasterSync, /*!< The master sync signal from submodule0 is used to force updates */
AnnaBridge 161:aa5281ff4a02 116 kPWM_Force_External, /*!< The external force signal, EXT_FORCE, from outside the PWM module causes updates */
AnnaBridge 161:aa5281ff4a02 117 kPWM_Force_ExternalSync /*!< The external sync signal, EXT_SYNC, from outside the PWM module causes updates */
AnnaBridge 161:aa5281ff4a02 118 } pwm_force_output_trigger_t;
AnnaBridge 161:aa5281ff4a02 119
AnnaBridge 161:aa5281ff4a02 120 /*! @brief PWM counter initialization options */
AnnaBridge 161:aa5281ff4a02 121 typedef enum _pwm_init_source
AnnaBridge 161:aa5281ff4a02 122 {
AnnaBridge 161:aa5281ff4a02 123 kPWM_Initialize_LocalSync = 0U, /*!< Local sync causes initialization */
AnnaBridge 161:aa5281ff4a02 124 kPWM_Initialize_MasterReload, /*!< Master reload from submodule 0 causes initialization */
AnnaBridge 161:aa5281ff4a02 125 kPWM_Initialize_MasterSync, /*!< Master sync from submodule 0 causes initialization */
AnnaBridge 161:aa5281ff4a02 126 kPWM_Initialize_ExtSync /*!< EXT_SYNC causes initialization */
AnnaBridge 161:aa5281ff4a02 127 } pwm_init_source_t;
AnnaBridge 161:aa5281ff4a02 128
AnnaBridge 161:aa5281ff4a02 129 /*! @brief PWM load frequency selection */
AnnaBridge 161:aa5281ff4a02 130 typedef enum _pwm_load_frequency
AnnaBridge 161:aa5281ff4a02 131 {
AnnaBridge 161:aa5281ff4a02 132 kPWM_LoadEveryOportunity = 0U, /*!< Every PWM opportunity */
AnnaBridge 161:aa5281ff4a02 133 kPWM_LoadEvery2Oportunity, /*!< Every 2 PWM opportunities */
AnnaBridge 161:aa5281ff4a02 134 kPWM_LoadEvery3Oportunity, /*!< Every 3 PWM opportunities */
AnnaBridge 161:aa5281ff4a02 135 kPWM_LoadEvery4Oportunity, /*!< Every 4 PWM opportunities */
AnnaBridge 161:aa5281ff4a02 136 kPWM_LoadEvery5Oportunity, /*!< Every 5 PWM opportunities */
AnnaBridge 161:aa5281ff4a02 137 kPWM_LoadEvery6Oportunity, /*!< Every 6 PWM opportunities */
AnnaBridge 161:aa5281ff4a02 138 kPWM_LoadEvery7Oportunity, /*!< Every 7 PWM opportunities */
AnnaBridge 161:aa5281ff4a02 139 kPWM_LoadEvery8Oportunity, /*!< Every 8 PWM opportunities */
AnnaBridge 161:aa5281ff4a02 140 kPWM_LoadEvery9Oportunity, /*!< Every 9 PWM opportunities */
AnnaBridge 161:aa5281ff4a02 141 kPWM_LoadEvery10Oportunity, /*!< Every 10 PWM opportunities */
AnnaBridge 161:aa5281ff4a02 142 kPWM_LoadEvery11Oportunity, /*!< Every 11 PWM opportunities */
AnnaBridge 161:aa5281ff4a02 143 kPWM_LoadEvery12Oportunity, /*!< Every 12 PWM opportunities */
AnnaBridge 161:aa5281ff4a02 144 kPWM_LoadEvery13Oportunity, /*!< Every 13 PWM opportunities */
AnnaBridge 161:aa5281ff4a02 145 kPWM_LoadEvery14Oportunity, /*!< Every 14 PWM opportunities */
AnnaBridge 161:aa5281ff4a02 146 kPWM_LoadEvery15Oportunity, /*!< Every 15 PWM opportunities */
AnnaBridge 161:aa5281ff4a02 147 kPWM_LoadEvery16Oportunity /*!< Every 16 PWM opportunities */
AnnaBridge 161:aa5281ff4a02 148 } pwm_load_frequency_t;
AnnaBridge 161:aa5281ff4a02 149
AnnaBridge 161:aa5281ff4a02 150 /*! @brief List of PWM fault selections */
AnnaBridge 161:aa5281ff4a02 151 typedef enum _pwm_fault_input
AnnaBridge 161:aa5281ff4a02 152 {
AnnaBridge 161:aa5281ff4a02 153 kPWM_Fault_0 = 0U, /*!< Fault 0 input pin */
AnnaBridge 161:aa5281ff4a02 154 kPWM_Fault_1, /*!< Fault 1 input pin */
AnnaBridge 161:aa5281ff4a02 155 kPWM_Fault_2, /*!< Fault 2 input pin */
AnnaBridge 161:aa5281ff4a02 156 kPWM_Fault_3 /*!< Fault 3 input pin */
AnnaBridge 161:aa5281ff4a02 157 } pwm_fault_input_t;
AnnaBridge 161:aa5281ff4a02 158
AnnaBridge 161:aa5281ff4a02 159 /*! @brief PWM capture edge select */
AnnaBridge 161:aa5281ff4a02 160 typedef enum _pwm_input_capture_edge
AnnaBridge 161:aa5281ff4a02 161 {
AnnaBridge 161:aa5281ff4a02 162 kPWM_Disable = 0U, /*!< Disabled */
AnnaBridge 161:aa5281ff4a02 163 kPWM_FallingEdge, /*!< Capture on falling edge only */
AnnaBridge 161:aa5281ff4a02 164 kPWM_RisingEdge, /*!< Capture on rising edge only */
AnnaBridge 161:aa5281ff4a02 165 kPWM_RiseAndFallEdge /*!< Capture on rising or falling edge */
AnnaBridge 161:aa5281ff4a02 166 } pwm_input_capture_edge_t;
AnnaBridge 161:aa5281ff4a02 167
AnnaBridge 161:aa5281ff4a02 168 /*! @brief PWM output options when a FORCE_OUT signal is asserted */
AnnaBridge 161:aa5281ff4a02 169 typedef enum _pwm_force_signal
AnnaBridge 161:aa5281ff4a02 170 {
AnnaBridge 161:aa5281ff4a02 171 kPWM_UsePwm = 0U, /*!< Generated PWM signal is used by the deadtime logic.*/
AnnaBridge 161:aa5281ff4a02 172 kPWM_InvertedPwm, /*!< Inverted PWM signal is used by the deadtime logic.*/
AnnaBridge 161:aa5281ff4a02 173 kPWM_SoftwareControl, /*!< Software controlled value is used by the deadtime logic. */
AnnaBridge 161:aa5281ff4a02 174 kPWM_UseExternal /*!< PWM_EXTA signal is used by the deadtime logic. */
AnnaBridge 161:aa5281ff4a02 175 } pwm_force_signal_t;
AnnaBridge 161:aa5281ff4a02 176
AnnaBridge 161:aa5281ff4a02 177 /*! @brief Options available for the PWM A & B pair operation */
AnnaBridge 161:aa5281ff4a02 178 typedef enum _pwm_chnl_pair_operation
AnnaBridge 161:aa5281ff4a02 179 {
AnnaBridge 161:aa5281ff4a02 180 kPWM_Independent = 0U, /*!< PWM A & PWM B operate as 2 independent channels */
AnnaBridge 161:aa5281ff4a02 181 kPWM_ComplementaryPwmA, /*!< PWM A & PWM B are complementary channels, PWM A generates the signal */
AnnaBridge 161:aa5281ff4a02 182 kPWM_ComplementaryPwmB /*!< PWM A & PWM B are complementary channels, PWM B generates the signal */
AnnaBridge 161:aa5281ff4a02 183 } pwm_chnl_pair_operation_t;
AnnaBridge 161:aa5281ff4a02 184
AnnaBridge 161:aa5281ff4a02 185 /*! @brief Options available on how to load the buffered-registers with new values */
AnnaBridge 161:aa5281ff4a02 186 typedef enum _pwm_register_reload
AnnaBridge 161:aa5281ff4a02 187 {
AnnaBridge 161:aa5281ff4a02 188 kPWM_ReloadImmediate = 0U, /*!< Buffered-registers get loaded with new values as soon as LDOK bit is set */
AnnaBridge 161:aa5281ff4a02 189 kPWM_ReloadPwmHalfCycle, /*!< Registers loaded on a PWM half cycle */
AnnaBridge 161:aa5281ff4a02 190 kPWM_ReloadPwmFullCycle, /*!< Registers loaded on a PWM full cycle */
AnnaBridge 161:aa5281ff4a02 191 kPWM_ReloadPwmHalfAndFullCycle /*!< Registers loaded on a PWM half & full cycle */
AnnaBridge 161:aa5281ff4a02 192 } pwm_register_reload_t;
AnnaBridge 161:aa5281ff4a02 193
AnnaBridge 161:aa5281ff4a02 194 /*! @brief Options available on how to re-enable the PWM output when recovering from a fault */
AnnaBridge 161:aa5281ff4a02 195 typedef enum _pwm_fault_recovery_mode
AnnaBridge 161:aa5281ff4a02 196 {
AnnaBridge 161:aa5281ff4a02 197 kPWM_NoRecovery = 0U, /*!< PWM output will stay inactive */
AnnaBridge 161:aa5281ff4a02 198 kPWM_RecoverHalfCycle, /*!< PWM output re-enabled at the first half cycle */
AnnaBridge 161:aa5281ff4a02 199 kPWM_RecoverFullCycle, /*!< PWM output re-enabled at the first full cycle */
AnnaBridge 161:aa5281ff4a02 200 kPWM_RecoverHalfAndFullCycle /*!< PWM output re-enabled at the first half or full cycle */
AnnaBridge 161:aa5281ff4a02 201 } pwm_fault_recovery_mode_t;
AnnaBridge 161:aa5281ff4a02 202
AnnaBridge 161:aa5281ff4a02 203 /*! @brief List of PWM interrupt options */
AnnaBridge 161:aa5281ff4a02 204 typedef enum _pwm_interrupt_enable
AnnaBridge 161:aa5281ff4a02 205 {
AnnaBridge 161:aa5281ff4a02 206 kPWM_CompareVal0InterruptEnable = (1U << 0), /*!< PWM VAL0 compare interrupt */
AnnaBridge 161:aa5281ff4a02 207 kPWM_CompareVal1InterruptEnable = (1U << 1), /*!< PWM VAL1 compare interrupt */
AnnaBridge 161:aa5281ff4a02 208 kPWM_CompareVal2InterruptEnable = (1U << 2), /*!< PWM VAL2 compare interrupt */
AnnaBridge 161:aa5281ff4a02 209 kPWM_CompareVal3InterruptEnable = (1U << 3), /*!< PWM VAL3 compare interrupt */
AnnaBridge 161:aa5281ff4a02 210 kPWM_CompareVal4InterruptEnable = (1U << 4), /*!< PWM VAL4 compare interrupt */
AnnaBridge 161:aa5281ff4a02 211 kPWM_CompareVal5InterruptEnable = (1U << 5), /*!< PWM VAL5 compare interrupt */
AnnaBridge 161:aa5281ff4a02 212 kPWM_CaptureX0InterruptEnable = (1U << 6), /*!< PWM capture X0 interrupt */
AnnaBridge 161:aa5281ff4a02 213 kPWM_CaptureX1InterruptEnable = (1U << 7), /*!< PWM capture X1 interrupt */
AnnaBridge 161:aa5281ff4a02 214 kPWM_CaptureB0InterruptEnable = (1U << 8), /*!< PWM capture B0 interrupt */
AnnaBridge 161:aa5281ff4a02 215 kPWM_CaptureB1InterruptEnable = (1U << 9), /*!< PWM capture B1 interrupt */
AnnaBridge 161:aa5281ff4a02 216 kPWM_CaptureA0InterruptEnable = (1U << 10), /*!< PWM capture A0 interrupt */
AnnaBridge 161:aa5281ff4a02 217 kPWM_CaptureA1InterruptEnable = (1U << 11), /*!< PWM capture A1 interrupt */
AnnaBridge 161:aa5281ff4a02 218 kPWM_ReloadInterruptEnable = (1U << 12), /*!< PWM reload interrupt */
AnnaBridge 161:aa5281ff4a02 219 kPWM_ReloadErrorInterruptEnable = (1U << 13), /*!< PWM reload error interrupt */
AnnaBridge 161:aa5281ff4a02 220 kPWM_Fault0InterruptEnable = (1U << 16), /*!< PWM fault 0 interrupt */
AnnaBridge 161:aa5281ff4a02 221 kPWM_Fault1InterruptEnable = (1U << 17), /*!< PWM fault 1 interrupt */
AnnaBridge 161:aa5281ff4a02 222 kPWM_Fault2InterruptEnable = (1U << 18), /*!< PWM fault 2 interrupt */
AnnaBridge 161:aa5281ff4a02 223 kPWM_Fault3InterruptEnable = (1U << 19) /*!< PWM fault 3 interrupt */
AnnaBridge 161:aa5281ff4a02 224 } pwm_interrupt_enable_t;
AnnaBridge 161:aa5281ff4a02 225
AnnaBridge 161:aa5281ff4a02 226 /*! @brief List of PWM status flags */
AnnaBridge 161:aa5281ff4a02 227 typedef enum _pwm_status_flags
AnnaBridge 161:aa5281ff4a02 228 {
AnnaBridge 161:aa5281ff4a02 229 kPWM_CompareVal0Flag = (1U << 0), /*!< PWM VAL0 compare flag */
AnnaBridge 161:aa5281ff4a02 230 kPWM_CompareVal1Flag = (1U << 1), /*!< PWM VAL1 compare flag */
AnnaBridge 161:aa5281ff4a02 231 kPWM_CompareVal2Flag = (1U << 2), /*!< PWM VAL2 compare flag */
AnnaBridge 161:aa5281ff4a02 232 kPWM_CompareVal3Flag = (1U << 3), /*!< PWM VAL3 compare flag */
AnnaBridge 161:aa5281ff4a02 233 kPWM_CompareVal4Flag = (1U << 4), /*!< PWM VAL4 compare flag */
AnnaBridge 161:aa5281ff4a02 234 kPWM_CompareVal5Flag = (1U << 5), /*!< PWM VAL5 compare flag */
AnnaBridge 161:aa5281ff4a02 235 kPWM_CaptureX0Flag = (1U << 6), /*!< PWM capture X0 flag */
AnnaBridge 161:aa5281ff4a02 236 kPWM_CaptureX1Flag = (1U << 7), /*!< PWM capture X1 flag */
AnnaBridge 161:aa5281ff4a02 237 kPWM_CaptureB0Flag = (1U << 8), /*!< PWM capture B0 flag */
AnnaBridge 161:aa5281ff4a02 238 kPWM_CaptureB1Flag = (1U << 9), /*!< PWM capture B1 flag */
AnnaBridge 161:aa5281ff4a02 239 kPWM_CaptureA0Flag = (1U << 10), /*!< PWM capture A0 flag */
AnnaBridge 161:aa5281ff4a02 240 kPWM_CaptureA1Flag = (1U << 11), /*!< PWM capture A1 flag */
AnnaBridge 161:aa5281ff4a02 241 kPWM_ReloadFlag = (1U << 12), /*!< PWM reload flag */
AnnaBridge 161:aa5281ff4a02 242 kPWM_ReloadErrorFlag = (1U << 13), /*!< PWM reload error flag */
AnnaBridge 161:aa5281ff4a02 243 kPWM_RegUpdatedFlag = (1U << 14), /*!< PWM registers updated flag */
AnnaBridge 161:aa5281ff4a02 244 kPWM_Fault0Flag = (1U << 16), /*!< PWM fault 0 flag */
AnnaBridge 161:aa5281ff4a02 245 kPWM_Fault1Flag = (1U << 17), /*!< PWM fault 1 flag */
AnnaBridge 161:aa5281ff4a02 246 kPWM_Fault2Flag = (1U << 18), /*!< PWM fault 2 flag */
AnnaBridge 161:aa5281ff4a02 247 kPWM_Fault3Flag = (1U << 19) /*!< PWM fault 3 flag */
AnnaBridge 161:aa5281ff4a02 248 } pwm_status_flags_t;
AnnaBridge 161:aa5281ff4a02 249
AnnaBridge 161:aa5281ff4a02 250 /*! @brief PWM operation mode */
AnnaBridge 161:aa5281ff4a02 251 typedef enum _pwm_mode
AnnaBridge 161:aa5281ff4a02 252 {
AnnaBridge 161:aa5281ff4a02 253 kPWM_SignedCenterAligned = 0U, /*!< Signed center-aligned */
AnnaBridge 161:aa5281ff4a02 254 kPWM_CenterAligned, /*!< Unsigned cente-aligned */
AnnaBridge 161:aa5281ff4a02 255 kPWM_SignedEdgeAligned, /*!< Signed edge-aligned */
AnnaBridge 161:aa5281ff4a02 256 kPWM_EdgeAligned /*!< Unsigned edge-aligned */
AnnaBridge 161:aa5281ff4a02 257 } pwm_mode_t;
AnnaBridge 161:aa5281ff4a02 258
AnnaBridge 161:aa5281ff4a02 259 /*! @brief PWM output pulse mode, high-true or low-true */
AnnaBridge 161:aa5281ff4a02 260 typedef enum _pwm_level_select
AnnaBridge 161:aa5281ff4a02 261 {
AnnaBridge 161:aa5281ff4a02 262 kPWM_HighTrue = 0U, /*!< High level represents "on" or "active" state */
AnnaBridge 161:aa5281ff4a02 263 kPWM_LowTrue /*!< Low level represents "on" or "active" state */
AnnaBridge 161:aa5281ff4a02 264 } pwm_level_select_t;
AnnaBridge 161:aa5281ff4a02 265
AnnaBridge 161:aa5281ff4a02 266 /*! @brief PWM reload source select */
AnnaBridge 161:aa5281ff4a02 267 typedef enum _pwm_reload_source_select
AnnaBridge 161:aa5281ff4a02 268 {
AnnaBridge 161:aa5281ff4a02 269 kPWM_LocalReload = 0U, /*!< The local reload signal is used to reload registers */
AnnaBridge 161:aa5281ff4a02 270 kPWM_MasterReload /*!< The master reload signal (from submodule 0) is used to reload */
AnnaBridge 161:aa5281ff4a02 271 } pwm_reload_source_select_t;
AnnaBridge 161:aa5281ff4a02 272
AnnaBridge 161:aa5281ff4a02 273 /*! @brief PWM fault clearing options */
AnnaBridge 161:aa5281ff4a02 274 typedef enum _pwm_fault_clear
AnnaBridge 161:aa5281ff4a02 275 {
AnnaBridge 161:aa5281ff4a02 276 kPWM_Automatic = 0U, /*!< Automatic fault clearing */
AnnaBridge 161:aa5281ff4a02 277 kPWM_ManualNormal, /*!< Manual fault clearing with no fault safety mode */
AnnaBridge 161:aa5281ff4a02 278 kPWM_ManualSafety /*!< Manual fault clearing with fault safety mode */
AnnaBridge 161:aa5281ff4a02 279 } pwm_fault_clear_t;
AnnaBridge 161:aa5281ff4a02 280
AnnaBridge 161:aa5281ff4a02 281 /*! @brief Options for submodule master control operation */
AnnaBridge 161:aa5281ff4a02 282 typedef enum _pwm_module_control
AnnaBridge 161:aa5281ff4a02 283 {
AnnaBridge 161:aa5281ff4a02 284 kPWM_Control_Module_0 = (1U << 0), /*!< Control submodule 0's start/stop,buffer reload operation */
AnnaBridge 161:aa5281ff4a02 285 kPWM_Control_Module_1 = (1U << 1), /*!< Control submodule 1's start/stop,buffer reload operation */
AnnaBridge 161:aa5281ff4a02 286 kPWM_Control_Module_2 = (1U << 2), /*!< Control submodule 2's start/stop,buffer reload operation */
AnnaBridge 161:aa5281ff4a02 287 kPWM_Control_Module_3 = (1U << 3) /*!< Control submodule 3's start/stop,buffer reload operation */
AnnaBridge 161:aa5281ff4a02 288 } pwm_module_control_t;
AnnaBridge 161:aa5281ff4a02 289
AnnaBridge 161:aa5281ff4a02 290 /*! @brief Structure for the user to define the PWM signal characteristics */
AnnaBridge 161:aa5281ff4a02 291 typedef struct _pwm_signal_param
AnnaBridge 161:aa5281ff4a02 292 {
AnnaBridge 161:aa5281ff4a02 293 pwm_channels_t pwmChannel; /*!< PWM channel being configured; PWM A or PWM B */
AnnaBridge 161:aa5281ff4a02 294 uint8_t dutyCyclePercent; /*!< PWM pulse width, value should be between 0 to 100
AnnaBridge 161:aa5281ff4a02 295 0=inactive signal(0% duty cycle)...
AnnaBridge 161:aa5281ff4a02 296 100=always active signal (100% duty cycle)*/
AnnaBridge 161:aa5281ff4a02 297 pwm_level_select_t level; /*!< PWM output active level select */
AnnaBridge 161:aa5281ff4a02 298 uint16_t deadtimeValue; /*!< The deadtime value; only used if channel pair is operating in complementary mode */
AnnaBridge 161:aa5281ff4a02 299 } pwm_signal_param_t;
AnnaBridge 161:aa5281ff4a02 300
AnnaBridge 161:aa5281ff4a02 301 /*!
AnnaBridge 161:aa5281ff4a02 302 * @brief PWM config structure
AnnaBridge 161:aa5281ff4a02 303 *
AnnaBridge 161:aa5281ff4a02 304 * This structure holds the configuration settings for the PWM peripheral. To initialize this
AnnaBridge 161:aa5281ff4a02 305 * structure to reasonable defaults, call the PWM_GetDefaultConfig() function and pass a
AnnaBridge 161:aa5281ff4a02 306 * pointer to your config structure instance.
AnnaBridge 161:aa5281ff4a02 307 *
AnnaBridge 161:aa5281ff4a02 308 * The config struct can be made const so it resides in flash
AnnaBridge 161:aa5281ff4a02 309 */
AnnaBridge 161:aa5281ff4a02 310 typedef struct _pwm_config
AnnaBridge 161:aa5281ff4a02 311 {
AnnaBridge 161:aa5281ff4a02 312 bool enableDebugMode; /*!< true: PWM continues to run in debug mode;
AnnaBridge 161:aa5281ff4a02 313 false: PWM is paused in debug mode */
AnnaBridge 161:aa5281ff4a02 314 bool enableWait; /*!< true: PWM continues to run in WAIT mode;
AnnaBridge 161:aa5281ff4a02 315 false: PWM is paused in WAIT mode */
AnnaBridge 161:aa5281ff4a02 316 uint8_t faultFilterCount; /*!< Fault filter count */
AnnaBridge 161:aa5281ff4a02 317 uint8_t faultFilterPeriod; /*!< Fault filter period;value of 0 will bypass the filter */
AnnaBridge 161:aa5281ff4a02 318 pwm_init_source_t initializationControl; /*!< Option to initialize the counter */
AnnaBridge 161:aa5281ff4a02 319 pwm_clock_source_t clockSource; /*!< Clock source for the counter */
AnnaBridge 161:aa5281ff4a02 320 pwm_clock_prescale_t prescale; /*!< Pre-scaler to divide down the clock */
AnnaBridge 161:aa5281ff4a02 321 pwm_chnl_pair_operation_t pairOperation; /*!< Channel pair in indepedent or complementary mode */
AnnaBridge 161:aa5281ff4a02 322 pwm_register_reload_t reloadLogic; /*!< PWM Reload logic setup */
AnnaBridge 161:aa5281ff4a02 323 pwm_reload_source_select_t reloadSelect; /*!< Reload source select */
AnnaBridge 161:aa5281ff4a02 324 pwm_load_frequency_t reloadFrequency; /*!< Specifies when to reload, used when user's choice
AnnaBridge 161:aa5281ff4a02 325 is not immediate reload */
AnnaBridge 161:aa5281ff4a02 326 pwm_force_output_trigger_t forceTrigger; /*!< Specify which signal will trigger a FORCE_OUT */
AnnaBridge 161:aa5281ff4a02 327 } pwm_config_t;
AnnaBridge 161:aa5281ff4a02 328
AnnaBridge 161:aa5281ff4a02 329 /*! @brief Structure is used to hold the parameters to configure a PWM fault */
AnnaBridge 161:aa5281ff4a02 330 typedef struct _pwm_fault_param
AnnaBridge 161:aa5281ff4a02 331 {
AnnaBridge 161:aa5281ff4a02 332 pwm_fault_clear_t faultClearingMode; /*!< Fault clearing mode to use */
AnnaBridge 161:aa5281ff4a02 333 bool faultLevel; /*!< true: Logic 1 indicates fault;
AnnaBridge 161:aa5281ff4a02 334 false: Logic 0 indicates fault */
AnnaBridge 161:aa5281ff4a02 335 bool enableCombinationalPath; /*!< true: Combinational Path from fault input is enabled;
AnnaBridge 161:aa5281ff4a02 336 false: No combination path is available */
AnnaBridge 161:aa5281ff4a02 337 pwm_fault_recovery_mode_t recoverMode; /*!< Specify when to re-enable the PWM output */
AnnaBridge 161:aa5281ff4a02 338 } pwm_fault_param_t;
AnnaBridge 161:aa5281ff4a02 339
AnnaBridge 161:aa5281ff4a02 340 /*!
AnnaBridge 161:aa5281ff4a02 341 * @brief Structure is used to hold parameters to configure the capture capability of a signal pin
AnnaBridge 161:aa5281ff4a02 342 */
AnnaBridge 161:aa5281ff4a02 343 typedef struct _pwm_input_capture_param
AnnaBridge 161:aa5281ff4a02 344 {
AnnaBridge 161:aa5281ff4a02 345 bool captureInputSel; /*!< true: Use the edge counter signal as source
AnnaBridge 161:aa5281ff4a02 346 false: Use the raw input signal from the pin as source */
AnnaBridge 161:aa5281ff4a02 347 uint8_t edgeCompareValue; /*!< Compare value, used only if edge counter is used as source */
AnnaBridge 161:aa5281ff4a02 348 pwm_input_capture_edge_t edge0; /*!< Specify which edge causes a capture for input circuitry 0 */
AnnaBridge 161:aa5281ff4a02 349 pwm_input_capture_edge_t edge1; /*!< Specify which edge causes a capture for input circuitry 1 */
AnnaBridge 161:aa5281ff4a02 350 bool enableOneShotCapture; /*!< true: Use one-shot capture mode;
AnnaBridge 161:aa5281ff4a02 351 false: Use free-running capture mode */
AnnaBridge 161:aa5281ff4a02 352 uint8_t fifoWatermark; /*!< Watermark level for capture FIFO. The capture flags in
AnnaBridge 161:aa5281ff4a02 353 the status register will set if the word count in the FIFO
AnnaBridge 161:aa5281ff4a02 354 is greater than this watermark level */
AnnaBridge 161:aa5281ff4a02 355 } pwm_input_capture_param_t;
AnnaBridge 161:aa5281ff4a02 356
AnnaBridge 161:aa5281ff4a02 357 /*******************************************************************************
AnnaBridge 161:aa5281ff4a02 358 * API
AnnaBridge 161:aa5281ff4a02 359 ******************************************************************************/
AnnaBridge 161:aa5281ff4a02 360
AnnaBridge 161:aa5281ff4a02 361 #if defined(__cplusplus)
AnnaBridge 161:aa5281ff4a02 362 extern "C" {
AnnaBridge 161:aa5281ff4a02 363 #endif
AnnaBridge 161:aa5281ff4a02 364
AnnaBridge 161:aa5281ff4a02 365 /*!
AnnaBridge 161:aa5281ff4a02 366 * @name Initialization and deinitialization
AnnaBridge 161:aa5281ff4a02 367 * @{
AnnaBridge 161:aa5281ff4a02 368 */
AnnaBridge 161:aa5281ff4a02 369
AnnaBridge 161:aa5281ff4a02 370 /*!
AnnaBridge 161:aa5281ff4a02 371 * @brief Ungates the PWM submodule clock and configures the peripheral for basic operation.
AnnaBridge 161:aa5281ff4a02 372 *
AnnaBridge 161:aa5281ff4a02 373 * @note This API should be called at the beginning of the application using the PWM driver.
AnnaBridge 161:aa5281ff4a02 374 *
AnnaBridge 161:aa5281ff4a02 375 * @param base PWM peripheral base address
AnnaBridge 161:aa5281ff4a02 376 * @param subModule PWM submodule to configure
AnnaBridge 161:aa5281ff4a02 377 * @param config Pointer to user's PWM config structure.
AnnaBridge 161:aa5281ff4a02 378 *
AnnaBridge 161:aa5281ff4a02 379 * @return kStatus_Success means success; else failed.
AnnaBridge 161:aa5281ff4a02 380 */
AnnaBridge 161:aa5281ff4a02 381 status_t PWM_Init(PWM_Type *base, pwm_submodule_t subModule, const pwm_config_t *config);
AnnaBridge 161:aa5281ff4a02 382
AnnaBridge 161:aa5281ff4a02 383 /*!
AnnaBridge 161:aa5281ff4a02 384 * @brief Gate the PWM submodule clock
AnnaBridge 161:aa5281ff4a02 385 *
AnnaBridge 161:aa5281ff4a02 386 * @param base PWM peripheral base address
AnnaBridge 161:aa5281ff4a02 387 * @param subModule PWM submodule to deinitialize
AnnaBridge 161:aa5281ff4a02 388 */
AnnaBridge 161:aa5281ff4a02 389 void PWM_Deinit(PWM_Type *base, pwm_submodule_t subModule);
AnnaBridge 161:aa5281ff4a02 390
AnnaBridge 161:aa5281ff4a02 391 /*!
AnnaBridge 161:aa5281ff4a02 392 * @brief Fill in the PWM config struct with the default settings
AnnaBridge 161:aa5281ff4a02 393 *
AnnaBridge 161:aa5281ff4a02 394 * The default values are:
AnnaBridge 161:aa5281ff4a02 395 * @code
AnnaBridge 161:aa5281ff4a02 396 * config->enableDebugMode = false;
AnnaBridge 161:aa5281ff4a02 397 * config->enableWait = false;
AnnaBridge 161:aa5281ff4a02 398 * config->reloadSelect = kPWM_LocalReload;
AnnaBridge 161:aa5281ff4a02 399 * config->faultFilterCount = 0;
AnnaBridge 161:aa5281ff4a02 400 * config->faultFilterPeriod = 0;
AnnaBridge 161:aa5281ff4a02 401 * config->clockSource = kPWM_BusClock;
AnnaBridge 161:aa5281ff4a02 402 * config->prescale = kPWM_Prescale_Divide_1;
AnnaBridge 161:aa5281ff4a02 403 * config->initializationControl = kPWM_Initialize_LocalSync;
AnnaBridge 161:aa5281ff4a02 404 * config->forceTrigger = kPWM_Force_Local;
AnnaBridge 161:aa5281ff4a02 405 * config->reloadFrequency = kPWM_LoadEveryOportunity;
AnnaBridge 161:aa5281ff4a02 406 * config->reloadLogic = kPWM_ReloadImmediate;
AnnaBridge 161:aa5281ff4a02 407 * config->pairOperation = kPWM_Independent;
AnnaBridge 161:aa5281ff4a02 408 * @endcode
AnnaBridge 161:aa5281ff4a02 409 * @param config Pointer to user's PWM config structure.
AnnaBridge 161:aa5281ff4a02 410 */
AnnaBridge 161:aa5281ff4a02 411 void PWM_GetDefaultConfig(pwm_config_t *config);
AnnaBridge 161:aa5281ff4a02 412
AnnaBridge 161:aa5281ff4a02 413 /*! @}*/
AnnaBridge 161:aa5281ff4a02 414
AnnaBridge 161:aa5281ff4a02 415 /*!
AnnaBridge 161:aa5281ff4a02 416 * @name Module PWM output
AnnaBridge 161:aa5281ff4a02 417 * @{
AnnaBridge 161:aa5281ff4a02 418 */
AnnaBridge 161:aa5281ff4a02 419 /*!
AnnaBridge 161:aa5281ff4a02 420 * @brief Sets up the PWM signals for a PWM submodule.
AnnaBridge 161:aa5281ff4a02 421 *
AnnaBridge 161:aa5281ff4a02 422 * The function initializes the submodule according to the parameters passed in by the user. The function
AnnaBridge 161:aa5281ff4a02 423 * also sets up the value compare registers to match the PWM signal requirements.
AnnaBridge 161:aa5281ff4a02 424 * If the dead time insertion logic is enabled, the pulse period is reduced by the
AnnaBridge 161:aa5281ff4a02 425 * dead time period specified by the user.
AnnaBridge 161:aa5281ff4a02 426 *
AnnaBridge 161:aa5281ff4a02 427 * @param base PWM peripheral base address
AnnaBridge 161:aa5281ff4a02 428 * @param subModule PWM submodule to configure
AnnaBridge 161:aa5281ff4a02 429 * @param chnlParams Array of PWM channel parameters to configure the channel(s)
AnnaBridge 161:aa5281ff4a02 430 * @param numOfChnls Number of channels to configure, this should be the size of the array passed in.
AnnaBridge 161:aa5281ff4a02 431 * Array size should not be more than 2 as each submodule has 2 pins to output PWM
AnnaBridge 161:aa5281ff4a02 432 * @param mode PWM operation mode, options available in enumeration ::pwm_mode_t
AnnaBridge 161:aa5281ff4a02 433 * @param pwmFreq_Hz PWM signal frequency in Hz
AnnaBridge 161:aa5281ff4a02 434 * @param srcClock_Hz PWM main counter clock in Hz.
AnnaBridge 161:aa5281ff4a02 435 *
AnnaBridge 161:aa5281ff4a02 436 * @return Returns kStatusFail if there was error setting up the signal; kStatusSuccess otherwise
AnnaBridge 161:aa5281ff4a02 437 */
AnnaBridge 161:aa5281ff4a02 438 status_t PWM_SetupPwm(PWM_Type *base,
AnnaBridge 161:aa5281ff4a02 439 pwm_submodule_t subModule,
AnnaBridge 161:aa5281ff4a02 440 const pwm_signal_param_t *chnlParams,
AnnaBridge 161:aa5281ff4a02 441 uint8_t numOfChnls,
AnnaBridge 161:aa5281ff4a02 442 pwm_mode_t mode,
AnnaBridge 161:aa5281ff4a02 443 uint32_t pwmFreq_Hz,
AnnaBridge 161:aa5281ff4a02 444 uint32_t srcClock_Hz);
AnnaBridge 161:aa5281ff4a02 445
AnnaBridge 161:aa5281ff4a02 446 /*!
AnnaBridge 161:aa5281ff4a02 447 * @brief Updates the PWM signal's dutycycle.
AnnaBridge 161:aa5281ff4a02 448 *
AnnaBridge 161:aa5281ff4a02 449 * The function updates the PWM dutycyle to the new value that is passed in.
AnnaBridge 161:aa5281ff4a02 450 * If the dead time insertion logic is enabled then the pulse period is reduced by the
AnnaBridge 161:aa5281ff4a02 451 * dead time period specified by the user.
AnnaBridge 161:aa5281ff4a02 452 *
AnnaBridge 161:aa5281ff4a02 453 * @param base PWM peripheral base address
AnnaBridge 161:aa5281ff4a02 454 * @param subModule PWM submodule to configure
AnnaBridge 161:aa5281ff4a02 455 * @param pwmSignal Signal (PWM A or PWM B) to update
AnnaBridge 161:aa5281ff4a02 456 * @param currPwmMode The current PWM mode set during PWM setup
AnnaBridge 161:aa5281ff4a02 457 * @param dutyCyclePercent New PWM pulse width, value should be between 0 to 100
AnnaBridge 161:aa5281ff4a02 458 * 0=inactive signal(0% duty cycle)...
AnnaBridge 161:aa5281ff4a02 459 * 100=active signal (100% duty cycle)
AnnaBridge 161:aa5281ff4a02 460 */
AnnaBridge 161:aa5281ff4a02 461 void PWM_UpdatePwmDutycycle(PWM_Type *base,
AnnaBridge 161:aa5281ff4a02 462 pwm_submodule_t subModule,
AnnaBridge 161:aa5281ff4a02 463 pwm_channels_t pwmSignal,
AnnaBridge 161:aa5281ff4a02 464 pwm_mode_t currPwmMode,
AnnaBridge 161:aa5281ff4a02 465 uint8_t dutyCyclePercent);
AnnaBridge 161:aa5281ff4a02 466
AnnaBridge 161:aa5281ff4a02 467 /*! @}*/
AnnaBridge 161:aa5281ff4a02 468
AnnaBridge 161:aa5281ff4a02 469 /*!
AnnaBridge 161:aa5281ff4a02 470 * @brief Sets up the PWM input capture
AnnaBridge 161:aa5281ff4a02 471 *
AnnaBridge 161:aa5281ff4a02 472 * Each PWM submodule has 3 pins that can be configured for use as input capture pins. This function
AnnaBridge 161:aa5281ff4a02 473 * sets up the capture parameters for each pin and enables the pin for input capture operation.
AnnaBridge 161:aa5281ff4a02 474 *
AnnaBridge 161:aa5281ff4a02 475 * @param base PWM peripheral base address
AnnaBridge 161:aa5281ff4a02 476 * @param subModule PWM submodule to configure
AnnaBridge 161:aa5281ff4a02 477 * @param pwmChannel Channel in the submodule to setup
AnnaBridge 161:aa5281ff4a02 478 * @param inputCaptureParams Parameters passed in to set up the input pin
AnnaBridge 161:aa5281ff4a02 479 */
AnnaBridge 161:aa5281ff4a02 480 void PWM_SetupInputCapture(PWM_Type *base,
AnnaBridge 161:aa5281ff4a02 481 pwm_submodule_t subModule,
AnnaBridge 161:aa5281ff4a02 482 pwm_channels_t pwmChannel,
AnnaBridge 161:aa5281ff4a02 483 const pwm_input_capture_param_t *inputCaptureParams);
AnnaBridge 161:aa5281ff4a02 484
AnnaBridge 161:aa5281ff4a02 485 /*!
AnnaBridge 161:aa5281ff4a02 486 * @brief Sets up the PWM fault protection.
AnnaBridge 161:aa5281ff4a02 487 *
AnnaBridge 161:aa5281ff4a02 488 * PWM has 4 fault inputs.
AnnaBridge 161:aa5281ff4a02 489 *
AnnaBridge 161:aa5281ff4a02 490 * @param base PWM peripheral base address
AnnaBridge 161:aa5281ff4a02 491 * @param faultNum PWM fault to configure.
AnnaBridge 161:aa5281ff4a02 492 * @param faultParams Pointer to the PWM fault config structure
AnnaBridge 161:aa5281ff4a02 493 */
AnnaBridge 161:aa5281ff4a02 494 void PWM_SetupFaults(PWM_Type *base, pwm_fault_input_t faultNum, const pwm_fault_param_t *faultParams);
AnnaBridge 161:aa5281ff4a02 495
AnnaBridge 161:aa5281ff4a02 496 /*!
AnnaBridge 161:aa5281ff4a02 497 * @brief Selects the signal to output on a PWM pin when a FORCE_OUT signal is asserted.
AnnaBridge 161:aa5281ff4a02 498 *
AnnaBridge 161:aa5281ff4a02 499 * The user specifies which channel to configure by supplying the submodule number and whether
AnnaBridge 161:aa5281ff4a02 500 * to modify PWM A or PWM B within that submodule.
AnnaBridge 161:aa5281ff4a02 501 *
AnnaBridge 161:aa5281ff4a02 502 * @param base PWM peripheral base address
AnnaBridge 161:aa5281ff4a02 503 * @param subModule PWM submodule to configure
AnnaBridge 161:aa5281ff4a02 504 * @param pwmChannel Channel to configure
AnnaBridge 161:aa5281ff4a02 505 * @param mode Signal to output when a FORCE_OUT is triggered
AnnaBridge 161:aa5281ff4a02 506 */
AnnaBridge 161:aa5281ff4a02 507 void PWM_SetupForceSignal(PWM_Type *base,
AnnaBridge 161:aa5281ff4a02 508 pwm_submodule_t subModule,
AnnaBridge 161:aa5281ff4a02 509 pwm_channels_t pwmChannel,
AnnaBridge 161:aa5281ff4a02 510 pwm_force_signal_t mode);
AnnaBridge 161:aa5281ff4a02 511
AnnaBridge 161:aa5281ff4a02 512 /*!
AnnaBridge 161:aa5281ff4a02 513 * @name Interrupts Interface
AnnaBridge 161:aa5281ff4a02 514 * @{
AnnaBridge 161:aa5281ff4a02 515 */
AnnaBridge 161:aa5281ff4a02 516
AnnaBridge 161:aa5281ff4a02 517 /*!
AnnaBridge 161:aa5281ff4a02 518 * @brief Enables the selected PWM interrupts
AnnaBridge 161:aa5281ff4a02 519 *
AnnaBridge 161:aa5281ff4a02 520 * @param base PWM peripheral base address
AnnaBridge 161:aa5281ff4a02 521 * @param subModule PWM submodule to configure
AnnaBridge 161:aa5281ff4a02 522 * @param mask The interrupts to enable. This is a logical OR of members of the
AnnaBridge 161:aa5281ff4a02 523 * enumeration ::pwm_interrupt_enable_t
AnnaBridge 161:aa5281ff4a02 524 */
AnnaBridge 161:aa5281ff4a02 525 void PWM_EnableInterrupts(PWM_Type *base, pwm_submodule_t subModule, uint32_t mask);
AnnaBridge 161:aa5281ff4a02 526
AnnaBridge 161:aa5281ff4a02 527 /*!
AnnaBridge 161:aa5281ff4a02 528 * @brief Disables the selected PWM interrupts
AnnaBridge 161:aa5281ff4a02 529 *
AnnaBridge 161:aa5281ff4a02 530 * @param base PWM peripheral base address
AnnaBridge 161:aa5281ff4a02 531 * @param subModule PWM submodule to configure
AnnaBridge 161:aa5281ff4a02 532 * @param mask The interrupts to enable. This is a logical OR of members of the
AnnaBridge 161:aa5281ff4a02 533 * enumeration ::pwm_interrupt_enable_t
AnnaBridge 161:aa5281ff4a02 534 */
AnnaBridge 161:aa5281ff4a02 535 void PWM_DisableInterrupts(PWM_Type *base, pwm_submodule_t subModule, uint32_t mask);
AnnaBridge 161:aa5281ff4a02 536
AnnaBridge 161:aa5281ff4a02 537 /*!
AnnaBridge 161:aa5281ff4a02 538 * @brief Gets the enabled PWM interrupts
AnnaBridge 161:aa5281ff4a02 539 *
AnnaBridge 161:aa5281ff4a02 540 * @param base PWM peripheral base address
AnnaBridge 161:aa5281ff4a02 541 * @param subModule PWM submodule to configure
AnnaBridge 161:aa5281ff4a02 542 *
AnnaBridge 161:aa5281ff4a02 543 * @return The enabled interrupts. This is the logical OR of members of the
AnnaBridge 161:aa5281ff4a02 544 * enumeration ::pwm_interrupt_enable_t
AnnaBridge 161:aa5281ff4a02 545 */
AnnaBridge 161:aa5281ff4a02 546 uint32_t PWM_GetEnabledInterrupts(PWM_Type *base, pwm_submodule_t subModule);
AnnaBridge 161:aa5281ff4a02 547
AnnaBridge 161:aa5281ff4a02 548 /*! @}*/
AnnaBridge 161:aa5281ff4a02 549
AnnaBridge 161:aa5281ff4a02 550 /*!
AnnaBridge 161:aa5281ff4a02 551 * @name Status Interface
AnnaBridge 161:aa5281ff4a02 552 * @{
AnnaBridge 161:aa5281ff4a02 553 */
AnnaBridge 161:aa5281ff4a02 554
AnnaBridge 161:aa5281ff4a02 555 /*!
AnnaBridge 161:aa5281ff4a02 556 * @brief Gets the PWM status flags
AnnaBridge 161:aa5281ff4a02 557 *
AnnaBridge 161:aa5281ff4a02 558 * @param base PWM peripheral base address
AnnaBridge 161:aa5281ff4a02 559 * @param subModule PWM submodule to configure
AnnaBridge 161:aa5281ff4a02 560 *
AnnaBridge 161:aa5281ff4a02 561 * @return The status flags. This is the logical OR of members of the
AnnaBridge 161:aa5281ff4a02 562 * enumeration ::pwm_status_flags_t
AnnaBridge 161:aa5281ff4a02 563 */
AnnaBridge 161:aa5281ff4a02 564 uint32_t PWM_GetStatusFlags(PWM_Type *base, pwm_submodule_t subModule);
AnnaBridge 161:aa5281ff4a02 565
AnnaBridge 161:aa5281ff4a02 566 /*!
AnnaBridge 161:aa5281ff4a02 567 * @brief Clears the PWM status flags
AnnaBridge 161:aa5281ff4a02 568 *
AnnaBridge 161:aa5281ff4a02 569 * @param base PWM peripheral base address
AnnaBridge 161:aa5281ff4a02 570 * @param subModule PWM submodule to configure
AnnaBridge 161:aa5281ff4a02 571 * @param mask The status flags to clear. This is a logical OR of members of the
AnnaBridge 161:aa5281ff4a02 572 * enumeration ::pwm_status_flags_t
AnnaBridge 161:aa5281ff4a02 573 */
AnnaBridge 161:aa5281ff4a02 574 void PWM_ClearStatusFlags(PWM_Type *base, pwm_submodule_t subModule, uint32_t mask);
AnnaBridge 161:aa5281ff4a02 575
AnnaBridge 161:aa5281ff4a02 576 /*! @}*/
AnnaBridge 161:aa5281ff4a02 577
AnnaBridge 161:aa5281ff4a02 578 /*!
AnnaBridge 161:aa5281ff4a02 579 * @name Timer Start and Stop
AnnaBridge 161:aa5281ff4a02 580 * @{
AnnaBridge 161:aa5281ff4a02 581 */
AnnaBridge 161:aa5281ff4a02 582
AnnaBridge 161:aa5281ff4a02 583 /*!
AnnaBridge 161:aa5281ff4a02 584 * @brief Starts the PWM counter for a single or multiple submodules.
AnnaBridge 161:aa5281ff4a02 585 *
AnnaBridge 161:aa5281ff4a02 586 * Sets the Run bit which enables the clocks to the PWM submodule. This function can start multiple
AnnaBridge 161:aa5281ff4a02 587 * submodules at the same time.
AnnaBridge 161:aa5281ff4a02 588 *
AnnaBridge 161:aa5281ff4a02 589 * @param base PWM peripheral base address
AnnaBridge 161:aa5281ff4a02 590 * @param subModulesToStart PWM submodules to start. This is a logical OR of members of the
AnnaBridge 161:aa5281ff4a02 591 * enumeration ::pwm_module_control_t
AnnaBridge 161:aa5281ff4a02 592 */
AnnaBridge 161:aa5281ff4a02 593 static inline void PWM_StartTimer(PWM_Type *base, uint8_t subModulesToStart)
AnnaBridge 161:aa5281ff4a02 594 {
AnnaBridge 161:aa5281ff4a02 595 base->MCTRL |= PWM_MCTRL_RUN(subModulesToStart);
AnnaBridge 161:aa5281ff4a02 596 }
AnnaBridge 161:aa5281ff4a02 597
AnnaBridge 161:aa5281ff4a02 598 /*!
AnnaBridge 161:aa5281ff4a02 599 * @brief Stops the PWM counter for a single or multiple submodules.
AnnaBridge 161:aa5281ff4a02 600 *
AnnaBridge 161:aa5281ff4a02 601 * Clears the Run bit which resets the submodule's counter. This function can stop multiple
AnnaBridge 161:aa5281ff4a02 602 * submodules at the same time.
AnnaBridge 161:aa5281ff4a02 603 *
AnnaBridge 161:aa5281ff4a02 604 * @param base PWM peripheral base address
AnnaBridge 161:aa5281ff4a02 605 * @param subModulesToStop PWM submodules to stop. This is a logical OR of members of the
AnnaBridge 161:aa5281ff4a02 606 * enumeration ::pwm_module_control_t
AnnaBridge 161:aa5281ff4a02 607 */
AnnaBridge 161:aa5281ff4a02 608 static inline void PWM_StopTimer(PWM_Type *base, uint8_t subModulesToStop)
AnnaBridge 161:aa5281ff4a02 609 {
AnnaBridge 161:aa5281ff4a02 610 base->MCTRL &= ~(PWM_MCTRL_RUN(subModulesToStop));
AnnaBridge 161:aa5281ff4a02 611 }
AnnaBridge 161:aa5281ff4a02 612
AnnaBridge 161:aa5281ff4a02 613 /*! @}*/
AnnaBridge 161:aa5281ff4a02 614
AnnaBridge 161:aa5281ff4a02 615 /*!
AnnaBridge 161:aa5281ff4a02 616 * @brief Enables or disables the PWM output trigger.
AnnaBridge 161:aa5281ff4a02 617 *
AnnaBridge 161:aa5281ff4a02 618 * This function allows the user to enable or disable the PWM trigger. The PWM has 2 triggers. Trigger 0
AnnaBridge 161:aa5281ff4a02 619 * is activated when the counter matches VAL 0, VAL 2, or VAL 4 register. Trigger 1 is activated
AnnaBridge 161:aa5281ff4a02 620 * when the counter matches VAL 1, VAL 3, or VAL 5 register.
AnnaBridge 161:aa5281ff4a02 621 *
AnnaBridge 161:aa5281ff4a02 622 * @param base PWM peripheral base address
AnnaBridge 161:aa5281ff4a02 623 * @param subModule PWM submodule to configure
AnnaBridge 161:aa5281ff4a02 624 * @param valueRegister Value register that will activate the trigger
AnnaBridge 161:aa5281ff4a02 625 * @param activate true: Enable the trigger; false: Disable the trigger
AnnaBridge 161:aa5281ff4a02 626 */
AnnaBridge 161:aa5281ff4a02 627 static inline void PWM_OutputTriggerEnable(PWM_Type *base,
AnnaBridge 161:aa5281ff4a02 628 pwm_submodule_t subModule,
AnnaBridge 161:aa5281ff4a02 629 pwm_value_register_t valueRegister,
AnnaBridge 161:aa5281ff4a02 630 bool activate)
AnnaBridge 161:aa5281ff4a02 631 {
AnnaBridge 161:aa5281ff4a02 632 if (activate)
AnnaBridge 161:aa5281ff4a02 633 {
AnnaBridge 161:aa5281ff4a02 634 base->SM[subModule].TCTRL |= (1U << valueRegister);
AnnaBridge 161:aa5281ff4a02 635 }
AnnaBridge 161:aa5281ff4a02 636 else
AnnaBridge 161:aa5281ff4a02 637 {
AnnaBridge 161:aa5281ff4a02 638 base->SM[subModule].TCTRL &= ~(1U << valueRegister);
AnnaBridge 161:aa5281ff4a02 639 }
AnnaBridge 161:aa5281ff4a02 640 }
AnnaBridge 161:aa5281ff4a02 641
AnnaBridge 161:aa5281ff4a02 642 /*!
AnnaBridge 161:aa5281ff4a02 643 * @brief Sets the software control output for a pin to high or low.
AnnaBridge 161:aa5281ff4a02 644 *
AnnaBridge 161:aa5281ff4a02 645 * The user specifies which channel to modify by supplying the submodule number and whether
AnnaBridge 161:aa5281ff4a02 646 * to modify PWM A or PWM B within that submodule.
AnnaBridge 161:aa5281ff4a02 647 *
AnnaBridge 161:aa5281ff4a02 648 * @param base PWM peripheral base address
AnnaBridge 161:aa5281ff4a02 649 * @param subModule PWM submodule to configure
AnnaBridge 161:aa5281ff4a02 650 * @param pwmChannel Channel to configure
AnnaBridge 161:aa5281ff4a02 651 * @param value true: Supply a logic 1, false: Supply a logic 0.
AnnaBridge 161:aa5281ff4a02 652 */
AnnaBridge 161:aa5281ff4a02 653 static inline void PWM_SetupSwCtrlOut(PWM_Type *base, pwm_submodule_t subModule, pwm_channels_t pwmChannel, bool value)
AnnaBridge 161:aa5281ff4a02 654 {
AnnaBridge 161:aa5281ff4a02 655 if (value)
AnnaBridge 161:aa5281ff4a02 656 {
AnnaBridge 161:aa5281ff4a02 657 base->SWCOUT |= (1U << ((subModule * PWM_SUBMODULE_SWCONTROL_WIDTH) + pwmChannel));
AnnaBridge 161:aa5281ff4a02 658 }
AnnaBridge 161:aa5281ff4a02 659 else
AnnaBridge 161:aa5281ff4a02 660 {
AnnaBridge 161:aa5281ff4a02 661 base->SWCOUT &= ~(1U << ((subModule * PWM_SUBMODULE_SWCONTROL_WIDTH) + pwmChannel));
AnnaBridge 161:aa5281ff4a02 662 }
AnnaBridge 161:aa5281ff4a02 663 }
AnnaBridge 161:aa5281ff4a02 664
AnnaBridge 161:aa5281ff4a02 665 /*!
AnnaBridge 161:aa5281ff4a02 666 * @brief Sets or clears the PWM LDOK bit on a single or multiple submodules
AnnaBridge 161:aa5281ff4a02 667 *
AnnaBridge 161:aa5281ff4a02 668 * Set LDOK bit to load buffered values into CTRL[PRSC] and the INIT, FRACVAL and VAL registers. The
AnnaBridge 161:aa5281ff4a02 669 * values are loaded immediately if kPWM_ReloadImmediate option was choosen during config. Else the
AnnaBridge 161:aa5281ff4a02 670 * values are loaded at the next PWM reload point.
AnnaBridge 161:aa5281ff4a02 671 * This function can issue the load command to multiple submodules at the same time.
AnnaBridge 161:aa5281ff4a02 672 *
AnnaBridge 161:aa5281ff4a02 673 * @param base PWM peripheral base address
AnnaBridge 161:aa5281ff4a02 674 * @param subModulesToUpdate PWM submodules to update with buffered values. This is a logical OR of
AnnaBridge 161:aa5281ff4a02 675 * members of the enumeration ::pwm_module_control_t
AnnaBridge 161:aa5281ff4a02 676 * @param value true: Set LDOK bit for the submodule list; false: Clear LDOK bit
AnnaBridge 161:aa5281ff4a02 677 */
AnnaBridge 161:aa5281ff4a02 678 static inline void PWM_SetPwmLdok(PWM_Type *base, uint8_t subModulesToUpdate, bool value)
AnnaBridge 161:aa5281ff4a02 679 {
AnnaBridge 161:aa5281ff4a02 680 if (value)
AnnaBridge 161:aa5281ff4a02 681 {
AnnaBridge 161:aa5281ff4a02 682 base->MCTRL |= PWM_MCTRL_LDOK(subModulesToUpdate);
AnnaBridge 161:aa5281ff4a02 683 }
AnnaBridge 161:aa5281ff4a02 684 else
AnnaBridge 161:aa5281ff4a02 685 {
AnnaBridge 161:aa5281ff4a02 686 base->MCTRL |= PWM_MCTRL_CLDOK(subModulesToUpdate);
AnnaBridge 161:aa5281ff4a02 687 }
AnnaBridge 161:aa5281ff4a02 688 }
AnnaBridge 161:aa5281ff4a02 689
AnnaBridge 161:aa5281ff4a02 690 #if defined(__cplusplus)
AnnaBridge 161:aa5281ff4a02 691 }
AnnaBridge 161:aa5281ff4a02 692 #endif
AnnaBridge 161:aa5281ff4a02 693
AnnaBridge 161:aa5281ff4a02 694 /*! @}*/
AnnaBridge 161:aa5281ff4a02 695
AnnaBridge 161:aa5281ff4a02 696 #endif /* _FSL_PWM_H_ */