📄 f243bldcpwm2.asm
字号:
; Non fed phase Phase C
; *ACTR = 0x00C2.
B __PWM_state_end
; ARP = AR3. AR3 -> mfunc_p.
; AR2-> FR1.
;--------------------------------------------------------------------------
__PWM_state_anc: ; Input current path Phase A
POINT_EV ; Output Current Path Phase C
SPLK #0C02h,ACTR
; Non Fed Phase Phase B
; *ACTR = 0x0C02.
B __PWM_state_end
; ARP = AR3. AR3 -> mfunc_p.
; AR2-> FR1.
;--------------------------------------------------------------------------
__PWM_state_bnc: ; Input current path Phase B
POINT_EV ; Output Current Path Phase C
SPLK #0C20h,ACTR
; Non fed phase Phase A
; *ACTR = 0x0C20.
B __PWM_state_end
; ARP = AR3. AR3 -> mfunc_p.
; AR2-> FR1.
;--------------------------------------------------------------------------
__PWM_state_bna: ; Input current path Phase B
POINT_EV ; Output Current Path Phase A
SPLK #002Ch,ACTR
; Non fed phase Phase C
; *ACTR = 0x002C.
B __PWM_state_end
; ARP = AR3. AR3 -> mfunc_p.
; AR2-> FR1.
;--------------------------------------------------------------------------
__PWM_state_cna: ; Input current path Phase C
POINT_EV ; Output Current Path Phase A
SPLK #020Ch,ACTR
; Non Fed Phase Phase B
; *ACTR = 0x020C.
B __PWM_state_end
; ARP = AR3. AR3 -> mfunc_p.
; AR2-> FR1.
;--------------------------------------------------------------------------
__PWM_state_cnb: ; Input current path Phase C
POINT_EV ; Output Current Path Phase B
SPLK #02C0h,ACTR
; Non Fed Phase Phase A
; *ACTR = 0x02C0.
; ARP = AR3. AR3 -> mfunc_p.
; AR2-> FR1.
;================================================================================
__PWM_state_end:
;Convert "Period" (Q15) modulation function to Q0
LT *+ ; treg = mfunc_p.
; ARP = AR3. AR3 -> period_max.
; AR2 -> FR1.
;--------------------------------------------------------------------------
MPY *+,AR2 ; PREG = mfunc_p * period_max.
; AR3 -> d_func.
; ARP = AR2.
; AR2-> FR1.
;--------------------------------------------------------------------------
PAC ; Accumulator = mfunc_p * period_max.
; ARP = AR2. AR2 ->FR1
; AR3 -> d_func.
;--------------------------------------------------------------------------
SACH *+,1,AR3
; FR1(period) = mfunc_p * period_max (Q15)
; AR2 -> FR2.
; ARP = AR3. AR3 -> d_func.
;--------------------------------------------------------------------------
;Convert "D_func" (Q15) duty modulation function to Q0
.if (ACTIVE_HI) ; target dependancy
LACC #MAXPERIOD ; Accumulator = 0x7fff.
; ARP = AR3. AR3 -> d_func.
; AR2 -> FR2(temp_var2).
;--------------------------------------------------------------------------
SUB *,AR2 ; Accumulator = 0x7fff - d_func.
; ARP = AR2. AR2 -> FR2 (temp_var2).
;--------------------------------------------------------------------------
SACL * ; temp2_var = 0x7fff - d_func.
; ARP = AR2. AR2 -> FR2(temp_var2).
.endif
;--------------------------------------------------------------------------
.if (ACTIVE_LO) ; target dependancy
LACC *,AR2 ; Accumulator = d_func.
; ARP = AR2. AR2 -> FR2 (temp_var2).
;--------------------------------------------------------------------------
SACL * ; Accumulator = d_func.
; ARP = AR2. AR2 -> FR2 (temp_var2).
.endif
;--------------------------------------------------------------------------
LT *- ; TREG = temp2_var.
; ARP = AR2.
; AR2 -> FR1 (period i.e temp_var1).
;--------------------------------------------------------------------------
MPY *,AR1 ; PREG = period * d_func.
; ARP = AR1 (in preparation for exit)
; AR2 -> FR1 (period i.e temp_var1).
;-------------------------------------------------------------------------
PAC ; Accumulator = period * d_func.
; ARP = AR1.
;--------------------------------------------------------------------------
POINT_EV
SACH CMPR1,1 ; *CMPR1 = Accumulator * 2.
SACH CMPR2,1 ; *CMPR2 = Accumulator * 2.
SACH CMPR3,1 ; *CMPR3 = Accumulator * 2.
;================================================================================
__BLDC_PWM_Update_Exit:
;--------------------------------------------------------------------------------
SBRK #(__F243_BLDC_PWM_Update_framesize + 1)
; deallocate frame, point to saved FP
;--------------------------------------------------------------------------------
LAR AR0,*- ; restore frame pointer
PSHD * ; push return address on hardware stack
;--------------------------------------------------------------------------------
RET ; return to called function.
;================================================================================
;Commutation sequence jump table - used with BACC inst.
;----------------------------------------------------------------------------
_COMMUTATION_TBL:
.word __PWM_state_anb ; COMMUTATION_PTR = 0, de-energized phase = C
.word __PWM_state_anc ; COMMUTATION_PTR = 1, de-energized phase = B
.word __PWM_state_bnc ; COMMUTATION_PTR = 2, de-energized phase = A
.word __PWM_state_bna ; COMMUTATION_PTR = 3, de-energized phase = C
.word __PWM_state_cna ; COMMUTATION_PTR = 4, de-energized phase = B
.word __PWM_state_cnb ; COMMUTATION_PTR = 5, de-energized phase = A
;================================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -