aboutsummaryrefslogtreecommitdiffstats
path: root/lib/hc32f460/driver/inc/hc32f460_emb.h
blob: 773377b206b95a13d26ab1d66dcdb398e5bf2ef9 (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
/*******************************************************************************
 * 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_emb.h
 **
 ** A detailed description is available at
 ** @link EMBGroup EMB description @endlink
 **
 **   - 2018-11-24  CDT  First version for Device Driver Library of EMB.
 **
 ******************************************************************************/
#ifndef __HC32F460_EMB_H__
#define __HC32F460_EMB_H__

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

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

/**
 *******************************************************************************
 ** \defgroup EMBGroup Emergency Brake(EMB)
 **
 ******************************************************************************/
//@{

/*******************************************************************************
 * Global type definitions ('typedef')
 ******************************************************************************/

/**
 *******************************************************************************
 ** \brief EMB status enumeration
 ******************************************************************************/
typedef enum en_emb_status
{
    EMBFlagPortIn  = 0u,      ///< EMB port in brake flag
    EMBFlagPWMSame = 1u,      ///< EMB PWM same brake flag
    EMBFlagCmp     = 2u,      ///< EMB CMP brake flag
    EMBFlagOSCFail  = 3u,     ///< EMB oscillator fail brake flag
    EMBPortInState = 4u,      ///< EMB port in state
    EMBPWMState    = 5u,      ///< EMB PWM same state
} en_emb_status_t;

/**
 *******************************************************************************
 ** \brief EMB status clear(recover) enumeration
 ******************************************************************************/
typedef enum en_emb_status_clr
{
    EMBPortInFlagClr  = 0u,   ///< EMB port in brake flag clear
    EMBPWMSameFlagCLr = 1u,   ///< EMB PWM same brake flag clear
    EMBCmpFlagClr     = 2u,   ///< EMB CMP brake flag clear
    EMBOSCFailFlagCLr  = 3u,  ///< EMB oscillator fail brake flag clear
} en_emb_status_clr_t;

/**
 *******************************************************************************
 ** \brief EMB irq enumeration
 ******************************************************************************/
typedef enum en_emb_irq_type
{
    PORTBrkIrq   = 0u,        ///< EMB port brake interrupt
    PWMSmBrkIrq  = 1u,        ///< EMB PWM same brake interrupt
    CMPBrkIrq    = 2u,        ///< EMB CMP brake interrupt
    OSCFailBrkIrq = 3u,        ///< EMB oscillator fail brake interrupt
} en_emb_irq_type_t;

/**
 *******************************************************************************
 ** \brief EMB port in filter enumeration
 ******************************************************************************/
typedef enum en_emb_port_filter
{
    EMBPortFltDiv0    = 0u,   ///< EMB port in filter with PCLK clock
    EMBPortFltDiv8    = 1u,   ///< EMB port in filter with PCLK/8 clock
    EMBPortFltDiv32   = 2u,   ///< EMB port in filter with PCLK/32 clock
    EMBPortFltDiv128  = 3u,   ///< EMB port in filter with PCLK/128 clock
} en_emb_port_filter_t;

/**
 *******************************************************************************
 ** \brief EMB CR0 for timer6 config
 ** \note
 ******************************************************************************/
typedef struct stc_emb_ctrl_timer6
{
    bool                  bEnPortBrake;             ///< Enable port brake
    bool                  bEnCmp1Brake;             ///< Enable CMP1 brake
    bool                  bEnCmp2Brake;             ///< Enable CMP2 brake
    bool                  bEnCmp3Brake;             ///< Enable CMP3 brake
    bool                  bEnOSCFailBrake;          ///< Enable OSC fail brake
    bool                  bEnTimer61PWMSBrake;      ///< Enable tiemr61 PWM same brake
    bool                  bEnTimer62PWMSBrake;      ///< Enable tiemr62 PWM same brake
    bool                  bEnTimer63PWMSBrake;      ///< Enable tiemr63 PWM same brake
    en_emb_port_filter_t  enPortInFltClkSel;        ///< Port in filter clock selection
    bool                  bEnPorInFlt;              ///< Enable port in filter
    bool                  bEnPortInLevelSel_Low;    ///< Poit input active level 1: LowLevel 0:HighLevel
}stc_emb_ctrl_timer6_t;

/**
 *******************************************************************************
 ** \brief EMB CR1~3 for timer4x config
 ** \note
 ******************************************************************************/
typedef struct stc_emb_ctrl_timer4
{
    bool                  bEnPortBrake;             ///< Enable port brake
    bool                  bEnCmp1Brake;             ///< Enable CMP1 brake
    bool                  bEnCmp2Brake;             ///< Enable CMP2 brake
    bool                  bEnCmp3Brake;             ///< Enable CMP3 brake
    bool                  bEnOSCFailBrake;          ///< Enable OS fail brake
    bool                  bEnTimer4xWHLSammeBrake;  ///< Enable tiemr4x PWM WH WL same brake
    bool                  bEnTimer4xVHLSammeBrake;  ///< Enable tiemr4x PWM VH VL same brake
    bool                  bEnTimer4xUHLSammeBrake;  ///< Enable tiemr4x PWM UH UL same brake
    en_emb_port_filter_t  enPortInFltClkSel;        ///< Port in filter clock selection
    bool                  bEnPorInFlt;              ///< Enable port in filter
    bool                  bEnPortInLevelSel_Low;    ///< Poit input active level 1: LowLevel 0:HighLevel
}stc_emb_ctrl_timer4_t;


/**
 *******************************************************************************
 ** \brief EMB PWM level detect timer6 config
 ** \note
 ******************************************************************************/
typedef struct stc_emb_pwm_level_timer6
{
    bool      bEnTimer61HighLevelDect;             ///< Enable tiemr61 active detected level 1:HighLevel 0:LowLevel
    bool      bEnTimer62HighLevelDect;             ///< Enable tiemr62 active detected level 1:HighLevel 0:LowLevel
    bool      bEnTimer63HighLevelDect;             ///< Enable tiemr63 active detected level 1:HighLevel 0:LowLevel
}stc_emb_pwm_level_timer6_t;

/**
 *******************************************************************************
 ** \brief EMB PWM level detect timer4x config
 ** \note
 ******************************************************************************/
typedef struct stc_emb_pwm_level_timer4
{
    bool      bEnUHLPhaseHighLevelDect;            ///< Enable tiemr4x UH UL active detected level 1:HighLevel 0:LowLevel
    bool      bEnVHLPhaseHighLevelDect;            ///< Enable tiemr4x VH VL active detected level 1:HighLevel 0:LowLevel
    bool      bEnWHLphaseHighLevelDect;            ///< Enable tiemr4x WH WL active detected level 1:HighLevel 0:LowLevel
}stc_emb_pwm_level_timer4_t;

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

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

/*******************************************************************************
  Global function prototypes (definition in C source)
 ******************************************************************************/
/* IRQ config */
en_result_t EMB_ConfigIrq(M4_EMB_TypeDef *EMBx,
                                en_emb_irq_type_t enEMBIrq,
                                bool bEn);
/* Get status(flag) */
bool EMB_GetStatus(M4_EMB_TypeDef *EMBx, en_emb_status_t enStatus);
/*  Status(flag) clear (recover) */
en_result_t EMB_ClrStatus(M4_EMB_TypeDef *EMBx,
                                en_emb_status_clr_t enStatusClr);
/*  Control Register(CTL) config for timer6 */
en_result_t EMB_Config_CR_Timer6(const stc_emb_ctrl_timer6_t* pstcEMBConfigCR);
/*  Control Register(CTL) config for timer4 */
en_result_t EMB_Config_CR_Timer4(M4_EMB_TypeDef *EMBx,
                                const stc_emb_ctrl_timer4_t* pstcEMBConfigCR);
/*  PWM level detect (short detection) selection config for timer6 */
en_result_t EMB_PWMLv_Timer6(const stc_emb_pwm_level_timer6_t* pstcEMBPWMlv);
/*  PWM level detect (short detection) selection config for timer4 */
en_result_t EMB_PWMLv_Timer4(M4_EMB_TypeDef *EMBx,
                                const stc_emb_pwm_level_timer4_t* pstcEMBPWMlv);
/*  Software brake */
en_result_t EMB_SwBrake(M4_EMB_TypeDef *EMBx, bool bEn);

//@} // EMBGroup

#ifdef __cplusplus
}
#endif

#endif /* __HC32F460_EMB_H__ */

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