?? clark.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 + -