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)33 void 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)49 void 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)67 void 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)95 void 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