57 #if defined (USING_OS_FREERTOS)
58 #error "Wrong OSIF selected. Please define symbol USING_OS_BAREMETAL (or no OS define) in project settings or change the OSIF variant"
72 #define MSEC_TO_TICK(msec) (msec)
74 #if (FEATURE_OSIF_USE_SYSTICK != 0) || (FEATURE_OSIF_USE_PIT != 0)
81 static volatile uint32_t s_osif_tick_cnt = 0u;
83 static inline void osif_Tick(
void)
88 static inline uint32_t osif_GetCurrentTickCount(
void)
90 return s_osif_tick_cnt;
93 #if FEATURE_OSIF_USE_SYSTICK
95 void SysTick_Handler(
void);
97 void SysTick_Handler(
void)
102 static inline void osif_UpdateTickConfig(
void)
104 uint32_t core_freq = 0u;
116 static inline void osif_DisableIrqGlobal(
void)
121 static inline void osif_EnableIrqGlobal(
void)
126 #elif FEATURE_OSIF_USE_PIT
128 #define PIT_CHAN_ID (15u)
130 void PIT_Ch15_IRQHandler(
void);
132 void PIT_Ch15_IRQHandler(
void)
134 PIT->TIMER[PIT_CHAN_ID].TFLG = PIT_TFLG_TIF(1u);
139 static inline void osif_UpdateTickConfig(
void)
141 uint32_t tick_freq = 0u;
142 PIT_Type * base = PIT;
149 uint32_t tick_1ms = tick_freq / 1000u;
152 base->MCR &= ~PIT_MCR_MDIS(1u);
153 base->TIMER[PIT_CHAN_ID].LDVAL = tick_1ms;
154 base->TIMER[PIT_CHAN_ID].TCTRL |= PIT_RTI_TCTRL_TEN(1u) | PIT_RTI_TCTRL_TIE(1u);
159 static inline void osif_DisableIrqGlobal(
void)
164 static inline void osif_EnableIrqGlobal(
void)
171 static inline uint32_t osif_GetCurrentTickCount(
void)
176 static inline void osif_UpdateTickConfig(
void)
181 #define osif_DisableIrqGlobal() (void)0;
183 #define osif_EnableIrqGlobal() (void)0;
202 osif_UpdateTickConfig();
203 uint32_t start = osif_GetCurrentTickCount();
204 uint32_t crt_ticks = osif_GetCurrentTickCount();
205 uint32_t delta = crt_ticks - start;
206 uint32_t delay_ticks = MSEC_TO_TICK(delay);
207 while (delta < delay_ticks)
209 crt_ticks = osif_GetCurrentTickCount();
210 delta = crt_ticks - start;
233 return osif_GetCurrentTickCount();
244 const uint32_t timeout)
302 const uint32_t timeout)
306 uint32_t timeoutTicks;
309 osif_UpdateTickConfig();
317 timeoutTicks = MSEC_TO_TICK(timeout);
320 uint32_t start = osif_GetCurrentTickCount();
321 uint32_t end = (uint32_t)(start + timeoutTicks);
322 uint32_t max = end - start;
325 uint32_t crt_ticks = osif_GetCurrentTickCount();
326 uint32_t delta = crt_ticks - start;
337 osif_DisableIrqGlobal();
339 osif_EnableIrqGlobal();
342 return osif_ret_code;
357 osif_DisableIrqGlobal();
367 osif_EnableIrqGlobal();
369 return osif_ret_code;
380 const uint8_t initValue)
383 osif_DisableIrqGlobal();
385 osif_EnableIrqGlobal();
status_t OSIF_MutexDestroy(const mutex_t *const pMutex)
Destroys a previously created mutex.
status_t OSIF_SemaDestroy(const semaphore_t *const pSem)
Destroys a previously created semaphore.
#define S32_SysTick_RVR_RELOAD(x)
void OSIF_TimeDelay(const uint32_t delay)
Delays execution for a number of milliseconds.
status_t OSIF_MutexUnlock(const mutex_t *const pMutex)
Unlocks a previously locked mutex.
#define S32_SysTick_CSR_ENABLE(x)
status_t OSIF_MutexLock(const mutex_t *const pMutex, const uint32_t timeout)
Waits for a mutex and locks it.
uint32_t OSIF_GetMilliseconds(void)
Returns the number of miliseconds elapsed since starting the internal timer or starting the scheduler...
status_t OSIF_SemaCreate(semaphore_t *const pSem, const uint8_t initValue)
Creates a semaphore with a given value.
void INT_SYS_DisableIRQGlobal(void)
Disable system interrupt.
status_t OSIF_MutexCreate(mutex_t *const pMutex)
Create an unlocked mutex.
clock_names_t
Clock names.
status_t CLOCK_SYS_GetFreq(clock_names_t clockName, uint32_t *frequency)
Gets the clock frequency for a specific clock name.
status_t
Status return codes. Common error codes will be a unified enumeration (C enum) that will contain all ...
void INT_SYS_EnableIRQGlobal(void)
Enables system interrupt.
status_t OSIF_SemaWait(semaphore_t *const pSem, const uint32_t timeout)
Decrement a semaphore with timeout.
#define S32_SysTick_CSR_TICKINT(x)
#define OSIF_WAIT_FOREVER
status_t OSIF_SemaPost(semaphore_t *const pSem)
Increment a semaphore.
void INT_SYS_EnableIRQ(IRQn_Type irqNumber)
Enables an interrupt for a given IRQ number.
IRQn_Type
Defines the Interrupt Numbers definitions.