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

📄 foc_1.asm.bak

📁 foc 通信程序源码
💻 BAK
📖 第 1 页 / 共 4 页
字号:
INIWSGR		OUT   	WSGR_tmp,WSGR         	;PROGRAM SPACE, 0 WAIT STATES
						;DATA SPACE, 0 WAIT STATES
                                                ;I/O SPACE, 1 WAIT STATES  
;---------------------------------------------------------------------------
;EV clear all ev register and 定时器的初始化
;---------------------------------------------------------------------------
		zac
		ldp 	#0E8H
		sacl 	GPTCON                  ;gptcon=0
		sacl 	T1CNT
		sacl 	T1CMPR
		sacl 	T1PR
		sacl 	T1CON
		sacl 	T2CNT
		sacl 	T2CMPR
		sacl 	T2PR
		sacl 	T2CON
		sacl 	T3CNT
		sacl 	T3CMPR
		sacl 	T3PR
		sacl 	T3CON
		sacl 	COMCON
		sacl 	ACTR
		sacl 	SACTR
		sacl 	DBTCON
		sacl 	CMPR1
		sacl 	CMPR2
		sacl 	CMPR3
		sacl	SCMPR1
		sacl 	SCMPR2
		sacl 	SCMPR3
		sacl 	CAPCON
		sacl 	CAPFIFO
		sacl 	CAP1FIFO
		sacl 	CAP2FIFO
		sacl 	CAP3FIFO
		sacl 	CAP4FIFO	
; 清华程序初始化 initialize PWM
		splk	#1010101B,GPTCON;允许三个定时器比较输出,ACTIVE LOW
INIDBTCON       splk    #DEADTIME, DBTCON					
		splk 	#999H,ACTR 	;PWM compare actionsn,no space vector
		splk 	#0,CMPR1
		splk 	#0,CMPR2
		splk 	#0,CMPR3
		splk 	#0207h,COMCON 	;FIRST enable PWM operation					
		splk 	#8207h,COMCON	;THEN enable Compare operation
		splk 	#PWMPRD,T1PR 	;Set T1 period(#pwmprd)
		splk 	#0,T1CNT
		splk 	#02802h,T1CON
		splk 	#02802h,T1CON 	;Enable Timer 1
		lacc 	T1CON
		or 		#40h
		sacl 	T1CON		;(T1CON)=02842H
		sacl 	T1CON		;(T1CON)=02842H  
;***********************************************************
* Incremental encoder initialization
* Capture for Incremental encoder correction with Xint2
***********************************************************		
		splk	#1010100011000011B,T2CON
		splk	#1110001011110000b,CAPCON;用timer3定时
		splk	#0,T3CNT
		splk	#0ffffh,T3PR
		splk	0001100001110000B,T3CON
;---------------------------------------------------------------------------
;I/O引脚的初始化
;注意:用户程序务必参照此段初始化程序
;DP=0E1H
;PADATDIR.0(IOPA0)=CS(93C46)
;PADATDIR.1(IOPA1)=CLK(93C46)
;PADATDIR.2(IOPA2)=UNCLOCK
;PADATDIR.3(IOPA3)=/DISDRIVE


;PBDATDIR.5(IOPB5)=BRAKE
;PBDATDIR.6(IOPB6)=FAN
;PBDATDIR.7(IOPB7)=SHORT(while starting)

;PCDATDIR.0(IOPC0)=FAI(Y2)
;PCDATDIR.1(IOPC1)=RUN(Y1)
;PCDATDIR.2(IOPC2)=DO(93C46)
;PCDATDIR.3(IOPC3)=DI(93C46)
;PCDATDIR.6(IOPC6)=ALARM
;PCDATDIR.7(IOPC7)=FDT(Y3)

INIIOPIN:	LDP 	#0E1H			;7080H-70FFH
INIOCRA		splk    #0001111100000000B,OCRA     	

INIOCRB         splk    #00111100B,OCRB

INIPADATDIR     splk    #0000111100000000B,PADATDIR 
;IOPA0,1,2,3 are configured as output
;set coresponding outputs are 0   

INIPBDATDIR     splk    #1110000000000000B,PBDATDIR
;IOPB5,6,7 are configured as output
;set conresponding outputs are 0

INIPCDATDIR     splk    #1100101100000000B,PCDATDIR 
;IOPC7,6,BIO,IOPC1,0 are configured as output
;set conresponding outputs are 0

;--------------------------------------------------------------------------
                LDP 	#0E0H			;7000H-707FH            

ININMI          splk    #0014H,NMI		;0000 0000 0001 0100B
						;NMI,上升沿触发	
INIXINT1        splk    #0005H,XINT1		;0000 0000 0000 0101B
						;XINT1上升沿触发,HIGH优先级
