ZHCAER2A August 2024 – August 2025 MSPM0C1105 , MSPM0C1106 , MSPM0G3507 , MSPM0L1306
用于调度器和任务运行的器件初始化在主应用程序源代码文件 task_scheduler.c 中进行处理。对 SYSCFG_DL_init 的调用会配置示例代码中所需的硬件外设,然后会启用中断,并启动 TIMER_0_INST 计数器。之后,代码进入调度器循环。
在所需的 IRQ 处理程序内,会在中断期间设置相应的标志以告知调度器任务处于挂起状态。
#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;
}
}