工具/软件:TI C/C++编译器
尊敬的所有:
我使用 ecap4 ecap5来捕获两 个 PWM,但 ecap4 ecap5 冲突。
当 ecap4 中断 计算时、Duty,ecap5即将到来。
duty4 跳转至零。
void DTS_capInit (void)
{
ecapInit();
/*配置 ECAP4 */*配置事件1以捕捉上升沿*/
ecapSetCaptureEvent1 (ecapREG4、上升沿、复位禁用);
/*配置事件2以捕获下降沿*/
ecapSetCaptureEvent2 (ecapREG4、下降沿、复位禁用);
/*配置事件3以捕获上升沿并启用复位计数器*/
ecapSetCaptureEvent3 (ecapREG4、上升沿、RESET_ENABLE);
/*将 Capure 模式设置为连续事件,并将后续事件设置为 CAP3 */
ecapSetCaptureMode (ecapREG4、连续、CAPTURE_EVENT3);
/*开始计数器*/
ecapStartCounter (ecapREG4);
/*启用捕获加载*/
ecapEnableCapture (ecapREG4);
/*为 CAP3事件启用中断*/
ecapEnableInterrupt (ecapREG4、ecapInt_CEVT3);
/*配置 ECAP5 */*配置事件1以捕获上升沿*/
ecapSetCaptureEvent1 (ecapREG5、上升沿、复位禁用);
/*配置事件2以捕获下降沿*/
ecapSetCaptureEvent2 (ecapREG5、FALLING_EDGE、RESET_DISABLE);
/*配置事件3以捕获上升沿并启用复位计数器*/
ecapSetCaptureEvent3 (ecapREG5、上升沿、RESET_ENABLE);
/*将 Capure 模式设置为连续事件,并将后续事件设置为 CAP3 */
ecapSetCaptureMode (ecapREG5、Continuous、CAPTURE_EVENT3);
/*开始计数器*/
ecapStartCounter (ecapREG5);
/*启用捕获加载*/
ecapEnableCapture (ecapREG5);
/*为 CAP3事件启用中断*/
ecapEnableInterrupt (ecapREG5、ecapInt_CEVT3);
}
int dts_duty1、dts_duty2;
float Duty_cap4、period_cap4、Duty_cap5、period_cap5;
void ecapNotification (ecapBASE-t * ECAP、uint16标志)
{
uint32 cap_1、cap_2、cap_3;
if (eCAP ==ecapREG4)
{
CAP_1 = ecapGetCAP1 (ecapREG4);
CAP_2 = ecapGetCAP2 (ecapREG4);
CAP_3 = ecapGetCAP3 (ecapREG4);
Duty_cap4 =(CAP_2 - CAP_1)* 1000/VCLK4_FREQ;
Period_cap4 =(CAP_3 - CAP_1)* 1000/VCLK4_FREQ;
DTS_duty1 = Duty_cap4/Period_cap4*100;
}
否则、如果(ECAP = ecapREG5)
{
CAP_1 = ecapGetCAP1 (ecapREG5);
CAP_2 = ecapGetCAP2 (ecapREG5);
CAP_3 = ecapGetCAP3 (ecapREG5);
Duty_cap5 =(CAP_2 - CAP_1)* 1000/VCLK4_FREQ;
Period_cap5 =(CAP_3 - CAP_1)* 1000/VCLK4_FREQ;
DTS_duty2 = Duty_cap5/period_cap5*100;
}
}


