1 /**************************************************************************//** 2 * @file ecap.c 3 * @version V3.00 4 * @brief Enhanced Input Capture Timer (ECAP) driver source file 5 * 6 * SPDX-License-Identifier: Apache-2.0 7 * @copyright (C) 2021 Nuvoton Technology Corp. All rights reserved. 8 *****************************************************************************/ 9 #include "NuMicro.h" 10 11 12 /** @addtogroup Standard_Driver Standard Driver 13 @{ 14 */ 15 16 /** @addtogroup ECAP_Driver ECAP Driver 17 @{ 18 */ 19 20 /** @addtogroup ECAP_EXPORTED_FUNCTIONS ECAP Exported Functions 21 @{ 22 */ 23 24 /** 25 * @brief Enable ECAP function 26 * @param[in] ecap The pointer of the specified ECAP module. 27 * @param[in] u32FuncMask Input capture function select 28 * - \ref ECAP_DISABLE_COMPARE 29 * - \ref ECAP_COMPARE_FUNCTION 30 * @return None 31 * @details This macro enable input capture function and select compare and reload function. 32 */ ECAP_Open(ECAP_T * ecap,uint32_t u32FuncMask)33void ECAP_Open(ECAP_T* ecap, uint32_t u32FuncMask) 34 { 35 /* Clear Input capture mode*/ 36 ecap->CTL0 = ecap->CTL0 & ~(ECAP_CTL0_CMPEN_Msk); 37 38 /* Enable Input Capture and set mode */ 39 ecap->CTL0 |= ECAP_CTL0_CAPEN_Msk | (u32FuncMask); 40 } 41 42 43 44 /** 45 * @brief Disable ECAP function 46 * @param[in] ecap The pointer of the specified ECAP module. 47 * @return None 48 * @details This macro disable input capture function. 49 */ ECAP_Close(ECAP_T * ecap)50void ECAP_Close(ECAP_T* ecap) 51 { 52 /* Disable Input Capture*/ 53 ecap->CTL0 &= ~ECAP_CTL0_CAPEN_Msk; 54 } 55 56 /** 57 * @brief This macro is used to enable input channel interrupt 58 * @param[in] ecap Specify ECAP port 59 * @param[in] u32Mask The input channel Mask 60 * - \ref ECAP_CTL0_CAPIEN0_Msk 61 * - \ref ECAP_CTL0_CAPIEN1_Msk 62 * - \ref ECAP_CTL0_CAPIEN2_Msk 63 * - \ref ECAP_CTL0_OVIEN_Msk 64 * - \ref ECAP_CTL0_CMPIEN_Msk 65 * @return None 66 * @details This macro will enable the input channel_n interrupt. 67 */ ECAP_EnableINT(ECAP_T * ecap,uint32_t u32Mask)68void ECAP_EnableINT(ECAP_T* ecap, uint32_t u32Mask) 69 { 70 /* Enable input channel interrupt */ 71 ecap->CTL0 |= (u32Mask); 72 73 /* Enable NVIC ECAP IRQ */ 74 if(ecap == (ECAP_T*)ECAP0) 75 { 76 NVIC_EnableIRQ((IRQn_Type)ECAP0_IRQn); 77 } 78 else if(ecap == (ECAP_T*)ECAP1) 79 { 80 NVIC_EnableIRQ((IRQn_Type)ECAP1_IRQn); 81 } 82 else if(ecap == (ECAP_T*)ECAP2) 83 { 84 NVIC_EnableIRQ((IRQn_Type)ECAP2_IRQn); 85 } 86 else 87 { 88 NVIC_EnableIRQ((IRQn_Type)ECAP3_IRQn); 89 } 90 } 91 92 /** 93 * @brief This macro is used to disable input channel interrupt 94 * @param[in] ecap Specify ECAP port 95 * @param[in] u32Mask The input channel number 96 * - \ref ECAP_CTL0_CAPIEN0_Msk 97 * - \ref ECAP_CTL0_CAPIEN1_Msk 98 * - \ref ECAP_CTL0_CAPIEN2_Msk 99 * - \ref ECAP_CTL0_OVIEN_Msk 100 * - \ref ECAP_CTL0_CMPIEN_Msk 101 * @return None 102 * @details This macro will disable the input channel_n interrupt. 103 */ ECAP_DisableINT(ECAP_T * ecap,uint32_t u32Mask)104void ECAP_DisableINT(ECAP_T* ecap, uint32_t u32Mask) 105 { 106 /* Disable input channel interrupt */ 107 ecap->CTL0 &= ~(u32Mask); 108 109 /* Disable NVIC ECAP IRQ */ 110 if(ecap == (ECAP_T*)ECAP0) 111 { 112 NVIC_DisableIRQ((IRQn_Type)ECAP0_IRQn); 113 } 114 if(ecap == (ECAP_T*)ECAP1) 115 { 116 NVIC_DisableIRQ((IRQn_Type)ECAP1_IRQn); 117 } 118 if(ecap == (ECAP_T*)ECAP2) 119 { 120 NVIC_DisableIRQ((IRQn_Type)ECAP2_IRQn); 121 } 122 else 123 { 124 NVIC_DisableIRQ((IRQn_Type)ECAP3_IRQn); 125 } 126 } 127 128 /*@}*/ /* end of group ECAP_EXPORTED_FUNCTIONS */ 129 130 /*@}*/ /* end of group ECAP_Driver */ 131 132 /*@}*/ /* end of group Standard_Driver */ 133 134 /*** (C) COPYRIGHT 2021 Nuvoton Technology Corp. ***/ 135