volt_cal.asm
来自「无刷直流电机的无传感器控制TI程序」· 汇编 代码 · 共 289 行 · 第 1/2 页
ASM
289 行
;----------------------------------------------------------------------------------
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 + =
减小字号Ctrl + -
显示快捷键?