📄 volt_cal.asm
字号:
;----------------------------------------------------------------------------------
SPLK #10923,* ; FR0 = 1/3
; ARP=AR0, AR0->FR0, AR2->Mfunc_V1
;----------------------------------------------------------------------------------
LT *,AR2 ; TREG = 1/3
; ARP=AR0, AR0->FR0, AR2->Mfunc_V1, ARP=AR2
;----------------------------------------------------------------------------------
MPY *+ ; PREG = Mfunc_V1/3
; ARP=AR2, AR0->FR0, AR2->Mfunc_V2
;----------------------------------------------------------------------------------
PAC ; ACC = Mfunc_V1/3
; ARP=AR2, AR0->FR0, AR2->Mfunc_V2
;----------------------------------------------------------------------------------
SFL ; ACC = 2*Mfunc_V1/3
; ARP=AR2, AR0->FR0, AR2->Mfunc_V2
;----------------------------------------------------------------------------------
MPY *+ ; PREG = Mfunc_V2/3
; ARP=AR2, AR0->FR0, AR2->Mfunc_V3
;----------------------------------------------------------------------------------
SPAC ; ACC = 2*Mfunc_V1/3 - Mfunc_V2/3
; ARP=AR2, AR0->FR0, AR2->Mfunc_V3
;----------------------------------------------------------------------------------
MPY *+ ; PREG = Mfunc_V3/3
; ARP=AR2, AR0->FR0, AR2->Vphase_A
;----------------------------------------------------------------------------------
SPAC ; ACC = 2*Mfunc_V1/3 - Mfunc_V2/3 - Mfunc_V3/3
; ARP=AR2, AR0->FR0, AR2->Vphase_A
;----------------------------------------------------------------------------------
SACH *+,1 ; Vphase_A = 2*Mfunc_V1/3 - Mfunc_V2/3 - Mfunc_V3/3
; ARP=AR2, AR0->FR0, AR2->Vphase_B
;----------------------------------------------------------------------------------
ADRK #2 ; ARP=AR2, AR0->FR0, AR2->Vdirect
;----------------------------------------------------------------------------------
SACH *,1 ; Vdirect = Vphase_A
; ARP=AR2, AR0->FR0, AR2->Vdirect
;----------------------------------------------------------------------------------
SBRK #5 ; ARP=AR2, AR0->FR0, AR2->Mfunc_V2
;----------------------------------------------------------------------------------
MPY *- ; PREG = Mfunc_V2/3
; ARP=AR2, AR0->FR0, AR2->Mfunc_V1
;----------------------------------------------------------------------------------
PAC ; ACC = Mfunc_V2/3
; ARP=AR2, AR0->FR0, AR2->Mfunc_V1
;----------------------------------------------------------------------------------
SFL ; ACC = 2*Mfunc_V2/3
; ARP=AR2, AR0->FR0, AR2->Mfunc_V1
;----------------------------------------------------------------------------------
MPY *+ ; PREG = Mfunc_V1/3
; ARP=AR2, AR0->FR0, AR2->Mfunc_V2
;----------------------------------------------------------------------------------
SPAC ; ACC = 2*Mfunc_V2/3 - Mfunc_V1/3
; ARP=AR2, AR0->FR0, AR2->Mfunc_V2
;----------------------------------------------------------------------------------
ADRK #1 ; ARP=AR2, AR0->FR0, AR2->Mfunc_V3
;----------------------------------------------------------------------------------
MPY *+ ; PREG = Mfunc_V3/3
; ARP=AR2, AR0->FR0, AR2->Vphase_A
;----------------------------------------------------------------------------------
SPAC ; ACC = 2*Mfunc_V2/3 - Mfunc_V1/3 - Mfunc_V3/3
; ARP=AR2, AR0->FR0, AR2->Vphase_A
;----------------------------------------------------------------------------------
ADRK #1 ; ARP=AR2, AR0->FR0, AR2->Vphase_B
;----------------------------------------------------------------------------------
SACH *-,1 ; Vphase_B = 2*Mfunc_V2/3 - Mfunc_V1/3 - Mfunc_V3/3
; ARP=AR2, AR0->FR0, AR2->Vphase_A
;----------------------------------------------------------------------------------
SBRK #1 ; ARP=AR2, AR0->FR0, AR2->Mfunc_V3
;----------------------------------------------------------------------------------
MPY *- ; PREG = Mfunc_V3/3
; ARP=AR2, AR0->FR0, AR2->Mfunc_V2
;----------------------------------------------------------------------------------
PAC ; ACC = Mfunc_V3/3
; ARP=AR2, AR0->FR0, AR2->Mfunc_V2
;----------------------------------------------------------------------------------
SFL ; ACC = 2*Mfunc_V3/3
; ARP=AR2, AR0->FR0, AR2->Mfunc_V2
;----------------------------------------------------------------------------------
MPY *- ; PREG = Mfunc_V2/3
; ARP=AR2, AR0->FR0, AR2->Mfunc_V1
;----------------------------------------------------------------------------------
SPAC ; ACC = 2*Mfunc_V3/3 - Mfunc_V2/3
; ARP=AR2, AR0->FR0, AR2->Mfunc_V1
;----------------------------------------------------------------------------------
MPY *+ ; PREG = Mfunc_V1/3
; ARP=AR2, AR0->FR0, AR2->Mfunc_V2
;----------------------------------------------------------------------------------
SPAC ; ACC = 2*Mfunc_V3/3 - Mfunc_V2/3 - Mfunc_V1/3
; ARP=AR2, AR0->FR0, AR2->Mfunc_V2
;----------------------------------------------------------------------------------
ADRK #4 ; ARP=AR2, AR0->FR0, AR2->Vphase_C
;----------------------------------------------------------------------------------
SACH *+,1,AR0 ; Vphase_C = 2*Mfunc_V3/3 - Mfunc_V2/3 - Mfunc_V1/3
; ARP=AR2, AR0->FR0, AR2->Vdirect, ARP=AR0
;----------------------------------------------------------------------------------
SPLK #18919,* ; FR0 = 1/sqrt(3)
; ARP=AR0, AR0->FR0, AR2->Vdirect
;----------------------------------------------------------------------------------
LT *,AR2 ; TREG = 1/sqrt(3)
; ARP=AR0, AR0->FR0, AR2->Vdirect, ARP=AR2
;----------------------------------------------------------------------------------
SBRK #3 ; ARP=AR2, AR0->FR0, AR2->Vphase_A
;----------------------------------------------------------------------------------
LACC *+ ; ACC = Vphase_A
; ARP=AR2, AR0->FR0, AR2->Vphase_B
;----------------------------------------------------------------------------------
SFR ; ACC = Vphase_A/2
; ARP=AR2, AR0->FR0, AR2->Vphase_B
;----------------------------------------------------------------------------------
ADD *+ ; ACC = Vphase_A/2 + Vphase_B
; ARP=AR2, AR0->FR0, AR2->Vphase_C
;----------------------------------------------------------------------------------
ADRK #2 ; ARP=AR2, AR0->FR0, AR2->Vquadra
;----------------------------------------------------------------------------------
SACL * ; Vquadra = Vphase_A/2 + Vphase_B
; ARP=AR2, AR0->FR0, AR2->Vquadra
;----------------------------------------------------------------------------------
MPY * ; PREG = (Vphase_A/2 + Vphase_B)/sqrt(3)
; ARP=AR2, AR0->FR0, AR2->Vquadra
;----------------------------------------------------------------------------------
PAC ; ACC = (Vphase_A/2 + Vphase_B)/sqrt(3)
; ARP=AR2, AR0->FR0, AR2->Vquadra
;----------------------------------------------------------------------------------
SFL ; ACC = (Vphase_A + 2*Vphase_B)/sqrt(3)
; ARP=AR2, AR0->FR0, AR2->Vquadra
;----------------------------------------------------------------------------------
SACH *,1,AR1 ; Vquadra = (Vphase_A + 2*Vphase_B)/sqrt(3)
; ARP=AR2, AR0->FR0, AR2->Vquadra, ARP=AR1
;----------------------------------------------------------------------------------
_phase_voltage_calc_exit:
;MAR *,AR1 ; can be removed if this condition is met on
; ; every path to this code. (i.e., ARP=AR1 here)
CLRC OVM
CLRC SXM
SBRK #(__phase_voltage_calc_framesize+1)
LAR AR0,*-
PSHD *
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -