44#include "../project_settings.h"
45#include "os/os_sys_time.h"
46#if OS_FEATURE_WATCHDOG_ENABLED == 1
47#include "os_watchdog.h"
50#if OS_USE_SCHEDULER_100us == 1
52#ifndef OS_TIMER_NUMBER_OF_TIMERS
53#warning OS_TIMER_NUMBER_OF_TIMERS needs to be defined in main/project_setting.h
56#warning OS_USE_SYSTIME needs to be defined in main/project_setting.h
58#include "os/os_scheduler.h"
74void TMR1_CallBack(
void);
98#if OS_TIMER_NUMBER_OF_TIMERS > 0
99 void OS_Timer_Tick(
void);
102static volatile uint16_t scheduler_interrupt_leader_100us = 0;
103static volatile uint16_t scheduler_interrupt_follower_100us = 0;
104static volatile uint8_t scheduler_interrupt_realtime_counter_1ms = 0;
106#if OS_USE_MCC_TIMER1 == 0
107static inline void OS_Scheduler_Init_Timer1_100us(
void)
115 T1CONbits.TMWDIS = 0;
118 T1CONbits.TECS = 0b11;
144void OS_Scheduler_Init(
void)
146 #if OS_USE_MCC_TIMER1 == 0
147 OS_Scheduler_Init_Timer1_100us();
149#if OS_USE_SYSTIME == 1
150 OS_SysTime_ResetTime();
152 scheduler_interrupt_leader_100us = 0U;
153 scheduler_interrupt_follower_100us = 0U;
166#if OS_USE_MCC_TIMER1 == 1
169void TMR1_CallBack(
void)
171void __attribute__((__interrupt__,no_auto_psv)) _T1Interrupt(
void)
174 scheduler_interrupt_leader_100us++;
176#if OS_TIMER_NUMBER_OF_TIMERS > 0
179 Tasks_Realtime_100us();
180 scheduler_interrupt_realtime_counter_1ms += 1U;
181 if (scheduler_interrupt_realtime_counter_1ms >= 10U)
183#if OS_USE_SYSTIME == 1
184 OS_SysTime_IncrementTime_1ms();
186 Tasks_Realtime_1ms();
187 scheduler_interrupt_realtime_counter_1ms = 0U;
203void OS_Scheduler_RunOnce(
void)
205 volatile static uint16_t scheduler_1ms_timer = 0U;
206 volatile static uint16_t scheduler_10ms_timer = 0U;
207 volatile static uint16_t scheduler_100ms_timer = 0U;
208 volatile static uint16_t scheduler_1s_timer = 0U;
212 if (scheduler_interrupt_follower_100us != scheduler_interrupt_leader_100us)
214 scheduler_interrupt_follower_100us += 1U;
216 scheduler_1ms_timer += 1U;
217 if (scheduler_1ms_timer >= 10U)
219 scheduler_1ms_timer = 0U;
221 scheduler_10ms_timer += 1U;
222 if (scheduler_10ms_timer >= 10U)
224 scheduler_10ms_timer = 0U;
226 scheduler_100ms_timer += 1U;
227 if (scheduler_100ms_timer >= 10U)
229 scheduler_100ms_timer = 0U;
231 scheduler_1s_timer += 1U;
232 if (scheduler_1s_timer >= 10U)
234 scheduler_1s_timer = 0U;
235 #if OS_FEATURE_WATCHDOG_ENABLED == 1
236 OS_Watchdog_KeepAlivePing();
259void OS_Scheduler_RunForever(
void)
262 scheduler_interrupt_leader_100us = 0U;
263 scheduler_interrupt_follower_100us = 0U;
270 OS_Scheduler_RunOnce();
271#if (X2CDEBUG_ENABLED == 1)
272 X2CScope_Communicate();
This is the generated driver header file for the TMR1 driver.
void __attribute__((__interrupt__, auto_psv))
Executes the power converter control loop.