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

📄 com_trig.asm

📁 TI的digital motor control lib的源代码。了解TI的编程规范
💻 ASM
📖 第 1 页 / 共 4 页
字号:
;--------------------------------------------------------------------------------
__CMTN_chk_trigger:
                
                SBRK    #9      ; ARP = AR5.  AR5 -> zc_trig.
                                ; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
                LACC    *       ; ARP = AR5.  AR5 -> zc_trig.
                                ; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
                BCND    __Com_Trig_Exit,EQ
                                ; Do nothing if no trigger
                                ; ARP = AR5.  AR5 -> zc_trig.
                                ; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
                ADRK    #8      ; ARP = AR5.  AR5 -> delay
                                ; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
                LACC    *       ; Accumulator = delay
                                ; ARP = AR5.  AR5 -> delay
                                ; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
                ADRK    #2      ; ARP = AR5.  AR5 -> noise_windowMax
                                ; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
                SUB     *+      ; Accumulator = delay -  noise_windowMax
                                ; ARP = AR5.  AR5 -> delay_cntr
                                ; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
                SACL    *       ; delay_cntr =  delay -  noise_windowMax
                                ; ARP = AR5.  AR5 -> delay_cntr
                                ; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
                SBRK    #2      ; ARP = AR5. AR5 -> dt_taskFlg.
                                ; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
                SPLK     #1,*   ; dt_taskFlg = 1
                                ; ARP = AR5. AR5 -> dt_taskFlg.
                                ; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
                B        __Com_Trig_Exit
                                ; ARP = AR5. AR5 -> dt_taskFlg.
                                ; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
              ; ARP = AR5. AR5 -> dt_taskFlg.
              ; AR4 -> noise_windowCntr
__CMTN_count_dwn:
                
                ADRK    #2      ; ARP = AR5. AR5 -> delay_cntr.
                                ; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
                LACC    *       ; Load 30 degree counter value
                                ; Accumulator = 30 degree counter value
                                ; ARP = AR5. AR5 -> delay_cntr.
                                ; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------                
                SUB     #1      ; Accumulator = delay_cntr-1   
                                ; ARP = AR5. AR5 -> delay_cntr
                                ; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------                
                SACL    *       ; delay_cntr = delay_cntr - 1
                                ; ARP = AR5. AR5 -> delay_cntr.
                                ; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
                BCND    __Com_Trig_Exit,NEQ
                                ; reached zero?
                                ; ARP = AR5. AR5 -> delay_cntr.
                                ; AR4 -> noise_windowCntr
;--------------------------------------------------------------------------------
                SBRK    #15     ; ARP = AR5. AR5 -> trig.
;--------------------------------------------------------------------------------
                SPLK    #CYCLE_LENGTH,*
                                ; trig = 0x7fff
                                ; Yes! - Set trigger. This is used as input
                                ; to "MOD6_CNTR" module that changes the 
                                ; commutation sequence.
                                ; AR4 -> noise_windowCntr
                                ; ARP = AR5. AR5 -> trig.
;--------------------------------------------------------------------------------
                ADRK    #13     ; AR5 -> dt_taskFlg.
                                ; AR4 -> noise_windowCntr
                                ; ARP = AR5. AR5 -> trig.    
;--------------------------------------------------------------------------------
                SPLK    #CLEAR,*    
                                ; dt_taskFlg = 0.
                                ; AR5 -> dt_taskFlg.
                                ; AR4 -> noise_windowCntr
                                ; ARP = AR5. AR5 -> trig.
;================================================================================
__Com_Trig_Exit:
    
      MAR   *,AR1               ; Set ARP = AR1, in prepration for exit
      
      SBRK  __CMTN_framesize + 1       
                                ; AR1 = AR1 - framesize - 1.
       
      LAR     AR0,*-            ; AR0 = Old FP. 
  
      PSHD    *                 ; write return address on the hardware stack.
                                ; ARP = AR1. AR1 = Old SP.
  
  
      RET                       ; return  to called function.

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

_CMTN_STATE_TBL:
    .word   __CMTN_state_anb    ;cmtn_ptr_ct = 0, de-energized phase = C
    .word   __CMTN_state_anc    ;cmtn_ptr_ct = 1, de-energized phase = B
    .word   __CMTN_state_bnc    ;cmtn_ptr_ct = 2, de-energized phase = A
    .word   __CMTN_state_bna    ;cmtn_ptr_ct = 3, de-energized phase = C
    .word   __CMTN_state_cna    ;cmtn_ptr_ct = 4, de-energized phase = B
    .word   __CMTN_state_cnb    ;cmtn_ptr_ct = 5, de-energized phase = A

;================================================================================                         
    
    ;FUNCTION  void  Noise_Wind();
    
           ; ARP = AR4, AR4 -> noise_windowCntr.
           ; AR5 -> trig, AR0 -> FP. AR1 -> SP.
           ; AR2 -> FR1(neutral).
           ; Only Accumulator, AR4 and AR5 should be used. 
           ; There should be no function call in the _Noise_Wind function
           ; as return address will not be saved in the software stack.
           ; Before returning from _Noise_Wind, make sure that AR4 and AR5
           ; will be pointing to the above mentioned structure members

_Noise_Wind:
                ADRK    #5      ; ARP = AR4. AR4 -> delay. AR5 -> trig
;--------------------------------------------------------------------------------
                LACC    *,AR5   ; Accumulator = delay.
                                ; ARP = AR5. AR5 -> trig. AR4 -> delay.
;--------------------------------------------------------------------------------
                ADRK    #17     ; ARP = AR5. AR5->nw_dynThold.
                                ; AR4 -> delay.
