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