📄 fchev_can.asm
字号:
SPLK #16962,*+
.line 277
;>>>> *MAX_CONV=0x0003; /* Number of conversions=4*/
LACK 3
SACL *+
.line 279
;>>>> *CHSELSEQ1=0x3210; /*Input Channels Selected order:0-15 */
SPLK #12816,*+
.line 280
;>>>> *CHSELSEQ2=0x7654;
SPLK #30292,*+
.line 281
;>>>> *CHSELSEQ3=0xBA98;
SPLK #47768,*+
.line 282
;>>>> *CHSELSEQ4=0xFEDC;
SPLK #65244,*
.line 289
;>>>> *PBDATDIR=0x0100;
SBRK 12
SPLK #256,* ,AR4
.line 293
;>>>> LED=LED_STATE;
LDPK _LED_STATE
OUT _LED_STATE,09h
.line 295
;>>>> LED6_counter=0; /* initialize the user6-9 LED flag */
LACK 0
SACL _LED6_counter
.line 296
;>>>> CAN_TFLAG=0x0000;/*发送时间计数初值*/
SACL _CAN_TFLAG
.line 298
;>>>> *T2CON=*T2CON|0x40; /*Enable timer operations*/
LARK AR4,29704
LACK 64
OR *
SACL *
.line 301
;>>>> asm(" CLRC INTM"); /* enable global interrupts */
CLRC INTM
L5:
.line 306
;>>>> while(1); /* endless loop, wait for interrupt */
B L5
.endfunc 383,000000000H,1
.sym _t2timer_isr,_t2timer_isr,32,2,0
.globl _t2timer_isr
.func 388
;>>>> void t2timer_isr(void)
;>>>> { int err,temp,xn,yn,Iref,u,fbk;
******************************************************
* FUNCTION DEF : _t2timer_isr
******************************************************
_t2timer_isr:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,8
LAR AR0,*0+,AR3
.sym _err,1,4,1,16
.sym _temp,2,4,1,16
.sym _xn,3,4,1,16
.sym _yn,4,4,1,16
.sym _Iref,5,4,1,16
.sym _u,6,4,1,16
.sym _fbk,7,4,1,16
.line 3
;>>>> *ADCTRL2=*ADCTRL2|0x2000;/*SRART AD conversion*/
LARK AR3,28833
LACK 8192
OR *
SACL * ,AR4
.line 5
;>>>> *EVAIFRB =*EVAIFRB & 0x0001; /*** clear the T2PINT flag ***/
LARK AR4,29744
LACK 1
AND *
SACL * ,AR3
.line 6
;>>>> *TCR=0x2000; /* ;清 TA3 和MIF3标志位*/
ADRK 96
SPLK #8192,*+
.line 7
;>>>> temp_RCR=*RCR;
BLDD * ,#_temp_RCR
.line 8
;>>>> temp_RCR=temp_RCR&0x0040;
;>>>> loop:
LACK 64
LDPK _temp_RCR
AND _temp_RCR
SACL _temp_RCR
.sym _loop,L6,0,6,0
L6:
.line 12
;>>>> end_ad=*ADCTRL2&0x1000; /*wait for the end of conversion of adbit12*/
LARK AR3,28833
LACK 4096
MAR * ,AR3
AND *
LDPK _end_ad
SACL _end_ad
.line 13
;>>>> while(end_ad)goto loop;
LAC _end_ad
BNZ L6
.line 14
;>>>> *ADCTRL2=*ADCTRL2|0x4000; /*Immediately reset sequencer to state CONV00*/
LACK 16384
OR *
SACL *
.line 15
;>>>> channel_0=(*RESULT0)>>6;
RSXM
ADRK 7
LAC *+,9
SACH _channel_0,1
.line 16
;>>>> channel_1=(*RESULT1)>>6;
LAC *+,9
SACH _channel_1,1
.line 17
;>>>> channel_2=(*RESULT2)>>6;
LAC *+,9
SACH _channel_2,1
.line 18
;>>>> channel_3=(*RESULT3)>>6;
LAC * ,9,AR2
SACH _channel_3,1
.line 19
;>>>> Ib=channel_0; /*the result of AD for the */
BLKD #_channel_0,_Ib
.line 20
;>>>> If=channel_1; /*the current of battery&Fuel cell and the bus voltage*/
BLKD #_channel_1,_If
.line 21
;>>>> Ubus=channel_2;
BLKD #_channel_2,_Ubus
.line 25
;>>>> xn=Ib;
LARK AR2,3
MAR *0+
BLKD #_Ib,*
.line 26
;>>>> fir.input=xn;
BLDD * ,#_fir+3,AR1
.line 27
;>>>> fir.calc(&fir);
LALK _fir+0
SACL *+
LDPK _fir+27
LAC _fir+27
CALA
MAR *-,AR2
.line 28
;>>>> yn=fir.output;
LARK AR2,4
MAR *0+
BLKD #_fir+4,*
.line 30
;>>>> Ib=yn;
BLDD *+,#_Ib
.line 45
;>>>> Iref=0x01d5;
SPLK #469,*
.line 46
;>>>> fbk=Ib;
ADRK 2
BLKD #_Ib,*
.line 47
;>>>> pid.pid_ref_reg1=Iref;
SBRK 2
BLDD * ,#_pid
.line 48
;>>>> pid.pid_fb_reg1=fbk;
ADRK 2
BLDD * ,#_pid+1,AR1
.line 49
;>>>> pid.calc(&pid);
LALK _pid+0
SACL *+
LDPK _pid+11
LAC _pid+11
CALA
MAR *-,AR2
.line 50
;>>>> u=pid.pid_out_reg1; /*0000~0x7FFF*/
LARK AR2,6
MAR *0+
BLKD #_pid+10,*
.line 51
;>>>> P_FC_ref=((long)u*0x3c36L)>>18;
SSXM
LAC * ,AR1
SACL *+
SACH *+
SACL *+
LACK 15414
MAR *-
CALL L$$MPY
MAR * ,AR0
SACH *
SSXM
LAC *,14
SACH *
LAC *
LDPK _P_FC_ref
SACL _P_FC_ref
.line 52
;>>>> if(P_FC_ref<0) P_FC_ref=0;
LAC _P_FC_ref
BGEZ L9
LACK 0
SACL _P_FC_ref
L9:
.line 53
;>>>> if(P_FC_ref>0x2f) P_FC_ref=0x2f;
LAC _P_FC_ref
SUBK 47
BLEZ L10
LACK 47
SACL _P_FC_ref
L10:
.line 59
;>>>> if(temp_RCR==0x0040)
LAC _temp_RCR
SUBK 64
BNZ L11
.line 60
;>>>> { *RCR=0x0040; /* ;复位 RMP2 和 MIF2*/
LARK AR3,28930
LACK 64
MAR * ,AR3
SACL *
.line 61
;>>>> *CAN_IFR=0xFFFF; /*;清全部中断标志*/
ADRK 7
SPLK #65535,* ,AR4
.line 63
;>>>> mbx2_a=*MBX2A;
LARK AR4,29204
BLDD *+,#_mbx2_a
.line 64
;>>>> mbx2_b=*MBX2B;
BLDD *+,#_mbx2_b
.line 65
;>>>> mbx2_c=*MBX2C;
BLDD *+,#_mbx2_c
.line 66
;>>>> mbx2_d=*MBX2D;
BLDD * ,#_mbx2_d,AR3
.line 68
;>>>> LED_STATE=LED_STATE^0x0002; /* FLASH THE LED7 */
LACK 2
XOR _LED_STATE
SACL _LED_STATE
.line 69
;>>>> LED=LED_STATE;
OUT _LED_STATE,09h
.line 71
;>>>> *MCR=0x2480; /* ;DBO=1,CDR=0,ABO=1,STM=0 */
SBRK 6
SPLK #9344,*
.line 75
;>>>> *MDER=0x004C; /*;ME2=ME3=1,MBX2接收, MBX3发送 */
LACK 76
SBRK 3
SACL *
L11:
.line 112
;>>>> if(CAN_TFLAG==0x000A)
LAC _CAN_TFLAG
SUBK 10
BNZ L12
.line 113
;>>>> { *MDER=0x0000; /* ;邮箱不使能 */
LARK AR3,28928
LACK 0
MAR * ,AR3
SACL *
.line 114
;>>>> *MCR=0x0100; /* ;CDR=1,数据改变请求 */
ADRK 3
SPLK #256,* ,AR4
.line 116
;>>>> *MBX3A=-P_FC_ref;/*P_FC_ref; */
LAC _P_FC_ref
NEG
LARK AR4,29212
SACL *+
.line 117
;>>>> *MBX3B=0x0200;
SPLK #512,*+
.line 118
;>>>> *MBX3C=0x0400;
SPLK #1024,*+
.line 119
;>>>> *MBX3D=0x0400;
SPLK #1024,* ,AR3
.line 121
;>>>> *MCR=0x2480; /* ;DBO=1,CDR=0,ABO=1,STM=0 */
SPLK #9344,*
.line 125
;>>>> *MDER=0x004C; /*;ME2=ME3=1,MBX2接收, MBX3发送 */
LACK 76
SBRK 3
SACL *+
.line 126
;>>>> *TCR=0x0020; /*;邮箱3发送请求 */
LACK 32
SACL *
.line 128
;>>>> temp_TCR=*TCR;
BLDD * ,#_temp_TCR
.line 129
;>>>> temp_TCR=temp_TCR&0x2000;
LACK 8192
AND _temp_TCR
SACL _temp_TCR
.line 130
;>>>> if(temp_TCR=0x2000)
SPLK #8192,_temp_TCR
.line 131
;>>>> {LED_STATE=LED_STATE^0x0004;
LACK 4
XOR _LED_STATE
SACL _LED_STATE
.line 132
;>>>> LED=LED_STATE;
OUT _LED_STATE,09h
.line 133
;>>>> CAN_TFLAG=0;
LACK 0
SACL _CAN_TFLAG
.line 136
;>>>> LED8_counter=0x0000;
LACK 0
LDPK _LED8_counter
SACL _LED8_counter
L12:
.line 144
;>>>> DAC0=Ib; /*output the result of Ib to DAC0*/
OUT _Ib,00h
.line 145
;>>>> DAC1=yn; /*output the result of Ib to DAC1*/
MAR * ,AR2
LARK AR2,4
MAR *0+
OUT * ,01h
.line 146
;>>>> DAC2=Ib; /*output the result of If to DAC2*/
OUT _Ib,02h
.line 147
;>>>> DAC3=Ib; /*output the result of Ubus to DAC3*/
OUT _Ib,03h
.line 149
;>>>> DACUD=temp; /*trigger the DAC to output */
SBRK 2
OUT * ,04h,AR3
.line 152
;>>>> *SCITXBUF=0x99;
LARK AR3,28761
LACK 153
SACL * ,AR1
.line 153
;>>>> delay();
CALL _delay
.line 154
;>>>> *SCITXBUF=P_FC_ref>>8;
SSXM
LDPK _P_FC_ref
LAC _P_FC_ref,7
LARK AR3,28761
MAR * ,AR3
SACH * ,1,AR1
.line 155
;>>>> delay();
CALL _delay
.line 156
;>>>> *SCITXBUF=P_FC_ref;
LARK AR3,28761
MAR * ,AR3
BLKD #_P_FC_ref,* ,AR1
.line 157
;>>>> delay();
CALL _delay
.line 158
;>>>> *SCITXBUF=0x77;
LARK AR3,28761
LACK 119
MAR * ,AR3
SACL *
.line 170
;>>>> *PBDATDIR=*PBDATDIR^0x0001; /* XOR the IOPB0 bit to toggle the pin */
LACK 1
ADRK 65
XOR *
SACL *
.line 171
;>>>> CAN_TFLAG++; /*发送时间计数*/
LDPK _CAN_TFLAG
LAC _CAN_TFLAG
ADDK 1
SACL _CAN_TFLAG
.line 172
;>>>> LED6_counter++; /*the total interrupter number*/
LAC _LED6_counter
ADDK 1
SACL _LED6_counter
.line 173
;>>>> if(LED6_counter==50)
LAC _LED6_counter
SUBK 50
BNZ L14
.line 174
;>>>> {LED_STATE=LED_STATE^0x0001; /* FLASH THE LED6 */
LACK 1
XOR _LED_STATE
SACL _LED_STATE
.line 175
;>>>> LED=LED_STATE;
OUT _LED_STATE,09h
.line 176
;>>>> LED6_counter=0;} /*RESET THE LED TIME COUNTER*/
LACK 0
SACL _LED6_counter
L14:
EPI0_2:
.line 179
MAR * ,AR1
SBRK 9
LAR AR0,*-
PSHD *
RET
.endfunc 566,000000000H,8
.sym _can_isr,_can_isr,32,2,0
.globl _can_isr
.func 569
;>>>> void can_isr(void)
******************************************************
* FUNCTION DEF : _can_isr
******************************************************
_can_isr:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,1
LAR AR0,*0+
EPI0_3:
.line 2
SBRK 2
LAR AR0,*-
PSHD *
RET
.endfunc 570,000000000H,1
.sym _sci_init,_sci_init,32,2,0
.globl _sci_init
.func 572
;>>>> void sci_init(void)
******************************************************
* FUNCTION DEF : _sci_init
******************************************************
_sci_init:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,1
LAR AR0,*0+,AR3
.line 2
;>>>> { *MCRA=*MCRA|0x03;
LARK AR3,28816
LACK 3
OR *
SACL *
.line 3
;>>>> *SCICCR=0x0027;
LACK 39
SBRK 64
SACL *+
.line 14
;>>>> *SCICTL1=0x0003;/*SW RESET=0 FOR CONFIG SCI*/
LACK 3
SACL *
.line 25
;>>>> *SCICTL2=0x0000;
LACK 0
ADRK 3
SACL *
.line 37
;>>>> *SCIHBAUD=0x0002;
LACK 2
SBRK 2
SACL *+
.line 38
;>>>> *SCILBAUD=0x0007; /*40*10^6/(9600*8)-1=0207H */
LACK 7
SACL *
.line 41
;>>>> *SCICTL1=0x0023; /*End CONFIG*/
LACK 35
SBRK 2
SACL * ,AR1
EPI0_4:
.line 52
SBRK 2
LAR AR0,*-
PSHD *
RET
.endfunc 623,000000000H,1
.sym _delay,_delay,32,2,0
.globl _delay
.func 624
;>>>> void delay(void)
;>>>> { int i;
******************************************************
* FUNCTION DEF : _delay
******************************************************
_delay:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,2
LAR AR0,*0+,AR2
.sym _i,1,4,1,16
.line 3
;>>>> for(i=1;i<3000;i++)
LACK 1
LARK AR2,1
MAR *0+
SACL *
SSXM
LAC *
SUBK 3000
BGEZ L16
L15:
.line 4
;>>>> { asm(" NOP");
NOP
.line 3
LAC *
ADDK 1
SACL *
LAC *
SUBK 3000
BLZ L15
L16:
EPI0_5:
.line 6
MAR * ,AR1
SBRK 3
LAR AR0,*-
PSHD *
RET
.endfunc 629,000000000H,2
.sym _CAN_TFLAG,_CAN_TFLAG,4,2,16
.globl _CAN_TFLAG
*****************************************************
* UNDEFINED REFERENCES *
*****************************************************
.global L$$MPY
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -