主题中讨论的其他器件: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"
/*用户代码结束*/