📄 com_trig.asm
字号:
;--------------------------------------------------------------------------------
__CMTN_chk_trigger:
SBRK #9 ; ARP = AR5. AR5 -> zc_trig.
; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
LACC * ; ARP = AR5. AR5 -> zc_trig.
; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
BCND __Com_Trig_Exit,EQ
; Do nothing if no trigger
; ARP = AR5. AR5 -> zc_trig.
; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
ADRK #8 ; ARP = AR5. AR5 -> delay
; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
LACC * ; Accumulator = delay
; ARP = AR5. AR5 -> delay
; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
ADRK #2 ; ARP = AR5. AR5 -> noise_windowMax
; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
SUB *+ ; Accumulator = delay - noise_windowMax
; ARP = AR5. AR5 -> delay_cntr
; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
SACL * ; delay_cntr = delay - noise_windowMax
; ARP = AR5. AR5 -> delay_cntr
; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
SBRK #2 ; ARP = AR5. AR5 -> dt_taskFlg.
; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
SPLK #1,* ; dt_taskFlg = 1
; ARP = AR5. AR5 -> dt_taskFlg.
; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
B __Com_Trig_Exit
; ARP = AR5. AR5 -> dt_taskFlg.
; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
; ARP = AR5. AR5 -> dt_taskFlg.
; AR4 -> noise_windowCntr
__CMTN_count_dwn:
ADRK #2 ; ARP = AR5. AR5 -> delay_cntr.
; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
LACC * ; Load 30 degree counter value
; Accumulator = 30 degree counter value
; ARP = AR5. AR5 -> delay_cntr.
; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
SUB #1 ; Accumulator = delay_cntr-1
; ARP = AR5. AR5 -> delay_cntr
; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
SACL * ; delay_cntr = delay_cntr - 1
; ARP = AR5. AR5 -> delay_cntr.
; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
BCND __Com_Trig_Exit,NEQ
; reached zero?
; ARP = AR5. AR5 -> delay_cntr.
; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
SBRK #15 ; ARP = AR5. AR5 -> trig.
;--------------------------------------------------------------------------------
SPLK #CYCLE_LENGTH,*
; trig = 0x7fff
; Yes! - Set trigger. This is used as input
; to "MOD6_CNTR" module that changes the
; commutation sequence.
; AR4 -> noise_windowCntr
; ARP = AR5. AR5 -> trig.
;--------------------------------------------------------------------------------
ADRK #13 ; AR5 -> dt_taskFlg.
; AR4 -> noise_windowCntr
; ARP = AR5. AR5 -> trig.
;--------------------------------------------------------------------------------
SPLK #CLEAR,*
; dt_taskFlg = 0.
; AR5 -> dt_taskFlg.
; AR4 -> noise_windowCntr
; ARP = AR5. AR5 -> trig.
;================================================================================
__Com_Trig_Exit:
MAR *,AR1 ; Set ARP = AR1, in prepration for exit
SBRK __CMTN_framesize + 1
; AR1 = AR1 - framesize - 1.
LAR AR0,*- ; AR0 = Old FP.
PSHD * ; write return address on the hardware stack.
; ARP = AR1. AR1 = Old SP.
RET ; return to called function.
;================================================================================
_CMTN_STATE_TBL:
.word __CMTN_state_anb ;cmtn_ptr_ct = 0, de-energized phase = C
.word __CMTN_state_anc ;cmtn_ptr_ct = 1, de-energized phase = B
.word __CMTN_state_bnc ;cmtn_ptr_ct = 2, de-energized phase = A
.word __CMTN_state_bna ;cmtn_ptr_ct = 3, de-energized phase = C
.word __CMTN_state_cna ;cmtn_ptr_ct = 4, de-energized phase = B
.word __CMTN_state_cnb ;cmtn_ptr_ct = 5, de-energized phase = A
;================================================================================
;FUNCTION void Noise_Wind();
; ARP = AR4, AR4 -> noise_windowCntr.
; AR5 -> trig, AR0 -> FP. AR1 -> SP.
; AR2 -> FR1(neutral).
; Only Accumulator, AR4 and AR5 should be used.
; There should be no function call in the _Noise_Wind function
; as return address will not be saved in the software stack.
; Before returning from _Noise_Wind, make sure that AR4 and AR5
; will be pointing to the above mentioned structure members
_Noise_Wind:
ADRK #5 ; ARP = AR4. AR4 -> delay. AR5 -> trig
;--------------------------------------------------------------------------------
LACC *,AR5 ; Accumulator = delay.
; ARP = AR5. AR5 -> trig. AR4 -> delay.
;--------------------------------------------------------------------------------
ADRK #17 ; ARP = AR5. AR5->nw_dynThold.
; AR4 -> delay.
;--------------------------------------------------------------------------------
SUB *-,AR4 ; Accumulator = delay - nw_dynThold.
; AR5 -> cdnw_delta.
; ARP = AR4. AR4 -> delay.
;--------------------------------------------------------------------------------
BCND __NOISE_WIND_2,GEQ
; ARP = AR4. AR4 -> delay.
; AR5 -> cdnw_delta.
;--------------------------------------------------------------------------------
__NOISE_WIND_1:
; noise window adjusted dynamically
LACC *,AR5 ; Accumulator = delay.
; ARP = AR5. AR5 -> cdnw_delta.
; AR4 -> delay.
;--------------------------------------------------------------------------------
SUB * ; Accumulator = delay - cdnw_delta.
; ARP = AR5. AR5 -> cdnw_delta.
; AR4 -> delay.
;--------------------------------------------------------------------------------
SBRK #2 ; ARP = AR5. AR5 -> noise_windowMax.
; AR4 -> delay.
;--------------------------------------------------------------------------------
SACL *,AR4 ; noise_windowMax = delay - cdnw_delta.
; ARP = AR5. AR5 -> noise_windowMax.
; AR4 -> delay.
;--------------------------------------------------------------------------------
B __NOISE_WIND_3
; AR4 -> delay
; ARP = AR4, AR5 -> noise_windowMax
;--------------------------------------------------------------------------------
; ARP = AR4. AR4 -> delay AR5 -> cdnw_delta
__NOISE_WIND_2:
; noise window is fixed value
ADRK #5 ; ARP = AR4. AR4 -> nw_dynThold.
; AR5 ->cdnw_delta
;--------------------------------------------------------------------------------
LACC *,AR5 ; Accumulator = nw_dynThold.
; ARP = AR5. AR5 -> cdnw_delta.
; AR4 -> nw_dynThold.
;--------------------------------------------------------------------------------
SUB * ; Accumulator = nw_dynThold - cdnw_delta.
; ARP = AR5. AR5 -> cdnw_delta.
; AR4 -> nw_dynThold.
;--------------------------------------------------------------------------------
SBRK #2 ; ARP = AR5. AR5 -> noise_windowMax.
; AR4 -> nw_dynThold.
;--------------------------------------------------------------------------------
SACL *,AR4 ; noise_windowMax = nw_dynThold - cdnw_delta.
; ARP = AR4. AR4 -> nw_dynThold.
; AR5 -> noise_windowMax.
;--------------------------------------------------------------------------------
SBRK #5 ; AR4 -> delay.
; ARP = AR4. AR5 -> noise_windowMax.
;--------------------------------------------------------------------------------
; AR4 -> delay ARP = AR4. AR5 -> noise_windowMax.
__NOISE_WIND_3:
SBRK #5 ; AR5 -> noise_windowMax.
; AR4 -> noise_windowCntr. ARP = AR4.
;--------------------------------------------------------------------------------
LACC * ; Accumulator = noise_windowCntr.
; ARP = AR4. AR4 -> noise_windowCntr.
; AR5 -> noise_windowMax.
;--------------------------------------------------------------------------------
ADD #1 ; Accumulator = noise_windowCntr + 1.
; ARP = AR4. AR4 -> noise_windowCntr.
; AR5 -> noise_windowMax.
;--------------------------------------------------------------------------------
SACL *,AR5 ; noise_windowCntr = noise_windowCntr + 1.
; ARP = AR5. AR5 -> noise_windowMax
; AR4 -> noise_windowCntr.
;--------------------------------------------------------------------------------
SUB *,AR4 ; Accumulator = noise_windowCntr - noise_windowMax.
; ARP = AR4. AR4 -> noise_windowCntr.
; AR5 -> noise_windowMax
;--------------------------------------------------------------------------------
BCND __Noise_Wind_Exit,NEQ
; ARP = AR4. AR4 -> noise_windowCntr.
; AR5 -> noise_windowMax.
; zc must occur max_noise_window times.
;--------------------------------------------------------------------------------
__NOISE_WIND_clr_nw_s:
SPLK #CLEAR,*
; noise_windowCntr = 0.
; ARP = AR4. AR4 -> noise_windowCntr.
; AR5 -> noise_windowMax.
;--------------------------------------------------------------------------------
SBRK #3 ; ARP = AR4. AR4 -> zc_trig.
; AR5 -> noise_windowMax.
;--------------------------------------------------------------------------------
__NOISE_WIND_set_zc_s0:
SPLK #CYCLE_LENGTH,*
; zc_trig = 0x7fff; Yes! set zc_trigger
; ARP = AR4 -> zc_trig
; AR5 -> noise_windowMax.
;--------------------------------------------------------------------------------
ADRK #3 ; ARP = AR4. AR4 -> noise_windowCntr.
;================================================================================
; ARP = AR4. AR4 -> noise_windowCntr.
; AR5 -> noise_windowMax
__Noise_Wind_Exit:
MAR *,AR5 ; In order to point AR5 to trig
SBRK #14 ; AR5 -> trig
MAR *,AR4 ; Set ARP as AR4 before returning to the
; com_trig_calcfunction
RET ; Return
;================================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -