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_MIMXRT1050_EVK/TOOLCHAIN_IAR/fsl_pwm.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 | 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_ */ |