主题中讨论的其他器件:HALCOGEN
工具/软件:Code Composer Studio
尊敬的所有人:
我已按照"example_etpwm_ecap.c"示例操作、并设法使其正常工作。 我想知道我需要如何修改代码才能读取多个 ECAP 模块、比如 ECAP3、4和5。 我目前有:
现在、我是否可以通过某种方法由哪个 ECAP 引起中断事件、以便能够读取相应的 CAP1、CAP2和 CAP3? 非常感谢!
我的代码如下:
/* include 文件*/ #include "sys_common.h" //用户代码开始(1)*/ #include "stdio.h" #include "system.h" #include "etpwm.h" #include "ecap.h" //*用户代码结束*/** @fn void main (void) *@简要应用程序 main 函数 * **/* void /用户代码结束*/*(void end)*/用户代码/* 2 / void 代码结束*/用户代码结束* /*用户代码开始(3)*/ _enable_interrupt_(); #if 1 //使用 GUI 配置初始化 ePWM 和 ECAP */ etpwmInit(); ecapInit(); #else /*用于配置 ETPWM 和 ECAP 的备用代码*// *配置 ETPWG1 *// *设置 TBCLK 频率= VpkInit (1 ),设置为 VpwmCliv_1,按1设置 CtkmCliv_1 * 1,1设置 CtkmClkmCliv_1 (1) /*将时间周期设置为1000ns (分频器值=(1000ns * 90MHz)- 1 = 89)*/ etpwmSetTimebasePeriod (etpwmREG1、89); //将比较 A 值配置为时间周期的一半*/ etpwmSetCmpA (etpwmREG1、45); //配置 mthe 模块,在 CTR=0时将 PWMA 值设置为1,在 CTR=CmpA 时将 PWMA 值设置为0 */ etpwmActionQualConfig_t configPWMA; configPWMA.CtrlEqZero_Action = ActionQUAL_SET; configPWMA.configEqAction_Action = Disabled_CmpAUP_Action; CONFIGPWMA.CMAP_CAL.Imped_Action_Ed_Disabled;CONFIGAP_Imped_Imped_Impedance = Impedance;CONFIGPQ_Impedance = Impedance configPWMA.CtrlEqCmpBUp_Action = ActionQual_Disabled; configPWMA.CtrlBBDown _Action = ActionQual_Disabled; etpwmSetActionPwmA (etpwmREG1、configPWMA); // ActionCountermode 中的 Start 计数器*/ etpwmCount (etpwmREG1、SetPWMA);// SetStartCountermode (etpwmCwmCwm0);SetPwmCwmCwpwmCpwmCwmCwmCount (etwmCwpwmRpwpwmCw0) ; Set /*配置 ECAP1 */* 配置事件1以捕获上升沿*/ ecapSetCaptureEvent1 (ecapREG1、上升沿、RESET_DISABLE); /*配置事件2以捕获下降沿*/ ecapSetCaptureEvent2 (ecapREG1、下降沿、RESET_DISABLE); //配置事件3以启用上升沿、 ecapSetCaptureEvent2 (ecapREG1);启用上升沿计数器*以启用上升沿、ecapture_reset_reset_reset/复位 //将 Capure 模式设置为连续事件,并将事件后续处理为 CAP3 */ ecapSetCaptureMode (ecapREG1,Continuous,CAPTURE_EVENT3); //开始计数器*/ ecapStartCounter (ecapREG1); //启用 Capture 上的加载*/ ecapEnableCapture (ecapREG1); //启用 CAP3事件的中断#ecapStartInt ,ecapenableInterrupt /*... 永久运行*/ while (1); /*用户代码结束*/ } /*用户代码开始(4)*/ void ecapNotification (ecapBASE-t * ECAP、uint16标志) { uint32 cap1、CAP2、cap3; float64占空比、周期; CAP1 = ecapGetCAP1 (ecapREG1); CAP2 = ecapGetCAP2 (ecapREG1); cap3 = ecapGetCAP3 (ecapREG1); Duty =(CAP2 - CAP1)* 1000/VCLK4_FREQ; period =(cap3 - cap1) print1000/VCLK4_FREQ;duty = %fn (%fn)、duty =%fn、duty =%fn ("、%fn)、duty =%fns"、%frandy =%fns、%fn、"ns" /*用户代码结束*/