?? i_gen.asm
字號:
;===========================================================================
; 文件名: Igen.asm
;
; 模塊名: I_GEN
;
; 初始化程序名: I_GEN_INIT
;
; 公司: 達盛科技
;
; 功能描述: 根據(jù)輸入角度值,產(chǎn)生相差120度的正弦信號,以模擬電流反饋
; 正弦信號的相位、零點、幅值、可調(diào)根據(jù)輸入調(diào)整
;
; |~~~~~~~~~~~~~~~|
; Ia_offset o------>| |
; Ib_offset o------>| |----->o Ia_out
; Ia_gain o------>| I_GEN |
; Ib_gain o------>| |
; theta_delt o------>| |
; theta o------>| |----->o Ib_out
; |_______________|
;
; 說明: 0 < theta < 7FFFh 對應(yīng) 0 < theta < 360 deg
;
; 目標板cpu: C2xx
;=====================================================================================
; 修改記錄:
;-------------------------------------------------------------------------------------
; 最終修改日期:2005.6.15 版本號: Ver 1.0
;===========================================================================
;(要調(diào)用模塊,就將下面聲明語句復(fù)制到主程序代碼中相應(yīng)位置)
; .ref I_gen,I_gen_INIT ;子程序調(diào)用
; .ref Ia_offset,Ib_offset,Ia_gain ;輸入
; .ref Ib_gain,delt_theta,theta ;輸入
; .ref Ia_out,Ib_out ;輸出
;===========================================================================
;變量定義
.def I_GEN, I_GEN_INIT ;子程序調(diào)用
.def Ia_offset,Ib_offset,Ia_gain, ;輸入
.def Ib_gain,delt_theta,theta ;輸入
.def Ia_out,Ib_out ;輸出
;===========================================================================
.ref SINTAB_360
Ia_offset .usect "I_GEN",1
Ib_offset .usect "I_GEN",1
Ia_gain .usect "I_GEN",1
Ib_gain .usect "I_GEN",1
delt_theta .usect "I_GEN",1
theta .usect "I_GEN",1
Ia_out .usect "I_GEN",1
Ib_out .usect "I_GEN",1
t_ptr1 .usect "I_GEN",1
theta_a .usect "I_GEN",1
theta_b .usect "I_GEN",1
GPR0_i1 .usect "I_GEN",1
;=====================================================================
I_GEN_INIT:
;=====================================================================
ldp #Ia_offset
SPLK #0000h, Ia_offset
SPLK #0000h, Ib_offset
SPLK #3FFFh, Ia_gain
SPLK #3FFFh, Ib_gain
SPLK #0000h, delt_theta
SPLK #0000h, theta
SPLK #0000h, Ia_out
SPLK #0000h, Ib_out
RET
;======================================================================
I_GEN:
;======================================================================
;計算 theta_a
ldp #theta
LACC theta
ADD delt_theta ;加偏移角
AND #07FFFh ;強制正數(shù)循環(huán)
SACL GPR0_i1 ;
LACC GPR0_i1,9
SACH t_ptr1
LACC #SINTAB_360
ADD t_ptr1
TBLR theta_a ;theta_a = Sin(theta+delt_theta) Q15
;-----------------------------------
;計算 theta_b
ldp #theta
LACC theta
ADD delt_theta ;加偏移角
SUB #10922 ;加120度
AND #07FFFh
SACL GPR0_i1
LACC GPR0_i1,9
SACH t_ptr1
LACC #SINTAB_360
ADD t_ptr1
TBLR theta_b ;theta_b = Sin(theta+delt_theta-120) Q15
;-----------------------------------
;計算 Ia_out/Ib_out
SETC SXM ; 允許符號擴展
SPM 1 ; 設(shè)置SPM 以完成 Q15乘法運算
LACC #0 ; 清零 ACC
LT Ia_gain ; TREG = ia0_gain
MPY theta_a ; PREG = theta_a * Ia_gain
PAC
ADD Ia_offset,16
SACH Ia_out ; Ia_out = theta_a * Ia_gain + Ia_offset
LACC #0 ; 清零 ACC
LT Ib_gain ; TREG = Ib_gain
MPY theta_b ; PREG = theta_b * Ib_gain
PAC
ADD Ib_offset,16
SACH Ib_out ; Ib_out = theta_a * Ib_gain + Ib_offset
SPM 0 ; SPM 復(fù)位
RET
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -