1 /*******************************************************************************
2 * Copyright (C) 2018, Huada Semiconductor Co.,Ltd All rights reserved.
3 *
4 * This software is owned and published by:
5 * Huada Semiconductor Co.,Ltd ("HDSC").
6 *
7 * BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND
8 * BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT.
9 *
10 * This software contains source code for use with HDSC
11 * components. This software is licensed by HDSC to be adapted only
12 * for use in systems utilizing HDSC components. HDSC shall not be
13 * responsible for misuse or illegal use of this software for devices not
14 * supported herein. HDSC is providing this software "AS IS" and will
15 * not be responsible for issues arising from incorrect user implementation
16 * of the software.
17 *
18 * Disclaimer:
19 * HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE,
20 * REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS),
21 * ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING,
22 * WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED
23 * WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED
24 * WARRANTY OF NONINFRINGEMENT.
25 * HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT,
26 * NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT
27 * LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION,
28 * LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR
29 * INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT,
30 * INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA,
31 * SAVINGS OR PROFITS,
32 * EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
33 * YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR
34 * INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED
35 * FROM, THE SOFTWARE.
36 *
37 * This software may be replicated in part or whole for the licensed use,
38 * with the restriction that this Disclaimer and Copyright notice must be
39 * included with each copy of this software, whether used in part or whole,
40 * at all times.
41 */
42 /******************************************************************************/
43 /** \file pcnt.h
44  **
45  ** Headerfile for PCNT functions
46  ** @link PCNT Group Some description @endlink
47  **
48  ** History:
49  **   - 2018-04-15   Devi     First Version
50  **
51  ******************************************************************************/
52 
53 #ifndef __PCNT_H__
54 #define __PCNT_H__
55 
56 /*******************************************************************************
57  * Include files
58  ******************************************************************************/
59 #include "ddl.h"
60 #include "interrupts_hc32l136.h"
61 
62 #ifdef __cplusplus
63 extern "C"
64 {
65 #endif
66 
67 /**
68  ******************************************************************************
69  ** \defgroup PCNTGroup  (PCNT)
70   **
71  ******************************************************************************/
72 //@{
73 
74 /**
75  *******************************************************************************
76  ** function prototypes.
77  ******************************************************************************/
78 /**
79  *******************************************************************************
80  ** \brief PCNT S1通道极性选择
81  ** \note
82  ******************************************************************************/
83 typedef enum en_pcnt_s1sel
84 {
85     S1P_Noinvert = 0u, ///<<S1通道极性不取反
86     S1P_Invert   = 1u, ///<<S1通道极性取反
87 }en_pcnt_s1sel_t;
88 
89 /**
90  *******************************************************************************
91  ** \brief PCNT S0通道极性选择
92  ** \note
93  ******************************************************************************/
94 typedef enum en_pcnt_s0sel
95 {
96     S0P_Noinvert = 0u, ///<<S0通道极性不取反
97     S0P_Invert   = 1u, ///<<S0通道极性取反
98 }en_pcnt_s0sel_t;
99 
100 /**
101  *******************************************************************************
102  ** \brief PCNT 计数方向选择
103  ** \note
104  ******************************************************************************/
105 typedef enum en_pcnt_direcsel
106 {
107     Direct_Add   = 0u, ///<<加计数
108     Direct_Sub   = 1u, ///<<减计数
109 }en_pcnt_direcsel_t;
110 
111 /**
112  *******************************************************************************
113  ** \brief PCNT 计数时钟选择
114  ** \note
115  ******************************************************************************/
116 typedef enum en_pcnt_clksel
117 {
118     CLK_Pclk   = 1u, ///<<PCLK
119     CLK_Xtl    = 2u, ///<<XTL
120     CLK_Rcl    = 3u, ///<<RCL
121 }en_pcnt_clksel_t;
122 
123 /**
124  *******************************************************************************
125  ** \brief PCNT 脉冲计数模式选择
126  ** \note
127  ******************************************************************************/
128 typedef enum en_pcnt_modesel
129 {
130     Single_Mode   = 1u, ///<<单通道脉冲计数模式
131     Special_Mode  = 2u, ///<<双通道非正交脉冲计数模式
132     Double_Mode   = 3u, ///<<双通道正交脉冲计数模式
133 }en_pcnt_modesel_t;
134 
135 /**
136  ******************************************************************************
137  ** \brief PCNT 状态
138  *****************************************************************************/
139 typedef enum en_pcnt_status
140 {
141     PCNT_S1E            = 0x80,   ///<S1通道脉冲解码错误
142     PCNT_S0E            = 0x40,   ///<S0通道脉冲解码错误
143     PCNT_BB             = 0x20,   ///<脉冲解码错误
144     PCNT_FE             = 0x10,   ///<采样周期脉冲解码错误
145     PCNT_DIR            = 0x08,   ///<反向改变中断
146     PCNT_TO             = 0x04,   ///<超时中断标识
147     PCNT_OV             = 0x02,   ///<上溢中断标识
148     PCNT_UF             = 0x01,   ///<下溢中断标识
149 }en_pcnt_status_t;
150 
151 /**
152  ******************************************************************************
153  ** \brief PCNT 整体配置结构体
154  *****************************************************************************/
155 typedef struct stc_pcnt_config
156 {
157     en_pcnt_s1sel_t     bS1Sel;          ///< S1通道极性选择
158 	  en_pcnt_s0sel_t     bS0Sel;          ///< S0通道极性选择
159     en_pcnt_direcsel_t  u8Direc;         ///< 计数方向选择
160 	  en_pcnt_clksel_t    u8Clk;           ///< 计数时钟选择
161     en_pcnt_modesel_t   u8Mode;          ///< 脉冲计数模式选择
162     boolean_t           bFLTEn;          ///< 滤波控制使能
163     uint8_t             u8FLTDep;        ///< 滤波阀值
164     uint8_t             u8FLTClk;        ///< 滤波时钟
165     boolean_t           bTOEn;           ///< 超时使能
166     uint16_t            u16TODep;         ///< 超时阀值
167 	  uint8_t             u8IrqStatus;     ///< 中断方式
168     boolean_t           bIrqEn;           ///< 中断使能
169     func_ptr_t          pfnIrqCb;         ///< 中断回调函数
170 }stc_pcnt_config_t;
171 
172 //PCNT 中断
173 void Pcnt_IRQHandler(void);
174 
175 /******************************************************************************
176  * Global variable declarations ('extern', definition in C source)
177  ******************************************************************************/
178 
179 /******************************************************************************
180  * Global function prototypes (definition in C source)
181  ******************************************************************************/
182 ///< PCNT初始化
183 en_result_t PCNT_Init(stc_pcnt_config_t*  pstcPcntConfig);
184 ///< PCNT去初始化
185 void PCNT_DeInit(void);
186 ///< PCNT 参数设置
187 en_result_t PCNT_Parameter(uint8_t start,uint8_t end);
188 ///< PCNT 读取PCNT 方向
189 en_pcnt_direcsel_t PCNT_Direction(void);
190 ///< PCNT 读取PCNT 计数值
191 uint16_t PCNT_Count(void);
192 ///< PCNT 读取PCNT 溢出值
193 uint16_t PCNT_TopCount(void);
194 ///< PCNT 设置PCNT
195 void PCNT_Run(boolean_t work);
196 ///< PCNT获取状态
197 boolean_t PCNT_GetStatus(en_pcnt_status_t enStatus);
198 ///< PCNT清除状态
199 void PCNT_ClrStatus(en_pcnt_status_t enStatus);
200 ///< PCNT设置中断
201 void PCNT_SetIrqStatus(en_pcnt_status_t enStatus);
202 
203 
204 //@} // PCNT Group
205 
206 #ifdef __cplusplus
207 #endif
208 
209 #endif /* __PCNT_H__ */
210 /*******************************************************************************
211  * EOF (not truncated)
212  ******************************************************************************/
213 
214 
215