1 /******************************************************************************
2 * Copyright (C) 2017, 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 pca.h
44  **
45  ** PCA(可编程计数阵列)数据结构及API声明
46  **
47  **
48  ** History:
49  **   - 2017-04-15   Husj     First version
50  **
51  *****************************************************************************/
52 
53 #ifndef __PCA_H__
54 #define __PCA_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 PcaGroup Programmable Counter Array (PCA)
70  **
71  ******************************************************************************/
72 //@{
73 
74 /******************************************************************************/
75 /* Global pre-processor symbols/macros ('#define')                            */
76 /******************************************************************************/
77 
78 /******************************************************************************
79  * Global type definitions
80  ******************************************************************************/
81 
82  /**
83  ******************************************************************************
84  ** \brief PCA 模块选择数据类型重定义
85  *****************************************************************************/
86 typedef enum en_pca_module
87 {
88     Module0    = 0u,        ///< 模块0
89     Module1    = 1u,        ///< 模块1
90     Module2    = 2u,        ///< 模块2
91     Module3    = 3u,        ///< 模块3
92     Module4    = 4u,        ///< 模块4
93 }en_pca_module_t;
94 
95 /**
96  ******************************************************************************
97  ** \brief PCA 计数启/停控制数据类型重定义 (CR)
98  *****************************************************************************/
99 typedef enum en_pca_start
100 {
101     CRStop  = 0u,            ///< 停止计数
102     CRStart = 1u,            ///< 开始计数
103 }en_pca_start_t;
104 
105 /**
106  ******************************************************************************
107  ** \brief PCA IDLE 模式下启/停控制数据类型重定义 (CIDL)
108  *****************************************************************************/
109 typedef enum en_pca_cidl
110 {
111     IdleGoOn = 0u,            ///< 休眠模式下 PCA继续工作
112     IdleStop = 1u,            ///< 休眠模式下 PCA停止工作
113 }en_pca_cidl_t;
114 
115 /**
116  ******************************************************************************
117  ** \brief PCA 模块4 WDT功能控制数据类型重定义 (WDTE)
118  *****************************************************************************/
119 typedef enum en_pca_wdte
120 {
121     PCAWDTDisable = 0u,            ///< 关闭 PCA模块4 WDT功能
122     PCAWDTEnable  = 1u,            ///< 启动 PCA模块4 WDT功能
123 }en_pca_wdte_t;
124 
125 /**
126  ******************************************************************************
127  ** \brief PCA 时钟分频及时钟源选择功能数据类型重定义 (CPS)
128  *****************************************************************************/
129 typedef enum en_pca_clksel
130 {
131     PCAPCLKDiv32  = 0u,         ///< PCLK/32
132     PCAPCLKDiv16  = 1u,         ///< PCLK/16
133     PCAPCLKDiv8   = 2u,         ///< PCLK/8
134     PCAPCLKDiv4   = 3u,         ///< PCLK/4
135     PCAPCLKDiv2   = 4u,         ///< PCLK/2
136     PCATimer0Over = 5u,         ///< timer0 overflow
137     PCATimer1Over = 6u,         ///< timer1 overflow
138     PCAECI        = 7u,         ///< ECI 外部时钟,时钟PCLK四分频采样
139 }en_pca_clksel_t;
140 
141 /**
142  ******************************************************************************
143  ** \brief PCA 允许比较器功能控制数据类型重定义 (ECOM)
144  *****************************************************************************/
145 typedef enum en_pca_ecom
146 {
147     ECOMDisable = 0u,            ///< 禁止比较器功能
148     ECOMEnable  = 1u,            ///< 允许比较器功能
149 }en_pca_ecom_t;
150 
151 /**
152  ******************************************************************************
153  ** \brief PCA 正沿捕获控制位数据类型重定义 (CAPP)
154  *****************************************************************************/
155 typedef enum en_pca_capp
156 {
157     CAPPDisable = 0u,            ///< 禁止上升沿捕获
158     CAPPEnable  = 1u,            ///< 允许上升沿捕获
159 }en_pca_capp_t;
160 
161 /**
162  ******************************************************************************
163  ** \brief PCA 负沿捕获控制位数据类型重定义 (CAPN)
164  *****************************************************************************/
165 typedef enum en_pca_capn
166 {
167     CAPNDisable = 0u,            ///< 禁止下降沿捕获
168     CAPNEnable  = 1u,            ///< 允许下降沿捕获
169 }en_pca_capn_t;
170 
171 /**
172  ******************************************************************************
173  ** \brief PCA 匹配控制位数据类型重定义 (MAT)
174  *****************************************************************************/
175 typedef enum en_pca_mat
176 {
177     MATDisable = 0u,            ///< 禁止匹配
178     MATEnable  = 1u,            ///< 允许匹配
179 }en_pca_mat_t;
180 
181 /**
182  ******************************************************************************
183  ** \brief PCA 翻转控制位数据类型重定义 (TOG)
184  *****************************************************************************/
185 typedef enum en_pca_tog
186 {
187     TOGDisable = 0u,            ///< 禁止翻转功能
188     TOGEnable  = 1u,            ///< 允许翻转功能
189 }en_pca_tog_t;
190 
191 /**
192  ******************************************************************************
193  ** \brief PCA 8bit脉宽调制控制数据类型重定义 (8bitPWM)
194  *****************************************************************************/
195 typedef enum en_pca_pwm_8_bit
196 {
197     PCA8bitPWMDisable = 0u,            ///< 禁止 PWM功能
198     PCA8bitPWMEnable  = 1u,            ///< 允许CCPx引脚作为PWM输出
199 }en_pca_8bit_pwm_t;
200 
201 /**
202  ******************************************************************************
203  ** \brief PCA 16bit脉宽调制控制数据类型重定义 (16bitPWM)
204  *****************************************************************************/
205 typedef enum en_pca_pwm_16_bit
206 {
207     PCA16bitPWMDisable = 0u,            ///< 16bitPWM 禁止
208     PCA16bitPWMEnable  = 1u,            ///< 16bitPWM 使能
209 }en_pca_16bit_pwm_t;
210 
211 /**
212  ******************************************************************************
213  ** \brief PCA 配置结构体定义
214  *****************************************************************************/
215 typedef struct stc_pca_config
216 {
217     en_pca_cidl_t     enCIDL;       ///< 模式下启/停控制
218     en_pca_wdte_t     enWDTE;       ///< WDT功能控制
219     en_pca_clksel_t   enCPS;        ///< 时钟分频及时钟源选择功能
220 
221     func_ptr_t        pfnPcaCb;     ///< Pca中断服务回调函数[void function(void)]
222 }stc_pca_config_t;
223 
224 /**
225  ******************************************************************************
226  ** \brief PCA 捕获模式配置结构体定义
227  *****************************************************************************/
228 typedef struct stc_pca_capmodconfig
229 {
230     en_pca_ecom_t enECOM;                ///< 允许比较器功能控制
231     en_pca_capp_t enCAPP;                ///< 正沿捕获控制
232     en_pca_capn_t enCAPN;                ///< 负沿捕获控制
233     en_pca_mat_t  enMAT;                 ///< 匹配控制
234     en_pca_tog_t  enTOG;                 ///< 翻转控制
235     en_pca_8bit_pwm_t  en8bitPWM;        ///< 8位脉宽调制控制
236 }stc_pca_capmodconfig_t;
237 
238 /******************************************************************************
239  * Global variable declarations ('extern', definition in C source)
240  *****************************************************************************/
241 
242 /******************************************************************************
243  * Global function prototypes (definition in C source)
244  *****************************************************************************/
245 //Interrupt related
246 //PCA中断标志获取
247 boolean_t Pca_GetIntFlag(en_pca_module_t enModule);
248 //PCA计数器中断标志获取
249 boolean_t Pca_GetCntIntFlag(void);
250 //PCA中断标志清除
251 en_result_t Pca_ClearIntFlag(en_pca_module_t enModule);
252 //PCA计数器中断标志清除
253 en_result_t Pca_ClearCntIntFlag(void);
254 //PCA中断使能
255 en_result_t Pca_EnableIrq (en_pca_module_t enModule);
256 //PCA计数器中断使能
257 en_result_t Pca_EnableCntIrq (void);
258 //PCA中断关闭
259 en_result_t Pca_DisableIrq(en_pca_module_t enModule);
260 //PCA计数器中断关闭
261 en_result_t Pca_DisableCntIrq(void);
262 
263 //PCA配置及操作
264 //PCA初始化
265 en_result_t Pca_Init(stc_pca_config_t* pstcConfig);
266 //PCA捕获模式配置
267 en_result_t Pca_CapModConfig(en_pca_module_t enModule, stc_pca_capmodconfig_t* pstcCapMod);
268 //PCA计数器启动/停止
269 en_result_t Pca_Run(void);
270 en_result_t Pca_Stop(void);
271 //PCA16位比较数据设置
272 en_result_t Pca_CmpData16Set(en_pca_module_t enModule, uint16_t u16Data);
273 //PCA捕获16位数据获取
274 uint16_t Pca_CapData16Get(en_pca_module_t enModule);
275 //PCA比较数据高8位设置
276 en_result_t Pca_CmpDataHSet(en_pca_module_t enModule, uint8_t u8Data);
277 //PCA比较数据低8位设置
278 en_result_t Pca_CmpDataLSet(en_pca_module_t enModule, uint8_t u8Data);
279 //PCA计数值设置/获取
280 en_result_t Pca_Cnt16Set(uint16_t u16Data);
281 uint16_t Pca_Cnt16Get(void);
282 //PCA周期重载值设置/获取
283 en_result_t Pca_CARRSet(uint16_t u16Data);
284 uint16_t Pca_CARRGet(void);
285 //PCA 增强PWM功能使能/禁止
286 en_result_t Pca_Enable16bitPWM(void);
287 en_result_t Pca_Disable16bitPWM(void);
288 //PCA比较高速输出标志获取
289 boolean_t Pca_GetCmpHighFlag(en_pca_module_t enModule);
290 //@} // PcaGroup
291 
292 #ifdef __cplusplus
293 #endif
294 
295 
296 #endif /* __PCA_H__ */
297 /******************************************************************************
298  * EOF (not truncated)
299  *****************************************************************************/
300 
301 
302