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

📄 data_log2.asm

📁 TI的digital motor control lib的源代码。了解TI的编程规范
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;=====================================================================================
; File name:        DATA_LOG2.ASM                     
;                    
; Originator:	Digital Control Systems Group
;			Texas Instruments
;
; Description:                                 
; Data logging for two graph displays in code composer
;=====================================================================================
; History:
;-------------------------------------------------------------------------------------
; 9-15-2000	Release	Rev 1.0
;================================================================================
; Applicability: F240,F241,C242,F243,F24xx.  (Peripheral Independent).
;================================================================================
; Routine Name: data_log_update   					            Type: C Callable
;  
;  C prototype : void data_log_update(struct DATALOG *p);
;
;        The struct object is defined in the header file "data_log.h" as follows:
;
;  typedef struct { int  *dlog_iptr1; 	/* Input: First input pointer (Q15) */	
;			 	   int  *dlog_iptr2;	/* Input: Second input pointer (Q15) */		
;		 	 	   int  trig_value;		/* Input: Trigger point (Q15) */		
;				   int  graph_ptr1;		/* Variable: First graph address pointer */
;				   int  graph_ptr2;  	/* Variable: Second graph address pointer */	
;				   int  dlog_skip_cntr;	/* Variable: Data log skip counter */				 
;				   int  dlog_cntr;		/* Variable: Data log counter */
;		  	  	   int  task_ptr;		/* Variable: Task address pointer */
;		  	  	   int  dlog_prescale;  /* Parameter: Data log prescale */
;		  	  	   int  dlog_cntr_max;  /* Parameter: Maximum data buffer */
;		  	  	   int  dl_buffer1_adr; /* Parameter: Buffer starting address 1 */
;		  	  	   int  dl_buffer2_adr; /* Parameter: Buffer starting address 2 */   		  	  	   
;		  	  	   int  (*init)();      /* Pointer to init function */
;		  	  	   int  (*update)();	/* Pointer to update function */ 
;				 } DATALOG;	           	            
;        
;	 		 
;        Frame Usage Details:
;     step   |     a     |     b     |    c    |    d    |
;____________|___________|___________|_________|_________|
;     AR0  	 |dlog_iptr1 |           |     	   |         |     
;
; NOTE: The AR0 here is keeping the pointer dlog_iptr1 rather than the 
; frame pointer address, FR0, as usual.  
;================================================================================
                .def        _data_log_update    	
;================================================================================
__data_log_update_framesize 	.set 	0000h
;================================================================================
_data_log_update:
 													; Assume now ARP=AR1
     	POPD	*+									; Keep return address
       	SAR  	AR0,*+								; Keep old frame pointer (FP)
       	SAR   	AR1,*								; Keep old stack pointer (SP)
       	LARK  	AR0,__data_log_update_framesize 	; Load AR0 with frame size	
       	LAR   	AR0,*0+,AR0							; AR0->FP0 (new FP), ARP=AR0

;================================================================================
		SBRK	#3		; ARP=AR0, AR0->FR0-3 (1st argument)		
;----------------------------------------------------------------------------------
		LAR		AR2,*	; ARP=AR0, AR0->dlog_iptr1, AR2->dlog_iptr1			
;----------------------------------------------------------------------------------
		ADRK	#3		; ARP=AR0, AR0->FR0, AR2->dlog_iptr1 
;----------------------------------------------------------------------------------
		SETC 	SXM		; Turn sign extension mode on
						; ARP=AR0, AR0->FR0, AR2->dlog_iptr1
;----------------------------------------------------------------------------------
		SETC	OVM		; Set overflow mode
						; ARP=AR0, AR0->FR0, AR2->dlog_iptr1
;----------------------------------------------------------------------------------
 		SPM     0       ; Reset product mode
       					; ARP=AR0, AR0->FR0, AR2->dlog_iptr1
;----------------------------------------------------------------------------------
      	MAR		*,AR2	; ARP=AR2, AR0->FR0, AR2->dlog_iptr1
;----------------------------------------------------------------------------------
		LAR		AR0,* 	; ARP=AR2, AR0=dlog_iptr1, AR2->dlog_iptr1
;----------------------------------------------------------------------------------
      	ADRK	#7		; ARP=AR2, AR0=dlog_iptr1, AR2->task_ptr 
;----------------------------------------------------------------------------------
      	LACC	*   	; ACC = task_ptr
      					; ARP=AR2, AR0=dlog_iptr1, AR2->task_ptr
;----------------------------------------------------------------------------------
		BACC			; PC = ACC
						; ARP=AR2, AR0=dlog_iptr1, AR2->task_ptr	
;----------------------------------------------------------------------------------
POS_TRIG_S1:			; Positive trigger, detect Negative signal
                        ; ARP=AR2, AR0=dlog_iptr1, AR2->task_ptr
;----------------------------------------------------------------------------------
		SBRK	#7		; ARP=AR2, AR0=dlog_iptr1, AR2->dlog_iptr1      	
;----------------------------------------------------------------------------------
		MAR		*,AR0 	; ARP=AR0, AR0=dlog_iptr1, AR2->dlog_iptr1
;----------------------------------------------------------------------------------
   		LACC	*,1,AR2	; ACC = *dlog_iptr1
   						; ARP=AR0, AR0=dlog_iptr1, AR2->dlog_iptr1, ARP=AR2
;----------------------------------------------------------------------------------
   		ADRK	#2		; ARP=AR2, AR0=dlog_iptr1, AR2->trig_value 
;----------------------------------------------------------------------------------
		SUB		*,1		; ACC = *dlog_iptr1 - trig_value
						; ARP=AR2, AR0=dlog_iptr1, AR2->trig_value   
;----------------------------------------------------------------------------------
 		ADRK	#5		; ARP=AR2, AR0=dlog_iptr1, AR2->task_ptr
;----------------------------------------------------------------------------------
      	BCND	DL_EXIT, GEQ ; Branch to DL_EXIT if ACC >= 0
      					; ARP=AR2, AR0=dlog_iptr1, AR2->task_ptr
;----------------------------------------------------------------------------------
      	SPLK	#POS_TRIG_S2,* ; task_ptr = #POS_TRIG_S2
     					; ARP=AR2, AR0=dlog_iptr1, AR2->task_ptr
;----------------------------------------------------------------------------------
      	B		DL_EXIT ; Branch to DL_EXIT
      					; ARP=AR2, AR0=dlog_iptr1, AR2->task_ptr
;----------------------------------------------------------------------------------
POS_TRIG_S2:			; Positive trigger, detect Positive signal
						; ARP=AR2, AR0=dlog_iptr1, AR2->task_ptr
;----------------------------------------------------------------------------------
      	SBRK	#7		; ARP=AR2, AR0=dlog_iptr1, AR2->dlog_iptr1
;----------------------------------------------------------------------------------
		MAR		*,AR0 	; ARP=AR0, AR0=dlog_iptr1, AR2->dlog_iptr1
;----------------------------------------------------------------------------------
     	LACC	*,1,AR2	; ACC = *dlog_iptr1
   						; ARP=AR0, AR0=dlog_iptr1, AR2->dlog_iptr1, ARP=AR2 
;----------------------------------------------------------------------------------
      	ADRK	#2		; ARP=AR2, AR0=dlog_iptr1, AR2->trig_value				      					
;----------------------------------------------------------------------------------
       	SUB		*,1		; ACC = *dlog_iptr1 - trig_value
						; ARP=AR2, AR0=dlog_iptr1, AR2->trig_value   
;----------------------------------------------------------------------------------
       	ADRK	#5		; ARP=AR2, AR0=dlog_iptr1, AR2->task_ptr
;----------------------------------------------------------------------------------
        BCND	PTS2_1,LT ; Branch to PTS2_1 if ACC < 0
       					; ARP=AR2, AR0=dlog_iptr1, AR2->task_ptr
;----------------------------------------------------------------------------------
     	SPLK	#DL_TRIGGERED,*	; task_ptr = #DL_TRIGGERED
      					; ARP=AR2, AR0=dlog_iptr1, AR2->task_ptr
;----------------------------------------------------------------------------------
       	B     	DL_EXIT ; Branch to DL_EXIT

⌨️ 快捷键说明

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