;=============================
SOLAR_CNTL_2P2Z .macro n
;=============================
; set up address pointers
MOVW DP, #_CNTL_2P2Z_Ref:n:
MOVL XAR0, @_CNTL_2P2Z_Ref:n: ; net pointer to Ref (XAR0)
MOVW DP,#_CNTL_2P2Z_Fdbk:n:
MOVL XAR1, @_CNTL_2P2Z_Fdbk:n: ; net pointer to Fdbk (XAR1)
MOVW DP,#_CNTL_2P2Z_DBUFF:n:
MOVL XAR4, #_CNTL_2P2Z_DBUFF:n: ; pointer to the DBUFF array (used internally by the module)
; calculate error (Ref - Fdbk)
MOVL ACC, *XAR0 ; ACC = Ref (Q24) = Q(24)
SUBL ACC, *XAR1 ; ACC = Ref(Q24) - Fdbk(Q24)= error(Q24)
LSL ACC, #6 ; Logical left shift by 6, Q{24}<<6 -> Q{30}
;store error in DBUFF
MOVL *+XAR4[6], ACC ; e(n) = ACC = error Q{30} ; *+XAR4[6]装载e(n)
MOV AR0,#8
SUBL ACC, *+XAR4[AR0] ;*+XAR4[8]装载e(n-2)
ADDL ACC, *+XAR4[6]
MOVL *+XAR4[4], ACC ;*+XAR4[4]---2e(n)-e(n-2)
ADDL ACC, *+XAR4[6] ;*+XAR4[4]装载2e(n)-e(n-2)
MOVW DP,#_CNTL_2P2Z_Out:n:
MOVL XAR2, @_CNTL_2P2Z_Out:n: ; net pointer to Out (XAR2)
MOVW DP,#_CNTL_2P2Z_Coef:n:
MOVL XAR3, @_CNTL_2P2Z_Coef:n: ; net pointer to Coef (XAR3)
ZAPA
; compute 2P2Z filter
MOV AR0,#8
MOVL XT, *+XAR4[AR0] ; XT = e(n-2)
QMPYL P, XT, *XAR3++ ; P = e(n-2)Q30*B2{Q26} = I8Q24
MOVDL XT, *+XAR4[6] ; XT = e(n-1), e(n-2) = e(n-1) 这一句明显指 *+XAR4[6]装的是e(n-1),和上面 ; 语句ADDL ACC, *+XAR4[6] ;*+XAR4[4]装载2e(n)-e(n-2) 矛盾
QMPYAL P, XT, *XAR3++ ; P = e(n-1)Q30*B1{Q26} = Q24, ACC=e(n-2)*B2
;MOVDL XT, *+XAR4[4] ; XT = e(n), e(n-1) = e(n)
MOVL XT, *+XAR4[4] ; XT = e(n)
QMPYAL P, XT, *XAR3++ ; P = e(n)Q30*B0{Q26}= Q24, ACC = e(n-2)*B2 + e(n-1)*B1
MOVL XT,*+XAR4[2] ; XT = u(n-2)
QMPYAL P, XT, *XAR3++ ; P = u(n-2)*A2, ACC = e(n-2)*B2 + e(n-1)*B1 + e(n)*B0
MOVDL XT,*+XAR4[0] ; XT = u(n-1), u(n-2) = u(n-1)
QMPYAL P, XT, *XAR3++ ; P = u(n-1)*A1, ACC = e(n-2)*B2 + e(n-1)*B1 + e(n)*B0 + u(n-2)*A2
ADDL ACC, @P ; ACC = e(n-2)*B2 + e(n-1)*B1 + e(n)*B0 + u(n-2)*A2 + u(n-1)*A1
; scale u(n):Q24, saturate (max>u(n)>min0), and save history
MINL ACC, *XAR3++ ; saturate to < max (Q24)
MAXL ACC, *XAR3 ; saturate to > min (Q24)
; write controller result to output terminal (Q24)
MOVL *XAR2, ACC ; output control effort to terminal net
; Convert the u(n) to Q30 format and store in the data buffer
LSL ACC, #6 ; Logical left shift by 6, Q{24}<<6 -> Q{30}
MOVL *XAR4, ACC ; u(n-1) = u(n) = ACC
.endm
; end of file
上面一段程序表明 *+XAR4[6]装载e(n) ,*+XAR4[4]装载2e(n)-e(n-2) ,到了下面的那一段计算程序,明显是*+XAR4[4]装载e(n) ,*+XAR4[6]装载e(n-1),请解读一下,谢谢!