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

📄 f07pwmdac2.asm

📁 TI的digital motor control lib的源代码。了解TI的编程规范
💻 ASM
字号:
;=====================================================================================================================
; File name:       F07PWMDAC2.ASM                     
;                    
; Originator:	Digital Control Systems Group
;			Texas Instruments
; Description:                                   
; This file contains source for converting any s/w variables with 
; Q15 representation into the PWM signals in EVB for x240x only. 
; Thus, it can be used to view the signal, represented by the 
; variable, at the outputs of the PWM7, PWM9, PWM11 pins through the
; external lowpass filters.
; Applicability of these functions is indicated in the Table 1
;=====================================================================================
; History:
;-------------------------------------------------------------------------------------
; 12-10-2000	Release	Rev 1.0
;================================================================================
;                           T A B L E      1
;================================================================================
;     Function Name    |    Applicability
;================================================================================
;                      |      F240 | F241| F243 | LF2402 | LF2406 | LF2407
;                      |           |     |      |        |        |
; F2407_PWMDAC_Update  |           |     |      |   Y    |   Y    |     Y 
;================================================================================
;================================================================================
; Routine Name: PWMDAC Update Routine        Routine Type: C Callable
;
; Description:
;  
;  Sine Module
;  
;  C prototype : int F2407_PWMDAC_Update(PWMDAC *p)
;================================================================================
; History:                
; __________________________________________________________________________
; Date of Mod   |                     DESCRIPTION
;   ------------|-----------------------------------------------------------
;               |
;               |
;================================================================================
; Definition of the argument structure.
; typedef struct {   
;  	int *PWM_DAC_IPTR0;	/* Pointer to source data output on PWMDAC channel 0 */
;	int *PWM_DAC_IPTR1;	/* Pointer to source data output on PWMDAC channel 1 */
;	int *PWM_DAC_IPTR2;	/* Pointer to source data output on PWMDAC channel 2 */
;	int pwmdac_period;  /* PWMDAC period in usec  (Q0) */
;   int (*init)();     	/* Pointer to the init function */
;  	int (*update)();   	/* Pointer to the update function */
; 	} PWMDAC ;  
;
; 
;        Frame Usage Details:
;     step   |      a      |      b       |      c       |     d     
;____________|_____________|______________|______________|_____________
;     FR0  	 |    15       |  dac_period  |              |     
;
;================================================================================
                .def     _F2407_PWMDAC_Update
;================================================================================
                .include ..\include\x240x.h
;================================================================================
__F2407_PWMDAC_Update_framesize .set 0001h
;================================================================================
_F2407_PWMDAC_Update:

     	POPD	*+									       ; Keep return address
       	SAR  	AR0,*+								       ; Keep old frame pointer (FP)
       	SAR   	AR1,*								       ; Keep old stack pointer (SP)
       	LARK  	AR0,__F2407_PWMDAC_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,*,AR2 ; ARP=AR0, AR0->PWM_DAC_IPTR0, AR2->PWM_DAC_IPTR0, ARP=AR2		
;--------------------------------------------------------------------------------
		LAR		AR3,*,AR0 ; ARP=AR2, AR0->PWM_DAC_IPTR0, AR2->PWM_DAC_IPTR0, AR3->(PWM_DAC_IPTR0), ARP=AR0		
;--------------------------------------------------------------------------------
		ADRK	#3		; ARP=AR0, AR0->FR0, AR2->PWM_DAC_IPTR0, AR3->(PWM_DAC_IPTR0) 
;--------------------------------------------------------------------------------
     	MAR		*,AR2	; ARP=AR2, AR0->FR0, AR2->PWM_DAC_IPTR0, AR3->(PWM_DAC_IPTR0) 	
;--------------------------------------------------------------------------------
		ADRK	#3		; ARP=AR2, AR0->FR0, AR2->pwmdac_period, AR3->(PWM_DAC_IPTR0) 		
;----------------------------------------------------------------------------------
       	SETC 	SXM		; Turn sign extension mode on
       					; ARP=AR2, AR0->FR0, AR2->pwmdac_period, AR3->(PWM_DAC_IPTR0)
