完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
请问下论坛的高手们一些问题:
源代码(官方无桥PFC例程)的一段 PFC_BL_ICMD .macro n ;============================= MOVW DP, #_PFC_BL_ICMD_Vcmd:n: MOVL XAR0,@_PFC_BL_ICMD_VinvSqr:n: ; Net pointer to VinvSqr (XAR0) MOVL XAR1,@_PFC_BL_ICMD_VacRect:n: ; Net pointer to VacRect (XAR1) MOVL XAR2,@_PFC_BL_ICMD_Vcmd:n: ; Net pointer to Vcmd (XAR2) MOVL XAR3,@_PFC_BL_ICMD_Out:n: MOVL XAR4,@_PFC_BL_ICMD_Vpfc:n: MOVL XAR5,@_PFC_BL_ICMD_Duty:n: MOVL XT,*XAR0 ; XT = VinvSqr Q24 QMPYL ACC,XT,*XAR1 ; ACC = VinvSqr * VacRect = Q24* Q24 = I16Q48 LSL ACC,#8 ; ACC = I8Q24 MOVL XT,@ACC ; XT = VinvSqr * VacRect (Q24) QMPYL ACC,XT,*XAR2 ; ACC = VinvSqr * VacRect * Vcmd LSL ACC,#8 ; ACC = I8Q24 MOVL XT,@ACC ; XT = VacRect * VinvSqr * Vcmd QMPYL ACC,XT,@_PFC_BL_ICMD_VmaxOverVmin:n: ; ACC = VacRect * VinvSqr * Vcmd * VmaxOverVmin LSL ACC,#8 ; ACC = Q24 MOVL *XAR3,ACC ; Store result in output pointer location ;;=============================================== ; set terminal pointer to ZeroNet MOVL XAR2, #ZeroNet MOVW DP, #_PWMDRV_1ch_UpDwnCnt_Duty:n: MOVL @_PWMDRV_1ch_UpDwnCnt_Duty:n:, XAR2 MOVW DP,#_EPwm:n:Regs.TBPRD MOVL ACC,@_EPwm:n:Regs.TBPRD MOV AL,#0 MOVW DP, #_PWMDRV_1ch_UpDwnCnt_Duty:n: MOVL @_PWMDRV_1ch_UpDwnCnt_Period:n:,ACC .endm PWMDRV_1ch_UpDwnCnt .macro n ;============================= MOVW DP, #_PWMDRV_1ch_UpDwnCnt_Duty:n: ; load DP for net pointer MOVL XAR0, @_PWMDRV_1ch_UpDwnCnt_Duty:n: ; Load net pointer address to XAR0 MOVL XT,@_PWMDRV_1ch_UpDwnCnt_Period:n: QMPYL ACC,XT,*XAR0 ; ACC= (I8Q24) * (I16Q16) = (I24Q40): upper 32-bits -> ACC = (I24Q8) SFR ACC,#8 ; ACC>>8: AL = duty, MOVW DP,#_EPwm:n:Regs.CMPA MOV @_EPwm:n:Regs.CMPA.half.CMPA,AL .endm 例程结束。 问题:请问下这句QMPYL ACC,XT,*XAR1 ; ACC = VinvSqr * VacRect = Q24* Q24 = I16Q48 Q24*Q24为什么 ==I16*Q48 I18什么意思呢? LSL ACC,#8 ; ACC = I8Q24 为什么逻辑左移8位又变成了I8Q24呢? QMPYL ACC,XT,*XAR0 ; ACC= (I8Q24) * (I16Q16) = (I24Q40): upper 32-bits -> ACC = (I24Q8) 我们知道XT就是存放的周期值(300),而XAR0是Q24的占空比值,结果(周期*占空比为占空比真实值)为啥是I8Q24 * I16Q16呢?? 还有这这段: MOVW DP,#_EPwm:n:Regs.TBPRD MOVL ACC,@_EPwm:n:Regs.TBPRD MOV AL,#0 MOVW DP, #_PWMDRV_1ch_UpDwnCnt_Duty:n: MOVL @_PWMDRV_1ch_UpDwnCnt_Period:n:,ACC MOVL是移动32位数据,而_EPwm:n:Regs.TBPRD 是16位寄存器,那MOVL ACC,@_EPwm:n:Regs.TBPRD意思就是16位寄存器的值放到 32位的ACC里,是高16位补0吗?但看后面有句话MOV AL,#0 把低16位清0了,那前面这句话都没意义了。所以应该是低16位补0,对吗? |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
545 浏览 0 评论
1609 浏览 0 评论
2045 浏览 0 评论
为啥BQ7693003DBTR芯片在和BQ769X0盒子通讯时收不到信号?
1507 浏览 0 评论
DSP 28027F 开发板 XDS100v2调试探针诊断日志显示了 Error -150 (SC_ERR_FTDI_FAIL)如何解决
1331 浏览 0 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
1756浏览 29评论
2781浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
1723浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
1634浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
1645浏览 13评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 17:26 , Processed in 0.747073 second(s), Total 33, Slave 26 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
8770