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

📄 clark.asm

📁 TI公司24X系列DSP控制永磁同步电机PMSM
💻 ASM
字号:
;=====================================================================================
; File name:        CLARK.ASM                     
;                    
; Originator:	Digital Control Systems Group
;			Texas Instruments
;
; Description:                                 
; This file contains source for the CLARK transformation.
;=====================================================================================
; History:
;-------------------------------------------------------------------------------------
; 9-15-2000	Release	Rev 1.00
;================================================================================
; Applicability: F240,F241,C242,F243,F24xx.  (Peripheral Independant).
; Description:        
;                                (a,b,c) -> (d,q) Transformation
;                                clark_d =  a
;                                clark_q = (2 *clark_b + clark_a) / sqrt(3)
;
;
;================================================================================
; Routine Name: Generic function.        Routine Type: C Callable
;
; Description:
;  
;  C prototype : int clark(void *in, void *out)
;================================================================================
                .def        _clark
;================================================================================

__clark_framesize .set 0001h
;================================================================================
_clark:
                     POPD        *+
                SAR        AR0,*+
                SAR        AR1,*
                LARK        AR0,__clark_framesize
                LAR        AR0,*0+,AR0

;================================================================================
                SBRK        #3        ; Point AR0 to the first argument.
;--------------------------------------------------------------------------------
                LAR        AR2,*-        ; get the argument #1 in AR2. 
                                ; ARP=AR0, AR2->i/p s, AR0->arg #2. 
;--------------------------------------------------------------------------------
                LAR        AR3,*+        ; get the argument #1 in AR2. 
                                ; ARP=AR0, AR0->arg #2, AR2->i/p's, AR3->o/p's.
;--------------------------------------------------------------------------------
                ADRK    #3      ; Restore AR0 to point to FR0.
                                ; ARP=AR0, AR0->FR0, AR2->i/p's, AR3->o/p's.
;--------------------------------------------------------------------------------
                       SPM     1       ; Set SPM for Q15 multiplication
;--------------------------------------------------------------------------------
                SETC        SXM     ; Sign extension mode on
;--------------------------------------------------------------------------------
                MAR     *,AR2   ; ARP=AR2, AR0->FR0, AR2->clark_a, AR3->clark_d
;--------------------------------------------------------------------------------
                LACC    *+,AR3  ; ACC= clark_a.
                                ; ARP=AR3, AR0->FR0, AR2->clark_b, AR3->clark_d
;--------------------------------------------------------------------------------
                SACL    *+,AR2  ; Store Out_d=clark_a.
                                ; ARP=AR2, AR0->FR0, AR2->clark_b, AR3->clark_q
;--------------------------------------------------------------------------------
                SFR             ; Acc=clark_a/2.
                                ; ARP=AR2, AR0->FR0, AR2->clark_b, AR3->clark_q
;--------------------------------------------------------------------------------
                ADD     *,AR0   ; Acc=clark_a/2 + clark_b.
                                ; ARP=AR2, AR0->FR0, AR2->clark_b, AR3->clark_q
;--------------------------------------------------------------------------------
                SPLK         #18830,* ;FR0 = 1/sqrt(3).
                                ; ARP=AR2, AR0->FR0, AR2->clark_b, AR3->clark_q
;--------------------------------------------------------------------------------
                LT      *       ; T= 1/sqrt(3).
                                ; ARP=AR2, AR0->FR0, AR2->clark_b, AR3->clark_q
;--------------------------------------------------------------------------------
                SACL    *       ; FR0=clark_a/2 + clark_b.
                                ; ARP=AR2, AR0->FR0, AR2->clark_b, AR3->clark_q
;--------------------------------------------------------------------------------
                MPY     *,AR3   ; PREG = (clark_a/2 + clark_b)/sqrt(3).
                                ; ARP=AR3, AR0->FR0, AR2->clark_b, AR3->clark_q
;--------------------------------------------------------------------------------
                PAC             
                APAC            ; ACC =  (clark_a + 2 * clark_b)/sqrt(3).
                                ; ARP=AR3, AR0->FR0, AR2->clark_b, AR3->clark_q
;--------------------------------------------------------------------------------
                SACH    *,AR1   ; Store clark_q.
                                ; ARP=AR1, AR0->FR0, AR2->clark_b, AR3->clark_q
;--------------------------------------------------------------------------------
                SPM     0
;--------------------------------------------------------------------------------
__clark_exit:
                SBRK        #(__clark_framesize+1)
                LAR        AR0,*-
                PSHD        *
                RET


⌨️ 快捷键说明

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