在ControlSUITE中的文件f2833xpwm.h中,有如下对ePWM进行初始化的语句:
#define PWM_INIT_MACRO(ch1,ch2,ch3,v) \
/* Setup Sync*/ \
(*ePWM[ch1]).TBCTL.bit.SYNCOSEL = 0; /* Pass through*/ \
(*ePWM[ch2]).TBCTL.bit.SYNCOSEL = 0; /* Pass through*/ \
(*ePWM[ch3]).TBCTL.bit.SYNCOSEL = 0; /* Pass through*/ \
为什么用(*ePWM[ch1]).TBCTL.bit.SYNCOSEL,而不用 EPwm1Regs.TBCTL.bit.SYNCOSEL?因为在文件DSP2833x_EPwm.h中是定义了extern volatile struct EPWM_REGS EPwm1Regs的
(*ePWM[ch1])和EPwm1Regs是如何对应的?
HeiHei:
如上图所示,你可以到在头文件中找到如上定义,定义了一个EPWM_REGS型的指针数组,数组里的变量是指向EPwmnRegs寄存器的。也就是说
(ePWM[ch1]) = &EPwm1Regs
*(ePWM[ch1]) = EPwm1Regs