1 /*
2 * Copyright 2020-2023 NXP
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7 /**
8 * @file
9 *
10 * @addtogroup osif_drv
11 * @{
12 */
13
14 #ifdef __cplusplus
15 extern "C"{
16 #endif
17
18 /*==================================================================================================
19 * INCLUDE FILES
20 * 1) system and project includes
21 * 2) needed interfaces from external units
22 * 3) internal and external interfaces from this unit
23 ==================================================================================================*/
24 #include "OsIf.h"
25 #include "OsIf_Cfg.h"
26 #include "OsIf_Cfg_TypesDef.h"
27
28 #if (OSIF_USE_SYSTEM_TIMER == STD_ON)
29 /* Defines the Hw Timer functions to be implemented in OS-specific environments */
30 #include "OsIf_Timer_System.h"
31 #endif /* (OSIF_USE_SYSTEM_TIMER == STD_ON) */
32
33 #if (OSIF_USE_CUSTOM_TIMER == STD_ON)
34 /* API functions to be implemented by user */
35 #include "OsIf_Timer_Custom.h"
36 #endif /* (OSIF_USE_CUSTOM_TIMER == STD_ON) */
37
38 /*==================================================================================================
39 * SOURCE FILE VERSION INFORMATION
40 ==================================================================================================*/
41 #define OSIF_TIMER_VENDOR_ID_C 43
42 #define OSIF_TIMER_AR_RELEASE_MAJOR_VERSION_C 4
43 #define OSIF_TIMER_AR_RELEASE_MINOR_VERSION_C 7
44 #define OSIF_TIMER_AR_RELEASE_REVISION_VERSION_C 0
45 #define OSIF_TIMER_SW_MAJOR_VERSION_C 2
46 #define OSIF_TIMER_SW_MINOR_VERSION_C 0
47 #define OSIF_TIMER_SW_PATCH_VERSION_C 0
48
49 /*==================================================================================================
50 * FILE VERSION CHECKS
51 ==================================================================================================*/
52 /* Check if OsIf_Timer.c file and OsIf.h file are of the same vendor */
53 #if (OSIF_TIMER_VENDOR_ID_C != OSIF_VENDOR_ID)
54 #error "OsIf_Timer.c and OsIf.h have different vendor ids"
55 #endif
56 /* Check if OsIf_Timer.c file and OsIf.h file are of the same Autosar version */
57 #if ((OSIF_TIMER_AR_RELEASE_MAJOR_VERSION_C != OSIF_AR_RELEASE_MAJOR_VERSION) || \
58 (OSIF_TIMER_AR_RELEASE_MINOR_VERSION_C != OSIF_AR_RELEASE_MINOR_VERSION) || \
59 (OSIF_TIMER_AR_RELEASE_REVISION_VERSION_C != OSIF_AR_RELEASE_REVISION_VERSION))
60 #error "AUTOSAR Version Numbers of OsIf_Timer.c and OsIf.h are different"
61 #endif
62 /* Check if OsIf_Timer.c file and OsIf.h file are of the same Software version */
63 #if ((OSIF_TIMER_SW_MAJOR_VERSION_C != OSIF_SW_MAJOR_VERSION) || \
64 (OSIF_TIMER_SW_MINOR_VERSION_C != OSIF_SW_MINOR_VERSION) || \
65 (OSIF_TIMER_SW_PATCH_VERSION_C != OSIF_SW_PATCH_VERSION) \
66 )
67 #error "Software Version Numbers of OsIf_Timer.c and OsIf.h are different"
68 #endif
69
70 /* Check if OsIf_Timer.c file and OsIf_Cfg.h file are of the same vendor */
71 #if (OSIF_TIMER_VENDOR_ID_C != OSIF_CFG_VENDOR_ID)
72 #error "OsIf_Timer.c and OsIf_Cfg.h have different vendor ids"
73 #endif
74 /* Check if OsIf_Timer.c file and OsIf_Cfg.h file are of the same Autosar version */
75 #if ((OSIF_TIMER_AR_RELEASE_MAJOR_VERSION_C != OSIF_CFG_AR_RELEASE_MAJOR_VERSION) || \
76 (OSIF_TIMER_AR_RELEASE_MINOR_VERSION_C != OSIF_CFG_AR_RELEASE_MINOR_VERSION) || \
77 (OSIF_TIMER_AR_RELEASE_REVISION_VERSION_C != OSIF_CFG_AR_RELEASE_REVISION_VERSION))
78 #error "AUTOSAR Version Numbers of OsIf_Timer.c and OsIf_Cfg.h are different"
79 #endif
80 /* Check if OsIf_Timer.c file and OsIf_Cfg.h file are of the same Software version */
81 #if ((OSIF_TIMER_SW_MAJOR_VERSION_C != OSIF_CFG_SW_MAJOR_VERSION) || \
82 (OSIF_TIMER_SW_MINOR_VERSION_C != OSIF_CFG_SW_MINOR_VERSION) || \
83 (OSIF_TIMER_SW_PATCH_VERSION_C != OSIF_CFG_SW_PATCH_VERSION) \
84 )
85 #error "Software Version Numbers of OsIf_Timer.c and OsIf_Cfg.h are different"
86 #endif
87
88 /* Check if OsIf_Timer.c file and OsIf_Cfg_TypesDef.h file are of the same vendor */
89 #if (OSIF_TIMER_VENDOR_ID_C != OSIF_CFG_TYPESDEF_VENDOR_ID)
90 #error "OsIf_Timer.c and OsIf_Cfg_TypesDef.h have different vendor ids"
91 #endif
92 /* Check if OsIf_Timer.c file and OsIf_Cfg_TypesDef.h file are of the same Autosar version */
93 #if ((OSIF_TIMER_AR_RELEASE_MAJOR_VERSION_C != OSIF_CFG_TYPESDEF_AR_RELEASE_MAJOR_VERSION) || \
94 (OSIF_TIMER_AR_RELEASE_MINOR_VERSION_C != OSIF_CFG_TYPESDEF_AR_RELEASE_MINOR_VERSION) || \
95 (OSIF_TIMER_AR_RELEASE_REVISION_VERSION_C != OSIF_CFG_TYPESDEF_AR_RELEASE_REVISION_VERSION))
96 #error "AUTOSAR Version Numbers of OsIf_Timer_System.c and OsIf_Cfg_TypesDef.h are different"
97 #endif
98 /* Check if OsIf_Timer.c file and OsIf_Cfg_TypesDef.h file are of the same Software version */
99 #if ((OSIF_TIMER_SW_MAJOR_VERSION_C != OSIF_CFG_TYPESDEF_SW_MAJOR_VERSION) || \
100 (OSIF_TIMER_SW_MINOR_VERSION_C != OSIF_CFG_TYPESDEF_SW_MINOR_VERSION) || \
101 (OSIF_TIMER_SW_PATCH_VERSION_C != OSIF_CFG_TYPESDEF_SW_PATCH_VERSION) \
102 )
103 #error "Software Version Numbers of OsIf_Timer.c and OsIf_Cfg_TypesDef.h are different"
104 #endif
105
106 #if (OSIF_USE_SYSTEM_TIMER == STD_ON)
107 /* Check if OsIf_Timer.c file and OsIf_Timer_System.h file are of the same vendor */
108 #if (OSIF_TIMER_VENDOR_ID_C != OSIF_TIMER_SYSTEM_VENDOR_ID)
109 #error "OsIf_Timer.c and OsIf_Timer_System.h have different vendor ids"
110 #endif
111 /* Check if OsIf_Timer.c file and OsIf_Timer_System.h file are of the same Autosar version */
112 #if ((OSIF_TIMER_AR_RELEASE_MAJOR_VERSION_C != OSIF_TIMER_SYSTEM_AR_RELEASE_MAJOR_VERSION) || \
113 (OSIF_TIMER_AR_RELEASE_MINOR_VERSION_C != OSIF_TIMER_SYSTEM_AR_RELEASE_MINOR_VERSION) || \
114 (OSIF_TIMER_AR_RELEASE_REVISION_VERSION_C != OSIF_TIMER_SYSTEM_AR_RELEASE_REVISION_VERSION))
115 #error "AUTOSAR Version Numbers of OsIf_Timer.c and OsIf_Timer_System.h are different"
116 #endif
117 /* Check if OsIf_Timer.c file and OsIf_Timer_System.h file are of the same Software version */
118 #if ((OSIF_TIMER_SW_MAJOR_VERSION_C != OSIF_TIMER_SYSTEM_SW_MAJOR_VERSION) || \
119 (OSIF_TIMER_SW_MINOR_VERSION_C != OSIF_TIMER_SYSTEM_SW_MINOR_VERSION) || \
120 (OSIF_TIMER_SW_PATCH_VERSION_C != OSIF_TIMER_SYSTEM_SW_PATCH_VERSION) \
121 )
122 #error "Software Version Numbers of OsIf_Timer.c and OsIf_Timer_System.h are different"
123 #endif
124 #endif /* (OSIF_USE_SYSTEM_TIMER == STD_ON) */
125
126 #if (OSIF_USE_CUSTOM_TIMER == STD_ON)
127 /* Check if OsIf_Timer.c file and OsIf_Timer_Custom.h file are of the same vendor */
128 #if (OSIF_TIMER_VENDOR_ID_C != OSIF_TIMER_CUSTOM_VENDOR_ID)
129 #error "OsIf_Timer.c and OsIf_Timer_Custom.h have different vendor ids"
130 #endif
131 /* Check if OsIf_Timer.c file and OsIf_Timer_Custom.h file are of the same Autosar version */
132 #if ((OSIF_TIMER_AR_RELEASE_MAJOR_VERSION_C != OSIF_TIMER_CUSTOM_AR_RELEASE_MAJOR_VERSION) || \
133 (OSIF_TIMER_AR_RELEASE_MINOR_VERSION_C != OSIF_TIMER_CUSTOM_AR_RELEASE_MINOR_VERSION) || \
134 (OSIF_TIMER_AR_RELEASE_REVISION_VERSION_C != OSIF_TIMER_CUSTOM_AR_RELEASE_REVISION_VERSION))
135 #error "AUTOSAR Version Numbers of OsIf_Timer.c and OsIf_Timer_Custom.h are different"
136 #endif
137 /* Check if OsIf_Timer.c file and OsIf_Timer_Custom.h file are of the same Software version */
138 #if ((OSIF_TIMER_SW_MAJOR_VERSION_C != OSIF_TIMER_CUSTOM_SW_MAJOR_VERSION) || \
139 (OSIF_TIMER_SW_MINOR_VERSION_C != OSIF_TIMER_CUSTOM_SW_MINOR_VERSION) || \
140 (OSIF_TIMER_SW_PATCH_VERSION_C != OSIF_TIMER_CUSTOM_SW_PATCH_VERSION) \
141 )
142 #error "Software Version Numbers of OsIf_Timer.c and OsIf_Timer_Custom.h are different"
143 #endif
144 #endif /* (OSIF_USE_CUSTOM_TIMER == STD_ON) */
145
146 /*==================================================================================================
147 * LOCAL TYPEDEFS (STRUCTURES, UNIONS, ENUMS)
148 ==================================================================================================*/
149
150 /*==================================================================================================
151 * LOCAL MACROS
152 ==================================================================================================*/
153
154 /*==================================================================================================
155 * LOCAL CONSTANTS
156 ==================================================================================================*/
157
158 /*==================================================================================================
159 * LOCAL VARIABLES
160 ==================================================================================================*/
161
162 /*==================================================================================================
163 * GLOBAL CONSTANTS
164 ==================================================================================================*/
165
166 /*==================================================================================================
167 * GLOBAL VARIABLES
168 ==================================================================================================*/
169
170 /*==================================================================================================
171 * LOCAL FUNCTION PROTOTYPES
172 ==================================================================================================*/
173 #define BASENXP_START_SEC_CODE
174 #include "BaseNXP_MemMap.h"
175
176 static inline uint32 OsIf_Timer_Dummy_GetCounter(void);
177 static inline uint32 OsIf_Timer_Dummy_GetElapsed(const uint32 * const CurrentRef);
178 static inline void OsIf_Timer_Dummy_SetTimerFrequency(uint32 Freq);
179 static inline uint32 OsIf_Timer_Dummy_MicrosToTicks(uint32 Micros);
180
181 #define BASENXP_STOP_SEC_CODE
182 #include "BaseNXP_MemMap.h"
183 /*==================================================================================================
184 * LOCAL FUNCTIONS
185 ==================================================================================================*/
186 #define BASENXP_START_SEC_CODE
187 #include "BaseNXP_MemMap.h"
188
189 /*FUNCTION**********************************************************************
190 *
191 * Function Name : OsIf_Timer_Dummy_GetCounter.
192 * Description : Get counter value.
193 *
194 *END**************************************************************************/
OsIf_Timer_Dummy_GetCounter(void)195 static inline uint32 OsIf_Timer_Dummy_GetCounter(void)
196 {
197 return 0U;
198 }
199
200 /*FUNCTION**********************************************************************
201 *
202 * Function Name : OsIf_Timer_Dummy_GetElapsed.
203 * Description : Get elapsed value.
204 *
205 *END**************************************************************************/
OsIf_Timer_Dummy_GetElapsed(const uint32 * const CurrentRef)206 static inline uint32 OsIf_Timer_Dummy_GetElapsed(const uint32 * const CurrentRef)
207 {
208 (void)CurrentRef;
209 return 1U;
210 }
211
212 /*FUNCTION**********************************************************************
213 *
214 * Function Name : OsIf_Timer_Dummy_SetTimerFrequency.
215 * Description : Set timer frequency.
216 *
217 *END**************************************************************************/
OsIf_Timer_Dummy_SetTimerFrequency(uint32 Freq)218 static inline void OsIf_Timer_Dummy_SetTimerFrequency(uint32 Freq)
219 {
220 (void)Freq;
221 }
222
223 /*FUNCTION**********************************************************************
224 *
225 * Function Name : OsIf_Timer_Dummy_MicrosToTicks.
226 * Description : Convert micro second to ticks.
227 *
228 *END**************************************************************************/
OsIf_Timer_Dummy_MicrosToTicks(uint32 Micros)229 static inline uint32 OsIf_Timer_Dummy_MicrosToTicks(uint32 Micros)
230 {
231 return Micros;
232 }
233
234 #define BASENXP_STOP_SEC_CODE
235 #include "BaseNXP_MemMap.h"
236 /*==================================================================================================
237 * GLOBAL FUNCTIONS
238 ==================================================================================================*/
239 #define BASENXP_START_SEC_CODE
240 #include "BaseNXP_MemMap.h"
241
242 /*FUNCTION**********************************************************************
243 *
244 * Function Name : OsIf_Init.
245 * Description : OsIf initialization.
246 * @implements OsIf_Init_Activity
247 *
248 *END**************************************************************************/
OsIf_Init(const void * Config)249 void OsIf_Init(const void* Config)
250 {
251 #if (STD_ON == OSIF_DEV_ERROR_DETECT)
252 if (Config != NULL_PTR)
253 {
254 #if defined(USING_OS_AUTOSAROS)
255 (void)Det_ReportError(OSIF_MODULE_ID, OSIF_DRIVER_INSTANCE, OSIF_SID_INIT, OSIF_E_INIT_FAILED);
256 #else
257 OSIF_DEV_ASSERT(FALSE);
258 #endif /* defined(USING_OS_AUTOSAROS) */
259 }
260 #else
261 (void)Config;
262 #endif /* (STD_ON == OSIF_DEV_ERROR_DETECT) */
263
264 #if (OSIF_USE_SYSTEM_TIMER == STD_ON)
265 OsIf_Timer_System_Init();
266 #endif /* (OSIF_USE_SYSTEM_TIMER == STD_ON) */
267 #if (OSIF_USE_CUSTOM_TIMER == STD_ON)
268 OsIf_Timer_Custom_Init();
269 #endif /* (OSIF_USE_CUSTOM_TIMER == STD_ON) */
270 }
271
272 /*FUNCTION**********************************************************************
273 *
274 * Function Name : OsIf_GetCounter.
275 * Description : Get counter value.
276 * @implements OsIf_GetCounter_Activity
277 *
278 *END**************************************************************************/
OsIf_GetCounter(OsIf_CounterType SelectedCounter)279 uint32 OsIf_GetCounter(OsIf_CounterType SelectedCounter)
280 {
281 uint32 Value = 0U;
282
283 switch (SelectedCounter){
284 case OSIF_COUNTER_DUMMY:
285 Value = OsIf_Timer_Dummy_GetCounter();
286 break;
287 #if (OSIF_USE_SYSTEM_TIMER == STD_ON)
288 case OSIF_COUNTER_SYSTEM:
289 Value = OsIf_Timer_System_GetCounter();
290 break;
291 #endif /* (OSIF_USE_SYSTEM_TIMER == STD_ON) */
292 #if (OSIF_USE_CUSTOM_TIMER == STD_ON)
293 case OSIF_COUNTER_CUSTOM:
294 Value = OsIf_Timer_Custom_GetCounter();
295 break;
296 #endif /* (OSIF_USE_CUSTOM_TIMER == STD_ON) */
297 default:
298 /* impossible */
299 break;
300 }
301
302 return Value;
303 }
304
305
306 /*FUNCTION**********************************************************************
307 *
308 * Function Name : OsIf_GetElapsed.
309 * Description : Get elapsed value.
310 * @implements OsIf_GetElapsed_Activity
311 *
312 *END**************************************************************************/
OsIf_GetElapsed(uint32 * const CurrentRef,OsIf_CounterType SelectedCounter)313 uint32 OsIf_GetElapsed(uint32 * const CurrentRef, OsIf_CounterType SelectedCounter)
314 {
315 uint32 Value = 0U;
316
317 switch (SelectedCounter){
318 case OSIF_COUNTER_DUMMY:
319 Value = OsIf_Timer_Dummy_GetElapsed(CurrentRef);
320 break;
321 #if (OSIF_USE_SYSTEM_TIMER == STD_ON)
322 case OSIF_COUNTER_SYSTEM:
323 Value = OsIf_Timer_System_GetElapsed(CurrentRef);
324 break;
325 #endif /* (OSIF_USE_SYSTEM_TIMER == STD_ON) */
326 #if (OSIF_USE_CUSTOM_TIMER == STD_ON)
327 case OSIF_COUNTER_CUSTOM:
328 Value = OsIf_Timer_Custom_GetElapsed(CurrentRef);
329 break;
330 #endif /* (OSIF_USE_CUSTOM_TIMER == STD_ON) */
331 default:
332 /* impossible */
333 break;
334 }
335
336 return Value;
337 }
338
339 /*FUNCTION**********************************************************************
340 *
341 * Function Name : OsIf_SetTimerFrequency.
342 * Description : Set timer frequency.
343 * @implements OsIf_SetTimerFrequency_Activity
344 *
345 *END**************************************************************************/
346 /* @implements OsIf_SetTimerFrequency_Activity */
OsIf_SetTimerFrequency(uint32 Freq,OsIf_CounterType SelectedCounter)347 void OsIf_SetTimerFrequency(uint32 Freq, OsIf_CounterType SelectedCounter)
348 {
349 switch (SelectedCounter){
350 case OSIF_COUNTER_DUMMY:
351 OsIf_Timer_Dummy_SetTimerFrequency(Freq);
352 break;
353 #if (OSIF_USE_SYSTEM_TIMER == STD_ON)
354 case OSIF_COUNTER_SYSTEM:
355 OsIf_Timer_System_SetTimerFrequency(Freq);
356 break;
357 #endif /* (OSIF_USE_SYSTEM_TIMER == STD_ON) */
358 #if (OSIF_USE_CUSTOM_TIMER == STD_ON)
359 case OSIF_COUNTER_CUSTOM:
360 OsIf_Timer_Custom_SetTimerFrequency(Freq);
361 break;
362 #endif /* (OSIF_USE_CUSTOM_TIMER == STD_ON) */
363 default:
364 /* impossible */
365 break;
366 }
367 }
368
369 /*FUNCTION**********************************************************************
370 *
371 * Function Name : OsIf_MicrosToTicks.
372 * Description : Convert micro second to ticks.
373 * @implements OsIf_MicrosToTicks_Activity
374 *
375 *END**************************************************************************/
OsIf_MicrosToTicks(uint32 Micros,OsIf_CounterType SelectedCounter)376 uint32 OsIf_MicrosToTicks(uint32 Micros, OsIf_CounterType SelectedCounter)
377 {
378 uint32 Value = 0U;
379
380 switch (SelectedCounter){
381 case OSIF_COUNTER_DUMMY:
382 Value = OsIf_Timer_Dummy_MicrosToTicks(Micros);
383 break;
384 #if (OSIF_USE_SYSTEM_TIMER == STD_ON)
385 case OSIF_COUNTER_SYSTEM:
386 Value = OsIf_Timer_System_MicrosToTicks(Micros);
387 break;
388 #endif /* (OSIF_USE_SYSTEM_TIMER == STD_ON) */
389 #if (OSIF_USE_CUSTOM_TIMER == STD_ON)
390 case OSIF_COUNTER_CUSTOM:
391 Value = OsIf_Timer_Custom_MicrosToTicks(Micros);
392 break;
393 #endif /* (OSIF_USE_CUSTOM_TIMER == STD_ON) */
394 default:
395 /* impossible */
396 break;
397 }
398
399 return Value;
400 }
401
402 #define BASENXP_STOP_SEC_CODE
403 #include "BaseNXP_MemMap.h"
404
405 #ifdef __cplusplus
406 }
407 #endif
408
409 /** @} */
410