ZHCAER2A August   2024  – August 2025 MSPM0C1105 , MSPM0C1106 , MSPM0G3507 , MSPM0L1306

 

  1.   1
  2. 说明
  3. 所需外设
  4. 设计步骤
  5. 设计注意事项
  6. 软件流程图
  7. 应用代码
    1. 6.1 调度器代码
    2. 6.2 主应用程序代码
  8. 其他资源
  9. E2E
  10. 修订历史记录
  11. 10商标

主应用程序代码

用于调度器和任务运行的器件初始化在主应用程序源代码文件 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;
    }
}