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

📄 test2.asm

📁 这是实现三相异步电动机FOC的DSP开发源代码
💻 ASM
字号:
;==============================================================================
; 程序文件名:	test2.ASM
;
; 功能描述:	clarke 模块测试实验
;
; 公司:	达盛科技
;
; 目标板:x2407
;=====================================================================================
; 修改记录:
;-------------------------------------------------------------------------------------
; 最后修改日期:2005.07.20	版本号: Ver.1.0
;==============================================================================
;******************************************************************************
;					  系统选项
;******************************************************************************
real_time	          .set	  1     ; '1' 代表实时模式, '0'代表非实时模式  

* 选择编译选项
                                    
PWM_PERIOD	.set	100		; PWM 周期设置,单位是微秒 (10KHz) 
;T1PER_	    .set	PWM_PERIOD*10	; *1000nS/(2*50nS)
T1PER_	    .set	PWM_PERIOD*20	; *1000nS/(2*25nS)
;****************************************************************************** 
;-----------------------------------------------------------------------------
; 外部参量声明
;-----------------------------------------------------------------------------
		.include	"x24x_app.h"

		.global MON_RT_CNFG

		.ref	SYS_INIT   
		
		.ref	RAMP_GEN, RAMP_GEN_INIT				;磁链给定子程序
		.ref	rmp_gain, rmp_offset, rmp_freq		;输入参量
    	.ref	step_angle_max				    	;输入参量
		.ref	rmp_out					        	;输出参量   
		
		.ref    FC_PWM_DRV,FC_PWM_DRV_INIT		    ;PWM波形产生子程序
		.ref    Mfunc_c1,Mfunc_c2,Mfunc_c3,Mfunc_p	;输入参量
		.ref    n_period			            	;输出参量   
		
		.ref	I_GEN,I_GEN_INIT					;模拟电流反馈子程序
		.ref	Ia_offset,Ib_offset,Ia_gain  		;输入参量
 		.ref	Ib_gain,delt_theta,theta			;输入参量
		.ref	Ia_out,Ib_out				 		;输出参量
		
		.ref	CLARKE, CLARKE_INIT					;clarke 变换子程序
		.ref	clark_a, clark_b					;输入参量
		.ref	clark_d, clark_q					;输出参量

		.ref 	DATA_LOG_INIT,DATA_LOG				;图形显示数据获取子程序
		.ref	dlog_iptr1,dlog_iptr2				;输出参量
;-----------------------------------------------------------------------------
; 输入参量声明
;-----------------------------------------------------------------------------
		.def	GPR0				;通用寄存器 

		.bss	GPR0,1				;通用寄存器  
		.bss	isr_ticker,1
	
;==============================================================================
;向量表( 包括实时模式监控程序 )
;==============================================================================
        .include "c200mnrt.i" 	; 条件编译选项

		.sect "vectors"  
		.def 	_c_int0 

RESET	    B	  _c_int0 	 		; 00
INT1	    B	  PHANTOM	 		; 02
INT2	    B	  T1_PERIOD_ISR     ; 04
INT3	    B	  PHANTOM	 		; 06
INT4	    B	  PHANTOM			; 08
INT5	    B	  PHANTOM	 		; 0A
INT6	    B	  PHANTOM	 		; 0C

		.include	"rtvecs.h"

; Note : The above include line must be AFTER the user configurable 
;        vectors. Do not change the place where this line is included.

;==============================================================================
; 主程序代码
;==============================================================================
		.text
_c_int0:
						
		CALL	SYS_INIT 
		CALL	FC_PWM_DRV_INIT ;初始化定时器
		CALL    DATA_LOG_INIT	;
		CALL    RAMP_GEN_INIT  
		CALL    I_GEN_INIT
		CALL    CLARKE_INIT

;---实时模式选项---------------
	.if (real_time)
		CALL	MON_RT_CNFG		
	.endif
;----------------------------------    

;-----------------------------------
;    用户初始化参量输入
;---------------------------------- 
       LDP   #n_period
	   SPLK	 #T1PER_,n_period		;初始化 PWM 频率10kHz
	   						
	   LDP   #rmp_freq
	   SPLK  #2a00h,rmp_freq 		;磁场频率设定							 

