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

📄 com_trig.asm

📁 TI的digital motor control lib的源代码。了解TI的编程规范
💻 ASM
📖 第 1 页 / 共 4 页
字号:
                                ; AR5-> trig. 
;-------------------------------------------------------------------------------- 
                ADD     *,AR2   ; Accumulator = 3 * va.
                                ; neutral = 3 * neutral voltage (Vn)
                                ; ARP = AR2. AR2 -> FR1 (neutral).
                                ; AR3 -> va. AR4 -> debug_Bemf.
                                ; AR5-> trig. 
;-------------------------------------------------------------------------------- 
                SUB     *,AR4   ; Accumulator = 3 * va - neutral = 3*Va - 3*Vn.
                                ; ARP = AR4. AR4 -> debug_Bemf.
                                ; AR2 -> FR1 (neutral). AR3 -> va.
                                ; AR5-> trig. 
;-------------------------------------------------------------------------------- 
                SACL    *+      ; debug_Bemf = 3 * va - neutral = 3*Va - 3*Vn.
                                ; ARP = AR4. AR4 -> noise_windowCntr.
                                ; AR2 -> FR1 (neutral). AR3 -> va.
                                ; AR5-> trig. 
;-------------------------------------------------------------------------------- 
                BCND    __CMTN_clr_nw_s5,LT
                                ; ARP = AR4. AR4 -> noise_windowCntr.
                                ; AR2 -> FR1 (neutral). AR3 -> va.
                                ; AR5-> trig. 
;-------------------------------------------------------------------------------- 
                CALL    _Noise_Wind 
                                ; ARP = AR4. AR4 -> noise_windowCntr.
                                ; AR2 -> FR1 (neutral). AR3 -> va.
                                ; AR5-> trig.  
;-------------------------------------------------------------------------------- 
                B       __CMTN_delay_30 
                                ; Goto delay_30.
                                ; ARP = AR4. AR4 -> noise_windowCntr.
                                ; AR2 -> FR1 (neutral). AR3 -> va.
                                ; AR5-> trig. 
;-------------------------------------------------------------------------------- 
                ; ARP =  AR4. AR4 ->  noise_windowCntr.
                ; AR2 -> FR1 (neutral). AR3 -> va.
                ; AR5-> trig. 
__CMTN_clr_nw_s5:
                
                SPLK    #CLEAR,*  
                                ; noise_windowCntr = 0.
                                ; ARP =  AR4. AR4 ->  noise_windowCntr.
                                ; AR2 -> FR1 (neutral). AR3 -> va.
                                ; AR5-> trig. 
;-------------------------------------------------------------------------------- 
                ; Delay 30 degree calculator
                ; ARP =  AR4. AR4 ->  noise_windowCntr.
                ; AR2 -> FR1 (neutral). AR3 -> va.
                ; AR5-> trig. 
__CMTN_delay_30:
                
                MAR     *+      ; ARP =  AR4.  AR4 ->  d30_doneFlg.
                                ; AR2 -> FR1 (neutral). AR3 -> va.
                                ; AR5-> trig. 
;-------------------------------------------------------------------------------- 
                LACC    *+      ; Accumulator = d30_doneFlg.
                                ; ARP =  AR4. AR4 -> time_stampNew
                                ; AR2 -> FR1 (neutral). AR3 -> va.
                                ; AR5-> trig. 
;---------------------------------------------------------------------------------- 
                BCND    __CMTN_st_end,NEQ  
                                ; If gone through once, skip
                                ; ARP =  AR4. AR4 -> time_stampNew
                                ; AR2 -> FR1 (neutral). AR3 -> va.
                                ; AR5-> trig. 
;-------------------------------------------------------------------------------- 
                LACC    *+      ; Accumulator = time_stampNew.
                                ; ARP =  AR4. AR4 -> time_stampOld.
                                ; AR2 -> FR1 (neutral). AR3 -> va.
                                ; AR5-> trig. 
;-------------------------------------------------------------------------------- 
                SACL    *+      ; time_stampOld = time_stampNew.
                                ; ARP =  AR4. AR4 -> v_timer.
                                ; AR2 -> FR1 (neutral). AR3 -> va.
                                ; AR5-> trig. 
;-------------------------------------------------------------------------------- 
                LACC    *       ; Accumulator = v_timer;
                                ; ARP =  AR4. AR4 -> v_timer.
                                ; AR2 -> FR1 (neutral). AR3 -> va.
                                ; AR5-> trig. 
;-------------------------------------------------------------------------------- 
                SBRK    #2      ; ARP = AR4. AR4 -> time_stampNew.
                                ; AR2 -> FR1 (neutral). AR3 -> va.
                                ; AR5-> trig. 
;--------------------------------------------------------------------------------                 
                SACL    *+      ; time_stampNew = v_timer
                                ; ARP = AR4. AR4 -> time_stampOld.
                                ; AR2 -> FR1 (neutral). AR3 -> va.
                                ; AR5-> trig. 
;--------------------------------------------------------------------------------                 
                SUB     *,AR2   ; Accumulator = time_stampNew - time_stampOld.
                                ; ARP = AR2. AR2 -> FR1(neutral).
                                ; AR4 -> time_stampOld. AR3 -> va.
                                ; AR5-> trig. 
;--------------------------------------------------------------------------------                 
                                
                BCND    __CMTN_neg_delta,LT
                                ; If period is negative ,allow "wrapping"
                                ; ARP = AR2. AR2 -> FR1(neutral).
                                ; AR4 -> time_stampOld. AR3 -> va.
                                ; AR5-> trig. 
;--------------------------------------------------------------------------------                 
            ; ARP = AR2. AR2 -> FR1(neutral).
            ; AR4 -> time_stampOld. AR3 -> va.
            ; AR5-> trig. 

__CMTN_pos_delta:
            
                SACL    *,AR4   ; Store to temp_var1 (rev_period) =  
                                ; time_stampNew - time_stampOld.
                                ; ARP = AR4. AR4 -> time_stampOld. 
                                ; AR2 -> FR1 (rev_period). AR3 -> va.
                                ; AR5-> trig. 
;--------------------------------------------------------------------------------                 
                B       __CMTN_delay_div12
                                ; ARP = AR4. AR4 -> time_stampOld. 
                                ; AR2 -> FR1 (rev_period). AR3 -> va.
                                ; AR5-> trig. 
;--------------------------------------------------------------------------------                                 
            ; ARP = AR2. AR2 -> FR1(neutral).
            ; AR4 -> time_stampOld. AR3 -> va.
            ; AR5-> trig. 
        
        
__CMTN_neg_delta:
                
           
                ADD     #CYCLE_LENGTH  
                                ; ACC = 0x7fffh + (time_stampNew - time_stampOld).
                                ; ARP = AR2. AR2 -> FR1.
                                ; AR4 -> time_stampOld. AR3 -> va.
                                ; AR5-> trig. 
;--------------------------------------------------------------------------------
                SACL    *,AR4   ; FR1 (rev_period) = 
                                ; time_stampNew - time_stampOld.
                                ; ARP = AR4. AR4 -> time_stampOld.
                                ; AR2 -> FR1 (rev_period). AR3 -> va.
                                ; AR5-> trig. 
;--------------------------------------------------------------------------------
                ; Accumulator = rev_period.  ARP = AR4.
                ; AR4 -> time_stampOld. 
                ; AR2 -> FR1 (rev_period). AR3 -> va.
                ; AR5-> trig. 
__CMTN_delay_div12:
                    
                ADRK    #2      ; ARP = AR4. AR4 -> delay
                                ; AR2 -> FR1 (rev_period). AR3 -> va.
                                ; AR5-> trig. 
;--------------------------------------------------------------------------------
                SPLK    #12,*   ; delay = 12.
                                ; ARP = AR4. AR4 -> delay 
                                ; AR2 -> FR1 (rev_period). AR3 -> va.
                                ; AR5-> trig. 
;--------------------------------------------------------------------------------
                RPT     #15     ; Repeat (15+1 => 16)times next instruction
                                ; AR2 -> FR1 (rev_period). AR3 -> va.
                                ; AR5-> trig. 
                                ; ARP = AR4. AR4 -> delay 
;--------------------------------------------------------------------------------
                SUBC *          ; To divide rev_period by 12.
                                ; Quotient will be in LSW of ACC
                                ; Remainder will be in MSW of ACC
                                ; AR2 -> FR1 (rev_period). AR3 -> va.
                                ; AR5-> trig. 
                                ; ARP = AR4. AR4 -> delay 
;--------------------------------------------------------------------------------
                MAR     *,AR2   ; ARP = AR2. AR2 -> FR1. AR3 -> va.
                                ; AR5-> trig. 
                                ; ARP = AR4. AR4 -> delay 
