|
;================================================================ ;编译开关 scope_Enable .set 1 ;如名 Tc_short .set 1 ;1-小采样周期(约120us),0-大采样周期(约700us) SVPWM_load .set 0 ;SVPWM中是否load CMPRx immediate .set 0 ;死区补偿是否立即载入,0-中末,1-立即 ENSCMP .set 0 ;SCMP是否发同样的脉冲 DEADCON .set 1 ;是否进行死区补偿 ;********************************************************************* ; 文件名: lsvpwm.ASM ; 目标系统: F240主控板 ; 功能描述: SVPWM,死区补偿,有电压电流AD输入,与scope通信 ; 版本号: 1.1 ; 最新调整时间: 2003.6.15 ;*************************头文件************************************* .INCLUDE F240.h .INCLUDE constdef.h .INCLUDE Macro.h .INCLUDE ScopeREF.h .INCLUDE varinit.h .INCLUDE vardef.h .INCLUDE mathtb.h
;**********************定标及公式声明********************************
;**********************常数声明**************************************
;***********************变量定义************************************* variable_def
;***********************向量地址声明***************************************
.SECT ".VECTORS" RSVECT B START INT1 B IPM_FAIL ;IPM的FO保护 INT2 B GISR2 ;GISR2包括TIMER1和PDPINT INT3 B PHANTOM ;INTERRUPT LEVEL 3 INT4 B PHANTOM ;INTERRUPT LEVEL 4 INT5 B SERIAL ;INTERRUPT LEVEL 5 INT6 B PHANTOM ;INTERRUPT LEVEL 6 RESERVED B PHANTOM ;RESERVED SW_INT8 B PHANTOM ;USER S/W INTERRUPT SW_INT9 B PHANTOM ;USER S/W INTERRUPT SW_INT10 B PHANTOM ;USER S/W INTERRUPT SW_INT11 B PHANTOM ;USER S/W INTERRUPT SW_INT12 B PHANTOM ;USER S/W INTERRUPT SW_INT13 B PHANTOM ;USER S/W INTERRUPT SW_INT14 B PHANTOM ;USER S/W INTERRUPT SW_INT15 B PHANTOM ;USER S/W INTERRUPT SW_INT16 B PHANTOM ;USER S/W INTERRUPT TRAP B PHANTOM ;TRAP VECTOR NMINT B PHANTOM ;NON-MASKABLE INTERRUPT EMU_TRAP B PHANTOM ;EMULATOR TRAP SW_INT20 B PHANTOM ;USER S/W INTERRUPT SW_INT21 B PHANTOM ;USER S/W INTERRUPT SW_INT22 B PHANTOM ;USER S/W INTERRUPT SW_INT23 B PHANTOM ;USER S/W INTERRUPT
;*********************************************************************** ;***************************主程序开始********************************** ;*********************************************************************** .TEXT
;************************F240初始化模块开始***************************** ;---------------------初始化ST0,ST1,IMR,IFR----------------------------- START: LDP #00H ;0000H-007FH SETC INTM ;DISABLE INTERRUPTS splk #0000H,IMR ;MASK ALL CORE INTERRUPTS LACC IFR ;READ INTERRUPT FLAGS SACL IFR ;CLEAR ALL INTERRUPT FLAGS CLRC SXM ;SUPPRESSES SIGN EXTENSION CLRC OVM ;RESET OVERFLOW MODE CLRC CNF ;CONFIG BLOCK B0 TO DATA MEM SPM 0 ;SUPPRESSES SHIFT ACTION ;------------------------设置CLOCK与PLL-------------------------------- INICLOCKPLL: LDP #0E0H ;7000H-707FH splk #00BBh,CKCR1 ;CLKIN(OSC)=10MHz,CPUCLK=20MHz splk #00C3h,CKCR0 ;CLKMD=PLL Enable,SYSCLK=CPUCLK/2 splk #4000H,SYSCR ;0100 0000 0000 0000 ;CLKOUT PIN =Digital I/O mode LDP #00E0h ;DP for addresses 7000h-707Fh lacc SYSSR and #69FFh ;and 0110100111111111, clear 15,12,10,9 sacl SYSSR ;可靠的初始化,清非法故障标志 ;------------------------关看门狗和设置等待周期------------------------ LDP #0E0H INIRTICR splk #0007H,RTICR ;DISABLE RTI INIWDCR splk #006FH,WDCNTR splk #05555H,WDKEY splk #0AAAAH,WDKEY splk #006FH,WDCNTR SPLK #006FH, WDCR ;DISABLE WD IF VCCP=5V (JP5 IN POS. 2-3) ;Overflow TIME=1s KICK_DOG ;RESET WATCHDOG LDP #4 SPLK #4H,TEMP ;SET WAIT STATE GENERATOR FOR: OUT TEMP,WSGR ;PROGRAM SPACE, 0 WAIT STATES ;DATA SPACE, 0 WAIT STATES ;I/O SPACE, 1 WAIT STATES ;----------------------I/O引脚的初始化--------------------------------- ;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
;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) NOP NOP NOP NOP NOP INIIOPIN: LDP #0E1H ;7080H-70FFH INIOCRA splk #0001111100000000B,OCRA ; INIOCRB splk #00111100B,OCRB ; INIPADATDIR splk #0000111100000000B,PADATDIR INIPBDATDIR splk #1110000000000000B,PBDATDIR INIPCDATDIR splk #1100101100000000B,PCDATDIR LDP #0E0H ;7000H-707FH ININMI splk #0014H,NMI ;0000 0001 0000 0100B ;NMI,上升沿触发 INIXINT1 splk #0005H,XINT1 ;0000 0000 0000 0101B ;XINT1上升沿触发,HIGH优先级 INIXINT2 splk #0000H,XINT2 ;作为输入 INIXINT3 splk #0000H,XINT3 ;作为输入 ;-----------------------EV中断初始化------------------------------------------- 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 ;------------------------A/D 初始化------------------------------------------ INIAD: LDP #0E0H INIADCTRL2 splk #0004H, ADCTRL2 ;CONVERSION TIME 7.2US ADCINIFIFO1 LACL ADCFIFO1 LACL ADCFIFO1 INIADCFIFO2 LACL ADCFIFO2 LACL ADCFIFO2 ;-----------------------------------SCI的初始化------------------------------- ;注意:用户程序务必参照此段初始化程序
SCI_INIT: LDP #00E0h splk #0017h, SCICCR ;1 stop bit,disable parity,8 char bits, ;async mode, idle–line protocol splk #0013h, SCICTL1 ;Enable TX, RX, internal SCICLK, ;Disable RX ERR, SLEEP, TXWAKE splk #0003, 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 优先级 ;=========================PWM中断初始化=============================================== ;--------------------------清零------------------------------------------------------- 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 ;-------------------------系统寄存器初始化--------------------------------------------- splk #1010101B,GPTCON;允许三个定时器比较输出,ACTIVE LOW LACC #Sample_PRD SACL T1PR ;微秒,采样周期 SPLK #0, T1CNT SPLK #0, T2CNT SPLK #1, T1CMPR SPLK #1, T2CMPR ;SPLK #0666H, ACTR ;禁止 SPACE VECTOR PWM,高有效 ;0000 0110 0110 0110 ;SPLK #0666H, ACTR ;ACTR IS DOUBLE BUFFERED splk #0999H,ACTR ;PWM compare actionsn,no space vector ;0000 1001 1001 1001 ;6,4,2,high 5,3,1,low ;SPLK #002AH,SACTR ;简单比较单元高有效 ;0000 0000 0010 1010 splk #002Ah,SACTR ;X,Y,Z,active high ;0000 0000 0010 1010 SPLK #002AH,SACTR ; ;SPLK #0000H, DBTCON ;no DEAD TIME ;SPLK 50EFH,DBTCON ;8us ;SPLK 46EFH,DBTCON ;7us ;SPLK 3CEFH,DBTCON ;6us ;SPLK 32EFH,DBTCON ;5us ;SPLK 28EFH,DBTCON ;4us SPLK 1EEFH,DBTCON ;3us ;SPLK 1CEFH,DBTCON ;2.8us; SPLK #0, CMPR1 ; SPLK #0, CMPR2 ; SPLK #0, CMPR3 ; SPLK #0, SCMPR1 ; SPLK #0, SCMPR2 ; SPLK #0, SCMPR3 ;再一次清零 splk #0,T1CNT ;T1计数器初值 SPLK #0307H, COMCON ;COMCON NEED TO BE WRITTEN TWICE ;splk #0272fh,COMCON ;FIRST enable PWM operation(EN SCMP) SPLK #8307H, COMCON ;FOR PROPER OPERATION ;splk #0a72fh,COMCON ;THEN enable Compare operation(EN SCMP) SPLK #2802H,T1CON ;CONTINUOUS UP/DOWN COUNT MODE ;0010 1000 0000 0010 SPLK #2802H,T1CON ;CONTINUOUS UP COUNT MODE splk #0010100011000011B,T2CON;使用T1,忽略本身 lacc T1CON or #40h sacl T1CON ;(T1CON)=02842H sacl T1CON ;(T1CON)=02842H splk #1110001011110000b,CAPCON ;用timer3定时 splk #0,T3CNT splk #0ffffh,T3PR splk 0001100001110000B,T3CON SPLK #0201H, EVIMRA LACC EVIVRA SPLK #0H, EVIMRB LACC EVIVRB ;================================================================= ;变量的初始化 variable_init ;================================================================= ;----------------------------------------------------------------- ;充电继电器操作 ;-----------------------------------------------------------------
STOP
ms_delay 500,TEMP ;延时500毫秒 SHT SHORT ;短接软启动电阻 RUN ;允许PWM输出 ;=================================================================
;---------------------------scope 初始化-------------------------- LDP #0 splk #0,FailFlag SPLK #1,RunFlag splk #1,RunEnable LAR AR1,#60H ;栈底 setc OVM setc sxm ;sign extension mode ;================================================================= ;示波器初始化 .if (scope_Enable==1) call ScopeInitNoLoop .endif ;--------------------------------- ; ENABLE USED INTERRUPT ;------------------------------------------------------------------- LDP #0E8H splk #1H, EVIMRB splk #0201H, EVIMRA ;ENABAL T1 UNDERFLAW 和PDPINT LDP #00H splk #13H, IMR ;ENABLE TIMER1 INTERRUPT(INT2) ;和XINT1(INT1),SCITX(INT5) CLRC INTM ;开中断 LAR AR7,#8000H ;================================================================== MENU NOP ;---------------------------------------------------------------------
.if (scope_Enable==1) call ModifyOnline call MultiSingle_online .endif ;--------------------------------------------------------------------- B MENU ;************************************************************************** ;**********TIMER1中断服务程序,计算下一TIMER1周期发的矢量及其时间**************** * ;************************************************************************** TIMER1:
LDP #0 SETC SXM
;*************************************************************************** ;main strategy and AD input * ;***************************************************************************
;========================线电压采样模块===================================== LDP #ADCTRL1/128 splk #1011100100110111B, ADCTRL1 ;启动VDC,VCAP的采样 ReadVdcVcap ;========================立即触发电流采样模块============================= LDP #ADCTRL1/128 splk #1011100100100101B, ADCTRL1 ;启动电流采样 ReadCurrent
;========================VVVF及SVPWM模块==================================== wincdec w_opn,w_opn_l,w_opn_obj,5,tinc,tdec,TC,TC_sh,TEMP1 iwdt w_opn,5,agl_opn,agl_opn_l,TC,TC_sh,TEMP sincos agl_opn,agl_opn_l,sin_opn,cos_opn,TEMP,TEMP1,TEMP2,TEMP3,TEMP4 vvvf w_opn,wn,vsd,vsq,vn,TEMP1 dq_ab vsd,vsq,sin_opn,cos_opn,VSAL_REF,VSBE_REF SVPWM .if (DEADCON==1) indb IA,IB,IC .endif ;=========================================================================== .if (scope_Enable==1) call SaveToBuffer ;数据存入缓存 .endif Clock_S01 S01,S01_K,Clock ;环境恢复返回主程序 LDP #232 LACC EVIFRA SACL EVIFRA Restore1 CLRC INTM RET ;==================TIMER1 OVER=================================================== ; I S R - PHANTOM ; DESCRIPTION: DUMMY ISR, USED TO TRAP SPURIOUS INTERRUPTS. ; MODIFIES: NOTHING ; LAST UPDATE: 16 JUNE 95 ;===================================================================== PHANTOM KICK_DOG ;RESETS WD COUNTER B PHANTOM
;===================================================================== ;IPM故障中断服务程序 ;======================================================================= IPM_FAIL: MAR *,AR1 MAR *+ SST #1,*+ SST #0, *+ SACH *+ SACL *
STOP ALARM LDP #4 SPLK #5,FailFlag ;------------------------------------------------------------------ MAR *,AR1 LACL *- ADDH *- LST #0, *- LST #1, *- CLRC INTM RET ;====================================================================== ;INT2中断服务程序,包括TIMER1和过流(PDPINT)两个中断 ;====================================================================== GISR2: Store1 ;---------------------------------------------------------------------- LDP #EVIVRA/128 ; LACC EVIVRA ;读中断向量寄存器 SUB #29H ;29H代表T1UFINT BCND TIM,EQ ;EVIMRA=0201H:只有T1UFINT和PDPINT被允许,所以非彼即此 B IFPDP TIM B TIMER1 ;如果是TIMER1中断,转入TIMER1中断服务程序 IFPDP ADD #29H SUB #20H BCND PDP,EQ B GISR2_OUT ;如果是过流则封锁IPM驱动信号 PDP STOP ; ALARM LDP #FailFlag/128 SPLK #1,FailFlag GISR2_OUT LDP #EVIFRA/128 LACC EVIFRA ; SACL EVIFRA ;清中断标志位 Restore1 CLRC INTM RET
;=============================================================================== SERIAL: Store3
ldp #IMR/128 SBIT0 IMR,B4_MSK ;在ScopeTX使SCI中断禁止 CLRC INTM ;开中断 LDP #SYSIVR/128 LACl SYSIVR SUB #6 BCND RXINT,EQ B TXINT ;--------------------------------------------------------------------- RXINT call ScopeRX b SERIAL_end ;--------------------------------------------------------------------- TXINT call ScopeTX ;--------------------------------------------------------------------- SERIAL_end SETC INTM ldp #IMR/128 SBIT1 IMR,B4_MSK ;SCI中断使能 Restore3 CLRC INTM ;开中断 RET ;---------------------------------------------------------------------
|