📄 _pi_asm.lst
字号:
+1 267 +1 268 +1 269 +1 270 +1 271 +1 272 +1 273 +1 274 +1 275 +1 276 +1 277 +1 278 +1 279
+1 280
+1 281
+1 282 ;---------------------------------
+1 283 ; MADDS_Q31(a, b, c, d, e, f)
+1 284 ;_________________________________
+1 285 ; (a,b) + c * d + e * f
+1 286 ; c, d, e, f are in Q15 format
+1 287 ; (a,b) result in Q2.30
+1 288 ; modified : a,b
+1 289 +1 290 +1 291 +1 292 +1 293 +1 294 +1 295 +1 296 +1 297 +1 298 +1 299 +1 300 +1 301
+1 302
+1 303 ;---------------------------------
+1 304 ; LSHIFTS_Q31 a,b
+1 305 ;_________________________________
+1 306 ; Shift left by 4 and saturate a 32 bit signed number
+1 307 ; (a, b) is a 32 bit signed number
+1 308 ; (a,b) = (a,b) << 4 and saturate
+1 309 ; modified : a, b
+1 310 +1 311 +1 312 +1 313 +1 314 +1 315 +1 316 +1 317 +1 318 A166 MACRO ASSEMBLER _PI_ASM 12/19/2003 11:51:12 PAGE 6
+1 319 +1 320 +1 321 +1 322 +1 323 +1 324 +1 325 +1 326 +1 327 +1 328 +1 329 +1 330 +1 331 +1 332 +1 333 +1 334
+1 335
+1 336 ;*************************************************************************************
***
+1 337 ; END OF MACRO DEFINITION
+1 338 ;*************************************************************************************
***
339
340 $MODINF (43)
341 NAME _PI_ASM
342
343 NCODE CGROUP ?PR?_PI_ASM
344
345 ASSUME DPP3 : SYSTEM
346
347 REGDEF R0 - R15
348
-------- 349 ?PR?_PI_ASM SECTION CODE WORD 'NCODE'
350
351
352 ; #include "PI.h"
353
354
355 ;__________________________________________________________
356 ; Function name :
357 ; PI_Controller
358 ;__________________
359 ; Prototype :
360 ; void PI_Controller(TPI * PI, int NewInput, int * Result);
361 ;__________________
362 ; Inputs:
363 ; - PI structure
364 ; - New input
365 ;__________________
366 ; Restriction :
367 ; - the two coeficient must be bigger than 0x8001 and smaller 0x7FFF
368 ;__________________
369 ; Execute the PI controller
370 ; NewError = SetValue - NewInput
371 ; Integral = Integral + A0 * NewError + A1*Error
372 ; Error = NewError
373 ; if (High(Integral <<4)>Limit )
374 ; *Result=Limit;
375 ; else if (High(Integral <<4)<-Limit )
376 ; *Result=-Limit;
377 ; else
378 ; *Result=High(Integral << 4);
379 ; Return the PI output
380 ;__________________
381
382 ;__________________________________________________________
A166 MACRO ASSEMBLER _PI_ASM 12/19/2003 11:51:12 PAGE 7
383
384 PI_Controller PROC NEAR
385 PUBLIC PI_Controller
386
00000000 9838 387 MOV R3,[R8+] ; SetValue
00000002 9848 388 MOV R4,[R8+] ; A0
00000004 9858 389 MOV R5,[R8+] ; A1
00000006 9868 390 MOV R6,[R8+] ; Limit
00000008 9818 391 MOV R1,[R8+] ; Integral low
0000000A 98B8 392 MOV R11,[R8+] ; Integral high
0000000C A8C8 393 MOV R12,[R8] ; Error
394
395
0000000E 2039 396 SUB R3,R9
00000010 5D06 397 JMPR cc_NV,??NOSATURATION?0
398 ;Saturate
00000012 7D03 399 JMPR cc_NN,??NEGATIVESATURATION?1 ; flag N not set => negative o
verflow
400 ??POSITIVESATURATION?2:
00000014 E6F3FF7F 401 MOV R3,#0x7FFF
00000018 0D02 402 JMPR cc_UC,??NOSATURATION?0
403 ??NEGATIVESATURATION?1: ; flag N set => positive overflow
0000001A E6F30080 404 MOV R3,#0x8000
405 ??NOSATURATION?0:
406 ; R3 = New error
407
0000001E 0B43 408 MUL R4, R3
409 ; No verification is done for (-1)*(-1)
410 ; at least one of the two operand must be bigger than 0x8001 and smaller 0x7FFF
411
412
00000020 02F10EFE 413 ADD R1 ,MDL
00000024 12FB0CFE 414 ADDC R11 ,MDH
00000028 5D0A 415 JMPR cc_NV,??NOSATURATION?3
416 ;Saturate
0000002A 7D05 417 JMPR cc_NN,??NEGATIVESATURATION?4 ; flag N not set => negative o
verflow
418 ??POSITIVESATURATION?5:
0000002C E6FBFF7F 419 MOV R11 ,#0x7FFF
00000030 F2F11EFF 420 MOV R1 ,ONES
00000034 0D04 421 JMPR cc_UC,??NOSATURATION?3
422 ??NEGATIVESATURATION?4: ; flag N set => positive overf
low
00000036 E6FB0080 423 MOV R11 ,#0x8000
0000003A F2F11CFF 424 MOV R1 ,ZEROS
425 ??NOSATURATION?3:
426
427
0000003E 0B5C 428 MUL R5, R12
429 ; No verification is done for (-1)*(-1)
430 ; at least one of the two operand must be bigger than 0x8001 and smaller 0x7FFF
431
432
00000040 02F10EFE 433 ADD R1 ,MDL
00000044 12FB0CFE 434 ADDC R11 ,MDH
00000048 5D0A 435 JMPR cc_NV,??NOSATURATION?6
436 ;Saturate
0000004A 7D05 437 JMPR cc_NN,??NEGATIVESATURATION?7 ; flag N not set => negative o
verflow
438 ??POSITIVESATURATION?8:
0000004C E6FBFF7F 439 MOV R11 ,#0x7FFF
00000050 F2F11EFF 440 MOV R1 ,ONES
00000054 0D04 441 JMPR cc_UC,??NOSATURATION?6
442 ??NEGATIVESATURATION?7: ; flag N set => positive overf
low
00000056 E6FB0080 443 MOV R11 ,#0x8000
A166 MACRO ASSEMBLER _PI_ASM 12/19/2003 11:51:12 PAGE 8
0000005A F2F11CFF 444 MOV R1 ,ZEROS
445 ??NOSATURATION?6:
446
447 ; (R11,R1) = Integral + A0 * NewError + A1*Error
448
0000005E B838 449 MOV [R8],R3
00000060 88B8 450 MOV [-R8],R11
00000062 8818 451 MOV [-R8],R1
452
453
00000064 0011 454 ADD R1,R1
00000066 10BB 455 ADDC R11,R11
00000068 4D0A 456 JMPR cc_V,??SATURATION?9
0000006A 0011 457 ADD R1,R1
0000006C 10BB 458 ADDC R11,R11
0000006E 4D07 459 JMPR cc_V,??SATURATION?9
00000070 0011 460 ADD R1,R1
00000072 10BB 461 ADDC R11,R11
00000074 4D04 462 JMPR cc_V,??SATURATION?9
00000076 0011 463 ADD R1,R1
00000078 10BB 464 ADDC R11,R11
0000007A 4D01 465 JMPR cc_V,??SATURATION?9
0000007C 0D0A 466 JMPR cc_UC,??NOSATURATION?10
467 ??SATURATION?9:
0000007E 7D05 468 JMPR cc_NN,??NEGATIVESATURATION?11 ; flag N not set => negative o
verflow
469 ??POSITIVESATURATION?12:
00000080 E6FBFF7F 470 MOV R11,#0x7FFF
00000084 F2F11EFF 471 MOV R1,ONES
00000088 0D04 472 JMPR cc_UC,??NOSATURATION?10
473 ??NEGATIVESATURATION?11: ; flag N set => positi
ve overflow
0000008A E6FB0080 474 MOV R11,#0x8000
0000008E F2F11CFF 475 MOV R1,ZEROS
476 ??NOSATURATION?10:
477
478
00000092 F01B 479 MOV R1,R11
00000094 2016 480 SUB R1,R6
00000096 DD07 481 JMPR cc_SGE,??LIMITPOS?14
00000098 8160 482 NEG R6
0000009A F01B 483 MOV R1,R11
0000009C 2016 484 SUB R1,R6
0000009E BD01 485 JMPR cc_SLE,??LIMITNEG?13
000000A0 0D03 486 JMPR cc_UC,??ENDLIMIT?15
487 ??LIMITNEG?13:
000000A2 F0B6 488 MOV R11,R6
000000A4 0D01 489 JMPR cc_UC,??ENDLIMIT?15
490 ??LIMITPOS?14:
000000A6 F0B6 491 MOV R11,R6
492 ??ENDLIMIT?15:
493
000000A8 B8BA 494 MOV [R10],R11
000000AA CB00 495 RET
496 PI_Controller ENDP
497
-------- 498 ?PR?_PI_ASM ENDS
499
500 END
A166 MACRO ASSEMBLER _PI_ASM 12/19/2003 11:51:12 PAGE 9
SYMBOL TABLE LISTING
------ ----- -------
N A M E TYPE VALUE I ATTRIBUTES
??ENDLIMIT?15 . . . . . NEAR A8H R SEC=?PR?_PI_ASM
??LIMITNEG?13 . . . . . NEAR A2H R SEC=?PR?_PI_ASM
??LIMITPOS?14 . . . . . NEAR A6H R SEC=?PR?_PI_ASM
??NEGATIVESATURATION?1. NEAR 1AH R SEC=?PR?_PI_ASM
??NEGATIVESATURATION?11 NEAR 8AH R SEC=?PR?_PI_ASM
??NEGATIVESATURATION?4. NEAR 36H R SEC=?PR?_PI_ASM
??NEGATIVESATURATION?7. NEAR 56H R SEC=?PR?_PI_ASM
??NOSATURATION?0. . . . NEAR 1EH R SEC=?PR?_PI_ASM
??NOSATURATION?10 . . . NEAR 92H R SEC=?PR?_PI_ASM
??NOSATURATION?3. . . . NEAR 3EH R SEC=?PR?_PI_ASM
??NOSATURATION?6. . . . NEAR 5EH R SEC=?PR?_PI_ASM
??POSITIVESATURATION?12 NEAR 80H R SEC=?PR?_PI_ASM
??POSITIVESATURATION?2. NEAR 14H R SEC=?PR?_PI_ASM
??POSITIVESATURATION?5. NEAR 2CH R SEC=?PR?_PI_ASM
??POSITIVESATURATION?8. NEAR 4CH R SEC=?PR?_PI_ASM
??SATURATION?9. . . . . NEAR 7EH R SEC=?PR?_PI_ASM
?PR?_PI_ASM . . . . . . ---- ---- R SECTION
DPP3. . . . . . . . . . WORD 1FC0H A SFR
MDH . . . . . . . . . . WORD FE0CH A SFR
MDL . . . . . . . . . . WORD FE0EH A SFR
NCODE . . . . . . . . . ---- ---- GROUP
ONES. . . . . . . . . . WORD FF1EH A SFR
PI_Controller . . . . . NEAR 0H R PUB SEC=?PR?_PI_ASM
ZEROS . . . . . . . . . WORD FF1CH A SFR
_PI_ASM . . . . . . . . ---- ----
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -