我无法在运行 uC/OS-III 的 NXP LPC1857 上获得 LED 的 PWM 信号平稳运行。只有当我禁用以 1ms 运行的操作系统系统时,经常发生的闪烁才会停止。
我已经用 4 个匹配寄存器设置了我的计时器,一个用于每种颜色(红色、绿色、蓝色),一个用于整个周期。前三个匹配输出正在清除每种颜色的物理输出引脚。最后一个周期匹配产生一个中断来设置下一个周期的所有三种颜色输出。
我试图通过在中断周围添加以下代码来在 timer0 中断期间禁用来自操作系统的中断:
void TIMER0_IRQHandler(void)
{
CPU_SR_ALLOC();
OS_CRITICAL_ENTER();
OSIntEnter();
if (Chip_TIMER_MatchPending(PWM_TIMER, PWM_RED))
{
Chip_TIMER_ClearMatch(PWM_TIMER, PWM_RED);
PWM_TIMER->EMR &= ~(((uint32_t) 0x01) << PWM_RED);
}
if (Chip_TIMER_MatchPending(PWM_TIMER, PWM_GREEN))
{
Chip_TIMER_ClearMatch(PWM_TIMER, PWM_GREEN);
PWM_TIMER->EMR &= ~(((uint32_t) 0x01) << PWM_GREEN);
}
if (Chip_TIMER_MatchPending(PWM_TIMER, PWM_BLUE))
{
Chip_TIMER_ClearMatch(PWM_TIMER, PWM_BLUE);
PWM_TIMER->EMR &= ~(((uint32_t) 0x01) << PWM_BLUE);
}
if (Chip_TIMER_MatchPending(PWM_TIMER, PWM_MATCH))
{
Chip_TIMER_ClearMatch(PWM_TIMER, PWM_MATCH);
PWM_TIMER->EMR |= (((uint32_t) 0x01) << PWM_RED);
PWM_TIMER->EMR |= (((uint32_t) 0x01) << PWM_GREEN);
PWM_TIMER->EMR |= (((uint32_t) 0x01) << PWM_BLUE);
}
OS_CRITICAL_EXIT();
OSIntExit();
}
有谁知道为什么 systick 会导致 PWM 信号闪烁?