aboutsummaryrefslogtreecommitdiffstats
path: root/lib/hc32f460/driver/inc/hc32f460_timera.h
blob: 4bd002be08f694dbf2109bcbde825f82c77abb5d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
/*******************************************************************************
 * Copyright (C) 2020, Huada Semiconductor Co., Ltd. All rights reserved.
 *
 * This software component is licensed by HDSC under BSD 3-Clause license
 * (the "License"); You may not use this file except in compliance with the
 * License. You may obtain a copy of the License at:
 *                    opensource.org/licenses/BSD-3-Clause
 */
/******************************************************************************/
/** \file hc32f460_timera.h
 **
 ** A detailed description is available at
 ** @link TimeraGroup Timer A description @endlink
 **
 **   - 2018-11-08  CDT  First version for Device Driver Library of
 **                      Timera.
 **
 ******************************************************************************/
#ifndef __HC32F460_TIMERA_H__
#define __HC32F460_TIMERA_H__

/*******************************************************************************
 * Include files
 ******************************************************************************/
#include "hc32_common.h"

/* C binding of definitions if building with C++ compiler */
#ifdef __cplusplus
extern "C"
{
#endif

/**
 *******************************************************************************
 ** \defgroup TimeraGroup Timer A(Timera)
 **
 ******************************************************************************/
//@{

/*******************************************************************************
 * Global type definitions ('typedef')
 ******************************************************************************/
/**
 *******************************************************************************
 ** \brief Timera channel enumeration
 ******************************************************************************/
typedef enum en_timera_channel
{
    TimeraCh1 = 0u,                     ///< Timera channel 1
    TimeraCh2 = 1u,                     ///< Timera channel 2
    TimeraCh3 = 2u,                     ///< Timera channel 3
    TimeraCh4 = 3u,                     ///< Timera channel 4
    TimeraCh5 = 4u,                     ///< Timera channel 5
    TimeraCh6 = 5u,                     ///< Timera channel 6
    TimeraCh7 = 6u,                     ///< Timera channel 7
    TimeraCh8 = 7u,                     ///< Timera channel 8
} en_timera_channel_t;

/**
 *******************************************************************************
 ** \brief Clock division enumeration
 ******************************************************************************/
typedef enum en_timera_clk_div
{
    TimeraPclkDiv1    = 0u,             ///< Count clock: pclk
    TimeraPclkDiv2    = 1u,             ///< Count clock: pclk/2
    TimeraPclkDiv4    = 2u,             ///< Count clock: pclk/4
    TimeraPclkDiv8    = 3u,             ///< Count clock: pclk/8
    TimeraPclkDiv16   = 4u,             ///< Count clock: pclk/16
    TimeraPclkDiv32   = 5u,             ///< Count clock: pclk/32
    TimeraPclkDiv64   = 6u,             ///< Count clock: pclk/64
    TimeraPclkDiv128  = 7u,             ///< Count clock: pclk/128
    TimeraPclkDiv256  = 8u,             ///< Count clock: pclk/256
    TimeraPclkDiv512  = 9u,             ///< Count clock: pclk/512
    TimeraPclkDiv1024 = 10u,            ///< Count clock: pclk/1024
} en_timera_clk_div_t;

/**
 *******************************************************************************
 ** \brief Count mode enumeration
 ******************************************************************************/
typedef enum en_timera_count_mode
{
    TimeraCountModeSawtoothWave   = 0u, ///< Sawtooth wave mode
    TimeraCountModeTriangularWave = 1u, ///< Triangular wave mode
} en_timera_count_mode_t;

/**
 *******************************************************************************
 ** \brief Count direction enumeration
 ******************************************************************************/
typedef enum en_timera_count_dir
{
    TimeraCountDirDown = 0u,            ///< Counter counting down
    TimeraCountDirUp   = 1u,            ///< Counter counting up
} en_timera_count_dir_t;

/**
 *******************************************************************************
 ** \brief Input port filter clock division enumeration
 ******************************************************************************/
typedef enum en_timera_filter_clk_div
{
    TimeraFilterPclkDiv1  = 0u,         ///< Filter clock: pclk
    TimeraFilterPclkDiv4  = 1u,         ///< Filter clock: pclk/4
    TimeraFilterPclkDiv16 = 2u,         ///< Filter clock: pclk/16
    TimeraFilterPclkDiv64 = 3u,         ///< Filter clock: pclk/64
} en_timera_filter_clk_div_t;

/**
 *******************************************************************************
 ** \brief Input port filter source enumeration
 **
 ** \note _<t>_ is unit number,range 1~6
 ******************************************************************************/
typedef enum en_timera_filter_source
{
    TimeraFilterSourceCh1  = 0u,        ///< TIMA_<t>_PWM1 input port
    TimeraFilterSourceCh2  = 1u,        ///< TIMA_<t>_PWM2 input port
    TimeraFilterSourceCh3  = 2u,        ///< TIMA_<t>_PWM3 input port
    TimeraFilterSourceCh4  = 3u,        ///< TIMA_<t>_PWM4 input port
    TimeraFilterSourceCh5  = 4u,        ///< TIMA_<t>_PWM5 input port
    TimeraFilterSourceCh6  = 5u,        ///< TIMA_<t>_PWM6 input port
    TimeraFilterSourceCh7  = 6u,        ///< TIMA_<t>_PWM7 input port
    TimeraFilterSourceCh8  = 7u,        ///< TIMA_<t>_PWM8 input port
    TimeraFilterSourceClkA = 8u,        ///< TIMA_<t>_CLKA input port
    TimeraFilterSourceClkB = 9u,        ///< TIMA_<t>_CLKB input port
    TimeraFilterSourceTrig = 10u,       ///< TIMA_<t>_TRIG input port
} en_timera_filter_source_t;

/**
 *******************************************************************************
 ** \brief Timera interrupt request type enumeration
 ******************************************************************************/
typedef enum en_timera_irq_type
{
    TimeraIrqCaptureOrCompareCh1 = 0u,              ///< Interrupt request when channel 1 trigger capture event or compare value equal count value
    TimeraIrqCaptureOrCompareCh2 = 1u,              ///< Interrupt request when channel 2 trigger capture event or compare value equal count value
    TimeraIrqCaptureOrCompareCh3 = 2u,              ///< Interrupt request when channel 3 trigger capture event or compare value equal count value
    TimeraIrqCaptureOrCompareCh4 = 3u,              ///< Interrupt request when channel 4 trigger capture event or compare value equal count value
    TimeraIrqCaptureOrCompareCh5 = 4u,              ///< Interrupt request when channel 5 trigger capture event or compare value equal count value
    TimeraIrqCaptureOrCompareCh6 = 5u,              ///< Interrupt request when channel 6 trigger capture event or compare value equal count value
    TimeraIrqCaptureOrCompareCh7 = 6u,              ///< Interrupt request when channel 7 trigger capture event or compare value equal count value
    TimeraIrqCaptureOrCompareCh8 = 7u,              ///< Interrupt request when channel 8 trigger capture event or compare value equal count value
    TimeraIrqOverflow            = 8u,              ///< Count overflow interrupt request
    TimeraIrqUnderflow           = 9u,              ///< Count underflow interrupt request
} en_timera_irq_type_t;

/**
 *******************************************************************************
 ** \brief Timera flag type enumeration
 ******************************************************************************/
typedef enum en_timera_flag_type
{
    TimeraFlagCaptureOrCompareCh1 = 0u,             ///< Match flag when channel 1 trigger capture complete or compare value equal count value
    TimeraFlagCaptureOrCompareCh2 = 1u,             ///< Match flag when channel 2 trigger capture complete or compare value equal count value
    TimeraFlagCaptureOrCompareCh3 = 2u,             ///< Match flag when channel 3 trigger capture complete or compare value equal count value
    TimeraFlagCaptureOrCompareCh4 = 3u,             ///< Match flag when channel 4 trigger capture complete or compare value equal count value
    TimeraFlagCaptureOrCompareCh5 = 4u,             ///< Match flag when channel 5 trigger capture complete or compare value equal count value
    TimeraFlagCaptureOrCompareCh6 = 5u,             ///< Match flag when channel 6 trigger capture complete or compare value equal count value
    TimeraFlagCaptureOrCompareCh7 = 6u,             ///< Match flag when channel 7 trigger capture complete or compare value equal count value
    TimeraFlagCaptureOrCompareCh8 = 7u,             ///< Match flag when channel 8 trigger capture complete or compare value equal count value
    TimeraFlagOverflow            = 8u,             ///< Count overflow flag
    TimeraFlagUnderflow           = 9u,             ///< Count underflow flag
} en_timera_flag_type_t;

/**
 *******************************************************************************
 ** \brief Timera function mode selection enumeration
 ******************************************************************************/
typedef enum en_timera_func_mode
{
    TimeraModeCompareOutput = 0u,                   ///< Compare output function
    TimeraModeCaptureInput  = 1u,                   ///< Capture input function
} en_timera_func_mode_t;

/**
 *******************************************************************************
 ** \brief Timera count start port output status enumeration
 **
 ** \note _<t>_ is unit number,range 1~6
 ** \note PWMn is channel of unit,range 1-8
 ******************************************************************************/
typedef enum en_timera_count_start_output
{
    TimeraCountStartOutputLow  = 0u,                ///< TIMA_<t>_PWMn port output low level
    TimeraCountStartOutputHigh = 1u,                ///< TIMA_<t>_PWMn port output high level
    TimeraCountStartOutputKeep = 2u,                ///< TIMA_<t>_PWMn port output to keep
} en_timera_count_start_output_t;

/**
 *******************************************************************************
 ** \brief Timera count stop port output status enumeration
 **
 ** \note _<t>_ is unit number,range 1~6
 ** \note PWMn is channel of unit,range 1-8
 ******************************************************************************/
typedef enum en_timera_count_stop_output
{
    TimeraCountStopOutputLow  = 0u,                 ///< TIMA_<t>_PWMn port output low level
    TimeraCountStopOutputHigh = 1u,                 ///< TIMA_<t>_PWMn port output high level
    TimeraCountStopOutputKeep = 2u,                 ///< TIMA_<t>_PWMn port output to keep
} en_timera_count_stop_output_t;

/**
 *******************************************************************************
 ** \brief Timera compare value match output status enumeration
 **
 ** \note _<t>_ is unit number,range 1~6
 ** \note PWMn is channel of unit,range 1-8
 ******************************************************************************/
typedef enum en_timera_compare_match_output
{
    TimeraCompareMatchOutputLow     = 0u,           ///< TIMA_<t>_PWMn port output low level
    TimeraCompareMatchOutputHigh    = 1u,           ///< TIMA_<t>_PWMn port output high level
    TimeraCompareMatchOutputKeep    = 2u,           ///< TIMA_<t>_PWMn port output to keep
    TimeraCompareMatchOutputReverse = 3u,           ///< TIMA_<t>_PWMn port output reverse
} en_timera_compare_match_output_t;

/**
 *******************************************************************************
 ** \brief Timera period value match output status enumeration
 **
 ** \note _<t>_ is unit number,range 1~6
 ** \note PWMn is channel of unit,range 1-8
 ******************************************************************************/
typedef enum en_timera_period_match_output
{
    TimeraPeriodMatchOutputLow     = 0u,            ///< TIMA_<t>_PWMn port output low level
    TimeraPeriodMatchOutputHigh    = 1u,            ///< TIMA_<t>_PWMn port output high level
    TimeraPeriodMatchOutputKeep    = 2u,            ///< TIMA_<t>_PWMn port output to keep
    TimeraPeriodMatchOutputReverse = 3u,            ///< TIMA_<t>_PWMn port output reverse
} en_timera_period_match_output_t;

/**
 *******************************************************************************
 ** \brief Timera specify output status enumeration
 **
 ** \note _<t>_ is unit number,range 1~6
 ** \note PWMn is channel of unit,range 1-8
 ******************************************************************************/
typedef enum en_timera_specify_output
{
    TimeraSpecifyOutputInvalid = 0u,                ///< TIMA_<t>_PWMn port output invalid
    TimeraSpecifyOutputLow     = 2u,                ///< TIMA_<t>_PWMn port output low level from next period
    TimeraSpecifyOutputHigh    = 3u,                ///< TIMA_<t>_PWMn port output high level from next period
} en_timera_specify_output_t;

/**
 *******************************************************************************
 ** \brief Timera common trigger source enumeration
 ******************************************************************************/
typedef enum en_timera_com_trigger
{
    TimeraComTrigger_1   = 1u,                      ///< Select common trigger 1.
    TimeraComTrigger_2   = 2u,                      ///< Select common trigger 2.
    TimeraComTrigger_1_2 = 3u,                      ///< Select common trigger 1 and 2.
} en_timera_com_trigger_t;

/**
 *******************************************************************************
 ** \brief Timera base init structure definition
 ******************************************************************************/
typedef struct stc_timera_base_init
{
    en_timera_clk_div_t    enClkDiv;                                ///< Count clock division select,This is invalid when counting internal or external event
    en_timera_count_mode_t enCntMode;                               ///< Timera count mode
    en_timera_count_dir_t  enCntDir;                                ///< Timera count direction
    en_functional_state_t  enSyncStartupEn;                         ///< Enable/disable synchronization startup when unit 1 startup,unit 1 set bit invalid
    uint16_t               u16PeriodVal;                            ///< Period value
} stc_timera_base_init_t;

/**
 *******************************************************************************
 ** \brief Timera compare output init structure definition
 ******************************************************************************/
typedef struct stc_timera_compare_init
{
    uint16_t                         u16CompareVal;                 ///< Compare value
    en_timera_count_start_output_t   enStartCountOutput;            ///< Port status set when count start
    en_timera_count_stop_output_t    enStopCountOutput;             ///< Port status set when count stop
    en_timera_compare_match_output_t enCompareMatchOutput;          ///< Port status set when compare value match
    en_timera_period_match_output_t  enPeriodMatchOutput;           ///< Port status set when period value match
    en_timera_specify_output_t       enSpecifyOutput;               ///< Specify port status,next period valid,priority more than other port status set
    en_functional_state_t            enCacheEn;                     ///< Enable/Disable cache,Only unit 1、3、5、7 valid
    en_functional_state_t            enTriangularTroughTransEn;     ///< Enable/Disable triangular wave trough transmit cache value,Only unit 1、3、5、7 valid
    en_functional_state_t            enTriangularCrestTransEn;      ///< Enable/Disable triangular wave crest transmit cache value,Only unit 1、3、5、7 valid
    uint16_t                         u16CompareCacheVal;            ///< Compare cache value,Only unit 1、3、5、7 valid
} stc_timera_compare_init_t;

/**
 *******************************************************************************
 ** \brief Timera capture input init structure definition
 ******************************************************************************/
typedef struct stc_timera_capture_init
{
    en_functional_state_t      enCapturePwmRisingEn;                ///< Enable/Disable capture channel n active when TIMA_<t>_PWMn sample rising
    en_functional_state_t      enCapturePwmFallingEn;               ///< Enable/Disable capture channel n active when TIMA_<t>_PWMn sample falling
    en_functional_state_t      enCaptureSpecifyEventEn;             ///< Enable/Disable capture channel n active when specify event trigger,event value is TMRA_HTSSR1
    en_timera_filter_clk_div_t enPwmClkDiv;                         ///< TIMA_<t>_PWMn filter clock select
    en_functional_state_t      enPwmFilterEn;                       ///< Enable/Disable TIMA_<t>_PWMn filter functions
    en_functional_state_t      enCaptureTrigRisingEn;               ///< Enable/Disable capture channel 4 active when TIMA_<t>_TRIG sample rising, only CCONR4 valid
    en_functional_state_t      enCaptureTrigFallingEn;              ///< Enable/Disable capture channel 4 active when TIMA_<t>_TRIG sample falling, only CCONR4 valid
    en_timera_filter_clk_div_t enTrigClkDiv;                        ///< TIMA_<t>_TRIG filter clock select, only CCONR4 valid
    en_functional_state_t      enTrigFilterEn;                      ///< Enable/Disable TIMA_<t>_TRIG filter functions , only CCONR4 valid
} stc_timera_capture_init_t;

/**
 *******************************************************************************
 ** \brief Timera Orthogonal coding init structure definition
 **
 ** \note _<t>_ is unit number,range 1~6
 ** \note PWMn is channel of unit,range 1-8
 ** \note n=2、4、6 when m=1、3、5 or n=1、3、5 when m=2、4、6
 ******************************************************************************/
typedef struct stc_timera_orthogonal_coding_init
{
    en_functional_state_t      enIncClkALowAndClkBRisingEn;         ///< TIMA_<t>_CLKB sample rising edge hardware increase when TIMA_<t>_CLKA is low level
    en_functional_state_t      enIncClkALowAndClkBFallingEn;        ///< TIMA_<t>_CLKB sample falling edge hardware increase when TIMA_<t>_CLKA is low level
    en_functional_state_t      enIncClkAHighAndClkBRisingEn;        ///< TIMA_<t>_CLKB sample rising edge hardware increase when TIMA_<t>_CLKA is high level
    en_functional_state_t      enIncClkAHighAndClkBFallingEn;       ///< TIMA_<t>_CLKB sample falling edge hardware increase when TIMA_<t>_CLKA is high level
    en_functional_state_t      enIncClkBLowAndClkARisingEn;         ///< TIMA_<t>_CLKA sample rising edge hardware increase when TIMA_<t>_CLKB is low level
    en_functional_state_t      enIncClkBLowAndClkAFallingEn;        ///< TIMA_<t>_CLKA sample falling edge hardware increase when TIMA_<t>_CLKB is low level
    en_functional_state_t      enIncClkBHighAndClkARisingEn;        ///< TIMA_<t>_CLKA sample rising edge hardware increase when TIMA_<t>_CLKB is high level
    en_functional_state_t      enIncClkBHighAndClkAFallingEn;       ///< TIMA_<t>_CLKA sample falling edge hardware increase when TIMA_<t>_CLKB is high level
    en_functional_state_t      enIncTrigRisingEn;                   ///< TIMA_<t>_TRIG sample rising edge hardware increase
    en_functional_state_t      enIncTrigFallingEn;                  ///< TIMA_<t>_TRIG sample falling edge hardware increase
    en_functional_state_t      enIncSpecifyEventTriggerEn;          ///< TIMA_HTSSR0 register Specify event trigger hardware increase
    en_functional_state_t      enIncAnotherUnitOverflowEn;          ///< Unit n generate count overflow hardware increase when current unit is m.
    en_functional_state_t      enIncAnotherUnitUnderflowEn;         ///< Unit n generate count underflow hardware increase when current unit is m.
    en_functional_state_t      enDecClkALowAndClkBRisingEn;         ///< TIMA_<t>_CLKB sample rising edge hardware increase when TIMA_<t>_CLKA is low level
    en_functional_state_t      enDecClkALowAndClkBFallingEn;        ///< TIMA_<t>_CLKB sample falling edge hardware increase when TIMA_<t>_CLKA is low level
    en_functional_state_t      enDecClkAHighAndClkBRisingEn;        ///< TIMA_<t>_CLKB sample rising edge hardware increase when TIMA_<t>_CLKA is high level
    en_functional_state_t      enDecClkAHighAndClkBFallingEn;       ///< TIMA_<t>_CLKB sample falling edge hardware increase when TIMA_<t>_CLKA is high level
    en_functional_state_t      enDecClkBLowAndClkARisingEn;         ///< TIMA_<t>_CLKA sample rising edge hardware increase when TIMA_<t>_CLKB is low level
    en_functional_state_t      enDecClkBLowAndClkAFallingEn;        ///< TIMA_<t>_CLKA sample falling edge hardware increase when TIMA_<t>_CLKB is low level
    en_functional_state_t      enDecClkBHighAndClkARisingEn;        ///< TIMA_<t>_CLKA sample rising edge hardware increase when TIMA_<t>_CLKB is high level
    en_functional_state_t      enDecClkBHighAndClkAFallingEn;       ///< TIMA_<t>_CLKA sample falling edge hardware increase when TIMA_<t>_CLKB is high level
    en_functional_state_t      enDecTrigRisingEn;                   ///< TIMA_<t>_TRIG sample rising edge hardware increase
    en_functional_state_t      enDecTrigFallingEn;                  ///< TIMA_<t>_TRIG sample falling edge hardware increase
    en_functional_state_t      enDecSpecifyEventTriggerEn;          ///< TIMA_HTSSR0 register Specify event trigger hardware increase
    en_functional_state_t      enDecAnotherUnitUnderflowEn;         ///< Unit n generate count overflow hardware increase when current unit is m.
    en_functional_state_t      enDecAnotherUnitOverflowEn;          ///< Unit n generate count underflow hardware increase when current unit is m.
    en_timera_filter_clk_div_t enClkAClkDiv;                        ///< TIMA_<t>_CLKA filter clock select
    en_functional_state_t      enClkAFilterEn;                      ///< Enable/Disable TIMA_<t>_CLKA filter functions
    en_timera_filter_clk_div_t enClkBClkDiv;                        ///< TIMA_<t>_CLKB filter clock select
    en_functional_state_t      enClkBFilterEn;                      ///< Enable/Disable TIMA_<t>_CLKB filter functions
    en_timera_filter_clk_div_t enTrigClkDiv;                        ///< TIMA_<t>_TRIG filter clock select
    en_functional_state_t      enTrigFilterEn;                      ///< Enable/Disable TIMA_<t>_TRIG filter functions
} stc_timera_orthogonal_coding_init_t;

/**
 *******************************************************************************
 ** \brief Timera hardware startup config structure definition
 **
 ** \note _<t>_ is unit number,range 1~6
 ** \note TMRA_HTSSR0 trigger startup only when unit 2~6 valid,unit 1 is invalid
 ******************************************************************************/
typedef struct stc_timera_hw_startup_config
{
    en_functional_state_t enTrigRisingStartupEn;                    ///< Hardware startup TIMA_<t> when TIMA_<t>_TRIG sample rising edge(sync start valid)
    en_functional_state_t enTrigFallingStartupEn;                   ///< Hardware startup TIMA_<t> when TIMA_<t>_TRIG sample falling edge(sync start valid)
    en_functional_state_t enSpecifyEventStartupEn;                  ///< Hardware startup TIMA_<t> when TIMA_HTSSR0 register Specify event trigger
} stc_timera_hw_startup_config_t;

/**
 *******************************************************************************
 ** \brief Timera hardware stop config structure definition
 **
 ** \note _<t>_ is unit number,range 1~6
 ******************************************************************************/
typedef struct stc_timera_hw_stop_config
{
    en_functional_state_t enTrigRisingStopEn;                       ///< Hardware stop TIMA_<t> when TIMA_<t>_TRIG sample rising edge
    en_functional_state_t enTrigFallingStopEn;                      ///< Hardware stop TIMA_<t> when TIMA_<t>_TRIG sample falling edge
    en_functional_state_t enSpecifyEventStopEn;                     ///< Hardware stop TIMA_<t> when TIMA_HTSSR0 register Specify event trigger
} stc_timera_hw_stop_config_t;

/**
 *******************************************************************************
 ** \brief Timera hardware clear config structure definition
 **
 ** \note _<t>_ is unit number,range 1~6
 ** \note n=2、4、6 when m=1、3、5 or n=1、3、5 when m=2、4、6
 ******************************************************************************/
typedef struct stc_timera_hw_clear_config
{
    en_functional_state_t enTrigRisingClearEn;                      ///< Hardware clear TIMA_<t> when TIMA_<t>_TRIG sample rising edge
    en_functional_state_t enTrigFallingClearEn;                     ///< Hardware clear TIMA_<t> when TIMA_<t>_TRIG sample falling edge
    en_functional_state_t enSpecifyEventClearEn;                    ///< Hardware clear TIMA_<t> when TIMA_HTSSR0 register Specify event trigger
    en_functional_state_t enAnotherUnitTrigRisingClearEn;           ///< Hardware clear TIMA_<t> when unit n TRIG port sample rising when current unit is m.
    en_functional_state_t enAnotherUnitTrigFallingClearEn;          ///< Hardware clear TIMA_<t> when unit n TRIG port sample falling when current unit is m.
    en_functional_state_t enChannel3RisingClearEn;                  ///< Hardware clear TIMA_<t> when TIMA_<t>_PWM3 sample rising edge
    en_functional_state_t enChannel3FallingClearEn;                 ///< Hardware clear TIMA_<t> when TIMA_<t>_PWM3 sample falling edge
} stc_timera_hw_clear_config_t;

/**
 *******************************************************************************
 ** \brief Timera hardware trigger init structure definition
 ******************************************************************************/
typedef struct stc_timera_hw_trigger_init
{
    stc_timera_hw_startup_config_t stcHwStartup;                     ///< Hardware startup condition config
    stc_timera_hw_stop_config_t    stcHwStop;                        ///< Hardware stop condition config
    stc_timera_hw_clear_config_t  stcHwClear;                       ///< Hardware clear condition config
} stc_timera_hw_trigger_init_t;

/*******************************************************************************
 * Global pre-processor symbols/macros ('#define')
 ******************************************************************************/

/*******************************************************************************
 * Global variable definitions ('extern')
 ******************************************************************************/

/*******************************************************************************
  Global function prototypes (definition in C source)
 ******************************************************************************/
/* Base functions */
en_result_t TIMERA_DeInit(M4_TMRA_TypeDef *TIMERAx);
en_result_t TIMERA_BaseInit(M4_TMRA_TypeDef *TIMERAx, const stc_timera_base_init_t *pstcBaseInit);
en_result_t TIMERA_SetCurrCount(M4_TMRA_TypeDef *TIMERAx, uint16_t u16Cnt);
uint16_t TIMERA_GetCurrCount(M4_TMRA_TypeDef *TIMERAx);
en_result_t TIMERA_SetPeriodValue(M4_TMRA_TypeDef *TIMERAx, uint16_t u16Period);
uint16_t TIMERA_GetPeriodValue(M4_TMRA_TypeDef *TIMERAx);
en_result_t TIMERA_SyncStartupCmd(M4_TMRA_TypeDef *TIMERAx, en_functional_state_t enNewSta);
en_result_t TIMERA_Cmd(M4_TMRA_TypeDef *TIMERAx, en_functional_state_t enNewSta);

/* Compare output functions */
en_result_t TIMERA_CompareInit(M4_TMRA_TypeDef *TIMERAx, en_timera_channel_t enChannel,
                               const stc_timera_compare_init_t *pstcCompareInit);
en_result_t TIMERA_SetCompareValue(M4_TMRA_TypeDef *TIMERAx, en_timera_channel_t enChannel,
                                   uint16_t u16CompareVal);
uint16_t TIMERA_GetCompareValue(M4_TMRA_TypeDef *TIMERAx, en_timera_channel_t enChannel);
en_result_t TIMERA_SetCacheValue(M4_TMRA_TypeDef *TIMERAx, en_timera_channel_t enChannel,
                                 uint16_t u16CompareCache);
en_result_t TIMERA_CompareCacheCmd(M4_TMRA_TypeDef *TIMERAx, en_timera_channel_t enChannel,
                                   en_functional_state_t enNewSta);
en_result_t TIMERA_SpecifyOutputSta(M4_TMRA_TypeDef *TIMERAx, en_timera_channel_t enChannel,
                                    en_timera_specify_output_t enOutputSta);
en_result_t TIMERA_CompareCmd(M4_TMRA_TypeDef *TIMERAx, en_timera_channel_t enChannel,
                              en_functional_state_t enNewSta);

/* Capture input functions */
en_result_t TIMERA_CaptureInit(M4_TMRA_TypeDef *TIMERAx, en_timera_channel_t enChannel,
                               const stc_timera_capture_init_t *pstcCapInit);
en_result_t TIMERA_CaptureFilterCmd(M4_TMRA_TypeDef *TIMERAx, en_timera_filter_source_t enFilterPort,
                                    en_functional_state_t enNewSta);
uint16_t TIMERA_GetCaptureValue(M4_TMRA_TypeDef *TIMERAx, en_timera_channel_t enChannel);

/* Orthogonal coding functions */
en_result_t TIMERA_OrthogonalCodingInit(M4_TMRA_TypeDef *TIMERAx, const stc_timera_orthogonal_coding_init_t *pstcCodingInit);
en_result_t TIMERA_SetOrthogonalCodingCount(M4_TMRA_TypeDef *TIMERAx, uint16_t u16CodingCnt);
uint16_t TIMERA_GetOrthogonalCodingCount(M4_TMRA_TypeDef *TIMERAx);
en_result_t TIMERA_OrthogonalCodingFilterCmd(M4_TMRA_TypeDef *TIMERAx, en_timera_filter_source_t enFilterPort,
                                             en_functional_state_t enNewSta);

/* Hardware control functions */
en_result_t TIMERA_HwTriggerInit(M4_TMRA_TypeDef *TIMERAx, const stc_timera_hw_trigger_init_t *pstcHwTriggerInit);
en_result_t TIMERA_HwStartupConfig(M4_TMRA_TypeDef *TIMERAx, const stc_timera_hw_startup_config_t *pstcHwStartup);
en_result_t TIMERA_HwStopConfig(M4_TMRA_TypeDef *TIMERAx, const stc_timera_hw_stop_config_t *pstcHwStop);
en_result_t TIMERA_HwClearConfig(M4_TMRA_TypeDef *TIMERAx, const stc_timera_hw_clear_config_t *pstcHwClear);

/* interrupt and flags functions */
en_result_t TIMERA_IrqCmd(M4_TMRA_TypeDef *TIMERAx, en_timera_irq_type_t enIrq,
                          en_functional_state_t enNewSta);
en_flag_status_t TIMERA_GetFlag(M4_TMRA_TypeDef *TIMERAx, en_timera_flag_type_t enFlag);
en_result_t TIMERA_ClearFlag(M4_TMRA_TypeDef *TIMERAx, en_timera_flag_type_t enFlag);

/* Event config functions */
en_result_t TIMERA_EventCmd(M4_TMRA_TypeDef *TIMERAx, en_timera_channel_t enChannel,
                            en_functional_state_t enNewSta);
en_result_t TIMERA_SetCountTriggerSrc(en_event_src_t enTriggerSrc);
en_result_t TIMERA_SetCaptureTriggerSrc(en_event_src_t enTriggerSrc);
en_result_t TIMERA_CountComTriggerCmd(en_timera_com_trigger_t enComTrigger, en_functional_state_t enNewSta);
en_result_t TIMERA_CaptureComTriggerCmd(en_timera_com_trigger_t enComTrigger, en_functional_state_t enNewSta);

//@} // TimeraGroup

#ifdef __cplusplus
}
#endif

#endif /* __HC32F460_TIMERA_H__ */

/*******************************************************************************
 * EOF (not truncated)
 ******************************************************************************/