恩智浦LPC1549@eeworld ( 四 ) LPC1549 可配置状态机定时器(SCT)
在lpcopen_2_08b版本中,NXP发布了SCT PWM的例程
新LPCOpen版本提供sct_pwm驱动程序。使用此驱动程序的应用程序可以配置和使用SCT作为具有多个通道标准PWM。应用程序可以通过以下给出的步骤执行此操作
1. 使用Chip_SCTPWM_Init()初始化SCT
2. 使用Chip_SCTPWM_SetRate()设置频率/速度
3. 配置引脚(SCT_OUTx)[x为SCT_OUT管脚号] 的PINMUX
4. 使用Chip_SCTPWM_SetOutPin()分配一个PWM输出引脚到通道
5. 使用Chip_SCTPWM_SetDutyCycle()设置这个通道产生的PWM输出的占空比
6. 重复步骤3,4和5为其他PWM通道号配置[可选]
7. 使用Chip_SCTPWM_Start()启动PWM通道
8. 使用Chip_SCTPWM_SetDutyCycle()根据需要更改占空比
9. 使用Chip_SCTPWM_Stop()SCT / PWM可在需要时停止 [可选]
例程
2通道输出PWM
通道1:占空比以10%累加到100%
通道2:占空比以0%累加到100% ,再减到0%
/* Initialize the SCT as PWM */
Chip_SCTPWM_Init(SCT_PWM);
//PWM 频率 10 KHz
Chip_SCTPWM_SetRate(SCT_PWM, SCT_PWM_RATE);
/* 配置PWM输出管脚 */
/* Connect SCT0 output 1 to PIO0_29 */
/* Connect SCT0 output 0 to PIO0_3 */
//Chip_SWM_MovablePinAssign(SWM_SCT0_OUT1_O, 25);//29
//Chip_SWM_MovablePinAssign(SWM_SCT0_OUT0_O, 3);
app_setup_pin();
/*设置 SCT0_OUT1 通道*/
Chip_SCTPWM_SetOutPin(SCT_PWM, SCT_PWM_OUT, SCT_PWM_PIN_OUT);
Chip_SCTPWM_SetOutPin(SCT_PWM, SCT_PWM_LED, SCT_PWM_PIN_LED);
/* 初始占空比 0% */
Chip_SCTPWM_SetDutyCycle(SCT_PWM, SCT_PWM_OUT, Chip_SCTPWM_GetTicksPerCycle(SCT_PWM)/2);
Chip_SCTPWM_SetDutyCycle(SCT_PWM, SCT_PWM_LED, 0);
//Start the SCT PWM
Chip_SCTPWM_Start(SCT_PWM);
例程中,采用了SYSTICK 定时器1ms唤醒一次
//1MS周期唤醒
cnt1 ++;
cnt2 ++;
//1000MS调整一次通道1占空比
if (cnt1 >= OUT_STEP_CNT)
{
//占空比每秒累加10%,直到100%,重复
out_dp += 10;
if (out_dp > 100)
{
out_dp = 0;
}
/* Increase dutycycle by 10% every second */
Chip_SCTPWM_SetDutyCycle(SCT_PWM, SCT_PWM_OUT,Chip_SCTPWM_PercentageToTicks(SCT_PWM, out_dp));
cnt1 = 0;
}
//20ms调整一次通道2占空比
if (cnt2 >= LED_STEP_CNT)
{
led_dp += led_step;//占空比 +1,-1?
if (led_dp < 0)
{
led_dp = 0;
led_step = 1;//正方向累加
}
if (led_dp > 200)
{
led_dp = 200;
led_step = -1;//反方向减
}
/* Increment or Decrement Dutycycle by 0.5% every 10ms */
Chip_SCTPWM_SetDutyCycle(SCT_PWM, SCT_PWM_LED,Chip_SCTPWM_PercentageToTicks(SCT_PWM, led_dp)/2);
cnt2 = 0;
}
//Wait For Interrupt
__WFI();