;--------------------------------------------------------------------------------
                SUB     *-,AR4  ; Accumulator = delay -  nw_dynThold.
                                ; AR5 -> cdnw_delta.
                                ; ARP = AR4. AR4 -> delay.
;--------------------------------------------------------------------------------
                BCND    __NOISE_WIND_2,GEQ
                                ; ARP = AR4. AR4 -> delay.
                                ; AR5 -> cdnw_delta.
;--------------------------------------------------------------------------------
__NOISE_WIND_1:

            ; noise window adjusted dynamically
                
                LACC    *,AR5   ; Accumulator = delay.
                                ; ARP = AR5.  AR5 -> cdnw_delta.
                                ; AR4 -> delay.
;--------------------------------------------------------------------------------
                SUB     *       ; Accumulator = delay - cdnw_delta. 
                                ; ARP = AR5.  AR5 -> cdnw_delta.
                                ; AR4 -> delay.
;--------------------------------------------------------------------------------
                SBRK    #2      ; ARP = AR5. AR5 -> noise_windowMax.
                                ; AR4 -> delay.    
;--------------------------------------------------------------------------------
                SACL    *,AR4   ; noise_windowMax = delay - cdnw_delta.
                                ; ARP = AR5. AR5 -> noise_windowMax.
                                ; AR4 -> delay.
;--------------------------------------------------------------------------------
                B       __NOISE_WIND_3
                                ; AR4 -> delay 
                                ; ARP = AR4, AR5 -> noise_windowMax
;--------------------------------------------------------------------------------
            ; ARP = AR4. AR4 -> delay  AR5 -> cdnw_delta
__NOISE_WIND_2:
                ; noise window is fixed value 
                
                ADRK    #5      ; ARP = AR4. AR4 -> nw_dynThold.   
                                ; AR5 ->cdnw_delta
;--------------------------------------------------------------------------------
                LACC    *,AR5   ; Accumulator = nw_dynThold.  
                                ; ARP = AR5. AR5 -> cdnw_delta.
                                ; AR4 -> nw_dynThold.
;--------------------------------------------------------------------------------
                SUB     *       ; Accumulator =  nw_dynThold - cdnw_delta. 
                                ; ARP = AR5. AR5 -> cdnw_delta.
                                ; AR4 -> nw_dynThold.
;--------------------------------------------------------------------------------
                SBRK    #2      ; ARP = AR5. AR5 -> noise_windowMax.
                                ; AR4 -> nw_dynThold.
;--------------------------------------------------------------------------------
                SACL    *,AR4   ; noise_windowMax = nw_dynThold - cdnw_delta.
                                ; ARP = AR4. AR4 -> nw_dynThold.
                                ; AR5 -> noise_windowMax.
;--------------------------------------------------------------------------------
                SBRK    #5      ; AR4 -> delay.
                                ; ARP = AR4. AR5 -> noise_windowMax.
;--------------------------------------------------------------------------------
            ; AR4 -> delay  ARP = AR4. AR5 -> noise_windowMax.

__NOISE_WIND_3:

                SBRK    #5      ; AR5 -> noise_windowMax.
                                ; AR4 -> noise_windowCntr.  ARP = AR4.
;--------------------------------------------------------------------------------
                LACC    *       ; Accumulator = noise_windowCntr.
                                ; ARP = AR4. AR4 -> noise_windowCntr.
                                ; AR5 -> noise_windowMax.
;--------------------------------------------------------------------------------
                ADD     #1      ; Accumulator = noise_windowCntr + 1.
                                ; ARP = AR4. AR4 -> noise_windowCntr.
                                ; AR5 -> noise_windowMax.
;--------------------------------------------------------------------------------
                SACL    *,AR5   ; noise_windowCntr = noise_windowCntr + 1.
                                ; ARP = AR5. AR5 -> noise_windowMax
                                ; AR4 -> noise_windowCntr.
;--------------------------------------------------------------------------------
                SUB    *,AR4    ; Accumulator =  noise_windowCntr - noise_windowMax.
                                ; ARP = AR4. AR4 -> noise_windowCntr.
                                ; AR5 -> noise_windowMax
;--------------------------------------------------------------------------------
                BCND    __Noise_Wind_Exit,NEQ
                                ; ARP = AR4. AR4 -> noise_windowCntr. 
                                ; AR5 -> noise_windowMax.
                                ; zc must occur max_noise_window times.
;--------------------------------------------------------------------------------
__NOISE_WIND_clr_nw_s:
                SPLK    #CLEAR,*    
                                ; noise_windowCntr = 0. 
                                ; ARP = AR4. AR4 -> noise_windowCntr.
                                ; AR5 -> noise_windowMax.
;--------------------------------------------------------------------------------
                SBRK    #3      ; ARP = AR4. AR4 -> zc_trig.
                                ; AR5 -> noise_windowMax.
;--------------------------------------------------------------------------------
__NOISE_WIND_set_zc_s0:
                SPLK    #CYCLE_LENGTH,* 
                                ; zc_trig = 0x7fff; Yes! set zc_trigger
                                ; ARP = AR4 -> zc_trig
                                ; AR5 -> noise_windowMax.
;--------------------------------------------------------------------------------
                ADRK    #3      ; ARP = AR4. AR4 -> noise_windowCntr.
;================================================================================
            ; ARP = AR4. AR4 -> noise_windowCntr.  
            ; AR5 -> noise_windowMax

__Noise_Wind_Exit:
             
    MAR     *,AR5               ; In order to point AR5 to trig 
             
    SBRK    #14                 ; AR5 -> trig
             
    MAR     *,AR4               ; Set ARP as AR4 before returning to the 
                                ; com_trig_calcfunction
             
    RET                         ; Return
;================================================================================
             
             
                

⌨️ 快捷键说明

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