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

📄 scopead.asm

📁 f2407:电机控制
💻 ASM
字号:
;-----------------------------------------------------------
; 重庆大学DSP实验室
; 函数名:
;	void scope(scope_struct *p, int DAC_data_A, int DAC_data_D)
; 函数功能:
;	本函数将函数参数(Q11格式)转换
; 至D/A芯片MAX5741的量程范围内,以Q0格式
; 表示,同时遵从MAX5741的通信规约。当程序
; 运行时,用户可以调用本子程序对数据进行
; 转换,再通过SPI模块将结果送至MAX5741芯片
; 进行DA转换,然后通过示波器在MAX5741的输出口
; 观察该程序变量的变化波形,方便程序的调试。
; 转换公式:
;	设待转换程序变量的数值为U,D/A的最大
; 输入数字量为Umax(对于MAX5741,Umax=3FFh),
; 则转换公式为:
;	Uout=Umax/2+U*Umax/2
; 入口条件:
;	scope_struct *p	;pointer which point to the return structure
;	int DAC_data_A	;Qx, data which will be sent to DAC A channel
;	int DAC_DATA_D	;Qx, Data which will be sent to DAC D channel
; 出口条件:
;	typedef struct
;	{	int Qvalue;			//Qx value of the parameters, 
;							//Q16:00h, Q15:01h, Q14:02h, Q13:03h, Q12:04h, Q11:05h, Q10:06h
;							//Note this parameter must be in range of 0=<Qvalue<=6
;		int scopeA;			//data of A channel
;		int scopeD;			//data of D channel
;		int scope_para;		//which two parameters will be sent out
;							//refer to the main program	
;	}scope_struct;
; 请用户在主程序中声明以下外部函数:
;	void scope(scope_struct *p, int DAC_data_A, int DAC_data_D);

; 2002.6.20
;-----------------------------------------------------------
		.def	_scope          
scope_frame .set 1h             
Qvalue_min .set 0h
Qvalue_max .set 6h
_scope:
		POPD	*+  
		SAR		AR0,*+
		SAR		AR1,*           
		LAR		AR0,*
		LAR		AR2,*+,AR0		;STACK:DAC_dataD/DAC_dataA/ *p/address/AR0/AR1/Y
								;ARP:AR0, AR1:Y, AR0:AR1
		SETC	SXM
		SPLK	#1ffh,*         ;STACK:DAC_dataD/DAC_dataA/ *p/address/AR0/0x1FF/Y
								;ARP:AR0, AR1:Y, AR0:0x7FF
		LT		*,AR2			;TREG: 0x1FF
								;ARP:AR2
		SBRK	#3 
		LAR		AR3,*-			;AR3:Qvalue, AR2:dac_dataA
		MPY		*-,AR3			;ARP:AR3
								;AR0:0x1FF, AR2:DAC_dataD
		LACC	*				;Qvalue-->ACC
		BCND	scope7,GEQ
		SPLK	#Qvalue_min,*	;if Qvalue<0, then Qvalue=Qvlaue_min
		B		scope8
scope7	SUB		#Qvalue_max
		BCND	scope8,LT
		SPLK	#Qvalue_max,*	;if Qvalue>Qvalue_max, then Qvalue=Qvalue_max
scope8	LACC	*+,AR0				
		ADD		#scopetable		
		TBLR	*
		LACC	*,AR3				
		BACC                	;ARP:AR3, AR0:x, AR2:DAC_dataD, AR3:scopeD
Qvalue16:
		LACC	#3ffh,15
		APAC					;Umax/2+U*Umax/2    
		SACH	*+,2,AR2		;Q16, and left shift 2 bit   										
		MPY		*,AR3			;DAC_dataD*0x1ff
		LACC	#3FFh,15
		APAC                    ;Umax/2+U*Umax/2
		SACH	*,2				;ARP:AR3, AR2:DAC_dataD, AR3:scopeD
		B		scopeend	
Qvalue15:
		LACC	#1FFh,15
		APAC
		SACH	*+,3,AR2
		MPY		*,AR3
		LACC	#1FFh,15
		APAC
		SACH	*,3
		B		scopeend
Qvalue14:
		LACC	#1FFh,14
		APAC
		SACH	*+,4,AR2
		MPY		*,AR3
		LACC	#1FFh,14
		APAC
		SACH	*,4
		B		scopeend
Qvalue13:
		LACC	#1FFh,13
		APAC
		SACH	*+,5,AR2
		MPY		*,AR3
		LACC	#1FFh,13
		APAC
		SACH	*,5
		B		scopeend
Qvalue12:
		LACC	#1FFh,12
		APAC	
		SACH	*+,6,AR2
		MPY		*,AR3
		LACC	#1FFh,12
		APAC
		SACH	*,6
		B		scopeend
Qvalue11:
		LACC	#1FFh,11
		APAC
		SACH	*+,7,AR2
		MPY		*,AR3
		LACC	#1FFh,11
		APAC
		SACH	*,7
		B		scopeend
Qvalue10:
		LACC	#1FFh,10
		APAC
		SFL
		SACH	*+,7,AR2
		MPY		*,AR3
		LACC	#1FFh,10
		APAC
		SFL	
		SACH	*,7
scopeend:          
		LACC	*
		AND		#0FFCh			
		OR		#3000h			;D channel selection
		SACL	*-
		LACC	*
		AND		#0FFCh			;A channel selection
		SACL	*,AR1
		SBRK	#(scope_frame+1)
		LAR		AR0,*-
		PSHD	*
		RET

scopetable:
scope0	.word	Qvalue16			;Q16
scope1	.word	Qvalue15         	;Q15
scope2	.word	Qvalue14         	;Q14
scope3	.word	Qvalue13         	;Q13
scope4	.word	Qvalue12         	;Q12
scope5	.word	Qvalue11         	;Q11
scope6	.word	Qvalue10         	;Q10		
		.end
			

⌨️ 快捷键说明

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