imvcf07.asm
来自「2407的交流电机控制程序」· 汇编 代码 · 共 1,275 行 · 第 1/2 页
ASM
1,275 行
MAR * ,AR0
SSXM ;;;
L5:
*** -----------------------g5:
*** 189 ----------------------- offset_ia = 0u;
.line 11
LACK 0
LDPK _offset_ia
SACL _offset_ia
*** 190 ----------------------- offset_ib = 0u;
.line 12
LDPK _offset_ib
SACL _offset_ib
*** 192 ----------------------- if ( (i = 0) >= 64 ) goto g11;
.line 14
LARK AR6,0
SAR AR6,*
LAC *
SUBK 64
BGEZ L11
MAR * ,AR1
L7:
*** -----------------------g7:
*** 194 ----------------------- get_adc_pair1();
.line 16
CALL _get_adc_pair1,AR1
*** 195 ----------------------- i_a_offset = ad_res_0>>1;
.line 17
RSXM
LDPK _ad_res_0
LAC _ad_res_0,14
MAR * ,AR2
LARK AR2,2
MAR *0+
SACH *+,1
*** 196 ----------------------- i_b_offset = ad_res_1>>1;
.line 18
LDPK _ad_res_1
LAC _ad_res_1,14
SACH *-,1
*** 197 ----------------------- i_a = i_a_offset>>5;
.line 19
LAC *+,10
LDPK _i_a
SACH _i_a,1
*** 198 ----------------------- i_b = i_b_offset>>5;
.line 20
LAC * ,10,AR0
LDPK _i_b
SACH _i_b,1
*** 199 ----------------------- offset_ia += i_a;
.line 21
LDPK _i_a
LAC _i_a
LDPK _offset_ia
ADD _offset_ia
SACL _offset_ia
*** 200 ----------------------- offset_ib += i_b;
.line 22
LDPK _i_b
LAC _i_b
LDPK _offset_ib
ADD _offset_ib
SACL _offset_ib
*** 201 ----------------------- if ( (j = 0) >= 32 ) goto g10;
.line 23
LARK AR7,0
SAR AR7,*
SSXM
LAC *
SUBK 32
BGEZ L10
MAR * ,AR5
L9:
*** -----------------------g9:
*** 203 ----------------------- i_ww = 0;
.line 25
LARK AR5,0
*** 203 ----------------------- ++i_ww;
MAR *+,AR7
*** 201 ----------------------- if ( (++j) < 32 ) goto g9;
.line 23
MAR *+,AR0
SAR AR7,*
LAC * ,AR5
SUBK 32
BLZ L9
L10:
*** -----------------------g10:
*** 192 ----------------------- if ( (++i) < 64 ) goto g7;
.line 14
MAR * ,AR6
MAR *+,AR0
SAR AR6,*
LAC * ,AR1
SUBK 64
BLZ L7
L11:
*** -----------------------g11:
*** 207 ----------------------- offset_ia += 32u;
.line 29
LDPK _offset_ia
LAC _offset_ia
ADDK 32
SACL _offset_ia
*** 208 ----------------------- offset_ib += 32u;
.line 30
LDPK _offset_ib
LAC _offset_ib
ADDK 32
SACL _offset_ib
*** 209 ----------------------- offset_ia >>= 6;
.line 31
RSXM
LDPK _offset_ia
LAC _offset_ia,9
SACH _offset_ia,1
*** 210 ----------------------- offset_ia *= 64u;
.line 32
LAC _offset_ia,6
SACL _offset_ia
*** 211 ----------------------- offset_ib >>= 6;
.line 33
LDPK _offset_ib
LAC _offset_ib,9
SACH _offset_ib,1
*** 212 ----------------------- offset_ib *= 64u;
.line 34
LAC _offset_ib,6
SACL _offset_ib
*** 214 ----------------------- i_a = 0;
.line 36
LACK 0
LDPK _i_a
SACL _i_a
*** 215 ----------------------- i_b = 0;
.line 37
LDPK _i_b
SACL _i_b
*** 187 ----------------------- if ( (++i_wwww) < 10 ) goto g5;
.line 9
SSXM
MAR * ,AR2
LARK AR2,1
MAR *0+
LAC *
ADDK 1
SACL * ,AR0
SUBK 10
BLZ L5
*** -----------------------g12:
*** ----------------------- return;
EPI0_9:
.line 39
MAR * ,AR1
; <restore register vars>
MAR *-
LAR AR7,*-
LAR AR6,*
SBRK 5
LAR AR0,*-
PSHD *
RET
.endfunc 217,0000000c0H,4
.sym _init_logger,_init_logger,32,2,0
.globl _init_logger
.func 226
******************************************************
* FUNCTION DEF : _init_logger
******************************************************
_init_logger:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,1
LAR AR0,*0+
*** 228 ----------------------- log_count = 0u;
.line 3
LACK 0
LDPK _log_count
SACL _log_count
*** 229 ----------------------- log_time = 0u;
.line 4
LDPK _log_time
SACL _log_time
*** ----------------------- return;
EPI0_10:
.line 5
SBRK 2
LAR AR0,*-
PSHD *
RET
.endfunc 230,000000000H,1
.sym _logger,_logger,32,2,0
.globl _logger
.func 239
******************************************************
* FUNCTION DEF : _logger
******************************************************
_logger:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,1
LAR AR0,*0+
*
* AR5 assigned to variable crt_p
*
*** 241 ----------------------- if ( log_time < log_indx || log_indx == 0xffffu ) goto g6;
.line 3
LDPK _log_time
ZALS _log_time
LDPK _log_indx
SUBS _log_indx
BLZ L18
ZALS _log_indx
RSXM
SUBK -1
BZ L18
*** 243 ----------------------- crt_p = &log_p[0];
.line 5
LRLK AR5,_log_p
*** 244 ----------------------- if ( !*crt_p ) goto g4;
.line 6
MAR * ,AR5
LAC *
BZ L16
L15:
*** -----------------------g3:
*** 246 ----------------------- log_table[log_count++] = **crt_p++;
.line 8
LAR AR3,*+,AR0
LDPK _log_count
LAC _log_count
ADDK 1
SACL _log_count
SUBK 1
ADLK _log_table+0,0
SACL *
LAR AR4,* ,AR3
LAC * ,AR4
SACL * ,AR5
*** 244 ----------------------- if ( *crt_p ) goto g3;
.line 6
LAC *
BNZ L15
L16:
*** -----------------------g4:
*** 248 ----------------------- if ( log_count < log_size ) goto g6;
.line 10
LDPK _log_count
ZALS _log_count
LDPK _log_size
SUBS _log_size
BLZ L18
*** 248 ----------------------- log_indx = 0xffffu;
LDPK _log_indx
SPLK #65535,_log_indx
L18:
*** -----------------------g6:
*** 250 ----------------------- ++log_time;
.line 12
LDPK _log_time
LAC _log_time
ADDK 1
SACL _log_time
*** ----------------------- return;
EPI0_11:
.line 13
MAR * ,AR1
SBRK 2
LAR AR0,*-
PSHD *
RET
.endfunc 251,000000000H,1
.sym _init_reference,_init_reference,32,2,0
.globl _init_reference
.func 260
******************************************************
* FUNCTION DEF : _init_reference
******************************************************
_init_reference:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,1
LAR AR0,*0+
*** 262 ----------------------- ref_long = ref_HL[0];
.line 3
LDPK _ref_HL
ZALS _ref_HL
LDPK _ref_HL+1
ADDH _ref_HL+1
LDPK _ref_long
SACL _ref_long
SACH _ref_long+1
*** 263 ----------------------- ref_time = 1u;
.line 4
LACK 1
LDPK _ref_time
SACL _ref_time
*** 264 ----------------------- ref_indx = 1u;
.line 5
LDPK _ref_indx
SACL _ref_indx
*** ----------------------- return;
EPI0_12:
.line 6
SBRK 2
LAR AR0,*-
PSHD *
RET
.endfunc 265,000000000H,1
.sym _reference,_reference,36,2,0
.globl _reference
.func 275
******************************************************
* FUNCTION DEF : _reference
******************************************************
_reference:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,5
LAR AR0,*0+
*** 281 ----------------------- if ( ref_long > 0L ) goto g2;
.sym _crtInc,1,5,1,32
.sym _retval,3,4,1,16
.sym _crtTime,4,14,1,16
.line 7
BNV $+2
LDPK _ref_long
LT _ref_long
MPYK 1
LPH _ref_long+1
LACK 0
SPAC
BNV $+6
BGZ L20
B $+4
BLZ L20
*** 282 ----------------------- retval = (int)(ref_long-32768L>>16)+1;
.line 8
ZALS _ref_long
ADDH _ref_long+1
SSXM
ADLK 65535,15
MAR * ,AR0
SACH *
LAC *,AR2
ADDK 1
LARK AR2,3
MAR *0+
SACL *
*** 282 ----------------------- goto g3;
B L21
L20:
*** -----------------------g2:
*** 281 ----------------------- retval = ref_long+32768L>>16;
.line 7
LALK 1,15
ADDS _ref_long
ADDH _ref_long+1
MAR * ,AR0
SACH *
SSXM
LAC *,AR2
LARK AR2,3
MAR *0+
SACL *
L21:
*** -----------------------g3:
*** 284 ----------------------- if ( ref_cycles == 1u ) goto g9;
.line 10
LDPK _ref_cycles
LAC _ref_cycles
SUBK 1
BZ L27
*** 286 ----------------------- crtTime = ref_time_val[ref_indx];
.line 12
LDPK _ref_indx
LAC _ref_indx
ADLK _ref_time_val+0,0
MAR *+,AR0
SACL *
LAR AR3,* ,AR3
LAC * ,AR2
SACL * ,AR0
*** 287 ----------------------- crtInc = ref_HL[ref_indx];
.line 13
LAC _ref_indx,1
ADLK _ref_HL+0,0
SACL *
LAR AR3,* ,AR3
ZALS *+
ADDH *-,AR2
SBRK 3
SACL *+
SACH *-
*** 288 ----------------------- ref_long += crtInc;
.line 14
LDPK _ref_long
ZALS _ref_long
ADDH _ref_long+1
ADDS *+
ADDH *
SACL _ref_long
SACH _ref_long+1
*** 289 ----------------------- if ( crtTime > ref_time++ || (crtTime = ref_time_val[(++ref_indx)]) ) goto g9;
.line 15
LDPK _ref_time
ZALS _ref_time
ADDK 1
SACL _ref_time
SUBK 1
ANDK 0FFFFh
ADRK 2
SUBS *
BLZ L27
LDPK _ref_indx
LAC _ref_indx
ADDK 1
SACL _ref_indx
ADLK _ref_time_val+0,0
MAR * ,AR0
SACL *
LAR AR3,* ,AR3
LAC * ,AR2
SACL *
ANDK 0FFFFh
BNZ L27
*** 294 ----------------------- if ( ref_cycles <= 1u ) goto g7;
.line 20
LDPK _ref_cycles
ZALS _ref_cycles
SUBK 1
BLEZ L25
*** 296 ----------------------- --ref_cycles;
.line 22
SACL _ref_cycles
L25:
*** -----------------------g7:
*** 298 ----------------------- if ( ref_cycles == 1u ) goto g9;
.line 24
LAC _ref_cycles
SUBK 1
BZ L27
*** 300 ----------------------- ref_indx = 1u;
.line 26
LACK 1
LDPK _ref_indx
SACL _ref_indx
*** 301 ----------------------- ref_time = 1u;
.line 27
LDPK _ref_time
SACL _ref_time
*** 302 ----------------------- ref_long = ref_HL[0];
.line 28
LDPK _ref_HL
ZALS _ref_HL
LDPK _ref_HL+1
ADDH _ref_HL+1
LDPK _ref_long
SACL _ref_long
SACH _ref_long+1
L27:
*** -----------------------g9:
*** 307 ----------------------- return retval;
.line 33
LARK AR2,3
MAR *0+
LAC *
EPI0_13:
.line 34
MAR * ,AR1
SBRK 6
LAR AR0,*-
PSHD *
RET
.endfunc 308,000000000H,5
.sym _init_field_pos,_init_field_pos,32,2,0
.globl _init_field_pos
.func 318
******************************************************
* FUNCTION DEF : _init_field_pos
******************************************************
_init_field_pos:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,1
LAR AR0,*0+
*** 320 ----------------------- C_omg = 26841;
.line 3
LDPK _C_omg
SPLK #26841,_C_omg
*** 321 ----------------------- Sh_omg = 2;
.line 4
LACK 2
LDPK _Sh_omg
SACL _Sh_omg
*** 322 ----------------------- C_slip = 84;
.line 5
LACK 84
LDPK _C_slip
SACL _C_slip
*** 323 ----------------------- Sh_slip = 0;
.line 6
LACK 0
LDPK _Sh_slip
SACL _Sh_slip
*** 324 ----------------------- theta = 0;
.line 7
LDPK _theta
SACL _theta
*** 325 ----------------------- theta_low = 0;
.line 8
LDPK _theta_low
SACL _theta_low
*** 326 ----------------------- theta_inc = 0;
.line 9
LDPK _theta_inc
SACL _theta_inc
*** ----------------------- return;
EPI0_14:
.line 10
SBRK 2
LAR AR0,*-
PSHD *
RET
.endfunc 327,000000000H,1
.sym _reset_Error_ACPM,_reset_Error_ACPM,32,2,0
.globl _reset_Error_ACPM
.func 336
******************************************************
* FUNCTION DEF : _reset_Error_ACPM
******************************************************
_reset_Error_ACPM:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,1
LAR AR0,*0+
; <save register vars>
SAR AR6,*+
*
* AR5 assigned to variable i
* AR6 assigned to variable k
*
*** 339 ----------------------- cfgiopc1();
.line 4
CALL _cfgiopc1
*** 340 ----------------------- resetiopc1();
.line 5
CALL _resetiopc1
*** 341 ----------------------- if ( (i = 1) > 1000 ) goto g3;
.line 6
LARK AR5,1
MAR * ,AR0
SAR AR5,*
SSXM
LAC *
SUBK 1000
BGZ L30
MAR * ,AR6
L29:
*** -----------------------g2:
*** 343 ----------------------- ++k;
.line 8
MAR *+,AR5
*** 341 ----------------------- if ( (++i) <= 1000 ) goto g2;
.line 6
MAR *+,AR0
SAR AR5,*
LAC * ,AR6
SUBK 1000
BLEZ L29
L30:
*** -----------------------g3:
*** 345 ----------------------- setiopc1();
.line 10
CALL _setiopc1,AR1
*** ----------------------- return;
EPI0_15:
.line 11
; <restore register vars>
MAR *-
LAR AR6,*
SBRK 2
LAR AR0,*-
PSHD *
RET
.endfunc 346,000000040H,1
.sym _ref_cycles,_ref_cycles,14,2,16
.globl _ref_cycles
.sym _ref_time,_ref_time,14,2,16
.globl _ref_time
*****************************************************
* UNDEFINED REFERENCES *
*****************************************************
.global _init_pi_reg_id
.global _init_pi_reg_iq
.global _init_pi_reg_pos
.global _init_pi_reg_omg
.global _get_adc_pair1
.global _cfgiopc1
.global _resetiopc1
.global _setiopc1
.end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?