这个问题不知有没有人实际用过,可以提供可行的答案吗?因为要控制角度,所以需要输出计算好的精确脉冲数。
最好有程序
忘解答,急!!!
还有例程里给的PWM中断程序,单步试了下,始终都没有进入中断,就进入了无限循环,无法在中断里逐周期改变PWM周期,是怎么回事?
部分程序如下:
PWMGenConfigure(PWM_BASE, PWM_GEN_1, /* 配置PWM发生器1:加减计数 */
PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC);
PWMGenPeriodSet(PWM_BASE, PWM_GEN_1, 60000); /* 设置PWM发生器1的周期 */
PWMPulseWidthSet(PWM_BASE, PWM_OUT_2,30000); /* 设置PWM2输出的脉冲宽度 */
PWMPulseWidthSet(PWM_BASE, PWM_OUT_3,30000); /* 设置PWM3输出的脉冲宽度 */
PWMSyncUpdate(PWM_BASE,PWM_GEN_1_BIT);
PWMOutputState(PWM_BASE, /* 使能PWM2和PWM3的输出 */
PWM_OUT_2_BIT | PWM_OUT_3_BIT,
true);
PWMGenEnable(PWM_BASE, PWM_GEN_1); /* 使能PWM发生器1,开始产生 */
/* PWM方波 */
PWMGenIntTrigEnable(PWM_BASE, /* 使能PWM发生器1归零触发中断 */
PWM_GEN_1,
PWM_INT_CNT_ZERO);
PWMIntEnable(PWM_BASE, PWM_INT_GEN_1); /* 使能PWM发生器1中断 */
IntEnable(INT_PWM1); /* 使能PWM1中断 */
IntMasterEnable(); /* 使能总中断 */
for (;;) {
}
}
/*********************************************************************************************************
** Function name: PWM_Generator_1_ISR()
** Descriptions: PWM发生器1中断服务函数
*********************************************************************************************************/
void PWM_Generator_1_ISR (void)
{
const unsigned long ulTab[10] =
{
3000, 9000, 15000, 21000, 27000,
33000, 39000, 45000, 51000, 57000
};
static unsigned long n = 0;
PWMGenIntClear(PWM_BASE,
PWM_GEN_1,
PWM_INT_CNT_ZERO);
PWMPulseWidthSet(PWM_BASE, PWM_OUT_2,,ulTab[n]); /* 设置PWM2输出的周期 */
PWMPulseWidthSet(PWM_BASE, PWM_OUT_3, ulTab[9-n]); /* 设置PWM3输出的周期 */
n++;
if ( n >= 10 ) {
n = 0;
}
} |