clark.asm

来自「DSP关于F2407的实例程序」· 汇编 代码 · 共 52 行

ASM
52
字号
;===================================================================== 
; Name	: CLARK.asm
; Module Name	: CLARK,CLARK_INIT
; Para	: input:IA0,IB0		(Q12)
;	  output:Ialfa0,Ibeta0 	(Q11)
;	  constant:CLARK_C1=sqrt(3/8)=0.61237=0x4E62(Q15),CLARK_C2=sqrt(1/2)=0.707106=0x5A82(Q15)
; Func	: CLark Transform (3/2 Transform)
; Ialfa0 = sqrt(3/2) * IA0 = sqrt(3/8) * ( IA0 * 2 );( IA0 * 2 )相当于IA0值不变,Q格式从Q12变到Q11。
; Ibeta0 = sqrt(1/2) * ( IA0 + 2 * IB0 ) = sqrt(1/2) * ( (IA0/2+IB0) * 2 );同理( (IA0/2+IB0) * 2 )相当IB0右移一位再加IA0。
; Modify : 2004.6.16
;===================================================================== 
  	.include "f2407.h"
  	
    	.global	CLARK,CLARK_INIT	;function call
  	
  	.global	IA0,IB0			;input(Q12)
  	.global	Ialfa0,Ibeta0		;output(Q11)
	
	.global TEMP
	.global CLARK_C1		;constant
	.global	CLARK_C2		
;=====================================================================
CLARK_INIT:
;=====================================================================
; 赋值两个常数
	LDP	#DP_DATA
	SPLK	#4E62H,CLARK_C1
	SPLK	#5A82H,CLARK_C2
	RET
;=====================================================================
CLARK:
;=====================================================================
	SPM 	1		;相乘产生两个符号位,左移一位去掉。	
	SETC	SXM		;SXM=1
;---------------------------------------------------------------
; Ialfa0 = sqrt(3/2) * IA0 = sqrt(3/8) * ( IA0 * 2 )	
	LDP	#DP_DATA	;这一个页面存放SVPWM相关的数据。
	LT	IA0
	MPY	CLARK_C1
	SPH	Ialfa0		;存Ialfa0结果	
;---------------------------------------------------------------
; Ibeta0 = sqrt(1/2) * ( IA0 + 2 * IB0 ) = sqrt(1/2) * ( (IA0/2+IB0) * 2 )		
	LACC	IA0
	SFR			;算术右移,IA0/2
	ADD	IB0		;按matlab计算这个值不会溢出16位。
	SACL	TEMP
	LT	TEMP
	MPY	CLARK_C2
	SPH	Ibeta0		;存Ibeta0结果	
;---------------------------------------------------------------	
	SPM	0		;恢复PM值为0
	RET

⌨️ 快捷键说明

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