;--------------------------------------------------------------------------------
                SACH    *,AR4   ; AR2-> FR1(Remainder).
                                ; ARP = AR4. AR4 -> delay. AR3 -> va.
                                ; AR5-> trig.  
;--------------------------------------------------------------------------------
                AND     #0ffffh ; Remove remainder part of ACC.
                                ; AR2-> FR1(Remainder).
                                ; ARP = AR4. AR4 -> delay. AR3 -> va.
                                ; AR5-> trig.  
;--------------------------------------------------------------------------------
            ; allow rounding
;--------------------------------------------------------------------------------            
                SACL    *,AR2   ; delay = rev_period/12.
                                ; ARP = AR2. AR4 -> delay.
                                ; AR2 -> FR1 (Remainder).AR3 -> va.
                                ; AR5-> trig. 
;--------------------------------------------------------------------------------
                LACC    *,AR4   ; ACC = Remainder.
                                ; ARP = AR4. AR4 -> delay. 
                                ; AR2 -> FR1 (Remainder).AR3 -> va.
                                ; AR5-> trig. 
;--------------------------------------------------------------------------------
                SUB     #6      ; ACC = Remainder - 6.
                                ; ARP = AR4. AR4 -> delay. 
                                ; AR2 -> FR1 (Remainder).AR3 -> va.
                                ; AR5-> trig. 
;--------------------------------------------------------------------------------
                BCND    __CMTN_same_delay,LT
                                ; ARP = AR4. AR4 -> delay.
                                ; AR2 -> FR1 (Remainder).AR3 -> va.
                                ; AR5-> trig. 
;--------------------------------------------------------------------------------
                LACC    *       ; Accumulator = delay.
                                ; ARP = AR4. AR4 -> delay.
                                ; AR2 -> FR1 (Remainder).AR3 -> va.
                                ; AR5-> trig. 
;--------------------------------------------------------------------------------
                ADD     #1      ; Accumulator = delay + 1.
                                ; ARP = AR4. AR4 -> delay.
                                ; AR2 -> FR1 (Remainder).AR3 -> va.
                                ; AR5-> trig. 
;--------------------------------------------------------------------------------
                SACL    *       ; delay = delay + 1.
                                ; ARP = AR4. AR4 -> delay.
                                ; AR2 -> FR1 (Remainder).AR3 -> va.
                                ; AR5-> trig. 
;--------------------------------------------------------------------------------
                ; ARP = AR4. AR4 -> delay. 
                ; AR2 -> FR1 (Remainder).AR3 -> va.
                ; AR5-> trig. 
__CMTN_same_delay:
;--------------------------------------------------------------------------------
                SBRK    #4      ; ARP = AR4. AR4 -> d30_doneFlag
                                ; AR2 -> FR1 (Remainder).AR3 -> va.
                                ; AR5-> trig. 
;--------------------------------------------------------------------------------
                SPLK    #GONE_THRO_ONCE,*   
                                ; d30_doneFlag = 15
                                ; ARP = AR4. AR4 -> d30_doneFlag
                                ; AR2 -> FR1 (Remainder).AR3 -> va.
                                ; AR5-> trig. 
;--------------------------------------------------------------------------------
            ; ARP = AR4. AR4 -> noise_windowCntr.
            ; AR2 -> FR1 (neutral). AR5->trig
__CMTN_st_end:

;--------------------------------------------------------------------------------
            ; zero crossing to commutation trigger delay
;--------------------------------------------------------------------------------            
                MAR     *, AR5  ; ARP = AR5.  AR5 -> trig
                                ; AR4 -> noise_windowCntr.
;--------------------------------------------------------------------------------
                SPLK    #CLEAR,*     
                                ; trig = 0;
                                ; AR5 -> trig. ARP = AR5. 
                                ; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
                ADRK    #13     ; ARP = AR5. AR4 -> noise_windowCntr
                                ; AR5 -> dt_taskFlg    
;--------------------------------------------------------------------------------
                LACC    *       ; Accumulator  = dt_taskFlg
                                ; ARP = AR5. AR4 -> noise_windowCntr
                                ; AR5 -> dt_taskFlg 
;--------------------------------------------------------------------------------
                BCND    __CMTN_count_dwn,NEQ
                                ; ARP = AR5. AR5 -> dt_taskFlg.
                                ; AR4 -> noise_windowCntr

⌨️ 快捷键说明

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