📄 pid_reg2.asm
字号:
*******************************************************
* TMS320C24xx ANSI C Codegen Version 7.04
*******************************************************
; dspac -i../src -v2xx -iD:/CCStudio_v3.1/c2400/cgtools/include pid_reg2.c C:\DOCUME~1\liuping\LOCALS~1\Temp\pid_reg2.if
; dspopt NOT RUN
; dspcg -o -v2xx -o C:\DOCUME~1\liuping\LOCALS~1\Temp\pid_reg2.if C:\DOCUME~1\liuping\LOCALS~1\Temp\pid_reg2.asm C:\DOCUME~1\liuping\LOCALS~1\Temp\pid_reg2.tmp
.port
.file "pid_reg2.c"
.file "../src\PID2.h"
.stag .fake0,208
.member _fb_reg2,0,4,8,16
.member _ref_reg2,16,4,8,16
.member _k0_reg2,32,4,8,16
.member _k1_reg2,48,4,8,16
.member _kc_reg2,64,4,8,16
.member _un_reg2,80,4,8,16
.member _en0_reg2,96,4,8,16
.member _upi_reg2,112,4,8,16
.member _epi_reg2,128,4,8,16
.member _max_reg2,144,4,8,16
.member _min_reg2,160,4,8,16
.member _out_reg2,176,4,8,16
.member _calc,192,148,8,16
.eos
.sym _PID2,0,8,13,208,.fake0
.sym _PID2_handle,0,24,13,16,.fake0
.globl _pid2_calc
.file "pid_reg2.c"
.text
.sym _pid2_calc,_pid2_calc,32,2,0
.globl _pid2_calc
.func 10
;>>>> void pid2_calc(PID2 *v)
******************************************************
* FUNCTION DEF : _pid2_calc
******************************************************
_pid2_calc:
LF1 .set 0
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,8
LAR AR0,*0+,AR2
.sym _v,-3+LF1,24,9,16,.fake0
.sym _Up,1,4,1,16
.sym _UpTemp,2,5,1,32
.sym _UiTemp,4,5,1,32
.line 2
;>>>> int Up;
;>>>> long UpTemp,UiTemp;
;>>>> // Compute the error
.line 6
;>>>> v->en0_reg2 = v->ref_reg2 - v->fb_reg2;
;>>>> // Compute the proportional output
LARK AR2,-3+LF1
MAR *0+
LAR AR3,*
LAR AR4,* ,AR4
SSXM
MAR *+
LAC * ,AR3
SUB *
ADRK 6
SACL *
.line 9
;>>>> UpTemp = ((long)(v->k0_reg2))*((long)(v->en0_reg2));
LT * ,AR4
MAR *+
MPY * ,AR2
ADRK 5-LF1
SPL *+
SPH *-
.line 10
;>>>> UpTemp = UpTemp>>9;
RSXM
LAC *+,7,AR0
SACH *,AR2
SSXM
LAC *-,7,AR0
OR *,AR2
SACL *+
SACH *-
.line 11
;>>>> Up = (int)UpTemp;
;>>>> // Compute the integral output
LAC *-
SACL *+
.line 14
;>>>> UiTemp = ((long)(v->k1_reg2))*UpTemp;
ZALS *+
ADDH * ,AR1
SACL *+
SACH *+
SACL *+,AR3
SBRK 3
LAC * ,AR1
MAR *-
CALL L$$MPY
MAR * ,AR2
MAR *+
SACL *+
SACH *-
.line 15
;>>>> UiTemp = UiTemp>>13;
RSXM
LAC *+,3,AR0
SACH *,AR2
SSXM
LAC *-,3,AR0
OR *,AR2
SACL *+
SACH * ,AR3
.line 16
;>>>> v->un_reg2 = v->un_reg2 + (int)UiTemp + (int)(((long)(v->kc_reg2)*(long)(v->upi_reg2))>>13);
;>>>> // Compute the derivative output
;>>>> //v->Ud = (int)((long)((v->Kd)*(v->Up - v->Up1))>>13);
;>>>> // Compute the pre-saturated output
;>>>> //v->OutPreSat = v->Up + v->Ui + v->Ud;
ADRK 4
LT * ,AR4
ADRK 2
MPY * ,AR2
MAR *+
SPL *+
SPH *-
RSXM
LAC *+,3,AR0
SACH *,AR2
SSXM
LAC * ,3,AR0
OR *,AR1
SACL *+,AR3
SBRK 2
LAC * ,AR2
SBRK 3
ADD * ,AR1
MAR *-
ADD * ,AR3
SACL *
.line 23
;>>>> v->epi_reg2 = Up + v->un_reg2;
;>>>> // Saturate the output
LAC * ,AR2
SBRK 3
ADD * ,AR3
ADRK 3
SACL * ,AR4
.line 25
;>>>> if (v->epi_reg2 > v->max_reg2)
ADRK 4
LAC * ,AR3
MAR *+
SUB *
BLEZ L1
.line 26
;>>>> v->out_reg2 = v->max_reg2;
LAC * ,AR4
ADRK 3
SACL *
B L2
L1:
.line 27
;>>>> else if (v->epi_reg2 < v->min_reg2)
MAR *+,AR4
LAC * ,AR3
SUB *
BGEZ L3
.line 28
;>>>> v->out_reg2 = v->min_reg2;
;>>>> else
LAC * ,AR4
ADRK 3
SACL *
B L2
L3:
.line 30
;>>>> v->out_reg2 = v->epi_reg2;
;>>>> // Compute the saturate difference
SBRK 2
LAC * ,AR4
ADRK 3
SACL *
L2:
.line 33
;>>>> v->upi_reg2 = v->out_reg2 - v->epi_reg2;
;>>>> // Update the previous proportional output
;>>>> //v->Up1 = v->Up;
MAR * ,AR2
SBRK 4-LF1
LAR AR3,* ,AR3
ADRK 11
LAC * ,AR4
SBRK 3
SUB * ,AR3
SBRK 4
SACL * ,AR1
EPI0_1:
.line 38
SBRK 9
LAR AR0,*-
PSHD *
RET
.endfunc 47,000000000H,8
*****************************************************
* UNDEFINED REFERENCES *
*****************************************************
.global L$$MPY
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -