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

📄 encoder.asm

📁 Texas-Instrument C2000 Series DSP example programs
💻 ASM
📖 第 1 页 / 共 2 页
字号:
*******************************************************
* TMS320C2x/C2xx/C5x ANSI C Codegen Beta Version 6.63       
*******************************************************
;	C:\DSP\2XX\DSPTOOLS\CGT\6.63B\dspac.exe -v2xx -i..\include ..\source\encoder.c C:\WINDOWS\TEMP\encoder.if 
;	C:\DSP\2XX\DSPTOOLS\CGT\6.63B\dspopt.exe -v2xx -s -O2 C:\WINDOWS\TEMP\encoder.if C:\WINDOWS\TEMP\encoder.opt 
;	C:\DSP\2XX\DSPTOOLS\CGT\6.63B\dspcg.exe -v2xx -o -n -o -n -o C:\WINDOWS\TEMP\encoder.opt C:\WINDOWS\TEMP\encoder.asm C:\WINDOWS\TEMP\encoder.tmp 
	.port
	.bss	_encoder_position,2,1
	.file	"..\source\encoder.c"
	.file	"c:\dsp\2xx\dsptools\cgt\6.63b\stdlib.h"
	.sym	_size_t,0,14,13,16
	.sym	_wchar_t,0,4,13,16
	.globl	_atoi
	.globl	_atol
	.globl	_atof
	.globl	_strtod
	.globl	_strtol
	.globl	_strtoul

	.stag	__div_t,32
	.member	_quot,0,4,8,16
	.member	_rem,16,4,8,16
	.eos
	.sym	_div_t,0,8,13,32,__div_t

	.stag	__ldiv_t,64
	.member	_quot,0,5,8,32
	.member	_rem,32,5,8,32
	.eos
	.sym	_ldiv_t,0,8,13,64,__ldiv_t
	.globl	_div
	.globl	_ldiv
	.globl	_rand
	.globl	_srand
	.globl	_calloc
	.globl	_free
	.globl	_malloc
	.globl	_minit
	.globl	_realloc
	.globl	_abort
	.globl	_exit
	.globl	_atexit
	.globl	_abs
	.globl	_labs
	.globl	_qsort
	.globl	_bsearch
	.globl	_getenv
	.globl	_ti_sprintf
	.file	"c:\dsp\2xx\dsptools\cgt\6.63b\math.h"
	.globl	_asin
	.globl	_acos
	.globl	_atan
	.globl	_atan2
	.globl	_ceil
	.globl	_cos
	.globl	_cosh
	.globl	_exp
	.globl	_fabs
	.globl	_floor
	.globl	_fmod
	.globl	_frexp
	.globl	_ldexp
	.globl	_log
	.globl	_log10
	.globl	_modf
	.globl	_pow
	.globl	_sin
	.globl	_sinh
	.globl	_sqrt
	.globl	_tan
	.globl	_tanh
	.file	"..\include\q15_div.h"
	.globl	_q15_div
	.file	"..\include\q15_atan.h"
	.globl	_q15_atan
	.globl	_q15p_atan
	.file	"..\include\evm_qep.h"
	.globl	_qep_rollover
	.globl	_qep_diff
	.globl	_QEP_GetIncr
	.globl	_QEP_Init
	.file	"c:\dsp\24x\code\encoder\monitor.h"
	.globl	_monitor
	.globl	_Encoder_MSG
	.file	"..\include\encoder.h"
QEP_ROLLOVER  .set 8192 
	.globl	_encoder_position
	.globl	_Encoder_Init
	.globl	_Encoder_ZeroPosition
	.globl	_Encoder_MatchIncrPhase
	.globl	_Encoder_CalcPhase
	.globl	_Encoder_SamplePosition
	.globl	_Encoder_CalcPosition
	.file	"..\source\encoder.c"
	.text

	.sym	_Encoder_Init,_Encoder_Init,32,2,0
	.globl	_Encoder_Init

	.func	58
;>>>> 	void Encoder_Init(unsigned rollover)
******************************************************
* FUNCTION DEF : _Encoder_Init
******************************************************
_Encoder_Init:

LF1	.set	0

	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LAR	AR0,*+,AR3

	.sym	_rollover,-3+LF1,14,9,16
	.line	2
*** 63	-----------------------    *(unsigned*)0x7032 = 6144u;
	.line	6
;>>>> 	    ADCTRL1  = 0x1800;           /* enable both ADC's */
	LARK	AR3,28722
	SPLK	#6144,* 
*** 64	-----------------------    *(unsigned*)0x7032 |= 0x100u;
	.line	7
;>>>> 	    ADCTRL1 |= 0x0100;           /* clear interrupt flag */       
	LACK	256
	OR	* 
	SACL	* 
*** 65	-----------------------    *(unsigned*)0x7034 = 3u;
	.line	8
;>>>> 	    ADCTRL2  = 0x0003;           /* ADC_CLOCK = SYSCLK/10 = 1MHz */
	LACK	3
	ADRK	2
	SACL	* ,AR2
*** 70	-----------------------    QEP_Init(0u, rollover);
	.line	13
;>>>> 	    QEP_Init(0x0,rollover);      /* QEP counts Timer 2 */
	LARK	AR2,-3+LF1
	MAR	*0+
	LAC	* ,AR1
	SACL	*+
	LACK	0
	SACL	*+
	CALL	_QEP_Init
	SBRK	2
*** 76	-----------------------    Encoder_MSG();
	.line	19
;>>>> 	    Encoder_MSG();              /* turn encoder into zero position */
	CALL	_Encoder_MSG
*** 77	-----------------------    Encoder_ZeroPosition();
	.line	20
;>>>> 	    Encoder_ZeroPosition();     /* detect zero position adjust counter */
	CALL	_Encoder_ZeroPosition
*** 78	-----------------------    Encoder_MatchIncrPhase();
	.line	21
;>>>> 	    Encoder_MatchIncrPhase();   /* match counter (quadrant) and phase */
	CALL	_Encoder_MatchIncrPhase
***  	-----------------------    return;
EPI0_1:
	.line	23
	SBRK	2
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	80,000000000H,1

	.sym	_Encoder_ZeroPosition,_Encoder_ZeroPosition,32,2,0
	.globl	_Encoder_ZeroPosition

	.func	92
;>>>> 	void Encoder_ZeroPosition(void)
******************************************************
* FUNCTION DEF : _Encoder_ZeroPosition
******************************************************
_Encoder_ZeroPosition:

*** 95	-----------------------    *(unsigned*)0x7092 &= 0xffbfu;
	.line	4
;>>>> 	   OCRB &= 0xFFBF;                      /* clear bit 6 */
	LARK	AR3,28818
	LACK	65471
	MAR	* ,AR3
	AND	* 
	SACL	* 
*** 96	-----------------------    *(unsigned*)0x709c &= 0xbfffu;
	.line	5
;>>>> 	   PCDATDIR &= 0xBFFF;                  /* clear bit 14 */
	ADRK	10
	LACK	49151
	AND	* 
	SACL	* 
L2:
***	-----------------------g2:
*** 97	-----------------------    if ( !(*(unsigned*)0x709c&0x40) ) goto g2;
	.line	6
;>>>> 	   while ( !(PCDATDIR & 0x0040));       /* poll bit 6 */
	LARK	AR3,28828
	BIT	* ,9
	BBZ	L2
*** 98	-----------------------    *(unsigned*)0x7405 = 0u;
	.line	7
;>>>> 	   T2CNT = 0x0;
	LARK	AR4,29701
	LACK	0
	MAR	* ,AR4
	SACL	* 
***  	-----------------------    return;
EPI0_2:
	.line	8
	MAR	* ,AR1
	RET

	.endfunc	99,000000000H,1

	.sym	_Encoder_MatchIncrPhase,_Encoder_MatchIncrPhase,32,2,0
	.globl	_Encoder_MatchIncrPhase

	.func	109
;>>>> 	void Encoder_MatchIncrPhase(void)
;>>>> 	    char  c;
;>>>> 	    volatile int   	buffer[2];
;>>>> 	    volatile unsigned 	ubuffer[2];
;>>>> 	    do
******************************************************
* FUNCTION DEF : _Encoder_MatchIncrPhase
******************************************************
_Encoder_MatchIncrPhase:
	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,5
	LAR	AR0,*0+

	.sym	_buffer,1,52,1,32,,2
	.sym	_ubuffer,3,62,1,32,,2
L4:
***	-----------------------g2:
*** 131	-----------------------    ubuffer[1] = Encoder_SamplePosition();
	.line	23
;>>>> 	       ubuffer[1] = Encoder_SamplePosition();
	CALL	_Encoder_SamplePosition,AR1
	SACL	* 
	LAC	* ,AR2
	LARK	AR2,4
	MAR	*0+
	SACL	* ,AR3
L6:
***	-----------------------g4:
*** 133	-----------------------    if ( !(*(unsigned*)0x7032&0x100) ) goto g4;
	.line	25
;>>>> 	       ADC_READ2(buffer[0],buffer[1]);
	LARK	AR3,28722
	BIT	* ,7
	BBZ	L6
*** 133	-----------------------    buffer[0] = *(unsigned*)0x7036;
	ADRK	4
	LAC	* ,AR2
	LARK	AR2,1
	MAR	*0+
	SACL	* ,AR3
*** 133	-----------------------    buffer[1] = *(unsigned*)0x7038;
	ADRK	2
	LAC	* ,AR2
	MAR	*+
	SACL	* ,AR3
*** 133	-----------------------    *(unsigned*)0x7032 |= 0x100u;
	SBRK	6
	LACK	256
	OR	* 
	SACL	* ,AR2
*** 136	-----------------------    buffer[0] = (unsigned)buffer[0]-0x8000u;
	.line	28
;>>>> 	       buffer[0] = buffer[0] - ENC_U0_OFFSET;  
	MAR	*-
	LAC	* 
	ADLK	65535,15
	SACL	*+
*** 137	-----------------------    buffer[1] = (unsigned)buffer[1]+32468u;
	.line	29
;>>>> 	       buffer[1] = buffer[1] - ENC_U90_OFFSET;
	LAC	* ,AR1
	ADDK	32468
	SACL	* 
	LAC	* ,AR2
	SACL	* 
*** 142	-----------------------    if ( ABS(ABS(buffer[0])-ABS(buffer[1])) > 16384 ) goto g2;
	.line	34
;>>>> 	    }  while ( abs(abs(buffer[0])-abs(buffer[1])) > 0x4000);
	SSXM
	LAC	*-,AR1
	ABS
	SACL	* ,AR2
	LAC	* ,AR1
	ABS
	SUB	* 
	ABS
	SUBK	16384
	BGZ	L4
*** 147	-----------------------    ubuffer[0] = Encoder_CalcPhase(buffer[0], buffer[1]);
	.line	39
;>>>> 	    ubuffer[0] = Encoder_CalcPhase(buffer[0],buffer[1]);   
	MAR	* ,AR2
	MAR	*+
	LAC	*-,AR1
	SACL	*+,AR2
	LAC	* ,AR1
	SACL	*+
	CALL	_Encoder_CalcPhase
	SBRK	2
	MAR	* ,AR2
	LARK	AR2,3
	MAR	*0+
	SACL	* 
*** 148	-----------------------    ubuffer[0] = ubuffer[0]>>14;
	.line	40
;>>>> 	    ubuffer[0] = (ubuffer[0] >> 14) & 0x0003;   /* extract quadrant */
	RSXM
	LAC	* ,1
	SACH	*+,1
*** 149	-----------------------    ubuffer[1] = ubuffer[1]&3u;
	.line	41
;>>>> 	    ubuffer[1] = ubuffer[1] & 0x0003;
	LACK	3
	AND	* ,AR1
	SACL	* 
	LAC	* ,AR2
	SACL	* 
*** 151	-----------------------    qep_diff = qep_diff+((int)ubuffer[1]-(int)ubuffer[0]);
	.line	43
;>>>> 	    qep_diff = qep_diff + ((int) ubuffer[1] - (int) ubuffer[0]); 
	LAC	*-,AR1
	LDPK	_qep_diff
	ADD	_qep_diff
	SACL	* 
	LAC	* ,AR2
	SUB	* 
	SACL	_qep_diff
***  	-----------------------    return;
EPI0_3:
	.line	44
	MAR	* ,AR1
	SBRK	6
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	152,000000000H,5
ADCTRL1    .set    7032h                                   
T2CNT      .set    7405h                                   
           .ref    _qep_diff                               
           .ref    _QEP_GetIncr                            
           .def    _Encoder_SamplePosition                 
_Encoder_SamplePosition:                                   
           ldp     #ADCTRL1/128                            
           lacl    ADCTRL1                                 
           and     #0FF81h         ;clear channels         
           or      #005Bh          ;select channel 5 and 13
           sacl    ADCTRL1         ;(1) start ADC's        
     ;capture Timer 2 300ns after ADC start (1)                  
     ;-----------------------------------------                  
           call    _QEP_GetIncr   ;200ns (call) + 100ns in subroutine 
           ret                                                   

⌨️ 快捷键说明

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