📄 foc_1.asm.bak
字号:
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 + -