1 /******************************************************************************
2 * @brief Periodic Interrupt ETMer (PIT) source code.
3 *
4 ******************************************************************************/
5 #include "common.h"
6 #include "pit.h"
7
8 /******************************************************************************
9 * Global variables
10 ******************************************************************************/
11
12 /******************************************************************************
13 * Constants and macros
14 ******************************************************************************/
15
16 /******************************************************************************
17 * Local types
18 ******************************************************************************/
19
20 /******************************************************************************
21 * Local function prototypes
22 ******************************************************************************/
23
24 /******************************************************************************
25 * Local variables
26 ******************************************************************************/
27 /*!
28 * @brief global variable to store PIT callbacks.
29 *
30 */
31 PIT_CallbackType PIT_Callback[2] = {(PIT_CallbackType)NULL}; /*!< PIT initial callback */
32
33 /******************************************************************************
34 * Local functions
35 ******************************************************************************/
36 void PIT_Ch0Isr(void);
37 void PIT_Ch1Isr(void);
38
39
40 /******************************************************************************
41 * Global functions
42 ******************************************************************************/
43
44 /******************************************************************************
45 * define PIT APIs
46 *
47 *//*! @addtogroup pit_api_list
48 * @{
49 *******************************************************************************/
50
51 /*****************************************************************************//*!
52 *
53 * @brief initialize pit module.
54 *
55 * @param[in] u8Channel_No channel number
56 * @param[in] pConfig point to configuration
57 *
58 * @return none
59 *
60 * @ Pass/ Fail criteria: none
61 *****************************************************************************/
PIT_Init(uint8_t u8Channel_No,PIT_ConfigType * pConfig)62 void PIT_Init(uint8_t u8Channel_No, PIT_ConfigType *pConfig)
63 {
64 SIM->SCGC |= SIM_SCGC_PIT_MASK; /*!< enable clock to PIT */
65
66 if (pConfig->bFreeze)
67 {
68 PIT_SetDebugFreeze();
69 }
70
71 if (pConfig->bModuleDis == 0)
72 {
73 PIT_Enable(); /*!< enable pit module */
74 }
75
76 PIT_SetLoadVal(u8Channel_No, pConfig->u32LoadValue);
77
78 if (pConfig->bInterruptEn)
79 {
80 if (u8Channel_No)
81 {
82 NVIC_EnableIRQ(PIT_CH1_IRQn);
83 }
84 else
85 {
86 NVIC_EnableIRQ(PIT_CH0_IRQn);
87 }
88 PIT_ChannelEnableInt(u8Channel_No);
89 }
90 else
91 {
92 NVIC_DisableIRQ(PIT_CH0_IRQn);
93 }
94
95 if (pConfig->bChainMode)
96 {
97 PIT_ChannelEnableChain(u8Channel_No);
98 }
99
100 if (pConfig->bETMerEn)
101 {
102 PIT_ChannelEnable(u8Channel_No);
103 }
104
105 }
106
107
108 /*****************************************************************************//*!
109 *
110 * @brief initialize pit module.
111 *
112 * @param[in] u8Channel_No channel number
113 * @param[in] u32loadvalue load value for pit register
114 *
115 * @return none
116 *
117 * @ Pass/ Fail criteria: none
118 *****************************************************************************/
PIT_SetLoadVal(uint8_t u8Channel,uint32_t u32loadvalue)119 void PIT_SetLoadVal(uint8_t u8Channel, uint32_t u32loadvalue)
120
121 {
122 PIT->CHANNEL[u8Channel].LDVAL = u32loadvalue;
123 }
124
125
126 /*****************************************************************************//*!
127 *
128 * @brief pit module set call back.
129 *
130 * @param[in] u8Channel_No channel number.
131 * @param[in] pfnCallback point to call back.
132 *
133 * @return none
134 *
135 * @ Pass/ Fail criteria: none
136 *****************************************************************************/
PIT_SetCallback(uint8_t u8Channel_No,PIT_CallbackType pfnCallback)137 void PIT_SetCallback(uint8_t u8Channel_No, PIT_CallbackType pfnCallback)
138 {
139 PIT_Callback[u8Channel_No] = pfnCallback;
140 }
141
142
143 /*****************************************************************************//*!
144 *
145 * @brief pit module de-initialize, reset pit register
146 *
147 * @param none
148 *
149 * @return none
150 *
151 * @ Pass/ Fail criteria: none
152 *****************************************************************************/
PIT_DeInit(void)153 void PIT_DeInit(void)
154 {
155 NVIC_DisableIRQ(PIT_CH0_IRQn);
156 NVIC_DisableIRQ(PIT_CH1_IRQn);
157 PIT_SetLoadVal(0,0);
158 PIT_SetLoadVal(1,0);
159 PIT_ChannelDisable(0);
160 PIT_ChannelDisable(1);
161 PIT_ChannelDisableInt(0);
162 PIT_ChannelDisableInt(1);
163 PIT_ChannelDisableChain(0);
164 PIT_ChannelDisableChain(1);
165 PIT_ChannelClrFlags(0);
166 PIT_ChannelClrFlags(1);
167 PIT_SetDebugOn();
168 PIT_Disable();
169 SIM->SCGC &= ~SIM_SCGC_PIT_MASK;
170 }
171 /*! @} End of pit_api_list */
172
173
174 /*****************************************************************************//*!
175 *
176 * @brief pit module channel 0 isr.
177 *
178 * @param none
179 *
180 * @return none
181 *
182 * @ Pass/ Fail criteria: none
183 *****************************************************************************/
PIT_Ch0Isr(void)184 void PIT_Ch0Isr(void)
185 {
186 PIT_ChannelClrFlags(0);
187
188 if (PIT_Callback[0])
189 {
190 PIT_Callback[0]();
191 }
192 }
193
194 /*****************************************************************************//*!
195 *
196 * @brief pit module channel 1 isr.
197 *
198 * @param none
199 *
200 * @return none
201 *
202 * @ Pass/ Fail criteria: none
203 *****************************************************************************/
PIT_Ch1Isr(void)204 void PIT_Ch1Isr(void)
205 {
206 PIT_ChannelClrFlags(1);
207 if (PIT_Callback[1])
208 {
209 PIT_Callback[1]();
210 }
211 }
212
213
214