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

📄 f243bldcpwm2.asm

📁 TI的digital motor control lib的源代码。了解TI的编程规范
💻 ASM
📖 第 1 页 / 共 2 页
字号:
                                ; Non fed phase          Phase C
                                ; *ACTR = 0x00C2.

                B    __PWM_state_end
                                ; ARP = AR3. AR3 -> mfunc_p.
                                ; AR2-> FR1.
;--------------------------------------------------------------------------
__PWM_state_anc:                ; Input current path     Phase A
                POINT_EV        ; Output Current Path    Phase C
                
                SPLK    #0C02h,ACTR
                                ; Non Fed Phase          Phase B   
                                ; *ACTR = 0x0C02.

                B    __PWM_state_end 
                                ; ARP = AR3. AR3 -> mfunc_p.
                                ; AR2-> FR1.
;--------------------------------------------------------------------------
__PWM_state_bnc:                ; Input current path     Phase B     
                POINT_EV        ; Output Current Path    Phase C
                
                SPLK    #0C20h,ACTR 
                                ; Non fed phase          Phase A   
                                ; *ACTR = 0x0C20.

                B    __PWM_state_end
                                ; ARP = AR3. AR3 -> mfunc_p.
                                ; AR2-> FR1.
;--------------------------------------------------------------------------
__PWM_state_bna:                ; Input current path     Phase B 
                POINT_EV        ; Output Current Path    Phase A
                
                SPLK    #002Ch,ACTR
                                ; Non fed phase          Phase C
                                ; *ACTR = 0x002C.

                B    __PWM_state_end
                                ; ARP = AR3. AR3 -> mfunc_p.
                                ; AR2-> FR1.
;--------------------------------------------------------------------------
__PWM_state_cna:                ; Input current path     Phase C
                POINT_EV        ; Output Current Path    Phase A
                
                SPLK    #020Ch,ACTR 
                                ; Non Fed Phase          Phase B
                                ; *ACTR = 0x020C.

                B    __PWM_state_end
                                ; ARP = AR3. AR3 -> mfunc_p.
                                ; AR2-> FR1.
;--------------------------------------------------------------------------
__PWM_state_cnb:                ; Input current path     Phase C
                POINT_EV        ; Output Current Path    Phase B
                
                SPLK    #02C0h,ACTR 
                                ; Non Fed Phase          Phase A
                                ; *ACTR = 0x02C0.
                                ; ARP = AR3. AR3 -> mfunc_p.
                                ; AR2-> FR1.
;================================================================================                       
__PWM_state_end:
        ;Convert "Period" (Q15) modulation function to Q0
                LT      *+      ; treg = mfunc_p.
                                ; ARP = AR3. AR3 -> period_max.
                                ; AR2 -> FR1.
;--------------------------------------------------------------------------
                MPY     *+,AR2  ; PREG = mfunc_p * period_max.
                                ; AR3 -> d_func.
                                ; ARP = AR2. 
                                ; AR2-> FR1.
;--------------------------------------------------------------------------
                PAC             ; Accumulator = mfunc_p * period_max.
                                ; ARP = AR2. AR2 ->FR1 
                                ; AR3 -> d_func.
;--------------------------------------------------------------------------
                SACH    *+,1,AR3 
                                ; FR1(period) = mfunc_p * period_max (Q15)  
                                ; AR2 -> FR2. 
                                ; ARP = AR3. AR3 -> d_func.
 ;--------------------------------------------------------------------------
        ;Convert "D_func" (Q15) duty modulation function to Q0
                .if (ACTIVE_HI) ; target dependancy
                
                LACC #MAXPERIOD ; Accumulator = 0x7fff. 
                                ; ARP = AR3. AR3 -> d_func.
                                ; AR2 -> FR2(temp_var2). 
 ;--------------------------------------------------------------------------                                
                SUB     *,AR2   ; Accumulator = 0x7fff - d_func.
                                ; ARP = AR2. AR2 -> FR2 (temp_var2).
;--------------------------------------------------------------------------                                

                SACL    *       ; temp2_var = 0x7fff - d_func.
                                ; ARP = AR2. AR2 -> FR2(temp_var2).
                .endif
;--------------------------------------------------------------------------
                .if (ACTIVE_LO) ; target dependancy
                
                LACC    *,AR2   ; Accumulator = d_func.
                                ; ARP = AR2. AR2 -> FR2 (temp_var2).
;--------------------------------------------------------------------------                                
                SACL    *       ; Accumulator = d_func.
                                ; ARP = AR2. AR2 -> FR2 (temp_var2).
                .endif
;--------------------------------------------------------------------------
                LT      *-      ; TREG = temp2_var.
                                ; ARP = AR2. 
                                ; AR2 -> FR1 (period i.e temp_var1).
;--------------------------------------------------------------------------
                MPY     *,AR1   ; PREG = period * d_func.
                                ; ARP = AR1 (in preparation for exit)
                                ; AR2 -> FR1 (period i.e temp_var1).
;-------------------------------------------------------------------------
                PAC             ; Accumulator = period * d_func.
                                ; ARP = AR1.
;--------------------------------------------------------------------------
                POINT_EV        
                                              
                SACH    CMPR1,1 ; *CMPR1 = Accumulator * 2. 
                
                SACH    CMPR2,1 ; *CMPR2 = Accumulator * 2.
                
                SACH    CMPR3,1 ; *CMPR3 = Accumulator * 2.
;================================================================================  

__BLDC_PWM_Update_Exit:
   
;--------------------------------------------------------------------------------     
    SBRK  #(__F243_BLDC_PWM_Update_framesize + 1)       
                                ; deallocate frame, point to saved FP
;-------------------------------------------------------------------------------- 
    
    LAR     AR0,*-              ; restore frame pointer
    PSHD    *                   ; push return address on hardware stack
    
;--------------------------------------------------------------------------------   
    RET                         ; return  to called function.
;================================================================================  
        ;Commutation sequence jump table - used with BACC inst.
;----------------------------------------------------------------------------
_COMMUTATION_TBL:
  .word   __PWM_state_anb       ; COMMUTATION_PTR = 0, de-energized phase = C
  .word   __PWM_state_anc       ; COMMUTATION_PTR = 1, de-energized phase = B
  .word   __PWM_state_bnc       ; COMMUTATION_PTR = 2, de-energized phase = A
  .word   __PWM_state_bna       ; COMMUTATION_PTR = 3, de-energized phase = C
  .word   __PWM_state_cna       ; COMMUTATION_PTR = 4, de-energized phase = B
  .word   __PWM_state_cnb       ; COMMUTATION_PTR = 5, de-energized phase = A

;================================================================================                       

⌨️ 快捷键说明

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