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