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

📄 adc4udrv.asm

📁 此源代码用于电力电子逆变器的同步锁相实现
💻 ASM
字号:
;===========================================================================
; File Name:	Adc4udrv.asm				     
;
; Module Name: 	ADC04U_DRV
;
; Initialization Routine: ADC04U_DRV_INIT
;
; Description:  This module performs 4-channel AD conversion of unipolar signals. 	
;
;				|~~~~~~~~~~~~~~~~~~|
;	 A4_ch_sel  	o------>|  		   |
;	 C1_gain	o------>|Q13   ADC04U_DRV  |
;	 C2_gain  	o------>|Q13  		   |
;	 C3_gain	o------>|Q13   		Q15|----->o C1_out
;	 C4_gain  	o------>|Q13  		Q15|----->o C2_out
;	 			| 		Q15|----->o C3_out
;	 			| 		Q15|----->o C4_out  
;				|__________________|
;
;	  Notes:
;		1. This is a Unipolor driver, i.e. expects the
;		   ADC input to be 0->Vcc with gnd referenced to 0v		   
;		2. Cx_gain has range of -3.999999 --> +3.99999 (i.e. Q13)
;		3. Cx_out has range 0 --> +0.99999 (i.e. Q15)
;		   with:
;			1.0 x (VrefHi - VrefLo) = +0.999999 (7FFFh)
;			0.5 x (VrefHi - VrefLo) = +0.5      (3FFFh)
;			0.0 x (VrefHi - VrefLo) = 0	    (0000h)
;	
;	ADC_ch_sel HEX values vs Channels selected
;	_________________________________________________________________
;	| C4 select	| C3 select	| C2 select	| C1 select	|
;	-----------------------------------------------------------------
;
;	For x240
;		C1/C3 select:		0,1,2...7	-->	Ch0,1,2,...7
;		C2/C4 select:		0,1,2...7	-->	Ch8,9,10,...15
;
;	For x243
;		C1/C2/C3/C4 select:	0,1,2...7	-->	Ch0,1,2,...7
;
;	For x2407
;		C1/C2/C3/C4 select:	0,1,2...F	-->	Ch0,1,2,...15
;
;
; Target dependency:	x240/243/2407
; To Select the target device see x24x_app.h file.
;
;=====================================================================================
; History:
;-------------------------------------------------------------------------------------
; 9-15-2000	Release	Rev 1.0
;===========================================================================
		.def	ADC04U_DRV, ADC04U_DRV_INIT			;function call
		.def	A4_ch_sel,C1_gain,C2_gain,C3_gain,C4_gain	;inputs
		.def	C1_out, C2_out, C3_out, C4_out		      	;Outputs
;===========================================================================

		.include	x24x_app.h
		.ref	GPR0 				
        

;Alias Variable declaration (to conserve .bss locations)
MASK		.set	GPR0	

		
C1_gain		.usect	"adc4udrv",1 		
C2_gain		.usect	"adc4udrv",1 		
C3_gain		.usect	"adc4udrv",1 		
C4_gain		.usect	"adc4udrv",1
C1_out		.usect	"adc4udrv",1 					
C2_out		.usect	"adc4udrv",1 		
C3_out		.usect	"adc4udrv",1 		
C4_out		.usect	"adc4udrv",1
A4_ch_sel	.usect	"adc4udrv",1
GPR0adc		.usect	"adc4udrv",1      				   
GPR1adc		.usect	"adc4udrv",1
		 		
;=========================
ADC04U_DRV_INIT:
;=========================

		LDP	#A4_ch_sel	
		SPLK	#1FFFh, C1_gain		;Init with gain of 1
		SPLK	#1FFFh, C2_gain		;Init with gain of 1
		SPLK	#1FFFh, C3_gain		;Init with gain of 1
		SPLK	#1FFFh, C4_gain		;Init with gain of 1


;------------------------------------------------------------
		POINT_PF1
			;5432109876543210
			;!!!!||||!!!!||||
;		SPLK	#0000000000000011b, ADC_CNTL2	;
		SPLK	#0000000000000010b, ADC_CNTL2	;Prescaler=4(for x243),8(for x240)
		SPLK	#1111100100010000b, ADC_CNTL1	;
  
		LDP	#A4_ch_sel				
		SPLK	#5432h, A4_ch_sel		;default to Ch 2,3,4,5
		RET
;-----------------------------------

;======================================================================================
ADC04U_DRV:
;======================================================================================
;---target dependancy---------------
		SETC	SXM			; Sign extension mode on
	;Read 1st converted value
		POINT_PF1
		LACC	ADC_FIFO1	

		LDP	#A4_ch_sel		
		SFR
		AND	#7FFFh 	
		SACL	C1_out

		LT	C1_gain		;Ia_gain in Q13	
		MPY	C1_out		;Q13 x Q15 = Q28
		PAC
		SACH	C1_out,3		;Convert final result to Q15 

	;Read 2nd converted value
		POINT_PF1
		LACC	ADC_FIFO2	;

		LDP	#A4_ch_sel			
		SFR
		AND	#7FFFh
		SACL	C2_out
		LT	C2_gain		;Ib_gain in Q13	
		MPY	C2_out		;Q13 x Q15 = Q28
		PAC
		SACH	C2_out,3		;Convert final result to Q15

	;Read 3rd converted value
		POINT_PF1
		LACC	ADC_FIFO1	

		LDP	#A4_ch_sel			
		SFR
		AND	#7FFFh
		SACL	C3_out
		LT	C3_gain		;Ia_gain in Q13	
		MPY	C3_out		;Q13 x Q15 = Q28  
		PAC
		SACH	C3_out,3		;Convert final result to Q15

	;Read 4th converted value
		POINT_PF1
		LACC	ADC_FIFO2		;

		LDP	#A4_ch_sel			
		SFR
		AND	#7FFFh
		SACL	C4_out
		LT	C4_gain		;Ib_gain in Q13	
		MPY	C4_out		;Q13 x Q15 = Q28
		PAC
		SACH	C4_out,3		;Scale to Q15
		
		CLRC	SXM			;Sign extension mode off

		
	;Start another conversion
START_NXT:
		LACC	A4_ch_sel,1
		AND	#000Eh
		SACL	MASK  
		LACC	A4_ch_sel
		AND	#0070h
		OR	MASK 
		OR	#1101100100000001b
			;5432109876543210 

		POINT_PF1
 		SACL	ADC_CNTL1		;Start 1st Dual conversion


		LDP	#A4_ch_sel			
		LACC	A4_ch_sel,9
		AND	#000Eh,16
		SACH	MASK     
		LACC	A4_ch_sel,8
		AND	#0070h,16
		SACH	GPR1adc
		LACC	GPR1adc
		OR	MASK   
		OR	#1101100100000001b
			;5432109876543210 
			
		POINT_PF1  
 		SACL	ADC_CNTL1		;Start 2nd Dual conversion

	
		LDP	#A4_ch_sel			
		RET

;-----------------------------------

⌨️ 快捷键说明

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