1 /******************************************************************************
2 * @brief Periodic Interrupt ETMer (PIT) driver head file.
3 *
4 ******************************************************************************/
5 #ifndef PIT_H_
6 #define PIT_H_
7 #include"common.h"
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 /******************************************************************************
12 * Includes
13 ******************************************************************************/
14
15 /******************************************************************************
16 * Constants
17 ******************************************************************************/
18
19 /******************************************************************************
20 * PIT channel number list
21 *
22 *//*! @addtogroup pit_channelnumber
23 * @{
24 *******************************************************************************/
25 enum
26 {
27 PIT_CHANNEL0 = 0, /*!< PIT channel 0 */
28 PIT_CHANNEL1 /*!< PIT channel 1 */
29 };
30
31 /*! @} End of pit_channelnumber */
32
33 /******************************************************************************
34 * Macros
35 ******************************************************************************/
36
37 /******************************************************************************
38 * Types
39 ******************************************************************************/
40
41 /*
42 * Callback type
43 */
44
45 /******************************************************************************
46 * PIT callback function declaration
47 *
48 *//*! @addtogroup pit_callback
49 * @{
50 *******************************************************************************/
51 typedef void (*PIT_CallbackType)(void); /*!< PIT callback type */
52
53 /*! @} End of pit_callback */
54
55 /* PIT configuration structure
56 */
57 /*!
58 * @brief PIT configuration type.
59 *
60 */
61 typedef struct
62 {
63 uint8_t bFreeze : 1; /*!< 1: stop in debug mode, 0: run in debug mode */
64 uint8_t bModuleDis : 1; /*!< 1: PIT module is disable, 0: PIT module is enable */
65 uint8_t bReserved0 : 1; /*!< reserved bit */
66 uint8_t bReserved1 : 5; /*!< reserved bit */
67 uint8_t bETMerEn : 1; /*!< 1: channel ETMer is enable, 0: channel ETMer is disable */
68 uint8_t bInterruptEn : 1; /*!< 1: channel ETMer interrupt is enable, 0: channel ETMer interrupt is disable */
69 uint8_t bChainMode : 1; /*!< 1: chain mode is enable, 0: chain mode is disable */
70 uint8_t bReserved2 : 5; /*!< reserved bit */
71 uint8_t bFlag : 1; /*!< 1: flag is set,and write 1 to clear flag, 0: no flag is set */
72 uint8_t bReserved3 : 7; /*!< reserved bit */
73 uint32_t u32LoadValue ; /*!< 32-bit channel load value */
74 } PIT_ConfigType, *PIT_ConfigPtr;
75
76
77 /******************************************************************************
78 * Global variables
79 ******************************************************************************/
80
81
82 /*!
83 * inline functions
84 */
85
86 /******************************************************************************
87 * PIT API list
88 *
89 *//*! @addtogroup pit_api_list
90 * @{
91 *******************************************************************************/
92
93 /*****************************************************************************//*!
94 *
95 * @brief enable pit module.
96 *
97 * @param none
98 *
99 * @return none
100 *
101 * @ Pass/ Fail criteria: none
102 *****************************************************************************/
PIT_Enable(void)103 __STATIC_INLINE void PIT_Enable(void)
104 {
105
106 PIT->MCR &= ~PIT_MCR_MDIS_MASK;
107
108 }
109
110
111 /*****************************************************************************//*!
112 *
113 * @brief disable pit module.
114 *
115 * @param none
116 *
117 * @return none
118 *
119 * @ Pass/ Fail criteria: none
120 *****************************************************************************/
PIT_Disable(void)121 __STATIC_INLINE void PIT_Disable(void)
122 {
123
124 PIT->MCR |= PIT_MCR_MDIS_MASK;
125 }
126
127
128 /*****************************************************************************//*!
129 *
130 * @brief pit ETMers are stopped in debug mode.
131 *
132 * @param none
133 *
134 * @return none
135 *
136 * @ Pass/ Fail criteria: none
137 *****************************************************************************/
PIT_SetDebugFreeze(void)138 __STATIC_INLINE void PIT_SetDebugFreeze(void)
139 {
140
141 PIT->MCR |= PIT_MCR_FRZ_MASK;
142 }
143
144
145 /*****************************************************************************//*!
146 *
147 * @brief pit ETMers are running in debug mode.
148 *
149 * @param none
150 *
151 * @return none
152 *
153 * @ Pass/ Fail criteria: none
154 *****************************************************************************/
PIT_SetDebugOn(void)155 __STATIC_INLINE void PIT_SetDebugOn(void)
156 {
157
158 PIT->MCR &= ~PIT_MCR_FRZ_MASK;
159 }
160
161
162 /*****************************************************************************//*!
163 *
164 * @brief enable pit channel ETMer.
165 *
166 * @param[in] u8Channel.
167 *
168 * @return none
169 *
170 * @ Pass/ Fail criteria: none
171 *****************************************************************************/
PIT_ChannelEnable(uint8_t u8Channel)172 __STATIC_INLINE void PIT_ChannelEnable(uint8_t u8Channel)
173
174 {
175
176 PIT->CHANNEL[u8Channel].TCTRL |= PIT_TCTRL_TEN_MASK;
177 }
178
179
180 /*****************************************************************************//*!
181 *
182 * @brief disable pit channel ETMer.
183 *
184 * @param[in] u8Channel.
185 *
186 * @return none
187 *
188 * @ Pass/ Fail criteria: none
189 *****************************************************************************/
PIT_ChannelDisable(uint8_t u8Channel)190 __STATIC_INLINE void PIT_ChannelDisable(uint8_t u8Channel)
191 {
192
193 PIT->CHANNEL[u8Channel].TCTRL &= ~PIT_TCTRL_TEN_MASK;
194 }
195
196
197 /*****************************************************************************//*!
198 *
199 * @brief enable pit channel ETMer interrupt.
200 *
201 * @param[in] u8Channel.
202 *
203 * @return none
204 *
205 * @ Pass/ Fail criteria: none
206 *****************************************************************************/
PIT_ChannelEnableInt(uint8_t u8Channel)207 __STATIC_INLINE void PIT_ChannelEnableInt(uint8_t u8Channel)
208
209 {
210
211 PIT->CHANNEL[u8Channel].TCTRL |= PIT_TCTRL_TIE_MASK;
212 }
213
214
215 /*****************************************************************************//*!
216 *
217 * @brief disable pit channel ETMer interrupt .
218 *
219 * @param[in] u8Channel.
220 *
221 * @return none
222 *
223 * @ Pass/ Fail criteria: none
224 *****************************************************************************/
PIT_ChannelDisableInt(uint8_t u8Channel)225 __STATIC_INLINE void PIT_ChannelDisableInt(uint8_t u8Channel)
226
227 {
228
229 PIT->CHANNEL[u8Channel].TCTRL &= ~PIT_TCTRL_TIE_MASK;
230 }
231
232
233 /*****************************************************************************//*!
234 *
235 * @brief enable pit channel ETMer chain mode.
236 *
237 * @param[in] u8Channel.
238 *
239 * @return none
240 *
241 * @ Pass/ Fail criteria: none
242 *****************************************************************************/
PIT_ChannelEnableChain(uint8_t u8Channel)243 __STATIC_INLINE void PIT_ChannelEnableChain(uint8_t u8Channel)
244 {
245 PIT->CHANNEL[u8Channel].TCTRL |= PIT_TCTRL_CHN_MASK;
246 }
247
248
249 /*****************************************************************************//*!
250 *
251 * @brief disable pit channel ETMer chain mode.
252 *
253 * @param[in] u8Channel.
254 *
255 * @return none
256 *
257 * @ Pass/ Fail criteria: none
258 *****************************************************************************/
PIT_ChannelDisableChain(uint8_t u8Channel)259 __STATIC_INLINE void PIT_ChannelDisableChain(uint8_t u8Channel)
260
261 {
262 PIT->CHANNEL[u8Channel].TCTRL &= ~PIT_TCTRL_CHN_MASK;
263 }
264
265
266 /*****************************************************************************//*!
267 *
268 * @brief get pit channel ETMer interrrupt flag.
269 *
270 * @param[in] u8Channel.
271 *
272 * @return bflag.
273 *
274 * @ Pass/ Fail criteria: none
275
276 *****************************************************************************/
PIT_ChannelGetFlags(uint8_t u8Channel)277 __STATIC_INLINE uint8_t PIT_ChannelGetFlags(uint8_t u8Channel)
278
279 {
280 uint8_t bflag;
281
282 bflag = (PIT->CHANNEL[u8Channel].TFLG & PIT_TFLG_TIF_MASK);
283
284 return bflag;
285
286 }
287
288
289 /*****************************************************************************//*!
290 *
291 * @brief clear pit channel ETMer interrrupt flag.
292 *
293 * @param[in] u8Channel
294 *
295 * @return none
296 *
297 * @ Pass/ Fail criteria: none
298 *****************************************************************************/
PIT_ChannelClrFlags(uint8_t u8Channel)299 __STATIC_INLINE void PIT_ChannelClrFlags(uint8_t u8Channel)
300 {
301 PIT->CHANNEL[u8Channel].TFLG |= PIT_TFLG_TIF_MASK;
302 }
303
304
305 /******************************************************************************
306 * Global functions
307 ******************************************************************************/
308 void PIT_Init(uint8_t u8Channel_No, PIT_ConfigType *pConfig);
309 void PIT_SetLoadVal(uint8_t u8Channel, uint32_t u32loadvalue);
310 void PIT_SetCallback(uint8_t u8Channel_No, PIT_CallbackType pfnCallback);
311 void PIT_DeInit(void);
312 /*! @} End of pit_api_list */
313
314 #ifdef __cplusplus
315 }
316 #endif
317 #endif /* PIT_H_ */
318