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

📄 clark.asm

📁 DSP关于F2407的实例程序
💻 ASM
字号:
;===================================================================== 
; 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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -