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

📄 trap_gen.asm

📁 TI的digital motor control lib的源代码。了解TI的编程规范
💻 ASM
📖 第 1 页 / 共 2 页
字号:
     	LACC	*		; ACC = trap_timer  (Q15)
     	                ; ARP=AR2, AR0->FR1, AR2->trap_timer
;----------------------------------------------------------------------------------
		SUB		#6000h	; ACC = trap_timer - 6000h (Q15)
     	                ; ARP=AR2, AR0->FR1, AR2->trap_timer	
;----------------------------------------------------------------------------------
		BCND	DECREASE_TRAP,LT    ; Branch to DECREASE_TRAP if 0.5 < trap_timer < 0.75
                        ; ARP=AR2, AR0->FR1, AR2->trap_timer
;----------------------------------------------------------------------------------
		B		MIN_TRAP		    ; Branch to MIN_TRAP if 0.75 < trap_timer < 1
                        ; ARP=AR2, AR0->FR1, AR2->trap_timer
;----------------------------------------------------------------------------------
INCREASE_TRAP           ; ARP=AR2, AR0->FR1, AR2->trap_timer
;----------------------------------------------------------------------------------
      	ADRK	#2		; ARP=AR2, AR0->FR1, AR2->trap_max_tmp  
;----------------------------------------------------------------------------------
    	LACC	*,15	; ACC = trap_max_tmp (Q14)
    					; ARP=AR2, AR0->FR1, AR2->trap_max_tmp  
;----------------------------------------------------------------------------------
    	ADRK	#3		; ARP=AR2, AR0->FR1, AR2->trap_min_tmp 
;----------------------------------------------------------------------------------
		SUB		*+,15,AR0	; ACC = trap_max_tmp - trap_min_tmp (Q14)
						; ARP=AR2, AR0->FR1, AR2->trap_out_lo, ARP=AR0  
;----------------------------------------------------------------------------------
       	SACH	*-		; FR1 = trap_tmp1 = trap_max_tmp - trap_min_tmp (Q14)
       					; ARP=AR0, AR0->FR0, AR2->trap_out_lo  
;----------------------------------------------------------------------------------
   		LT		*+		; TREG = FR0 = trap_8192inv = 1/8192   (Q15)
   						; ARP=AR0, AR0->FR1, AR2->trap_out_lo  
;----------------------------------------------------------------------------------
	  	MPY		*,AR2	; PREG = (1/8192)*(trap_max_tmp-trap_min_tmp)  (Q29)
	  					; ARP=AR0, AR0->FR1, AR2->trap_out_lo, ARP=AR2
;----------------------------------------------------------------------------------
      	PAC				; ACC = (1/8192)*(trap_max_tmp-trap_min_tmp)  (Q29)
	  					; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
 		SFL				; ACC = (1/8192)*(trap_max_tmp-trap_min_tmp)  (Q30)
	  					; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
 		SFL				; ACC = (1/8192)*(trap_max_tmp-trap_min_tmp)  (Q31)
	  					; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
      	ADDS	*+		; ACC = trap_out+(1/8192)*(trap_max_tmp-trap_min_tmp)  (Q31)
      					; ARP=AR2, AR0->FR1, AR2->trap_out
;----------------------------------------------------------------------------------
      	ADDH	*		; ACC = trap_out+(1/8192)*(trap_max_tmp-trap_min_tmp)  (Q31)
      					; ARP=AR2, AR0->FR1, AR2->trap_out
;----------------------------------------------------------------------------------
       	SACH	*-		; trap_out = trap_out+(1/8192)*(trap_max_tmp-trap_min_tmp)  (Q31)
      					; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
     	SACL	*		; trap_out = trap_out+(1/8192)*(trap_max_tmp-trap_min_tmp)  (Q31)
      					; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
 		SBRK	#8		; ARP=AR2, AR0->FR1, AR2->trap_delay_cntr
;----------------------------------------------------------------------------------
        B       RESET_DELAY  ; ARP=AR2, AR0->FR1, AR2->trap_delay_cntr
;----------------------------------------------------------------------------------
MAX_TRAP				; ARP=AR2, AR0->FR1, AR2->trap_timer 
;----------------------------------------------------------------------------------
		ADRK	#2		; ARP=AR2, AR0->FR1, AR2->trap_max_tmp
;----------------------------------------------------------------------------------
       	LACC	*,16	; ACC = trap_max_tmp  (Q15)
       					; ARP=AR2, AR0->FR1, AR2->trap_max_tmp
;----------------------------------------------------------------------------------
       	ADRK	#5		; ARP=AR2, AR0->FR1, AR2->trap_out
;----------------------------------------------------------------------------------
		SACH	*-		; trap_out = trap_max_tmp  (Q15)
						; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
		SACL	*		; trap_out = trap_max_tmp  (Q15)
						; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
		SBRK	#8		; ARP=AR2, AR0->FR1, AR2->trap_delay_cntr 
;----------------------------------------------------------------------------------
        B       RESET_DELAY  ; ARP=AR2, AR0->FR1, AR2->trap_delay_cntr
;----------------------------------------------------------------------------------
DECREASE_TRAP           ; ARP=AR2, AR0->FR1, AR2->trap_timer
;----------------------------------------------------------------------------------
      	ADRK	#2		; ARP=AR2, AR0->FR1, AR2->trap_max_tmp  
;----------------------------------------------------------------------------------
    	LACC	*,15	; ACC = trap_max_tmp (Q14)
    					; ARP=AR2, AR0->FR1, AR2->trap_max_tmp  
;----------------------------------------------------------------------------------
    	ADRK	#3		; ARP=AR2, AR0->FR1, AR2->trap_min_tmp 
;----------------------------------------------------------------------------------
		SUB		*+,15,AR0	; ACC = trap_max_tmp - trap_min_tmp (Q14)
						; ARP=AR2, AR0->FR1, AR2->trap_out_lo, ARP=AR0  
;----------------------------------------------------------------------------------
       	SACH	*-		; FR1 = trap_tmp1 = trap_max_tmp - trap_min_tmp (Q14)
       					; ARP=AR0, AR0->FR0, AR2->trap_out_lo  
;----------------------------------------------------------------------------------
   		LT		*+		; TREG = FR0 = trap_8192inv = 1/8192   (Q15)
   						; ARP=AR0, AR0->FR1, AR2->trap_out_lo  
;----------------------------------------------------------------------------------
	  	MPY		*,AR2	; PREG = (1/8192)*(trap_max_tmp-trap_min_tmp)  (Q29)
	  					; ARP=AR0, AR0->FR1, AR2->trap_out_lo, ARP=AR2
;----------------------------------------------------------------------------------
      	PAC				; ACC = (1/8192)*(trap_max_tmp-trap_min_tmp)  (Q29)
	  					; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
		NEG				; ACC = -(1/8192)*(trap_max_tmp-trap_min_tmp)  (Q29)
	  					; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
 		SFL				; ACC = -(1/8192)*(trap_max_tmp-trap_min_tmp)  (Q30)
	  					; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
 		SFL				; ACC = -(1/8192)*(trap_max_tmp-trap_min_tmp)  (Q31)
	  					; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
      	ADDS	*+		; ACC = trap_out-(1/8192)*(trap_max_tmp-trap_min_tmp)  (Q31)
      					; ARP=AR2, AR0->FR1, AR2->trap_out
;----------------------------------------------------------------------------------
      	ADDH	*		; ACC = trap_out-(1/8192)*(trap_max_tmp-trap_min_tmp)  (Q31)
      					; ARP=AR2, AR0->FR1, AR2->trap_out
;----------------------------------------------------------------------------------
       	SACH	*-		; trap_out = trap_out-(1/8192)*(trap_max_tmp-trap_min_tmp)  (Q31)
      					; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
     	SACL	*		; trap_out = trap_out-(1/8192)*(trap_max_tmp-trap_min_tmp)  (Q31)
      					; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
 		SBRK	#8		; ARP=AR2, AR0->FR1, AR2->trap_delay_cntr
;----------------------------------------------------------------------------------
        B       RESET_DELAY  ; ARP=AR2, AR0->FR1, AR2->trap_delay_cntr 
;----------------------------------------------------------------------------------
MIN_TRAP                ; ARP=AR2, AR0->FR1, AR2->trap_timer
;----------------------------------------------------------------------------------
		ADRK	#5		; ARP=AR2, AR0->FR1, AR2->trap_min_tmp
;----------------------------------------------------------------------------------
       	LACC	*,16	; ACC = trap_min_tmp  (Q15)
       					; ARP=AR2, AR0->FR1, AR2->trap_min_tmp
;----------------------------------------------------------------------------------
       	ADRK	#2		; ARP=AR2, AR0->FR1, AR2->trap_out
;----------------------------------------------------------------------------------
		SACH	*-		; trap_out = trap_min_tmp  (Q15)
						; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
		SACL	*		; trap_out = trap_min_tmp  (Q15)
						; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
		SBRK	#8		; ARP=AR2, AR0->FR1, AR2->trap_delay_cntr 
;----------------------------------------------------------------------------------
RESET_DELAY  			; ARP=AR2, AR0->FR1, AR2->trap_delay_cntr
;----------------------------------------------------------------------------------
		SPLK	#0,*  	; trap_delay_cntr = 0 (reset delay counter)  (Q0)       
      	                ; ARP=AR2, AR0->FR1, AR2->trap_delay_cntr                
;----------------------------------------------------------------------------------
TRAP_EXIT
;----------------------------------------------------------------------------------
_trapgen_calc_exit:
       	MAR     *,AR1   ; can be removed if this condition is met on
       	                ; every path to this code. (i.e., ARP=AR1 here)

        CLRC	OVM
        CLRC	SXM

    	SBRK 	#(__trapgen_calc_framesize+1)
        LAR  	AR0,*-
        PSHD	*
        
        RET



⌨️ 快捷键说明

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