;----------------------------------------------------------
; 系统中断初始化
;----------------------------------------------------------
	;事件管理器
		POINT_EV
		SPLK	#0000001000000000b,IMRA ;使能 T1 定时器下溢中断
		SPLK	#0000000000000100b,IMRC ;使能 CAP3 中断 (编码器z信号)
			    ;||||!!!!||||!!!!		
			    ;5432109876543210

		SPLK	#0FFFFh,IFRA	; Clear all Group A interrupt flags
		SPLK	#0FFFFh,IFRB	; Clear all Group B interrupt flags
		SPLK	#0FFFFh,IFRC	; Clear all Group C interrupt flags

	;C2xx Core
		POINT_PG0

;---实时模式选项 --------------------------------------------------
	.if (real_time)
		SPLK	#0000000001001010b,IMR	;En Int lvl 3,7 (T2 ISR)
			     ;5432109876543210
	.endif


	.if (real_time != 1)
		SPLK	#0000000000001010b,IMR	;En Int lvl 4 (CAP3/QEP ISR)
	     	   	;||||!!!!||||!!!!		
		    	;5432109876543210
	.endif

		SPLK	#0FFFFh, IFR		;Clear any pending Ints
		EINT				    	;Enable global Ints
		POINT_B0
;-----------------------------------------------------------------------
;使能 PWM 信号   
;-----------------------------------------------------------------------
	.if (x243|x2407)			;目标板设定
		POINT_PF2
		LACC	OCRA
		AND		#0BFFFh	
		SACL	OCRA			;选择 IOPB6 第二功能

		LACC	PBDATDIR
		OR		#04000h
		SACL	PBDATDIR		;Set IOPB6 as output

		LACC	PBDATDIR
		AND		#0FFBFh     	;IOPB6 为低使能 PWM
;       OR		#00040h     	;IOPB6 为高禁止 PWM
		SACL	PBDATDIR  	
	.endif

;======================================================
MAIN:		;系统主程序循环
;======================================================

M_1	  NOP
      NOP
	  NOP
      CLRC XF	
      B	MAIN
;======================================================


;===========================================================================
; 程序名: T1_PERIOD_ISR				    程序类型: ISR
;
; 功能描述:断点保护
;
; 公司: 达盛科技
; 修改记录:
; 最后修改日期:	2005.7.10
;===========================================================================
T1_PERIOD_ISR:
;Context save regs
		MAR	*,AR1			;AR1 is stack pointer
		MAR	*+          	;skip one position
		SST	#1, *+      	;save ST1
		SST   #0, *+      	;save ST0
		SACH	*+          ;save acc high
		SACL	*			;save acc low

		POINT_EV
		SPLK	#0FFFFh,IFRA  	; Clear all Group A interrupt flags (T1 ISR)
        SETC    XF  
        SETC	SXM				; 允许符号扩展
		CLRC	OVM				; 清除溢出标志
        
        POINT_B0
        
        ; 校验 ISR
		LACC 	isr_ticker	
		ADD		#1			
		SACL    isr_ticker
		          
;=========================================================
;主循环中断服务程序开始
;=========================================================
     
; Ramp 产生模块
	    CALL    RAMP_GEN
; I_gen 模块 
		LDP		#theta  
		BLDD	#rmp_out,theta  
        CALL     I_GEN 
; clarke 模块 
		LDP      #clark_a
        BLDD     #Ia_out,clark_a
        BLDD     #Ib_out,clark_b
        CALL     CLARKE         
; PWM 模块
        CALL     FC_PWM_DRV     ;设置 PWM 频率为10kHz
;DATA_LOG
       ; ldp 	#dlog_iptr1			;
       ; SPLK	#rmp_out,dlog_iptr1	;
       ; SPLK	#Ib_out,dlog_iptr2	;
        CALL    DATA_LOG			;
;=========================================================
;主循环中断服务程序结束
;=========================================================
;断点恢复
END_ISR:
		POINT_PG0

		MAR	*, AR1    	;make stack pointer active
		LACL	*-		;Restore Acc low
		ADDH	*-		;Restore Acc high
		LST	#0, *-      ;load ST0
		LST     #1, *-  ;load ST1
		EINT
		RET   
		
;==============================================================================
; I S R  -  PHANTOM
;
; 功能描述:	哑中断服务程序
;
; 修改记录:
; 最后更新日期:	2005.6.23
;==============================================================================
PHANTOM 	B	PHANTOM







    

⌨️ 快捷键说明

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