📄 sys_cur.asm
字号:
;=======================================================================
; File Name: sys_cur.asm
;
; Module Name: system current regulation
;
; Initialization Routine: SYS_CURRENT_INIT
;
; Description:
;
;
; ipa=ipa_old*0.8333+0.8333*(iap-iap_old)*1.7
; ipb=ipb_old*0.8333+0.8333*(ibp-ibp_old)*1.7
; ia_total=ipa+ipla
; ib_total=ipb+iplb
;
;
; Target dependency: C2xx core only
;
;
;=====================================================================================
;Module definitions for external reference.
; .ref sys_cur, sys_cur_init ;function call
; .ref iap,ibp,ipla,iplb ;inputs
; .ref ia_total,ib_total ;outputs
;=======================================================================
;Module definitions for external reference.
.def SYS_CUR,SYS_CUR_INIT ;function call
.def iap,ibp,ipla,iplb ;inputs
.def ia_total,ib_total ;outputs
;=======================================================================
.include "x24x_app.h"
; Variables
ipa .usect "sys_cur",1
ipb .usect "sys_cur",1
iap .usect "sys_cur",1
ibp .usect "sys_cur",1
ipla .usect "sys_cur",1
iplb .usect "sys_cur",1
iap_old .usect "sys_cur",1
ibp_old .usect "sys_cur",1
ipa_old .usect "sys_cur",1
ipb_old .usect "sys_cur",1
is_err .usect "sys_cur",1
ia_total .usect "sys_cur",1
ib_total .usect "sys_cur",1
klp .usect "sys_cur",1
klq .usect "sys_cur",1
;=========================
SYS_CUR_INIT:
;=========================
ldp #ipa
SPLK #0,ipa ;
SPLK #0,ipb ;
SPLK #0,ipa_old ;
SPLK #0,ipb_old ;
SPLK #0,iap ;
SPLK #0,ibp ;
SPLK #0,iap_old ;
SPLK #0,ibp_old ;
SPLK #0,is_err ;
SPLK #27304,klp ;Q15
; SPLK #27852,klq ;Q14 1.7
SPLK #30000,klq
SPLK #0,ipla ;
SPLK #0,iplb ;
RET
;=========================
SYS_CUR:
;=========================
SPM 1 ; Set SPM for Q15 math
SETC SXM ; Sign extension mode on
SETC OVM ; Set overflow mode
LDP #iap
LACC iap ; Q15
SUB iap_old ; Q15
SACL is_err ;Store error(Q15)
;is_err=iap-iap_old
LACC iap
SACL iap_old ;store new old value of iap
LT is_err ;Q15
MPY klp ;Q15
PAC ;ACC <--klp*is_err, Q31
SACH is_err ;Q15
LT is_err ;new value
MPY klq ;Q14
PAC ;ACC <--klq*is_err, Q30
MPY klq ;
LTA ipa_old ;ACC <-- ACC + klq*is_err, Q31
;treg<-- ipa_old
MPY klp ;Q15
APAC ;
SACH ipa ;Q15
SACH ipa_old ;store new old value of ipa
LACC ipa ;Q15
ADD ipla ;Q15
SACL ia_total ;Q15
LACC ibp ;Q15
SUB ibp_old ;Q15
SACL is_err ;Store error(Q15)
LACC ibp
SACL ibp_old ;store new old value of ibp
LT is_err ;new value
MPY klp ;Q15
PAC ;ACC <--klp*is_err, Q31
SACH is_err ;Q15
LT is_err ;new value
MPY klq ;Q14
PAC ;ACC <--klq*is_err, Q30
MPY klq ;
LTA ipb_old ;ACC <-- ACC + klq*is_err, Q31
;treg<-- ipb_old
MPY klp ;Q15
APAC
SACH ipb ;Q15
SACH ipb_old ;store new old value of ipb
LACC ipb ;Q15
ADD iplb ;Q15
SACL ib_total ;Q15
SPM 0 ; SPM reset
CLRC SXM
CLRC OVM
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -