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)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 /**
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)50 void 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)68 void 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)104 void 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