1 /**************************************************************************//** 2 * @file ecap.c 3 * @version V1.00 4 * @brief Enhanced input capture timer (ECAP) driver source file 5 * 6 * SPDX-License-Identifier: Apache-2.0 7 * @copyright (C) 2023 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 * @brief Disable ECAP function 45 * @param[in] ecap The pointer of the specified ECAP module. 46 * @return None 47 * @details This macro disable input capture function. 48 */ ECAP_Close(ECAP_T * ecap)49void ECAP_Close(ECAP_T* ecap) 50 { 51 /* Disable Input Capture*/ 52 ecap->CTL0 &= ~ECAP_CTL0_CAPEN_Msk; 53 } 54 55 /** 56 * @brief This macro is used to enable input channel interrupt 57 * @param[in] ecap Specify ECAP port 58 * @param[in] u32Mask The input channel Mask 59 * - \ref ECAP_CTL0_CAPIEN0_Msk 60 * - \ref ECAP_CTL0_CAPIEN1_Msk 61 * - \ref ECAP_CTL0_CAPIEN2_Msk 62 * - \ref ECAP_CTL0_OVIEN_Msk 63 * - \ref ECAP_CTL0_CMPIEN_Msk 64 * @return None 65 * @details This macro will enable the input channel_n interrupt. 66 */ ECAP_EnableINT(ECAP_T * ecap,uint32_t u32Mask)67void ECAP_EnableINT(ECAP_T* ecap, uint32_t u32Mask) 68 { 69 /* Enable input channel interrupt */ 70 ecap->CTL0 |= (u32Mask); 71 72 /* Enable NVIC ECAP IRQ */ 73 if(ecap == (ECAP_T*)ECAP0) 74 { 75 NVIC_EnableIRQ((IRQn_Type)ECAP0_IRQn); 76 } 77 else 78 { 79 NVIC_EnableIRQ((IRQn_Type)ECAP1_IRQn); 80 } 81 } 82 83 /** 84 * @brief This macro is used to disable input channel interrupt 85 * @param[in] ecap Specify ECAP port 86 * @param[in] u32Mask The input channel number 87 * - \ref ECAP_CTL0_CAPIEN0_Msk 88 * - \ref ECAP_CTL0_CAPIEN1_Msk 89 * - \ref ECAP_CTL0_CAPIEN2_Msk 90 * - \ref ECAP_CTL0_OVIEN_Msk 91 * - \ref ECAP_CTL0_CMPIEN_Msk 92 * @return None 93 * @details This macro will disable the input channel_n interrupt. 94 */ ECAP_DisableINT(ECAP_T * ecap,uint32_t u32Mask)95void ECAP_DisableINT(ECAP_T* ecap, uint32_t u32Mask) 96 { 97 /* Disable input channel interrupt */ 98 ecap->CTL0 &= ~(u32Mask); 99 100 /* Disable NVIC ECAP IRQ */ 101 if(ecap == (ECAP_T*)ECAP0) 102 { 103 NVIC_DisableIRQ((IRQn_Type)ECAP0_IRQn); 104 } 105 else 106 { 107 NVIC_DisableIRQ((IRQn_Type)ECAP1_IRQn); 108 } 109 } 110 111 /*@}*/ /* end of group ECAP_EXPORTED_FUNCTIONS */ 112 113 /*@}*/ /* end of group ECAP_Driver */ 114 115 /*@}*/ /* end of group Standard_Driver */ 116 117 /*** (C) COPYRIGHT 2023 Nuvoton Technology Corp. ***/ 118