;----------------------------------------------------------------------------------
		SETC	OVM		; Set overflow mode
						; ARP=AR2, AR0->FR0, AR2->pwmdac_period, AR3->(PWM_DAC_IPTR0)
;----------------------------------------------------------------------------------
 		SPM     0       ; Reset product mode
       					; ARP=AR2, AR0->FR0, AR2->pwmdac_period, AR3->(PWM_DAC_IPTR0)
;--------------------------------------------------------------------------------
;Convert and update the appropriate timer 3 period
;--------------------------------------------------------------------------------
		LT		*,AR0	; TREG = pwmdac_period  (Q0)
						; ARP=AR2, AR0->FR0, AR2->pwmdac_period, AR3->(PWM_DAC_IPTR0), ARP=AR0  
;--------------------------------------------------------------------------------
      	SPLK	#15,*	; FR0 = 15
      					; ARP=AR0, AR0->FR0, AR2->pwmdac_period, AR3->(PWM_DAC_IPTR0)
;--------------------------------------------------------------------------------
     	MPY		*		; PREG = pwmdac_period*15 (*1000nS/(2*33nS))
     					; ARP=AR0, AR0->FR0, AR2->pwmdac_period, AR3->(PWM_DAC_IPTR0)	
;--------------------------------------------------------------------------------
       	SACL	*,AR4	; FR0 = dac_period = pwmdac_period*15 
       					; ARP=AR0, AR0->FR0, AR2->pwmdac_period, AR3->(PWM_DAC_IPTR0), ARP=AR4	 
;--------------------------------------------------------------------------------
       	LAR    	AR4,#T3PERB ; point AR4 to T3PERB 
       					; ARP=AR4, AR0->FR0, AR2->pwmdac_period, AR3->(PWM_DAC_IPTR0), AR4->T3PERB
;--------------------------------------------------------------------------------
    	SACL	*,AR0	; T3PERB = pwmdac_period*15 
    	                ; ARP=AR4, AR0->FR0, AR2->pwmdac_period, AR3->(PWM_DAC_IPTR0), AR4->T3PERB, ARP=AR0
;--------------------------------------------------------------------------------
;Convert Q15 input value to an appropriate compare value for PWM7 or PWM8 signal
;--------------------------------------------------------------------------------
		LT		*,AR3	; TREG = dac_period
						; ARP=AR0, AR0->FR0, AR2->pwmdac_period, AR3->(PWM_DAC_IPTR0), AR4->T3PERB, ARP=AR3		   	 
;--------------------------------------------------------------------------------
     	MPY		*,AR0	; PREG = dac_period*(PWM_DAC_IPTR0)/2
     					; ARP=AR3, AR0->FR0, AR2->pwmdac_period, AR3->(PWM_DAC_IPTR0), AR4->T3PERB, ARP=AR0		
;--------------------------------------------------------------------------------
     	PAC				; ACC = dac_period*(PWM_DAC_IPTR0)/2
     					; ARP=AR0, AR0->FR0, AR2->pwmdac_period, AR3->(PWM_DAC_IPTR0), AR4->T3PERB
;--------------------------------------------------------------------------------
     	ADD		*,15,AR4 ; ACC = dac_period*(PWM_DAC_IPTR0)/2 + dac_period/2
     					; ARP=AR0, AR0->FR0, AR2->pwmdac_period, AR3->(PWM_DAC_IPTR0), AR4->T3PERB, ARP=AR4  
;--------------------------------------------------------------------------------
       	LAR    	AR4,#CMPR4B ; point AR4 to CMPR4B 
       					; ARP=AR4, AR0->FR0, AR2->pwmdac_period, AR3->(PWM_DAC_IPTR0), AR4->CMPR4B
;--------------------------------------------------------------------------------
     	SACH	*+,AR2	; CMPR4B = dac_period*(PWM_DAC_IPTR0)/2 + dac_period/2
     					; ARP=AR4, AR0->FR0, AR2->pwmdac_period, AR3->(PWM_DAC_IPTR0), AR4->CMPR5B, ARP=AR2
;--------------------------------------------------------------------------------
;Convert Q15 input value to an appropriate compare value for PWM9 or PWM10 signal
;--------------------------------------------------------------------------------
     	SBRK	#2		; ARP=AR2, AR0->FR0, AR2->PWM_DAC_IPTR1, AR3->(PWM_DAC_IPTR0), AR4->CMPR5B 
;--------------------------------------------------------------------------------
		LAR		AR3,*+,AR3 ; ARP=AR2, AR0->FR0, AR2->PWM_DAC_IPTR2, AR3->(PWM_DAC_IPTR1), AR4->CMPR5B, ARP=AR3		
;--------------------------------------------------------------------------------
     	MPY		*,AR0	; PREG = dac_period*(PWM_DAC_IPTR1)/2
     					; ARP=AR3, AR0->FR0, AR2->PWM_DAC_IPTR2, AR3->(PWM_DAC_IPTR1), AR4->CMPR5B, ARP=AR0		
;--------------------------------------------------------------------------------
     	PAC				; ACC = dac_period*(PWM_DAC_IPTR1)/2
     					; ARP=AR0, AR0->FR0, AR2->PWM_DAC_IPTR2, AR3->(PWM_DAC_IPTR1), AR4->CMPR5B
;--------------------------------------------------------------------------------
     	ADD		*,15,AR4 ; ACC = dac_period*(PWM_DAC_IPTR1)/2 + dac_period/2
     					; ARP=AR0, AR0->FR0, AR2->PWM_DAC_IPTR2, AR3->(PWM_DAC_IPTR1), AR4->CMPR5B, ARP=AR4  
;--------------------------------------------------------------------------------
     	SACH	*+,AR2	; CMPR5B = dac_period*(PWM_DAC_IPTR1)/2 + dac_period/2
     					; ARP=AR4, AR0->FR0, AR2->PWM_DAC_IPTR2, AR3->(PWM_DAC_IPTR1), AR4->CMPR6B, ARP=AR2
;--------------------------------------------------------------------------------
;Convert Q15 input value to an appropriate compare value for PWM11 or PWM12 signal
;--------------------------------------------------------------------------------
		LAR		AR3,*,AR3 ; ARP=AR2, AR0->FR0, AR2->PWM_DAC_IPTR2, AR3->(PWM_DAC_IPTR2), AR4->CMPR6B, ARP=AR3		
;--------------------------------------------------------------------------------
     	MPY		*,AR0	; PREG = dac_period*(PWM_DAC_IPTR2)/2
     					; ARP=AR3, AR0->FR0, AR2->PWM_DAC_IPTR2, AR3->(PWM_DAC_IPTR2), AR4->CMPR6B, ARP=AR0		
;--------------------------------------------------------------------------------
    	PAC				; ACC = dac_period*(PWM_DAC_IPTR2)/2
     					; ARP=AR0, AR0->FR0, AR2->PWM_DAC_IPTR2, AR3->(PWM_DAC_IPTR2), AR4->CMPR6B
;--------------------------------------------------------------------------------
     	ADD		*,15,AR4 ; ACC = dac_period*(PWM_DAC_IPTR2)/2 + dac_period/2
     					; ARP=AR0, AR0->FR0, AR2->PWM_DAC_IPTR2, AR3->(PWM_DAC_IPTR2), AR4->CMPR6B, ARP=AR4  
;--------------------------------------------------------------------------------
     	SACH	*,AR1	; CMPR6B = dac_period*(PWM_DAC_IPTR2)/2 + dac_period/2
     					; ARP=AR4, AR0->FR0, AR2->PWM_DAC_IPTR2, AR3->(PWM_DAC_IPTR2), AR4->CMPR6B, ARP=AR1
;--------------------------------------------------------------------------------
_F2407_PWMDAC_Update_exit:
       	;MAR   	*,AR1   ; can be removed if this condition is met on
       	;                ; every path to this code. (i.e., ARP=AR1 here)
      	
      	SBRK   	#(__F2407_PWMDAC_Update_framesize+1)
      	LAR   	AR0,*-
       	PSHD   	*
      	RET

⌨️ 快捷键说明

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