⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fchev_can.asm

📁 关于电动汽车控制采样处理的源代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	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 + -