📄 com_trig.asm
字号:
; AR5-> trig.
;--------------------------------------------------------------------------------
ADD *,AR2 ; Accumulator = 3 * va.
; neutral = 3 * neutral voltage (Vn)
; ARP = AR2. AR2 -> FR1 (neutral).
; AR3 -> va. AR4 -> debug_Bemf.
; AR5-> trig.
;--------------------------------------------------------------------------------
SUB *,AR4 ; Accumulator = 3 * va - neutral = 3*Va - 3*Vn.
; ARP = AR4. AR4 -> debug_Bemf.
; AR2 -> FR1 (neutral). AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
SACL *+ ; debug_Bemf = 3 * va - neutral = 3*Va - 3*Vn.
; ARP = AR4. AR4 -> noise_windowCntr.
; AR2 -> FR1 (neutral). AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
BCND __CMTN_clr_nw_s5,LT
; ARP = AR4. AR4 -> noise_windowCntr.
; AR2 -> FR1 (neutral). AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
CALL _Noise_Wind
; ARP = AR4. AR4 -> noise_windowCntr.
; AR2 -> FR1 (neutral). AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
B __CMTN_delay_30
; Goto delay_30.
; ARP = AR4. AR4 -> noise_windowCntr.
; AR2 -> FR1 (neutral). AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
; ARP = AR4. AR4 -> noise_windowCntr.
; AR2 -> FR1 (neutral). AR3 -> va.
; AR5-> trig.
__CMTN_clr_nw_s5:
SPLK #CLEAR,*
; noise_windowCntr = 0.
; ARP = AR4. AR4 -> noise_windowCntr.
; AR2 -> FR1 (neutral). AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
; Delay 30 degree calculator
; ARP = AR4. AR4 -> noise_windowCntr.
; AR2 -> FR1 (neutral). AR3 -> va.
; AR5-> trig.
__CMTN_delay_30:
MAR *+ ; ARP = AR4. AR4 -> d30_doneFlg.
; AR2 -> FR1 (neutral). AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
LACC *+ ; Accumulator = d30_doneFlg.
; ARP = AR4. AR4 -> time_stampNew
; AR2 -> FR1 (neutral). AR3 -> va.
; AR5-> trig.
;----------------------------------------------------------------------------------
BCND __CMTN_st_end,NEQ
; If gone through once, skip
; ARP = AR4. AR4 -> time_stampNew
; AR2 -> FR1 (neutral). AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
LACC *+ ; Accumulator = time_stampNew.
; ARP = AR4. AR4 -> time_stampOld.
; AR2 -> FR1 (neutral). AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
SACL *+ ; time_stampOld = time_stampNew.
; ARP = AR4. AR4 -> v_timer.
; AR2 -> FR1 (neutral). AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
LACC * ; Accumulator = v_timer;
; ARP = AR4. AR4 -> v_timer.
; AR2 -> FR1 (neutral). AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
SBRK #2 ; ARP = AR4. AR4 -> time_stampNew.
; AR2 -> FR1 (neutral). AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
SACL *+ ; time_stampNew = v_timer
; ARP = AR4. AR4 -> time_stampOld.
; AR2 -> FR1 (neutral). AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
SUB *,AR2 ; Accumulator = time_stampNew - time_stampOld.
; ARP = AR2. AR2 -> FR1(neutral).
; AR4 -> time_stampOld. AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
BCND __CMTN_neg_delta,LT
; If period is negative ,allow "wrapping"
; ARP = AR2. AR2 -> FR1(neutral).
; AR4 -> time_stampOld. AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
; ARP = AR2. AR2 -> FR1(neutral).
; AR4 -> time_stampOld. AR3 -> va.
; AR5-> trig.
__CMTN_pos_delta:
SACL *,AR4 ; Store to temp_var1 (rev_period) =
; time_stampNew - time_stampOld.
; ARP = AR4. AR4 -> time_stampOld.
; AR2 -> FR1 (rev_period). AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
B __CMTN_delay_div12
; ARP = AR4. AR4 -> time_stampOld.
; AR2 -> FR1 (rev_period). AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
; ARP = AR2. AR2 -> FR1(neutral).
; AR4 -> time_stampOld. AR3 -> va.
; AR5-> trig.
__CMTN_neg_delta:
ADD #CYCLE_LENGTH
; ACC = 0x7fffh + (time_stampNew - time_stampOld).
; ARP = AR2. AR2 -> FR1.
; AR4 -> time_stampOld. AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
SACL *,AR4 ; FR1 (rev_period) =
; time_stampNew - time_stampOld.
; ARP = AR4. AR4 -> time_stampOld.
; AR2 -> FR1 (rev_period). AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
; Accumulator = rev_period. ARP = AR4.
; AR4 -> time_stampOld.
; AR2 -> FR1 (rev_period). AR3 -> va.
; AR5-> trig.
__CMTN_delay_div12:
ADRK #2 ; ARP = AR4. AR4 -> delay
; AR2 -> FR1 (rev_period). AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
SPLK #12,* ; delay = 12.
; ARP = AR4. AR4 -> delay
; AR2 -> FR1 (rev_period). AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
RPT #15 ; Repeat (15+1 => 16)times next instruction
; AR2 -> FR1 (rev_period). AR3 -> va.
; AR5-> trig.
; ARP = AR4. AR4 -> delay
;--------------------------------------------------------------------------------
SUBC * ; To divide rev_period by 12.
; Quotient will be in LSW of ACC
; Remainder will be in MSW of ACC
; AR2 -> FR1 (rev_period). AR3 -> va.
; AR5-> trig.
; ARP = AR4. AR4 -> delay
;--------------------------------------------------------------------------------
MAR *,AR2 ; ARP = AR2. AR2 -> FR1. AR3 -> va.
; AR5-> trig.
; ARP = AR4. AR4 -> delay
;--------------------------------------------------------------------------------
SACH *,AR4 ; AR2-> FR1(Remainder).
; ARP = AR4. AR4 -> delay. AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
AND #0ffffh ; Remove remainder part of ACC.
; AR2-> FR1(Remainder).
; ARP = AR4. AR4 -> delay. AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
; allow rounding
;--------------------------------------------------------------------------------
SACL *,AR2 ; delay = rev_period/12.
; ARP = AR2. AR4 -> delay.
; AR2 -> FR1 (Remainder).AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
LACC *,AR4 ; ACC = Remainder.
; ARP = AR4. AR4 -> delay.
; AR2 -> FR1 (Remainder).AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
SUB #6 ; ACC = Remainder - 6.
; ARP = AR4. AR4 -> delay.
; AR2 -> FR1 (Remainder).AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
BCND __CMTN_same_delay,LT
; ARP = AR4. AR4 -> delay.
; AR2 -> FR1 (Remainder).AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
LACC * ; Accumulator = delay.
; ARP = AR4. AR4 -> delay.
; AR2 -> FR1 (Remainder).AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
ADD #1 ; Accumulator = delay + 1.
; ARP = AR4. AR4 -> delay.
; AR2 -> FR1 (Remainder).AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
SACL * ; delay = delay + 1.
; ARP = AR4. AR4 -> delay.
; AR2 -> FR1 (Remainder).AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
; ARP = AR4. AR4 -> delay.
; AR2 -> FR1 (Remainder).AR3 -> va.
; AR5-> trig.
__CMTN_same_delay:
;--------------------------------------------------------------------------------
SBRK #4 ; ARP = AR4. AR4 -> d30_doneFlag
; AR2 -> FR1 (Remainder).AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
SPLK #GONE_THRO_ONCE,*
; d30_doneFlag = 15
; ARP = AR4. AR4 -> d30_doneFlag
; AR2 -> FR1 (Remainder).AR3 -> va.
; AR5-> trig.
;--------------------------------------------------------------------------------
; ARP = AR4. AR4 -> noise_windowCntr.
; AR2 -> FR1 (neutral). AR5->trig
__CMTN_st_end:
;--------------------------------------------------------------------------------
; zero crossing to commutation trigger delay
;--------------------------------------------------------------------------------
MAR *, AR5 ; ARP = AR5. AR5 -> trig
; AR4 -> noise_windowCntr.
;--------------------------------------------------------------------------------
SPLK #CLEAR,*
; trig = 0;
; AR5 -> trig. ARP = AR5.
; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
ADRK #13 ; ARP = AR5. AR4 -> noise_windowCntr
; AR5 -> dt_taskFlg
;--------------------------------------------------------------------------------
LACC * ; Accumulator = dt_taskFlg
; ARP = AR5. AR4 -> noise_windowCntr
; AR5 -> dt_taskFlg
;--------------------------------------------------------------------------------
BCND __CMTN_count_dwn,NEQ
; ARP = AR5. AR5 -> dt_taskFlg.
; AR4 -> noise_windowCntr
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -