SLAAEK8 August 2024 MSPM0G3507 , MSPM0L1306
The initialization of the device for
operation of the scheduler and tasks is handled within the main application source
code file, task_scheduler.c
. The call to
SYSCFG_DL_init
configures the hardware peripherals needed in
the example code, then interrupts are enabled, and the TIMER_0_INST
counter is started. After that, the code enters the scheduler loop.
Within the required IRQ handlers, the appropriate flags are set during interrupt to tell the scheduler a task is pending.
#include "ti_msp_dl_config.h"
#include "modules/scheduler/scheduler.h"
/* Counter for the number of tasks pending */
volatile int16_t gTasksPendingCounter = 0;
int main(void)
{
SYSCFG_DL_init();
/* Enable IRQs */
NVIC_EnableIRQ(GPIO_SWITCHES_INT_IRQN);
NVIC_EnableIRQ(TIMER_0_INST_INT_IRQN);
/* Start timer to update DAC8 output */
DL_TimerG_startCounter(TIMER_0_INST);
/* Enter Task Scheduler */
scheduler();
}
/* Interrupt Handler for S2 (PB21) button press, toggles LED */
void GROUP1_IRQHandler(void)
{
switch (DL_Interrupt_getPendingGroup(DL_INTERRUPT_GROUP_1)) {
/* S2 (PB21) has been pressed execute PB21 task */
case GPIO_SWITCHES_INT_IIDX:
/* Increment counter if ready flag is not already set. */
gTasksPendingCounter += !getSwitchFlag();
setSwitchFlag();
break;
}
}
/* Interrupt Handler for TIMG0 zero condition, updates DAC8 value */
void TIMER_0_INST_IRQHandler(void)
{
switch (DL_TimerG_getPendingInterrupt(TIMER_0_INST)) {
case DL_TIMER_IIDX_ZERO:
/* Increment counter if ready flag is not already set. */
gTasksPendingCounter += !getDACFlag();
setDACFlag();
break;
default:
break;
}
}