This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

请教关于使用DPLIB库中的模块的问题

Other Parts Discussed in Thread: CONTROLSUITE

工程师你好!

我在使用DPLIB库中的模块驱动PWM输出。使用ADCDRV_1ch.asm,CNTL_2P2Z.asm,PWMDRV_1ch.asm.

AD采样送到2P2Z的反馈输入端,2P2Z的输出送至PWMDRV_1ch输入。PWM向上计数,CTR=0时输出置高,CTR=CMPA时输出置低,在CTR=PRD时加载CMPA寄存器。

PWMDRV_1ch.asm.的计算过程如下:

;=============================
PWMDRV_1ch .macro n
;=============================
MOVW DP, #_PWMDRV_1ch_Duty1 ; load DP for net pointer
MOVL XAR0, @_PWMDRV_1ch_Duty1 ; Load net pointer address to XAR0
MOVL XT,@_PWMDRV_1ch_Period1
MOVW DP,#_EPwm:n:Regs.CMPA
QMPYL ACC,XT,*XAR0 ; ACC= (I8Q24) * (I16Q16) = (I24Q40): upper 32-bits -> ACC = (I24Q8)
SFR ACC,#8 ; ACC>>8: AL = duty,

MOV @_EPwm:n:Regs.CMPA.half.CMPA,AL
ROR ACC ;AL=duty/2
MOV @_EPwm:n:Regs.CMPB,AL

.endm

我通过在FLASH调试可以看到PWMDRV_1ch_Duty1 的数值是2P2Z的输出。但是PWM输出的结果始终是CMPA=0,所以输出就无脉冲输出。不知道是什么原因造成的。我在主程序中给PWMDRV_1ch_Period1=_IQ16(600)实现主频60M,PWM不分频100K。