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 bt.h
44  **
45  ** 基本定时器数据结构及API声明
46  ** @link BT Timer3 Group Some description @endlink
47  **
48  ** History:
49  **   - 2018-04-29   Husj     First Version
50  **
51  *****************************************************************************/
52 
53 #ifndef __TIMER3_H__
54 #define __TIMER3_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 Tim3Group Base Timer (BT)
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 Timer3 通道定义
85  *****************************************************************************/
86 typedef enum en_tim3_channel
87 {
88     Tim3CH0  = 0u,        ///< Timer3通道0
89     Tim3CH1  = 1u,        ///< Timer3通道1
90     Tim3CH2  = 2u,        ///< Timer3通道2
91 }en_tim3_channel_t;
92 
93 /**
94  ******************************************************************************
95  ** \brief 工作模式选择数据类型重定义 (MODE)(模式0/1/23)
96  *****************************************************************************/
97 typedef enum en_tim3_work_mode
98 {
99     Tim3WorkMode0  = 0u,         ///< 定时器模式
100     Tim3WorkMode1  = 1u,         ///< PWC模式
101     Tim3WorkMode2  = 2u,         ///< 锯齿波模式
102     Tim3WorkMode3  = 3u,         ///< 三角波模式
103 }en_tim3_work_mode_t;
104 
105 /**
106  ******************************************************************************
107  ** \brief 极性控制数据类型重定义 (GATE_P)(模式0)
108  *****************************************************************************/
109 typedef enum en_tim3_m0cr_gatep
110 {
111     Tim3GatePositive = 0u,            ///< 高电平有效
112     Tim3GateOpposite = 1u,            ///< 低电平有效
113 }en_tim3_m0cr_gatep_t;
114 
115 /**
116  ******************************************************************************
117  ** \brief TIM3 预除频选择 (PRS)(模式0/1/23)
118  *****************************************************************************/
119 typedef enum en_tim3_cr_timclkdiv
120 {
121     Tim3PCLKDiv1   = 0u,           ///< Div 1
122     Tim3PCLKDiv2   = 1u,           ///< Div 2
123     Tim3PCLKDiv4   = 2u,           ///< Div 4
124     Tim3PCLKDiv8   = 3u,           ///< Div 8
125     Tim3PCLKDiv16  = 4u,           ///< Div 16
126     Tim3PCLKDiv32  = 5u,           ///< Div 32
127     Tim3PCLKDiv64  = 6u,           ///< Div 64
128     Tim3PCLKDiv256 = 7u,           ///< Div 256
129 }en_tim3_cr_timclkdiv_t;
130 
131 /**
132  ******************************************************************************
133  ** \brief 计数/定时器功能选择数据类型重定义 (CT)(模式0/1/23)
134  *****************************************************************************/
135 typedef enum en_tim3_cr_ct
136 {
137     Tim3Timer   = 0u,            ///< 定时器功能,计数时钟为内部PCLK
138     Tim3Counter = 1u,            ///< 计数器功能,计数时钟为外部ETR
139 }en_tim3_cr_ct_t;
140 
141 
142 /**
143  ******************************************************************************
144  ** \brief 定时器工作模式数据类型重定义 (MD)(模式0)
145  *****************************************************************************/
146 typedef enum en_tim3_m0cr_md
147 {
148     Tim332bitFreeMode  = 0u,         ///< 32位计数器/定时器
149     Tim316bitArrMode  = 1u,         ///< 自动重装载16位计数器/定时器
150 }en_tim3_m0cr_md_t;
151 
152 /**
153  ******************************************************************************
154 ** \brief TIM3中断类型数据类型重定义(模式0/1/23)
155  *****************************************************************************/
156 typedef enum en_tim3_irq_type
157 {
158     Tim3UevIrq   = 0u,         ///< 溢出/事件更新中断
159     Tim3CA0Irq   = 2u,         ///< CH0A捕获/比较中断(仅模式1/23存在)
160     Tim3CA1Irq   = 3u,         ///< CH1A捕获/比较中断(仅模式23存在)
161     Tim3CA2Irq   = 4u,         ///< CH2A捕获/比较中断(仅模式23存在)
162     Tim3CB0Irq   = 5u,         ///< CH0B捕获/比较中断(仅模式23存在)
163     Tim3CB1Irq   = 6u,         ///< CH1B捕获/比较中断(仅模式23存在)
164     Tim3CB2Irq   = 7u,         ///< CH2B捕获/比较中断(仅模式23存在)
165     Tim3CA0E     = 8u,         ///< CH0A捕获数据丢失标志(仅模式23存在)(不是中断)
166     Tim3CA1E     = 9u,         ///< CH1A捕获数据丢失标志(仅模式23存在)(不是中断)
167     Tim3CA2E     = 10u,        ///< CH2A捕获数据丢失标志(仅模式23存在)(不是中断)
168     Tim3CB0E     = 11u,        ///< CH0B捕获数据丢失标志(仅模式23存在)(不是中断)
169     Tim3CB1E     = 12u,        ///< CH1B捕获数据丢失标志(仅模式23存在)(不是中断)
170     Tim3CB2E     = 13u,        ///< CH2B捕获数据丢失标志(仅模式23存在)(不是中断)
171     Tim3BkIrq    = 14u,        ///< 刹车中断(仅模式23存在)
172     Tim3TrigIrq  = 15u,        ///< 触发中断(仅模式23存在)
173 }en_tim3_irq_type_t;
174 
175 /**
176  ******************************************************************************
177  ** \brief 测量开始结束数据类型重定义 (Edg1stEdg2nd)(模式1)
178  *****************************************************************************/
179 typedef enum en_tim3_m1cr_Edge
180 {
181     Tim3PwcRiseToRise  = 0u,            ///< 上升沿到上升沿(周期)
182     Tim3PwcFallToRise  = 1u,            ///< 下降沿到上升沿(低电平)
183     Tim3PwcRiseToFall  = 2u,            ///< 上升沿到下降沿(高电平)
184     Tim3PwcFallToFall  = 3u,            ///< 下降沿到下降沿(周期)
185 }en_tim3_m1cr_Edge_t;
186 
187 /**
188  ******************************************************************************
189  ** \brief PWC测量测试模式选择数据类型重定义 (Oneshot)(模式1)
190  *****************************************************************************/
191 typedef enum en_tim3_m1cr_oneshot
192 {
193     Tim3PwcCycleDetect    = 0u,         ///< PWC循环测量
194     Tim3PwcOneShotDetect  = 1u,         ///< PWC单次测量
195 }en_tim3_m1cr_oneshot_t;
196 
197 /**
198  ******************************************************************************
199  ** \brief PWC IA0选择数据类型重定义 (IA0S)(模式1)
200  *****************************************************************************/
201 typedef enum en_tim3_m1_mscr_ia0s
202 {
203     Tim3IA0Input    = 0u,         ///< IAO输入
204     Tim3XORInput    = 1u,         ///< IA0 ETR GATE XOR(TIM0/1/2)/IA0 IA1 IA2 XOR(TIM3)
205 }en_tim3_m1_mscr_ia0s_t;
206 
207 /**
208  ******************************************************************************
209  ** \brief PWC IB0选择数据类型重定义 (IA0S)(模式1)
210  *****************************************************************************/
211 typedef enum en_tim3_m1_mscr_ib0s
212 {
213     Tim3IB0Input    = 0u,         ///< IBO输入
214     Tim3TsInput     = 1u,         ///< 内部触发TS选择信号
215 }en_tim3_m1_mscr_ib0s_t;
216 
217 /**
218  ******************************************************************************
219  ** \brief 输出极性、输入相位 数据类型重定义 (CCPA0/CCPB0/ETP/BKP)(模式1/23)
220  *****************************************************************************/
221 typedef enum en_tim3_port_polarity
222 {
223     Tim3PortPositive      = 0u,         ///< 正常输入输出
224     Tim3PortOpposite      = 1u,         ///< 反向输入输出
225 }en_tim3_port_polarity_t;
226 
227 /**
228  ******************************************************************************
229  ** \brief 滤波选择数据类型重定义 (FLTET/FLTA0/FLAB0)(模式1/23)
230  *****************************************************************************/
231 typedef enum en_tim3_flt
232 {
233     Tim3FltNone          = 0u,         ///< 无滤波
234     Tim3FltPCLKCnt3      = 4u,         ///< PCLK 3个连续有效
235     Tim3FltPCLKDiv4Cnt3  = 5u,         ///< PCLK/4 3个连续有效
236     Tim3FltPCLKDiv16Cnt3 = 6u,         ///< PCLK/16 3个连续有效
237     Tim3FltPCLKDiv64Cnt3 = 7u,         ///< PCLK/64 3个连续有效
238 }en_tim3_flt_t;
239 
240 /**
241  ******************************************************************************
242  ** \brief 通道比较控制 数据类型重定义 (OCMA/OCMB)(模式23)
243  *****************************************************************************/
244 typedef enum en_tim3_m23_fltr_ocm
245 {
246     Tim3ForceLow      = 0u,         ///< 强制为0
247     Tim3ForceHigh     = 1u,         ///< 强制为1
248     Tim3CMPForceLow   = 2u,         ///< 比较匹配时强制为0
249     Tim3CMPForceHigh  = 3u,         ///< 比较匹配时强制为1
250     Tim3CMPInverse    = 4u,         ///< 比较匹配时翻转电平
251     Tim3CMPOnePrdHigh = 5u,         ///< 比较匹配时输出一个计数周期的高电平
252     Tim3PWMMode1      = 6u,         ///< 通道控制为PWM mode 1
253     Tim3PWMMode2      = 7u,         ///< 通道控制为PWM mode 2
254 }en_tim3_m23_fltr_ocm_t;
255 
256 /**
257  ******************************************************************************
258  ** \brief 主从模式TS数据类型重定义 (TS)(模式1/23)
259  *****************************************************************************/
260 typedef enum en_tim3_mscr_ts
261 {
262     Tim3Ts0ETR        = 0u,         ///< ETR外部输入滤波后的相位选择信号
263     Tim3Ts1TIM0TRGO   = 1u,         ///< Timer0的TRGO输出信号
264     Tim3Ts2TIM1TRGO   = 2u,         ///< Timer1的TRGO输出信号
265     Tim3Ts3TIM2TRGO   = 3u,         ///< Timer2的TRGO输出信号
266     Tim3Ts4TIM3TRGO   = 4u,         ///< Timer3的TRGO输出信号
267     //Tim3Ts5IA0ED    = 5u,         ///< 无效
268     Tim3Ts6IAFP       = 6u,         ///< CH0A 外部输输入滤波后的相位选择信号
269     Tim3Ts7IBFP       = 7u,         ///< CH0B 外部输输入滤波后的相位选择信
270 }en_tim3_mscr_ts_t;
271 
272 /**
273  ******************************************************************************
274  ** \brief PWM输出模式选择数据类型重定义 (COMP)(模式23)
275  *****************************************************************************/
276 typedef enum en_tim3_m23cr_comp
277 {
278     Tim3IndependentPWM      = 0u,         ///< 独立PWM输出
279     Tim3ComplementaryPWM    = 1u,         ///< 互补PWM输出
280 }en_tim3_m23cr_comp_t;
281 
282 /**
283  ******************************************************************************
284  ** \brief 计数方向选择数据类型重定义 (DIR)(模式23)
285  *****************************************************************************/
286 typedef enum en_tim3_m23cr_dir
287 {
288     Tim3CntUp      = 0u,         ///< 向上计数
289     Tim3CntDown    = 1u,         ///< 向下计数
290 }en_tim3_m23cr_dir_t;
291 
292 /**
293  ******************************************************************************
294  ** \brief 计数方向选择数据类型重定义 (PWM2S)(模式23)
295  *****************************************************************************/
296 typedef enum en_tim3_m23cr_pwm2s
297 {
298     Tim3DoublePointCmp      = 0u,         ///< 双点比较使能,使用CCRA,CCRB比较控制OCREFA输出
299     Tim3SinglePointCmp      = 1u,         ///< 单点比较使能,使用CCRA比较控制OCREFA输出
300 }en_tim3_m23cr_pwm2s_t;
301 
302 /**
303  ******************************************************************************
304  ** \brief GATE在PWM互补模式下捕获或比较功能 选择数据类型重定义 (CSG)(模式23)
305  *****************************************************************************/
306 typedef enum en_tim3_m23cr_csg
307 {
308      Tim3PWMCompGateCmpOut    = 0u,         ///< 在PWM互补模式下,Gate作为比较输出
309      Tim3PWMCompGateCapIn     = 1u,         ///< 在PWM互补模式下,Gate作为捕获输入
310 }en_tim3_m23cr_csg_t;
311 
312 
313 /**
314  ******************************************************************************
315  ** \brief 比较捕获寄存器 数据类型重定义 (CCR0A,CCR0B)(模式23)
316  *****************************************************************************/
317 typedef enum en_tim3_m23_ccrx
318 {
319      Tim3CCR0A    = 0u,         ///< CCR0A比较捕获寄存器
320      Tim3CCR0B    = 1u,         ///< CCR0B比较捕获寄存器
321      Tim3CCR1A    = 2u,         ///< CCR1A比较捕获寄存器
322      Tim3CCR1B    = 3u,         ///< CCR1B比较捕获寄存器
323      Tim3CCR2A    = 4u,         ///< CCR2A比较捕获寄存器
324      Tim3CCR2B    = 5u,         ///< CCR2B比较捕获寄存器
325 }en_tim3_m23_ccrx_t;
326 
327 /**
328  ******************************************************************************
329  ** \brief  OCREF清除源 选择数据类型重定义 (OCCS)(模式23)
330  *****************************************************************************/
331 typedef enum en_tim3_m23ce_occs
332 {
333      Tim3OC_Ref_Clr  = 0u,         ///< 来自VC的OC_Ref_Clr
334      Tim3ETRf        = 1u,         ///< 外部ETRf
335 }en_tim3_m23ce_occs_t;
336 
337 /**
338  ******************************************************************************
339  ** \brief  比较匹配中断模式 选择数据类型重定义 (CIS/CISB)(模式23)
340  *****************************************************************************/
341 typedef enum en_tim3_m23_cisa_cisb
342 {
343      Tim3CmpIntNone        = 0u,         ///< 无比较匹配中断
344      Tim3CmpIntRise        = 1u,         ///< 比较匹配上升沿中断
345      Tim3CmpIntFall        = 2u,         ///< 比较匹配下降沿中断
346      Tim3CmpIntRiseFall    = 3u,         ///< 比较匹配上升沿下降沿中断
347 }en_tim3_m23_cisa_cisb_t;
348 
349 /**
350  ******************************************************************************
351  ** \brief TIM3端口控制 - 刹车时CHx输出状态控制(BKSA/BKSB)(模式23)
352  **
353  ** \note
354  ******************************************************************************/
355 typedef enum en_tim3_m23_crchx_bks
356 {
357     Tim3CHxBksHiZ         = 0u,         ///< 刹车使能时,CHx端口输出高阻态
358     Tim3CHxBksNorm        = 1u,         ///< 刹车使能时,CHx端口正常输出
359     Tim3CHxBksLow         = 2u,         ///< 刹车使能时,CHx端口输出低电平
360     Tim3CHxBksHigh        = 3u,         ///< 刹车使能时,CHx端口输出高电平
361 }en_tim3_m23_crchx_bks_t;
362 
363 /**
364  ******************************************************************************
365 ** \brief TIM3端口控制 - CHx上升沿下降沿捕获(CRx/CFx)(模式23)
366  **
367  ** \note
368  ******************************************************************************/
369 typedef enum en_tim3_m23_crch0_cfx_crx
370 {
371     Tim3CHxCapNone        = 0u,         ///< CHx通道捕获禁止
372     Tim3CHxCapRise        = 1u,         ///< CHx通道上升沿捕获使能
373     Tim3CHxCapFall        = 2u,         ///< CHx通道下降沿捕获使能
374     Tim3CHxCapFallRise    = 3u,         ///< CHx通道上升沿下降沿捕获都使能
375 }en_tim3_m23_crch0_cfx_crx_t;
376 
377 /**
378  ******************************************************************************
379 ** \brief TIM3端口控制 - CHx比较捕获模式(CSA/CSB)(模式23)
380  **
381  ** \note
382  ******************************************************************************/
383 typedef enum en_tim3_m23_crch0_csa_csb
384 {
385     Tim3CHxCmpMode        = 0u,         ///< CHx通道设置为比较模式
386     Tim3CHxCapMode        = 1u,         ///< CHx通道设置为捕获模式
387 }en_tim3_m23_crch0_csa_csb_t;
388 
389 /**
390  ******************************************************************************
391  ** \brief  比较模式下 DMA比较触发选择 数据类型重定义 (CCDS)(模式23)
392  *****************************************************************************/
393 typedef enum en_tim3_m23_mscr_ccds
394 {
395      Tim3CmpTrigDMA  = 0u,         ///< 比较匹配触发DMA
396      Tim3UEVTrigDMA  = 1u,         ///< 事件更新代替比较匹配触发DMA
397 }en_tim3_m23_mscr_ccds_t;
398 
399 /**
400  ******************************************************************************
401  ** \brief  主从模式选择 数据类型重定义 (MSM)(模式23)
402  *****************************************************************************/
403 typedef enum en_tim3_m23_mscr_msm
404 {
405      Tim3SlaveMode    = 0u,         ///< 从模式
406      Tim3MasterMode   = 1u,         ///< 主模式
407 }en_tim3_m23_mscr_msm_t;
408 
409 /**
410  ******************************************************************************
411  ** \brief  触发主模式输出源 数据类型重定义 (MMS)(模式23)
412  *****************************************************************************/
413 typedef enum en_tim3_m23_mscr_mms
414 {
415      Tim3MasterUG         = 0u,         ///< UG(软件更新)源
416      Tim3MasterCTEN       = 1u,         ///< CTEN源
417      Tim3MasterUEV        = 2u,         ///< UEV更新源
418      Tim3MasterCMPSO      = 3u,         ///< 比较匹配选择输出源
419      Tim3MasterOCA0Ref    = 4u,         ///< OCA0_Ref源
420      Tim3MasterOCB0Ref    = 5u,         ///< OCB0_Ref源
421      //Tim3MasterOCB0Ref  = 6u,
422      //Tim3MasterOCB0Ref  = 7u,
423 }en_tim3_m23_mscr_mms_t;
424 
425 /**
426  ******************************************************************************
427  ** \brief  触发从模式选择 数据类型重定义 (SMS)(模式23)
428  *****************************************************************************/
429 typedef enum en_tim3_m23_mscr_sms
430 {
431      Tim3SlaveIClk        = 0u,         ///< 使用内部时钟
432      Tim3SlaveResetTIM    = 1u,         ///< 复位功能
433      Tim3SlaveTrigMode    = 2u,         ///< 触发模式
434      Tim3SlaveEClk        = 3u,         ///< 外部时钟模式
435      Tim3SlaveCodeCnt1    = 4u,         ///< 正交编码计数模式1
436      Tim3SlaveCodeCnt2    = 5u,         ///< 正交编码计数模式2
437      Tim3SlaveCodeCnt3    = 6u,         ///< 正交编码计数模式3
438      Tim3SlaveGateCtrl    = 7u,         ///< 门控功能
439 }en_tim3_m23_mscr_sms_t;
440 
441 /**
442  ******************************************************************************
443  ** \brief 定时器运行控制数据类型重定义 (CTEN)
444  *****************************************************************************/
445 typedef enum en_tim3_start
446 {
447     Tim3CTENDisable = 0u,            ///< 停止
448     Tim3CTENEnable  = 1u,            ///< 运行
449 }en_tim3_start_t;
450 
451 /**
452  ******************************************************************************
453  ** \brief TIM3 mode0 配置结构体定义(模式0)
454  *****************************************************************************/
455 typedef struct stc_tim3_mode0_config
456 {
457     en_tim3_work_mode_t     enWorkMode;       ///< 工作模式设置
458     en_tim3_m0cr_gatep_t    enGateP;          ///< 门控极性控制
459     boolean_t               bEnGate;          ///< 门控使能
460     en_tim3_cr_timclkdiv_t  enPRS;            ///< 预除频配置
461     boolean_t               bEnTog;           ///< 翻转输出使能
462     en_tim3_cr_ct_t         enCT;             ///< 定时/计数功能选择
463     en_tim3_m0cr_md_t       enCntMode;        ///< 计数模式配置
464 
465     func_ptr_t              pfnTim3Cb;        ///< Timer3中断服务回调函数[void function(void)]
466 }stc_tim3_mode0_config_t;
467 
468 /**
469  ******************************************************************************
470  ** \brief TIM3 mode1 配置结构体定义(模式1)
471  *****************************************************************************/
472 typedef struct stc_tim3_mode1_config
473 {
474     en_tim3_work_mode_t     enWorkMode;       ///< 工作模式设置
475     en_tim3_cr_timclkdiv_t  enPRS;            ///< 预除频配置
476     en_tim3_cr_ct_t         enCT;             ///< 定时/计数功能选择
477     en_tim3_m1cr_oneshot_t  enOneShot;        ///< 单次测量/循环测量选择
478 
479     func_ptr_t              pfnTim3Cb;        ///< Timer3中断服务回调函数[void function(void)]
480 
481 }stc_tim3_mode1_config_t;
482 
483 /**
484  ******************************************************************************
485  ** \brief PWC输入配置结构体定义(模式1)
486  *****************************************************************************/
487 typedef struct stc_tim3_pwc_input_config
488 {
489     en_tim3_mscr_ts_t          enTsSel;       ///< 触发输入源选择
490     en_tim3_m1_mscr_ia0s_t     enIA0Sel;      ///< CHA0输入选择
491     en_tim3_m1_mscr_ib0s_t     enIB0Sel;      ///< CHB0输入选择
492     en_tim3_port_polarity_t    enETRPhase;    ///< ETR相位选择
493     en_tim3_flt_t              enFltETR;      ///< ETR滤波设置
494     en_tim3_flt_t              enFltIA0;      ///< CHA0滤波设置
495     en_tim3_flt_t              enFltIB0;      ///< CHB0滤波设置
496 }stc_tim3_pwc_input_config_t;
497 
498 /**
499  ******************************************************************************
500  ** \brief TIM3 mode23 配置结构体定义(模式23)
501  *****************************************************************************/
502 typedef struct stc_tim3_mode23_config
503 {
504     en_tim3_work_mode_t         enWorkMode;       ///< 工作模式设置
505     en_tim3_m23cr_dir_t         enCntDir;         ///< 计数方向
506     en_tim3_cr_timclkdiv_t      enPRS;            ///< 时钟预除频配置
507     en_tim3_cr_ct_t             enCT;             ///< 定时/计数功能选择
508     en_tim3_m23cr_comp_t        enPWMTypeSel;     ///< PWM模式选择(独立/互补)
509     en_tim3_m23cr_pwm2s_t       enPWM2sSel;       ///< OCREFA双点比较功能选择
510     boolean_t                   bOneShot;         ///< 单次触发模式使能/禁止
511     boolean_t                   bURSSel;          ///< 更新源选择
512 
513     func_ptr_t                  pfnTim3Cb;        ///< Timer3中断服务回调函数[void function(void)]
514 }stc_tim3_mode23_config_t;
515 
516 /**
517  ******************************************************************************
518  ** \brief GATE在PWM互补模式下捕获或比较功能 配置结构体定义(模式23)
519  *****************************************************************************/
520 typedef struct stc_tim3_m23_gate_config
521 {
522     en_tim3_m23cr_csg_t        enGateFuncSel;      ///< Gate比较、捕获功能选择
523     boolean_t                  bGateRiseCap;       ///< GATE作为捕获功能时,上沿捕获有效控制
524     boolean_t                  bGateFallCap;       ///< GATE作为捕获功能时,下沿捕获有效控制
525 }stc_tim3_m23_gate_config_t;
526 
527 /**
528  ******************************************************************************
529  ** \brief CHA/CHB通道比较控制 配置结构体定义(模式23)
530  *****************************************************************************/
531 typedef struct stc_tim3_m23_compare_config
532 {
533     en_tim3_m23_crch0_csa_csb_t  enCHxACmpCap;     ///< CH0A比较/捕获功能选择
534     en_tim3_m23_fltr_ocm_t       enCHxACmpCtrl;    ///< CH0A通道比较控制
535     en_tim3_port_polarity_t      enCHxAPolarity;   ///< CH0A输出极性控制
536     boolean_t                    bCHxACmpBufEn;    ///< 比较A缓存功能 使能/禁止
537     en_tim3_m23_cisa_cisb_t      enCHxACmpIntSel;  ///< CHA比较匹配中断选择
538 
539     en_tim3_m23_crch0_csa_csb_t  enCHxBCmpCap;     ///< CH0B比较/捕获功能选择
540     en_tim3_m23_fltr_ocm_t       enCHxBCmpCtrl;    ///< CH0B通道比较控制
541     en_tim3_port_polarity_t      enCHxBPolarity;   ///< CH0B输出极性控制
542     boolean_t                    bCHxBCmpBufEn;    ///< 比较B缓存功能 使能/禁止
543     en_tim3_m23_cisa_cisb_t      enCHxBCmpIntSel;  ///< CHB0比较匹配中断选择
544 }stc_tim3_m23_compare_config_t;
545 
546 /**
547  ******************************************************************************
548  ** \brief CHA/CHB通道捕获控制 配置结构体定义(模式23)
549  *****************************************************************************/
550 typedef struct stc_tim3_m23_input_config
551 {
552     en_tim3_m23_crch0_csa_csb_t  enCHxACmpCap;     ///< CH0A比较/捕获功能选择
553     en_tim3_m23_crch0_cfx_crx_t  enCHxACapSel;     ///< CH0A捕获边沿选择
554     en_tim3_flt_t                enCHxAInFlt;      ///< CH0A通道捕获滤波控制
555     en_tim3_port_polarity_t      enCHxAPolarity;   ///< CH0A输入相位
556 
557     en_tim3_m23_crch0_csa_csb_t  enCHxBCmpCap;     ///< CH0A比较/捕获功能选择
558     en_tim3_m23_crch0_cfx_crx_t  enCHxBCapSel;     ///< CH0B捕获边沿选择
559     en_tim3_flt_t                enCHxBInFlt;      ///< CH0B通道捕获滤波控制
560     en_tim3_port_polarity_t      enCHxBPolarity;   ///< CH0B输入相位
561 
562 }stc_tim3_m23_input_config_t;
563 
564 /**
565  ******************************************************************************
566  ** \brief ETR输入相位滤波配置结构体定义(模式23)
567  *****************************************************************************/
568 typedef struct stc_tim3_m23_etr_input_config
569 {
570     en_tim3_port_polarity_t     enETRPolarity;  ///< ETR输入极性设置
571     en_tim3_flt_t               enETRFlt;       ///< ETR滤波设置
572 }stc_tim3_m23_etr_input_config_t;
573 
574 /**
575  ******************************************************************************
576  ** \brief 刹车BK输入相位滤波配置结构体定义(模式23)
577  *****************************************************************************/
578 typedef struct stc_tim3_m23_bk_input_config
579 {
580     boolean_t                   bEnBrake;         ///< 刹车使能
581     boolean_t                   bEnVC0Brake;      ///< 使能VC0刹车
582     boolean_t                   bEnVC1Brake;      ///< 使能VC1刹车
583     boolean_t                   bEnSafetyBk;      ///< 使能safety刹车
584     boolean_t                   bEnBKSync;        ///< TIM0/TIM1/TIM2刹车同步使能
585     en_tim3_m23_crchx_bks_t     enBkCH0AStat;     ///< 刹车时CHA端口状态设置
586     en_tim3_m23_crchx_bks_t     enBkCH0BStat;     ///< 刹车时CHB端口状态设置
587     en_tim3_m23_crchx_bks_t     enBkCH1AStat;     ///< 刹车时CHA端口状态设置
588     en_tim3_m23_crchx_bks_t     enBkCH1BStat;     ///< 刹车时CHB端口状态设置
589     en_tim3_m23_crchx_bks_t     enBkCH2AStat;     ///< 刹车时CHA端口状态设置
590     en_tim3_m23_crchx_bks_t     enBkCH2BStat;     ///< 刹车时CHB端口状态设置
591     en_tim3_port_polarity_t     enBrakePolarity;  ///< 刹车BK输入极性设置
592     en_tim3_flt_t               enBrakeFlt;       ///< 刹车BK滤波设置
593 }stc_tim3_m23_bk_input_config_t;
594 
595 /**
596  ******************************************************************************
597 ** \brief 死区功能配置结构体定义(模式23)
598  *****************************************************************************/
599 typedef struct stc_tim3_m23_dt_config
600 {
601     boolean_t       bEnDeadTime;      ///< 刹车时CHA端口状态设置
602     uint8_t         u8DeadTimeValue;  ///< 刹车时CHA端口状态设置
603 }stc_tim3_m23_dt_config_t;
604 
605 /**
606  ******************************************************************************
607  ** \brief 触发ADC配置结构体定义(模式23)
608  *****************************************************************************/
609 typedef struct stc_tim3_m23_adc_trig_config
610 {
611     boolean_t     bEnTrigADC;          ///< 触发ADC全局控制
612     boolean_t     bEnUevTrigADC;       ///< 事件更新触发ADC
613     boolean_t     bEnCH0ACmpTrigADC;   ///< CH0A比较匹配触发ADC
614     boolean_t     bEnCH0BCmpTrigADC;   ///< CH0B比较匹配触发ADC
615     boolean_t     bEnCH1ACmpTrigADC;   ///< CH0A比较匹配触发ADC
616     boolean_t     bEnCH1BCmpTrigADC;   ///< CH0B比较匹配触发ADC
617     boolean_t     bEnCH2ACmpTrigADC;   ///< CH0A比较匹配触发ADC
618     boolean_t     bEnCH2BCmpTrigADC;   ///< CH0B比较匹配触发ADC
619 }stc_tim3_m23_adc_trig_config_t;
620 
621 /**
622  ******************************************************************************
623  ** \brief  DMA触发 配置结构体定义(模式23)
624  *****************************************************************************/
625 typedef struct stc_tim3_m23_trig_dma_config
626 {
627     boolean_t                bUevTrigDMA;      ///< 更新 触发DMA使能
628     boolean_t                bTITrigDMA;       ///< Trig 触发DMA功能
629     boolean_t                bCmpA0TrigDMA;    ///< CH0A捕获比较触发DMA使能
630     boolean_t                bCmpB0TrigDMA;    ///< CH0B捕获比较触发DMA使能
631     boolean_t                bCmpA1TrigDMA;    ///< CH1A捕获比较触发DMA使能
632     boolean_t                bCmpB1TrigDMA;    ///< CH1B捕获比较触发DMA使能
633     boolean_t                bCmpA2TrigDMA;    ///< CH2A捕获比较触发DMA使能
634     boolean_t                bCmpB2TrigDMA;    ///< CH2B捕获比较触发DMA使能
635     en_tim3_m23_mscr_ccds_t  enCmpUevTrigDMA;  ///< 比较模式下DMA比较触发选择
636 }stc_tim3_m23_trig_dma_config_t;
637 
638 /**
639  ******************************************************************************
640  ** \brief  主从模式 配置结构体定义(模式23)
641  *****************************************************************************/
642 typedef struct stc_tim3_m23_master_slave_config
643 {
644     en_tim3_m23_mscr_msm_t      enMasterSlaveSel;  ///< 主从模式选择
645     en_tim3_m23_mscr_mms_t      enMasterSrc;       ///< 主模式触发源选择
646     en_tim3_m23_mscr_sms_t      enSlaveModeSel;    ///< 从模式选择
647     en_tim3_mscr_ts_t           enTsSel;           ///< 触发输入源选择
648 }stc_tim3_m23_master_slave_config_t;
649 
650 /**
651  ******************************************************************************
652  ** \brief  OCREF清除功能 配置结构体定义(模式23)
653  *****************************************************************************/
654 typedef struct stc_tim3_m23_OCREF_Clr_config
655 {
656     en_tim3_m23ce_occs_t       enOCRefClrSrcSel;  ///< OCREF清除源选择
657     boolean_t                  bVCClrEn;          ///< 是否使能来自VC的OCREF_Clr
658 }stc_tim3_m23_OCREF_Clr_config_t;
659 
660 /******************************************************************************
661  * Global variable declarations ('extern', definition in C source)
662  *****************************************************************************/
663 
664 /******************************************************************************
665  * Global function prototypes (definition in C source)
666  *****************************************************************************/
667 //中断相关函数
668 
669 //中断标志获取
670 boolean_t Tim3_GetIntFlag(en_tim3_irq_type_t enTim3Irq);
671 //中断标志清除
672 en_result_t Tim3_ClearIntFlag(en_tim3_irq_type_t enTim3Irq);
673 //所有中断标志清除
674 en_result_t Tim3_ClearAllIntFlag(void);
675 //模式0中断使能
676 en_result_t Tim3_Mode0_EnableIrq(void);
677 //模式1中断使能
678 en_result_t Tim3_Mode1_EnableIrq (en_tim3_irq_type_t enTim3Irq);
679 //模式2中断使能
680 en_result_t Tim3_Mode23_EnableIrq (en_tim3_irq_type_t enTim3Irq);
681 //模式0中断禁止
682 en_result_t Tim3_Mode0_DisableIrq(void);
683 //模式1中断禁止
684 en_result_t Tim3_Mode1_DisableIrq (en_tim3_irq_type_t enTim3Irq);
685 //模式2中断禁止
686 en_result_t Tim3_Mode23_DisableIrq (en_tim3_irq_type_t enTim3Irq);
687 
688 
689 //模式0初始化及相关功能操作
690 
691 //timer配置及初始化
692 en_result_t Tim3_Mode0_Init(stc_tim3_mode0_config_t* pstcConfig);
693 //timer 启动/停止
694 en_result_t Tim3_M0_Run(void);
695 en_result_t Tim3_M0_Stop(void);
696 //重载值设置
697 en_result_t Tim3_M0_ARRSet(uint16_t u16Data);
698 //16位计数值设置/获取
699 en_result_t Tim3_M0_Cnt16Set(uint16_t u16Data);
700 uint16_t Tim3_M0_Cnt16Get(void);
701 //32位计数值设置/获取
702 en_result_t Tim3_M0_Cnt32Set(uint32_t u32Data);
703 uint32_t Tim3_M0_Cnt32Get(void);
704 //翻转输出使能/禁止设定
705 en_result_t Tim3_M0_EnTOG_Output(boolean_t bEnOutput);
706 
707 
708 //模式1初始化及相关功能操作
709 
710 //timer配置及初始化
711 en_result_t Tim3_Mode1_Init(stc_tim3_mode1_config_t* pstcConfig);
712 //PWC 输入配置
713 en_result_t Tim3_M1_Input_Config(stc_tim3_pwc_input_config_t* pstcConfig);
714 //PWC测量边沿起始结束选择
715 en_result_t Tim3_M1_PWC_Edge_Sel(en_tim3_m1cr_Edge_t enEdgeSel);
716 //timer 启动/停止
717 en_result_t Tim3_M1_Run(void);
718 en_result_t Tim3_M1_Stop(void);
719 //16位计数值设置/获取
720 en_result_t Tim3_M1_Cnt16Set(uint16_t u16Data);
721 uint16_t Tim3_M1_Cnt16Get(void);
722 //脉冲宽度测量结果数值获取
723 uint16_t Tim3_M1_PWC_CapValueGet(void);
724 
725 
726 //模式1初始化及相关功能操作
727 
728 //timer配置及初始化
729 en_result_t Tim3_Mode23_Init(stc_tim3_mode23_config_t* pstcConfig);
730 //timer 启动/停止
731 en_result_t Tim3_M23_Run(void);
732 en_result_t Tim3_M23_Stop(void);
733 //PWM输出使能
734 en_result_t Tim3_M23_EnPWM_Output(boolean_t bEnOutput, boolean_t bEnAutoOutput);
735 //重载值设置
736 en_result_t Tim3_M23_ARRSet(uint16_t u16Data, boolean_t bArrBufEn);
737 //16位计数值设置/获取
738 en_result_t Tim3_M23_Cnt16Set(uint16_t u16Data);
739 uint16_t Tim3_M23_Cnt16Get(void);
740 //比较捕获寄存器CCR0A/CCR0B设置/读取
741 en_result_t Tim3_M23_CCR_Set(en_tim3_m23_ccrx_t enCCRSel, uint16_t u16Data);
742 uint16_t Tim3_M23_CCR_Get(en_tim3_m23_ccrx_t enCCRSel);
743 //PWM互补输出模式下,GATE功能选择
744 en_result_t Tim3_M23_GateFuncSel(stc_tim3_m23_gate_config_t* pstcConfig);
745 //主从模式配置
746 en_result_t Tim3_M23_MasterSlave_Set(stc_tim3_m23_master_slave_config_t* pstcConfig);
747 //CH0A/CH0B比较通道控制
748 en_result_t Tim3_M23_PortOutput_Config(en_tim3_channel_t enTim3Chx, stc_tim3_m23_compare_config_t* pstcConfig);
749 //CH0A/CH0B输入控制
750 en_result_t Tim3_M23_PortInput_Config(en_tim3_channel_t enTim3Chx, stc_tim3_m23_input_config_t* pstcConfig);
751 //ERT输入控制
752 en_result_t Tim3_M23_ETRInput_Config(stc_tim3_m23_etr_input_config_t* pstcConfig);
753 //刹车BK输入控制
754 en_result_t Tim3_M23_BrakeInput_Config(stc_tim3_m23_bk_input_config_t* pstcConfig);
755 //触发ADC控制
756 en_result_t Tim3_M23_TrigADC_Config(stc_tim3_m23_adc_trig_config_t* pstcConfig);
757 //死区功能
758 en_result_t Tim3_M23_DT_Config(stc_tim3_m23_dt_config_t* pstcConfig);
759 //重复周期设置
760 en_result_t Tim3_M23_SetValidPeriod(uint8_t u8ValidPeriod);
761 //OCREF清除功能
762 en_result_t Tim3_M23_OCRefClr(stc_tim3_m23_OCREF_Clr_config_t* pstcConfig);
763 //使能DMA传输
764 en_result_t Tim3_M23_EnDMA(stc_tim3_m23_trig_dma_config_t* pstcConfig);
765 //捕获比较A软件触发
766 en_result_t Tim3_M23_EnSwTrigCapCmpA(en_tim3_channel_t enTim3Chx);
767 //捕获比较B软件触发
768 en_result_t Tim3_M23_EnSwTrigCapCmpB(en_tim3_channel_t enTim3Chx);
769 //软件更新使能
770 en_result_t Tim3_M23_EnSwUev(void);
771 //软件触发使能
772 en_result_t Tim3_M23_EnSwTrig(void);
773 //软件刹车使能
774 en_result_t Tim3_M23_EnSwBk(void);
775 
776 
777 //@} // Tim3Group
778 
779 #ifdef __cplusplus
780 #endif
781 
782 
783 #endif /* __BT_H__ */
784 /******************************************************************************
785  * EOF (not truncated)
786  *****************************************************************************/
787 
788 
789