1 /*
2   ******************************************************************************
3   * @file    HAL_OPA.h
4   * @version V1.0.0
5   * @date    2020
6   * @brief   Header file of OPA HAL module.
7   ******************************************************************************
8 */
9 #ifndef __HAL_OPA_H__
10 #define __HAL_OPA_H__
11 
12 #include "ACM32Fxx_HAL.h"
13 
14 /****************  Bit definition for OPA_CR1 and OPA_CR2 register  **************************/
15 #define OPA_CSR_LOCK                           (BIT31)
16 #define OPA_CSR_HSM                            (BIT28)
17 #define OPA_CSR_GAIN_SEL_POS                   (23U)
18 #define OPA_CSR_GAIN_SEL_MASK                  (BIT27|BIT26|BIT25|BIT24|BIT23)
19 #define OPA_CSR_POL_SEL_POS                    (21U)
20 #define OPA_CSR_POL_SEL_MASK                   (BIT22|BIT21)
21 #define OPA_CSR_VINM0_SEL_POS                  (BIT20)
22 #define OPA_CSR_MODE_SEL_POS                   (18U)
23 #define OPA_CSR_MODE_SEL_MASK                  (BIT19|BIT18)
24 #define OPA_CSR_VINP_SEL_POS                   (16U)
25 #define OPA_CSR_VINP_SEL_MASK                  (BIT17|BIT16)
26 #define OPA_CSR_OUT_SEL_POS                    (14U)
27 #define OPA_CSR_OUT_SEL_MASK                   (BIT14|BIT15)
28 #define OPA_CSR_TRIM_OSN_POS                   (9U)
29 #define OPA_CSR_TRIM_OSN_MASK                  (BIT13|BIT12|BIT11|BIT10|BIT9)
30 #define OPA_CSR_TRIM_OSP_POS                   (4U)
31 #define OPA_CSR_TRIM_OSP_MASK                  (BIT8|BIT7|BIT6|BIT5|BIT4)
32 #define OPA_CSR_CAL_OUT                        (BIT3)
33 #define OPA_CSR_CAL_NEN                        (BIT2)
34 #define OPA_CSR_CAL_PEN                        (BIT1)
35 #define OPA_CSR_EN                             (BIT0)
36 
37 /** @defgroup OPAx Index
38   * @{
39   */
40 #define OPA1        (0x01)
41 #define OPA2        (0x02)
42 #define OPA3        (0x03)
43 
44 /** @defgroup HSM driver mode
45   * @{
46   */
47 #define OPA_HSM_LOW         (0u)
48 #define OPA_HSM_HIGH        (1u)
49 
50 /** @defgroup OPA Gain select.
51   * @{
52   */
53 #define OPA_GAIN_64_63           (0u)
54 #define OPA_GAIN_32_31           (1u)
55 #define OPA_GAIN_16_15           (2u)
56 #define OPA_GAIN_8_7             (4u)
57 #define OPA_GAIN_4_3             (8u)
58 #define OPA_GAIN_2_1             (16u)
59 
60 /** @defgroup Polarity select.
61   * @{
62   */
63 #define OPA_POL_NONINVERT        (0u)
64 #define OPA_POL_INVERT           (1u)
65 
66 /** @defgroup OPA work mode select.
67   * @{
68   */
69 #define OPA_MODE_SA              (0u)
70 #define OPA_MODE_UG              (1u)
71 #define OPA_MODE_PGA             (2u)
72 #define OPA_MODE_SA1             (3u)
73 
74 /** @defgroup OPA VINP vin p select.
75   * @{
76   */
77 #define OPA_VINP_0           (0u)
78 #define OPA_VINP_1           (1u)
79 #define OPA_VINP_2           (2u)
80 #define OPA_VINP_3             (3u)
81 
82 /** @defgroup OPA output select.
83   * @{
84   */
85 #define OPA_OUT_GPIO             (0u)
86 #define OPA_OUT_INTERNAL         (1u)
87 
88 /** @defgroup OPA VINM0 enable.
89   * @{
90   */
91 #define OPA_CSR_VINM0_DISABLE           (0U)
92 #define OPA_CSR_VINM0_ENABLE            (1U)
93 
94 /** @defgroup OPA trim enable.
95   * @{
96   */
97 #define OPA_CSR_TRIM_DISABLE           (0U)
98 #define OPA_CSR_TRIM_ENABLE            (1U)
99 
100 /**
101   * @brief  OPA Configuration Structure definition
102   */
103 typedef struct
104 {
105     uint8_t             OpaX;       /*!< Specify witch opa be selected */
106     uint8_t             Hsm;        /*!< Specify the opa HSM driver mode:OPA_HSM_LOW or OPA_HSM_HIGH */
107     uint8_t             Gain;       /*!< Specify the opa gain select */
108     uint8_t             PolSel;     /*!< Specify the opa Polarity select */
109     uint8_t             VinM0En;    /*!< Specify the opa VinM0 enable */
110     uint8_t             OpaMode;    /*!< Specify the opa work mode select */
111     uint8_t             VinPSel;    /*!< Specify the opa VINP vin p select */
112     uint8_t             OutSel;     /*!< Specify the opa output select */
113     uint8_t             TrimEn;     /*!< Specify if the opa auto trim */
114 }OPA_InitTypeDef;
115 
116 /**
117   * @brief  OPA handle Structure definition
118   */
119 typedef struct
120 {
121   OPA_TypeDef       *Instance;       /*!< Register base address    */
122   OPA_InitTypeDef   Init;            /*!< OPA required parameters */
123 } OPA_HandleTypeDef;
124 
125 /******************************** OPA Instances *******************************/
126 #define IS_OPA_ALL_INSTANCE(INSTANCE)      (((INSTANCE) == OPA))
127 
128 /******************************** OPA OPAX definition*******************************/
129 #define IS_OPA_ALL_OPAX(_OPAX)         (((_OPAX) == OPA1) || \
130                                         ((_OPAX) == OPA2) || \
131                                         ((_OPAX) == OPA3))
132 
133 /******************************** OPA HSM definition*******************************/
134 #define IS_OPA_ALL_HSM(_HSM)           (((_HSM) == OPA_HSM_LOW) || \
135                                         ((_HSM) == OPA_HSM_HIGH))
136 
137 /******************************** OPA GAIN definition*******************************/
138 #define IS_OPA_ALL_GAIN(_GAIN)         (((_GAIN) == OPA_GAIN_64_63) || \
139                                         ((_GAIN) == OPA_GAIN_32_31) || \
140                                         ((_GAIN) == OPA_GAIN_16_15) || \
141                                         ((_GAIN) == OPA_GAIN_8_7) || \
142                                         ((_GAIN) == OPA_GAIN_4_3) || \
143                                         ((_GAIN) == OPA_GAIN_2_1))
144 
145 /******************************** OPA Polarity definition*******************************/
146 #define IS_OPA_ALL_POL(_POL)           (((_POL) == OPA_POL_NONINVERT) || \
147                                         ((_POL) == OPA_POL_INVERT))
148 
149 /******************************** OPA work mode definition*******************************/
150 #define IS_OPA_ALL_MODE(_MODE)         (((_MODE) == OPA_MODE_SA) || \
151                                         ((_MODE) == OPA_MODE_UG) || \
152                                         ((_MODE) == OPA_MODE_PGA) || \
153                                         ((_MODE) == OPA_MODE_SA1))
154 
155 /******************************** OPA VINP select definition*******************************/
156 #define IS_OPA_ALL_VINP(_VINP)         (((_VINP) == OPA_VINP_0) || \
157                                         ((_VINP) == OPA_VINP_1) || \
158                                         ((_VINP) == OPA_VINP_2) || \
159                                         ((_VINP) == OPA_VINP_3))
160 
161 /******************************** OPA OUT select definition*******************************/
162 #define IS_OPA_ALL_OUT(_OUT)           (((_OUT) == OPA_OUT_GPIO) || \
163                                         ((_OUT) == OPA_OUT_INTERNAL))
164 
165 /******************************** OPA VINM0 enable definition*******************************/
166 #define IS_OPA_ALL_VINM0(_VINM0)       (((_VINM0) == OPA_CSR_VINM0_DISABLE) || \
167                                         ((_VINM0) == OPA_CSR_VINM0_ENABLE))
168 
169 /******************************** OPA trim enable definition*******************************/
170 #define IS_OPA_ALL_TRIM(_TRIM)         (((_TRIM) == OPA_CSR_TRIM_DISABLE) || \
171                                         ((_TRIM) == OPA_CSR_TRIM_ENABLE))
172 
173 /* Function : HAL_OPA */
174 void HAL_OPA_MspInit(OPA_HandleTypeDef* hopa);
175 void HAL_OPA_MspDeInit(OPA_HandleTypeDef* hopa);
176 HAL_StatusTypeDef HAL_OPA_Init(OPA_HandleTypeDef* hopa);
177 HAL_StatusTypeDef HAL_OPA_DeInit(OPA_HandleTypeDef* hopa);
178 HAL_StatusTypeDef HAL_OPA_Enable(OPA_HandleTypeDef* hopa);
179 HAL_StatusTypeDef HAL_OPA_Disable(OPA_HandleTypeDef* hopa);
180 HAL_StatusTypeDef HAL_OPA_Lock(OPA_HandleTypeDef* hopa);
181 
182 #endif
183 
184 
185 
186 
187 
188