CONTRILSUITE中有关移相全桥有些汇编代码有点奇怪.您能否帮助解释一下,在此先谢谢!
1,;=============================
CNTL_2P2Z .macro n
;=============================
; set up address pointers
MOVW DP, #_CNTL_2P2Z_Ref:n:
这里的N是否可以理解为参数,若N=1,如上是否可等价于….. #_CNTL_2P2Z_Ref1?将_CNTL_2P2Z_Ref1所处数据页指针给DP?同#立即数赋数值不同?
MOVL XAR1, @_CNTL_2P2Z_Fdbk:n: ; net pointer to Fdbk (XAR1)
将_CNTL_2P2Z_Fdbk:n:内容给XAR1吗?
MOVW DP,#_CNTL_2P2Z_DBUFF:n:
MOVL XAR4, #_CNTL_2P2Z_DBUFF:n: ; pointer to the DBUFF array (used internally by the module)
将_CNTL_2P2Z_DBUFF:n指针给XAR4吗?
; calculate error (Ref – Fdbk)
MOVL ACC, *XAR0 ; ACC = Ref (Q24) = Q(24)
结合前面代码,将_CNTL_2P2Z_Ref:n:内容作为指针的值传给ACC呢?
SUBL ACC, *XAR1 ; ACC = Ref(Q24) – Fdbk(Q24)= error(Q24)
同样,减XAR1的内容还是减指针的内容?
MOVL *+XAR4[4], ACC ; e(n) = ACC = error Q{30} *+XAR4[4]相当复杂,结合顺序如何,如何赋值?
MOV AR0,#8
是AR0=8吗?
MOVL XT, *+XAR4[AR0] ; XT = e(n-2)
*+XAR4[AR0]如何理解?
QMPYL P, XT, *XAR3++ ; P = e(n-2)Q30*B2{Q26} = I8Q24
三段一般阅读规律如何,是P=XT乘*XAR3后XAR3内容或指针或值加1吗?
*XAR3++如何解读?这里如何知晓Q30,Q26,Q24?
MOVDL XT, *+XAR4[6] ; XT = e(n-1), e(n-2) = e(n-1)
是先将*XAR4[6]指针+1内容给XT?
2,net pointer 是何目的,有合适中文吗?
3,Q浮点数据,如何确定是Q18,Q同一个数据,针对不同的Q有不同的10进制值.如何判定?是有接收的变量定还是输入时必须带Q标记?如下,如何确定他的10进制值?
DCDC_VLOOP_COEFF1:
.long 141465485 ; B2
4,Signal Nets和Terminal pointers中文及意义是啥?
Step3. (optional) Declare “Signal Nets” to “connect” the module to in “C”
int Net1, Net2, Net3;
Step4. Declare the module “Terminal pointers” in “C”
// CNTL_2P2Z terminal external references for 1st instantiation
extern int *CNTL_2P2Z_Ref1, *CNTL_2P2Z_Fdbk1, *CNTL_2P2Z_Out1;
allen huang1:悲剧,没人理会。。。。
CONTRILSUITE中有关移相全桥有些汇编代码有点奇怪.您能否帮助解释一下,在此先谢谢!
1,;=============================
CNTL_2P2Z .macro n
;=============================
; set up address pointers
MOVW DP, #_CNTL_2P2Z_Ref:n:
这里的N是否可以理解为参数,若N=1,如上是否可等价于….. #_CNTL_2P2Z_Ref1?将_CNTL_2P2Z_Ref1所处数据页指针给DP?同#立即数赋数值不同?
MOVL XAR1, @_CNTL_2P2Z_Fdbk:n: ; net pointer to Fdbk (XAR1)
将_CNTL_2P2Z_Fdbk:n:内容给XAR1吗?
MOVW DP,#_CNTL_2P2Z_DBUFF:n:
MOVL XAR4, #_CNTL_2P2Z_DBUFF:n: ; pointer to the DBUFF array (used internally by the module)
将_CNTL_2P2Z_DBUFF:n指针给XAR4吗?
; calculate error (Ref – Fdbk)
MOVL ACC, *XAR0 ; ACC = Ref (Q24) = Q(24)
结合前面代码,将_CNTL_2P2Z_Ref:n:内容作为指针的值传给ACC呢?
SUBL ACC, *XAR1 ; ACC = Ref(Q24) – Fdbk(Q24)= error(Q24)
同样,减XAR1的内容还是减指针的内容?
MOVL *+XAR4[4], ACC ; e(n) = ACC = error Q{30} *+XAR4[4]相当复杂,结合顺序如何,如何赋值?
MOV AR0,#8
是AR0=8吗?
MOVL XT, *+XAR4[AR0] ; XT = e(n-2)
*+XAR4[AR0]如何理解?
QMPYL P, XT, *XAR3++ ; P = e(n-2)Q30*B2{Q26} = I8Q24
三段一般阅读规律如何,是P=XT乘*XAR3后XAR3内容或指针或值加1吗?
*XAR3++如何解读?这里如何知晓Q30,Q26,Q24?
MOVDL XT, *+XAR4[6] ; XT = e(n-1), e(n-2) = e(n-1)
是先将*XAR4[6]指针+1内容给XT?
2,net pointer 是何目的,有合适中文吗?
3,Q浮点数据,如何确定是Q18,Q同一个数据,针对不同的Q有不同的10进制值.如何判定?是有接收的变量定还是输入时必须带Q标记?如下,如何确定他的10进制值?
DCDC_VLOOP_COEFF1:
.long 141465485 ; B2
4,Signal Nets和Terminal pointers中文及意义是啥?
Step3. (optional) Declare “Signal Nets” to “connect” the module to in “C”
int Net1, Net2, Net3;
Step4. Declare the module “Terminal pointers” in “C”
// CNTL_2P2Z terminal external references for 1st instantiation
extern int *CNTL_2P2Z_Ref1, *CNTL_2P2Z_Fdbk1, *CNTL_2P2Z_Out1;
wang wang hongxing:
回复 allen huang1:
我也在用这个移向全桥的例子做程序,对汇编是懂非懂。
感觉上在C程序中定义的变量用以下与汇编中用到的变量捆绑
// Lib Module connection to "nets" //—————————————-// ADC feedback connections ADCDRV_4ch_RltPtrA = &Adc_VavgBus[1]; ADCDRV_4ch_RltPtrB = &Adc_VavgBus[2]; ADCDRV_4ch_RltPtrC = &Adc_VavgBus[3]; ADCDRV_4ch_RltPtrD = &Adc_VavgBus[4];
ADCDRV_1ch_Rlt2 = &Adc_Ifb; ADCDRV_1ch_Rlt3 = &Adc_Vfbin; ADCDRV_1ch_Rlt9 = &Adc_Iout;
// 2P2Z connections for the outer Voltage Loop CNTL_2P2Z_Ref1 = &VfbSetSlewed; // Slewed Voltage command CNTL_2P2Z_Out1 = &Iref; // Reference command to the current loop CNTL_2P2Z_Fdbk1 = &Avg_Vout; // Avg. FB O/P Voltage feedback CNTL_2P2Z_Coef1 = &CNTL_2P2Z_CoefStruct1.b2; // point to first coeff.
// DAC connections DACDRV_RAMP_In1 = &Iref; // Controls the DAC reference voltage
然后程序中只管使用变量值,变量值在运行已经被中断程序HVPSFB-DPL-ISR.ASM修改过,至于中断程序中是怎么修改的,可以不考虑。如果考虑就要看看28X的汇编手册,能查到每条语句是什么意思,应该不至于理解不了。参见TMS320C28x Assembly Language Tools v6.2 User's Guide (Rev. F)