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)
79 static volatile uint32_t s_osif_tick_cnt = 0u;
81 static inline void osif_Tick(
void)
86 static inline uint32_t osif_GetCurrentTickCount(
void)
88 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;
120 static inline void osif_DisableIrqGlobal(
void)
125 static inline void osif_EnableIrqGlobal(
void)
130 #elif FEATURE_OSIF_USE_PIT
132 void OSIF_PIT_IRQHandler(
void);
134 void OSIF_PIT_IRQHandler(
void)
136 OSIF_PIT->TIMER[OSIF_PIT_CHAN_ID].TFLG = PIT_TFLG_TIF(1u);
141 static inline void osif_UpdateTickConfig(
void)
143 uint32_t tick_freq = 0u;
144 PIT_Type * base = OSIF_PIT;
151 uint32_t tick_1ms = tick_freq / 1000u;
154 base->MCR &= ~PIT_MCR_MDIS(1u);
155 base->MCR |= PIT_MCR_FRZ(1u);
156 base->TIMER[OSIF_PIT_CHAN_ID].LDVAL = tick_1ms;
157 base->TIMER[OSIF_PIT_CHAN_ID].TCTRL |= PIT_TCTRL_TEN(1u) | PIT_TCTRL_TIE(1u);
158 const IRQn_Type pitIrqId[PIT_INSTANCE_COUNT][PIT_IRQS_CH_COUNT] = PIT_IRQS;
164 static inline void osif_DisableIrqGlobal(
void)
169 static inline void osif_EnableIrqGlobal(
void)
176 static inline uint32_t osif_GetCurrentTickCount(
void)
181 static inline void osif_UpdateTickConfig(
void)
186 #define osif_DisableIrqGlobal() (void)0;
188 #define osif_EnableIrqGlobal() (void)0;
207 osif_UpdateTickConfig();
208 uint32_t start = osif_GetCurrentTickCount();
209 uint32_t crt_ticks = osif_GetCurrentTickCount();
210 uint32_t delta = crt_ticks - start;
211 uint32_t delay_ticks = MSEC_TO_TICK(delay);
212 while (delta < delay_ticks)
214 crt_ticks = osif_GetCurrentTickCount();
215 delta = crt_ticks - start;
238 return osif_GetCurrentTickCount();
249 const uint32_t timeout)
307 const uint32_t timeout)
311 uint32_t timeoutTicks;
314 osif_UpdateTickConfig();
322 timeoutTicks = MSEC_TO_TICK(timeout);
325 uint32_t start = osif_GetCurrentTickCount();
326 uint32_t end = (uint32_t)(start + timeoutTicks);
327 uint32_t max = end - start;
330 uint32_t crt_ticks = osif_GetCurrentTickCount();
331 uint32_t delta = crt_ticks - start;
342 osif_DisableIrqGlobal();
344 osif_EnableIrqGlobal();
347 return osif_ret_code;
362 osif_DisableIrqGlobal();
372 osif_EnableIrqGlobal();
374 return osif_ret_code;
385 const uint8_t initValue)
388 osif_DisableIrqGlobal();
390 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.
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 ...
IRQn_Type
Defines the Interrupt Numbers definitions.
void INT_SYS_EnableIRQGlobal(void)
Enables system interrupt.
#define S32_SysTick_CVR_CURRENT(x)
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.
#define S32_SysTick_CSR_CLKSOURCE(x)
clock_names_t
Clock names.
void INT_SYS_InstallHandler(IRQn_Type irqNumber, const isr_t newHandler, isr_t *const oldHandler)
Installs an interrupt handler routine for a given IRQ number.