INIXINT2	    splk    #0000H,XINT2            ;作为输入
INIXINT3        splk    #0000H,XINT3            ;作为输入
;-------------------------------------------------------------------------------
; A/D INITIALIZATION
;-------------------------------------------------------------------------------
INIAD:		LDP	#0E0H
INIADCTRL2  splk    #0004H, ADCTRL2		;CONVERSION TIME 7.2US     

ADCINIFIFO1	LACL	ADCFIFO1                ;read FIFOs, clear the result registers
		    LACL	ADCFIFO1
INIADCFIFO2	LACL	ADCFIFO2
		    LACL	ADCFIFO2
;------------------------------------------------------------------------------
; EV INTERRUPTS INITIALIZATION STARTS HERE.  
;---------------------------------------------------------------------
INIEV:		LDP	#0E8H 			;DP =>EV REGISTERS,7400H-747FH
INIEVIMRA   splk    #00000H,EVIMRA          ;MASK ALL GROUP A INTERRUPT FLAGS
INIEVIMRB	splk 	#00000H,EVIMRB 		;MASK ALL GROUP B INTERRUPT FLAGS
INIEVIMRC	splk 	#00000H,EVIMRC 		;MASK ALL GROUP C INTERRUPT FLAGS
INIEVIFRA	splk 	#0FFFFH,EVIFRA		;CLEAR ALL GROUP A INTERRUPT FLAGS
INIEVIFRB	splk 	#0FFFFH,EVIFRB		;CLEAR ALL GROUP B INTERRUPT FLAGS
INIEVIFRC	splk 	#0FFFFH,EVIFRC		;CLEAR ALL GROUP C INTERRUPT FLAGS
INIEVIVRA	LACC	EVIVRA			
INIEVIVRB	LACC	EVIVRB
INIEVIVRC	LACC	EVIVRC	
;================================================================================
;控制变量的初始化
;--------------------------------------------------------------------------------
;V/F控制所用变量初始化		
        LDP	#4
		ZAC		
		SACL    Angle
;		splk	#1,f			;起动频率=50/18Hz
;		splk	#10,fobj
;		splk	#0,IncDecCounter	;加减速处理计数器
;		splk	#10000,TDEC		;加速时间,意义:1对应从0到50赫兹的时间是0.32秒
;		splk	#10000,TINC		;减速时间,意义:1对应从0到50赫兹的时间是0.32秒
		splk	#0,FailFlag
		SPLK	#1,RunFlag
		splk	#1,RunEnable
		ldp	#4
        splk	#18704,kia		;18.26601308589056*(2^10)=18704
                						;18.2661=4.96/(512*Ib/Imax)             
        splk	#18704,kib		;scale=2^23
        splk	#25367,kvdc		;25367=523V/675.6*2^15
        
****************************
* Variables initialization
****************************
        
     
        
		zac
	    ldp #05h 			;control variable page
		sacl running
		sacl Index                               
		sacl upi
		sacl elpi 
		sacl num    
		
		   
		ldp  #04h
		sacl xid
		sacl xiq
		sacl xin
        sacl Vref1
		sacl Vref2
		sacl Vref3
		sacl da1
		splk #1b9dh,VDC 		;The DC voltage is 310V
								;Vdc=1.726 in 4.12 with a Vbase=179.6V
		splk #243h,VDCinvT 		;T/(Vdc*2) or PWMPRD/VDC=579
								;rescaled by 4.12            
		lacc #1
		sacl da2
		lacc #2
		sacl da3
		lacc #3
		sacl da4
		spm 0 					;no shift after multiplication
;		splk	#QEP_num,QEPCNT
		LAR	AR1,#60H		;用于中断环境保存的栈底,B2(60H-7fH) 
		setc OVM		
		setc sxm 		;sign extension mode      
		
		ldp #04h
		lacc ia
		ldp #05h
		sacl adr1              ;ia 初始化   
		 ldp #04h
		 lacc ib 
		 ldp #05h
		sacl adr2              ;ib 初始化 
		 ldp #04h
		lacc vdc 
		ldp #05h
		sacl adr3              ;vdc 初始化     
		
		LAR AR6,#BUFFERSTART	
		LDP #05h
        lacc #SHOWINDEX
        sacl showindex      
        LACC #SAVEINDEX
        SACL saveindex
********************************
* END Variables initialization
********************************  		
		
;--------------------------------------------------------------------------
;SCI的初始化
;注意:用户程序务必参照此段初始化程序

