?? encoder.asm
字號:
*******************************************************
* 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 + -