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

📄 cap_drv.asm

📁 这个是关于实现同步电机FOC的控制程序源代码
💻 ASM
字号:
;===========================================================================
; 文件名:	Cap_drv.asm			
;
; 模块名: 	CAP_EVENT_DRV	
;
; 初始化程序: CAP_EVENT_DRV_INIT
;
; 公司:	达盛科技
;
; 功能描述:	获得在捕获事件发生时基于预设时基的通用定时计数器的瞬时计数值。
;		    捕获事件可以是任意发生在 24x/24xx器件捕获输入管脚上的制定跳变。
; 
;							|~~~~~~~~~~~~~~~|
;	CAPn (EV H/W pin) o---->|				|----->o  FIFOn
;							|CAP_EVENT_DRV 	|
;							|				|
;							|---------------|
;
;
; 目标cpu:	x240/243/2407
; 选择目标器件和捕获输入引脚可参阅 x24x_app.h文件中的设置.
;=====================================================================================
; 修改记录:
;-------------------------------------------------------------------------------------
; 2005.08.23	版本号	Ver 1.0
;===========================================================================
;(To use this Module, copy this section to main system file)
;		.ref	CAP_EVENT_DRV, CAP_EVENT_DRV_INIT	;function call
;		.ref	CAP_EVENT_DRV_CLKPS_INIT		;function call
;		.ref	CLK_prescaler_bits			;Parameter					
;===========================================================================
;外部变量声明
		.def	CAP_EVENT_DRV, CAP_EVENT_DRV_INIT	;函数调用
		.def	CAP_EVENT_DRV_CLKPS_INIT		;函数调用
		.def	CLK_prescaler_bits			;参数	
;===========================================================================
		
		.include	x24x_app.h
		.bss	CLK_prescaler_bits, 1

;选择捕获输入
CAP1		.set	1
CAP2		.set	0
CAP3		.set	0
CAP4		.set	0

;===========================================================================
CAP_EVENT_DRV_INIT:
;===========================================================================		
;---引脚设置目标板选择--------

		POINT_PF2

		.if (x240)
;选择 x240 引脚捕获功能
		.if (CAP4)
		LACC	OCRB
		OR	#00010000000b	;设置CAP4捕获功能.
		SACL	OCRB	
		.endif
		
		.if (CAP3)
		LACC	OCRB
		OR	#01000000b		;设置CAP3捕获功能.
		SACL	OCRB
		.endif

		.if (CAP2)
		LACC	OCRB
		OR	#00100000b		;设置CAP2捕获功能.
		SACL	OCRB
		.endif

		.if (CAP1)		
		LACC	OCRB
		OR	#00010000b		;设置CAP1捕获功能.
		SACL	OCRB	
		.endif
		.endif
;------------------------------------------------------------------------
		.if (x243)
;选择 x243 引脚捕获功能
		.if (CAP3)
		LACC	OCRA
		OR	#00100000b
		SACL	OCRA			;设置CAP3捕获功能.	
		.endif

		.if (CAP2)
		LACC	OCRA
		OR	#00010000b
		SACL	OCRA			;设置CAP2捕获功能.	
		.endif

		.if (CAP1)
		LACC	OCRA
		OR	#00001000b
		SACL	OCRA			;设置CAP1捕获功能.	
		.endif
		.endif
;-------------------------------------------------------------------------
		.if (x2407)
;选择 x2407 引脚捕获功能
		.if (CAP3)
		LACC	MCRA
		OR	#00100000b
		SACL	MCRA			;设置CAP3捕获功能.
		.endif

		.if (CAP2)
		LACC	MCRA
		OR	#00010000b
		SACL	MCRA			;设置CAP2捕获功能.
		.endif

		.if (CAP1)
		LACC	MCRA
		OR	#0001000b
		SACL	MCRA			;设置CAP1捕获功能.
		.endif
		.endif				
;----------------------------------------------------------------------------

;---时基设置目标板选择--------------------------------------------------------
		.if (x240 | x243)

;Use Timer T2 as time base with default clock prescaler
		POINT_B0
		SPLK	#2, CLK_prescaler_bits	;Default prescaler set to x/4
		CLRC	SXM
		LACC	CLK_prescaler_bits,8
		AND	#0700h
;			 5432109876543210   ;寄存器位号
;			 ||||!!!!||||!!!!
		OR	#1001000001000010b		
		POINT_EV
		SACL	T2CON 			;Cont Up mode
		
		SPLK	#0FFFFh, T2PER		

; 设置捕获寄存器.[使能 CAP1, CAP2, CAP3, CAP4 捕获功能]

		.if (CAP1 | CAP2)
;			 	 5432109876543210
;			 	 ||||!!!!||||!!!!
		SPLK    #1010000001010000b,CAPCON ;CAP1/2 En, TMR2, +ve edge
		.endif

		.if (CAP3)
;			 5432109876543210
;			 ||||!!!!||||!!!!
		SPLK	#1001000000000100b,CAPCON ;CAP3 En, TMR2, +ve edge
		.endif

		.if (CAP4)
;			 5432109876543210
;			 ||||!!!!||||!!!!
		SPLK	#1000100000000001b,CAPCON ;CAP4 En, TMR2, +ve edge
		.endif
		.endif
;----------------------------------------------------------------------------

;---target dependancy--------------------------------------------------------
		.if (x2407)

;Use Timer T2 as time base with default clock prescaler
		POINT_B0
		SPLK	#2, CLK_prescaler_bits	;Default prescaler set to x/4
		CLRC	SXM
		LACC	CLK_prescaler_bits,8
		AND	#0700h
;			 5432109876543210
;			 ||||!!!!||||!!!!
		OR	#1001000001000010b		
		POINT_EV
		SACL	T2CON 			;Cont Up mode
		
		SPLK	#0FFFFh, T2PER		

; 设置捕获寄存器[使能 CAP1, CAP2, CAP3]

; 捕获通道选择
		.if (CAP1 | CAP2)
;			 	 5432109876543210
;			 	 ||||!!!!||||!!!!
		SPLK	#1010000001010000b,CAPCONA ;CAP1/2 En, TMR2, +ve edge
		.endif

		.if (CAP3)
;			 	 5432109876543210
;			 	 ||||!!!!||||!!!!
		SPLK	#1001000000000100b,CAPCONA ;CAP3 En, TMR2, +ve edge
		.endif
		.endif
		
		RET
;============================================================================
CAP_EVENT_DRV_CLKPS_INIT:
;============================================================================
;---目标板选择--------------------------------------------------------
		.if (x240 | x243)

;Use Timer T2 as time base with selectable clock prescaler 
		POINT_B0
		CLRC	SXM
		LACC	CLK_prescaler_bits,8	;Input user selected prescaler
		AND	#0700h
;			 5432109876543210
;			 ||||!!!!||||!!!!
		OR	#1001000001000010b		
		POINT_EV
		SACL	T2CON 			;Cont Up mode
		.endif

;---target dependancy--------------------------------------------------------
		.if (x2407)

;Use Timer T2 as time base with selectable clock prescaler
		POINT_B0
		CLRC	SXM
		LACC	CLK_prescaler_bits,8	;Input user selected prescaler
		AND	#0700h
;			 5432109876543210
;			 ||||!!!!||||!!!!
		OR	#1001000001000010b		
		POINT_EV
		SACL	T2CON 			;Cont Up mode
		.endif

		RET
;===========================================================================
CAP_EVENT_DRV
;===========================================================================
;这里无需执行软件代码。 
;硬件功能在初始化中已经被设置完成。

		RET

⌨️ 快捷键说明

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