SCI_INIT:	LDP	#00E0h
		splk	#0037h, SCICCR 	;1 stop bit,odd parity,8 char bits,
					;async mode, idle–line protocol
		splk	#0013h, SCICTL1	;Enable TX, RX, internal SCICLK,
					;Disable RX ERR, SLEEP, TXWAKE
		splk	#0000h, SCICTL2	;disable RX INT,enable TX INT
		splk	#0000h, SCIHBAUD
		splk	#000ah, SCILBAUD	;Baud Rate=115200 b/s (10 MHz SYSCLK)
		;splk	#0040h, SCILBAUD	;Baud Rate=19200 b/s (10 MHz SYSCLK)
		splk	#0022h, SCIPC2	;Enable TXD & RXD pins
		splk	#0033h, SCICTL1	;Relinquish SCI from Reset.
		splk	#0060H,SCIPRI	;RX,TX皆为LOW 优先级
				
;==================================================================

; ENABLE Serial Rx INTERRUPT, and begin the Scope Initial Loop.
;If (MultiSingle!=0ffffh && StartTime!=0ffffh) then Break
;-------------------------------------------------------------------
                LDP	#0E8H
                splk    #0001H, EVIMRA	;ENABAL PDPINT  
                LDP 	#00H
                lacc  #0ffh
                sacl 	IFR
                splk    #11H, IMR	;ENABLE XINT1(INT1),SCI(INT5)
				CLRC 	INTM
;---------------------------------------------------------------------
;		call	ScopeLoop
		
;==================================================================

; ENABLE USED INTERRUPT
;-------------------------------------------------------------------
                ;(1)EV-level enabled interrupt
                LDP	#0E8H
                splk	#1H, EVIMRB     ;enable T2 compare interrupt                                                 
                splk    #0201H, EVIMRA	;ENABAL T1 UNDERFLAW 和PDPINT
                ;(2)CPU-level enabled interrupt
                LDP 	#00H
                splk    #13H, IMR	;ENABLE TIMER1 INTERRUPT(INT2)
					;和XINT1(INT1),SCITX(INT5)  
                ;(3)ST0 enabled interrupt
				CLRC 	INTM 
				
				

;================================================================== 
;--------------------------------------------------------------------------
;充电继电器操作
;---------------------------------------------------------------------------	
		STOP            
        LDP     #4		;延时500毫秒,t=0.1ms*(MSEC)=0.1ms*5000
		LACC	#5000
		SACL	MSEC
		CALL	MS_DELAY
SHT		SHORT			;短接软启动电阻	
		RUN			;允许PWM输出     
************************************************************		
menu    
;        call ModifyOnline
		clrc xf 					;default mode (will be saved as context)
		ldp #DP_PF1
		bit SCIRXST,BIT6 			;is there any character available ?
		bcnd menu,ntc 				;if not repeat the cycle (polling)
		
		lacc SCIRXBUF
		and #0ffh 					;only 8 bits !!!
		ldp #04h 				;if yes, get it and store it in option
		sacl option 				;now in option we have the option
									;number of the virtual menu
		sub #01h 					;is it option 1 ?
		bcnd notone,neq 			;if not branch to notone  
		
*****************************
* Option 1): Speed reference
*****************************
navail11
		ldp #DP_PF1
		bit SCIRXST,BIT6 		;is there any character available (8 LSB)?
		bcnd navail11,ntc 		;if not repeat the cycle (polling)
		
		lacc SCIRXBUF
		and #0FFh 				;take the 8 LSB
		ldp #04h 			;control variable page
		sacl serialtmp 			;if yes, get it and store it in serialtmp
navail12
		ldp #DP_PF1
		bit SCIRXST,BIT6 		;8 MSB available ?
		bcnd navail12,ntc 		;if not repeat the cycle (polling)
		lacc SCIRXBUF,8 		;load ACC the upper byte
		ldp #04h 			;control variable page
		add serialtmp 			;add ACC with lower byte
		sacl n_ref 				;store it n_ref
		b menu 					;return to the main polling cycle
*** END Option 1): speed reference 

notone
		lacc option
		sub #02h 				;is it option 2 ?
		bcnd nottwo,neq 		;if not branch to nottwo
		
*****************************
* Option 2): DAC update
*****************************
navail21
		ldp #DP_PF1
		bit SCIRXST,BIT6 		;is there any character available (8 LSB)?
		bcnd navail21,ntc 		;if not repeat the cycle (polling)
		
		lacc SCIRXBUF
		and #0FFh 				;take the 8 LSB
		ldp #04h
		sacl da1 				;if yes, get it and store it in da1

navail22
		ldp #DP_PF1
		bit SCIRXST,BIT6 		;is there any character available (8 LSB)?
		bcnd navail22,ntc 		;if not repeat the cycle (polling)

		lacc SCIRXBUF
		and #0FFh 				;take the 8 LSB

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -