📄 mcs.asm
字号:
LAR AR5,#PRT_C
LOOP:
B LOOP
;=====================================================================
;Name : EVA_INIT
;Para :
;Func : EVA模块初始化
;Modify : 2004.5.28
;=====================================================================
EVA_INIT:
LDP #DP_EVA
SPLK #0FFFFH,EVAIFRA ;清EVA所有中断标志位
;-----------------------SVPWM时使用---------------------------
SPLK #1000011001100110B,ACTRA ;空间矢量逆时针转,开关量000(位14-12),PWM1,3,5高有效,PWM2,4,6低有效
SPLK #0DF0H,DBTCONA ;死区时间5.2uS.使能PWM1-6。
SPLK #010H,CMPR1 ;给比较寄存器赋值
SPLK #030H,CMPR2
SPLK #0FA0H,T1PR ;赋值周期寄存器,按5k开关频率,计数器频率40MHz。PWM周期=T1PR*2(因为是连续增减模式)
SPLK #1001001000000000B,COMCONA ;下溢时CMPRx重载。
SPLK #0,T1CNT ;计数器初值为0
SPLK #081H,EVAIMRA ;GPTIMER周期中断使能,每个周期重新载入T1,T2,功率驱动保护中断使能。
SPLK #0110000010000000B,GPTCONA ;下溢启动ADC
SPLK #0000100001000010B,T1CON ;启动定时器,bit15-14=00,仿真挂起后IPM无开关动作,但上下桥臂有一个开。
; SPLK #0000100000000010B,T1CON
;-----------------------------------------------------------------
CLRC INTM ;开中断
RET
;=====================================================================
;Name : GISR2
;Para :
;Func : 中断2入口程序
;Modify : 2004.5.28
;=====================================================================
GISR2:
; LDP #ST0_CON1 ;保存状态寄存器,不需要指定页,SST自动DP=0.
SST #0,ST0_CON1
SST #1,ST1_CON1
LDP #0E0H ;DP指向PIVR所在页
LACC PIVR,1 ;读中断向量寄存器,左移1位(因为pvesc中每个跳转指令占两个字节空间)
ADD #PVECTORS ;加上基地址
BACC
;=====================================================================
;Name : T1GP_ISR
;Para :
;Func : 定时器1周期中断程序
;Modify : 2004.5.28
;=====================================================================
T1GP_ISR:
;计算程序用的时间。
; LDP #DP_EVB
; SPLK #0FFFEH,T3PR
; SPLK #0,T3CNT
; NOP
; SPLK #0001000001000000B,T3CON
;------------------给比较寄存器赋值------------------------------
LDP #DP_DATA
LACC ACTRA_BUFF
LDP #DP_EVA
SACL ACTRA
LDP #DP_DATA
LACC CMPR1_BUFF
LDP #DP_EVA
SACL CMPR1
LDP #DP_DATA
LACC CMPR2_BUFF
LDP #DP_EVA
SACL CMPR2
;------------------判断AD转换是否完成,并读转换结果--------------
LDP #DP_PF2
WAIT_ADC:
BIT ADCTRL2,6 ;ADC完成中断标志位
BCND WAIT_ADC,NTC
CALL i_GET ;读ADC结果
;------------------
;计算ThetaS0:
LDP #DP_DATA
SPLK #13557,TEMP
LT Omiga_ref
MPY TEMP
SPM 1
PAC
SACH TEMP
SPM 0
; LDP #DP_DATA
LACC ThetaS0
ADD TEMP ;相加的步长=7FFF*f(输出频率)/5K(开关频率)=7FFF*50/5K/792=13557(Q15)。
;ADD #164
;ADD #328
AND #7FFFH
SACL ThetaS0
; SACL PARK_Theta ;计算VR变换时用到
;计算电压(恒压频比)
LDP #DP_DATA
LT Omiga_ref
MPY #27
PAC
SACL UST0
SACL USM0
;--------------------- 转速检测 -----------------
; CALL QEP
;--------------------- 转速滤波 -----------------
; CALL OMIGA_FILTER
; LDP #DP_DATA
; LACC OMIGA_FILTER_RESULT
; SACL OmigaR0
;--------------------- 转速PID调节 -----------------
; CALL Omiga_PID
;------------------判断AD转换是否完成,并读转换结果--------------
; LDP #DP_PF2
;WAIT_ADC:
; BIT ADCTRL2,6 ;ADC完成中断标志位
; BCND WAIT_ADC,NTC
; CALL i_GET ;读ADC结果
;------------------把AD转换结果进行CLARK变换(3/2) --------------
; CALL CLARK
;------------------ 进行PARK变换 ----------------------
; CALL PARK
;------------------ IST0滤波 ----------------------
; CALL FILTER
; LDP #DP_DATA
; LACC FILTER_RESULT
; SACL IST0
;-----------------------转子磁链观测器----------------------------
; CALL FLUX
MAR *,AR0
; LAR AR0,#PRT_A
LAR AR0,#PRT_G
ADRK #7FH
MAR *,AR7
CMPR 2
; BCND END_DRAWA,TC
BCND END_LOOP,TC
LDP #DP_DATA
LACC IB0
LDP #PRT_A
SACL *+
LDP #DP_DATA
LACC IA0
LDP #PRT_H
MAR *,AR6
SACL *+
B END_DRAW
END_LOOP:
LAR AR7,#PRT_A
LAR AR6,#PRT_H
END_DRAW:
;-----------------------转子磁链PID调节器-------------------------
; CALL KesaiR_PID
;----------------------- 转矩电流调节器 -------------------------
; CALL IST_PID
;----------------------- 进行IPARK变换 -------------------------
CALL IPARK
;----------------------- SVPWM计算 -------------------------
CALL SVPWM
LDP #0 ;恢复状态寄存器,这句不能省,与SST指令不一样!!!!
LST #1,ST1_CON1
LST #0,ST0_CON1 ;恢复的时候要先ST1再ST0,反过来的话会进入NMI中断。
;计算程序用的时间。
; LDP #DP_EVB
; SPLK #0001000000000000B,T3CON
; NOP
LDP #DP_EVA
SPLK #0080H,EVAIFRA ;清EVA相应中断标志位
CLRC INTM ;开总中断,因为一进入中断,系统自动关闭总中断。
RET
;=====================================================================
;Name : GISR1
;Func : 中断1入口程序
;Modify : 2004.6.18
;=====================================================================
GISR1:
SST #0,ST0_CON1
SST #1,ST1_CON1
LDP #0E0H ;DP指向PIVR所在页
LACC PIVR,1 ;读中断向量寄存器,左移1位(因为pvesc中每个跳转指令占两个字节空间)
ADD #PVECTORS ;加上基地址
BACC
;=====================================================================
;Name : PDPINTA_INIT
;Func : 功率模块驱动保护中断
;Modify : 2004.6.18
;=====================================================================
PDPINTA_INIT:
LDP #DP_EVA
SPLK #1001000000000000B,COMCONA
SPLK #0000000000000000B,ACTRA
B PDPINTA_INIT
RET
;-----------------------------------------------------------------
PHANTOM:
LDP #DP_EVA
SPLK #1001000000000000B,COMCONA
SPLK #0000000000000000B,ACTRA
B PHANTOM
RET
NMIINT:
LDP #DP_EVA
SPLK #1001000000000000B,COMCONA
SPLK #0000000000000000B,ACTRA
B NMIINT
RET
TESTINT:
LDP #DP_EVA
SPLK #1001000000000000B,COMCONA
SPLK #0000000000000000B,ACTRA
B TESTINT
RET
;=====================================================================
;Name : GISR6
;Func : 中断6入口程序
;Modify : 2004.8.18
;=====================================================================
GISR6:
SST #0,ST0_CON1
SST #1,ST1_CON1
LDP #0E0H ;DP指向PIVR所在页
LACC PIVR,1 ;读中断向量寄存器,左移1位(因为pvesc中每个跳转指令占两个字节空间)
ADD #PVECTORS ;加上基地址
BACC
;=====================================================================
;Name : EXT_INIT
;Func : 外部中断,做测试计算的中间结果用。
;Modify : 2004.8.18
;=====================================================================
EXT_INIT:
CALL PROTECT
; LAR AR7,#PRT_A
; LDP #DP_PF1
; SPLK #8007H,XINT1CR ;清中断标志位。
;
; LDP #0
; LST #1,ST1_CON1
; LST #0,ST0_CON1
;
; CLRC INTM
;
RET
;-----------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -