📄 encoder.lst
字号:
245 0046 908b SACL * ,AR3
246 0047 L6:
247 *** -----------------------g4:
248 *** 133 ----------------------- if ( !(*(unsigned*)0x7032&0x100) ) goto g4;
249 .line 25
250 ;>>>> ADC_READ2(buffer[0],buffer[1]);
251 0047 bf0b LARK AR3,28722
0048 7032
252 0049 4780 BIT * ,7
253 004a e200 BBZ L6
004b 0047'
TMS320C1x/C2x/C2xx/C5x COFF Assembler Beta Version 6.63 Mon Feb 9 04:52:54 1998
Copyright (c) 1987-1996 Texas Instruments Incorporated
encoder.asm PAGE 6
254 *** 133 ----------------------- buffer[0] = *(unsigned*)0x7036;
255 004c 7804 ADRK 4
256 004d 108a LAC * ,AR2
257 004e b201 LARK AR2,1
258 004f 8be0 MAR *0+
259 0050 908b SACL * ,AR3
260 *** 133 ----------------------- buffer[1] = *(unsigned*)0x7038;
261 0051 7802 ADRK 2
262 0052 108a LAC * ,AR2
263 0053 8ba0 MAR *+
264 0054 908b SACL * ,AR3
265 *** 133 ----------------------- *(unsigned*)0x7032 |= 0x100u;
266 0055 7c06 SBRK 6
267 0056 bf80 LACK 256
0057 0100
268 0058 6d80 OR *
269 0059 908a SACL * ,AR2
270 *** 136 ----------------------- buffer[0] = (unsigned)buffer[0]-0x8000u;
271 .line 28
272 ;>>>> buffer[0] = buffer[0] - ENC_U0_OFFSET;
273 005a 8b90 MAR *-
274 005b 1080 LAC *
275 005c bf9f ADLK 65535,15
005d ffff
276 005e 90a0 SACL *+
277 *** 137 ----------------------- buffer[1] = (unsigned)buffer[1]+32468u;
278 .line 29
279 ;>>>> buffer[1] = buffer[1] - ENC_U90_OFFSET;
280 005f 1089 LAC * ,AR1
281 0060 bf90 ADDK 32468
0061 7ed4
282 0062 9080 SACL *
283 0063 108a LAC * ,AR2
284 0064 9080 SACL *
285 *** 142 ----------------------- if ( ABS(ABS(buffer[0])-ABS(buffer[1])) > 16384 ) goto g2;
286 .line 34
287 ;>>>> } while ( abs(abs(buffer[0])-abs(buffer[1])) > 0x4000);
288 0065 be47 SSXM
289 0066 1099 LAC *-,AR1
290 0067 be00 ABS
291 0068 908a SACL * ,AR2
292 0069 1089 LAC * ,AR1
293 006a be00 ABS
294 006b 3080 SUB *
295 006c be00 ABS
296 006d bfa0 SUBK 16384
006e 4000
297 006f e304 BGZ L4
0070 0040'
298 *** 147 ----------------------- ubuffer[0] = Encoder_CalcPhase(buffer[0], buffer[1]);
299 .line 39
300 ;>>>> ubuffer[0] = Encoder_CalcPhase(buffer[0],buffer[1]);
301 0071 8b8a MAR * ,AR2
302 0072 8ba0 MAR *+
TMS320C1x/C2x/C2xx/C5x COFF Assembler Beta Version 6.63 Mon Feb 9 04:52:54 1998
Copyright (c) 1987-1996 Texas Instruments Incorporated
encoder.asm PAGE 7
303 0073 1099 LAC *-,AR1
304 0074 90aa SACL *+,AR2
305 0075 1089 LAC * ,AR1
306 0076 90a0 SACL *+
307 0077 7a80 CALL _Encoder_CalcPhase
0078 0101'
308 0079 7c02 SBRK 2
309 007a 8b8a MAR * ,AR2
310 007b b203 LARK AR2,3
311 007c 8be0 MAR *0+
312 007d 9080 SACL *
313 *** 148 ----------------------- ubuffer[0] = ubuffer[0]>>14;
314 .line 40
315 ;>>>> ubuffer[0] = (ubuffer[0] >> 14) & 0x0003; /* extract quadrant */
316 007e be46 RSXM
317 007f 1180 LAC * ,1
318 0080 99a0 SACH *+,1
319 *** 149 ----------------------- ubuffer[1] = ubuffer[1]&3u;
320 .line 41
321 ;>>>> ubuffer[1] = ubuffer[1] & 0x0003;
322 0081 b903 LACK 3
323 0082 6e89 AND * ,AR1
324 0083 9080 SACL *
325 0084 108a LAC * ,AR2
326 0085 9080 SACL *
327 *** 151 ----------------------- qep_diff = qep_diff+((int)ubuffer[1]-(int)ubuffer[0]);
328 .line 43
329 ;>>>> qep_diff = qep_diff + ((int) ubuffer[1] - (int) ubuffer[0]);
330 0086 1099 LAC *-,AR1
331 0087 bc00! LDPK _qep_diff
332 0088 2000! ADD _qep_diff
333 0089 9080 SACL *
334 008a 108a LAC * ,AR2
335 008b 3080 SUB *
336 008c 9000! SACL _qep_diff
337 *** ----------------------- return;
338 008d EPI0_3:
339 .line 44
340 008d 8b89 MAR * ,AR1
341 008e 7c06 SBRK 6
342 008f 0090 LAR AR0,*-
343 0090 7680 PSHD *
344 0091 ef00 RET
345
346 .endfunc 152,000000000H,5
347 7032 ADCTRL1 .set 7032h
348 7405 T2CNT .set 7405h
349 .ref _qep_diff
350 .ref _QEP_GetIncr
351 .def _Encoder_SamplePosition
352 0092 _Encoder_SamplePosition:
353 0092 bce0 ldp #ADCTRL1/128
354 0093 6932 lacl ADCTRL1
355 0094 bfb0 and #0FF81h ;clear channels
TMS320C1x/C2x/C2xx/C5x COFF Assembler Beta Version 6.63 Mon Feb 9 04:52:54 1998
Copyright (c) 1987-1996 Texas Instruments Incorporated
encoder.asm PAGE 8
0095 ff81
356 0096 bfc0 or #005Bh ;select channel 5 and 13
0097 005b
357 0098 9032 sacl ADCTRL1 ;(1) start ADC's
358 ;capture Timer 2 300ns after ADC start (1)
359 ;-----------------------------------------
360 0099 7a80 call _QEP_GetIncr ;200ns (call) + 100ns in subroutine
009a 0000!
361 009b ef00 ret
362
363 .sym _Encoder_CalcPosition,_Encoder_CalcPosition,32,2,0
364 .globl _Encoder_CalcPosition
365
366 .func 212
367 ;>>>> void Encoder_CalcPosition(unsigned qep_incr_sample)
368 ******************************************************
369 * FUNCTION DEF : _Encoder_CalcPosition
370 ******************************************************
371 009c _Encoder_CalcPosition:
372
373 0000 LF4 .set 0
374
375 009c 8aa0 POPD *+
376 009d 80a0 SAR AR0,*+
377 009e 8180 SAR AR1,*
378 009f b005 LARK AR0,5
379 00a0 00ea LAR AR0,*0+,AR2
380
381 .sym _qep_incr_sample,-3+LF4,14,9,16
382 .sym _sin_sample,1,4,1,16
383 .sym _ncos_sample,2,4,1,16
384 .sym _incr,3,14,1,16
385 .sym _buffer,4,14,1,16
386 .line 2
387 ;>>>> volatile int sin_sample;
388 ;>>>> volatile int ncos_sample;
389 ;>>>> volatile unsigned incr;
390 ;>>>> volatile unsigned buffer;
391 *** 222 ----------------------- incr = qep_incr_sample;
392 .line 11
393 ;>>>> incr = qep_incr_sample;
394 00a1 bf0a LARK AR2,-3+LF4
00a2 fffd
395 00a3 8be0 MAR *0+
396 00a4 1080 LAC *
397 00a5 7806 ADRK 6-LF4
398 00a6 908b SACL * ,AR3
399 00a7 L8:
400 *** -----------------------g2:
401 *** 227 ----------------------- if ( !(*(unsigned*)0x7032&0x100) ) goto g2;
402 .line 16
403 ;>>>> ADC_READ2(sin_sample,ncos_sample);
404 00a7 bf0b LARK AR3,28722
00a8 7032
TMS320C1x/C2x/C2xx/C5x COFF Assembler Beta Version 6.63 Mon Feb 9 04:52:54 1998
Copyright (c) 1987-1996 Texas Instruments Incorporated
encoder.asm PAGE 9
405 00a9 4780 BIT * ,7
406 00aa e200 BBZ L8
00ab 00a7'
407 *** 227 ----------------------- sin_sample = *(unsigned*)0x7036;
408 00ac 7804 ADRK 4
409 00ad 108a LAC * ,AR2
410 00ae b201 LARK AR2,1
411 00af 8be0 MAR *0+
412 00b0 908b SACL * ,AR3
413 *** 227 ----------------------- ncos_sample = *(unsigned*)0x7038;
414 00b1 7802 ADRK 2
415 00b2 108a LAC * ,AR2
416 00b3 8ba0 MAR *+
417 00b4 908b SACL * ,AR3
418 *** 227 ----------------------- *(unsigned*)0x7032 |= 0x100u;
419 00b5 7c06 SBRK 6
420 00b6 bf80 LACK 256
00b7 0100
421 00b8 6d80 OR *
422 00b9 908a SACL * ,AR2
423 *** 230 ----------------------- sin_sample = (unsigned)sin_sample-0x8000u;
424 .line 19
425 ;>>>> sin_sample = sin_sample - ENC_U0_OFFSET;
426 00ba 8b90 MAR *-
427 00bb 1080 LAC *
428 00bc bf9f ADLK 65535,15
00bd ffff
429 00be 90a0 SACL *+
430 *** 231 ----------------------- ncos_sample = (unsigned)ncos_sample+32468u;
431 .line 20
432 ;>>>> ncos_sample = ncos_sample - ENC_U90_OFFSET;
433 00bf 1080 LAC *
434 00c0 bf90 ADDK 32468
00c1 7ed4
435 00c2 9080 SACL *
436 *** 236 ----------------------- encoder_position[0] = Encoder_CalcPhase(sin_sample, ncos_sample);
437 .line 25
438 ;>>>> encoder_position[0] = Encoder_CalcPhase(sin_sample, ncos_sample);
439 00c3 1099 LAC *-,AR1
440 00c4 90aa SACL *+,AR2
441 00c5 1089 LAC * ,AR1
442 00c6 90a0 SACL *+
443 00c7 7a80 CALL _Encoder_CalcPhase
00c8 0101'
444 00c9 7c02 SBRK 2
445 00ca bc00- LDPK _encoder_position
446 00cb 9000- SACL _encoder_position
447 *** 241 ----------------------- buffer = encoder_position[0]>>14;
448 .line 30
449 ;>>>> buffer = ((encoder_position[0] >> 14) & 0x0003);
450 ;>>>> switch (buffer)
451 ;>>>> case 0: if ((incr & 0x0003) == 3)
452 ;>>>> incr = (incr + 1) & (qep_rollover-1);
453 ;>>>> break;
TMS320C1x/C2x/C2xx/C5x COFF Assembler Beta Version 6.63 Mon Feb 9 04:52:54 1998
Copyright (c) 1987-1996 Texas Instruments Incorporated
encoder.asm PAGE 10
454 00cc be46 RSXM
455 00cd 1100- LAC _encoder_position,1
456 00ce 8b8a MAR * ,AR2
457 00cf b204 LARK AR2,4
458 00d0 8be0 MAR *0+
459 00d1 9980 SACH * ,1
460 *** ----------------------- switch ( buffer ) {...};
461 00d2 6980 ZALS *
462 00d3 e388 BZ L12
00d4 00e8'
463 00d5 ba03 SUBK 3
464 00d6 e308 BNZ L14
00d7 00f7'
465 *** -----------------------g4:
466 *** 248 ----------------------- if ( incr&3u ) goto g8;
467 .line 37
468 ;>>>> case 3: if ((incr & 0x0003) == 0)
469 00d8 b903 LACK 3
470 00d9 8b90 MAR *-
471 00da 6e80 AND *
472 00db e308 BNZ L14
00dc 00f7'
473 *** 249 ----------------------- incr = incr-1u&qep_rollover-1u;
474 .line 38
475 ;>>>> incr = (incr - 1) & (qep_rollover-1);
476 ;>>>> break;
477 00dd bc00! LDPK _qep_rollover
478 00de 1000! LAC _qep_rollover
479 00df ba01 SUBK 1
480 00e0 8b89 MAR * ,AR1
481 00e1 908a SACL * ,AR2
482 00e2 1089 LAC * ,AR1
483 00e3 ba01 SUBK 1
484 00e4 6e8a AND * ,AR2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -