From 2e2eb68ca1a9922be6f3a875ee57dfa025ac6c48 Mon Sep 17 00:00:00 2001 From: Raffaello Date: Sun, 14 Sep 2014 21:37:41 +0200 Subject: [PATCH] Update Version for uNAV board --- .../production/configuration_bits.o | Bin 3280 -> 3196 bytes .../production/high_level_control.o | Bin 11184 -> 18604 bytes .../production/high_level_control.o.d | 13 +- .../production/interrupts.o | Bin 22664 -> 24504 bytes .../production/interrupts.o.d | 17 +- .../XC16_dsPIC33FJ128MC802/production/main.o | Bin 4240 -> 4352 bytes .../production/main.o.d | 7 - .../production/motors_PID.o | Bin 30864 -> 35992 bytes .../production/motors_PID.o.d | 13 +- .../production/parsing_packet.o | Bin 28044 -> 25500 bytes .../production/parsing_packet.o.d | 17 +- .../production/serial.o | Bin 12836 -> 15712 bytes .../production/serial.o.d | 4 - .../production/system.o | Bin 58724 -> 63828 bytes .../production/system.o.d | 11 +- .../XC16_dsPIC33FJ128MC802/production/traps.o | Bin 9108 -> 9112 bytes .../XC16_dsPIC33FJ128MC802/production/user.o | Bin 15132 -> 15096 bytes .../production/user.o.d | 11 +- .../production/configuration_bits.o | Bin 3260 -> 0 bytes .../production/configuration_bits.o.d | 2 - .../production/interrupts.o | Bin 19328 -> 0 bytes .../production/interrupts.o.d | 7 - .../XC16_dsPIC33FJ128MC804/production/main.o | Bin 3960 -> 0 bytes .../production/main.o.d | 5 - .../production/motors_PID.o | Bin 24800 -> 0 bytes .../production/motors_PID.o.d | 5 - .../production/parsing_packet.o | Bin 20544 -> 0 bytes .../production/parsing_packet.o.d | 7 - .../production/serial.o | Bin 12604 -> 0 bytes .../production/serial.o.d | 4 - .../production/system.o | Bin 47840 -> 0 bytes .../production/system.o.d | 5 - .../XC16_dsPIC33FJ128MC804/production/traps.o | Bin 9084 -> 0 bytes .../production/traps.o.d | 2 - .../XC16_dsPIC33FJ128MC804/production/user.o | Bin 12264 -> 0 bytes .../production/user.o.d | 4 - disassembly/listing.disasm | 4925 ----------------- .../production/uNAV.X.production.map | 2550 +++++++++ .../production/MotionControl.X.production.elf | Bin 202412 -> 0 bytes .../production/MotionControl.X.production.hex | 800 --- uNAV.zip | Bin 0 -> 83035 bytes 41 files changed, 2595 insertions(+), 5814 deletions(-) delete mode 100644 build/XC16_dsPIC33FJ128MC802/production/main.o.d delete mode 100644 build/XC16_dsPIC33FJ128MC802/production/serial.o.d delete mode 100644 build/XC16_dsPIC33FJ128MC804/production/configuration_bits.o delete mode 100644 build/XC16_dsPIC33FJ128MC804/production/configuration_bits.o.d delete mode 100644 build/XC16_dsPIC33FJ128MC804/production/interrupts.o delete mode 100644 build/XC16_dsPIC33FJ128MC804/production/interrupts.o.d delete mode 100644 build/XC16_dsPIC33FJ128MC804/production/main.o delete mode 100644 build/XC16_dsPIC33FJ128MC804/production/main.o.d delete mode 100644 build/XC16_dsPIC33FJ128MC804/production/motors_PID.o delete mode 100644 build/XC16_dsPIC33FJ128MC804/production/motors_PID.o.d delete mode 100644 build/XC16_dsPIC33FJ128MC804/production/parsing_packet.o delete mode 100644 build/XC16_dsPIC33FJ128MC804/production/parsing_packet.o.d delete mode 100644 build/XC16_dsPIC33FJ128MC804/production/serial.o delete mode 100644 build/XC16_dsPIC33FJ128MC804/production/serial.o.d delete mode 100644 build/XC16_dsPIC33FJ128MC804/production/system.o delete mode 100644 build/XC16_dsPIC33FJ128MC804/production/system.o.d delete mode 100644 build/XC16_dsPIC33FJ128MC804/production/traps.o delete mode 100644 build/XC16_dsPIC33FJ128MC804/production/traps.o.d delete mode 100644 build/XC16_dsPIC33FJ128MC804/production/user.o delete mode 100644 build/XC16_dsPIC33FJ128MC804/production/user.o.d delete mode 100644 disassembly/listing.disasm create mode 100644 dist/XC16_dsPIC33FJ128MC802/production/uNAV.X.production.map delete mode 100755 dist/XC16_dsPIC33FJ128MC804/production/MotionControl.X.production.elf delete mode 100644 dist/XC16_dsPIC33FJ128MC804/production/MotionControl.X.production.hex create mode 100644 uNAV.zip diff --git a/build/XC16_dsPIC33FJ128MC802/production/configuration_bits.o b/build/XC16_dsPIC33FJ128MC802/production/configuration_bits.o index efe54979be0f43330c60e989b34178651c57ffd2..241df35759a85bd583dda8ed930fd5e73f9c3f93 100644 GIT binary patch delta 1035 zcmZ9IPe@cz6vn?hGjE(xr^aNmQ7iw|B+=+tL`o3iXa#D5WiFnCGn!i3yhg3TjkReJ zE}9NP3k#&B*rI=n2q70OqDWh`h#(A#7L^o55Ji3Or8zVA@$PrN-?`^<&sp&Q+H|Ev z>B-Vz(}Ji$O>%jguO6f5LkU8tR@9>dL3GNrRwQ3lP)p)ClCos;Ny3)9z8#Hd2B2^+g?qI(tIlV~2{h4#anw4O zht8Gyr#7#4ZN(LME--5@8-GJId--_OdYoZBu8(^+hWPxG7{DNUG0b=epSurxQOPET z$fMTTDEb*2WC@ZG^E%E^t$8qxFncCNgUnR%50VYDXMeyxHeNyH2-` zA$NgPyNkPPS@mxaW^Z5q9Ln(KKvMHv8NM&WpU?0YW!8N_U6xPo=i|cM+H&CLnqj0c zli}~C`7F$*c?}CGJ`ZlZO7q!RO7l65_>cy2v7F{TK)6m1$74n$me5-UqVZU?f52#q z$4>P|NA%Iw`i@|yE;n*sM1WkD+WkN_hhr}UHkeuj6q;HLL`*FMu9~_9cxdWY;Jv9O TfY(MX1%8_Mu+F+~^P2tzUFNqk delta 1150 zcmZuvOH30{6g_V`(+@3LQi&j_Ac2NNIusI(iD(Rnl2|0c0x>F<(n_^3V_T3!6Wka# zYHY6T3~t@H03$ImQCXPiN`;+qp*t6d$^wZ$yfYL^tM6s*x#zsz`{vx~uaY;Vw=2Y* zbY)Wb(&Is;7k>EDU#g4Sp*lb! z1Qb{@IUw;?xSs3irzlmnpbK*}D3xtKj!y0f2pm|`=!{gL=owaB``yU?+ZDK!(Iv)n z^hBx}Q*nsx=xi^BFk4-FYhwU|re+upV}Ns=wNcLf*u&WfqmLgy=Y8h8X3@tdDnCX{ zV%WSv;|Zjg=S)gQD^yBaF7!6AC1X7^BhbqyN7yXzZiBLFzY~XXjMc?|P5@h`k5S*v z-|GbbrW}Hrk<~+Yt#0v{9Gj0 ztXZchf(wN?ybw@>$w(rpCPL9@C=!orYD+@X`?OIt5DO=?@IXxONNDFH;gs5+>}YFl zYz%0rm^Rd`4W$xV+}EShQRnPg7vF0s1zNeiWgF0LU>VS5U^y^h;4a|3fja;z|2-@_ WfqDZgfRhGR0-uaNTxa&%p2fdyuh diff --git a/build/XC16_dsPIC33FJ128MC802/production/high_level_control.o b/build/XC16_dsPIC33FJ128MC802/production/high_level_control.o index 4969bac4c45f69a612f4efb227be0f156637be1b..84bd346c307555e14e011920983649dbf2ba9280 100644 GIT binary patch literal 18604 zcmc&+4RBo5bv~=N`Z1PmA^-6sj4-k>U}XK;vT=+oOSW+>TSzuIps-%;u4G|JD|T15 zAyhbEz$AniaD!VYZ9J4Aos^oyNto1iNya1$LxD+X>oP8(DWpt72@r=e42k=F@80{~ zeQzas9Gb~v-hTJod+s^so_p@^lexWZ{pv_0BIb$64)H0G`>I78WHh)83uLy;Kob1I&FC8ME1#3 zcvr|ic?qwve-p}56O`vrRyged+WJfAgFiHm7VMMz&w>rkQ7L}!Yw{*+`3>H4p8b|Y zVSABh`!0E7S|{|OCt80gZ*1Izbe&Z7R-*12w+~vK1F{*fn^&+#RyeQ`Z*Rc?*@@TW zCy{p&FWWs6Z&1%snGcyokQx2b(KD`71^tb9MV82oXxqDZf8VyX!ZtTf;D=H8`u-B% z-^NDM=GEZ64zFqBtI*p@-2opSm2dvGQXVR;Lfie=Gx6%_v&z_4jPZ%e>^|^(ru)SB z!{$lCKO@>lp4>lT8)qOc=i&8ivD)8&{5HG=7%vV+`Hkp@cdfWL{b1TOim`G3q_fZhrKR7MX`Ja~H;3u}qT2^Drkxo|Zzqv@2Th zHgK;LBHdb4DSN&`8O!9&EXJ-|r&0>*cFTp%Bw2#Gg$125iu|`wPMLQ_cFB*AeM_F^ zoFKbUw^*wBRNb~DcpPHj&mEm!onzqH176nM1Gz7k z9+K8yFOq2mEt1l9A1i%Yp2I89M?Ehyt>-Gn@E*vY4I3Ut3|xY~{x04%7-#>6w-0m5 z|KepmwtEiRL3=l1ZZ>mwIo6Ic%!L=>t;4$tubDe{AYH8Efb)7UWbDN2&5@z8oP zYm&3vx<$Hf$(VJEEy;y>l1rd9;#y&JO_GZsm3A$HJU(Y>?NhzlEH&CE!}GM9+Vka? zj#-ydr;OPqmP{3FIpFD1SE}*UC7_L$n{~^lfip5DCoQzOP3y|seGIKNa>-es<(-W- zsQzVNnmXlyTv|9CQKEcAY6jZPz8zcU%#g-H*SBola=d(IX^xk2d11MS6j3L0+vamW80&rC$<~ku-j{Aw7(| z9Vo5FTv#WUy8J6$Y{8i9mjOv4FDY@!VQyK5^h)IS0c&L`e(R(LDefvGuDm|{#!xE- zsVQI#deSn4+SEA!Jqhr(LQ*$=nKvvw_}v9M-?k2y<0eQ-KteY(Z-D-5A!Uoz`f#!U zkx&fYA<3czeZZ94ihkD)j_L@;cd(4!h(jAAK=ILIF=!?K4EZOmgt7}Y2TP)$2HY0X zC%%S~Kz=@l<9e5VY4WsOE+2SWB8bEM7Wh_DbFrm4pVzj<=Jaius17}tg-_D(Ne(R= zpEs&)=BdEJY+%kEg{aprgYZ3lI@QZBkc*Mym!=_`UUp=f9MZDLL%D2a6zd0VW(1Ne z<;u*UUsLGMgxsS2=U~=ei=O4<+f;%Y)8&UczYulfh&2_Vy;|aoJlhOc1}$JjE6pTNQ@|KBaMV!pc>!Fj5Z{} z$JzcO?D9?9wqty=_S}H)*qZIA!IFyuCA4R|D~Y>Q6HAPT5|>-)3C}9VqIt4TYxX0c z3_2FbanB;|yBy4LwrtvSi<^I0AfMLc(Elm?#@+JE1LYj$S+pt>+l02ZLalUmd z2{A-r5-%f!QR|PNI(aA0dvj5@QQq<_VU)8SBWQOFwJCdXpw0AUkW0n$k^mPyyVLb7 zTh`;os`6k{fR7&D?!~XsxHQ018sbs zkH_FYj&`>HGXahYa15hugW%!3kkTVyMPN)-x-}U&^p)xhH3RrF1wE|B<5gH^RV?^% z%~_-cV?^Z?!Uo#1DqsuyVyBzm8pvlI2RZaTcLM#;hY0PQ4t_`GsiZ2=w)!mCCjTugo7~#@ZKkEq{!ay7sUxcQl;G zhY?APGi5=eJeFs{Oyn%Ze92uW+s@g25dSgylE{f-k7P=f4eFdg?kH9dwO{2Ld9gbS zt6h!1Ln!ff6IEJ=Z!b?P4*W!mcfiY>y-c)4v7`N|wzdfEPeZ_i_q>_{LDz^ z9Kd;*VGb^`!{)Q zo`iBnc+mSw%Q~zXsx|B%-+~zI=IX+giZR-b)sT7^UEx-5@YaX?*xKmTQ@z7A(Cp-* z(&5$Q+WmqXdw#54uQmFy_9N(5W7T-d^wu@tRrXDW%{_=OwTt3jKkQqsiBajo8Ah#> z9C7N2;?!gOXXjpvxlwt^&b`j{3~SoCTfEt7N}kW{nEtGo=p>)o@kHeYZ@**9yun+O zgSloc4d$A8e2N>LX2xX%-hh}^(L4oX%il$^#Oxu1vdnHbn0ve4s|9n-et~^7aUYmo z+bTEdUMoW6o81JXxez|xsryH*q>MVX%jVrjc*n)s_71x+bV^{W9ZQF@pb+PTHmzkU z+Qc=3>zCRShWA-KmtLV;uHr@gMsTyq+9T*kbGo%9uwKJB^`;@8J2LKsI)RL9o^feO zAH+v6uSdKSqpg)`YW_!fi%%KsX3jEiOcfxOm~Zd+BIsvR!$JAa;O8>jl5=0m6}$^= zSntZQ_bS|jhq*dkE_=T+ioPs^1g?IRLu*!8JvE9stPCf0o={BrRe|!UxSjN-1-cYJ1f}2fqIv|f-Qh`&Z+E<24 zF7PymOXgrr^fhwVQGmW}fj@Y^!##m{BDgm&{T!Aue#ym%5nujv@9bgAt&)2KJjUna z^USv95&CMLH&fBF*`Um5;=Yp{^8>a|?Dum_lTpw1cA@qzi)|j;@8j{;`#l4<^@9*%R~Gpb!wpF4L9 zA|`t=*KlRZBE0~&K}}d;F9jdZ8^OELZj>f4))u4Gza{O)UWK!jkJUKKEW%rjJeDLN zf5aW*@<*|O_ddh;kEoU8*eZ{5ho){Za%d~} z&&t|6)m*P(yfVR;kIadn!D{jZ)v_w-;W z)%SK@Gm30_=KnLTVlJp-&8O5cmQ1ei6Sae*Zldx}+wMQK{7-A&nb!Y9x98K!pB?JY zGnIFy{9*r{dxrYQirGCO8DSk~YUAnnjSXec%jcB-k8>1vDf6&5oQD0?B&4Px&p!!~ z+kfWhYFb){>m)g?Sh}Dc+EE!a|2?&_Du9`#(d?V1^IDc&L?A)DxK!b zgx}|5^`<$^OvI(+nfr9^P{Mb}etWa%;kWdj^K_g_uDLl6->oy6)MyWvsCwp(XX5*I zbB{fiE%wc~c=uVS<5b$s?R5SPwz^4VwC9(py5_Dpe4ES`tNXWbiD|Ja4c~DFZ5(1LW(e}iY^MkSn&{y_YTaU1DHYDFpnf~(;)8cNqCF|qiv$`ChlBp ze`nyCX#AOctT})(I9ICsAu|V`>0D3A`Ez4kA?4CdlJQk~6Z6mB!AOlqJym)eD6S2CW9OLb2+i)5;2q%Ril>B*#a zNHtkhPXADE+NKBkhf+4(n~4twGKNQbhL8o3z7XW)ZW#{d#WV4tK4vLBFiv8zM14&x z+ut`7&y8eKfnYlgaiMO%`Uar>HvOa_P-fQD^O06N041=YS)>v{&iy3)$9U&`>O4)W zI|7jf_*9_oSy6z;$h#bA<{Q2m@Ex)?T!ya(JSg%W@_o+~BG>d?3(_{Fj(Qt;<{=-S z8}SC@trclT9_{1q%E;rYXxn!Z^7a^`P-c>8q-}ZoA&+)Z9^Gx^-Gj6(Z`UOvyNyvO zGxF|4+LrgIC67C6Bkz%rypPb~>`U_)c@HDQmiM?Nk7o!Y?{AT|?OU)=WSiI^k?22;-s_tjCv*biJ-hwzug&bo34M3qU!6S)h97uL z5&3JRXLt^Y$m5`I^*T5rPlB$o%D(~n35z}i`V)))FlhfNlw&@DR0L;C$oB#xBL5O7 zFLD2JgEpwATz-MXs3Fmw_mRHFqCY~KbEkUBak{pjaw&qX_j+07G6gih$f&2>ZTo|U zg#7bSzRaTMf_}!LF9l5>s;69PLHkccmVn08sGo>@CPc3S-E4~CkE=uUM)F(!*$mqD z_YI)!{)vNr-12`PXuCfKLEG}OtZ&J`1@tPsE)|@LHo;AM1BO?@4txrGicl2 zKLK6oDU8U!gRZvdpMqX)(Qkonw&-_2w_5bCL37SgPeeWj-D61DA3 zp9cCdi=GAgphaH*`U#7!0{ugaz8v%`7F`GWghej}{h>uSgSN->8qf`}Sv?Wi0D7H8 zZw5VJ(cPeLwde%sy%v2FXn&o-*G15OVU_O!ZO7~FppRJPcY}W2qQ4B9J~#I52TdOv z`Vr7m@f!Ld(hDv6>qxJ&=tD@;M#KMIq%#(M6lr_>JO}y?tNcZzziQDxLHbdPehq1R zy!|KWZ(8MVBmIU&{|f1kEc!#F?eY0r(B;;6j3PbDq9-G5k6-fESmoy;-C)s`NUyc% zOOWoi=xU^gExHluoJBA9()8e2(iWhLq|2hu#`+fnZB`x9Y0w=-%KM~8L3dj8!=N`= z^g+<(IU6hL-&r*OrNmLtW_*)=(JH6jABX7UpqsTo^8a_J{C`69$q@a!5Is3+tW)ir z8KN%?(U*qk`Vid~qBn%-Eg?DLjz zI*`e1$JMKlhveFoU9r}#4wGtMsZ*;qwzjR=yt1=Z(;e;PSyf+ye;ABJtYam9m}u!> zqIy04jmUcZ8tw*|k~&{t*c&e4``OE1(uo zR0NXi z3X!SmyXrtG30hgLl2NOK)G8@;N=lu!K^ak}q|_-h>Xei^Wk{WpQm3TUDJk_zO1+X& zubZNz)GI0VN=m(wQm>@cD=GC#N`sQpprkY?DGk~qN=k#0(x9X?C@Bp}N`sQpsH8M1 zDUC`>qmt679jl}?Dk+UhN+YGXmlPD>-)Ync21z=T?8jXL{`@kT8py?C>128^mCNAI zmlNrcp>ujS1;mdGE^{^*^wSMHH<43GzYC1Oy|-Wd>)TsddT*27KkPLceqTwgXtt>?%bBbw1K~K zPGnNBv=tXa9r48W6#f=2HIzsvQ<*NhdGH`~>q+{|$}r5W)YR#*@Gj9ykgiw*qzni~kgU0+!qc`!wC4u}Nbq zko+A$^6e&#%ZkIq{kVH0{+Y;0AmvqJk5=(jb;rl}-wK+zjR-#vXxt5?pZ99|K8^b{ z?$`JvkbH+UeOTi&8jomv1xUW*nm(cN4dUHuUT`kJ&J^+PU}IQLybxzXVx`D~h$H7B zk@@I1XD;qr(H`ewk=KY-INL&wGY|eN0nW$Sg^0Vo6}Yf+7Kl7cycFY!cp2_i&r-Nx zG7uLHPifpzs`5*wsQfuZ)N3F@&N?FGK1PK8!$jzPfe5{`rUGH#LL%&KA;P}J_#*&k zA?zVuAu>d)7TG~u1pg6ha3?{m#ked3;tuXnV!g;*9KM|fk;{mUB2N+*qaJYy{80{s zJuO7&>n1iqJ`tB~2Z^`?NlIKZ7$85poU@5f9%ZLf)%H#MkRY z$o+_jcq*6yg!~F3;&(m~dYXxd_jN?*OA-<9LqzD^ON8EoMCj%Dnf-kkaRu&bh*zmI zpwldJJ?WL|4Cu6|v!1g`BlHtv&`;b7{lqx*6MLYan1Fs_ z68ecL=qL6#G9a>xE=b51JF+#gnr@>^b^z2PaKAR;?2-cti{~` zF(dLFVitED#2n&`I3n_M;tt$t5OG;sR0Q0GekUS+YXo=;)-xi;30&;baFshwpwgvL T#T_RvYWh_o#z86Z)_nXwLHt2S literal 11184 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 diff --git a/build/XC16_dsPIC33FJ128MC802/production/main.o.d b/build/XC16_dsPIC33FJ128MC802/production/main.o.d deleted file mode 100644 index 953b225..0000000 --- a/build/XC16_dsPIC33FJ128MC802/production/main.o.d +++ /dev/null @@ -1,7 +0,0 @@ -build/XC16_dsPIC33FJ128MC802/production/main.o: \ -main.c \ -system.h \ -packet.h \ - user.h \ -motors_PID.h \ -high_level_control.h diff --git a/build/XC16_dsPIC33FJ128MC802/production/motors_PID.o b/build/XC16_dsPIC33FJ128MC802/production/motors_PID.o index e34f8a11062e4c6f50f58a990db58f26152a0555..ecee80e093ad3a930ac92811d8b098b843a81ceb 100644 GIT binary patch literal 35992 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 Z@Ax`l2l+d`RoG>}$0x^8AL$S9zW_rty9WRO literal 30864 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 diff --git a/build/XC16_dsPIC33FJ128MC802/production/motors_PID.o.d b/build/XC16_dsPIC33FJ128MC802/production/motors_PID.o.d index 1046d35..a3d3852 100644 --- a/build/XC16_dsPIC33FJ128MC802/production/motors_PID.o.d +++ b/build/XC16_dsPIC33FJ128MC802/production/motors_PID.o.d @@ -1,6 +1,7 @@ -build/XC16_dsPIC33FJ128MC802/production/motors_PID.o: \ -motors_PID.c \ - motors_PID.h \ -system.h \ -packet.h \ -user.h +build/XC16_dsPIC33FJ128MC802/production/motors_PID.o: \ +motors_PID.c \ + motors_PID.h \ +system.h \ +packet.h \ +motion.h \ +user.h diff --git a/build/XC16_dsPIC33FJ128MC802/production/parsing_packet.o b/build/XC16_dsPIC33FJ128MC802/production/parsing_packet.o index b94bb2e046b46c6a4aadf942536213f1faf0cf75..9380ab334e065a34ec34241839bed739d06b1951 100644 GIT binary patch literal 25500 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 diff --git a/build/XC16_dsPIC33FJ128MC802/production/parsing_packet.o.d b/build/XC16_dsPIC33FJ128MC802/production/parsing_packet.o.d index b757c61..570e662 100644 --- a/build/XC16_dsPIC33FJ128MC802/production/parsing_packet.o.d +++ b/build/XC16_dsPIC33FJ128MC802/production/parsing_packet.o.d @@ -1,8 +1,9 @@ -build/XC16_dsPIC33FJ128MC802/production/parsing_packet.o: \ - parsing_packet.c \ -parsing_packet.h \ -packet.h \ -serial.h \ -motors_PID.h \ -user.h \ - system.h +build/XC16_dsPIC33FJ128MC802/production/parsing_packet.o: \ + parsing_packet.c \ +parsing_packet.h \ +packet.h \ +motion.h \ +decode_packet.h \ + serial.h \ +user.h \ +system.h diff --git a/build/XC16_dsPIC33FJ128MC802/production/serial.o b/build/XC16_dsPIC33FJ128MC802/production/serial.o index 22bcf63c9f0d8c9540a33aef6c5e7fc990969f7a..25ba0ec29ced2767a297f3d6fef491c8f3bb241c 100644 GIT binary patch literal 15712 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

Q$ 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 LjBu1#alZUNd&1Dq diff --git a/build/XC16_dsPIC33FJ128MC802/production/serial.o.d b/build/XC16_dsPIC33FJ128MC802/production/serial.o.d deleted file mode 100644 index 4c3ee25..0000000 --- a/build/XC16_dsPIC33FJ128MC802/production/serial.o.d +++ /dev/null @@ -1,4 +0,0 @@ -build/XC16_dsPIC33FJ128MC802/production/serial.o: \ -serial.c \ -serial.h \ - packet.h diff --git a/build/XC16_dsPIC33FJ128MC802/production/system.o b/build/XC16_dsPIC33FJ128MC802/production/system.o index 840af9343ccc2986fc3e0d3309fb7be84e38af83..44daa78b94a98d09c399cbaf57433b4b9eb2e47f 100644 GIT binary patch literal 63828 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 literal 58724 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%0DPl^ z&_4wnSNN;I8x=kSyjkII0PFEQ3(PgZhM0U8n16e5_y@pxe18hO!)2rXUjpw`_}9RC zyk7_2tMbnS-=XlEz-I3(UVb z*btM|zSk3A@NJV&VPts0e1dD{Ci+G z{=|O+Zd2vo19s!b{CezJZhVL(v!_2(nk)`ZPWNZWhDwt|qhrP1(&U4Mp-TT$PwG(9 z;r>b~Uo1Bb;keq;(s>|}Y|XZ}HYWjx%e`IgNJDggDmReH^}1L#6~x*PW;*uWle#+- z;NC1b?Jdpt8!93Ly(!$Jsaqe;n}K=krY*RLCGc#{f#T>mQZSb_N-(x`!WK{1@(C-DunGw)k+2#GE0VA( zN!x^E&<3lLv?@uflC&yGtCF-TNvo2yDlJx}g({R_LDESw?KI6Ztul=^#{S4LetlTEd|cxt@jiw+>olS0Z2HDE0Ws5LW%k^IznrE8*6D3zv)I7o4yiQ*u5 zkrtEmUD}V~hBYwyaqKI2L5bo8tC1F)Mi1=`B8O&!~euVf_ zXm@~55#z<-nE*da{ArPI(n1VPmFWGpe)=;W#b8Jpe=Y`?`t;}10j3`P`NaUgOuIqk zwE+K)7XExO!0*y-!8p(#P~U1=_;YiBTWR6Xy#YQ<3x6&Kc$yaeyqr1@TyFmdVEj_a literal 9108 zcmeHNZH!!18Gfg;+wQRCs}!lQ%CFx%yQb1<2;T#~ro0ybObYS;kmTDaZUSYdh3!9c4@Te3Z%kqDd zchF~sHslw;8j>s+yG{Pz1k8Vg zm@8Y%JZc@49g2A}#O!P_2QXe)v@_5=6=I&Jn8R`aGaE4f8Db_{%mR8n8c}^c#O-Kt zIgSUw9yC4wSBSNu#UdxyV!aV!Ef2BSZ>#lYh}GU=*&1`IA8&=2Z4qWxF;9n>@fOpz zFBqABhj{c1JJaN8y|+WWSc|s@zB7us9`-%!KOx>lK2M~50dIUqzN@@#dBm%^(u-IZ z)^FS4@mwcFZBXS(tisp3ReDD#eJ(}}`_kF#N7vMb6&92{n;W#EBg8zHGRv{1#^6m2 z>eiJOER)4(G#4G4`Z;JUG(zDM+K#XuTee}oak~E; z>YjVF9z2JVbC21H1xpUV3wSckn6Vo+>x1W(hm<;cLZ5hS9)%UQ^SCdQcjdSK=^O*Q zqjf^e&k;H4>+(FO_c5^aoAQQvMqr$OHpFlSX3?fPTFR50es9k|p0P(vnm*lAI9Dfd zc5Ol~&v`x*q!Awnv#M+oIVoJcH%zbVW;L9B<_>`|Z5k6j?`;d~=42j{ov0^+XQez& zoIac-8ECVd>j`%>{S0IKsM8LCt?{LcU^{N%GE<9`iE7TJaqkjne0&Ks?pp$l<4d4% zVhJ=JUIL9rmq6q3CD3?k5e?^4Z;Nz)6Wq~i+g1FSia(*^-70=a#kZ^YF%^G8 z#Z8?Tpuh&21&L1sAEcdGyA|F7fI<`3sfzSXdXAc$4>^vuVLhJkO`PRi z<0>Q@_Z?{#$0gZlde%<6*krL;l;n5=@9&eP@tMP8#qn{kbX1aFsp6-Ut5Y?NE9Gj* z;&Q`FHcPWjojc_fkNDYEus$(C)ioA*PHzBlt@q<@kweI& z9?LsDeo0{&H-4{R13U)of*Ze4Bxt>>*NHrdH0m+k=}jT7+c%95ZV$Oe`8*grqlWc< z4!x(5M!im4PVW{=kk;3^3!l^SsoP3T(5aMQq zYOH6Fd_D8T^zb0WjfZMX4+}yZUzT;?H*Ou`vRb~T6VSfzg>X!M7{NaY;T7`h5KhR8 zz-~|Atp72B{{kHNTLNE9!}t{NDqJ=sxB6YK;s0Qw$xHnvmWI-U7TymA@r|2Z3)^`MV-`AMkdSe>-pxE-`y?fD z{J;wnQUMOUEFm7So{w2z?r%0Eg|UIch>PX3eyo4*z~HU>v-<{oJd!7;zqbd!o+2_flEqDuyY-`c4=^9f zX-h6*34C&A@=(s)2W=c52zL(+ntKi(><~BiT(60ndk#M?BHi3`_>mEDbI)xuadXdY zHgR*$^_jT2=eC%*x#!ZhVq>y}A)-Rw-r0aco>dp}thA74b%i`DD&$#3Ay4r_p0b5J z1q*qj1Y=95ZSk}%pSA*NtB|%5X{(X8B5A9Vu}#SMZLlgCtCF!Q8LN`9DjBPiu__s> z(rZiQ@%q6D>Ba zY1$8n)M>G(AE&)iZQ%0UfO<3P7Xm3Tmv^!8Q_Q?1!_FYZRRpq^Pg+H&P&fRC*{{ka$X4(J% diff --git a/build/XC16_dsPIC33FJ128MC802/production/user.o b/build/XC16_dsPIC33FJ128MC802/production/user.o index 8de5b0c6be055d90a7a28d6ff21bd5db29c8f61b..f12b9a3ccf4c04493403aa53f7bf733d3c2897e6 100644 GIT binary patch literal 15096 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 literal 15132 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 Uz`XF|z%AB5{N%e}J(lo)0i-WkxBvhE diff --git a/build/XC16_dsPIC33FJ128MC804/production/configuration_bits.o.d b/build/XC16_dsPIC33FJ128MC804/production/configuration_bits.o.d deleted file mode 100644 index 874f320..0000000 --- a/build/XC16_dsPIC33FJ128MC804/production/configuration_bits.o.d +++ /dev/null @@ -1,2 +0,0 @@ -build/XC16_dsPIC33FJ128MC804/production/configuration_bits.o: \ - configuration_bits.c diff --git a/build/XC16_dsPIC33FJ128MC804/production/interrupts.o b/build/XC16_dsPIC33FJ128MC804/production/interrupts.o deleted file mode 100644 index 138149d3090e660950e216b1f32679dae1501762..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19328 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 B<&6LU diff --git a/build/XC16_dsPIC33FJ128MC804/production/parsing_packet.o.d b/build/XC16_dsPIC33FJ128MC804/production/parsing_packet.o.d deleted file mode 100644 index 9a4971c..0000000 --- a/build/XC16_dsPIC33FJ128MC804/production/parsing_packet.o.d +++ /dev/null @@ -1,7 +0,0 @@ -build/XC16_dsPIC33FJ128MC804/production/parsing_packet.o: \ - parsing_packet.c \ -parsing_packet.h \ -packet.h \ -serial.h \ -motors_PID.h \ -user.h diff --git a/build/XC16_dsPIC33FJ128MC804/production/serial.o b/build/XC16_dsPIC33FJ128MC804/production/serial.o deleted file mode 100644 index 43d55e05ea241ed15c297f5a2f16d07b8bf7357e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12604 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 diff --git a/build/XC16_dsPIC33FJ128MC804/production/serial.o.d b/build/XC16_dsPIC33FJ128MC804/production/serial.o.d deleted file mode 100644 index 1ecc408..0000000 --- a/build/XC16_dsPIC33FJ128MC804/production/serial.o.d +++ /dev/null @@ -1,4 +0,0 @@ -build/XC16_dsPIC33FJ128MC804/production/serial.o: \ -serial.c \ -serial.h \ - packet.h diff --git a/build/XC16_dsPIC33FJ128MC804/production/system.o b/build/XC16_dsPIC33FJ128MC804/production/system.o deleted file mode 100644 index f917de144371624618324bbcdfb1ae675d3cfa4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47840 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 diff --git a/build/XC16_dsPIC33FJ128MC804/production/system.o.d b/build/XC16_dsPIC33FJ128MC804/production/system.o.d deleted file mode 100644 index 52c547c..0000000 --- a/build/XC16_dsPIC33FJ128MC804/production/system.o.d +++ /dev/null @@ -1,5 +0,0 @@ -build/XC16_dsPIC33FJ128MC804/production/system.o: \ -system.c \ -system.h \ - packet.h \ -serial.h diff --git a/build/XC16_dsPIC33FJ128MC804/production/traps.o b/build/XC16_dsPIC33FJ128MC804/production/traps.o deleted file mode 100644 index ecd74f0eefb87dc6ab2be855ad661f73d3d03fe9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9084 zcmeHNYjB)Z8Gg5$v{_Q1l%fa`(gG!D-OX;G4Hrvyvk47!)7VW*K_J~En`Y^0U%oH-@bIpYSS%*a#pJNGkx1WqkvJkQHH1DnTh2oI8F(&|E;&=W zB@TNo9>%T5vrbkU?kc$uwj00g0gKUbGHS}`Mtrxd z#WN_U7-pxuZ2=~eR!b88)nKz`u7rz$T@7~x8f#3e;&NJx#nPDbDm-*uav6NaTK8LM z(yg-4_#LSIH8Li9rB{aVT#E89!;?n1Pxd1&En8&^P(dm(EuPfj&mr7E++n0n;z`RT zhMzSyC-X?J$_(OWq$IwSQO91CQb&$nu(!d_NIyau)FK9k2VO&(D0vz&Db%NlTps+C zNt=~fFv?J^LM0`6Q(EQ0or}9w=&v@w+p zlh2zpa$^|JRdRu07NKyR49gz;nD%0bcWR55MQ`N6X*2&GVyP!F`LiyDQ!k4;HBeKY-JJLK{Nt&5n~Brsc?u`#G|sNANae}STRPMw#nSD&1Sb zkL!@Pkd1gpI$b^_34~5ZoPEzAGwkd;)c@1}*Z%1Uy7Sq<>b>vx!Kv|qU`Jf;Zu4M^ zxA+ z`@rpA_PbF#n_GwH20Z&c#eH8ok+%_1U3iw`Z3d@(@3VT?^;^!3%V30;M8c0$M#p2l z6Rq4LPn|FFJTSjHb>iXNV7+$YQQ74fB42QoMViygBdqnl(JOKQiPU3$r^oLo%;Wm+ z8Ek-e0XygVZvqioZ|x?LuONV z2f|wK`O`$6P-agV%KS7xnm!&*^;%VXgNN4$fN<=bY2~I3l!ORq62@b$VYy zSnGA2A-D~%KAFa#7q!(~?eiW19?FdieVS9PUU>mgF13e-c72)(i3ppL%A;;euLTWqi_*?v5 zrt!@Yd@zD_LpA0MYr8nUBx}cS+S`Tt_VI2_(GMwA%f2VewRw` zjo{6|?RA=vEfJgn-m3BsM(}pvt5kYEg0BPKq0;vNx80d?LkK5i61Y7J6H*4|nzJq; zhk*5X+z!nB&86P~e2RnUuMYz2@wpoqTW8=B@=0K>XX_I3X<$8Gp9S9FlA-qnVD6>X zCFIM%di=fye2z;7|J%UW8UmM)$AI;CJ_+3GlEME8@Fs+~wZM8loC!SWl2QM2fUi(^Be0$yeZbpQ zdJ0&N?*OnKziq&Je69r6{eLyE?%zD{CZ#_LtovsSShv3jtlPIASl9n%U|ruS;I`|Q zLm}KLM-^U={NYLfx;_YeV&#@71fx{VCroHJZt3++qg?My^d~1`9)j{TaZS=J@Ck;t<@KEl%c( z<1SRl2BD$d`QdB!X7}U+JYFDYXrLc|CPiR!JPS{fyY!vCADFjs+Oi8+0K^(pDmEHPTijZB;V13Ynk|RwZLqGFByHRWep3V^uO%C1X_vtjYjYD8Y=RlVs{? zs%L6tDr4$kiq4R3UYRIi2aE4p{TSrk&FMs|No>%9KQqeC>A9A2j^5Sb3(#-+_IG7KcGEUR>gM@#>?+W_2U&J8}1?#bUmX7VkL^ z(DsV_n06!HeP}m{yheKg3clCMN7|qG5<3_d=v2vg1>y&^5=+e6#Ui2V$SWJ_hWw1f{dz494{m+hx3_w z#E>-enfZv1&|*H{7vKkIH`@1Frawk}fyl3d^k-->pN|FjHQI~O4>4Hq&!)wE?hi2U apq$U+0p3rG`P>Nb5n9aWwbZ%gMEhU0Xkjn_ diff --git a/build/XC16_dsPIC33FJ128MC804/production/traps.o.d b/build/XC16_dsPIC33FJ128MC804/production/traps.o.d deleted file mode 100644 index bdc7c31..0000000 --- a/build/XC16_dsPIC33FJ128MC804/production/traps.o.d +++ /dev/null @@ -1,2 +0,0 @@ -build/XC16_dsPIC33FJ128MC804/production/traps.o: \ -traps.c diff --git a/build/XC16_dsPIC33FJ128MC804/production/user.o b/build/XC16_dsPIC33FJ128MC804/production/user.o deleted file mode 100644 index a9fe1c550efda20c1da3141fe040291b46dbd713..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12264 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 d@ -8: #elif defined(__C30__) -9: #if defined(__dsPIC33E__) -10: #include -11: #elif defined(__dsPIC33F__) -12: #include -13: #endif -14: #endif -15: -16: #include /* For uint16_t definition */ -17: #include /* For true/false definition */ -18: #include /* For DSP functionality */ -19: #include -20: #include -21: #include "user.h" /* variables/params used by user.c */ -22: #include "system.h" -23: -24: /******************************************************************************/ -25: /* Global Variable Declaration */ -26: /******************************************************************************/ -27: -28: /******************************************************************************/ -29: /* User Functions */ -30: /******************************************************************************/ -31: -32: /* */ -33: -34: void InitApp(void) { -002036 FA0000 LNK #0x0 -35: // Unlock Registers ***************************************** -36: asm volatile ( "mov #OSCCONL, w1 \n" -002038 207421 MOV #0x742, W1 -00203A 200452 MOV #0x45, W2 -00203C 200573 MOV #0x57, W3 -00203E 784882 MOV.B W2, [W1] -002040 784883 MOV.B W3, [W1] -002042 A9C742 BCLR OSCCON, #6 -37: "mov #0x45, w2 \n" -38: "mov #0x57, w3 \n" -39: "mov.b w2, [w1] \n" -40: "mov.b w3, [w1] \n" -41: "bclr OSCCON, #6 "); -42: //**********************************************************// -43: // Configure Input Functions -44: //Encoder -45: RPINR7bits.IC1R = 5; // Assign Input Capture 1 To Pin RP5 -002044 803471 MOV RPINR7, W1 -002046 2FFE00 MOV #0xFFE0, W0 -002048 608000 AND W1, W0, W0 -00204A B30050 IOR #0x5, W0 -00204C 883470 MOV W0, RPINR7 -46: RPINR7bits.IC2R = 10; // Assign Input Capture 2 To Pin RP10 -00204E 803471 MOV RPINR7, W1 -002050 2E0FF0 MOV #0xE0FF, W0 -002052 608080 AND W1, W0, W1 -002054 20A000 MOV #0xA00, W0 -002056 708000 IOR W1, W0, W0 -002058 883470 MOV W0, RPINR7 -47: RPINR14bits.QEA1R = 5; // Assign QEA1 To Pin RP5 -00205A 8034E1 MOV RPINR14, W1 -00205C 2FFE00 MOV #0xFFE0, W0 -00205E 608000 AND W1, W0, W0 -002060 B30050 IOR #0x5, W0 -002062 8834E0 MOV W0, RPINR14 -48: RPINR14bits.QEB1R = 6; // Assign QEB1 To Pin RP6 -002064 8034E1 MOV RPINR14, W1 -002066 2E0FF0 MOV #0xE0FF, W0 -002068 608080 AND W1, W0, W1 -00206A 206000 MOV #0x600, W0 -00206C 708000 IOR W1, W0, W0 -00206E 8834E0 MOV W0, RPINR14 -49: RPINR16bits.QEA2R = 11; // Assign QEA2 To Pin RP11 -002070 803501 MOV RPINR16, W1 -002072 2FFE00 MOV #0xFFE0, W0 -002074 608000 AND W1, W0, W0 -002076 B300B0 IOR #0xB, W0 -002078 883500 MOV W0, RPINR16 -50: RPINR16bits.QEB2R = 10; // Assign QEB2 To Pin RP10 -00207A 803501 MOV RPINR16, W1 -00207C 2E0FF0 MOV #0xE0FF, W0 -00207E 608080 AND W1, W0, W1 -002080 20A000 MOV #0xA00, W0 -002082 708000 IOR W1, W0, W0 -002084 883500 MOV W0, RPINR16 -51: //UART RX -52: RPINR18bits.U1RXR = 8; // Assign U1RX To Pin RP8 -002086 803521 MOV RPINR18, W1 -002088 2FFE00 MOV #0xFFE0, W0 -00208A 608000 AND W1, W0, W0 -00208C A03000 BSET W0, #3 -00208E 883520 MOV W0, RPINR18 -53: -54: // Configure Output Functions -55: //UART TX -56: RPOR4bits.RP9R = 3; // Assign U1Tx To Pin RP9 -002090 803641 MOV RPOR4, W1 -002092 2E0FF0 MOV #0xE0FF, W0 -002094 608080 AND W1, W0, W1 -002096 203000 MOV #0x300, W0 -002098 708000 IOR W1, W0, W0 -00209A 883640 MOV W0, RPOR4 -57: -58: //************************************************************ -59: // Lock Registers ******************************************** -60: asm volatile ( "mov #OSCCONL, w1 \n" -00209C 207421 MOV #0x742, W1 -00209E 200452 MOV #0x45, W2 -0020A0 200573 MOV #0x57, W3 -0020A2 784882 MOV.B W2, [W1] -0020A4 784883 MOV.B W3, [W1] -0020A6 A8C742 BSET OSCCON, #6 -61: "mov #0x45, w2 \n" -62: "mov #0x57, w3 \n" -63: "mov.b w2, [w1] \n" -64: "mov.b w3, [w1] \n" -65: "bset OSCCON, #6"); -66: //**********************************************************// -67: -68: /* Setup analog functionality and port direction */ -69: _TRISA4 = 0; //Led -0020A8 A982C0 BCLR TRISA, #4 -70: _TRISB2 = 0; //Enable - Motor 1 -0020AA A942C8 BCLR TRISB, #2 -71: _TRISB3 = 0; //Enable - Motor 2 -0020AC A962C8 BCLR TRISB, #3 -72: _TRISB5 = 1; -0020AE A8A2C8 BSET TRISB, #5 -73: _TRISB6 = 1; -0020B0 A8C2C8 BSET TRISB, #6 -74: _TRISB10 = 1; -0020B2 A842C9 BSET 0x2C9, #2 -75: _TRISB11 = 1; -0020B4 A862C9 BSET 0x2C9, #3 -76: // TODO Add analog funcionality for ADC -77: -78: /* Initialize peripherals */ -79: LED = 0; -0020B6 A982C4 BCLR LATA, #4 -80: InitPWM(); //Open PWM -0020B8 07FCA5 RCALL InitPWM -81: InitQEI1(); //Open QEI1 -0020BA 07FCC7 RCALL InitQEI1 -82: InitQEI2(); //Open QEI2 -0020BC 07FCDC RCALL InitQEI2 -83: InitIC1(); //Open Input Capture 1 -0020BE 07FCF1 RCALL InitIC1 -84: InitIC2(); //Open Input Capture 2 -0020C0 07FD09 RCALL InitIC2 -85: InitTimer2(); //Open Timer2 for InputCapture 1 & 2 -0020C2 07FD3A RCALL InitTimer2 -86: InitADC(); //Open ADC for measure current motors -0020C4 07FDC6 RCALL InitADC -87: InitDMA0(); //Open DMA0 for buffering measures ADC -0020C6 07FD87 RCALL InitDMA0 -88: -89: InitUART1(); //Open UART1 for serial comunication -0020C8 07FD68 RCALL InitUART1 -90: InitDMA1(); //Open DMA1 for Tx UART1 -0020CA 07FDA2 RCALL InitDMA1 -91: -92: InitTimer1(); //Open Timer1 for clock system -0020CC 07FD1C RCALL InitTimer1 -93: InitInterrupts(); //Start others interrupts -0020CE 07FD4A RCALL InitInterrupts -94: } -0020D0 FA8000 ULNK -0020D2 060000 RETURN -95: -96: /* Protected Memcpy */ -97: void inline protectedMemcpy(unsigned reg, void *destination, const void *source, size_t num) { -0020D4 FA0008 LNK #0x8 -0020D6 780F00 MOV W0, [W14] -0020D8 980711 MOV W1, [W14+2] -0020DA 980722 MOV W2, [W14+4] -0020DC 980733 MOV W3, [W14+6] -98: if (1 == reg) { -0020DE 78001E MOV [W14], W0 -0020E0 500FE1 SUB W0, #0x1, [W15] -0020E2 3A0009 BRA NZ, 0x20F6 -99: reg = 0; -0020E4 EB0000 CLR W0 -0020E6 780F00 MOV W0, [W14] -100: memcpy(destination, source, num); -0020E8 90013E MOV [W14+6], W2 -0020EA 9000AE MOV [W14+4], W1 -0020EC 90001E MOV [W14+2], W0 -0020EE 07F51B RCALL _memcpy -101: reg = 1; -0020F0 200010 MOV #0x1, W0 -0020F2 780F00 MOV W0, [W14] -0020F4 370004 BRA 0x20FE -102: } else { -103: memcpy(destination, source, num); -0020F6 90013E MOV [W14+6], W2 -0020F8 9000AE MOV [W14+4], W1 -0020FA 90001E MOV [W14+2], W0 -0020FC 07F514 RCALL _memcpy -104: } -105: } -0020FE FA8000 ULNK -002100 060000 RETURN -106: -107: int maxValue(float myArray[], size_t size) { -002102 FA000A LNK #0xA -002104 781F88 MOV W8, [W15++] -002106 980730 MOV W0, [W14+6] -002108 980741 MOV W1, [W14+8] -108: /* enforce the contract */ -109: // assert(myArray && size); -110: size_t i; -111: float maxValue = myArray[0]; -00210A 90003E MOV [W14+6], W0 -00210C BE0110 MOV.D [W0], W2 -00210E 980712 MOV W2, [W14+2] -002110 980723 MOV W3, [W14+4] -112: -113: for (i = 1; i < size; ++i) { -002112 200010 MOV #0x1, W0 -002114 780F00 MOV W0, [W14] -002116 370016 BRA 0x2144 -002142 E80F1E INC [W14], [W14] -002144 90004E MOV [W14+8], W0 -002146 78009E MOV [W14], W1 -002148 508F80 SUB W1, W0, [W15] -00214A 39FFE6 BRA NC, 0x2118 -114: if (myArray[i] > maxValue) { -002118 78001E MOV [W14], W0 -00211A DD0042 SL W0, #2, W0 -00211C 9000BE MOV [W14+6], W1 -00211E 408000 ADD W1, W0, W0 -002120 BE0010 MOV.D [W0], W0 -002122 B3C018 MOV #0x1, W8 -002124 90011E MOV [W14+2], W2 -002126 9001AE MOV [W14+4], W3 -002128 07F329 RCALL ___gtsf2 -00212A 500FE0 SUB W0, #0x0, [W15] -00212C 3C0001 BRA GT, 0x2130 -00212E EB4400 CLR.B W8 -002130 544FE0 SUB.B W8, #0x0, [W15] -002132 320007 BRA Z, 0x2142 -115: maxValue = myArray[i]; -002134 78001E MOV [W14], W0 -002136 DD0042 SL W0, #2, W0 -002138 9000BE MOV [W14+6], W1 -00213A 408000 ADD W1, W0, W0 -00213C BE0110 MOV.D [W0], W2 -00213E 980712 MOV W2, [W14+2] -002140 980723 MOV W3, [W14+4] -116: } -117: } -118: return maxValue; -00214C 90001E MOV [W14+2], W0 -00214E 9000AE MOV [W14+4], W1 -002150 07F317 RCALL ___fixsfsi -002152 780000 MOV W0, W0 -119: } -002154 78044F MOV [--W15], W8 -002156 FA8000 ULNK -002158 060000 RETURN ---- C:/Users/Raffaello/Dropbox/MicrochipProject/dsPIC33MotionControl.X/traps.c ------------------------ -1: /******************************************************************************/ -2: /* Files to Include */ -3: /******************************************************************************/ -4: -5: /* Device header file */ -6: #if defined(__XC16__) -7: #include -8: #elif defined(__C30__) -9: #if defined(__dsPIC33E__) -10: #include -11: #elif defined(__dsPIC33F__) -12: #include -13: #endif -14: #endif -15: -16: #include /* Includes uint16_t definition */ -17: #include /* Includes true/false definition */ -18: -19: /******************************************************************************/ -20: /* Trap Function Prototypes */ -21: /******************************************************************************/ -22: -23: /* */ -24: -25: /* Use if INTCON2 ALTIVT=1 */ -26: void __attribute__((interrupt,no_auto_psv)) _OscillatorFail(void); -27: void __attribute__((interrupt,no_auto_psv)) _AddressError(void); -28: void __attribute__((interrupt,no_auto_psv)) _StackError(void); -29: void __attribute__((interrupt,no_auto_psv)) _MathError(void); -30: -31: #if defined(__HAS_DMA__) -32: -33: void __attribute__((interrupt,no_auto_psv)) _DMACError(void); -34: -35: #endif -36: -37: #if defined(__dsPIC33F__) -38: -39: /* Use if INTCON2 ALTIVT=0 */ -40: void __attribute__((interrupt,no_auto_psv)) _AltOscillatorFail(void); -41: void __attribute__((interrupt,no_auto_psv)) _AltAddressError(void); -42: void __attribute__((interrupt,no_auto_psv)) _AltStackError(void); -43: void __attribute__((interrupt,no_auto_psv)) _AltMathError(void); -44: -45: #if defined(__HAS_DMA__) -46: -47: void __attribute__((interrupt,no_auto_psv)) _AltDMACError(void); -48: -49: #endif -50: -51: #endif -52: -53: /* Default interrupt handler */ -54: void __attribute__((interrupt,no_auto_psv)) _DefaultInterrupt(void); -55: -56: #if defined(__dsPIC33E__) -57: -58: /* These are additional traps in the 33E family. Refer to the PIC33E -59: migration guide. There are no Alternate Vectors in the 33E family. */ -60: void __attribute__((interrupt,no_auto_psv)) _HardTrapError(void); -61: void __attribute__((interrupt,no_auto_psv)) _SoftTrapError(void); -62: -63: #endif -64: -65: /******************************************************************************/ -66: /* Trap Handling */ -67: /* */ -68: /* These trap routines simply ensure that the device continuously loops */ -69: /* within each routine. Users who actually experience one of these traps */ -70: /* can add code to handle the error. Some basic examples for trap code, */ -71: /* including assembly routines that process trap sources, are available at */ -72: /* www.microchip.com/codeexamples */ -73: /******************************************************************************/ -74: -75: /* Primary (non-alternate) address error trap function declarations */ -76: void __attribute__((interrupt,no_auto_psv)) _OscillatorFail(void) -77: { -0004FC FA0000 LNK #0x0 -78: INTCON1bits.OSCFAIL = 0; /* Clear the trap flag */ -0004FE A92080 BCLR INTCON1, #1 -79: while(1); -000500 37FFFF BRA 0x500 -80: } -81: -82: void __attribute__((interrupt,no_auto_psv)) _AddressError(void) -83: { -000502 FA0000 LNK #0x0 -84: INTCON1bits.ADDRERR = 0; /* Clear the trap flag */ -000504 A96080 BCLR INTCON1, #3 -85: while (1); -000506 37FFFF BRA 0x506 -86: } -87: void __attribute__((interrupt,no_auto_psv)) _StackError(void) -88: { -000508 FA0000 LNK #0x0 -89: INTCON1bits.STKERR = 0; /* Clear the trap flag */ -00050A A94080 BCLR INTCON1, #2 -90: while (1); -00050C 37FFFF BRA 0x50C -91: } -92: -93: void __attribute__((interrupt,no_auto_psv)) _MathError(void) -94: { -00050E FA0000 LNK #0x0 -95: INTCON1bits.MATHERR = 0; /* Clear the trap flag */ -000510 A98080 BCLR INTCON1, #4 -96: while (1); -000512 37FFFF BRA 0x512 -97: } -98: -99: #if defined(__HAS_DMA__) -100: -101: void __attribute__((interrupt,no_auto_psv)) _DMACError(void) -102: { -000514 FA0000 LNK #0x0 -103: INTCON1bits.DMACERR = 0; /* Clear the trap flag */ -000516 A9A080 BCLR INTCON1, #5 -104: while (1); -000518 37FFFF BRA 0x518 -105: } -106: -107: #endif -108: -109: #if defined(__dsPIC33F__) -110: -111: /* Alternate address error trap function declarations */ -112: void __attribute__((interrupt,no_auto_psv)) _AltOscillatorFail(void) -113: { -00051A FA0000 LNK #0x0 -114: INTCON1bits.OSCFAIL = 0; /* Clear the trap flag */ -00051C A92080 BCLR INTCON1, #1 -115: while (1); -00051E 37FFFF BRA 0x51E -116: } -117: -118: void __attribute__((interrupt,no_auto_psv)) _AltAddressError(void) -119: { -000520 FA0000 LNK #0x0 -120: INTCON1bits.ADDRERR = 0; /* Clear the trap flag */ -000522 A96080 BCLR INTCON1, #3 -121: while (1); -000524 37FFFF BRA 0x524 -122: } -123: -124: void __attribute__((interrupt,no_auto_psv)) _AltStackError(void) -125: { -000526 FA0000 LNK #0x0 -126: INTCON1bits.STKERR = 0; /* Clear the trap flag */ -000528 A94080 BCLR INTCON1, #2 -127: while (1); -00052A 37FFFF BRA 0x52A -128: } -129: -130: void __attribute__((interrupt,no_auto_psv)) _AltMathError(void) -131: { -00052C FA0000 LNK #0x0 -132: INTCON1bits.MATHERR = 0; /* Clear the trap flag */ -00052E A98080 BCLR INTCON1, #4 -133: while (1); -000530 37FFFF BRA 0x530 -134: } -135: -136: #if defined(__HAS_DMA__) -137: -138: void __attribute__((interrupt,no_auto_psv)) _AltDMACError(void) -139: { -000532 FA0000 LNK #0x0 -140: INTCON1bits.DMACERR = 0; /* Clear the trap flag */ -000534 A9A080 BCLR INTCON1, #5 -141: while (1); -000536 37FFFF BRA 0x536 -142: } -143: -144: #endif -145: -146: #endif -147: -148: /******************************************************************************/ -149: /* Default Interrupt Handler */ -150: /* */ -151: /* This executes when an interrupt occurs for an interrupt source with an */ -152: /* improperly defined or undefined interrupt handling routine. */ -153: /******************************************************************************/ -154: void __attribute__((interrupt,no_auto_psv)) _DefaultInterrupt(void) -155: { -000538 FA0000 LNK #0x0 -156: while(1); -00053A 37FFFF BRA 0x53A -157: } -158: -159: #if defined(__dsPIC33E__) -160: -161: /* These traps are new to the dsPIC33E family. Refer to the device Interrupt -162: chapter of the FRM to understand trap priority. */ -163: void __attribute__((interrupt,no_auto_psv)) _HardTrapError(void) -164: { -165: while(1); -166: } -167: void __attribute__((interrupt,no_auto_psv)) _SoftTrapError(void) -168: { -169: while(1); -170: } -171: -172: #endif ---- C:/Users/Raffaello/Dropbox/MicrochipProject/dsPIC33MotionControl.X/system.c ----------------------- -1: /******************************************************************************/ -2: /* Files to Include */ -3: /******************************************************************************/ -4: -5: /* Device header file */ -6: #if defined(__XC16__) -7: #include -8: #elif defined(__C30__) -9: #if defined(__dsPIC33E__) -10: #include -11: #elif defined(__dsPIC33F__) -12: #include -13: #endif -14: #endif -15: -16: #include /* For uint16_t definition */ -17: #include /* For true/false definition */ -18: #include -19: #include -20: -21: #include "system.h" /* variables/params used by system.c */ -22: #include "packet.h" -23: -24: #include "serial.h" -25: -26: /******************************************************************************/ -27: /* Global Variable Declaration */ -28: /******************************************************************************/ -29: -30: unsigned int reset_count = 0; -31: unsigned char version_date_[] = __DATE__; -32: unsigned char version_time_[] = __TIME__; -33: -34: extern unsigned char BufferTx[MAX_TX_BUFF] __attribute__((space(dma))); -35: -36: // ADC buffer, 2 channels (AN0, AN1), 32 bytes each, 2 x 32 = 64 bytes -37: extern int AdcBuffer[ADC_CHANNELS][ADC_BUFF] __attribute__((space(dma), aligned(256))); -38: -39: // From motors PID -40: extern parameter_t parameter; -41: -42: /******************************************************************************/ -43: /* System Level Functions */ -44: /* */ -45: /* Custom oscillator configuration funtions, reset source evaluation */ -46: /* functions, and other non-peripheral microcontroller initialization */ -47: /* functions get placed in system.c. */ -48: /* */ -49: /******************************************************************************/ -50: -51: /* Refer to the device Family Reference Manual Oscillator section for -52: information about available oscillator configurations. Typically -53: this would involve configuring the oscillator tuning register or clock -54: switching useing the compiler's __builtin_write_OSCCON functions. -55: Refer to the C Compiler for PIC24 MCUs and dsPIC DSCs User Guide in the -56: compiler installation directory /doc folder for documentation on the -57: __builtin functions.*/ -58: -59: void init_process(void) { -001922 FA0000 LNK #0x0 -60: parameter.step_timer = (int) (TMR1_VALUE); -001924 27FFF0 MOV #0x7FFF, W0 -001926 8848D0 MOV W0, 0x91A -61: parameter.int_tm_mill = (int) (TCTMR1 * 1000); -001928 200010 MOV #0x1, W0 -00192A 8848E0 MOV W0, 0x91C -62: } -00192C FA8000 ULNK -00192E 060000 RETURN -63: -64: unsigned char update_priority(void) { -001930 FA0000 LNK #0x0 -65: return NACK; -001932 B3C4E0 MOV #0x4E, W0 -66: } -001934 FA8000 ULNK -001936 060000 RETURN -67: -68: unsigned char update_frequency(void) { -001938 FA0000 LNK #0x0 -69: return NACK; -00193A B3C4E0 MOV #0x4E, W0 -70: } -00193C FA8000 ULNK -00193E 060000 RETURN -71: -72: services_t services(services_t service) { -001940 FA000E LNK #0xE -001942 781F88 MOV W8, [W15++] -001944 780400 MOV W0, W8 -001946 980711 MOV W1, [W14+2] -001948 980722 MOV W2, [W14+4] -00194A 980733 MOV W3, [W14+6] -00194C 980744 MOV W4, [W14+8] -00194E 980755 MOV W5, [W14+10] -001950 980766 MOV W6, [W14+12] -73: switch (service.command) { -001952 90402E MOV.B [W14+2], W0 -001954 FB0000 SE W0, W0 -001956 2002A1 MOV #0x2A, W1 -001958 500F81 SUB W0, W1, [W15] -00195A 320004 BRA Z, 0x1964 -00195C 200761 MOV #0x76, W1 -00195E 500F81 SUB W0, W1, [W15] -001960 320019 BRA Z, 0x1994 -74: case RESET: -75: if (reset_count < 3) { -001964 804C60 MOV 0x98C, W0 -001966 500FE2 SUB W0, #0x2, [W15] -001968 3E0009 BRA GTU, 0x197C -76: reset_count++; -00196A 804C60 MOV 0x98C, W0 -00196C E80000 INC W0, W0 -00196E 884C60 MOV W0, 0x98C -77: //ResetPort = Port; -78: service.buffer[0] = ACK; -001970 B3C4B0 MOV #0x4B, W0 -001972 984730 MOV.B W0, [W14+3] -79: service.buffer[1] = reset_count; -001974 804C60 MOV 0x98C, W0 -001976 784000 MOV.B W0, W0 -001978 984740 MOV.B W0, [W14+4] -80: } else { -81: SET_CPU_IPL(7); // disable all user interrupts -00197C 800290 MOV DISICNT, W0 -00197E 780F00 MOV W0, [W14] -001980 FC3FFF DISI #0x3FFF -001982 800211 MOV SR, W1 -001984 200E00 MOV #0xE0, W0 -001986 708000 IOR W1, W0, W0 -001988 880210 MOV W0, SR -00198A 78001E MOV [W14], W0 -00198C 880290 MOV W0, DISICNT -00198E 880000 MOV W0, WREG0 -82: //DelayN1ms(200); -83: asm("RESET"); -001990 FE0000 RESET -84: } -85: break; -00197A 370012 BRA 0x19A0 -001992 370006 BRA 0x19A0 -86: case VERSION_CODE: -87: memcpy(service.buffer,version_time_,sizeof(version_time_)); -001994 E8800E INC2 W14, W0 -001996 E80000 INC W0, W0 -001998 200092 MOV #0x9, W2 -00199A 2099A1 MOV #0x99A, W1 -00199C 07F8C4 RCALL _memcpy -88: break; -00199E 000000 NOP -89: default: -90: break; -001962 37001E BRA 0x19A0 -91: } -92: return service; -0019A0 78000E MOV W14, W0 -0019A2 B00020 ADD #0x2, W0 -0019A4 09000A REPEAT #0xA -0019A6 785C30 MOV.B [W0++], [W8++] -0019A8 B100B8 SUB #0xB, W8 -93: } -0019AA 780008 MOV W8, W0 -0019AC 78044F MOV [--W15], W8 -0019AE FA8000 ULNK -0019B0 060000 RETURN -94: -95: void ConfigureOscillator(void) { -0019B2 FA0000 LNK #0x0 -96: PLLFBD = 30; // M=32 //Old configuration: PLLFBD=29 - M=31 -0019B4 2001E0 MOV #0x1E, W0 -0019B6 883A30 MOV W0, PLLFBD -97: CLKDIVbits.PLLPOST = 0; // N1=2 -0019B8 803A21 MOV CLKDIV, W1 -0019BA 2FF3F0 MOV #0xFF3F, W0 -0019BC 608000 AND W1, W0, W0 -0019BE 883A20 MOV W0, CLKDIV -98: CLKDIVbits.PLLPRE = 0; // N2=2 -0019C0 803A21 MOV CLKDIV, W1 -0019C2 2FFE00 MOV #0xFFE0, W0 -0019C4 608000 AND W1, W0, W0 -0019C6 883A20 MOV W0, CLKDIV -99: // Disable Watch Dog Timer -100: RCONbits.SWDTEN = 0; -0019C8 A9A740 BCLR RCON, #5 -101: // Clock switching to incorporate PLL -102: // Initiate Clock Switch to Primary -103: __builtin_write_OSCCONH(0x03); // Oscillator with PLL (NOSC=0b011) -0019CA 200032 MOV #0x3, W2 -0019CC 200780 MOV #0x78, W0 -0019CE 2009A1 MOV #0x9A, W1 -0019D0 207433 MOV #0x743, W3 -0019D2 784980 MOV.B W0, [W3] -0019D4 784981 MOV.B W1, [W3] -0019D6 784982 MOV.B W2, [W3] -104: __builtin_write_OSCCONL(0x01); // Start clock switching -0019D8 200012 MOV #0x1, W2 -0019DA 200460 MOV #0x46, W0 -0019DC 200571 MOV #0x57, W1 -0019DE 207423 MOV #0x742, W3 -0019E0 784980 MOV.B W0, [W3] -0019E2 784981 MOV.B W1, [W3] -0019E4 784982 MOV.B W2, [W3] -105: while (OSCCONbits.COSC != 0b011); // Wait for Clock switch to occur -0019E6 000000 NOP -0019E8 803A11 MOV OSCCON, W1 -0019EA 270000 MOV #0x7000, W0 -0019EC 608080 AND W1, W0, W1 -0019EE 230000 MOV #0x3000, W0 -0019F0 508F80 SUB W1, W0, [W15] -0019F2 3AFFFA BRA NZ, 0x19E8 -106: while (OSCCONbits.LOCK != 1) { -0019F4 000000 NOP -0019F6 803A11 MOV OSCCON, W1 -0019F8 200200 MOV #0x20, W0 -0019FA 608000 AND W1, W0, W0 -0019FC 500FE0 SUB W0, #0x0, [W15] -0019FE 32FFFB BRA Z, 0x19F6 -107: }; // Wait for PLL to lock -108: } -001A00 FA8000 ULNK -001A02 060000 RETURN -109: -110: void InitPWM(void) { -001A04 FA000A LNK #0xA -111: // Holds the value to be loaded into dutycycle register -112: unsigned int period; -113: // Holds the value to be loaded into special event compare register -114: unsigned int sptime; -115: // Holds PWM configuration value -116: unsigned int config1; -117: // Holds the value be loaded into PWMCON1 register -118: unsigned int config2; -119: // Holds the value to config the special event trigger postscale and dutycycle -120: unsigned int config3; -121: // Config PWM -122: period = 2048; // PWM F=19,340Hz counting UP 12bit resolution @ Fcy=39.628 MHz -001A06 208000 MOV #0x800, W0 -001A08 780F00 MOV W0, [W14] -123: sptime = 0x0; -001A0A EB0000 CLR W0 -001A0C 980710 MOV W0, [W14+2] -124: // 1:1 postscaler, 1:1 prescale, free running mode -125: // PWM time base ON, count up -126: config1 = PWM1_EN & PWM1_IDLE_CON & PWM1_OP_SCALE1 & PWM1_IPCLK_SCALE1 & -001A0E 280000 MOV #0x8000, W0 -001A10 980720 MOV W0, [W14+4] -127: PWM1_MOD_FREE; -128: // PWM1H e PWM1L enabled in complementar mode -129: // dsPICs with 3 pairs of PWM pins have one timer only (A) -130: config2 = PWM1_MOD1_COMP & PWM1_PEN1L & PWM1_PEN1H & -001A12 20CBB0 MOV #0xCBB, W0 -001A14 980730 MOV W0, [W14+6] -131: PWM1_MOD2_COMP & PWM1_PEN2L & PWM1_PEN2H & -132: PWM1_PDIS3H & PWM1_PDIS3L; -133: config3 = PWM1_SEVOPS1 & PWM1_OSYNC_PWM & PWM1_UEN; -001A16 200020 MOV #0x2, W0 -001A18 980740 MOV W0, [W14+8] -134: OpenMCPWM1(period, sptime, config1, config2, config3); -001A1A 90024E MOV [W14+8], W4 -001A1C 9001BE MOV [W14+6], W3 -001A1E 90012E MOV [W14+4], W2 -001A20 90009E MOV [W14+2], W1 -001A22 78001E MOV [W14], W0 -001A24 07F5E6 RCALL _OpenMCPWM1 -135: // Dead Time Unit A assigned to both 1 & 2 PWM pairs -136: /* SetMCPWM1DeadTimeAssignment(PWM1_DTS1A_UA & PWM1_DTS1I_UA & PWM1_DTS2A_UA & PWM1_DTS2I_UA); */ -137: P1DTCON2bits.DTS1A = 0; -001A26 A921CE BCLR DTCON2, #1 -138: P1DTCON2bits.DTS1I = 0; -001A28 A901CE BCLR DTCON2, #0 -139: P1DTCON2bits.DTS2A = 0; -001A2A A961CE BCLR DTCON2, #3 -140: P1DTCON2bits.DTS2I = 0; -001A2C A941CE BCLR DTCON2, #2 -141: // Dead time 100ns = 0.2% of PWM period -142: SetMCPWM1DeadTimeGeneration(PWM1_DTA4 & PWM1_DTAPS1); -001A2E 2FF040 MOV #0xFF04, W0 -001A30 07F5F0 RCALL _SetMCPWM1DeadTimeGeneration -143: // dutycyclereg=1, dutycycle=50% (motore fermo in LAP mode , updatedisable=0 -144: SetDCMCPWM1(1, 2048, 0); -001A32 EB4100 CLR.B W2 -001A34 208001 MOV #0x800, W1 -001A36 200010 MOV #0x1, W0 -001A38 07F5E2 RCALL _SetDCMCPWM1 -145: SetDCMCPWM1(2, 2048, 0); -001A3A EB4100 CLR.B W2 -001A3C 208001 MOV #0x800, W1 -001A3E 200020 MOV #0x2, W0 -001A40 07F5DE RCALL _SetDCMCPWM1 -146: -147: ConfigIntMCPWM1(PWM1_INT_DIS); -001A42 2FFF70 MOV #0xFFF7, W0 -001A44 07F5B4 RCALL _ConfigIntMCPWM1 -148: } -001A46 FA8000 ULNK -001A48 060000 RETURN -149: -150: void InitQEI1(void) { -001A4A FA0000 LNK #0x0 -151: //QEI1CONbits.CNTERR= 0; // No position count error has occurred -152: QEI1CONbits.QEISIDL = 1; // Discontinue module operation when device enters Idle mode -001A4C A8A1E1 BSET 0x1E1, #5 -153: QEI1CONbits.QEIM = 7; // Quadrature Encoder Interface enabled (x4 mode) with position counter reset by match (MAXxCNT) -001A4E 800F01 MOV QEI1CON, W1 -001A50 207000 MOV #0x700, W0 -001A52 708000 IOR W1, W0, W0 -001A54 880F00 MOV W0, QEI1CON -154: QEI1CONbits.SWPAB = 1; // Phase A and Phase B inputs swapped -001A56 A8E1E0 BSET QEI1CON, #7 -155: QEI1CONbits.PCDOUT = 0; // Position counter direction status output disabled (Normal I/O pin operation) -001A58 A9C1E0 BCLR QEI1CON, #6 -156: //QEI1CONbits.TQGATE= 0 // Timer gated time accumulation disabled -157: //QEI1CONbits.TQCKPS = 0b00 // 1:1 prescale value -158: QEI1CONbits.POSRES = 0; // Index pulse does not reset position counter -001A5A A941E0 BCLR QEI1CON, #2 -159: -160: DFLT1CONbits.QEOUT = 1; // Digital filter outputs enabled on QEAx/QEBx/INDXx pins -001A5C A8E1E2 BSET DFLT1CON, #7 -161: DFLT1CONbits.QECK = 6; // 1:128 Clock divide for QEAx/QEBx/INDXx -001A5E 800F11 MOV DFLT1CON, W1 -001A60 2FF8F0 MOV #0xFF8F, W0 -001A62 608080 AND W1, W0, W1 -001A64 200600 MOV #0x60, W0 -001A66 708000 IOR W1, W0, W0 -001A68 880F10 MOV W0, DFLT1CON -162: -163: MAX1CNT = 0xFFFF; -001A6A EB8000 SETM W0 -001A6C 880F30 MOV W0, MAX1CNT -164: POS1CNT = 0; -001A6E EB0000 CLR W0 -001A70 880F20 MOV W0, POS1CNT -165: } -001A72 FA8000 ULNK -001A74 060000 RETURN -166: -167: void InitQEI2(void) { -001A76 FA0000 LNK #0x0 -168: //QEI2CONbits.CNTERR= 0; // No position count error has occurred -169: QEI2CONbits.QEISIDL = 1; // Discontinue module operation when device enters Idle mode -001A78 A8A1F1 BSET 0x1F1, #5 -170: QEI2CONbits.QEIM = 7; // Quadrature Encoder Interface enabled (x4 mode) with position counter reset by match (MAXxCNT) -001A7A 800F81 MOV QEI2CON, W1 -001A7C 207000 MOV #0x700, W0 -001A7E 708000 IOR W1, W0, W0 -001A80 880F80 MOV W0, QEI2CON -171: QEI2CONbits.SWPAB = 1; // Phase A and Phase B inputs swapped -001A82 A8E1F0 BSET QEI2CON, #7 -172: QEI2CONbits.PCDOUT = 0; // Position counter direction status output disabled (Normal I/O pin operation) -001A84 A9C1F0 BCLR QEI2CON, #6 -173: //QEI2CONbits.TQGATE= 0 // Timer gated time accumulation disabled -174: //QEI2CONbits.TQCKPS = 0b00 // 1:1 prescale value -175: QEI2CONbits.POSRES = 0; // Index pulse does not reset position counter -001A86 A941F0 BCLR QEI2CON, #2 -176: -177: DFLT2CONbits.QEOUT = 1; // Digital filter outputs enabled on QEAx/QEBx/INDXx pins -001A88 A8E1F2 BSET DFLT2CON, #7 -178: DFLT2CONbits.QECK = 6; // 1:128 Clock divide for QEAx/QEBx/INDXx -001A8A 800F91 MOV DFLT2CON, W1 -001A8C 2FF8F0 MOV #0xFF8F, W0 -001A8E 608080 AND W1, W0, W1 -001A90 200600 MOV #0x60, W0 -001A92 708000 IOR W1, W0, W0 -001A94 880F90 MOV W0, DFLT2CON -179: -180: MAX2CNT = 0xFFFF; -001A96 EB8000 SETM W0 -001A98 880FB0 MOV W0, MAX2CNT -181: POS2CNT = 0; -001A9A EB0000 CLR W0 -001A9C 880FA0 MOV W0, POS2CNT -182: } -001A9E FA8000 ULNK -001AA0 060000 RETURN -183: -184: void InitIC1(void) { -001AA2 FA0000 LNK #0x0 -185: // Initialize Capture Module -186: IC1CONbits.ICM = 0b00; // Disable Input Capture 1 module -001AA4 800A11 MOV IC1CON, W1 -001AA6 2FFF80 MOV #0xFFF8, W0 -001AA8 608000 AND W1, W0, W0 -001AAA 880A10 MOV W0, IC1CON -187: IC1CONbits.ICTMR = 1; // Select Timer2 as the IC1 Time base -001AAC A8E142 BSET IC1CON, #7 -188: IC1CONbits.ICI = 0b01; // Interrupt on every second capture event -001AAE 800A11 MOV IC1CON, W1 -001AB0 2FF9F0 MOV #0xFF9F, W0 -001AB2 608080 AND W1, W0, W1 -001AB4 200200 MOV #0x20, W0 -001AB6 708000 IOR W1, W0, W0 -001AB8 880A10 MOV W0, IC1CON -189: IC1CONbits.ICM = 0b001; // Generate capture event on every Rising edge -001ABA 800A11 MOV IC1CON, W1 -001ABC 2FFF80 MOV #0xFFF8, W0 -001ABE 608000 AND W1, W0, W0 -001AC0 A00000 BSET W0, #0 -001AC2 880A10 MOV W0, IC1CON -190: -191: // Enable Capture Interrupt And Timer2 -192: IPC0bits.IC1IP = INPUT_CAPTURE_LEVEL; // Setup IC1 interrupt priority level -001AC4 800521 MOV IPC0, W1 -001AC6 200700 MOV #0x70, W0 -001AC8 708000 IOR W1, W0, W0 -001ACA 880520 MOV W0, IPC0 -193: IFS0bits.IC1IF = 0; // Clear IC1 Interrupt Status Flag -001ACC A92084 BCLR IFS0, #1 -194: IEC0bits.IC1IE = 1; // Enable IC1 interrupt -001ACE A82094 BSET IEC0, #1 -195: } -001AD0 FA8000 ULNK -001AD2 060000 RETURN -196: -197: void InitIC2(void) { -001AD4 FA0000 LNK #0x0 -198: // Initialize Capture Module -199: IC2CONbits.ICM = 0b00; // Disable Input Capture 2 module -001AD6 800A31 MOV IC2CON, W1 -001AD8 2FFF80 MOV #0xFFF8, W0 -001ADA 608000 AND W1, W0, W0 -001ADC 880A30 MOV W0, IC2CON -200: IC2CONbits.ICTMR = 1; // Select Timer2 as the IC1 Time base -001ADE A8E146 BSET IC2CON, #7 -201: IC2CONbits.ICI = 0b01; // Interrupt on every second capture event -001AE0 800A31 MOV IC2CON, W1 -001AE2 2FF9F0 MOV #0xFF9F, W0 -001AE4 608080 AND W1, W0, W1 -001AE6 200200 MOV #0x20, W0 -001AE8 708000 IOR W1, W0, W0 -001AEA 880A30 MOV W0, IC2CON -202: IC2CONbits.ICM = 0b001; // Generate capture event on every Rising edge -001AEC 800A31 MOV IC2CON, W1 -001AEE 2FFF80 MOV #0xFFF8, W0 -001AF0 608000 AND W1, W0, W0 -001AF2 A00000 BSET W0, #0 -001AF4 880A30 MOV W0, IC2CON -203: -204: // Enable Capture Interrupt And Timer2 -205: IPC1bits.IC2IP = INPUT_CAPTURE_LEVEL; // Setup IC2 interrupt priority level -001AF6 800531 MOV IPC1, W1 -001AF8 200700 MOV #0x70, W0 -001AFA 708000 IOR W1, W0, W0 -001AFC 880530 MOV W0, IPC1 -206: IFS0bits.IC2IF = 0; // Clear IC2 Interrupt Status Flag -001AFE A9A084 BCLR IFS0, #5 -207: IEC0bits.IC2IE = 1; // Enable IC2 interrupt -001B00 A8A094 BSET IEC0, #5 -208: } -001B02 FA8000 ULNK -001B04 060000 RETURN -209: -210: void InitTimer1(void) { -001B06 FA0000 LNK #0x0 -211: //T1CON = 10100000 00000000 -212: T1CONbits.TON = 0; // Disable Timer -001B08 A9E105 BCLR 0x105, #7 -213: T1CONbits.TSIDL = 1; // Stop in Idle Mode bit -001B0A A8A105 BSET 0x105, #5 -214: T1CONbits.TGATE = 0; // Disable Gated Timer mode -001B0C A9C104 BCLR T1CON, #6 -215: T1CONbits.TCKPS = 0b00; // Select 1:1 Prescaler -001B0E 800821 MOV T1CON, W1 -001B10 2FFCF0 MOV #0xFFCF, W0 -001B12 608000 AND W1, W0, W0 -001B14 880820 MOV W0, T1CON -216: T1CONbits.TSYNC = 0; // Disable Synchronization -001B16 A94104 BCLR T1CON, #2 -217: T1CONbits.TCS = 0; // Select internal clock source -001B18 A92104 BCLR T1CON, #1 -218: TMR1 = 0x00; // Clear timer register -001B1A EB0000 CLR W0 -001B1C 880800 MOV W0, TMR1 -219: PR1 = TMR1_VALUE; // Load the period value -001B1E 29C400 MOV #0x9C40, W0 -001B20 880810 MOV W0, PR1 -220: -221: IPC0bits.T1IP = SYS_TIMER_LEVEL; // Set Timer 1 Interrupt Priority Level -001B22 800521 MOV IPC0, W1 -001B24 28FFF0 MOV #0x8FFF, W0 -001B26 608080 AND W1, W0, W1 -001B28 250000 MOV #0x5000, W0 -001B2A 708000 IOR W1, W0, W0 -001B2C 880520 MOV W0, IPC0 -222: IFS0bits.T1IF = 0; // Clear Timer 1 Interrupt Flag -001B2E A96084 BCLR IFS0, #3 -223: IEC0bits.T1IE = 1; // Enable Timer1 interrupt -001B30 A86094 BSET IEC0, #3 -224: -225: T1CONbits.TON = 1; // Start Timer -001B32 A8E105 BSET 0x105, #7 -226: } -001B34 FA8000 ULNK -001B36 060000 RETURN -227: -228: void InitTimer2(void) { -001B38 FA0000 LNK #0x0 -229: //T2CON = 10100000 00000000 -230: T2CONbits.TON = 0; // Disable Timer -001B3A A9E111 BCLR 0x111, #7 -231: T2CONbits.TSIDL = 1; // Stop in Idle Mode bit -001B3C A8A111 BSET 0x111, #5 -232: T2CONbits.TGATE = 0; // Disable Gated Timer mode -001B3E A9C110 BCLR T2CON, #6 -233: T2CONbits.TCKPS = 0b00; // Select 1:1 Prescaler -001B40 800881 MOV T2CON, W1 -001B42 2FFCF0 MOV #0xFFCF, W0 -001B44 608000 AND W1, W0, W0 -001B46 880880 MOV W0, T2CON -234: T2CONbits.TCS = 0; // Select internal clock source -001B48 A92110 BCLR T2CON, #1 -235: TMR2 = 0x00; // Clear timer register -001B4A EB0000 CLR W0 -001B4C 880830 MOV W0, TMR2 -236: PR2 = TMR2_VALUE; // Load the period value -001B4E EB8000 SETM W0 -001B50 880860 MOV W0, PR2 -237: -238: IPC1bits.T2IP = PWM_TIMER_LEVEL; // Set Timer 1 Interrupt Priority Level -001B52 800531 MOV IPC1, W1 -001B54 270000 MOV #0x7000, W0 -001B56 708000 IOR W1, W0, W0 -001B58 880530 MOV W0, IPC1 -239: IFS0bits.T2IF = 0; // Clear Timer 1 Interrupt Flag -001B5A A9E084 BCLR IFS0, #7 -240: IEC0bits.T2IE = 1; // Enable Timer1 interrupt -001B5C A8E094 BSET IEC0, #7 -241: -242: T2CONbits.TON = 1; // Start Timer -001B5E A8E111 BSET 0x111, #7 -243: } -001B60 FA8000 ULNK -001B62 060000 RETURN -244: -245: void InitInterrupts(void) { -001B64 FA0000 LNK #0x0 -246: //For PID velocity control -247: IPC0bits.OC1IP = VEL_PID_LEVEL; // Set Output Compare Channel 1 Priority Level -001B66 800521 MOV IPC0, W1 -001B68 2F8FF0 MOV #0xF8FF, W0 -001B6A 608080 AND W1, W0, W1 -001B6C 203000 MOV #0x300, W0 -001B6E 708000 IOR W1, W0, W0 -001B70 880520 MOV W0, IPC0 -248: IFS0bits.OC1IF = 0; // Clear Output Compare Channel 1 Interrupt Flag -001B72 A94084 BCLR IFS0, #2 -249: IEC0bits.OC1IE = 1; // Enable Output Compare Channel 1 interrupt -001B74 A84094 BSET IEC0, #2 -250: -251: //For Parsing UART message -252: IPC1bits.OC2IP = RX_PARSER_LEVEL; // Set Output Compare Channel 2 Priority Level -001B76 800531 MOV IPC1, W1 -001B78 2F8FF0 MOV #0xF8FF, W0 -001B7A 608080 AND W1, W0, W1 -001B7C 201000 MOV #0x100, W0 -001B7E 708000 IOR W1, W0, W0 -001B80 880530 MOV W0, IPC1 -253: IFS0bits.OC2IF = 0; // Clear Output Compare Channel 2 Interrupt Flag -001B82 A9C084 BCLR IFS0, #6 -254: IEC0bits.OC2IE = 1; // Enable Output Compare Channel 2 interrupt -001B84 A8C094 BSET IEC0, #6 -255: -256: // For dead reckoning -257: IPC15bits.RTCIP = DEAD_RECK_LEVEL; // Set RTC Priority Level -001B86 800611 MOV IPC15, W1 -001B88 2F8FF0 MOV #0xF8FF, W0 -001B8A 608080 AND W1, W0, W1 -001B8C 202000 MOV #0x200, W0 -001B8E 708000 IOR W1, W0, W0 -001B90 880610 MOV W0, IPC15 -258: IFS3bits.RTCIF = 0; // Clear RTC Interrupt Flag -001B92 A9C08B BCLR 0x8B, #6 -259: DEAD_RECK_ENABLE = 1; // Enable RTC interrupt -001B94 A8C09B BSET 0x9B, #6 -260: } -001B96 FA8000 ULNK -001B98 060000 RETURN -261: -262: void InitUART1(void) { -001B9A FA0000 LNK #0x0 -263: U1MODEbits.STSEL = 0; // 1-stop bit -001B9C A90220 BCLR U1MODE, #0 -264: U1MODEbits.PDSEL = 0; // No Parity, 8-data bits -001B9E 801101 MOV U1MODE, W1 -001BA0 2FFF90 MOV #0xFFF9, W0 -001BA2 608000 AND W1, W0, W0 -001BA4 881100 MOV W0, U1MODE -265: U1MODEbits.ABAUD = 0; // Auto-Baud Disabled -001BA6 A9A220 BCLR U1MODE, #5 -266: U1MODEbits.BRGH = 0; // Low Speed mode -001BA8 A96220 BCLR U1MODE, #3 -267: -268: U1BRG = BRGVAL; // BAUD Rate Setting on System.h -001BAA 2002A0 MOV #0x2A, W0 -001BAC 881140 MOV W0, U1BRG -269: -270: U1STAbits.UTXISEL0 = 0; // Interrupt after one Tx character is transmitted -001BAE A9A223 BCLR 0x223, #5 -271: U1STAbits.UTXISEL1 = 0; -001BB0 A9E223 BCLR 0x223, #7 -272: -273: IEC0bits.U1TXIE = 0; // Disable UART Tx interrupt -001BB2 A98095 BCLR 0x95, #4 -274: U1STAbits.URXISEL = 0; // Interrupt after one RX character is received -001BB4 801111 MOV U1STA, W1 -001BB6 2FF3F0 MOV #0xFF3F, W0 -001BB8 608000 AND W1, W0, W0 -001BBA 881110 MOV W0, U1STA -275: -276: U1MODEbits.UARTEN = 1; // Enable UART -001BBC A8E221 BSET 0x221, #7 -277: U1STAbits.UTXEN = 1; // Enable UART Tx -001BBE A84223 BSET 0x223, #2 -278: -279: IEC4bits.U1EIE = 0; -001BC0 A9209C BCLR IEC4, #1 -280: IPC2bits.U1RXIP = UART_RX_LEVEL; // Set UART Rx Interrupt Priority Level -001BC2 800541 MOV IPC2, W1 -001BC4 28FFF0 MOV #0x8FFF, W0 -001BC6 608080 AND W1, W0, W1 -001BC8 260000 MOV #0x6000, W0 -001BCA 708000 IOR W1, W0, W0 -001BCC 880540 MOV W0, IPC2 -281: IFS0bits.U1RXIF = 0; // Reset RX interrupt flag -001BCE A96085 BCLR 0x85, #3 -282: IEC0bits.U1RXIE = 1; // Enable RX interrupt -001BD0 A86095 BSET 0x95, #3 -283: } -001BD2 FA8000 ULNK -001BD4 060000 RETURN -284: -285: void InitDMA0(void) { -001BD6 FA0000 LNK #0x0 -286: DMA0CNT = TOT_ADC_BUFF - 1; // 64 DMA request -001BD8 2007F0 MOV #0x7F, W0 -001BDA 881C50 MOV W0, DMA0CNT -287: DMA0REQ = 13; // Select ADC1 as DMA Request source -001BDC 2000D0 MOV #0xD, W0 -001BDE 881C10 MOV W0, DMA0REQ -288: -289: DMA0CONbits.AMODE = 2; // Peripheral Indirect Addressing mode -001BE0 801C01 MOV DMA0CON, W1 -001BE2 2FFCF0 MOV #0xFFCF, W0 -001BE4 608080 AND W1, W0, W1 -001BE6 200200 MOV #0x20, W0 -001BE8 708000 IOR W1, W0, W0 -001BEA 881C00 MOV W0, DMA0CON -290: DMA0CONbits.MODE = 0; // Continuous -001BEC 801C01 MOV DMA0CON, W1 -001BEE 2FFFC0 MOV #0xFFFC, W0 -001BF0 608000 AND W1, W0, W0 -001BF2 881C00 MOV W0, DMA0CON -291: -292: DMA0STA = __builtin_dmaoffset(AdcBuffer); -001BF4 206000 MOV #0x600, W0 -001BF6 881C20 MOV W0, DMA0STA -293: DMA0PAD = (volatile unsigned int) &ADC1BUF0; // Point DMA to ADC1BUF0 -001BF8 203000 MOV #0x300, W0 -001BFA 881C40 MOV W0, DMA0PAD -294: -295: IFS0bits.DMA0IF = 0; // Clear DMA Interrupt Flag -001BFC A98084 BCLR IFS0, #4 -296: IPC1bits.DMA0IP = ADC_DMA_LEVEL; // Set DMA Interrupt Priority Level -001BFE 800531 MOV IPC1, W1 -001C00 2FFF80 MOV #0xFFF8, W0 -001C02 608000 AND W1, W0, W0 -001C04 B30060 IOR #0x6, W0 -001C06 880530 MOV W0, IPC1 -297: IEC0bits.DMA0IE = 1; // Enable DMA interrupt -001C08 A88094 BSET IEC0, #4 -298: DMA0CONbits.CHEN = 1; // Enable DMA -001C0A A8E381 BSET 0x381, #7 -299: } -001C0C FA8000 ULNK -001C0E 060000 RETURN -300: -301: void InitDMA1(void) { -001C10 FA0000 LNK #0x0 -302: //DMA1CON = 0x2001; // One-Shot, Post-Increment, RAM-to-Peripheral -303: -304: DMA1CONbits.CHEN = 0; -001C12 A9E38D BCLR 0x38D, #7 -305: DMA1CONbits.SIZE = 1; -001C14 A8C38D BSET 0x38D, #6 -306: DMA1CONbits.DIR = 1; -001C16 A8A38D BSET 0x38D, #5 -307: DMA1CONbits.HALF = 0; -001C18 A9838D BCLR 0x38D, #4 -308: DMA1CONbits.NULLW = 0; -001C1A A9638D BCLR 0x38D, #3 -309: DMA1CONbits.AMODE = 0; -001C1C 801C61 MOV DMA1CON, W1 -001C1E 2FFCF0 MOV #0xFFCF, W0 -001C20 608000 AND W1, W0, W0 -001C22 881C60 MOV W0, DMA1CON -310: DMA1CONbits.MODE = 1; -001C24 801C61 MOV DMA1CON, W1 -001C26 2FFFC0 MOV #0xFFFC, W0 -001C28 608000 AND W1, W0, W0 -001C2A A00000 BSET W0, #0 -001C2C 881C60 MOV W0, DMA1CON -311: -312: -313: -314: DMA1CNT = MAX_TX_BUFF - 1; // 32 DMA requests -001C2E 200C70 MOV #0xC7, W0 -001C30 881CB0 MOV W0, DMA1CNT -315: DMA1REQ = 0x000c; // Select UART1 Transmitter -001C32 2000C0 MOV #0xC, W0 -001C34 881C70 MOV W0, DMA1REQ -316: -317: DMA1STA = __builtin_dmaoffset(BufferTx); -001C36 207000 MOV #0x700, W0 -001C38 881C80 MOV W0, DMA1STA -318: DMA1PAD = (volatile unsigned int) &U1TXREG; -001C3A 202240 MOV #0x224, W0 -001C3C 881CA0 MOV W0, DMA1PAD -319: -320: IPC3bits.DMA1IP = UART_TX_LEVEL; // Set DMA Interrupt Priority Level -001C3E 800551 MOV IPC3, W1 -001C40 2F8FF0 MOV #0xF8FF, W0 -001C42 608080 AND W1, W0, W1 -001C44 201000 MOV #0x100, W0 -001C46 708000 IOR W1, W0, W0 -001C48 880550 MOV W0, IPC3 -321: IFS0bits.DMA1IF = 0; // Clear DMA Interrupt Flag -001C4A A9C085 BCLR 0x85, #6 -322: IEC0bits.DMA1IE = 1; // Enable DMA interrupt -001C4C A8C095 BSET 0x95, #6 -323: } -001C4E FA8000 ULNK -001C50 060000 RETURN -324: -325: void InitADC(void) { -001C52 FA0000 LNK #0x0 -326: AD1CON1bits.FORM = 0; // Data Output Format: Integer -001C54 801901 MOV AD1CON1, W1 -001C56 2FCFF0 MOV #0xFCFF, W0 -001C58 608000 AND W1, W0, W0 -001C5A 881900 MOV W0, AD1CON1 -327: AD1CON1bits.SSRC = 3; // Sample Clock Source: Internal counter sampling and starts convertions (auto-convert) -001C5C 801901 MOV AD1CON1, W1 -001C5E 2FF1F0 MOV #0xFF1F, W0 -001C60 608080 AND W1, W0, W1 -001C62 200600 MOV #0x60, W0 -001C64 708000 IOR W1, W0, W0 -001C66 881900 MOV W0, AD1CON1 -328: AD1CON1bits.ASAM = 1; // ADC Sample Control: Sampling begins immediately after conversion -001C68 A84320 BSET AD1CON1, #2 -329: AD1CON1bits.AD12B = 0; // 10-bit ADC operation -001C6A A94321 BCLR 0x321, #2 -330: AD1CON1bits.ADSIDL = 1; // stop in idle -001C6C A8A321 BSET 0x321, #5 -331: AD1CON1bits.SIMSAM = 1; // CH0 CH1 sampled simultaneously -001C6E A86320 BSET AD1CON1, #3 -332: -333: AD1CON2bits.CSCNA = 0; // Input scan: Do not scan inputs -001C70 A94323 BCLR 0x323, #2 -334: AD1CON2bits.CHPS = 1; // Convert CH0 and CH1 -001C72 801911 MOV AD1CON2, W1 -001C74 2FCFF0 MOV #0xFCFF, W0 -001C76 608080 AND W1, W0, W1 -001C78 201000 MOV #0x100, W0 -001C7A 708000 IOR W1, W0, W0 -001C7C 881910 MOV W0, AD1CON2 -335: AD1CON2bits.BUFM = 0; // filling buffer from start address -001C7E A92322 BCLR AD1CON2, #1 -336: AD1CON2bits.ALTS = 0; // sample A -001C80 A90322 BCLR AD1CON2, #0 -337: -338: AD1CON3bits.ADRC = 0; // ADC Clock is derived from Systems Clock -001C82 A9E325 BCLR 0x325, #7 -339: AD1CON3bits.SAMC = 0b11111; // 31 Tad auto sample time -001C84 801921 MOV AD1CON3, W1 -001C86 21F000 MOV #0x1F00, W0 -001C88 708000 IOR W1, W0, W0 -001C8A 881920 MOV W0, AD1CON3 -340: AD1CON3bits.ADCS = ADC_BUFF - 1; // ADC Conversion Clock Tad=Tcy*(ADCS+1)= (1/40M)*64 = 1.6us (625Khz) -001C8C B3C3F0 MOV #0x3F, W0 -001C8E B7E324 MOV.B WREG, AD1CON3 -341: // ADC Conversion Time for 10-bit Tc=12*Tab = 19.2us -342: -343: AD1CON1bits.ADDMABM = 0; // DMA buffers are built in scatter/gather mode -001C90 A98321 BCLR 0x321, #4 -344: AD1CON2bits.SMPI = 0b0001; // number of DMA buffers -1 -001C92 801911 MOV AD1CON2, W1 -001C94 2FFC30 MOV #0xFFC3, W0 -001C96 608000 AND W1, W0, W0 -001C98 A02000 BSET W0, #2 -001C9A 881910 MOV W0, AD1CON2 -345: AD1CON4bits.DMABL = 0b110; // 64 word DMA buffer for each analog input -001C9C 801991 MOV AD1CON4, W1 -001C9E 2FFF80 MOV #0xFFF8, W0 -001CA0 608000 AND W1, W0, W0 -001CA2 B30060 IOR #0x6, W0 -001CA4 881990 MOV W0, AD1CON4 -346: -347: AD1CHS123bits.CH123NB = 0; // don't care -> sample B -001CA6 801931 MOV AD1CHS123, W1 -001CA8 2F9FF0 MOV #0xF9FF, W0 -001CAA 608000 AND W1, W0, W0 -001CAC 881930 MOV W0, AD1CHS123 -348: AD1CHS123bits.CH123SB = 0; // don't care -> sample B -001CAE A90327 BCLR 0x327, #0 -349: AD1CHS123bits.CH123NA = 0; // CH1,2,3 negative input = Vrefl -001CB0 801931 MOV AD1CHS123, W1 -001CB2 2FFF90 MOV #0xFFF9, W0 -001CB4 608000 AND W1, W0, W0 -001CB6 881930 MOV W0, AD1CHS123 -350: AD1CHS123bits.CH123SA = 0; // CH1 = AN0, CH2=AN1, CH3=AN2 -001CB8 A90326 BCLR AD1CHS123, #0 -351: -352: AD1CHS0bits.CH0NB = 0; // don't care -> sample B -001CBA A9E329 BCLR 0x329, #7 -353: AD1CHS0bits.CH0SB = 0; // don't care -> sample B -001CBC 801941 MOV AD1CHS0, W1 -001CBE 2E0FF0 MOV #0xE0FF, W0 -001CC0 608000 AND W1, W0, W0 -001CC2 881940 MOV W0, AD1CHS0 -354: AD1CHS0bits.CH0NA = 0; // CH0 neg -> Vrefl -001CC4 A9E328 BCLR AD1CHS0, #7 -355: AD1CHS0bits.CH0SA = 1; // CH0 pos -> AN1 -001CC6 801941 MOV AD1CHS0, W1 -001CC8 2FFE00 MOV #0xFFE0, W0 -001CCA 608000 AND W1, W0, W0 -001CCC A00000 BSET W0, #0 -001CCE 881940 MOV W0, AD1CHS0 -356: -357: AD1PCFGL = 0xFFFF; // set all Analog ports as digital -001CD0 EB8000 SETM W0 -001CD2 881960 MOV W0, AD1PCFGL -358: AD1PCFGLbits.PCFG0 = 0; // AN0 -001CD4 A9032C BCLR AD1PCFGL, #0 -359: AD1PCFGLbits.PCFG1 = 0; // AN1 -001CD6 A9232C BCLR AD1PCFGL, #1 -360: -361: IFS0bits.AD1IF = 0; // Clear the A/D interrupt flag bit -001CD8 A9A085 BCLR 0x85, #5 -362: IEC0bits.AD1IE = 0; // Do Not Enable A/D interrupt -001CDA A9A095 BCLR 0x95, #5 -363: AD1CON1bits.ADON = 1; // module on -001CDC A8E321 BSET 0x321, #7 -364: } -001CDE FA8000 ULNK -001CE0 060000 RETURN ---- C:/Users/Raffaello/Dropbox/MicrochipProject/dsPIC33MotionControl.X/serial.c ----------------------- -1: /******************************************************************************/ -2: /* Files to Include */ -3: /******************************************************************************/ -4: -5: /* Device header file */ -6: #if defined(__XC16__) -7: #include -8: #elif defined(__C30__) -9: #if defined(__dsPIC33E__) -10: #include -11: #elif defined(__dsPIC33F__) -12: #include -13: #endif -14: #endif -15: -16: #include /* Includes uint16_t definition */ -17: #include /* Includes true/false definition */ -18: -19: #include "serial.h" -20: -21: /******************************************************************************/ -22: /* Global Variable Declaration */ -23: /******************************************************************************/ -24: -25: int (*pkg_parse) (unsigned char inchar) = &pkg_header; -26: unsigned char BufferTx[MAX_TX_BUFF] __attribute__((space(dma))); -27: packet_t receive_pkg; -28: unsigned int index_data = 0; -29: -30: /******************************************************************************/ -31: /* Comunication Functions */ -32: /******************************************************************************/ -33: -34: /* Data structure: -35: * ------------------------------------------------ -36: * | HEADER | LENGTH | DATA | CKS | -37: * ------------------------------------------------ -38: * 1 2 3 -> n n+1 -39: */ -40: -41: int decode_pkgs(unsigned char rxchar) { -001EF4 FA0002 LNK #0x2 -001EF6 784F00 MOV.B W0, [W14] -42: return (*pkg_parse)(rxchar); -001EF8 804E41 MOV 0x9C8, W1 -001EFA 78401E MOV.B [W14], W0 -001EFC 010001 CALL W1 -43: } -001EFE FA8000 ULNK -001F00 060000 RETURN -44: -45: int pkg_header(unsigned char rxchar) { -001F02 FA0002 LNK #0x2 -001F04 784F00 MOV.B W0, [W14] -46: if (rxchar == HEADER) { -001F06 B3C230 MOV #0x23, W0 -001F08 78409E MOV.B [W14], W1 -001F0A 50CF80 SUB.B W1, W0, [W15] -001F0C 3A0004 BRA NZ, 0x1F16 -47: pkg_parse = &pkg_length; -001F0E 21F1E0 MOV #0x1F1E, W0 -001F10 884E40 MOV W0, 0x9C8 -48: return false; -001F12 EB0000 CLR W0 -001F14 370002 BRA 0x1F1A -49: } else { -50: return pkg_error(ERROR_HEADER); -001F16 2FFFD0 MOV #0xFFFD, W0 -001F18 070042 RCALL pkg_error -51: } -52: } -001F1A FA8000 ULNK -001F1C 060000 RETURN -53: -54: int pkg_length(unsigned char rxchar) { -001F1E FA0002 LNK #0x2 -001F20 784F00 MOV.B W0, [W14] -55: if (rxchar > MAX_RX_BUFF) { -001F22 B3CC80 MOV #0xC8, W0 -001F24 78409E MOV.B [W14], W1 -001F26 50CF80 SUB.B W1, W0, [W15] -001F28 360003 BRA LEU, 0x1F30 -56: return pkg_error(ERROR_LENGTH); -001F2A 2FFFC0 MOV #0xFFFC, W0 -001F2C 070038 RCALL pkg_error -001F2E 370006 BRA 0x1F3C -57: } else { -58: pkg_parse = &pkg_data; -001F30 21F400 MOV #0x1F40, W0 -001F32 884E40 MOV W0, 0x9C8 -59: receive_pkg.length = rxchar; -001F34 78409E MOV.B [W14], W1 -001F36 FB8001 ZE W1, W0 -001F38 884070 MOV W0, receive_pkg -60: return false; -001F3A EB0000 CLR W0 -61: } -62: } -001F3C FA8000 ULNK -001F3E 060000 RETURN -63: -64: int pkg_data(unsigned char rxchar) { -001F40 FA0006 LNK #0x6 -001F42 984740 MOV.B W0, [W14+4] -65: int cks_clc; -66: if ((index_data + 1) == (receive_pkg.length + 1)) { -001F44 804E50 MOV 0x9CA, W0 -001F46 E80080 INC W0, W1 -001F48 804070 MOV receive_pkg, W0 -001F4A E80000 INC W0, W0 -001F4C 508F80 SUB W1, W0, [W15] -001F4E 3A001C BRA NZ, 0x1F88 -67: pkg_parse = &pkg_header; //Restart parse serial packet -001F50 21F020 MOV #0x1F02, W0 -001F52 884E40 MOV W0, 0x9C8 -68: if ((cks_clc = pkg_checksum(receive_pkg.buffer, 0, index_data)) == rxchar) { //checksum data -001F54 804E50 MOV 0x9CA, W0 -001F56 780080 MOV W0, W1 -001F58 208100 MOV #0x810, W0 -001F5A 780101 MOV W1, W2 -001F5C EB0080 CLR W1 -001F5E 070028 RCALL pkg_checksum -001F60 FB8000 ZE W0, W0 -001F62 780F00 MOV W0, [W14] -001F64 90404E MOV.B [W14+4], W0 -001F66 FB8000 ZE W0, W0 -001F68 78009E MOV [W14], W1 -001F6A 508F80 SUB W1, W0, [W15] -001F6C 3A0004 BRA NZ, 0x1F76 -69: index_data = 0; //flush index array data buffer -001F6E EB0000 CLR W0 -001F70 884E50 MOV W0, 0x9CA -70: return true; -001F72 200010 MOV #0x1, W0 -001F74 370012 BRA 0x1F9A -71: } else { -72: bool t = pkg_error(ERROR_CKS); -001F76 2FFFA0 MOV #0xFFFA, W0 -001F78 070012 RCALL pkg_error -001F7A EA0080 NEG W0, W1 -001F7C 708000 IOR W1, W0, W0 -001F7E DE004F LSR W0, #15, W0 -001F80 984720 MOV.B W0, [W14+2] -73: return t; -001F82 90402E MOV.B [W14+2], W0 -001F84 FB8000 ZE W0, W0 -001F86 370009 BRA 0x1F9A -74: } -75: } else { -76: receive_pkg.buffer[index_data] = rxchar; -001F88 804E51 MOV 0x9CA, W1 -001F8A 208100 MOV #0x810, W0 -001F8C 408000 ADD W1, W0, W0 -001F8E 9040CE MOV.B [W14+4], W1 -001F90 784801 MOV.B W1, [W0] -77: index_data++; -001F92 804E50 MOV 0x9CA, W0 -001F94 E80000 INC W0, W0 -001F96 884E50 MOV W0, 0x9CA -78: return false; -001F98 EB0000 CLR W0 -79: } -80: } -001F9A FA8000 ULNK -001F9C 060000 RETURN -81: -82: int pkg_error(int error) { -001F9E FA0002 LNK #0x2 -001FA0 780F00 MOV W0, [W14] -83: // TODO complete task error -84: index_data = 0; -001FA2 EB0000 CLR W0 -001FA4 884E50 MOV W0, 0x9CA -85: pkg_parse = &pkg_header; //Restart parse serial packet -001FA6 21F020 MOV #0x1F02, W0 -001FA8 884E40 MOV W0, 0x9C8 -86: return error; -001FAA 78001E MOV [W14], W0 -87: } -001FAC FA8000 ULNK -001FAE 060000 RETURN -88: -89: unsigned char pkg_checksum(volatile unsigned char* Buffer, int FirstIndx, int LastIndx) { -001FB0 FA000A LNK #0xA -001FB2 980720 MOV W0, [W14+4] -001FB4 980731 MOV W1, [W14+6] -001FB6 980742 MOV W2, [W14+8] -90: unsigned char ChkSum = 0; -001FB8 EB4000 CLR.B W0 -001FBA 784F00 MOV.B W0, [W14] -91: int ChkCnt; -92: for (ChkCnt = FirstIndx; ChkCnt < LastIndx; ChkCnt++) { -001FBC 90003E MOV [W14+6], W0 -001FBE 980710 MOV W0, [W14+2] -001FC0 370008 BRA 0x1FD2 -001FCC 90001E MOV [W14+2], W0 -001FCE E80000 INC W0, W0 -001FD0 980710 MOV W0, [W14+2] -001FD2 90009E MOV [W14+2], W1 -001FD4 90004E MOV [W14+8], W0 -001FD6 508F80 SUB W1, W0, [W15] -001FD8 35FFF4 BRA LT, 0x1FC2 -93: ChkSum += Buffer[ChkCnt]; -001FC2 90001E MOV [W14+2], W0 -001FC4 9000AE MOV [W14+4], W1 -001FC6 408000 ADD W1, W0, W0 -001FC8 784010 MOV.B [W0], W0 -001FCA 404F1E ADD.B W0, [W14], [W14] -94: } -95: return ChkSum; -001FDA 78401E MOV.B [W14], W0 -96: } -001FDC FA8000 ULNK -001FDE 060000 RETURN -97: -98: /** -99: * Write a string to the serial device. -100: * \param s string to write -101: * \throws boost::system::system_error on failure -102: */ -103: void pkg_send(packet_t packet) { -001FE0 FA0002 LNK #0x2 -001FE2 781F88 MOV W8, [W15++] -104: /* on packet: -105: * -------------------------- ---------------------------- ----------------------- -106: * | Length | CMD | DATA ... | Length | CMD | INFORMATION |Length | CMD | ... ... | -107: * -------------------------- ---------------------------- ----------------------- -108: * 1 2 -> length length+1 length+2 length+3 .... -109: */ -110: -111: int i; -112: BufferTx[0] = HEADER; -001FE4 247001 MOV #0x4700, W1 -001FE6 B3C230 MOV #0x23, W0 -001FE8 784880 MOV.B W0, [W1] -113: BufferTx[1] = packet.length; -001FEA 97107E MOV [W14-210], W0 -001FEC 784000 MOV.B W0, W0 -001FEE 247011 MOV #0x4701, W1 -001FF0 784880 MOV.B W0, [W1] -114: -115: for (i = 0; i < packet.length; i++) { -001FF2 EB0000 CLR W0 -001FF4 780F00 MOV W0, [W14] -001FF6 370008 BRA 0x2008 -002006 E80F1E INC [W14], [W14] -002008 78009E MOV [W14], W1 -00200A 97107E MOV [W14-210], W0 -00200C 508F80 SUB W1, W0, [W15] -00200E 39FFF4 BRA NC, 0x1FF8 -116: BufferTx[i + HEAD_PKG] = packet.buffer[i]; -001FF8 E8809E INC2 [W14], W1 -001FFA E8801E INC2 [W14], W0 -001FFC 570166 SUB W14, #0x6, W2 -001FFE 410000 ADD W2, W0, W0 -002000 967040 MOV.B [W0-204], W0 -002002 247002 MOV #0x4700, W2 -002004 78F100 MOV.B W0, [W2+W1] -117: } -118: -119: BufferTx[packet.length + HEAD_PKG] = pkg_checksum(BufferTx, HEAD_PKG, packet.length + HEAD_PKG); -002010 97107E MOV [W14-210], W0 -002012 E88400 INC2 W0, W8 -002014 97107E MOV [W14-210], W0 -002016 E88000 INC2 W0, W0 -002018 780080 MOV W0, W1 -00201A 247000 MOV #0x4700, W0 -00201C 780101 MOV W1, W2 -00201E 200021 MOV #0x2, W1 -002020 07FFC7 RCALL pkg_checksum -002022 247001 MOV #0x4700, W1 -002024 7C7080 MOV.B W0, [W1+W8] -120: -121: DMA1CNT = (HEAD_PKG + packet.length + 1) - 1; // # of DMA requests -002026 97107E MOV [W14-210], W0 -002028 E88000 INC2 W0, W0 -00202A 881CB0 MOV W0, DMA1CNT -122: DMA1CONbits.CHEN = 1; // Enable DMA1 Channel -00202C A8E38D BSET 0x38D, #7 -123: DMA1REQbits.FORCE = 1; // Manual mode: Kick-start the 1st transfer -00202E A8E38F BSET 0x38F, #7 -124: } -002030 78044F MOV [--W15], W8 -002032 FA8000 ULNK -002034 060000 RETURN ---- C:/Users/Raffaello/Dropbox/MicrochipProject/dsPIC33MotionControl.X/parsing_packet.c --------------- -1: /******************************************************************************/ -2: /* Files to Include */ -3: /******************************************************************************/ -4: -5: /* Device header file */ -6: #if defined(__XC16__) -7: #include -8: #elif defined(__C30__) -9: #if defined(__dsPIC33E__) -10: #include -11: #elif defined(__dsPIC33F__) -12: #include -13: #endif -14: #endif -15: -16: #include /* Includes uint16_t definition */ -17: #include /* Includes true/false definition */ -18: #include -19: -20: #include "parsing_packet.h" -21: -22: #include "serial.h" -23: -24: #include "motors_PID.h" -25: #include "user.h" -26: #include "system.h" -27: -28: -29: // From Interrupt -30: extern volatile process_t time, priority, frequency; -31: -32: // From serial -33: extern packet_t receive_pkg; -34: -35: // From motors PID -36: extern parameter_t parameter; -37: extern constraint_t constraint; -38: extern velocity_t vel_rif, vel_mis; -39: extern pid_control_t pid_left, pid_right; -40: extern enable_motor_t enable_motors; -41: extern motor_t motor_left, motor_right; -42: -43: // From high level control -44: extern coordinate_t coordinate; -45: -46: -47: /******************************************************************************/ -48: /* Parsing functions */ -49: -50: /******************************************************************************/ -51: -52: int parse_packet(void) { -000B36 FA0268 LNK #0x268 -53: int i; -54: unsigned int t = TMR1; // Timing function -000B38 800800 MOV TMR1, W0 -000B3A 980720 MOV W0, [W14+4] -55: packet_t send, packet; -56: send.length = 0; -000B3C EB0000 CLR W0 -000B3E 980730 MOV W0, [W14+6] -57: memcpy(&packet, &receive_pkg, sizeof (packet)); -000B40 200D20 MOV #0xD2, W0 -000B42 40000E ADD W0, W14, W0 -000B44 200CC2 MOV #0xCC, W2 -000B46 2080E1 MOV #0x80E, W1 -000B48 07FFEE RCALL _memcpy -58: for (i = 0; i < packet.length; i++) { -000B4A EB0000 CLR W0 -000B4C 780F00 MOV W0, [W14] -000B4E 370058 BRA 0xC00 -000BFE E80F1E INC [W14], [W14] -000C00 78009E MOV [W14], W1 -000C02 90A81E MOV [W14+210], W0 -000C04 508F80 SUB W1, W0, [W15] -000C06 39FFA4 BRA NC, 0xB50 -59: unsigned char option; -60: if (packet.buffer[i] > 1) -000B50 E8801E INC2 [W14], W0 -000B52 470000 ADD W14, W0, W0 -000B54 91D020 MOV.B [W0+210], W0 -000B56 504FE1 SUB.B W0, #0x1, [W15] -000B58 360003 BRA LEU, 0xB60 -61: option = CHANGE; -000B5A B3C430 MOV #0x43, W0 -000B5C 984720 MOV.B W0, [W14+2] -000B5E 370005 BRA 0xB6A -62: else -63: option = packet.buffer[i + 2]; -000B60 E8801E INC2 [W14], W0 -000B62 E88000 INC2 W0, W0 -000B64 470000 ADD W14, W0, W0 -000B66 91D0A0 MOV.B [W0+210], W1 -000B68 984721 MOV.B W1, [W14+2] -64: switch (option) { -000B6A 90402E MOV.B [W14+2], W0 -000B6C FB8000 ZE W0, W0 -000B6E B90161 MUL.SU W0, #1, W2 -000B70 2FFBD0 MOV #0xFFBD, W0 -000B72 2FFFF1 MOV #0xFFFF, W1 -000B74 400002 ADD W0, W2, W0 -000B76 488083 ADDC W1, W3, W1 -000B78 2000F2 MOV #0xF, W2 -000B7A 200003 MOV #0x0, W3 -000B7C 500F82 SUB W0, W2, [W15] -000B7E 588F83 SUBB W1, W3, [W15] -000B80 3E0035 BRA GTU, 0xBEC -000B82 016000 BRA W0 -000B84 37000F BRA 0xBA4 -000B86 370034 BRA 0xBF0 -000B88 370033 BRA 0xBF0 -000B8A 370032 BRA 0xBF0 -000B8C 370031 BRA 0xBF0 -000B8E 370030 BRA 0xBF0 -000B90 37002F BRA 0xBF0 -000B92 37002E BRA 0xBF0 -000B94 370019 BRA 0xBC8 -000B96 37002C BRA 0xBF0 -000B98 37002B BRA 0xBF0 -000B9A 370016 BRA 0xBC8 -000B9C 370029 BRA 0xBF0 -000B9E 370028 BRA 0xBF0 -000BA0 370027 BRA 0xBF0 -000BA2 370012 BRA 0xBC8 -65: case CHANGE: -66: decode_single_pkg(&send, packet.buffer[i + 1], packet.buffer, i + 2); -000BA4 E8801E INC2 [W14], W0 -000BA6 780180 MOV W0, W3 -000BA8 E8001E INC [W14], W0 -000BAA E88000 INC2 W0, W0 -000BAC 470000 ADD W14, W0, W0 -000BAE 91D020 MOV.B [W0+210], W0 -000BB0 2019E5 MOV #0x19E, W5 -000BB2 42828E ADD W5, W14, W5 -000BB4 200D21 MOV #0xD2, W1 -000BB6 40808E ADD W1, W14, W1 -000BB8 E88101 INC2 W1, W2 -000BBA 4700E6 ADD W14, #0x6, W1 -000BBC 780203 MOV W3, W4 -000BBE 780182 MOV W2, W3 -000BC0 784100 MOV.B W0, W2 -000BC2 780005 MOV W5, W0 -000BC4 070030 RCALL decode_single_pkg -67: break; -000BC6 370015 BRA 0xBF2 -68: case REQUEST: -69: case ACK: -70: case NACK: -71: addPacket(&send, packet.buffer[i + 1], packet.buffer[i + 2], NULL); -000BC8 E8801E INC2 [W14], W0 -000BCA E88000 INC2 W0, W0 -000BCC 470000 ADD W14, W0, W0 -000BCE 91D0A0 MOV.B [W0+210], W1 -000BD0 E8001E INC [W14], W0 -000BD2 E88000 INC2 W0, W0 -000BD4 470000 ADD W14, W0, W0 -000BD6 91D020 MOV.B [W0+210], W0 -000BD8 2019E5 MOV #0x19E, W5 -000BDA 42828E ADD W5, W14, W5 -000BDC 470366 ADD W14, #0x6, W6 -000BDE EB0200 CLR W4 -000BE0 784181 MOV.B W1, W3 -000BE2 784100 MOV.B W0, W2 -000BE4 780086 MOV W6, W1 -000BE6 780005 MOV W5, W0 -000BE8 07015D RCALL addPacket -72: break; -000BEA 370003 BRA 0xBF2 -73: default: -74: break; -000BEC 000000 NOP -000BEE 370001 BRA 0xBF2 -000BF0 000000 NOP -75: } -76: i += packet.buffer[i] + 1; -000BF2 E8801E INC2 [W14], W0 -000BF4 470000 ADD W14, W0, W0 -000BF6 91D020 MOV.B [W0+210], W0 -000BF8 FB8000 ZE W0, W0 -000BFA E80000 INC W0, W0 -000BFC 400F1E ADD W0, [W14], [W14] -77: } -78: pkg_send(send); -000C08 B00CCF ADD #0xCC, W15 -000C0A 2FF340 MOV #0xFF34, W0 -000C0C 40000F ADD W0, W15, W0 -000C0E 78008E MOV W14, W1 -000C10 B00061 ADD #0x6, W1 -000C12 090065 REPEAT #0x65 -000C14 781831 MOV [W1++], [W0++] -000C16 B10CC0 SUB #0xCC, W0 -000C18 0709E3 RCALL pkg_send -000C1A B10CCF SUB #0xCC, W15 -79: return TMR1 - t; // Time of esecution -000C1C 800801 MOV TMR1, W1 -000C1E 90002E MOV [W14+4], W0 -000C20 508000 SUB W1, W0, W0 -80: } -000C22 FA8000 ULNK -000C24 060000 RETURN -81: -82: information_packet_t decode_single_pkg(Ptr_packet send, char command, unsigned char* Buffer, unsigned int position) { -000C26 FA0274 LNK #0x274 -000C28 781F88 MOV W8, [W15++] -000C2A 780400 MOV W0, W8 -000C2C 999711 MOV W1, [W14+418] -000C2E 9B6742 MOV.B W2, [W14+420] -000C30 999733 MOV W3, [W14+422] -000C32 999744 MOV W4, [W14+424] -83: information_packet_t packet; -84: Ptr_abstract_packet ptr_packet_send; -85: abstract_packet_t packet_send; -86: services_t service; -87: unsigned char process_return; -88: switch (command) { -000C34 93604E MOV.B [W14+420], W0 -000C36 FB0000 SE W0, W0 -000C38 B90161 MUL.SU W0, #1, W2 -000C3A 2FFBF0 MOV #0xFFBF, W0 -000C3C 2FFFF1 MOV #0xFFFF, W1 -000C3E 400002 ADD W0, W2, W0 -000C40 488083 ADDC W1, W3, W1 -000C42 200332 MOV #0x33, W2 -000C44 200003 MOV #0x0, W3 -000C46 500F82 SUB W0, W2, [W15] -000C48 588F83 SUBB W1, W3, [W15] -000C4A 3E00FA BRA GTU, 0xE40 -000C4C 016000 BRA W0 -000C4E 370043 BRA 0xCD6 -000C50 370053 BRA 0xCF8 -000C52 37006A BRA 0xD28 -000C54 3700F5 BRA 0xE40 -000C56 3700A9 BRA 0xDAA -000C58 3700F3 BRA 0xE40 -000C5A 3700F2 BRA 0xE40 -000C5C 3700F1 BRA 0xE40 -000C5E 3700F0 BRA 0xE40 -000C60 3700EF BRA 0xE40 -000C62 3700EE BRA 0xE40 -000C64 3700ED BRA 0xE40 -000C66 370099 BRA 0xD9A -000C68 3700EB BRA 0xE40 -000C6A 3700EA BRA 0xE40 -000C6C 370073 BRA 0xD54 -000C6E 3700E8 BRA 0xE40 -000C70 3700E7 BRA 0xE40 -000C72 3700E6 BRA 0xE40 -000C74 370064 BRA 0xD3E -000C76 3700E4 BRA 0xE40 -000C78 370085 BRA 0xD84 -000C7A 3700E2 BRA 0xE40 -000C7C 3700E1 BRA 0xE40 -000C7E 3700E0 BRA 0xE40 -000C80 3700DF BRA 0xE40 -000C82 3700DE BRA 0xE40 -000C84 3700DD BRA 0xE40 -000C86 3700DC BRA 0xE40 -000C88 3700DB BRA 0xE40 -000C8A 3700DA BRA 0xE40 -000C8C 3700D9 BRA 0xE40 -000C8E 370013 BRA 0xCB6 -000C90 37001A BRA 0xCC6 -000C92 3700D6 BRA 0xE40 -000C94 3700D5 BRA 0xE40 -000C96 3700D4 BRA 0xE40 -000C98 3700A5 BRA 0xDE4 -000C9A 3700D2 BRA 0xE40 -000C9C 3700D1 BRA 0xE40 -000C9E 3700D0 BRA 0xE40 -000CA0 3700CF BRA 0xE40 -000CA2 3700CE BRA 0xE40 -000CA4 3700CD BRA 0xE40 -000CA6 3700CC BRA 0xE40 -000CA8 3700CB BRA 0xE40 -000CAA 3700CA BRA 0xE40 -000CAC 370091 BRA 0xDD0 -000CAE 3700C8 BRA 0xE40 -000CB0 3700C7 BRA 0xE40 -000CB2 3700A2 BRA 0xDF8 -000CB4 370085 BRA 0xDC0 -89: case MOTOR_L: -90: // Impossible to change measure motor left -91: return addPacket(send, command, NACK, NULL); -000CB6 93604E MOV.B [W14+420], W0 -000CB8 EB0200 CLR W4 -000CBA B3C4E3 MOV #0x4E, W3 -000CBC 784100 MOV.B W0, W2 -000CBE 91909E MOV [W14+418], W1 -000CC0 780008 MOV W8, W0 -000CC2 0700F0 RCALL addPacket -000CC4 3700C6 BRA 0xE52 -92: break; -93: case MOTOR_R: -94: // Impossible to change measure motor left -95: return addPacket(send, command, NACK, NULL); -000CC6 93604E MOV.B [W14+420], W0 -000CC8 EB0200 CLR W4 -000CCA B3C4E3 MOV #0x4E, W3 -000CCC 784100 MOV.B W0, W2 -000CCE 91909E MOV [W14+418], W1 -000CD0 780008 MOV W8, W0 -000CD2 0700E8 RCALL addPacket -000CD4 3700BE BRA 0xE52 -96: break; -97: case PID_CONTROL_L: -98: ptr_packet_send = (Ptr_abstract_packet) & pid_left; -000CD6 209360 MOV #0x936, W0 -000CD8 780F00 MOV W0, [W14] -99: packet = addChangePacket(send, command, Buffer, position, LNG_PID_CONTROL, ptr_packet_send); -000CDA 470064 ADD W14, #0x4, W0 -000CDC 78031E MOV [W14], W6 -000CDE 2000C5 MOV #0xC, W5 -000CE0 91924E MOV [W14+424], W4 -000CE2 9191BE MOV [W14+422], W3 -000CE4 93614E MOV.B [W14+420], W2 -000CE6 91909E MOV [W14+418], W1 -000CE8 0700B8 RCALL addChangePacket -100: update_pid_l(); -000CEA 070360 RCALL update_pid_l -101: return packet; -000CEC 78000E MOV W14, W0 -000CEE B00040 ADD #0x4, W0 -000CF0 090064 REPEAT #0x64 -000CF2 781C30 MOV [W0++], [W8++] -000CF4 B10CA8 SUB #0xCA, W8 -000CF6 3700AD BRA 0xE52 -102: break; -103: case PID_CONTROL_R: -104: ptr_packet_send = (Ptr_abstract_packet) & pid_right; -000CF8 209420 MOV #0x942, W0 -000CFA 780F00 MOV W0, [W14] -105: packet = addChangePacket(send, command, Buffer, position, LNG_PID_CONTROL, ptr_packet_send); -000CFC 201AA0 MOV #0x1AA, W0 -000CFE 40000E ADD W0, W14, W0 -000D00 78031E MOV [W14], W6 -000D02 2000C5 MOV #0xC, W5 -000D04 91924E MOV [W14+424], W4 -000D06 9191BE MOV [W14+422], W3 -000D08 93614E MOV.B [W14+420], W2 -000D0A 91909E MOV [W14+418], W1 -000D0C 0700A6 RCALL addChangePacket -000D0E 78008E MOV W14, W1 -000D10 B00041 ADD #0x4, W1 -000D12 78000E MOV W14, W0 -000D14 B01AA0 ADD #0x1AA, W0 -000D16 090064 REPEAT #0x64 -000D18 7818B0 MOV [W0++], [W1++] -106: update_pid_r(); -000D1A 0703AE RCALL update_pid_r -107: return packet; -000D1C 78008E MOV W14, W1 -000D1E B00041 ADD #0x4, W1 -000D20 090064 REPEAT #0x64 -000D22 781C31 MOV [W1++], [W8++] -000D24 B10CA8 SUB #0xCA, W8 -000D26 370095 BRA 0xE52 -108: break; -109: case COORDINATE: -110: ptr_packet_send = (Ptr_abstract_packet) & coordinate; -000D28 209B80 MOV #0x9B8, W0 -000D2A 780F00 MOV W0, [W14] -111: return addChangePacket(send, command, Buffer, position, LNG_COORDINATE, ptr_packet_send); -000D2C 78031E MOV [W14], W6 -000D2E 200105 MOV #0x10, W5 -000D30 91924E MOV [W14+424], W4 -000D32 9191BE MOV [W14+422], W3 -000D34 93614E MOV.B [W14+420], W2 -000D36 91909E MOV [W14+418], W1 -000D38 780008 MOV W8, W0 -000D3A 07008F RCALL addChangePacket -000D3C 37008A BRA 0xE52 -112: break; -113: case CONSTRAINT: -114: ptr_packet_send = (Ptr_abstract_packet) & constraint; -000D3E 2091E0 MOV #0x91E, W0 -000D40 780F00 MOV W0, [W14] -115: return addChangePacket(send, command, Buffer, position, LNG_CONSTRAINT, ptr_packet_send); -000D42 78031E MOV [W14], W6 -000D44 200085 MOV #0x8, W5 -000D46 91924E MOV [W14+424], W4 -000D48 9191BE MOV [W14+422], W3 -000D4A 93614E MOV.B [W14+420], W2 -000D4C 91909E MOV [W14+418], W1 -000D4E 780008 MOV W8, W0 -000D50 070084 RCALL addChangePacket -000D52 37007F BRA 0xE52 -116: break; -117: case PARAMETER: -118: ptr_packet_send = (Ptr_abstract_packet) & parameter; -000D54 208FA0 MOV #0x8FA, W0 -000D56 780F00 MOV W0, [W14] -119: packet = addChangePacket(send, command, Buffer, position, LNG_PARAMETER, ptr_packet_send); -000D58 201AA0 MOV #0x1AA, W0 -000D5A 40000E ADD W0, W14, W0 -000D5C 78031E MOV [W14], W6 -000D5E 200245 MOV #0x24, W5 -000D60 91924E MOV [W14+424], W4 -000D62 9191BE MOV [W14+422], W3 -000D64 93614E MOV.B [W14+420], W2 -000D66 91909E MOV [W14+418], W1 -000D68 070078 RCALL addChangePacket -000D6A 78000E MOV W14, W0 -000D6C B00040 ADD #0x4, W0 -000D6E 78008E MOV W14, W1 -000D70 B01AA1 ADD #0x1AA, W1 -000D72 090064 REPEAT #0x64 -000D74 781831 MOV [W1++], [W0++] -120: update_parameter(); -000D76 0702BA RCALL update_parameter -121: return packet; -000D78 78000E MOV W14, W0 -000D7A B00040 ADD #0x4, W0 -000D7C 090064 REPEAT #0x64 -000D7E 781C30 MOV [W0++], [W8++] -000D80 B10CA8 SUB #0xCA, W8 -000D82 370067 BRA 0xE52 -122: break; -123: case VELOCITY: -124: ptr_packet_send = (Ptr_abstract_packet) & vel_rif; -000D84 209260 MOV #0x926, W0 -000D86 780F00 MOV W0, [W14] -125: return addChangePacket(send, command, Buffer, position, LNG_VELOCITY, ptr_packet_send); -000D88 78031E MOV [W14], W6 -000D8A 200085 MOV #0x8, W5 -000D8C 91924E MOV [W14+424], W4 -000D8E 9191BE MOV [W14+422], W3 -000D90 93614E MOV.B [W14+420], W2 -000D92 91909E MOV [W14+418], W1 -000D94 780008 MOV W8, W0 -000D96 070061 RCALL addChangePacket -000D98 37005C BRA 0xE52 -126: break; -127: case VELOCITY_MIS: -128: // Impossible to change velocity measure -129: return addPacket(send, command, NACK, NULL); -000D9A 93604E MOV.B [W14+420], W0 -000D9C EB0200 CLR W4 -000D9E B3C4E3 MOV #0x4E, W3 -000DA0 784100 MOV.B W0, W2 -000DA2 91909E MOV [W14+418], W1 -000DA4 780008 MOV W8, W0 -000DA6 07007E RCALL addPacket -000DA8 370054 BRA 0xE52 -130: break; -131: case ENABLE: -132: ptr_packet_send = (Ptr_abstract_packet) & enable_motors; -000DAA 2094E0 MOV #0x94E, W0 -000DAC 780F00 MOV W0, [W14] -133: return addChangePacket(send, command, Buffer, position, LNG_ENABLE, ptr_packet_send); -000DAE 78031E MOV [W14], W6 -000DB0 200025 MOV #0x2, W5 -000DB2 91924E MOV [W14+424], W4 -000DB4 9191BE MOV [W14+422], W3 -000DB6 93614E MOV.B [W14+420], W2 -000DB8 91909E MOV [W14+418], W1 -000DBA 780008 MOV W8, W0 -000DBC 07004E RCALL addChangePacket -000DBE 370049 BRA 0xE52 -134: break; -135: case TIME_PROCESS: -136: return addPacket(send, command, NACK, NULL); -000DC0 93604E MOV.B [W14+420], W0 -000DC2 EB0200 CLR W4 -000DC4 B3C4E3 MOV #0x4E, W3 -000DC6 784100 MOV.B W0, W2 -000DC8 91909E MOV [W14+418], W1 -000DCA 780008 MOV W8, W0 -000DCC 07006B RCALL addPacket -000DCE 370041 BRA 0xE52 -137: break; -138: case PRIORITY_PROCESS: -139: process_return = update_priority(); -000DD0 0705AF RCALL update_priority -000DD2 984720 MOV.B W0, [W14+2] -140: return addPacket(send, command, process_return, NULL); -000DD4 93604E MOV.B [W14+420], W0 -000DD6 EB0200 CLR W4 -000DD8 9041AE MOV.B [W14+2], W3 -000DDA 784100 MOV.B W0, W2 -000DDC 91909E MOV [W14+418], W1 -000DDE 780008 MOV W8, W0 -000DE0 070061 RCALL addPacket -000DE2 370037 BRA 0xE52 -141: break; -142: case FRQ_PROCESS: -143: process_return = update_frequency(); -000DE4 0705A9 RCALL update_frequency -000DE6 984720 MOV.B W0, [W14+2] -144: return addPacket(send, command, process_return, NULL); -000DE8 93604E MOV.B [W14+420], W0 -000DEA EB0200 CLR W4 -000DEC 9041AE MOV.B [W14+2], W3 -000DEE 784100 MOV.B W0, W2 -000DF0 91909E MOV [W14+418], W1 -000DF2 780008 MOV W8, W0 -000DF4 070057 RCALL addPacket -000DF6 37002D BRA 0xE52 -145: break; -146: case SERVICES: -147: //Save packet -148: ptr_packet_send = (Ptr_abstract_packet) & service; -000DF8 201961 MOV #0x196, W1 -000DFA 470F01 ADD W14, W1, [W14] -149: addChangePacket(send, command, Buffer, position, LNG_SERVICES, ptr_packet_send); -000DFC 201AA0 MOV #0x1AA, W0 -000DFE 40000E ADD W0, W14, W0 -000E00 78031E MOV [W14], W6 -000E02 2000B5 MOV #0xB, W5 -000E04 91924E MOV [W14+424], W4 -000E06 9191BE MOV [W14+422], W3 -000E08 93614E MOV.B [W14+420], W2 -000E0A 91909E MOV [W14+418], W1 -000E0C 070026 RCALL addChangePacket -150: //Esecution service -151: packet_send.services = services(service); -000E0E 201AA0 MOV #0x1AA, W0 -000E10 40000E ADD W0, W14, W0 -000E12 9188BE MOV [W14+406], W1 -000E14 91894E MOV [W14+408], W2 -000E16 9189DE MOV [W14+410], W3 -000E18 918A6E MOV [W14+412], W4 -000E1A 918AFE MOV [W14+414], W5 -000E1C 91930E MOV [W14+416], W6 -000E1E 070590 RCALL services -000E20 78000E MOV W14, W0 -000E22 B00CE0 ADD #0xCE, W0 -000E24 78008E MOV W14, W1 -000E26 B01AA1 ADD #0x1AA, W1 -000E28 09000A REPEAT #0xA -000E2A 785831 MOV.B [W1++], [W0++] -152: //Send return service packet -153: return buildRequestPacket(send, command, LNG_SERVICES, &packet_send); -000E2C 93604E MOV.B [W14+420], W0 -000E2E 200CE1 MOV #0xCE, W1 -000E30 40808E ADD W1, W14, W1 -000E32 780201 MOV W1, W4 -000E34 2000B3 MOV #0xB, W3 -000E36 784100 MOV.B W0, W2 -000E38 91909E MOV [W14+418], W1 -000E3A 780008 MOV W8, W0 -000E3C 0701BF RCALL buildRequestPacket -000E3E 370009 BRA 0xE52 -154: break; -155: default: -156: pkg_error(ERROR_PKG); -000E40 2FFF60 MOV #0xFFF6, W0 -000E42 0708AD RCALL pkg_error -157: return addPacket(send, command, NACK, NULL); -000E44 93604E MOV.B [W14+420], W0 -000E46 EB0200 CLR W4 -000E48 B3C4E3 MOV #0x4E, W3 -000E4A 784100 MOV.B W0, W2 -000E4C 91909E MOV [W14+418], W1 -000E4E 780008 MOV W8, W0 -000E50 070029 RCALL addPacket -158: break; -159: } -160: } -000E52 780008 MOV W8, W0 -000E54 78044F MOV [--W15], W8 -000E56 FA8000 ULNK -000E58 060000 RETURN -161: -162: information_packet_t addChangePacket(Ptr_packet send, char command, unsigned char* Buffer, unsigned int position, unsigned int length, Ptr_abstract_packet packet) { -000E5A FA000C LNK #0xC -000E5C 781F88 MOV W8, [W15++] -000E5E 780400 MOV W0, W8 -000E60 780F01 MOV W1, [W14] -000E62 984722 MOV.B W2, [W14+2] -000E64 980723 MOV W3, [W14+4] -000E66 980734 MOV W4, [W14+6] -000E68 980745 MOV W5, [W14+8] -000E6A 980756 MOV W6, [W14+10] -163: if (packet != NULL) { -000E6C 90005E MOV [W14+10], W0 -000E6E 500FE0 SUB W0, #0x0, [W15] -000E70 32000E BRA Z, 0xE8E -164: memcpy(packet->buffer, Buffer + (position * sizeof (unsigned char)), length); -000E72 9000AE MOV [W14+4], W1 -000E74 90003E MOV [W14+6], W0 -000E76 408080 ADD W1, W0, W1 -000E78 90005E MOV [W14+10], W0 -000E7A 90014E MOV [W14+8], W2 -000E7C 07FE54 RCALL _memcpy -165: return addPacket(send, command, ACK, NULL); -000E7E 90402E MOV.B [W14+2], W0 -000E80 EB0200 CLR W4 -000E82 B3C4B3 MOV #0x4B, W3 -000E84 784100 MOV.B W0, W2 -000E86 78009E MOV [W14], W1 -000E88 780008 MOV W8, W0 -000E8A 07000C RCALL addPacket -000E8C 370007 BRA 0xE9C -166: } else return addPacket(send, command, NACK, NULL); -000E8E 90402E MOV.B [W14+2], W0 -000E90 EB0200 CLR W4 -000E92 B3C4E3 MOV #0x4E, W3 -000E94 784100 MOV.B W0, W2 -000E96 78009E MOV [W14], W1 -000E98 780008 MOV W8, W0 -000E9A 070004 RCALL addPacket -167: } -000E9C 780008 MOV W8, W0 -000E9E 78044F MOV [--W15], W8 -000EA0 FA8000 ULNK -000EA2 060000 RETURN -168: -169: information_packet_t addPacket(Ptr_packet send, unsigned char command, unsigned char option, Ptr_abstract_packet packet) { -000EA4 FA0006 LNK #0x6 -000EA6 781F88 MOV W8, [W15++] -000EA8 780400 MOV W0, W8 -000EAA 780F01 MOV W1, [W14] -000EAC 984722 MOV.B W2, [W14+2] -000EAE 984733 MOV.B W3, [W14+3] -000EB0 980724 MOV W4, [W14+4] -170: switch (option) { -000EB2 90403E MOV.B [W14+3], W0 -000EB4 FB8000 ZE W0, W0 -000EB6 B90161 MUL.SU W0, #1, W2 -000EB8 2FFBD0 MOV #0xFFBD, W0 -000EBA 2FFFF1 MOV #0xFFFF, W1 -000EBC 400002 ADD W0, W2, W0 -000EBE 488083 ADDC W1, W3, W1 -000EC0 2000F2 MOV #0xF, W2 -000EC2 200003 MOV #0x0, W3 -000EC4 500F82 SUB W0, W2, [W15] -000EC6 588F83 SUBB W1, W3, [W15] -000EC8 3E001D BRA GTU, 0xF04 -000ECA 016000 BRA W0 -000ECC 37000F BRA 0xEEC -000ECE 37001A BRA 0xF04 -000ED0 370019 BRA 0xF04 -000ED2 370018 BRA 0xF04 -000ED4 370017 BRA 0xF04 -000ED6 370016 BRA 0xF04 -000ED8 370015 BRA 0xF04 -000EDA 370014 BRA 0xF04 -000EDC 37000D BRA 0xEF8 -000EDE 370012 BRA 0xF04 -000EE0 370011 BRA 0xF04 -000EE2 37000A BRA 0xEF8 -000EE4 37000F BRA 0xF04 -000EE6 37000E BRA 0xF04 -000EE8 37000D BRA 0xF04 -000EEA 370000 BRA 0xEEC -171: case REQUEST: -172: case CHANGE: -173: return addRequestPacket(send, command, packet); -000EEC 9001AE MOV [W14+4], W3 -000EEE 90412E MOV.B [W14+2], W2 -000EF0 78009E MOV [W14], W1 -000EF2 780008 MOV W8, W0 -000EF4 070013 RCALL addRequestPacket -000EF6 37000E BRA 0xF14 -174: break; -175: case ACK: -176: case NACK: -177: return addInformationPacket(send, command, option); -000EF8 9041BE MOV.B [W14+3], W3 -000EFA 90412E MOV.B [W14+2], W2 -000EFC 78009E MOV [W14], W1 -000EFE 780008 MOV W8, W0 -000F00 070136 RCALL addInformationPacket -000F02 370008 BRA 0xF14 -178: break; -179: default: -180: pkg_error(ERROR_OPTION); -000F04 2FFF70 MOV #0xFFF7, W0 -000F06 07084B RCALL pkg_error -181: return addPacket(send, command, NACK, NULL); -000F08 EB0200 CLR W4 -000F0A B3C4E3 MOV #0x4E, W3 -000F0C 90412E MOV.B [W14+2], W2 -000F0E 78009E MOV [W14], W1 -000F10 780008 MOV W8, W0 -000F12 07FFC8 RCALL addPacket -182: break; -183: } -184: } -000F14 780008 MOV W8, W0 -000F16 78044F MOV [--W15], W8 -000F18 FA8000 ULNK -000F1A 060000 RETURN -185: -186: information_packet_t addRequestPacket(Ptr_packet send, unsigned char command, Ptr_abstract_packet pkg) { -000F1C FA00CE LNK #0xCE -000F1E 781F88 MOV W8, [W15++] -000F20 780400 MOV W0, W8 -000F22 98A741 MOV W1, [W14+200] -000F24 99CF22 MOV.B W2, [W14+202] -000F26 98A763 MOV W3, [W14+204] -187: abstract_packet_t packet; -188: switch (command) { -000F28 91C82E MOV.B [W14+202], W0 -000F2A FB8000 ZE W0, W0 -000F2C B90161 MUL.SU W0, #1, W2 -000F2E 2FFBF0 MOV #0xFFBF, W0 -000F30 2FFFF1 MOV #0xFFFF, W1 -000F32 400002 ADD W0, W2, W0 -000F34 488083 ADDC W1, W3, W1 -000F36 200332 MOV #0x33, W2 -000F38 200003 MOV #0x0, W3 -000F3A 500F82 SUB W0, W2, [W15] -000F3C 588F83 SUBB W1, W3, [W15] -000F3E 3E010B BRA GTU, 0x1156 -000F40 016000 BRA W0 -000F42 37004B BRA 0xFDA -000F44 37005F BRA 0x1004 -000F46 370073 BRA 0x102E -000F48 370106 BRA 0x1156 -000F4A 3700AB BRA 0x10A2 -000F4C 370104 BRA 0x1156 -000F4E 370103 BRA 0x1156 -000F50 370102 BRA 0x1156 -000F52 370101 BRA 0x1156 -000F54 370100 BRA 0x1156 -000F56 3700FF BRA 0x1156 -000F58 3700FE BRA 0x1156 -000F5A 370097 BRA 0x108A -000F5C 3700FC BRA 0x1156 -000F5E 3700FB BRA 0x1156 -000F60 370071 BRA 0x1044 -000F62 3700F9 BRA 0x1156 -000F64 3700F8 BRA 0x1156 -000F66 3700F7 BRA 0x1156 -000F68 370078 BRA 0x105A -000F6A 3700F5 BRA 0x1156 -000F6C 370082 BRA 0x1072 -000F6E 3700F3 BRA 0x1156 -000F70 3700F2 BRA 0x1156 -000F72 3700F1 BRA 0x1156 -000F74 3700F0 BRA 0x1156 -000F76 3700EF BRA 0x1156 -000F78 3700EE BRA 0x1156 -000F7A 3700ED BRA 0x1156 -000F7C 3700EC BRA 0x1156 -000F7E 3700EB BRA 0x1156 -000F80 3700EA BRA 0x1156 -000F82 370013 BRA 0xFAA -000F84 37001E BRA 0xFC2 -000F86 3700E7 BRA 0x1156 -000F88 3700E6 BRA 0x1156 -000F8A 3700E5 BRA 0x1156 -000F8C 3700C8 BRA 0x111E -000F8E 3700E3 BRA 0x1156 -000F90 3700E2 BRA 0x1156 -000F92 3700E1 BRA 0x1156 -000F94 3700E0 BRA 0x1156 -000F96 3700DF BRA 0x1156 -000F98 3700DE BRA 0x1156 -000F9A 3700DD BRA 0x1156 -000F9C 3700DC BRA 0x1156 -000F9E 3700DB BRA 0x1156 -000FA0 3700A9 BRA 0x10F4 -000FA2 3700D9 BRA 0x1156 -000FA4 3700D8 BRA 0x1156 -000FA6 3700D0 BRA 0x1148 -000FA8 370090 BRA 0x10CA -189: case MOTOR_L: -190: packet.motor = motor_left; -000FAA 209500 MOV #0x950, W0 -000FAC BE0230 MOV.D [W0++], W4 -000FAE BE0320 MOV.D [W0--], W6 -000FB0 BE9F04 MOV.D W4, [W14++] -000FB2 BE9706 MOV.D W6, [W14--] -191: return buildRequestPacket(send, command, LNG_MOTOR, &packet); -000FB4 78020E MOV W14, W4 -000FB6 200083 MOV #0x8, W3 -000FB8 91C92E MOV.B [W14+202], W2 -000FBA 90A0CE MOV [W14+200], W1 -000FBC 780008 MOV W8, W0 -000FBE 0700FE RCALL buildRequestPacket -000FC0 3700D2 BRA 0x1166 -192: break; -193: case MOTOR_R: -194: packet.motor = motor_right; -000FC2 209580 MOV #0x958, W0 -000FC4 BE0230 MOV.D [W0++], W4 -000FC6 BE0320 MOV.D [W0--], W6 -000FC8 BE9F04 MOV.D W4, [W14++] -000FCA BE9706 MOV.D W6, [W14--] -195: return buildRequestPacket(send, command, LNG_MOTOR, &packet); -000FCC 78020E MOV W14, W4 -000FCE 200083 MOV #0x8, W3 -000FD0 91C92E MOV.B [W14+202], W2 -000FD2 90A0CE MOV [W14+200], W1 -000FD4 780008 MOV W8, W0 -000FD6 0700F2 RCALL buildRequestPacket -000FD8 3700C6 BRA 0x1166 -196: break; -197: case PID_CONTROL_L: -198: packet.pid = pid_left; -000FDA 209360 MOV #0x936, W0 -000FDC 78008E MOV W14, W1 -000FDE BE0310 MOV.D [W0], W6 -000FE0 BE8886 MOV.D W6, [W1] -000FE2 4080E4 ADD W1, #0x4, W1 -000FE4 400064 ADD W0, #0x4, W0 -000FE6 BE0110 MOV.D [W0], W2 -000FE8 BE8882 MOV.D W2, [W1] -000FEA 4080E4 ADD W1, #0x4, W1 -000FEC 400064 ADD W0, #0x4, W0 -000FEE BE0210 MOV.D [W0], W4 -000FF0 BE8884 MOV.D W4, [W1] -000FF2 4080E4 ADD W1, #0x4, W1 -000FF4 400064 ADD W0, #0x4, W0 -199: return buildRequestPacket(send, command, LNG_PID_CONTROL, &packet); -000FF6 78020E MOV W14, W4 -000FF8 2000C3 MOV #0xC, W3 -000FFA 91C92E MOV.B [W14+202], W2 -000FFC 90A0CE MOV [W14+200], W1 -000FFE 780008 MOV W8, W0 -001000 0700DD RCALL buildRequestPacket -001002 3700B1 BRA 0x1166 -200: break; -201: case PID_CONTROL_R: -202: packet.pid = pid_right; -001004 209420 MOV #0x942, W0 -001006 78008E MOV W14, W1 -001008 BE0310 MOV.D [W0], W6 -00100A BE8886 MOV.D W6, [W1] -00100C 4080E4 ADD W1, #0x4, W1 -00100E 400064 ADD W0, #0x4, W0 -001010 BE0110 MOV.D [W0], W2 -001012 BE8882 MOV.D W2, [W1] -001014 4080E4 ADD W1, #0x4, W1 -001016 400064 ADD W0, #0x4, W0 -001018 BE0210 MOV.D [W0], W4 -00101A BE8884 MOV.D W4, [W1] -00101C 4080E4 ADD W1, #0x4, W1 -00101E 400064 ADD W0, #0x4, W0 -203: return buildRequestPacket(send, command, LNG_PID_CONTROL, &packet); -001020 78020E MOV W14, W4 -001022 2000C3 MOV #0xC, W3 -001024 91C92E MOV.B [W14+202], W2 -001026 90A0CE MOV [W14+200], W1 -001028 780008 MOV W8, W0 -00102A 0700C8 RCALL buildRequestPacket -00102C 37009C BRA 0x1166 -204: break; -205: case COORDINATE: -206: packet.coordinate = coordinate; -00102E 209B85 MOV #0x9B8, W5 -001030 090007 REPEAT #0x7 -001032 781F35 MOV [W5++], [W14++] -001034 B1010E SUB #0x10, W14 -207: // protectedMemcpy(DEAD_RECK_ENABLE, &packet.coordinate, &coordinate, sizeof (coordinate)); -208: return buildRequestPacket(send, command, LNG_COORDINATE, &packet); -001036 78020E MOV W14, W4 -001038 200103 MOV #0x10, W3 -00103A 91C92E MOV.B [W14+202], W2 -00103C 90A0CE MOV [W14+200], W1 -00103E 780008 MOV W8, W0 -001040 0700BD RCALL buildRequestPacket -001042 370091 BRA 0x1166 -209: break; -210: case PARAMETER: -211: packet.parameter = parameter; -001044 208FA6 MOV #0x8FA, W6 -001046 090011 REPEAT #0x11 -001048 781F36 MOV [W6++], [W14++] -00104A B1024E SUB #0x24, W14 -212: return buildRequestPacket(send, command, LNG_PARAMETER, &packet); -00104C 78020E MOV W14, W4 -00104E 200243 MOV #0x24, W3 -001050 91C92E MOV.B [W14+202], W2 -001052 90A0CE MOV [W14+200], W1 -001054 780008 MOV W8, W0 -001056 0700B2 RCALL buildRequestPacket -001058 370086 BRA 0x1166 -213: break; -214: case CONSTRAINT: -215: packet.constraint = constraint; -00105A 2091E0 MOV #0x91E, W0 -00105C BE0230 MOV.D [W0++], W4 -00105E BE0320 MOV.D [W0--], W6 -001060 BE9F04 MOV.D W4, [W14++] -001062 BE9706 MOV.D W6, [W14--] -216: return buildRequestPacket(send, command, LNG_CONSTRAINT, &packet); -001064 78020E MOV W14, W4 -001066 200083 MOV #0x8, W3 -001068 91C92E MOV.B [W14+202], W2 -00106A 90A0CE MOV [W14+200], W1 -00106C 780008 MOV W8, W0 -00106E 0700A6 RCALL buildRequestPacket -001070 37007A BRA 0x1166 -217: break; -218: case VELOCITY: -219: packet.velocity = vel_rif; -001072 209260 MOV #0x926, W0 -001074 BE0230 MOV.D [W0++], W4 -001076 BE0320 MOV.D [W0--], W6 -001078 BE9F04 MOV.D W4, [W14++] -00107A BE9706 MOV.D W6, [W14--] -220: return buildRequestPacket(send, command, LNG_VELOCITY, &packet); -00107C 78020E MOV W14, W4 -00107E 200083 MOV #0x8, W3 -001080 91C92E MOV.B [W14+202], W2 -001082 90A0CE MOV [W14+200], W1 -001084 780008 MOV W8, W0 -001086 07009A RCALL buildRequestPacket -001088 37006E BRA 0x1166 -221: break; -222: case VELOCITY_MIS: -223: // memcpy(&packet.velocity, &vel_mis, sizeof (velocity_t)); -224: packet.velocity = vel_mis; -00108A 2092E0 MOV #0x92E, W0 -00108C BE0230 MOV.D [W0++], W4 -00108E BE0320 MOV.D [W0--], W6 -001090 BE9F04 MOV.D W4, [W14++] -001092 BE9706 MOV.D W6, [W14--] -225: return buildRequestPacket(send, command, LNG_VELOCITY, &packet); -001094 78020E MOV W14, W4 -001096 200083 MOV #0x8, W3 -001098 91C92E MOV.B [W14+202], W2 -00109A 90A0CE MOV [W14+200], W1 -00109C 780008 MOV W8, W0 -00109E 07008E RCALL buildRequestPacket -0010A0 370062 BRA 0x1166 -226: break; -227: case ENABLE: -228: packet.enable = MOTOR_ENABLE1 && MOTOR_ENABLE2; -0010A2 801660 MOV LATB, W0 -0010A4 600064 AND W0, #0x4, W0 -0010A6 500FE0 SUB W0, #0x0, [W15] -0010A8 320006 BRA Z, 0x10B6 -0010AA 801660 MOV LATB, W0 -0010AC 600068 AND W0, #0x8, W0 -0010AE 500FE0 SUB W0, #0x0, [W15] -0010B0 320002 BRA Z, 0x10B6 -0010B2 200010 MOV #0x1, W0 -0010B4 370001 BRA 0x10B8 -0010B6 EB0000 CLR W0 -0010B8 784000 MOV.B W0, W0 -0010BA 784F00 MOV.B W0, [W14] -229: return buildRequestPacket(send, command, LNG_ENABLE, &packet); -0010BC 78020E MOV W14, W4 -0010BE 200023 MOV #0x2, W3 -0010C0 91C92E MOV.B [W14+202], W2 -0010C2 90A0CE MOV [W14+200], W1 -0010C4 780008 MOV W8, W0 -0010C6 07007A RCALL buildRequestPacket -0010C8 37004E BRA 0x1166 -230: break; -231: case TIME_PROCESS: -232: packet.process = time; -0010CA 247D40 MOV #0x47D4, W0 -0010CC 78008E MOV W14, W1 -0010CE BE0310 MOV.D [W0], W6 -0010D0 BE8886 MOV.D W6, [W1] -0010D2 4080E4 ADD W1, #0x4, W1 -0010D4 400064 ADD W0, #0x4, W0 -0010D6 BE0110 MOV.D [W0], W2 -0010D8 BE8882 MOV.D W2, [W1] -0010DA 4080E4 ADD W1, #0x4, W1 -0010DC 400064 ADD W0, #0x4, W0 -0010DE BE0210 MOV.D [W0], W4 -0010E0 BE8884 MOV.D W4, [W1] -0010E2 4080E4 ADD W1, #0x4, W1 -0010E4 400064 ADD W0, #0x4, W0 -233: return buildRequestPacket(send, command, LNG_PROCESS, &packet); -0010E6 78020E MOV W14, W4 -0010E8 2000C3 MOV #0xC, W3 -0010EA 91C92E MOV.B [W14+202], W2 -0010EC 90A0CE MOV [W14+200], W1 -0010EE 780008 MOV W8, W0 -0010F0 070065 RCALL buildRequestPacket -0010F2 370039 BRA 0x1166 -234: break; -235: case PRIORITY_PROCESS: -236: packet.process = priority; -0010F4 247E00 MOV #0x47E0, W0 -0010F6 78008E MOV W14, W1 -0010F8 BE0310 MOV.D [W0], W6 -0010FA BE8886 MOV.D W6, [W1] -0010FC 4080E4 ADD W1, #0x4, W1 -0010FE 400064 ADD W0, #0x4, W0 -001100 BE0110 MOV.D [W0], W2 -001102 BE8882 MOV.D W2, [W1] -001104 4080E4 ADD W1, #0x4, W1 -001106 400064 ADD W0, #0x4, W0 -001108 BE0210 MOV.D [W0], W4 -00110A BE8884 MOV.D W4, [W1] -00110C 4080E4 ADD W1, #0x4, W1 -00110E 400064 ADD W0, #0x4, W0 -237: return buildRequestPacket(send, command, LNG_PROCESS, &packet); -001110 78020E MOV W14, W4 -001112 2000C3 MOV #0xC, W3 -001114 91C92E MOV.B [W14+202], W2 -001116 90A0CE MOV [W14+200], W1 -001118 780008 MOV W8, W0 -00111A 070050 RCALL buildRequestPacket -00111C 370024 BRA 0x1166 -238: break; -239: case FRQ_PROCESS: -240: packet.process = frequency; -00111E 247EC0 MOV #0x47EC, W0 -001120 78008E MOV W14, W1 -001122 BE0310 MOV.D [W0], W6 -001124 BE8886 MOV.D W6, [W1] -001126 4080E4 ADD W1, #0x4, W1 -001128 400064 ADD W0, #0x4, W0 -00112A BE0110 MOV.D [W0], W2 -00112C BE8882 MOV.D W2, [W1] -00112E 4080E4 ADD W1, #0x4, W1 -001130 400064 ADD W0, #0x4, W0 -001132 BE0210 MOV.D [W0], W4 -001134 BE8884 MOV.D W4, [W1] -001136 4080E4 ADD W1, #0x4, W1 -001138 400064 ADD W0, #0x4, W0 -241: return buildRequestPacket(send, command, LNG_PROCESS, &packet); -00113A 78020E MOV W14, W4 -00113C 2000C3 MOV #0xC, W3 -00113E 91C92E MOV.B [W14+202], W2 -001140 90A0CE MOV [W14+200], W1 -001142 780008 MOV W8, W0 -001144 07003B RCALL buildRequestPacket -001146 37000F BRA 0x1166 -242: break; -243: case SERVICES: -244: //TODO -245: return addPacket(send, command, NACK, NULL); -001148 EB0200 CLR W4 -00114A B3C4E3 MOV #0x4E, W3 -00114C 91C92E MOV.B [W14+202], W2 -00114E 90A0CE MOV [W14+200], W1 -001150 780008 MOV W8, W0 -001152 07FEA8 RCALL addPacket -001154 370008 BRA 0x1166 -246: break; -247: default: -248: pkg_error(ERROR_CREATE_PKG); -001156 2FFF50 MOV #0xFFF5, W0 -001158 070722 RCALL pkg_error -249: return addPacket(send, command, NACK, NULL); -00115A EB0200 CLR W4 -00115C B3C4E3 MOV #0x4E, W3 -00115E 91C92E MOV.B [W14+202], W2 -001160 90A0CE MOV [W14+200], W1 -001162 780008 MOV W8, W0 -001164 07FE9F RCALL addPacket -250: break; -251: } -252: } -001166 780008 MOV W8, W0 -001168 78044F MOV [--W15], W8 -00116A FA8000 ULNK -00116C 060000 RETURN -253: -254: information_packet_t addInformationPacket(Ptr_packet send, unsigned char command, unsigned char option) { -00116E FA00CE LNK #0xCE -001170 98A751 MOV W1, [W14+202] -001172 99CF42 MOV.B W2, [W14+204] -001174 99CF53 MOV.B W3, [W14+205] -255: send->buffer[send->length] = 1; -001176 90A0DE MOV [W14+202], W1 -001178 780091 MOV [W1], W1 -00117A 90A15E MOV [W14+202], W2 -00117C 410101 ADD W2, W1, W2 -00117E B3C011 MOV #0x1, W1 -001180 984121 MOV.B W1, [W2+2] -256: send->buffer[send->length + 1] = command; -001182 90A0DE MOV [W14+202], W1 -001184 780091 MOV [W1], W1 -001186 E80081 INC W1, W1 -001188 90A15E MOV [W14+202], W2 -00118A 410081 ADD W2, W1, W1 -00118C 91C94E MOV.B [W14+204], W2 -00118E 9840A2 MOV.B W2, [W1+2] -257: send->buffer[send->length + 2] = option; -001190 90A0DE MOV [W14+202], W1 -001192 780091 MOV [W1], W1 -001194 E88081 INC2 W1, W1 -001196 90A15E MOV [W14+202], W2 -001198 410081 ADD W2, W1, W1 -00119A 91C95E MOV.B [W14+205], W2 -00119C 9840A2 MOV.B W2, [W1+2] -258: send->length += 3; -00119E 90A0DE MOV [W14+202], W1 -0011A0 780091 MOV [W1], W1 -0011A2 408163 ADD W1, #0x3, W2 -0011A4 90A0DE MOV [W14+202], W1 -0011A6 780882 MOV W2, [W1] -259: information_packet_t option_pkg; -260: option_pkg.command = command; -0011A8 91C8CE MOV.B [W14+204], W1 -0011AA 784F01 MOV.B W1, [W14] -261: option_pkg.option = option; -0011AC 91C95E MOV.B [W14+205], W2 -0011AE 984712 MOV.B W2, [W14+1] -262: return option_pkg; -0011B0 090064 REPEAT #0x64 -0011B2 78183E MOV [W14++], [W0++] -0011B4 B10CA0 SUB #0xCA, W0 -0011B6 B10CAE SUB #0xCA, W14 -263: } -0011B8 FA8000 ULNK -0011BA 060000 RETURN -264: -265: information_packet_t buildRequestPacket(Ptr_packet send, unsigned char command, const unsigned int length, Ptr_abstract_packet packet) { -0011BC FA00D2 LNK #0xD2 -0011BE 781F88 MOV W8, [W15++] -0011C0 780400 MOV W0, W8 -0011C2 98A751 MOV W1, [W14+202] -0011C4 99CF42 MOV.B W2, [W14+204] -0011C6 98A773 MOV W3, [W14+206] -0011C8 98AF04 MOV W4, [W14+208] -266: if (packet != NULL) { -0011CA 90A80E MOV [W14+208], W0 -0011CC 500FE0 SUB W0, #0x0, [W15] -0011CE 32002B BRA Z, 0x1226 -267: information_packet_t request_packet; -268: send->buffer[send->length] = length; -0011D0 90A05E MOV [W14+202], W0 -0011D2 780090 MOV [W0], W1 -0011D4 90A07E MOV [W14+206], W0 -0011D6 784000 MOV.B W0, W0 -0011D8 90A15E MOV [W14+202], W2 -0011DA 410081 ADD W2, W1, W1 -0011DC 9840A0 MOV.B W0, [W1+2] -269: send->buffer[send->length + 1] = command; -0011DE 90A05E MOV [W14+202], W0 -0011E0 780010 MOV [W0], W0 -0011E2 E80000 INC W0, W0 -0011E4 90A0DE MOV [W14+202], W1 -0011E6 408000 ADD W1, W0, W0 -0011E8 91C8CE MOV.B [W14+204], W1 -0011EA 984021 MOV.B W1, [W0+2] -270: memcpy(send->buffer + (send->length + 2) * sizeof (unsigned char), packet->buffer, length); -0011EC 90A88E MOV [W14+208], W1 -0011EE 90A05E MOV [W14+202], W0 -0011F0 E88100 INC2 W0, W2 -0011F2 90A05E MOV [W14+202], W0 -0011F4 780010 MOV [W0], W0 -0011F6 E88000 INC2 W0, W0 -0011F8 410000 ADD W2, W0, W0 -0011FA 90A17E MOV [W14+206], W2 -0011FC 07FC94 RCALL _memcpy -271: send->length += length + 2; -0011FE 90A05E MOV [W14+202], W0 -001200 780090 MOV [W0], W1 -001202 90A07E MOV [W14+206], W0 -001204 408000 ADD W1, W0, W0 -001206 E88080 INC2 W0, W1 -001208 90A05E MOV [W14+202], W0 -00120A 780801 MOV W1, [W0] -272: request_packet.command = command; -00120C 91C84E MOV.B [W14+204], W0 -00120E 784F00 MOV.B W0, [W14] -273: request_packet.option = REQUEST; -001210 B3C520 MOV #0x52, W0 -001212 984710 MOV.B W0, [W14+1] -274: memcpy(&request_packet.packet.buffer, packet->buffer, length); -001214 90A88E MOV [W14+208], W1 -001216 E8800E INC2 W14, W0 -001218 90A17E MOV [W14+206], W2 -00121A 07FC85 RCALL _memcpy -275: return request_packet; -00121C 090064 REPEAT #0x64 -00121E 781C3E MOV [W14++], [W8++] -001220 B10CA8 SUB #0xCA, W8 -001222 B10CAE SUB #0xCA, W14 -001224 370005 BRA 0x1230 -276: } else { -277: return addInformationPacket(send, command, REQUEST); -001226 B3C523 MOV #0x52, W3 -001228 91C94E MOV.B [W14+204], W2 -00122A 90A0DE MOV [W14+202], W1 -00122C 780008 MOV W8, W0 -00122E 07FF9F RCALL addInformationPacket -278: } -279: } -001230 780008 MOV W8, W0 -001232 78044F MOV [--W15], W8 -001234 FA8000 ULNK -001236 060000 RETURN ---- C:/Users/Raffaello/Dropbox/MicrochipProject/dsPIC33MotionControl.X/motors_PID.c ------------------- -1: /******************************************************************************/ -2: /* Files to Include */ -3: /******************************************************************************/ -4: -5: /* Device header file */ -6: #if defined(__XC16__) -7: #include -8: #elif defined(__C30__) -9: #if defined(__dsPIC33E__) -10: #include -11: #elif defined(__dsPIC33F__) -12: #include -13: #endif -14: #endif -15: -16: #include /* For uint16_t definition */ -17: #include /* For true/false definition */ -18: #include -19: #include -20: #include "motors_PID.h" /* variables/params used by motorsPID.c */ -21: #include "system.h" -22: #include "user.h" -23: #include "packet.h" -24: -25: /******************************************************************************/ -26: /* Global Variable Declaration */ -27: /******************************************************************************/ -28: -29: tPID PIDstruct1; // PID motore Sinistra -30: fractional abcCoefficient1[3] __attribute__((section(".xbss, bss, xmemory"))); -31: fractional controlHistory1[3] __attribute__((section(".ybss, bss, ymemory"))); -32: fractional kCoeffs1[3]; //Coefficienti KP, KI, KD Per PID1 Sinistra -33: tPID PIDstruct2; //PID motore Destra -34: fractional abcCoefficient2[3] __attribute__((section(".xbss, bss, xmemory"))); -35: fractional controlHistory2[3] __attribute__((section(".ybss, bss, ymemory"))); -36: fractional kCoeffs2[3]; //Coefficienti KP, KI, KD Per PID2 Destra -37: -38: // ADC buffer, 2 channels (AN0, AN1), 32 bytes each, 2 x 32 = 64 bytes -39: int AdcBuffer[2][ADC_BUFF] __attribute__((space(dma), aligned(256))); -40: -41: /** */ -42: -43: volatile int PulsEncL = 0; //Buffer for deadReckoning -44: volatile int PulsEncR = 0; //Buffer for deadReckoning -45: -46: //volatile parameter_t parameter; -47: //volatile velocity_t vel_rif, vel_mis; -48: //volatile pid_control_t pid_left, pid_right; -49: //volatile enable_motor_t enable_motors; -50: -51: parameter_t parameter; -52: constraint_t constraint; -53: velocity_t vel_rif, vel_mis; -54: pid_control_t pid_left, pid_right; -55: enable_motor_t enable_motors; -56: motor_t motor_left, motor_right; -57: -58: float const_vel[3]; -59: -60: typedef struct parameter_int { -61: long radius_l; -62: long radius_r; -63: long wheelbase; -64: long k_vel_l; -65: long k_vel_r; -66: } parameter_int_t; -67: -68: k_odo_t k_odo; -69: float wheel_m; -70: -71: parameter_int_t parameter_int; -72: -73: /**/ -74: -75: extern volatile unsigned long timePeriodL; //Periodo Ruota Sinistra -76: extern volatile unsigned long timePeriodR; //Periodo Ruota Destra -77: extern volatile unsigned SIG_VELL; //Verso rotazione ruota Sinistra -78: extern volatile unsigned SIG_VELR; //Verso rotazione ruota Destra -79: -80: /******************************************************************************/ -81: /* User Functions */ -82: -83: /******************************************************************************/ -84: -85: void init_parameter(void) { -001238 FA0000 LNK #0x0 -86: parameter.radius_l = 0.04; //Raggio ruota sinistra -00123A 2D70A0 MOV #0xD70A, W0 -00123C 23D231 MOV #0x3D23, W1 -00123E 8847F0 MOV W0, 0x8FE -001240 884801 MOV W1, 0x900 -87: parameter.radius_r = 0.04; //Raggio ruota destra -001242 2D70A0 MOV #0xD70A, W0 -001244 23D231 MOV #0x3D23, W1 -001246 8847D0 MOV W0, parameter -001248 8847E1 MOV W1, 0x8FC -88: parameter.wheelbase = 0.20; //Interasse -00124A 2CCCD0 MOV #0xCCCD, W0 -00124C 23E4C1 MOV #0x3E4C, W1 -00124E 884810 MOV W0, 0x902 -001250 884821 MOV W1, 0x904 -89: parameter.k_vel_l = K_VEL; //Costante velocità -001252 20D8A0 MOV #0xD8A, W0 -001254 24BD51 MOV #0x4BD5, W1 -001256 884850 MOV W0, 0x90A -001258 884861 MOV W1, 0x90C -90: parameter.k_vel_r = K_VEL; -00125A 20D8A0 MOV #0xD8A, W0 -00125C 24BD51 MOV #0x4BD5, W1 -00125E 884830 MOV W0, 0x906 -001260 884841 MOV W1, 0x908 -91: parameter.k_ang_l = K_ANG; //Constante angolare -001262 202D30 MOV #0x2D3, W0 -001264 239371 MOV #0x3937, W1 -001266 884890 MOV W0, 0x912 -001268 8848A1 MOV W1, 0x914 -92: parameter.k_ang_r = K_ANG; -00126A 202D30 MOV #0x2D3, W0 -00126C 239371 MOV #0x3937, W1 -00126E 884870 MOV W0, 0x90E -001270 884881 MOV W1, 0x910 -93: parameter.sp_min = 0.0001; // FLT_MIN -001272 2B7170 MOV #0xB717, W0 -001274 238D11 MOV #0x38D1, W1 -001276 8848B0 MOV W0, 0x916 -001278 8848C1 MOV W1, 0x918 -94: -95: update_parameter(); -00127A 070038 RCALL update_parameter -96: -97: vel_rif.v = 0; -00127C 209262 MOV #0x926, W2 -00127E B80060 MUL.UU W0, #0, W0 -001280 BE8900 MOV.D W0, [W2] -98: vel_rif.w = 0; -001282 209262 MOV #0x926, W2 -001284 B80060 MUL.UU W0, #0, W0 -001286 980120 MOV W0, [W2+4] -001288 980131 MOV W1, [W2+6] -99: vel_mis.v = 0; -00128A 2092E2 MOV #0x92E, W2 -00128C B80060 MUL.UU W0, #0, W0 -00128E BE8900 MOV.D W0, [W2] -100: vel_mis.w = 0; -001290 2092E2 MOV #0x92E, W2 -001292 B80060 MUL.UU W0, #0, W0 -001294 980120 MOV W0, [W2+4] -001296 980131 MOV W1, [W2+6] -101: motor_left.control_vel = 0; -001298 209500 MOV #0x950, W0 -00129A EB0080 CLR W1 -00129C 980011 MOV W1, [W0+2] -102: motor_left.measure_vel = 0; -00129E 209500 MOV #0x950, W0 -0012A0 EB0080 CLR W1 -0012A2 980021 MOV W1, [W0+4] -103: motor_left.rifer_vel = 0; -0012A4 209500 MOV #0x950, W0 -0012A6 EB0080 CLR W1 -0012A8 780801 MOV W1, [W0] -104: motor_left.current = 0; -0012AA 209500 MOV #0x950, W0 -0012AC EB0080 CLR W1 -0012AE 980031 MOV W1, [W0+6] -105: motor_right.control_vel = 0; -0012B0 209580 MOV #0x958, W0 -0012B2 EB0080 CLR W1 -0012B4 980011 MOV W1, [W0+2] -106: motor_right.measure_vel = 0; -0012B6 209580 MOV #0x958, W0 -0012B8 EB0080 CLR W1 -0012BA 980021 MOV W1, [W0+4] -107: motor_right.rifer_vel = 0; -0012BC 209580 MOV #0x958, W0 -0012BE EB0080 CLR W1 -0012C0 780801 MOV W1, [W0] -108: motor_right.current = 0; -0012C2 209580 MOV #0x958, W0 -0012C4 EB0080 CLR W1 -0012C6 980031 MOV W1, [W0+6] -109: -110: constraint.max_left = 14000; -0012C8 2091E2 MOV #0x91E, W2 -0012CA 2C0000 MOV #0xC000, W0 -0012CC 2465A1 MOV #0x465A, W1 -0012CE BE8900 MOV.D W0, [W2] -111: constraint.max_right = 14000; -0012D0 2091E2 MOV #0x91E, W2 -0012D2 2C0000 MOV #0xC000, W0 -0012D4 2465A1 MOV #0x465A, W1 -0012D6 980120 MOV W0, [W2+4] -0012D8 980131 MOV W1, [W2+6] -112: -113: const_vel[0] = 1; -0012DA 200000 MOV #0x0, W0 -0012DC 23F801 MOV #0x3F80, W1 -0012DE 884B00 MOV W0, const_vel -0012E0 884B11 MOV W1, 0x962 -114: -115: enable_motors = false; -0012E2 2094E1 MOV #0x94E, W1 -0012E4 EB4000 CLR.B W0 -0012E6 784880 MOV.B W0, [W1] -116: } -0012E8 FA8000 ULNK -0012EA 060000 RETURN -117: -118: void update_parameter(void) { -0012EC FA0000 LNK #0x0 -119: parameter_int.radius_l = ((int) (parameter.radius_l * 1000.0)); -0012EE 8047F0 MOV 0x8FE, W0 -0012F0 804801 MOV 0x900, W1 -0012F2 200002 MOV #0x0, W2 -0012F4 2447A3 MOV #0x447A, W3 -0012F6 07FB0E RCALL ___mulsf3 -0012F8 07FA43 RCALL ___fixsfsi -0012FA 780000 MOV W0, W0 -0012FC DE80CF ASR W0, #15, W1 -0012FE 884BC0 MOV W0, parameter_int -001300 884BD1 MOV W1, 0x97A -120: parameter_int.radius_r = ((int) (parameter.radius_r * 1000.0)); -001302 8047D0 MOV parameter, W0 -001304 8047E1 MOV 0x8FC, W1 -001306 200002 MOV #0x0, W2 -001308 2447A3 MOV #0x447A, W3 -00130A 07FB04 RCALL ___mulsf3 -00130C 07FA39 RCALL ___fixsfsi -00130E 780000 MOV W0, W0 -001310 DE80CF ASR W0, #15, W1 -001312 884BE0 MOV W0, 0x97C -001314 884BF1 MOV W1, 0x97E -121: parameter_int.wheelbase = ((int) (parameter.wheelbase * 1000.0)); -001316 804810 MOV 0x902, W0 -001318 804821 MOV 0x904, W1 -00131A 200002 MOV #0x0, W2 -00131C 2447A3 MOV #0x447A, W3 -00131E 07FAFA RCALL ___mulsf3 -001320 07FA2F RCALL ___fixsfsi -001322 780000 MOV W0, W0 -001324 DE80CF ASR W0, #15, W1 -001326 884C00 MOV W0, 0x980 -001328 884C11 MOV W1, 0x982 -122: parameter_int.k_vel_r = parameter.k_vel_r; -00132A 804830 MOV 0x906, W0 -00132C 804841 MOV 0x908, W1 -00132E 07FA28 RCALL ___fixsfsi -001330 884C40 MOV W0, 0x988 -001332 884C51 MOV W1, 0x98A -123: parameter_int.k_vel_l = parameter.k_vel_l; -001334 804850 MOV 0x90A, W0 -001336 804861 MOV 0x90C, W1 -001338 07FA23 RCALL ___fixsfsi -00133A 884C20 MOV W0, 0x984 -00133C 884C31 MOV W1, 0x986 -124: k_odo.k_left = parameter.radius_l * parameter.k_ang_l; -00133E 8047F4 MOV 0x8FE, W4 -001340 804805 MOV 0x900, W5 -001342 804890 MOV 0x912, W0 -001344 8048A1 MOV 0x914, W1 -001346 BE0100 MOV.D W0, W2 -001348 BE0004 MOV.D W4, W0 -00134A 07FAE4 RCALL ___mulsf3 -00134C 2096C2 MOV #0x96C, W2 -00134E BE8900 MOV.D W0, [W2] -125: k_odo.k_right = parameter.radius_r * parameter.k_ang_r; -001350 8047D4 MOV parameter, W4 -001352 8047E5 MOV 0x8FC, W5 -001354 804870 MOV 0x90E, W0 -001356 804881 MOV 0x910, W1 -001358 BE0100 MOV.D W0, W2 -00135A BE0004 MOV.D W4, W0 -00135C 07FADB RCALL ___mulsf3 -00135E 2096C2 MOV #0x96C, W2 -001360 980120 MOV W0, [W2+4] -001362 980131 MOV W1, [W2+6] -126: wheel_m = parameter.wheelbase / 2; -001364 804810 MOV 0x902, W0 -001366 804821 MOV 0x904, W1 -001368 200002 MOV #0x0, W2 -00136A 240003 MOV #0x4000, W3 -00136C 07F9B4 RCALL ___divsf3 -00136E 884BA0 MOV W0, wheel_m -001370 884BB1 MOV W1, 0x976 -127: } -001372 FA8000 ULNK -001374 060000 RETURN -128: -129: void init_pid_control(void) { -001376 FA0000 LNK #0x0 -130: pid_left.kp = 0.6; -001378 2999A0 MOV #0x999A, W0 -00137A 23F191 MOV #0x3F19, W1 -00137C 8849B0 MOV W0, pid_left -00137E 8849C1 MOV W1, 0x938 -131: pid_left.ki = 0.7; -001380 233330 MOV #0x3333, W0 -001382 23F331 MOV #0x3F33, W1 -001384 8849D0 MOV W0, 0x93A -001386 8849E1 MOV W1, 0x93C -132: pid_left.kd = 0.1; -001388 2CCCD0 MOV #0xCCCD, W0 -00138A 23DCC1 MOV #0x3DCC, W1 -00138C 8849F0 MOV W0, 0x93E -00138E 884A01 MOV W1, 0x940 -133: pid_right.kp = 0.6; -001390 2999A0 MOV #0x999A, W0 -001392 23F191 MOV #0x3F19, W1 -001394 884A10 MOV W0, pid_right -001396 884A21 MOV W1, 0x944 -134: pid_right.ki = 0.7; -001398 233330 MOV #0x3333, W0 -00139A 23F331 MOV #0x3F33, W1 -00139C 884A30 MOV W0, 0x946 -00139E 884A41 MOV W1, 0x948 -135: pid_right.kd = 0.1; -0013A0 2CCCD0 MOV #0xCCCD, W0 -0013A2 23DCC1 MOV #0x3DCC, W1 -0013A4 884A50 MOV W0, 0x94A -0013A6 884A61 MOV W1, 0x94C -136: } -0013A8 FA8000 ULNK -0013AA 060000 RETURN -137: -138: void update_pid_l(void) { -0013AC FA0000 LNK #0x0 -0013AE 781F88 MOV W8, [W15++] -139: kCoeffs1[0] = Q15(pid_left.kp); //0.5 -0013B0 8049B0 MOV pid_left, W0 -0013B2 8049C1 MOV 0x938, W1 -0013B4 B3C018 MOV #0x1, W8 -0013B6 B81160 MUL.UU W2, #0, W2 -0013B8 07F9DF RCALL ___lesf2 -0013BA 500FE0 SUB W0, #0x0, [W15] -0013BC 350001 BRA LT, 0x13C0 -0013BE EB4400 CLR.B W8 -0013C0 544FE0 SUB.B W8, #0x0, [W15] -0013C2 32000B BRA Z, 0x13DA -0013C4 8049B0 MOV pid_left, W0 -0013C6 8049C1 MOV 0x938, W1 -0013C8 200002 MOV #0x0, W2 -0013CA 247003 MOV #0x4700, W3 -0013CC 07FAA3 RCALL ___mulsf3 -0013CE 200002 MOV #0x0, W2 -0013D0 23F003 MOV #0x3F00, W3 -0013D2 07F921 RCALL ___subsf3 -0013D4 07F9D5 RCALL ___fixsfsi -0013D6 780000 MOV W0, W0 -0013D8 37000A BRA 0x13EE -0013DA 8049B0 MOV pid_left, W0 -0013DC 8049C1 MOV 0x938, W1 -0013DE 2FE002 MOV #0xFE00, W2 -0013E0 246FF3 MOV #0x46FF, W3 -0013E2 07FA98 RCALL ___mulsf3 -0013E4 200002 MOV #0x0, W2 -0013E6 23F003 MOV #0x3F00, W3 -0013E8 07F917 RCALL ___addsf3 -0013EA 07F9CA RCALL ___fixsfsi -0013EC 780000 MOV W0, W0 -0013EE 884720 MOV W0, kCoeffs1 -140: kCoeffs1[1] = Q15(pid_left.ki); //0.6 -0013F0 8049D0 MOV 0x93A, W0 -0013F2 8049E1 MOV 0x93C, W1 -0013F4 B3C018 MOV #0x1, W8 -0013F6 B81160 MUL.UU W2, #0, W2 -0013F8 07F9BF RCALL ___lesf2 -0013FA 500FE0 SUB W0, #0x0, [W15] -0013FC 350001 BRA LT, 0x1400 -0013FE EB4400 CLR.B W8 -001400 544FE0 SUB.B W8, #0x0, [W15] -001402 32000B BRA Z, 0x141A -001404 8049D0 MOV 0x93A, W0 -001406 8049E1 MOV 0x93C, W1 -001408 200002 MOV #0x0, W2 -00140A 247003 MOV #0x4700, W3 -00140C 07FA83 RCALL ___mulsf3 -00140E 200002 MOV #0x0, W2 -001410 23F003 MOV #0x3F00, W3 -001412 07F901 RCALL ___subsf3 -001414 07F9B5 RCALL ___fixsfsi -001416 780000 MOV W0, W0 -001418 37000A BRA 0x142E -00141A 8049D0 MOV 0x93A, W0 -00141C 8049E1 MOV 0x93C, W1 -00141E 2FE002 MOV #0xFE00, W2 -001420 246FF3 MOV #0x46FF, W3 -001422 07FA78 RCALL ___mulsf3 -001424 200002 MOV #0x0, W2 -001426 23F003 MOV #0x3F00, W3 -001428 07F8F7 RCALL ___addsf3 -00142A 07F9AA RCALL ___fixsfsi -00142C 780000 MOV W0, W0 -00142E 884730 MOV W0, 0x8E6 -141: kCoeffs1[2] = Q15(pid_left.kp); //0.0 -001430 8049B0 MOV pid_left, W0 -001432 8049C1 MOV 0x938, W1 -001434 B3C018 MOV #0x1, W8 -001436 B81160 MUL.UU W2, #0, W2 -001438 07F99F RCALL ___lesf2 -00143A 500FE0 SUB W0, #0x0, [W15] -00143C 350001 BRA LT, 0x1440 -00143E EB4400 CLR.B W8 -001440 544FE0 SUB.B W8, #0x0, [W15] -001442 32000B BRA Z, 0x145A -001444 8049B0 MOV pid_left, W0 -001446 8049C1 MOV 0x938, W1 -001448 200002 MOV #0x0, W2 -00144A 247003 MOV #0x4700, W3 -00144C 07FA63 RCALL ___mulsf3 -00144E 200002 MOV #0x0, W2 -001450 23F003 MOV #0x3F00, W3 -001452 07F8E1 RCALL ___subsf3 -001454 07F995 RCALL ___fixsfsi -001456 780000 MOV W0, W0 -001458 37000A BRA 0x146E -00145A 8049B0 MOV pid_left, W0 -00145C 8049C1 MOV 0x938, W1 -00145E 2FE002 MOV #0xFE00, W2 -001460 246FF3 MOV #0x46FF, W3 -001462 07FA58 RCALL ___mulsf3 -001464 200002 MOV #0x0, W2 -001466 23F003 MOV #0x3F00, W3 -001468 07F8D7 RCALL ___addsf3 -00146A 07F98A RCALL ___fixsfsi -00146C 780000 MOV W0, W0 -00146E 884740 MOV W0, 0x8E8 -142: InitPid1(); //Init PIDL -001470 070069 RCALL InitPid1 -143: } -001472 78044F MOV [--W15], W8 -001474 FA8000 ULNK -001476 060000 RETURN -144: -145: void update_pid_r(void) { -001478 FA0000 LNK #0x0 -00147A 781F88 MOV W8, [W15++] -146: kCoeffs2[0] = Q15(pid_right.kp); -00147C 804A10 MOV pid_right, W0 -00147E 804A21 MOV 0x944, W1 -001480 B3C018 MOV #0x1, W8 -001482 B81160 MUL.UU W2, #0, W2 -001484 07F979 RCALL ___lesf2 -001486 500FE0 SUB W0, #0x0, [W15] -001488 350001 BRA LT, 0x148C -00148A EB4400 CLR.B W8 -00148C 544FE0 SUB.B W8, #0x0, [W15] -00148E 32000B BRA Z, 0x14A6 -001490 804A10 MOV pid_right, W0 -001492 804A21 MOV 0x944, W1 -001494 200002 MOV #0x0, W2 -001496 247003 MOV #0x4700, W3 -001498 07FA3D RCALL ___mulsf3 -00149A 200002 MOV #0x0, W2 -00149C 23F003 MOV #0x3F00, W3 -00149E 07F8BB RCALL ___subsf3 -0014A0 07F96F RCALL ___fixsfsi -0014A2 780000 MOV W0, W0 -0014A4 37000A BRA 0x14BA -0014A6 804A10 MOV pid_right, W0 -0014A8 804A21 MOV 0x944, W1 -0014AA 2FE002 MOV #0xFE00, W2 -0014AC 246FF3 MOV #0x46FF, W3 -0014AE 07FA32 RCALL ___mulsf3 -0014B0 200002 MOV #0x0, W2 -0014B2 23F003 MOV #0x3F00, W3 -0014B4 07F8B1 RCALL ___addsf3 -0014B6 07F964 RCALL ___fixsfsi -0014B8 780000 MOV W0, W0 -0014BA 8847A0 MOV W0, kCoeffs2 -147: kCoeffs2[1] = Q15(pid_right.ki); -0014BC 804A30 MOV 0x946, W0 -0014BE 804A41 MOV 0x948, W1 -0014C0 B3C018 MOV #0x1, W8 -0014C2 B81160 MUL.UU W2, #0, W2 -0014C4 07F959 RCALL ___lesf2 -0014C6 500FE0 SUB W0, #0x0, [W15] -0014C8 350001 BRA LT, 0x14CC -0014CA EB4400 CLR.B W8 -0014CC 544FE0 SUB.B W8, #0x0, [W15] -0014CE 32000B BRA Z, 0x14E6 -0014D0 804A30 MOV 0x946, W0 -0014D2 804A41 MOV 0x948, W1 -0014D4 200002 MOV #0x0, W2 -0014D6 247003 MOV #0x4700, W3 -0014D8 07FA1D RCALL ___mulsf3 -0014DA 200002 MOV #0x0, W2 -0014DC 23F003 MOV #0x3F00, W3 -0014DE 07F89B RCALL ___subsf3 -0014E0 07F94F RCALL ___fixsfsi -0014E2 780000 MOV W0, W0 -0014E4 37000A BRA 0x14FA -0014E6 804A30 MOV 0x946, W0 -0014E8 804A41 MOV 0x948, W1 -0014EA 2FE002 MOV #0xFE00, W2 -0014EC 246FF3 MOV #0x46FF, W3 -0014EE 07FA12 RCALL ___mulsf3 -0014F0 200002 MOV #0x0, W2 -0014F2 23F003 MOV #0x3F00, W3 -0014F4 07F891 RCALL ___addsf3 -0014F6 07F944 RCALL ___fixsfsi -0014F8 780000 MOV W0, W0 -0014FA 8847B0 MOV W0, 0x8F6 -148: kCoeffs2[2] = Q15(pid_right.kd); -0014FC 804A50 MOV 0x94A, W0 -0014FE 804A61 MOV 0x94C, W1 -001500 B3C018 MOV #0x1, W8 -001502 B81160 MUL.UU W2, #0, W2 -001504 07F939 RCALL ___lesf2 -001506 500FE0 SUB W0, #0x0, [W15] -001508 350001 BRA LT, 0x150C -00150A EB4400 CLR.B W8 -00150C 544FE0 SUB.B W8, #0x0, [W15] -00150E 32000B BRA Z, 0x1526 -001510 804A50 MOV 0x94A, W0 -001512 804A61 MOV 0x94C, W1 -001514 200002 MOV #0x0, W2 -001516 247003 MOV #0x4700, W3 -001518 07F9FD RCALL ___mulsf3 -00151A 200002 MOV #0x0, W2 -00151C 23F003 MOV #0x3F00, W3 -00151E 07F87B RCALL ___subsf3 -001520 07F92F RCALL ___fixsfsi -001522 780000 MOV W0, W0 -001524 37000A BRA 0x153A -001526 804A50 MOV 0x94A, W0 -001528 804A61 MOV 0x94C, W1 -00152A 2FE002 MOV #0xFE00, W2 -00152C 246FF3 MOV #0x46FF, W3 -00152E 07F9F2 RCALL ___mulsf3 -001530 200002 MOV #0x0, W2 -001532 23F003 MOV #0x3F00, W3 -001534 07F871 RCALL ___addsf3 -001536 07F924 RCALL ___fixsfsi -001538 780000 MOV W0, W0 -00153A 8847C0 MOV W0, 0x8F8 -149: InitPid2(); //Init PIDR -00153C 07000F RCALL InitPid2 -150: } -00153E 78044F MOV [--W15], W8 -001540 FA8000 ULNK -001542 060000 RETURN -151: -152: void InitPid1(void) { -001544 FA0000 LNK #0x0 -153: //Initialize the PID data structure: PIDstruct -154: //Set up pointer to derived coefficients -155: PIDstruct1.abcCoefficients = &abcCoefficient1[0]; -001546 208000 MOV #0x800, W0 -001548 8846D0 MOV W0, PIDstruct1 -156: //Set up pointer to controller history samples -157: PIDstruct1.controlHistory = &controlHistory1[0]; -00154A 247C80 MOV #0x47C8, W0 -00154C 8846E0 MOV W0, 0x8DC -158: // Clear the controler history and the controller output -159: PIDInit(&PIDstruct1); -00154E 208DA0 MOV #0x8DA, W0 -001550 07F811 RCALL _PIDInit -160: //Derive the a,b, & c coefficients from the Kp, Ki & Kd -161: PIDCoeffCalc(&kCoeffs1[0], &PIDstruct1); -001552 208DA1 MOV #0x8DA, W1 -001554 208E40 MOV #0x8E4, W0 -001556 07F819 RCALL _PIDCoeffCalc -162: } -001558 FA8000 ULNK -00155A 060000 RETURN -163: -164: void InitPid2(void) { -00155C FA0000 LNK #0x0 -165: //Initialize the PID data structure: PIDstruct -166: //Set up pointer to derived coefficients -167: PIDstruct2.abcCoefficients = &abcCoefficient2[0]; -00155E 208060 MOV #0x806, W0 -001560 884750 MOV W0, PIDstruct2 -168: //Set up pointer to controller history samples -169: PIDstruct2.controlHistory = &controlHistory2[0]; -001562 247CE0 MOV #0x47CE, W0 -001564 884760 MOV W0, 0x8EC -170: // Clear the controler history and the controller output -171: PIDInit(&PIDstruct2); -001566 208EA0 MOV #0x8EA, W0 -001568 07F805 RCALL _PIDInit -172: //Derive the a,b, & c coefficients from the Kp, Ki & Kd -173: PIDCoeffCalc(&kCoeffs2[0], &PIDstruct2); -00156A 208EA1 MOV #0x8EA, W1 -00156C 208F40 MOV #0x8F4, W0 -00156E 07F80D RCALL _PIDCoeffCalc -174: } -001570 FA8000 ULNK -001572 060000 RETURN -175: -176: int Velocity(void) { -001574 FA000E LNK #0xE -001576 BE9F88 MOV.D W8, [W15++] -001578 BE9F8A MOV.D W10, [W15++] -177: unsigned int t = TMR1; // Timing function -00157A 800800 MOV TMR1, W0 -00157C 780F00 MOV W0, [W14] -178: int rifer_con_left, rifer_con_right; -179: MOTOR_ENABLE1 = enable_motors; -00157E 2094E0 MOV #0x94E, W0 -001580 784010 MOV.B [W0], W0 -001582 604061 AND.B W0, #0x1, W0 -001584 FB8000 ZE W0, W0 -001586 600061 AND W0, #0x1, W0 -001588 DD0042 SL W0, #2, W0 -00158A 801662 MOV LATB, W2 -00158C 2FFFB1 MOV #0xFFFB, W1 -00158E 610081 AND W2, W1, W1 -001590 708000 IOR W1, W0, W0 -001592 881660 MOV W0, LATB -180: MOTOR_ENABLE2 = enable_motors; -001594 2094E0 MOV #0x94E, W0 -001596 784010 MOV.B [W0], W0 -001598 604061 AND.B W0, #0x1, W0 -00159A FB8000 ZE W0, W0 -00159C 600061 AND W0, #0x1, W0 -00159E DD0043 SL W0, #3, W0 -0015A0 801662 MOV LATB, W2 -0015A2 2FFF71 MOV #0xFFF7, W1 -0015A4 610081 AND W2, W1, W1 -0015A6 708000 IOR W1, W0, W0 -0015A8 881660 MOV W0, LATB -181: long vel_v = (parameter_int.radius_r * motor_right.measure_vel + parameter_int.radius_l * motor_left.measure_vel) / 2; -0015AA 804BE2 MOV 0x97C, W2 -0015AC 804BF3 MOV 0x97E, W3 -0015AE 209580 MOV #0x958, W0 -0015B0 900020 MOV [W0+4], W0 -0015B2 DE80CF ASR W0, #15, W1 -0015B4 B99A00 MUL.SS W3, W0, W4 -0015B6 780204 MOV W4, W4 -0015B8 B98B02 MUL.SS W1, W2, W6 -0015BA 780286 MOV W6, W5 -0015BC 420205 ADD W4, W5, W4 -0015BE B81100 MUL.UU W2, W0, W2 -0015C0 420203 ADD W4, W3, W4 -0015C2 780184 MOV W4, W3 -0015C4 804BC4 MOV parameter_int, W4 -0015C6 804BD5 MOV 0x97A, W5 -0015C8 209500 MOV #0x950, W0 -0015CA 900020 MOV [W0+4], W0 -0015CC DE80CF ASR W0, #15, W1 -0015CE B9AB00 MUL.SS W5, W0, W6 -0015D0 780306 MOV W6, W6 -0015D2 B98C04 MUL.SS W1, W4, W8 -0015D4 780388 MOV W8, W7 -0015D6 430307 ADD W6, W7, W6 -0015D8 B82000 MUL.UU W4, W0, W0 -0015DA 430301 ADD W6, W1, W6 -0015DC 780086 MOV W6, W1 -0015DE 400002 ADD W0, W2, W0 -0015E0 488083 ADDC W1, W3, W1 -0015E2 DE094F LSR W1, #15, W2 -0015E4 200003 MOV #0x0, W3 -0015E6 400002 ADD W0, W2, W0 -0015E8 488083 ADDC W1, W3, W1 -0015EA D18081 ASR W1, W1 -0015EC D38000 RRC W0, W0 -0015EE 980710 MOV W0, [W14+2] -0015F0 980721 MOV W1, [W14+4] -182: long vel_w = -(parameter_int.radius_r * motor_right.measure_vel - parameter_int.radius_l * motor_left.measure_vel) / (2 * parameter_int.wheelbase); -0015F2 804BC2 MOV parameter_int, W2 -0015F4 804BD3 MOV 0x97A, W3 -0015F6 209500 MOV #0x950, W0 -0015F8 900020 MOV [W0+4], W0 -0015FA DE80CF ASR W0, #15, W1 -0015FC B99A00 MUL.SS W3, W0, W4 -0015FE 780204 MOV W4, W4 -001600 B98B02 MUL.SS W1, W2, W6 -001602 780286 MOV W6, W5 -001604 420205 ADD W4, W5, W4 -001606 B81100 MUL.UU W2, W0, W2 -001608 420203 ADD W4, W3, W4 -00160A 780184 MOV W4, W3 -00160C 804BE4 MOV 0x97C, W4 -00160E 804BF5 MOV 0x97E, W5 -001610 209580 MOV #0x958, W0 -001612 900020 MOV [W0+4], W0 -001614 DE80CF ASR W0, #15, W1 -001616 B9AB00 MUL.SS W5, W0, W6 -001618 780306 MOV W6, W6 -00161A B98C04 MUL.SS W1, W4, W8 -00161C 780388 MOV W8, W7 -00161E 430307 ADD W6, W7, W6 -001620 B82000 MUL.UU W4, W0, W0 -001622 430301 ADD W6, W1, W6 -001624 780086 MOV W6, W1 -001626 510200 SUB W2, W0, W4 -001628 598281 SUBB W3, W1, W5 -00162A 804C00 MOV 0x980, W0 -00162C 804C11 MOV 0x982, W1 -00162E 400000 ADD W0, W0, W0 -001630 488081 ADDC W1, W1, W1 -001632 BE0100 MOV.D W0, W2 -001634 BE0004 MOV.D W4, W0 -001636 07F891 RCALL ___divsi3 -001638 980730 MOV W0, [W14+6] -00163A 980741 MOV W1, [W14+8] -183: vel_mis.v = ((float) vel_v / 1000000); -00163C 90001E MOV [W14+2], W0 -00163E 9000AE MOV [W14+4], W1 -001640 07F8C0 RCALL ___floatsisf -001642 224002 MOV #0x2400, W2 -001644 249743 MOV #0x4974, W3 -001646 07F847 RCALL ___divsf3 -001648 2092E2 MOV #0x92E, W2 -00164A BE8900 MOV.D W0, [W2] -184: vel_mis.w = ((float) vel_w / 1000); -00164C 90003E MOV [W14+6], W0 -00164E 9000CE MOV [W14+8], W1 -001650 07F8B8 RCALL ___floatsisf -001652 200002 MOV #0x0, W2 -001654 2447A3 MOV #0x447A, W3 -001656 07F83F RCALL ___divsf3 -001658 2092E2 MOV #0x92E, W2 -00165A 980120 MOV W0, [W2+4] -00165C 980131 MOV W1, [W2+6] -185: -186: rifer_con_left = (int) ((1 / parameter.radius_r)*(vel_rif.v + (parameter.wheelbase * vel_rif.w))*1000); -00165E 8047D0 MOV parameter, W0 -001660 8047E1 MOV 0x8FC, W1 -001662 BE0100 MOV.D W0, W2 -001664 200000 MOV #0x0, W0 -001666 23F801 MOV #0x3F80, W1 -001668 07F836 RCALL ___divsf3 -00166A BE0400 MOV.D W0, W8 -00166C 209260 MOV #0x926, W0 -00166E BE0510 MOV.D [W0], W10 -001670 804814 MOV 0x902, W4 -001672 804825 MOV 0x904, W5 -001674 209260 MOV #0x926, W0 -001676 9000B0 MOV [W0+6], W1 -001678 900020 MOV [W0+4], W0 -00167A BE0100 MOV.D W0, W2 -00167C BE0004 MOV.D W4, W0 -00167E 07F94A RCALL ___mulsf3 -001680 BE0100 MOV.D W0, W2 -001682 BE000A MOV.D W10, W0 -001684 07F7C9 RCALL ___addsf3 -001686 BE0100 MOV.D W0, W2 -001688 BE0008 MOV.D W8, W0 -00168A 07F944 RCALL ___mulsf3 -00168C 200002 MOV #0x0, W2 -00168E 2447A3 MOV #0x447A, W3 -001690 07F941 RCALL ___mulsf3 -001692 07F876 RCALL ___fixsfsi -001694 980750 MOV W0, [W14+10] -187: rifer_con_right = (int) ((1 / parameter.radius_l)*(vel_rif.v - (parameter.wheelbase * vel_rif.w))*1000); -001696 8047F0 MOV 0x8FE, W0 -001698 804801 MOV 0x900, W1 -00169A BE0100 MOV.D W0, W2 -00169C 200000 MOV #0x0, W0 -00169E 23F801 MOV #0x3F80, W1 -0016A0 07F81A RCALL ___divsf3 -0016A2 BE0400 MOV.D W0, W8 -0016A4 209260 MOV #0x926, W0 -0016A6 BE0510 MOV.D [W0], W10 -0016A8 804814 MOV 0x902, W4 -0016AA 804825 MOV 0x904, W5 -0016AC 209260 MOV #0x926, W0 -0016AE 9000B0 MOV [W0+6], W1 -0016B0 900020 MOV [W0+4], W0 -0016B2 BE0100 MOV.D W0, W2 -0016B4 BE0004 MOV.D W4, W0 -0016B6 07F92E RCALL ___mulsf3 -0016B8 BE0100 MOV.D W0, W2 -0016BA BE000A MOV.D W10, W0 -0016BC 07F7AC RCALL ___subsf3 -0016BE BE0100 MOV.D W0, W2 -0016C0 BE0008 MOV.D W8, W0 -0016C2 07F928 RCALL ___mulsf3 -0016C4 200002 MOV #0x0, W2 -0016C6 2447A3 MOV #0x447A, W3 -0016C8 07F925 RCALL ___mulsf3 -0016CA 07F85A RCALL ___fixsfsi -0016CC 980760 MOV W0, [W14+12] -188: // Calculating constraint -189: if (abs(rifer_con_left) > constraint.max_left) { -0016CE 90005E MOV [W14+10], W0 -0016D0 500FE0 SUB W0, #0x0, [W15] -0016D2 3D0001 BRA GE, 0x16D6 -0016D4 EA0000 NEG W0, W0 -0016D6 DE80CF ASR W0, #15, W1 -0016D8 07F874 RCALL ___floatsisf -0016DA BE0200 MOV.D W0, W4 -0016DC 2091E0 MOV #0x91E, W0 -0016DE BE0010 MOV.D [W0], W0 -0016E0 B3C018 MOV #0x1, W8 -0016E2 BE0100 MOV.D W0, W2 -0016E4 BE0004 MOV.D W4, W0 -0016E6 07F84A RCALL ___gtsf2 -0016E8 500FE0 SUB W0, #0x0, [W15] -0016EA 3C0001 BRA GT, 0x16EE -0016EC EB4400 CLR.B W8 -0016EE 544FE0 SUB.B W8, #0x0, [W15] -0016F0 320007 BRA Z, 0x1700 -190: motor_left.rifer_vel = constraint.max_left; -0016F2 2091E0 MOV #0x91E, W0 -0016F4 BE0010 MOV.D [W0], W0 -0016F6 07F844 RCALL ___fixsfsi -0016F8 780080 MOV W0, W1 -0016FA 209500 MOV #0x950, W0 -0016FC 780801 MOV W1, [W0] -0016FE 370003 BRA 0x1706 -191: } else { -192: motor_left.rifer_vel = rifer_con_left; -001700 209500 MOV #0x950, W0 -001702 9000DE MOV [W14+10], W1 -001704 780801 MOV W1, [W0] -193: } -194: if (abs(rifer_con_right) > constraint.max_right) { -001706 90006E MOV [W14+12], W0 -001708 500FE0 SUB W0, #0x0, [W15] -00170A 3D0001 BRA GE, 0x170E -00170C EA0000 NEG W0, W0 -00170E DE80CF ASR W0, #15, W1 -001710 07F858 RCALL ___floatsisf -001712 BE0200 MOV.D W0, W4 -001714 2091E0 MOV #0x91E, W0 -001716 9000B0 MOV [W0+6], W1 -001718 900020 MOV [W0+4], W0 -00171A B3C018 MOV #0x1, W8 -00171C BE0100 MOV.D W0, W2 -00171E BE0004 MOV.D W4, W0 -001720 07F82D RCALL ___gtsf2 -001722 500FE0 SUB W0, #0x0, [W15] -001724 3C0001 BRA GT, 0x1728 -001726 EB4400 CLR.B W8 -001728 544FE0 SUB.B W8, #0x0, [W15] -00172A 320008 BRA Z, 0x173C -195: motor_right.rifer_vel = constraint.max_right; -00172C 2091E0 MOV #0x91E, W0 -00172E 9000B0 MOV [W0+6], W1 -001730 900020 MOV [W0+4], W0 -001732 07F826 RCALL ___fixsfsi -001734 780080 MOV W0, W1 -001736 209580 MOV #0x958, W0 -001738 780801 MOV W1, [W0] -00173A 370003 BRA 0x1742 -196: } else { -197: motor_right.rifer_vel = rifer_con_right; -00173C 209580 MOV #0x958, W0 -00173E 9000EE MOV [W14+12], W1 -001740 780801 MOV W1, [W0] -198: } -199: return TMR1 - t; // Time of esecution -001742 800800 MOV TMR1, W0 -001744 50001E SUB W0, [W14], W0 -200: } -001746 BE054F MOV.D [--W15], W10 -001748 BE044F MOV.D [--W15], W8 -00174A FA8000 ULNK -00174C 060000 RETURN -201: -202: int MotorPIDL(void) { -00174E FA0008 LNK #0x8 -001750 BE9F88 MOV.D W8, [W15++] -001752 BE9F8A MOV.D W10, [W15++] -203: unsigned int t = TMR1; //Timing funzione -001754 800800 MOV TMR1, W0 -001756 780F00 MOV W0, [W14] -204: unsigned long timePeriodLtmp; //Variabili temporanee Periodo -205: int SIG_VELLtmp; //Segno velocità -206: -207: timePeriodLtmp = timePeriodL; //Salvataggio TimerPeriod -001758 804D60 MOV 0x9AC, W0 -00175A 804D71 MOV 0x9AE, W1 -00175C 980710 MOV W0, [W14+2] -00175E 980721 MOV W1, [W14+4] -208: timePeriodL = 0; //Pulizia variabile -001760 B80060 MUL.UU W0, #0, W0 -001762 884D60 MOV W0, 0x9AC -001764 884D71 MOV W1, 0x9AE -209: SIG_VELLtmp = SIG_VELL; //Salvataggio Segno velocità -001766 804DA0 MOV 0x9B4, W0 -001768 980730 MOV W0, [W14+6] -210: SIG_VELL = 0; //Pulizia variabile -00176A EB0000 CLR W0 -00176C 884DA0 MOV W0, 0x9B4 -211: motor_left.measure_vel = 0; //Flush variaibile velocità R -00176E 209500 MOV #0x950, W0 -001770 EB0080 CLR W1 -001772 980021 MOV W1, [W0+4] -212: -213: PulsEncL += (int) POS1CNT; //Salvataggio spazio percorso -001774 804E61 MOV 0x9CC, W1 -001776 800F20 MOV POS1CNT, W0 -001778 408000 ADD W1, W0, W0 -00177A 884E60 MOV W0, 0x9CC -214: POS1CNT = 0; //Reset registro -00177C EB0000 CLR W0 -00177E 880F20 MOV W0, POS1CNT -215: //calcolo della velocità -216: //Verifica SIG_VELLtmp!=0 & calcolo velocità -217: if (SIG_VELLtmp) motor_left.measure_vel = SIG_VELLtmp * (parameter.k_vel_l / timePeriodLtmp); -001780 90003E MOV [W14+6], W0 -001782 500FE0 SUB W0, #0x0, [W15] -001784 320013 BRA Z, 0x17AC -001786 90003E MOV [W14+6], W0 -001788 DE80CF ASR W0, #15, W1 -00178A 07F81B RCALL ___floatsisf -00178C BE0400 MOV.D W0, W8 -00178E 80485A MOV 0x90A, W10 -001790 80486B MOV 0x90C, W11 -001792 90001E MOV [W14+2], W0 -001794 9000AE MOV [W14+4], W1 -001796 07F818 RCALL ___floatunsisf -001798 BE0100 MOV.D W0, W2 -00179A BE000A MOV.D W10, W0 -00179C 07F79C RCALL ___divsf3 -00179E BE0100 MOV.D W0, W2 -0017A0 BE0008 MOV.D W8, W0 -0017A2 07F8B8 RCALL ___mulsf3 -0017A4 07F7ED RCALL ___fixsfsi -0017A6 780080 MOV W0, W1 -0017A8 209500 MOV #0x950, W0 -0017AA 980021 MOV W1, [W0+4] -218: PIDstruct1.controlReference = -motor_left.rifer_vel; //Riferimento Ruota Sinistra -0017AC 209500 MOV #0x950, W0 -0017AE 780010 MOV [W0], W0 -0017B0 EA0000 NEG W0, W0 -0017B2 884710 MOV W0, 0x8E2 -219: PIDstruct1.measuredOutput = -motor_left.measure_vel; //Misura velocità -0017B4 209500 MOV #0x950, W0 -0017B6 900020 MOV [W0+4], W0 -0017B8 EA0000 NEG W0, W0 -0017BA 884700 MOV W0, 0x8E0 -220: PID(&PIDstruct1); //Esecuzione funzione PID -0017BC 208DA0 MOV #0x8DA, W0 -0017BE 07F6BE RCALL _PID -221: motor_left.control_vel = (PIDstruct1.controlOutput >> 4) + 2049; //Conversione valore per PWM -0017C0 8046F0 MOV 0x8DE, W0 -0017C2 DE80C4 ASR W0, #4, W1 -0017C4 208010 MOV #0x801, W0 -0017C6 408080 ADD W1, W0, W1 -0017C8 209500 MOV #0x950, W0 -0017CA 980011 MOV W1, [W0+2] -222: //Invio dell'azione di controllo al motore per mezzo del PWM -223: SetDCMCPWM1(1, motor_left.control_vel, 0); -0017CC 209500 MOV #0x950, W0 -0017CE 900010 MOV [W0+2], W0 -0017D0 EB4100 CLR.B W2 -0017D2 780080 MOV W0, W1 -0017D4 200010 MOV #0x1, W0 -0017D6 07F713 RCALL _SetDCMCPWM1 -224: -225: return TMR1 - t; //Misura tempo di esecuzione -0017D8 800800 MOV TMR1, W0 -0017DA 50001E SUB W0, [W14], W0 -226: } -0017DC BE054F MOV.D [--W15], W10 -0017DE BE044F MOV.D [--W15], W8 -0017E0 FA8000 ULNK -0017E2 060000 RETURN -227: -228: int MotorPIDR(void) { -0017E4 FA0008 LNK #0x8 -0017E6 BE9F88 MOV.D W8, [W15++] -0017E8 BE9F8A MOV.D W10, [W15++] -229: unsigned int t = TMR1; //Timing funzione -0017EA 800800 MOV TMR1, W0 -0017EC 780F00 MOV W0, [W14] -230: unsigned long timePeriodRtmp; //Variabili temporanee Periodo -231: int SIG_VELRtmp; //Segno velocità -232: -233: timePeriodRtmp = timePeriodR; //Salvataggio TimerPeriod -0017EE 804D80 MOV 0x9B0, W0 -0017F0 804D91 MOV 0x9B2, W1 -0017F2 980710 MOV W0, [W14+2] -0017F4 980721 MOV W1, [W14+4] -234: timePeriodR = 0; //Pulizia variabile -0017F6 B80060 MUL.UU W0, #0, W0 -0017F8 884D80 MOV W0, 0x9B0 -0017FA 884D91 MOV W1, 0x9B2 -235: SIG_VELRtmp = SIG_VELR; //Salvataggio Segno velocità -0017FC 804DB0 MOV 0x9B6, W0 -0017FE 980730 MOV W0, [W14+6] -236: SIG_VELR = 0; //Pulizia variabile -001800 EB0000 CLR W0 -001802 884DB0 MOV W0, 0x9B6 -237: motor_right.measure_vel = 0; //Flush variabile velocità R -001804 209580 MOV #0x958, W0 -001806 EB0080 CLR W1 -001808 980021 MOV W1, [W0+4] -238: -239: PulsEncR += (int) POS2CNT; //Salvataggio spazio percorso -00180A 804E71 MOV 0x9CE, W1 -00180C 800FA0 MOV POS2CNT, W0 -00180E 408000 ADD W1, W0, W0 -001810 884E70 MOV W0, 0x9CE -240: POS2CNT = 0; //Reset registro -001812 EB0000 CLR W0 -001814 880FA0 MOV W0, POS2CNT -241: //calcolo della velocità -242: //Verifica SIG_VELLtmp!=0 & calcolo velocità -243: if (SIG_VELRtmp) motor_right.measure_vel = SIG_VELRtmp * (parameter.k_vel_r / timePeriodRtmp); -001816 90003E MOV [W14+6], W0 -001818 500FE0 SUB W0, #0x0, [W15] -00181A 320013 BRA Z, 0x1842 -00181C 90003E MOV [W14+6], W0 -00181E DE80CF ASR W0, #15, W1 -001820 07F7D0 RCALL ___floatsisf -001822 BE0400 MOV.D W0, W8 -001824 80483A MOV 0x906, W10 -001826 80484B MOV 0x908, W11 -001828 90001E MOV [W14+2], W0 -00182A 9000AE MOV [W14+4], W1 -00182C 07F7CD RCALL ___floatunsisf -00182E BE0100 MOV.D W0, W2 -001830 BE000A MOV.D W10, W0 -001832 07F751 RCALL ___divsf3 -001834 BE0100 MOV.D W0, W2 -001836 BE0008 MOV.D W8, W0 -001838 07F86D RCALL ___mulsf3 -00183A 07F7A2 RCALL ___fixsfsi -00183C 780080 MOV W0, W1 -00183E 209580 MOV #0x958, W0 -001840 980021 MOV W1, [W0+4] -244: PIDstruct2.controlReference = motor_right.rifer_vel; //Riferimento Ruota Sinistra -001842 209580 MOV #0x958, W0 -001844 780010 MOV [W0], W0 -001846 884790 MOV W0, 0x8F2 -245: PIDstruct2.measuredOutput = motor_right.measure_vel; //Misura velocità -001848 209580 MOV #0x958, W0 -00184A 900020 MOV [W0+4], W0 -00184C 884780 MOV W0, 0x8F0 -246: PID(&PIDstruct2); //Esecuzione funzione PID -00184E 208EA0 MOV #0x8EA, W0 -001850 07F675 RCALL _PID -247: motor_right.control_vel = (PIDstruct2.controlOutput >> 4) + 2049; //Conversione valore per PWM -001852 804770 MOV 0x8EE, W0 -001854 DE80C4 ASR W0, #4, W1 -001856 208010 MOV #0x801, W0 -001858 408080 ADD W1, W0, W1 -00185A 209580 MOV #0x958, W0 -00185C 980011 MOV W1, [W0+2] -248: //Invio dell'azione di controllo al motore per mezzo del PWM -249: SetDCMCPWM1(2, motor_right.control_vel, 0); -00185E 209580 MOV #0x958, W0 -001860 900010 MOV [W0+2], W0 -001862 EB4100 CLR.B W2 -001864 780080 MOV W0, W1 -001866 200020 MOV #0x2, W0 -001868 07F6CA RCALL _SetDCMCPWM1 -250: -251: return TMR1 - t; //Misura tempo di esecuzione -00186A 800800 MOV TMR1, W0 -00186C 50001E SUB W0, [W14], W0 -252: } -00186E BE054F MOV.D [--W15], W10 -001870 BE044F MOV.D [--W15], W8 -001872 FA8000 ULNK -001874 060000 RETURN -253: -254: void adc_motors_current(void) { -001876 FA000E LNK #0xE -255: int SIG_VELLtmp, SIG_VELRtmp; //Segno velocità -256: int AdcCount = 0; //Contatore -001878 EB0000 CLR W0 -00187A 780F00 MOV W0, [W14] -257: long ADCValueTmp[ADC_CHANNELS] = {0, 0}; //Valore temporaneo letture -00187C B80060 MUL.UU W0, #0, W0 -00187E 980730 MOV W0, [W14+6] -001880 980741 MOV W1, [W14+8] -001882 B80060 MUL.UU W0, #0, W0 -001884 980750 MOV W0, [W14+10] -001886 980761 MOV W1, [W14+12] -258: -259: for (AdcCount = 0; AdcCount < ADC_BUFF; AdcCount++) // Calcolo media di tutti i campioni -001888 EB0000 CLR W0 -00188A 780F00 MOV W0, [W14] -00188C 37001A BRA 0x18C2 -0018C0 E80F1E INC [W14], [W14] -0018C2 2003F0 MOV #0x3F, W0 -0018C4 78009E MOV [W14], W1 -0018C6 508F80 SUB W1, W0, [W15] -0018C8 34FFE2 BRA LE, 0x188E -260: { -261: ADCValueTmp[0] += AdcBuffer[0][AdcCount]; //Sommatoria per AN0 -00188E 90013E MOV [W14+6], W2 -001890 9001CE MOV [W14+8], W3 -001892 78001E MOV [W14], W0 -001894 400080 ADD W0, W0, W1 -001896 246000 MOV #0x4600, W0 -001898 408000 ADD W1, W0, W0 -00189A 780010 MOV [W0], W0 -00189C DE80CF ASR W0, #15, W1 -00189E 400002 ADD W0, W2, W0 -0018A0 488083 ADDC W1, W3, W1 -0018A2 980730 MOV W0, [W14+6] -0018A4 980741 MOV W1, [W14+8] -262: ADCValueTmp[1] += AdcBuffer[1][AdcCount]; //Sommatoria per AN1 -0018A6 90015E MOV [W14+10], W2 -0018A8 9001EE MOV [W14+12], W3 -0018AA 200401 MOV #0x40, W1 -0018AC 40801E ADD W1, [W14], W0 -0018AE 400080 ADD W0, W0, W1 -0018B0 246000 MOV #0x4600, W0 -0018B2 408000 ADD W1, W0, W0 -0018B4 780010 MOV [W0], W0 -0018B6 DE80CF ASR W0, #15, W1 -0018B8 400002 ADD W0, W2, W0 -0018BA 488083 ADDC W1, W3, W1 -0018BC 980750 MOV W0, [W14+10] -0018BE 980761 MOV W1, [W14+12] -263: } -264: SIG_VELLtmp = SIG_VELL; //Salvataggio Segno velocità -0018CA 804DA0 MOV 0x9B4, W0 -0018CC 980710 MOV W0, [W14+2] -265: SIG_VELRtmp = SIG_VELR; //Salvataggio Segno velocità -0018CE 804DB0 MOV 0x9B6, W0 -0018D0 980720 MOV W0, [W14+4] -266: motor_left.current = SIG_VELRtmp * ADCValueTmp[0] >> 6; //Divisione o shifth -0018D2 90002E MOV [W14+4], W0 -0018D4 B90161 MUL.SU W0, #1, W2 -0018D6 90003E MOV [W14+6], W0 -0018D8 9000CE MOV [W14+8], W1 -0018DA B99A00 MUL.SS W3, W0, W4 -0018DC 780204 MOV W4, W4 -0018DE B98B02 MUL.SS W1, W2, W6 -0018E0 780286 MOV W6, W5 -0018E2 420205 ADD W4, W5, W4 -0018E4 B81000 MUL.UU W2, W0, W0 -0018E6 420201 ADD W4, W1, W4 -0018E8 780084 MOV W4, W1 -0018EA DD094A SL W1, #10, W2 -0018EC DE0046 LSR W0, #6, W0 -0018EE 710000 IOR W2, W0, W0 -0018F0 DE88C6 ASR W1, #6, W1 -0018F2 780080 MOV W0, W1 -0018F4 209500 MOV #0x950, W0 -0018F6 980031 MOV W1, [W0+6] -267: motor_right.current = SIG_VELRtmp * ADCValueTmp[1] >> 6; //Divisione o shifth -0018F8 90002E MOV [W14+4], W0 -0018FA B90161 MUL.SU W0, #1, W2 -0018FC 90005E MOV [W14+10], W0 -0018FE 9000EE MOV [W14+12], W1 -001900 B99A00 MUL.SS W3, W0, W4 -001902 780204 MOV W4, W4 -001904 B98B02 MUL.SS W1, W2, W6 -001906 780286 MOV W6, W5 -001908 420205 ADD W4, W5, W4 -00190A B81000 MUL.UU W2, W0, W0 -00190C 420201 ADD W4, W1, W4 -00190E 780084 MOV W4, W1 -001910 DD094A SL W1, #10, W2 -001912 DE0046 LSR W0, #6, W0 -001914 710000 IOR W2, W0, W0 -001916 DE88C6 ASR W1, #6, W1 -001918 780080 MOV W0, W1 -00191A 209580 MOV #0x958, W0 -00191C 980031 MOV W1, [W0+6] -268: } -00191E FA8000 ULNK -001920 060000 RETURN ---- C:/Users/Raffaello/Dropbox/MicrochipProject/dsPIC33MotionControl.X/main.c ------------------------- -1: /******************************************************************************/ -2: /* Files to Include */ -3: /******************************************************************************/ -4: -5: /* Device header file */ -6: #if defined(__XC16__) -7: #include -8: #elif defined(__C30__) -9: #if defined(__dsPIC33E__) -10: #include -11: #elif defined(__dsPIC33F__) -12: #include -13: #endif -14: #endif -15: -16: -17: #include /* Includes uint16_t definition */ -18: #include /* Includes true/false definition */ -19: -20: #include "system.h" /* System funct/params, like osc/peripheral config */ -21: #include "user.h" /* User funct/params, such as InitApp */ -22: #include "motors_PID.h" -23: #include "high_level_control.h" -24: -25: /******************************************************************************/ -26: /* Global Variable Declaration */ -27: /******************************************************************************/ -28: -29: /* i.e. uint16_t ; */ -30: -31: /******************************************************************************/ -32: /* Main Program */ -33: -34: /******************************************************************************/ -35: -36: int16_t main(void) { -0021DC FA0000 LNK #0x0 -37: -38: /* Configure the oscillator for the device */ -39: ConfigureOscillator(); -0021DE 07FBE9 RCALL ConfigureOscillator -40: -41: /* Initialize variables for robots */ -42: init_parameter(); -0021E0 07F82B RCALL init_parameter -43: init_process(); -0021E2 07FB9F RCALL init_process -44: init_pid_control(); -0021E4 07F8C8 RCALL init_pid_control -45: -46: /* Initialize pid controllers */ -47: update_pid_l(); -0021E6 07F8E2 RCALL update_pid_l -48: update_pid_r(); -0021E8 07F947 RCALL update_pid_r -49: -50: /* Initialize dead reckoning */ -51: init_coordinate(); -0021EA 07FD7B RCALL init_coordinate -52: -53: /* Initialize IO ports and peripherals */ -54: InitApp(); -0021EC 07FF24 RCALL InitApp -55: -56: while (1) { -57: -58: } -0021EE 37FFFF BRA 0x21EE -59: } ---- C:/Users/Raffaello/Dropbox/MicrochipProject/dsPIC33MotionControl.X/interrupts.c ------------------- -1: /******************************************************************************/ -2: /* Files to Include */ -3: /******************************************************************************/ -4: -5: /* Device header file */ -6: #if defined(__XC16__) -7: #include -8: #elif defined(__C30__) -9: #if defined(__dsPIC33E__) -10: #include -11: #elif defined(__dsPIC33F__) -12: #include -13: #endif -14: #endif -15: -16: #include /* Includes uint16_t definition */ -17: #include /* Includes true/false definition */ -18: -19: #include "user.h" -20: #include "serial.h" -21: #include "parsing_packet.h" -22: #include "motors_PID.h" -23: #include "high_level_control.h" -24: -25: #define PID_FLAG IFS0bits.OC1IF -26: #define PARSER_FLAG IFS0bits.OC2IF -27: #define DEAD_RECKONING_FLAG IFS3bits.RTCIF -28: -29: /******************************************************************************/ -30: /* Global Variable Declaration */ -31: /******************************************************************************/ -32: -33: unsigned int counter = 0; -34: unsigned int counter_odo = 0; -35: volatile unsigned int overTmrL = 0; -36: volatile unsigned int overTmrR = 0; -37: volatile unsigned long timePeriodL = 0; //Periodo Ruota Sinistra -38: volatile unsigned long timePeriodR = 0; //Periodo Ruota Destra -39: volatile unsigned SIG_VELL = 0; //Verso rotazione ruota sinistra -40: volatile unsigned SIG_VELR = 0; //Verso rotazione ruota destra -41: volatile process_t time, priority, frequency; -42: -43: /******************************************************************************/ -44: /* Interrupt Vector Options */ -45: /******************************************************************************/ -46: /* */ -47: /* Refer to the C30 (MPLAB C Compiler for PIC24F MCUs and dsPIC33F DSCs) User */ -48: /* Guide for an up to date list of the available interrupt options. */ -49: /* Alternately these names can be pulled from the device linker scripts. */ -50: /* */ -51: /* dsPIC33F Primary Interrupt Vector Names: */ -52: /* */ -53: /* _INT0Interrupt _C1Interrupt */ -54: /* _IC1Interrupt _DMA3Interrupt */ -55: /* _OC1Interrupt _IC3Interrupt */ -56: /* _T1Interrupt _IC4Interrupt */ -57: /* _DMA0Interrupt _IC5Interrupt */ -58: /* _IC2Interrupt _IC6Interrupt */ -59: /* _OC2Interrupt _OC5Interrupt */ -60: /* _T2Interrupt _OC6Interrupt */ -61: /* _T3Interrupt _OC7Interrupt */ -62: /* _SPI1ErrInterrupt _OC8Interrupt */ -63: /* _SPI1Interrupt _DMA4Interrupt */ -64: /* _U1RXInterrupt _T6Interrupt */ -65: /* _U1TXInterrupt _T7Interrupt */ -66: /* _ADC1Interrupt _SI2C2Interrupt */ -67: /* _DMA1Interrupt _MI2C2Interrupt */ -68: /* _SI2C1Interrupt _T8Interrupt */ -69: /* _MI2C1Interrupt _T9Interrupt */ -70: /* _CNInterrupt _INT3Interrupt */ -71: /* _INT1Interrupt _INT4Interrupt */ -72: /* _ADC2Interrupt _C2RxRdyInterrupt */ -73: /* _DMA2Interrupt _C2Interrupt */ -74: /* _OC3Interrupt _DCIErrInterrupt */ -75: /* _OC4Interrupt _DCIInterrupt */ -76: /* _T4Interrupt _DMA5Interrupt */ -77: /* _T5Interrupt _U1ErrInterrupt */ -78: /* _INT2Interrupt _U2ErrInterrupt */ -79: /* _U2RXInterrupt _DMA6Interrupt */ -80: /* _U2TXInterrupt _DMA7Interrupt */ -81: /* _SPI2ErrInterrupt _C1TxReqInterrupt */ -82: /* _SPI2Interrupt _C2TxReqInterrupt */ -83: /* _C1RxRdyInterrupt */ -84: /* */ -85: /* dsPIC33E Primary Interrupt Vector Names: */ -86: /* */ -87: /* _INT0Interrupt _IC4Interrupt _U4TXInterrupt */ -88: /* _IC1Interrupt _IC5Interrupt _SPI3ErrInterrupt */ -89: /* _OC1Interrupt _IC6Interrupt _SPI3Interrupt */ -90: /* _T1Interrupt _OC5Interrupt _OC9Interrupt */ -91: /* _DMA0Interrupt _OC6Interrupt _IC9Interrupt */ -92: /* _IC2Interrupt _OC7Interrupt _PWM1Interrupt */ -93: /* _OC2Interrupt _OC8Interrupt _PWM2Interrupt */ -94: /* _T2Interrupt _PMPInterrupt _PWM3Interrupt */ -95: /* _T3Interrupt _DMA4Interrupt _PWM4Interrupt */ -96: /* _SPI1ErrInterrupt _T6Interrupt _PWM5Interrupt */ -97: /* _SPI1Interrupt _T7Interrupt _PWM6Interrupt */ -98: /* _U1RXInterrupt _SI2C2Interrupt _PWM7Interrupt */ -99: /* _U1TXInterrupt _MI2C2Interrupt _DMA8Interrupt */ -100: /* _AD1Interrupt _T8Interrupt _DMA9Interrupt */ -101: /* _DMA1Interrupt _T9Interrupt _DMA10Interrupt */ -102: /* _NVMInterrupt _INT3Interrupt _DMA11Interrupt */ -103: /* _SI2C1Interrupt _INT4Interrupt _SPI4ErrInterrupt */ -104: /* _MI2C1Interrupt _C2RxRdyInterrupt _SPI4Interrupt */ -105: /* _CM1Interrupt _C2Interrupt _OC10Interrupt */ -106: /* _CNInterrupt _QEI1Interrupt _IC10Interrupt */ -107: /* _INT1Interrupt _DCIEInterrupt _OC11Interrupt */ -108: /* _AD2Interrupt _DCIInterrupt _IC11Interrupt */ -109: /* _IC7Interrupt _DMA5Interrupt _OC12Interrupt */ -110: /* _IC8Interrupt _RTCCInterrupt _IC12Interrupt */ -111: /* _DMA2Interrupt _U1ErrInterrupt _DMA12Interrupt */ -112: /* _OC3Interrupt _U2ErrInterrupt _DMA13Interrupt */ -113: /* _OC4Interrupt _CRCInterrupt _DMA14Interrupt */ -114: /* _T4Interrupt _DMA6Interrupt _OC13Interrupt */ -115: /* _T5Interrupt _DMA7Interrupt _IC13Interrupt */ -116: /* _INT2Interrupt _C1TxReqInterrupt _OC14Interrupt */ -117: /* _U2RXInterrupt _C2TxReqInterrupt _IC14Interrupt */ -118: /* _U2TXInterrupt _QEI2Interrupt _OC15Interrupt */ -119: /* _SPI2ErrInterrupt _U3ErrInterrupt _IC15Interrupt */ -120: /* _SPI2Interrupt _U3RXInterrupt _OC16Interrupt */ -121: /* _C1RxRdyInterrupt _U3TXInterrupt _IC16Interrupt */ -122: /* _C1Interrupt _USB1Interrupt _ICDInterrupt */ -123: /* _DMA3Interrupt _U4ErrInterrupt _PWMSpEventMatchInterrupt */ -124: /* _IC3Interrupt _U4RXInterrupt _PWMSecSpEventMatchInterrupt */ -125: /* */ -126: /* For alternate interrupt vector naming, simply add 'Alt' between the prim. */ -127: /* interrupt vector name '_' and the first character of the primary interrupt */ -128: /* vector name. There is no Alternate Vector or 'AIVT' for the 33E family. */ -129: /* */ -130: /* For example, the vector name _ADC2Interrupt becomes _AltADC2Interrupt in */ -131: /* the alternate vector table. */ -132: /* */ -133: /* Example Syntax: */ -134: /* */ -135: /* void __attribute__((interrupt,auto_psv)) (void) */ -136: /* { */ -137: /* */ -138: /* } */ -139: /* */ -140: /* For more comprehensive interrupt examples refer to the C30 (MPLAB C */ -141: /* Compiler for PIC24 MCUs and dsPIC DSCs) User Guide in the */ -142: /* /doc directory for the latest compiler */ -143: /* release. For XC16, refer to the MPLAB XC16 C Compiler User's Guide in the */ -144: /* /doc folder. */ -145: /* */ -146: /******************************************************************************/ -147: /* Interrupt Routines */ -148: -149: /******************************************************************************/ -150: -151: void __attribute__((interrupt, auto_psv, shadow)) _IC1Interrupt(void) { -00029C FEA000 PUSH.S -00029E F80034 PUSH PSVPAG -0002A0 781F88 MOV W8, [W15++] -0002A2 200008 MOV #0x0, W8 -0002A4 8801A8 MOV W8, PSVPAG -0002A6 78044F MOV [--W15], W8 -0002A8 FA0004 LNK #0x4 -152: unsigned int t1, t2; -153: t2 = IC1BUF; -0002AA 800A00 MOV IC1BUF, W0 -0002AC 780F00 MOV W0, [W14] -154: t1 = IC1BUF; -0002AE 800A00 MOV IC1BUF, W0 -0002B0 980710 MOV W0, [W14+2] -155: IFS0bits.IC1IF = 0; -0002B2 A92084 BCLR IFS0, #1 -156: timePeriodL = overTmrL * PR2 + t2 - t1; -0002B4 804D41 MOV 0x9A8, W1 -0002B6 800860 MOV PR2, W0 -0002B8 B98800 MUL.SS W1, W0, W0 -0002BA 780000 MOV W0, W0 -0002BC 40009E ADD W0, [W14], W1 -0002BE 90001E MOV [W14+2], W0 -0002C0 508000 SUB W1, W0, W0 -0002C2 200001 MOV #0x0, W1 -0002C4 884D60 MOV W0, 0x9AC -0002C6 884D71 MOV W1, 0x9AE -157: overTmrL = 0; -0002C8 EB0000 CLR W0 -0002CA 884D40 MOV W0, 0x9A8 -158: // if(QEI1CONbits.UPDN) SIG_VELL++; //Save sign Vel L -159: // else SIG_VELL--; -160: // if(t2>t1) -161: // timePeriodL = t2 - t1; -162: // else -163: // timePeriodL = (PR2 - t1) + t2; -164: SIG_VELL = (QEI1CONbits.UPDN ? 1 : -1); //Save sign Vel L -0002CC 800F01 MOV QEI1CON, W1 -0002CE 208000 MOV #0x800, W0 -0002D0 608000 AND W1, W0, W0 -0002D2 500FE0 SUB W0, #0x0, [W15] -0002D4 320002 BRA Z, 0x2DA -0002D6 200010 MOV #0x1, W0 -0002D8 370001 BRA 0x2DC -0002DA EB8000 SETM W0 -0002DC 884DA0 MOV W0, 0x9B4 -165: } -0002DE FA8000 ULNK -0002E0 F90034 POP PSVPAG -0002E2 FE8000 POP.S -0002E4 064000 RETFIE -166: -167: void __attribute__((interrupt, auto_psv, shadow)) _IC2Interrupt(void) { -0002E6 FEA000 PUSH.S -0002E8 F80034 PUSH PSVPAG -0002EA 781F88 MOV W8, [W15++] -0002EC 200008 MOV #0x0, W8 -0002EE 8801A8 MOV W8, PSVPAG -0002F0 78044F MOV [--W15], W8 -0002F2 FA0004 LNK #0x4 -168: unsigned int t1, t2; -169: t2 = IC2BUF; -0002F4 800A20 MOV IC2BUF, W0 -0002F6 780F00 MOV W0, [W14] -170: t1 = IC2BUF; -0002F8 800A20 MOV IC2BUF, W0 -0002FA 980710 MOV W0, [W14+2] -171: IFS0bits.IC2IF = 0; -0002FC A9A084 BCLR IFS0, #5 -172: timePeriodR = overTmrR * PR2 + t2 - t1; -0002FE 804D51 MOV 0x9AA, W1 -000300 800860 MOV PR2, W0 -000302 B98800 MUL.SS W1, W0, W0 -000304 780000 MOV W0, W0 -000306 40009E ADD W0, [W14], W1 -000308 90001E MOV [W14+2], W0 -00030A 508000 SUB W1, W0, W0 -00030C 200001 MOV #0x0, W1 -00030E 884D80 MOV W0, 0x9B0 -000310 884D91 MOV W1, 0x9B2 -173: overTmrR = 0; -000312 EB0000 CLR W0 -000314 884D50 MOV W0, 0x9AA -174: // if(QEI2CONbits.UPDN) SIG_VELR++; //Save sign Vel R -175: // else SIG_VELR--; -176: // if(t2>t1) -177: // timePeriodR = t2 - t1; -178: // else -179: // timePeriodR = (PR2 - t1) + t2; -180: //Encoder speculare rispetto all'altro. Segni invertiti -181: SIG_VELR = (QEI2CONbits.UPDN ? 1 : -1); //Save sign Vel R -000316 800F81 MOV QEI2CON, W1 -000318 208000 MOV #0x800, W0 -00031A 608000 AND W1, W0, W0 -00031C 500FE0 SUB W0, #0x0, [W15] -00031E 320002 BRA Z, 0x324 -000320 200010 MOV #0x1, W0 -000322 370001 BRA 0x326 -000324 EB8000 SETM W0 -000326 884DB0 MOV W0, 0x9B6 -182: } -000328 FA8000 ULNK -00032A F90034 POP PSVPAG -00032C FE8000 POP.S -00032E 064000 RETFIE -183: -184: void __attribute__((interrupt, auto_psv)) _T1Interrupt(void) { -000330 F80036 PUSH RCOUNT -000332 BE9F80 MOV.D W0, [W15++] -000334 781F82 MOV W2, [W15++] -000336 F80034 PUSH PSVPAG -000338 200000 MOV #0x0, W0 -00033A 8801A0 MOV W0, PSVPAG -00033C FA0000 LNK #0x0 -185: IFS0bits.T1IF = 0; // Clear Timer 1 Interrupt Flag -00033E A96084 BCLR IFS0, #3 -186: -187: PID_FLAG = 1; //Start OC1Interrupt for PID control -000340 A84084 BSET IFS0, #2 -188: if (!(counter_odo % 10)) { -000342 804D31 MOV 0x9A6, W1 -000344 2000A0 MOV #0xA, W0 -000346 780100 MOV W0, W2 -000348 090011 REPEAT #0x11 -00034A D88082 DIV.UW W1, W2 -00034C FD0080 EXCH W0, W1 -00034E 500FE0 SUB W0, #0x0, [W15] -000350 3A0003 BRA NZ, 0x358 -189: DEAD_RECKONING_FLAG = 1; -000352 A8C08B BSET 0x8B, #6 -190: counter_odo = 0; -000354 EB0000 CLR W0 -000356 884D30 MOV W0, 0x9A6 -191: } -192: if (!(counter % 500)) { -000358 804D21 MOV 0x9A4, W1 -00035A 201F40 MOV #0x1F4, W0 -00035C 780100 MOV W0, W2 -00035E 090011 REPEAT #0x11 -000360 D88082 DIV.UW W1, W2 -000362 FD0080 EXCH W0, W1 -000364 500FE0 SUB W0, #0x0, [W15] -000366 3A000F BRA NZ, 0x386 -193: LED ^= 1; -000368 801620 MOV LATA, W0 -00036A DE0044 LSR W0, #4, W0 -00036C 604061 AND.B W0, #0x1, W0 -00036E A20400 BTG.B W0, #0 -000370 604061 AND.B W0, #0x1, W0 -000372 FB8000 ZE W0, W0 -000374 600061 AND W0, #0x1, W0 -000376 DD0044 SL W0, #4, W0 -000378 801622 MOV LATA, W2 -00037A 2FFEF1 MOV #0xFFEF, W1 -00037C 610081 AND W2, W1, W1 -00037E 708000 IOR W1, W0, W0 -000380 881620 MOV W0, LATA -194: counter = 0; -000382 EB0000 CLR W0 -000384 884D20 MOV W0, 0x9A4 -195: } -196: counter++; -000386 804D20 MOV 0x9A4, W0 -000388 E80000 INC W0, W0 -00038A 884D20 MOV W0, 0x9A4 -197: counter_odo++; -00038C 804D30 MOV 0x9A6, W0 -00038E E80000 INC W0, W0 -000390 884D30 MOV W0, 0x9A6 -198: } -000392 FA8000 ULNK -000394 F90034 POP PSVPAG -000396 78014F MOV [--W15], W2 -000398 BE004F MOV.D [--W15], W0 -00039A F90036 POP RCOUNT -00039C 064000 RETFIE -199: -200: void __attribute__((interrupt, auto_psv, shadow)) _T2Interrupt(void) { -00039E FEA000 PUSH.S -0003A0 F80034 PUSH PSVPAG -0003A2 781F88 MOV W8, [W15++] -0003A4 200008 MOV #0x0, W8 -0003A6 8801A8 MOV W8, PSVPAG -0003A8 78044F MOV [--W15], W8 -0003AA FA0000 LNK #0x0 -201: IFS0bits.T2IF = 0; // interrupt flag reset -0003AC A9E084 BCLR IFS0, #7 -202: if (timePeriodL) overTmrL++; // overflow timer for Left engines -0003AE 804D60 MOV 0x9AC, W0 -0003B0 804D71 MOV 0x9AE, W1 -0003B2 500FE0 SUB W0, #0x0, [W15] -0003B4 588FE0 SUBB W1, #0x0, [W15] -0003B6 320003 BRA Z, 0x3BE -0003B8 804D40 MOV 0x9A8, W0 -0003BA E80000 INC W0, W0 -0003BC 884D40 MOV W0, 0x9A8 -203: if (timePeriodR) overTmrR++; // overflow timer for Right engines -0003BE 804D80 MOV 0x9B0, W0 -0003C0 804D91 MOV 0x9B2, W1 -0003C2 500FE0 SUB W0, #0x0, [W15] -0003C4 588FE0 SUBB W1, #0x0, [W15] -0003C6 320003 BRA Z, 0x3CE -0003C8 804D50 MOV 0x9AA, W0 -0003CA E80000 INC W0, W0 -0003CC 884D50 MOV W0, 0x9AA -204: } -0003CE FA8000 ULNK -0003D0 F90034 POP PSVPAG -0003D2 FE8000 POP.S -0003D4 064000 RETFIE -205: -206: void __attribute__((interrupt, auto_psv)) _OC1Interrupt(void) { -0003D6 F80036 PUSH RCOUNT -0003D8 BE9F80 MOV.D W0, [W15++] -0003DA BE9F82 MOV.D W2, [W15++] -0003DC BE9F84 MOV.D W4, [W15++] -0003DE BE9F86 MOV.D W6, [W15++] -0003E0 F80034 PUSH PSVPAG -0003E2 200000 MOV #0x0, W0 -0003E4 8801A0 MOV W0, PSVPAG -0003E6 FA0000 LNK #0x0 -207: PID_FLAG = 0; // interrupt flag reset -0003E8 A94084 BCLR IFS0, #2 -208: time.velocity = Velocity(); -0003EA 0708C4 RCALL Velocity -0003EC 8A3ED0 MOV W0, 0x47DA -209: time.pid_l = MotorPIDL(); -0003EE 0709AF RCALL MotorPIDL -0003F0 8A3EB0 MOV W0, 0x47D6 -210: time.pid_r = MotorPIDR(); -0003F2 0709F8 RCALL MotorPIDR -0003F4 8A3EC0 MOV W0, 0x47D8 -211: } -0003F6 FA8000 ULNK -0003F8 F90034 POP PSVPAG -0003FA BE034F MOV.D [--W15], W6 -0003FC BE024F MOV.D [--W15], W4 -0003FE BE014F MOV.D [--W15], W2 -000400 BE004F MOV.D [--W15], W0 -000402 F90036 POP RCOUNT -000404 064000 RETFIE -212: -213: void __attribute__((interrupt, auto_psv)) _OC2Interrupt(void) { -000406 F80036 PUSH RCOUNT -000408 BE9F80 MOV.D W0, [W15++] -00040A BE9F82 MOV.D W2, [W15++] -00040C BE9F84 MOV.D W4, [W15++] -00040E BE9F86 MOV.D W6, [W15++] -000410 F80034 PUSH PSVPAG -000412 200000 MOV #0x0, W0 -000414 8801A0 MOV W0, PSVPAG -000416 FA0000 LNK #0x0 -214: PARSER_FLAG = 0; //interrupt flag reset -000418 A9C084 BCLR IFS0, #6 -215: time.parse_packet = parse_packet(); -00041A 07038D RCALL parse_packet -00041C 8A3EF0 MOV W0, 0x47DE -216: } -00041E FA8000 ULNK -000420 F90034 POP PSVPAG -000422 BE034F MOV.D [--W15], W6 -000424 BE024F MOV.D [--W15], W4 -000426 BE014F MOV.D [--W15], W2 -000428 BE004F MOV.D [--W15], W0 -00042A F90036 POP RCOUNT -00042C 064000 RETFIE -217: -218: void __attribute__((interrupt, auto_psv)) _RTCCInterrupt(void) { -00042E F80036 PUSH RCOUNT -000430 BE9F80 MOV.D W0, [W15++] -000432 BE9F82 MOV.D W2, [W15++] -000434 BE9F84 MOV.D W4, [W15++] -000436 BE9F86 MOV.D W6, [W15++] -000438 F80034 PUSH PSVPAG -00043A 200000 MOV #0x0, W0 -00043C 8801A0 MOV W0, PSVPAG -00043E FA0000 LNK #0x0 -219: DEAD_RECKONING_FLAG = 0; //interrupt flag reset -000440 A9C08B BCLR 0x8B, #6 -220: time.dead_reckoning = deadReckoning(); -000442 070C5E RCALL deadReckoning -000444 8A3EE0 MOV W0, 0x47DC -221: } -000446 FA8000 ULNK -000448 F90034 POP PSVPAG -00044A BE034F MOV.D [--W15], W6 -00044C BE024F MOV.D [--W15], W4 -00044E BE014F MOV.D [--W15], W2 -000450 BE004F MOV.D [--W15], W0 -000452 F90036 POP RCOUNT -000454 064000 RETFIE -222: -223: unsigned int ReadUART1(void) { -000456 FA0000 LNK #0x0 -224: if (U1MODEbits.PDSEL == 3) -000458 801100 MOV U1MODE, W0 -00045A 600066 AND W0, #0x6, W0 -00045C 500FE6 SUB W0, #0x6, [W15] -00045E 3A0002 BRA NZ, 0x464 -225: return (U1RXREG); -000460 801130 MOV U1RXREG, W0 -000462 370003 BRA 0x46A -226: else -227: return (U1RXREG & 0xFF); -000464 801131 MOV U1RXREG, W1 -000466 200FF0 MOV #0xFF, W0 -000468 608000 AND W1, W0, W0 -228: } -00046A FA8000 ULNK -00046C 060000 RETURN -229: -230: void __attribute__((interrupt, auto_psv)) _U1RXInterrupt(void) { -00046E F80036 PUSH RCOUNT -000470 BE9F80 MOV.D W0, [W15++] -000472 BE9F82 MOV.D W2, [W15++] -000474 BE9F84 MOV.D W4, [W15++] -000476 BE9F86 MOV.D W6, [W15++] -000478 F80034 PUSH PSVPAG -00047A 200000 MOV #0x0, W0 -00047C 8801A0 MOV W0, PSVPAG -00047E FA0000 LNK #0x0 -231: IFS0bits.U1RXIF = 0; // clear RX interrupt flag -000480 A96085 BCLR 0x85, #3 -232: -233: /* get the data */ -234: if (U1STAbits.URXDA == 1) { -000482 801110 MOV U1STA, W0 -000484 600061 AND W0, #0x1, W0 -000486 500FE0 SUB W0, #0x0, [W15] -000488 320007 BRA Z, 0x498 -235: if (decode_pkgs(ReadUART1())) { -00048A 07FFE5 RCALL ReadUART1 -00048C 784000 MOV.B W0, W0 -00048E 070D32 RCALL decode_pkgs -000490 500FE0 SUB W0, #0x0, [W15] -000492 32000F BRA Z, 0x4B2 -236: PARSER_FLAG = 1; //if correct packet parse command start interrupt flag -000494 A8C084 BSET IFS0, #6 -000496 37000D BRA 0x4B2 -237: } -238: } else { -239: /* check for receive errors */ -240: if (U1STAbits.FERR == 1) { -000498 801110 MOV U1STA, W0 -00049A 600064 AND W0, #0x4, W0 -00049C 500FE0 SUB W0, #0x0, [W15] -00049E 320002 BRA Z, 0x4A4 -241: pkg_error(ERROR_FRAMMING); -0004A0 EB8000 SETM W0 -0004A2 070D7D RCALL pkg_error -242: } -243: /* must clear the overrun error to keep uart receiving */ -244: if (U1STAbits.OERR == 1) { -0004A4 801110 MOV U1STA, W0 -0004A6 600062 AND W0, #0x2, W0 -0004A8 500FE0 SUB W0, #0x0, [W15] -0004AA 320003 BRA Z, 0x4B2 -245: U1STAbits.OERR = 0; -0004AC A92222 BCLR U1STA, #1 -246: pkg_error(ERROR_OVERRUN); -0004AE 2FFFE0 MOV #0xFFFE, W0 -0004B0 070D76 RCALL pkg_error -247: } -248: } -249: } -0004B2 FA8000 ULNK -0004B4 F90034 POP PSVPAG -0004B6 BE034F MOV.D [--W15], W6 -0004B8 BE024F MOV.D [--W15], W4 -0004BA BE014F MOV.D [--W15], W2 -0004BC BE004F MOV.D [--W15], W0 -0004BE F90036 POP RCOUNT -0004C0 064000 RETFIE -250: -251: void __attribute__((interrupt, auto_psv)) _DMA0Interrupt(void) { -0004C2 F80036 PUSH RCOUNT -0004C4 BE9F80 MOV.D W0, [W15++] -0004C6 BE9F82 MOV.D W2, [W15++] -0004C8 BE9F84 MOV.D W4, [W15++] -0004CA BE9F86 MOV.D W6, [W15++] -0004CC F80034 PUSH PSVPAG -0004CE 200000 MOV #0x0, W0 -0004D0 8801A0 MOV W0, PSVPAG -0004D2 FA0000 LNK #0x0 -252: IFS0bits.DMA0IF = 0; // Clear the DMA0 Interrupt Flag -0004D4 A98084 BCLR IFS0, #4 -253: adc_motors_current(); // Esecution mean value for current motors -0004D6 0709CF RCALL adc_motors_current -254: } -0004D8 FA8000 ULNK -0004DA F90034 POP PSVPAG -0004DC BE034F MOV.D [--W15], W6 -0004DE BE024F MOV.D [--W15], W4 -0004E0 BE014F MOV.D [--W15], W2 -0004E2 BE004F MOV.D [--W15], W0 -0004E4 F90036 POP RCOUNT -0004E6 064000 RETFIE -255: -256: void __attribute__((interrupt, auto_psv)) _DMA1Interrupt(void) { -0004E8 F80034 PUSH PSVPAG -0004EA 781F88 MOV W8, [W15++] -0004EC 200008 MOV #0x0, W8 -0004EE 8801A8 MOV W8, PSVPAG -0004F0 78044F MOV [--W15], W8 -0004F2 FA0000 LNK #0x0 -257: IFS0bits.DMA1IF = 0; // Clear the DMA1 Interrupt Flag -0004F4 A9C085 BCLR 0x85, #6 -258: } -0004F6 FA8000 ULNK -0004F8 F90034 POP PSVPAG -0004FA 064000 RETFIE ---- C:/Users/Raffaello/Dropbox/MicrochipProject/dsPIC33MotionControl.X/high_level_control.c ----------- -1: /******************************************************************************/ -2: /* Files to Include */ -3: /******************************************************************************/ -4: -5: /* Device header file */ -6: #if defined(__XC16__) -7: #include -8: #elif defined(__C30__) -9: #if defined(__dsPIC33E__) -10: #include -11: #elif defined(__dsPIC33F__) -12: #include -13: #endif -14: #endif -15: -16: #include /* For uint16_t definition */ -17: #include /* For true/false definition */ -18: #include -19: #include -20: #include -21: -22: #include "high_level_control.h" -23: #include "motors_PID.h" -24: -25: coordinate_t coordinate; -26: -27: float sinTh_old = 0, cosTh_old = 1; -28: -29: // From motors PID -30: extern volatile parameter_t parameter; -31: extern volatile int PulsEncL, PulsEncR; -32: extern k_odo_t k_odo; -33: extern float wheel_m; -34: -35: /******************************************************************************/ -36: /* Dead Reckoning functions */ -37: -38: /******************************************************************************/ -39: -40: void init_coordinate(void) { -001CE2 FA0000 LNK #0x0 -41: coordinate.x = 0; -001CE4 B80060 MUL.UU W0, #0, W0 -001CE6 884DC0 MOV W0, coordinate -001CE8 884DD1 MOV W1, 0x9BA -42: coordinate.y = 0; -001CEA B80060 MUL.UU W0, #0, W0 -001CEC 884DE0 MOV W0, 0x9BC -001CEE 884DF1 MOV W1, 0x9BE -43: coordinate.theta = 0; -001CF0 B80060 MUL.UU W0, #0, W0 -001CF2 884E00 MOV W0, 0x9C0 -001CF4 884E11 MOV W1, 0x9C2 -44: coordinate.space = 0; -001CF6 B80060 MUL.UU W0, #0, W0 -001CF8 884E20 MOV W0, 0x9C4 -001CFA 884E31 MOV W1, 0x9C6 -45: } -001CFC FA8000 ULNK -001CFE 060000 RETURN -46: -47: int deadReckoning(void) { -001D00 FA002E LNK #0x2E -001D02 BE9F88 MOV.D W8, [W15++] -48: unsigned int t = TMR1; // Timing function -001D04 800800 MOV TMR1, W0 -001D06 780F00 MOV W0, [W14] -49: volatile coordinate_t delta; -50: float WheelSpL = k_odo.k_left * PulsEncL; // Spostamento Ruota sinistra -001D08 2096C0 MOV #0x96C, W0 -001D0A BE0410 MOV.D [W0], W8 -001D0C 804E60 MOV 0x9CC, W0 -001D0E DE80CF ASR W0, #15, W1 -001D10 07F558 RCALL ___floatsisf -001D12 BE0100 MOV.D W0, W2 -001D14 BE0008 MOV.D W8, W0 -001D16 07F5FE RCALL ___mulsf3 -001D18 980710 MOV W0, [W14+2] -001D1A 980721 MOV W1, [W14+4] -51: float WheelSpR = k_odo.k_right * PulsEncR; // Spostamento Ruota destra -001D1C 2096C0 MOV #0x96C, W0 -001D1E 900420 MOV [W0+4], W8 -001D20 9004B0 MOV [W0+6], W9 -001D22 804E70 MOV 0x9CE, W0 -001D24 DE80CF ASR W0, #15, W1 -001D26 07F54D RCALL ___floatsisf -001D28 BE0100 MOV.D W0, W2 -001D2A BE0008 MOV.D W8, W0 -001D2C 07F5F3 RCALL ___mulsf3 -001D2E 980730 MOV W0, [W14+6] -001D30 980741 MOV W1, [W14+8] -52: float SumSp = WheelSpR + WheelSpL; // Calcolo della somma degli spostamenti delle ruote -001D32 90011E MOV [W14+2], W2 -001D34 9001AE MOV [W14+4], W3 -001D36 90003E MOV [W14+6], W0 -001D38 9000CE MOV [W14+8], W1 -001D3A 07F46E RCALL ___addsf3 -001D3C 980750 MOV W0, [W14+10] -001D3E 980761 MOV W1, [W14+12] -53: float DifSp = WheelSpR - WheelSpL; // Calcolo della differenza degli spostamenti delle ruote -001D40 90011E MOV [W14+2], W2 -001D42 9001AE MOV [W14+4], W3 -001D44 90003E MOV [W14+6], W0 -001D46 9000CE MOV [W14+8], W1 -001D48 07F466 RCALL ___subsf3 -001D4A 980770 MOV W0, [W14+14] -001D4C 980F01 MOV W1, [W14+16] -54: PulsEncL = 0; // Flush variabile -001D4E EB0000 CLR W0 -001D50 884E60 MOV W0, 0x9CC -55: PulsEncR = 0; // Flush variabile -001D52 EB0000 CLR W0 -001D54 884E70 MOV W0, 0x9CE -56: -57: if (fabs(DifSp) <= parameter.sp_min) { -001D56 90007E MOV [W14+14], W0 -001D58 90088E MOV [W14+16], W1 -001D5A BE0200 MOV.D W0, W4 -001D5C A1F005 BCLR W5, #15 -001D5E 8048B0 MOV 0x916, W0 -001D60 8048C1 MOV 0x918, W1 -001D62 B3C018 MOV #0x1, W8 -001D64 BE0100 MOV.D W0, W2 -001D66 BE0004 MOV.D W4, W0 -001D68 07F507 RCALL ___lesf2 -001D6A 500FE0 SUB W0, #0x0, [W15] -001D6C 340001 BRA LE, 0x1D70 -001D6E EB4400 CLR.B W8 -001D70 544FE0 SUB.B W8, #0x0, [W15] -001D72 32001A BRA Z, 0x1DA8 -58: delta.theta = 0; -001D74 B80060 MUL.UU W0, #0, W0 -001D76 981730 MOV W0, [W14+38] -001D78 981741 MOV W1, [W14+40] -59: delta.space = WheelSpR; -001D7A 90003E MOV [W14+6], W0 -001D7C 9000CE MOV [W14+8], W1 -001D7E 981750 MOV W0, [W14+42] -001D80 981761 MOV W1, [W14+44] -60: delta.x = delta.space * cosTh_old; -001D82 90125E MOV [W14+42], W4 -001D84 9012EE MOV [W14+44], W5 -001D86 823FE0 MOV 0x47FC, W0 -001D88 823FF1 MOV 0x47FE, W1 -001D8A BE0100 MOV.D W0, W2 -001D8C BE0004 MOV.D W4, W0 -001D8E 07F5C2 RCALL ___mulsf3 -001D90 980F70 MOV W0, [W14+30] -001D92 981701 MOV W1, [W14+32] -61: delta.y = delta.space * sinTh_old; -001D94 90125E MOV [W14+42], W4 -001D96 9012EE MOV [W14+44], W5 -001D98 823FC0 MOV 0x47F8, W0 -001D9A 823FD1 MOV 0x47FA, W1 -001D9C BE0100 MOV.D W0, W2 -001D9E BE0004 MOV.D W4, W0 -001DA0 07F5B9 RCALL ___mulsf3 -001DA2 981710 MOV W0, [W14+34] -001DA4 981721 MOV W1, [W14+36] -001DA6 370086 BRA 0x1EB4 -62: } else if (fabs(SumSp) <= parameter.sp_min) { -001DA8 90005E MOV [W14+10], W0 -001DAA 9000EE MOV [W14+12], W1 -001DAC BE0200 MOV.D W0, W4 -001DAE A1F005 BCLR W5, #15 -001DB0 8048B0 MOV 0x916, W0 -001DB2 8048C1 MOV 0x918, W1 -001DB4 B3C018 MOV #0x1, W8 -001DB6 BE0100 MOV.D W0, W2 -001DB8 BE0004 MOV.D W4, W0 -001DBA 07F4DE RCALL ___lesf2 -001DBC 500FE0 SUB W0, #0x0, [W15] -001DBE 340001 BRA LE, 0x1DC2 -001DC0 EB4400 CLR.B W8 -001DC2 544FE0 SUB.B W8, #0x0, [W15] -001DC4 320028 BRA Z, 0x1E16 -63: delta.theta = DifSp / parameter.wheelbase; -001DC6 804810 MOV 0x902, W0 -001DC8 804821 MOV 0x904, W1 -001DCA BE0100 MOV.D W0, W2 -001DCC 90007E MOV [W14+14], W0 -001DCE 90088E MOV [W14+16], W1 -001DD0 07F482 RCALL ___divsf3 -001DD2 981730 MOV W0, [W14+38] -001DD4 981741 MOV W1, [W14+40] -64: coordinate.theta = fmodf(coordinate.theta + delta.theta, 2 * PI); // Angolo normalizzato tra [0,2*PI] -001DD6 804E04 MOV 0x9C0, W4 -001DD8 804E15 MOV 0x9C2, W5 -001DDA 90103E MOV [W14+38], W0 -001DDC 9010CE MOV [W14+40], W1 -001DDE BE0100 MOV.D W0, W2 -001DE0 BE0004 MOV.D W4, W0 -001DE2 07F41A RCALL ___addsf3 -001DE4 20FDB2 MOV #0xFDB, W2 -001DE6 240C93 MOV #0x40C9, W3 -001DE8 07F4F1 RCALL _fmodf -001DEA 884E00 MOV W0, 0x9C0 -001DEC 884E11 MOV W1, 0x9C2 -65: sinTh_old = sinf(coordinate.theta); -001DEE 804E00 MOV 0x9C0, W0 -001DF0 804E11 MOV 0x9C2, W1 -001DF2 07F62D RCALL _sinf -001DF4 8A3FC0 MOV W0, 0x47F8 -001DF6 8A3FD1 MOV W1, 0x47FA -66: cosTh_old = cosf(coordinate.theta); -001DF8 804E00 MOV 0x9C0, W0 -001DFA 804E11 MOV 0x9C2, W1 -001DFC 07F46A RCALL _cosf -001DFE 8A3FE0 MOV W0, 0x47FC -001E00 8A3FF1 MOV W1, 0x47FE -67: delta.x = 0; -001E02 B80060 MUL.UU W0, #0, W0 -001E04 980F70 MOV W0, [W14+30] -001E06 981701 MOV W1, [W14+32] -68: delta.y = 0; -001E08 B80060 MUL.UU W0, #0, W0 -001E0A 981710 MOV W0, [W14+34] -001E0C 981721 MOV W1, [W14+36] -69: delta.space = 0; -001E0E B80060 MUL.UU W0, #0, W0 -001E10 981750 MOV W0, [W14+42] -001E12 981761 MOV W1, [W14+44] -001E14 37004F BRA 0x1EB4 -70: } else { -71: delta.theta = DifSp / parameter.wheelbase; -001E16 804810 MOV 0x902, W0 -001E18 804821 MOV 0x904, W1 -001E1A BE0100 MOV.D W0, W2 -001E1C 90007E MOV [W14+14], W0 -001E1E 90088E MOV [W14+16], W1 -001E20 07F45A RCALL ___divsf3 -001E22 981730 MOV W0, [W14+38] -001E24 981741 MOV W1, [W14+40] -72: coordinate.theta = fmodf(coordinate.theta + delta.theta, 2 * PI); // Angolo normalizzato tra [0,2*PI] -001E26 804E04 MOV 0x9C0, W4 -001E28 804E15 MOV 0x9C2, W5 -001E2A 90103E MOV [W14+38], W0 -001E2C 9010CE MOV [W14+40], W1 -001E2E BE0100 MOV.D W0, W2 -001E30 BE0004 MOV.D W4, W0 -001E32 07F3F2 RCALL ___addsf3 -001E34 20FDB2 MOV #0xFDB, W2 -001E36 240C93 MOV #0x40C9, W3 -001E38 07F4C9 RCALL _fmodf -001E3A 884E00 MOV W0, 0x9C0 -001E3C 884E11 MOV W1, 0x9C2 -73: float cosTh_new = cosf(coordinate.theta); -001E3E 804E00 MOV 0x9C0, W0 -001E40 804E11 MOV 0x9C2, W1 -001E42 07F447 RCALL _cosf -001E44 980F10 MOV W0, [W14+18] -001E46 980F21 MOV W1, [W14+20] -74: float sinTh_new = sinf(coordinate.theta); -001E48 804E00 MOV 0x9C0, W0 -001E4A 804E11 MOV 0x9C2, W1 -001E4C 07F600 RCALL _sinf -001E4E 980F30 MOV W0, [W14+22] -001E50 980F41 MOV W1, [W14+24] -75: delta.space = SumSp / 2; -001E52 200002 MOV #0x0, W2 -001E54 240003 MOV #0x4000, W3 -001E56 90005E MOV [W14+10], W0 -001E58 9000EE MOV [W14+12], W1 -001E5A 07F43D RCALL ___divsf3 -001E5C 981750 MOV W0, [W14+42] -001E5E 981761 MOV W1, [W14+44] -76: float radius = wheel_m * (SumSp / DifSp); -001E60 90017E MOV [W14+14], W2 -001E62 90098E MOV [W14+16], W3 -001E64 90005E MOV [W14+10], W0 -001E66 9000EE MOV [W14+12], W1 -001E68 07F436 RCALL ___divsf3 -001E6A BE0200 MOV.D W0, W4 -001E6C 804BA0 MOV wheel_m, W0 -001E6E 804BB1 MOV 0x976, W1 -001E70 BE0100 MOV.D W0, W2 -001E72 BE0004 MOV.D W4, W0 -001E74 07F54F RCALL ___mulsf3 -001E76 980F50 MOV W0, [W14+26] -001E78 980F61 MOV W1, [W14+28] -77: -78: delta.x = radius * (sinTh_new - sinTh_old); -001E7A 823FC0 MOV 0x47F8, W0 -001E7C 823FD1 MOV 0x47FA, W1 -001E7E BE0100 MOV.D W0, W2 -001E80 90083E MOV [W14+22], W0 -001E82 9008CE MOV [W14+24], W1 -001E84 07F3C8 RCALL ___subsf3 -001E86 90095E MOV [W14+26], W2 -001E88 9009EE MOV [W14+28], W3 -001E8A 07F544 RCALL ___mulsf3 -001E8C 980F70 MOV W0, [W14+30] -001E8E 981701 MOV W1, [W14+32] -79: delta.y = radius * (cosTh_old - cosTh_new); -001E90 823FE0 MOV 0x47FC, W0 -001E92 823FF1 MOV 0x47FE, W1 -001E94 90091E MOV [W14+18], W2 -001E96 9009AE MOV [W14+20], W3 -001E98 07F3BE RCALL ___subsf3 -001E9A 90095E MOV [W14+26], W2 -001E9C 9009EE MOV [W14+28], W3 -001E9E 07F53A RCALL ___mulsf3 -001EA0 981710 MOV W0, [W14+34] -001EA2 981721 MOV W1, [W14+36] -80: sinTh_old = sinTh_new; -001EA4 90083E MOV [W14+22], W0 -001EA6 9008CE MOV [W14+24], W1 -001EA8 8A3FC0 MOV W0, 0x47F8 -001EAA 8A3FD1 MOV W1, 0x47FA -81: cosTh_old = cosTh_new; -001EAC 90081E MOV [W14+18], W0 -001EAE 9008AE MOV [W14+20], W1 -001EB0 8A3FE0 MOV W0, 0x47FC -001EB2 8A3FF1 MOV W1, 0x47FE -82: } -83: coordinate.space += delta.space; -001EB4 804E24 MOV 0x9C4, W4 -001EB6 804E35 MOV 0x9C6, W5 -001EB8 90105E MOV [W14+42], W0 -001EBA 9010EE MOV [W14+44], W1 -001EBC BE0100 MOV.D W0, W2 -001EBE BE0004 MOV.D W4, W0 -001EC0 07F3AB RCALL ___addsf3 -001EC2 884E20 MOV W0, 0x9C4 -001EC4 884E31 MOV W1, 0x9C6 -84: coordinate.x += delta.x; -001EC6 804DC4 MOV coordinate, W4 -001EC8 804DD5 MOV 0x9BA, W5 -001ECA 90087E MOV [W14+30], W0 -001ECC 90108E MOV [W14+32], W1 -001ECE BE0100 MOV.D W0, W2 -001ED0 BE0004 MOV.D W4, W0 -001ED2 07F3A2 RCALL ___addsf3 -001ED4 884DC0 MOV W0, coordinate -001ED6 884DD1 MOV W1, 0x9BA -85: coordinate.y += delta.y; -001ED8 804DE4 MOV 0x9BC, W4 -001EDA 804DF5 MOV 0x9BE, W5 -001EDC 90101E MOV [W14+34], W0 -001EDE 9010AE MOV [W14+36], W1 -001EE0 BE0100 MOV.D W0, W2 -001EE2 BE0004 MOV.D W4, W0 -001EE4 07F399 RCALL ___addsf3 -001EE6 884DE0 MOV W0, 0x9BC -001EE8 884DF1 MOV W1, 0x9BE -86: -87: return TMR1 - t; // Time of esecution -001EEA 800800 MOV TMR1, W0 -001EEC 50001E SUB W0, [W14], W0 -88: } -001EEE BE044F MOV.D [--W15], W8 -001EF0 FA8000 ULNK -001EF2 060000 RETURN diff --git a/dist/XC16_dsPIC33FJ128MC802/production/uNAV.X.production.map b/dist/XC16_dsPIC33FJ128MC802/production/uNAV.X.production.map new file mode 100644 index 0000000..9dd9a22 --- /dev/null +++ b/dist/XC16_dsPIC33FJ128MC802/production/uNAV.X.production.map @@ -0,0 +1,2550 @@ +Microchip Technology Inc, vv1.22 (A) + +Tool Name: + c:\program files (x86)\microchip\xc16\v1.22\bin\bin\..\bin/elf-ld.exe + +Command: + -p33FJ128MC802 \ + -o \ + dist/XC16_dsPIC33FJ128MC802/production/uNAV.X.production.elf \ + -Lc:/program files (x86)/microchip/xc16/v1.22/bin/bin/.. \ + -Lc:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib \ + -Lc:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib/PIC24E \ + -Lc:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../support/PIC24E/gld \ + -Lc:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib/PIC24F \ + -Lc:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../support/PIC24F/gld \ + -Lc:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib/PIC24H \ + -Lc:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../support/PIC24H/gld \ + -Lc:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib/dsPIC30F \ + -Lc:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../support/dsPIC30F/gld \ + -Lc:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib/dsPIC33E \ + -Lc:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../support/dsPIC33E/gld \ + -Lc:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib/dsPIC33F \ + -Lc:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../support/dsPIC33F/gld \ + build/XC16_dsPIC33FJ128MC802/production/parsing_packet.o \ + build/XC16_dsPIC33FJ128MC802/production/serial.o \ + build/XC16_dsPIC33FJ128MC802/production/system.o \ + build/XC16_dsPIC33FJ128MC802/production/interrupts.o \ + build/XC16_dsPIC33FJ128MC802/production/configuration_bits.o \ + build/XC16_dsPIC33FJ128MC802/production/traps.o \ + build/XC16_dsPIC33FJ128MC802/production/user.o \ + build/XC16_dsPIC33FJ128MC802/production/main.o \ + build/XC16_dsPIC33FJ128MC802/production/motors_PID.o \ + build/XC16_dsPIC33FJ128MC802/production/high_level_control.o \ + build/XC16_dsPIC33FJ128MC802/production/decode_packet.o \ + libdsp-elf.a \ + --defsym=__MPLAB_BUILD=1 \ + -Tp33FJ128MC802.gld.00 \ + --stack=16 \ + --check-sections \ + --data-init \ + --pack-data \ + --handles \ + --isr \ + --no-gc-sections \ + --fill-upper=0 \ + --stackguard=16 \ + --no-force-link \ + --smart-io \ + -Map=dist/XC16_dsPIC33FJ128MC802/production/uNAV.X.production.map \ + --report-mem \ + -start-group \ + --library=fx-elf \ + --library=pic30-elf \ + --library=m-elf \ + --library=c-elf \ + -end-group \ + +Archive member included because of file (symbol) + +libdsp-elf.a(pid.obj) build/XC16_dsPIC33FJ128MC802/production/motors_PID.o (_PID) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib/dsPIC33F\libp33FJ128MC802-elf.a(ConfigIntMCPWM1.o) + build/XC16_dsPIC33FJ128MC802/production/system.o (_ConfigIntMCPWM1) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib/dsPIC33F\libp33FJ128MC802-elf.a(OpenMCPWM1.o) + build/XC16_dsPIC33FJ128MC802/production/system.o (_OpenMCPWM1) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib/dsPIC33F\libp33FJ128MC802-elf.a(SetDutyCycleMCPWM1.o) + build/XC16_dsPIC33FJ128MC802/production/system.o (_SetDCMCPWM1) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib/dsPIC33F\libp33FJ128MC802-elf.a(SetMCPWM1DeadTimeGeneration.o) + build/XC16_dsPIC33FJ128MC802/production/system.o (_SetMCPWM1DeadTimeGeneration) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libpic30-elf.a(crt0_standard.o) + (__resetPRI) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libpic30-elf.a(data_init_standard.o) + c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libpic30-elf.a(crt0_standard.o) (__data_init_standard) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(addsf3.eo) + build/XC16_dsPIC33FJ128MC802/production/motors_PID.o (___subsf3) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(cosf.eo) + build/XC16_dsPIC33FJ128MC802/production/high_level_control.o (_cosf) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(divsf3.eo) + build/XC16_dsPIC33FJ128MC802/production/motors_PID.o (___divsf3) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(divsi3.eo) + build/XC16_dsPIC33FJ128MC802/production/motors_PID.o (___divsi3) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(feqltle.eo) + build/XC16_dsPIC33FJ128MC802/production/motors_PID.o (___eqsf2) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(fgtge.eo) + build/XC16_dsPIC33FJ128MC802/production/user.o (___gtsf2) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(fixsfsi.eo) + build/XC16_dsPIC33FJ128MC802/production/user.o (_(float, int, long long, short, float, short, int)) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(floatsisf.eo) + build/XC16_dsPIC33FJ128MC802/production/motors_PID.o (___floatsisf) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(floatunsisf.eo) + build/XC16_dsPIC33FJ128MC802/production/motors_PID.o (___floatunsisf) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(fmodf.eo) + build/XC16_dsPIC33FJ128MC802/production/high_level_control.o (_fmodf) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(fmodrem.eo) + c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(fmodf.eo) (__fmodrem) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(fpack.eo) + c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(addsf3.eo) (__fpack) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(funpack.eo) + c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(fixsfsi.eo) (__funpack) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(funpack2.eo) + c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(addsf3.eo) (__funpack2) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(futil.eo) + c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(addsf3.eo) (__fPropagateNaN) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(mulsf3.eo) + build/XC16_dsPIC33FJ128MC802/production/motors_PID.o (___mulsf3) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(sincosf.eo) + c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(cosf.eo) (__sincosf) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(sinf.eo) + build/XC16_dsPIC33FJ128MC802/production/high_level_control.o (_sinf) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(udivsi3.eo) + c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(divsi3.eo) (___udivsi3) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(errno.eo) + c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(fmodrem.eo) (_errno) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(fcompare.eo) + c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(feqltle.eo) (__fcompare) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(floatdisf.eo) + c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(floatsisf.eo) (___floatdisf) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(floatundisf.eo) + c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(floatunsisf.eo) (___floatundisf) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libc-elf.a(memcpy.eo) + build/XC16_dsPIC33FJ128MC802/production/parsing_packet.o (_memcpy) +c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libc-elf.a(memset.eo) + build/XC16_dsPIC33FJ128MC802/production/serial.o (_memset) + + +Selected CodeGuard Options: + FGS:GWRP:OFF + +CodeGuard FLASH Memory: + boot (none) + secure (none) + general 0x200 to 0x157fe + +CodeGuard RAM Memory: + general 0x800 to 0x47ff + secure (none) + boot (none) + + +Program Memory [Origin = 0x200, Length = 0x15600] + +section address length (PC units) length (bytes) (dec) +------- ------- ----------------- -------------------- +.text 0x200 0x9ac 0xe82 (3714) +.const 0xbac 0x26 0x39 (57) +.text 0xbd2 0x24e0 0x3750 (14160) +.dinit 0x30b2 0x86 0xc9 (201) +.text 0x3138 0x18 0x24 (36) + + Total program memory used (bytes): 0x46f8 (18168) 13% + + +Data Memory [Origin = 0x800, Length = 0x4000] + +section address alignment gaps total length (dec) +------- ------- -------------- ------------------- +.xbss 0x800 0 0xc (12) +.nbss 0x80c 0 0x2 (2) +.bss 0x80e 0 0x8f4 (2292) +.data 0x1102 0 0x32 (50) +_03B6F6605415eda1 0x4600 0 0x100 (256) +_03B2DC005415eda0 0x4700 0 0xc8 (200) +.ybss 0x47c8 0 0xc (12) +.bss 0x47d4 0 0x6 (6) +.data 0x47da 0 0x8 (8) + + Total data memory used (bytes): 0xb16 (2838) 17% + + +Dynamic Memory Usage + +region address maximum length (dec) +------ ------- --------------------- +heap 0 0 (0) +stack 0x1134 0x34cc (13516) + + Maximum dynamic memory (bytes): 0x34cc (13516) + + +External Symbols in Data Memory (by address): + + 0x0800 _abcCoefficient1 + 0x0806 _abcCoefficient2 + 0x080e _coordinate + 0x081e _delta_odometry + 0x0e5e _counter_delta + 0x0e60 _autosend_delta_odometry + 0x0e62 _sinTh_old + 0x0e66 _receive_pkg + 0x0f32 _receive_header + 0x0f34 _index_data + 0x0f36 _serial_error + 0x0f50 _PIDstruct1 + 0x0f5a _kCoeffs1 + 0x0f60 _PIDstruct2 + 0x0f6a _kCoeffs2 + 0x0f70 _PulsEncL + 0x0f72 _PulsEncR + 0x0f74 _parameter_motors + 0x0f96 _constraint + 0x0f9e _vel_rif + 0x0fa6 _vel_mis + 0x0fae _pid_left + 0x0fba _pid_right + 0x0fc6 _enable_motors + 0x0fc8 _motor_left + 0x0fd0 _motor_right + 0x0fd8 _emergency + 0x0fde _last_vel_rif + 0x0fe6 _const_vel + 0x0ff2 _k_odo + 0x0ffa _wheel_m + 0x0ffe _parameter_int + 0x1012 _counter_stop + 0x1014 _counter + 0x1016 _counter_odo + 0x1018 _counter_pid + 0x101a _overTmrL + 0x101c _overTmrR + 0x101e _timePeriodL + 0x1022 _timePeriodR + 0x1026 _SIG_VELL + 0x1028 _SIG_VELR + 0x102a _time + 0x1044 _priority + 0x105e _frequency + 0x1078 _name_process_pid_l + 0x108e _name_process_pid_r + 0x10a4 _name_process_velocity + 0x10ba _name_process_odometry + 0x1102 _version_date_ + 0x110e _version_time_ + 0x1117 _author_code + 0x1128 _name_board + 0x112d _version_code + 0x4600 _AdcBuffer + 0x4700 _BufferTx + 0x47c8 _controlHistory1 + 0x47ce _controlHistory2 + 0x47d4 _reset_count + 0x47d6 _parameter_system + 0x47da _cosTh_old + 0x47de _pkg_parse + 0x47e0 _save_velocity + +External Symbols in Data Memory (by name): + + 0x4600 _AdcBuffer + 0x4700 _BufferTx + 0x0f50 _PIDstruct1 + 0x0f60 _PIDstruct2 + 0x0f70 _PulsEncL + 0x0f72 _PulsEncR + 0x1026 _SIG_VELL + 0x1028 _SIG_VELR + 0x0800 _abcCoefficient1 + 0x0806 _abcCoefficient2 + 0x1117 _author_code + 0x0e60 _autosend_delta_odometry + 0x0fe6 _const_vel + 0x0f96 _constraint + 0x47c8 _controlHistory1 + 0x47ce _controlHistory2 + 0x080e _coordinate + 0x47da _cosTh_old + 0x1014 _counter + 0x0e5e _counter_delta + 0x1016 _counter_odo + 0x1018 _counter_pid + 0x1012 _counter_stop + 0x081e _delta_odometry + 0x0fd8 _emergency + 0x0fc6 _enable_motors + 0x105e _frequency + 0x0f34 _index_data + 0x0f5a _kCoeffs1 + 0x0f6a _kCoeffs2 + 0x0ff2 _k_odo + 0x0fde _last_vel_rif + 0x0fc8 _motor_left + 0x0fd0 _motor_right + 0x1128 _name_board + 0x10ba _name_process_odometry + 0x1078 _name_process_pid_l + 0x108e _name_process_pid_r + 0x10a4 _name_process_velocity + 0x101a _overTmrL + 0x101c _overTmrR + 0x0ffe _parameter_int + 0x0f74 _parameter_motors + 0x47d6 _parameter_system + 0x0fae _pid_left + 0x0fba _pid_right + 0x47de _pkg_parse + 0x1044 _priority + 0x0f32 _receive_header + 0x0e66 _receive_pkg + 0x47d4 _reset_count + 0x47e0 _save_velocity + 0x0f36 _serial_error + 0x0e62 _sinTh_old + 0x102a _time + 0x101e _timePeriodL + 0x1022 _timePeriodR + 0x0fa6 _vel_mis + 0x0f9e _vel_rif + 0x112d _version_code + 0x1102 _version_date_ + 0x110e _version_time_ + 0x0ffa _wheel_m + +External Symbols in Program Memory (by address): + + 0x000200 __resetPRI + 0x00022c __psv_init + 0x00023c __data_init + 0x00023c __data_init_standard + 0x0002a6 __IC1Interrupt + 0x0002ec __IC2Interrupt + 0x000332 __T1Interrupt + 0x0003e0 __T2Interrupt + 0x000414 __OC1Interrupt + 0x00044a __OC2Interrupt + 0x000474 __RTCCInterrupt + 0x00049e _ReadUART1 + 0x0004b8 __U1RXInterrupt + 0x000512 __DMA0Interrupt + 0x000538 __DMA1Interrupt + 0x00054c __OscillatorFail + 0x000554 __AddressError + 0x00055c __StackError + 0x000564 __MathError + 0x00056c __DMACError + 0x000574 __AltOscillatorFail + 0x00057c __AltAddressError + 0x000584 __AltStackError + 0x00058c __AltMathError + 0x000594 __AltDMACError + 0x00059c __DefaultInterrupt + 0x0005a0 _PID + 0x0005d8 _PIDInit + 0x0005ee _PIDCoeffCalc + 0x000612 _ConfigIntMCPWM1 + 0x00065a _OpenMCPWM1 + 0x000666 _SetDCMCPWM1 + 0x00067c _SetMCPWM1DeadTimeGeneration + 0x000680 ___subsf3 + 0x000682 ___addsf3 + 0x00073c _cosf + 0x000740 ___divsf3 + 0x0007c4 ___divsi3 + 0x0007e2 ___eqsf2 + 0x0007e2 ___ltsf2 + 0x0007e2 ___lesf2 + 0x0007e6 ___gtsf2 + 0x0007e6 ___gesf2 + 0x0007ea ___fixsfsi + 0x00082c ___floatsisf + 0x000832 ___floatunsisf + 0x000836 _fmodf + 0x00083a __fmodrem + 0x0008d8 __fpack + 0x000924 __funpack + 0x00094e __funpack2 + 0x00095e __fPropagateNaN + 0x000970 __fbopExit + 0x000978 __fbopReturnNaN + 0x00097e ___mulsf3 + 0x0009e6 __sincosf + 0x000ab8 _sinf + 0x000abc ___udivsi3 + 0x000adc __fcompare + 0x000b12 ___floatdisf + 0x000b32 ___floatundisf + 0x000b90 _memcpy + 0x000b9e _memset + 0x000bd2 _init_parameter + 0x000c8a _update_parameter + 0x000d48 _init_pid_control + 0x000d7e _update_pid_l + 0x000e9e _update_pid_r + 0x000fbe _InitPid1 + 0x000fd6 _InitPid2 + 0x000fee _Emergency + 0x001190 _Velocity + 0x0013fc _MotorPIDL + 0x00149c _MotorPIDR + 0x00153c _adc_motors_current + 0x0015f0 _init_hashmap + 0x001642 _saveData + 0x0018a2 _sendData + 0x001b26 _parse_packet + 0x001c5e _encoder + 0x001cd2 _encoderSingle + 0x001d1e _createPacket + 0x001dd6 _createDataPacket + 0x001df6 _saveOtherData + 0x002100 _sendOtherData + 0x002542 _init_process + 0x0025bc _decodeNameProcess + 0x00261c _update_priority + 0x00262c _update_frequency + 0x002662 _services + 0x00271a _InitInterrupts + 0x002774 _ConfigureOscillator + 0x0027c6 _InitPWM + 0x00280c _InitQEI1 + 0x002838 _InitQEI2 + 0x002864 _InitIC1 + 0x002896 _InitIC2 + 0x0028c8 _InitTimer1 + 0x0028f8 _InitTimer2 + 0x002926 _InitUART1 + 0x002960 _InitDMA0 + 0x002996 _InitDMA1 + 0x0029d4 _InitADC + 0x002a62 _init_coordinate + 0x002a80 _update_coord + 0x002aa2 _deadReckoning + 0x002d80 _odometry + 0x002ddc _init_buff_serial_error + 0x002dea _decode_pkgs + 0x002dfc _pkg_header + 0x002e2a _pkg_length + 0x002e50 _pkg_data + 0x002eb8 _pkg_error + 0x002ee2 _pkg_checksum + 0x002f14 _pkg_send + 0x002f86 _InitApp + 0x003024 _protectedMemcpy + 0x003052 _maxValue + 0x003138 _main + 0xf80004 __FGS.sec + +External Symbols in Program Memory (by name): + + 0x000612 _ConfigIntMCPWM1 + 0x002774 _ConfigureOscillator + 0x000fee _Emergency + 0x0029d4 _InitADC + 0x002f86 _InitApp + 0x002960 _InitDMA0 + 0x002996 _InitDMA1 + 0x002864 _InitIC1 + 0x002896 _InitIC2 + 0x00271a _InitInterrupts + 0x0027c6 _InitPWM + 0x000fbe _InitPid1 + 0x000fd6 _InitPid2 + 0x00280c _InitQEI1 + 0x002838 _InitQEI2 + 0x0028c8 _InitTimer1 + 0x0028f8 _InitTimer2 + 0x002926 _InitUART1 + 0x0013fc _MotorPIDL + 0x00149c _MotorPIDR + 0x00065a _OpenMCPWM1 + 0x0005a0 _PID + 0x0005ee _PIDCoeffCalc + 0x0005d8 _PIDInit + 0x00049e _ReadUART1 + 0x000666 _SetDCMCPWM1 + 0x00067c _SetMCPWM1DeadTimeGeneration + 0x001190 _Velocity + 0x000554 __AddressError + 0x00057c __AltAddressError + 0x000594 __AltDMACError + 0x00058c __AltMathError + 0x000574 __AltOscillatorFail + 0x000584 __AltStackError + 0x000512 __DMA0Interrupt + 0x000538 __DMA1Interrupt + 0x00056c __DMACError + 0x00059c __DefaultInterrupt + 0xf80004 __FGS.sec + 0x0002a6 __IC1Interrupt + 0x0002ec __IC2Interrupt + 0x000564 __MathError + 0x000414 __OC1Interrupt + 0x00044a __OC2Interrupt + 0x00054c __OscillatorFail + 0x000474 __RTCCInterrupt + 0x00055c __StackError + 0x000332 __T1Interrupt + 0x0003e0 __T2Interrupt + 0x0004b8 __U1RXInterrupt + 0x000682 ___addsf3 + 0x000740 ___divsf3 + 0x0007c4 ___divsi3 + 0x0007e2 ___eqsf2 + 0x0007ea ___fixsfsi + 0x000b12 ___floatdisf + 0x00082c ___floatsisf + 0x000b32 ___floatundisf + 0x000832 ___floatunsisf + 0x0007e6 ___gesf2 + 0x0007e6 ___gtsf2 + 0x0007e2 ___lesf2 + 0x0007e2 ___ltsf2 + 0x00097e ___mulsf3 + 0x000680 ___subsf3 + 0x000abc ___udivsi3 + 0x00023c __data_init + 0x00023c __data_init_standard + 0x00095e __fPropagateNaN + 0x000970 __fbopExit + 0x000978 __fbopReturnNaN + 0x000adc __fcompare + 0x00083a __fmodrem + 0x0008d8 __fpack + 0x000924 __funpack + 0x00094e __funpack2 + 0x00022c __psv_init + 0x000200 __resetPRI + 0x0009e6 __sincosf + 0x00153c _adc_motors_current + 0x00073c _cosf + 0x001dd6 _createDataPacket + 0x001d1e _createPacket + 0x002aa2 _deadReckoning + 0x0025bc _decodeNameProcess + 0x002dea _decode_pkgs + 0x001c5e _encoder + 0x001cd2 _encoderSingle + 0x000836 _fmodf + 0x002ddc _init_buff_serial_error + 0x002a62 _init_coordinate + 0x0015f0 _init_hashmap + 0x000bd2 _init_parameter + 0x000d48 _init_pid_control + 0x002542 _init_process + 0x003138 _main + 0x003052 _maxValue + 0x000b90 _memcpy + 0x000b9e _memset + 0x002d80 _odometry + 0x001b26 _parse_packet + 0x002ee2 _pkg_checksum + 0x002e50 _pkg_data + 0x002eb8 _pkg_error + 0x002dfc _pkg_header + 0x002e2a _pkg_length + 0x002f14 _pkg_send + 0x003024 _protectedMemcpy + 0x001642 _saveData + 0x001df6 _saveOtherData + 0x0018a2 _sendData + 0x002100 _sendOtherData + 0x002662 _services + 0x000ab8 _sinf + 0x002a80 _update_coord + 0x00262c _update_frequency + 0x000c8a _update_parameter + 0x000d7e _update_pid_l + 0x000e9e _update_pid_r + 0x00261c _update_priority + +Memory Configuration + +Name Origin Length Attributes +data 0x000800 0x004000 a !xr +reset 0x000000 0x000004 +ivt 0x000004 0x0000fc +_reserved 0x000100 0x000004 +aivt 0x000104 0x0000fc +program 0x000200 0x015600 xr +FBS 0xf80000 0x000002 +FSS 0xf80002 0x000002 +FGS 0xf80004 0x000002 +FOSCSEL 0xf80006 0x000002 +FOSC 0xf80008 0x000002 +FWDT 0xf8000a 0x000002 +FPOR 0xf8000c 0x000002 +FICD 0xf8000e 0x000002 +FUID0 0xf80010 0x000002 +FUID1 0xf80012 0x000002 +FUID2 0xf80014 0x000002 +FUID3 0xf80016 0x000002 +*default* 0x000000 0xffffffff + +Linker script and memory map + +LOAD build/XC16_dsPIC33FJ128MC802/production/parsing_packet.o +LOAD build/XC16_dsPIC33FJ128MC802/production/serial.o +LOAD build/XC16_dsPIC33FJ128MC802/production/system.o +LOAD build/XC16_dsPIC33FJ128MC802/production/interrupts.o +LOAD build/XC16_dsPIC33FJ128MC802/production/configuration_bits.o +LOAD build/XC16_dsPIC33FJ128MC802/production/traps.o +LOAD build/XC16_dsPIC33FJ128MC802/production/user.o +LOAD build/XC16_dsPIC33FJ128MC802/production/main.o +LOAD build/XC16_dsPIC33FJ128MC802/production/motors_PID.o +LOAD build/XC16_dsPIC33FJ128MC802/production/high_level_control.o +LOAD build/XC16_dsPIC33FJ128MC802/production/decode_packet.o +LOAD libdsp-elf.a + 0x0001 __MPLAB_BUILD = 0x1 +LOAD c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib/dsPIC33F\libp33FJ128MC802-elf.a + 0xf80000 __FBS = 0xf80000 + 0xf80002 __FSS = 0xf80002 + 0xf80004 __FGS = 0xf80004 + 0xf80006 __FOSCSEL = 0xf80006 + 0xf80008 __FOSC = 0xf80008 + 0xf8000a __FWDT = 0xf8000a + 0xf8000c __FPOR = 0xf8000c + 0xf8000e __FICD = 0xf8000e + 0xf80010 __FUID0 = 0xf80010 + 0xf80012 __FUID1 = 0xf80012 + 0xf80014 __FUID2 = 0xf80014 + 0xf80016 __FUID3 = 0xf80016 + 0x0200 __CODE_BASE = 0x200 + 0x15600 __CODE_LENGTH = 0x15600 + 0x0004 __IVT_BASE = 0x4 + 0x0104 __AIVT_BASE = 0x104 + 0x0800 __DATA_BASE = 0x800 + 0x4000 __DATA_LENGTH = 0x4000 + 0x2800 __YDATA_BASE = 0x2800 + 0x4000 __DMA_BASE = 0x4000 + 0x47ff __DMA_END = 0x47ff + +.reset 0x000000 0x4 + 0x000000 0x2 SHORT 0x200 ABSOLUTE (__reset) + 0x000001 0x2 SHORT 0x4 + 0x000002 0x2 SHORT 0x0 ((ABSOLUTE (__reset) >> 0x10) & 0x7f) + 0x000003 0x2 SHORT 0x0 + +.text 0x000200 0x9ac + *(.init) + .init 0x000200 0x3c c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libpic30-elf.a(crt0_standard.o) + 0x000200 __resetPRI + 0x000200 __reset + 0x00022c __psv_init + .init 0x00023c 0x5e c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libpic30-elf.a(data_init_standard.o) + 0x00023c __data_init_standard + 0x00023c __data_init + *(.user_init) + *(.handle) + .handle 0x00029a 0xc jump_table + *(.isr*) + .isr.text 0x0002a6 0x2a6 build/XC16_dsPIC33FJ128MC802/production/interrupts.o + 0x0002a6 __IC1Interrupt + 0x0002ec __IC2Interrupt + 0x000332 __T1Interrupt + 0x0003e0 __T2Interrupt + 0x000414 __OC1Interrupt + 0x00044a __OC2Interrupt + 0x000474 __RTCCInterrupt + 0x00049e _ReadUART1 + 0x0004b8 __U1RXInterrupt + 0x000512 __DMA0Interrupt + 0x000538 __DMA1Interrupt + .isr.text 0x00054c 0x54 build/XC16_dsPIC33FJ128MC802/production/traps.o + 0x00054c __OscillatorFail + 0x000554 __AddressError + 0x00055c __StackError + 0x000564 __MathError + 0x00056c __DMACError + 0x000574 __AltOscillatorFail + 0x00057c __AltAddressError + 0x000584 __AltStackError + 0x00058c __AltMathError + 0x000594 __AltDMACError + 0x00059c __DefaultInterrupt + *(.libc) + *(.libm) + *(.libdsp) + .libdsp 0x0005a0 0x72 libdsp-elf.a(pid.obj) + 0x0005a0 _PID + 0x0005d8 _PIDInit + 0x0005ee _PIDCoeffCalc + *(.lib*) + .libperi 0x000612 0x48 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib/dsPIC33F\libp33FJ128MC802-elf.a(ConfigIntMCPWM1.o) + 0x000612 _ConfigIntMCPWM1 + .libperi 0x00065a 0xc c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib/dsPIC33F\libp33FJ128MC802-elf.a(OpenMCPWM1.o) + 0x00065a _OpenMCPWM1 + .libperi 0x000666 0x16 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib/dsPIC33F\libp33FJ128MC802-elf.a(SetDutyCycleMCPWM1.o) + 0x000666 _SetDCMCPWM1 + .libperi 0x00067c 0x4 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib/dsPIC33F\libp33FJ128MC802-elf.a(SetMCPWM1DeadTimeGeneration.o) + 0x00067c _SetMCPWM1DeadTimeGeneration + .libm.subsf3 0x000680 0xbc c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(addsf3.eo) + 0x000680 ___subsf3 + 0x000682 ___addsf3 + .libm.cosf 0x00073c 0x4 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(cosf.eo) + 0x00073c _cosf + .libm.divfs3 0x000740 0x84 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(divsf3.eo) + 0x000740 ___divsf3 + .libm.divsi3 0x0007c4 0x1e c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(divsi3.eo) + 0x0007c4 ___divsi3 + .libm.eqsf2 0x0007e2 0x4 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(feqltle.eo) + 0x0007e2 ___eqsf2 + 0x0007e2 ___ltsf2 + 0x0007e2 ___lesf2 + .libm.gtsf2 0x0007e6 0x4 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(fgtge.eo) + 0x0007e6 ___gesf2 + 0x0007e6 ___gtsf2 + .libm.fixsfsi 0x0007ea 0x42 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(fixsfsi.eo) + 0x0007ea _(float, int, long long, short, float, short, int) + .libm.floatsisf + 0x00082c 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(floatsisf.eo) + 0x00082c ___floatsisf + .libm.floatunsisf + 0x000832 0x4 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(floatunsisf.eo) + 0x000832 ___floatunsisf + .libm.fmodf 0x000836 0x4 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(fmodf.eo) + 0x000836 _fmodf + .libm.fmodrem 0x00083a 0x9e c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(fmodrem.eo) + 0x00083a __fmodrem + .libm.fpack 0x0008d8 0x4c c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(fpack.eo) + 0x0008d8 __fpack + .libm.funpack 0x000924 0x2a c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(funpack.eo) + 0x000924 __funpack + .libm.funpack2 + 0x00094e 0x10 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(funpack2.eo) + 0x00094e __funpack2 + .libm.fPropagateNaN + 0x00095e 0x12 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(futil.eo) + 0x00095e __fPropagateNaN + .libm.fbobExit + 0x000970 0x8 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(futil.eo) + 0x000970 __fbopExit + .libm.fbopReturnNaN + 0x000978 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(futil.eo) + 0x000978 __fbopReturnNaN + .libm.mulsf3 0x00097e 0x68 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(mulsf3.eo) + 0x00097e ___mulsf3 + .libm.sincosf 0x0009e6 0xd2 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(sincosf.eo) + 0x0009e6 __sincosf + .libm.sinf 0x000ab8 0x4 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(sinf.eo) + 0x000ab8 _sinf + .libm.udivsi3 0x000abc 0x20 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(udivsi3.eo) + 0x000abc ___udivsi3 + .libm.fcompare + 0x000adc 0x36 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(fcompare.eo) + 0x000adc __fcompare + .libm.floatdisf + 0x000b12 0x20 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(floatdisf.eo) + 0x000b12 ___floatdisf + .libm.floatundisf + 0x000b32 0x5e c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(floatundisf.eo) + 0x000b32 ___floatundisf + .libc.memcpy 0x000b90 0xe c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libc-elf.a(memcpy.eo) + 0x000b90 _memcpy + .libc.memset 0x000b9e 0xe c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libc-elf.a(memset.eo) + 0x000b9e _memset + +usercode + *(usercode) + +__FBS + *(__FBS.sec*) + +__FSS + *(__FSS.sec*) + +__FGS 0xf80004 0x2 + *(__FGS.sec*) + __FGS.sec 0xf80004 0x2 FGS + 0xf80004 __FGS.sec + +__FOSCSEL 0xf80006 0x2 + *(__FOSCSEL.sec*) + __FOSCSEL.sec 0xf80006 0x2 build/XC16_dsPIC33FJ128MC802/production/configuration_bits.o + +__FOSC 0xf80008 0x2 + *(__FOSC.sec*) + __FOSC.sec 0xf80008 0x2 build/XC16_dsPIC33FJ128MC802/production/configuration_bits.o + +__FWDT 0xf8000a 0x2 + *(__FWDT.sec*) + __FWDT.sec 0xf8000a 0x2 build/XC16_dsPIC33FJ128MC802/production/configuration_bits.o + +__FPOR + *(__FPOR.sec*) + +__FICD 0xf8000e 0x2 + *(__FICD.sec*) + __FICD.sec 0xf8000e 0x2 build/XC16_dsPIC33FJ128MC802/production/configuration_bits.o + +__FUID0 + *(__FUID0.sec*) + +__FUID1 + *(__FUID1.sec*) + +__FUID2 + *(__FUID2.sec*) + +__FUID3 + *(__FUID3.sec*) + +.comment + *(.comment) + +.debug_info 0x000000 0x9697 + *(.debug_info) + .debug_info 0x000000 0xc46 build/XC16_dsPIC33FJ128MC802/production/parsing_packet.o + .debug_info 0x000c46 0x964 build/XC16_dsPIC33FJ128MC802/production/serial.o + .debug_info 0x0015aa 0x39f2 build/XC16_dsPIC33FJ128MC802/production/system.o + .debug_info 0x004f9c 0x10b0 build/XC16_dsPIC33FJ128MC802/production/interrupts.o + .debug_info 0x00604c 0x10d build/XC16_dsPIC33FJ128MC802/production/configuration_bits.o + .debug_info 0x006159 0x3dd build/XC16_dsPIC33FJ128MC802/production/traps.o + .debug_info 0x006536 0xc5f build/XC16_dsPIC33FJ128MC802/production/user.o + .debug_info 0x007195 0x155 build/XC16_dsPIC33FJ128MC802/production/main.o + .debug_info 0x0072ea 0xe0e build/XC16_dsPIC33FJ128MC802/production/motors_PID.o + .debug_info 0x0080f8 0xa7e build/XC16_dsPIC33FJ128MC802/production/high_level_control.o + .debug_info 0x008b76 0xb21 build/XC16_dsPIC33FJ128MC802/production/decode_packet.o + *(.gnu.linkonce.wi.*) + +.debug_abbrev 0x000000 0xde9 + *(.debug_abbrev) + .debug_abbrev 0x000000 0x1ae build/XC16_dsPIC33FJ128MC802/production/parsing_packet.o + .debug_abbrev 0x0001ae 0x196 build/XC16_dsPIC33FJ128MC802/production/serial.o + .debug_abbrev 0x000344 0x235 build/XC16_dsPIC33FJ128MC802/production/system.o + .debug_abbrev 0x000579 0x1af build/XC16_dsPIC33FJ128MC802/production/interrupts.o + .debug_abbrev 0x000728 0x30 build/XC16_dsPIC33FJ128MC802/production/configuration_bits.o + .debug_abbrev 0x000758 0x7d build/XC16_dsPIC33FJ128MC802/production/traps.o + .debug_abbrev 0x0007d5 0x126 build/XC16_dsPIC33FJ128MC802/production/user.o + .debug_abbrev 0x0008fb 0x43 build/XC16_dsPIC33FJ128MC802/production/main.o + .debug_abbrev 0x00093e 0x1d5 build/XC16_dsPIC33FJ128MC802/production/motors_PID.o + .debug_abbrev 0x000b13 0x15d build/XC16_dsPIC33FJ128MC802/production/high_level_control.o + .debug_abbrev 0x000c70 0x179 build/XC16_dsPIC33FJ128MC802/production/decode_packet.o + +.debug_line 0x000000 0x288d + *(.debug_line) + .debug_line 0x000000 0x492 build/XC16_dsPIC33FJ128MC802/production/parsing_packet.o + .debug_line 0x000492 0x302 build/XC16_dsPIC33FJ128MC802/production/serial.o + .debug_line 0x000794 0xa10 build/XC16_dsPIC33FJ128MC802/production/system.o + .debug_line 0x0011a4 0x3dc build/XC16_dsPIC33FJ128MC802/production/interrupts.o + .debug_line 0x001580 0x84 build/XC16_dsPIC33FJ128MC802/production/configuration_bits.o + .debug_line 0x001604 0x1fd build/XC16_dsPIC33FJ128MC802/production/traps.o + .debug_line 0x001801 0x272 build/XC16_dsPIC33FJ128MC802/production/user.o + .debug_line 0x001a73 0xe6 build/XC16_dsPIC33FJ128MC802/production/main.o + .debug_line 0x001b59 0x68d build/XC16_dsPIC33FJ128MC802/production/motors_PID.o + .debug_line 0x0021e6 0x312 build/XC16_dsPIC33FJ128MC802/production/high_level_control.o + .debug_line 0x0024f8 0x395 build/XC16_dsPIC33FJ128MC802/production/decode_packet.o + +.debug_frame 0x000000 0x618 + *(.debug_frame) + .debug_frame 0x000000 0xe4 build/XC16_dsPIC33FJ128MC802/production/parsing_packet.o + .debug_frame 0x0000e4 0x94 build/XC16_dsPIC33FJ128MC802/production/serial.o + .debug_frame 0x000178 0x134 build/XC16_dsPIC33FJ128MC802/production/system.o + .debug_frame 0x0002ac 0xc4 build/XC16_dsPIC33FJ128MC802/production/interrupts.o + .debug_frame 0x000370 0xc4 build/XC16_dsPIC33FJ128MC802/production/traps.o + .debug_frame 0x000434 0x44 build/XC16_dsPIC33FJ128MC802/production/user.o + .debug_frame 0x000478 0x24 build/XC16_dsPIC33FJ128MC802/production/main.o + .debug_frame 0x00049c 0xd4 build/XC16_dsPIC33FJ128MC802/production/motors_PID.o + .debug_frame 0x000570 0x74 build/XC16_dsPIC33FJ128MC802/production/high_level_control.o + .debug_frame 0x0005e4 0x34 build/XC16_dsPIC33FJ128MC802/production/decode_packet.o + +.debug_str 0x000000 0x83b + *(.debug_str) + .debug_str 0x000000 0x111 build/XC16_dsPIC33FJ128MC802/production/parsing_packet.o + .debug_str 0x000111 0x6f build/XC16_dsPIC33FJ128MC802/production/serial.o + .debug_str 0x000180 0x268 build/XC16_dsPIC33FJ128MC802/production/system.o + .debug_str 0x0003e8 0xc6 build/XC16_dsPIC33FJ128MC802/production/interrupts.o + .debug_str 0x0004ae 0xc build/XC16_dsPIC33FJ128MC802/production/traps.o + .debug_str 0x0004ba 0x5f build/XC16_dsPIC33FJ128MC802/production/user.o + .debug_str 0x000519 0x18d build/XC16_dsPIC33FJ128MC802/production/motors_PID.o + .debug_str 0x0006a6 0xc8 build/XC16_dsPIC33FJ128MC802/production/high_level_control.o + .debug_str 0x00076e 0xcd build/XC16_dsPIC33FJ128MC802/production/decode_packet.o + +.debug_loc + *(.debug_loc) + +.debug_macinfo + *(.debug_macinfo) + +.debug_pubnames + 0x000000 0xa03 + *(.debug_pubnames) + .debug_pubnames + 0x000000 0x92 build/XC16_dsPIC33FJ128MC802/production/parsing_packet.o + .debug_pubnames + 0x000092 0xf2 build/XC16_dsPIC33FJ128MC802/production/serial.o + .debug_pubnames + 0x000184 0x1a3 build/XC16_dsPIC33FJ128MC802/production/system.o + .debug_pubnames + 0x000327 0x1ed build/XC16_dsPIC33FJ128MC802/production/interrupts.o + .debug_pubnames + 0x000514 0x46 build/XC16_dsPIC33FJ128MC802/production/configuration_bits.o + .debug_pubnames + 0x00055a 0xdf build/XC16_dsPIC33FJ128MC802/production/traps.o + .debug_pubnames + 0x000639 0x3f build/XC16_dsPIC33FJ128MC802/production/user.o + .debug_pubnames + 0x000678 0x1b build/XC16_dsPIC33FJ128MC802/production/main.o + .debug_pubnames + 0x000693 0x278 build/XC16_dsPIC33FJ128MC802/production/motors_PID.o + .debug_pubnames + 0x00090b 0xc2 build/XC16_dsPIC33FJ128MC802/production/high_level_control.o + .debug_pubnames + 0x0009cd 0x36 build/XC16_dsPIC33FJ128MC802/production/decode_packet.o + +.debug_ranges + *(.debug_ranges) + +.debug_aranges 0x000000 0xf0 + *(.debug_aranges) + .debug_aranges + 0x000000 0x18 build/XC16_dsPIC33FJ128MC802/production/parsing_packet.o + .debug_aranges + 0x000018 0x18 build/XC16_dsPIC33FJ128MC802/production/serial.o + .debug_aranges + 0x000030 0x18 build/XC16_dsPIC33FJ128MC802/production/system.o + .debug_aranges + 0x000048 0x18 build/XC16_dsPIC33FJ128MC802/production/interrupts.o + .debug_aranges + 0x000060 0x18 build/XC16_dsPIC33FJ128MC802/production/traps.o + .debug_aranges + 0x000078 0x18 build/XC16_dsPIC33FJ128MC802/production/user.o + .debug_aranges + 0x000090 0x18 build/XC16_dsPIC33FJ128MC802/production/main.o + .debug_aranges + 0x0000a8 0x18 build/XC16_dsPIC33FJ128MC802/production/motors_PID.o + .debug_aranges + 0x0000c0 0x18 build/XC16_dsPIC33FJ128MC802/production/high_level_control.o + .debug_aranges + 0x0000d8 0x18 build/XC16_dsPIC33FJ128MC802/production/decode_packet.o + +.ivt 0x000004 0xfc + 0x000004 0x4 LONG 0x59c DEFINED (__ReservedTrap0)?ABSOLUTE (__ReservedTrap0):ABSOLUTE (__DefaultInterrupt) + 0x000006 0x4 LONG 0x54c DEFINED (__OscillatorFail)?ABSOLUTE (__OscillatorFail):ABSOLUTE (__DefaultInterrupt) + 0x000008 0x4 LONG 0x554 DEFINED (__AddressError)?ABSOLUTE (__AddressError):ABSOLUTE (__DefaultInterrupt) + 0x00000a 0x4 LONG 0x55c DEFINED (__StackError)?ABSOLUTE (__StackError):ABSOLUTE (__DefaultInterrupt) + 0x00000c 0x4 LONG 0x564 DEFINED (__MathError)?ABSOLUTE (__MathError):ABSOLUTE (__DefaultInterrupt) + 0x00000e 0x4 LONG 0x56c DEFINED (__DMACError)?ABSOLUTE (__DMACError):ABSOLUTE (__DefaultInterrupt) + 0x000010 0x4 LONG 0x59c DEFINED (__ReservedTrap6)?ABSOLUTE (__ReservedTrap6):ABSOLUTE (__DefaultInterrupt) + 0x000012 0x4 LONG 0x59c DEFINED (__ReservedTrap7)?ABSOLUTE (__ReservedTrap7):ABSOLUTE (__DefaultInterrupt) + 0x000014 0x4 LONG 0x59c DEFINED (__INT0Interrupt)?ABSOLUTE (__INT0Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000016 0x4 LONG 0x2a6 DEFINED (__IC1Interrupt)?ABSOLUTE (__IC1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000018 0x4 LONG 0x414 DEFINED (__OC1Interrupt)?ABSOLUTE (__OC1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x00001a 0x4 LONG 0x332 DEFINED (__T1Interrupt)?ABSOLUTE (__T1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x00001c 0x4 LONG 0x512 DEFINED (__DMA0Interrupt)?ABSOLUTE (__DMA0Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x00001e 0x4 LONG 0x2ec DEFINED (__IC2Interrupt)?ABSOLUTE (__IC2Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000020 0x4 LONG 0x44a DEFINED (__OC2Interrupt)?ABSOLUTE (__OC2Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000022 0x4 LONG 0x3e0 DEFINED (__T2Interrupt)?ABSOLUTE (__T2Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000024 0x4 LONG 0x59c DEFINED (__T3Interrupt)?ABSOLUTE (__T3Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000026 0x4 LONG 0x59c DEFINED (__SPI1ErrInterrupt)?ABSOLUTE (__SPI1ErrInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x000028 0x4 LONG 0x59c DEFINED (__SPI1Interrupt)?ABSOLUTE (__SPI1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x00002a 0x4 LONG 0x4b8 DEFINED (__U1RXInterrupt)?ABSOLUTE (__U1RXInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x00002c 0x4 LONG 0x59c DEFINED (__U1TXInterrupt)?ABSOLUTE (__U1TXInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x00002e 0x4 LONG 0x59c DEFINED (__ADC1Interrupt)?ABSOLUTE (__ADC1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000030 0x4 LONG 0x538 DEFINED (__DMA1Interrupt)?ABSOLUTE (__DMA1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000032 0x4 LONG 0x59c DEFINED (__Interrupt15)?ABSOLUTE (__Interrupt15):ABSOLUTE (__DefaultInterrupt) + 0x000034 0x4 LONG 0x59c DEFINED (__SI2C1Interrupt)?ABSOLUTE (__SI2C1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000036 0x4 LONG 0x59c DEFINED (__MI2C1Interrupt)?ABSOLUTE (__MI2C1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000038 0x4 LONG 0x59c DEFINED (__CMPInterrupt)?ABSOLUTE (__CMPInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x00003a 0x4 LONG 0x59c DEFINED (__CNInterrupt)?ABSOLUTE (__CNInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x00003c 0x4 LONG 0x59c DEFINED (__INT1Interrupt)?ABSOLUTE (__INT1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x00003e 0x4 LONG 0x59c DEFINED (__Interrupt21)?ABSOLUTE (__Interrupt21):ABSOLUTE (__DefaultInterrupt) + 0x000040 0x4 LONG 0x59c DEFINED (__IC7Interrupt)?ABSOLUTE (__IC7Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000042 0x4 LONG 0x59c DEFINED (__IC8Interrupt)?ABSOLUTE (__IC8Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000044 0x4 LONG 0x59c DEFINED (__DMA2Interrupt)?ABSOLUTE (__DMA2Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000046 0x4 LONG 0x59c DEFINED (__OC3Interrupt)?ABSOLUTE (__OC3Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000048 0x4 LONG 0x59c DEFINED (__OC4Interrupt)?ABSOLUTE (__OC4Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x00004a 0x4 LONG 0x59c DEFINED (__T4Interrupt)?ABSOLUTE (__T4Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x00004c 0x4 LONG 0x59c DEFINED (__T5Interrupt)?ABSOLUTE (__T5Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x00004e 0x4 LONG 0x59c DEFINED (__INT2Interrupt)?ABSOLUTE (__INT2Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000050 0x4 LONG 0x59c DEFINED (__U2RXInterrupt)?ABSOLUTE (__U2RXInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x000052 0x4 LONG 0x59c DEFINED (__U2TXInterrupt)?ABSOLUTE (__U2TXInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x000054 0x4 LONG 0x59c DEFINED (__SPI2ErrInterrupt)?ABSOLUTE (__SPI2ErrInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x000056 0x4 LONG 0x59c DEFINED (__SPI2Interrupt)?ABSOLUTE (__SPI2Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000058 0x4 LONG 0x59c DEFINED (__C1RxRdyInterrupt)?ABSOLUTE (__C1RxRdyInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x00005a 0x4 LONG 0x59c DEFINED (__C1Interrupt)?ABSOLUTE (__C1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x00005c 0x4 LONG 0x59c DEFINED (__DMA3Interrupt)?ABSOLUTE (__DMA3Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x00005e 0x4 LONG 0x59c DEFINED (__Interrupt37)?ABSOLUTE (__Interrupt37):ABSOLUTE (__DefaultInterrupt) + 0x000060 0x4 LONG 0x59c DEFINED (__Interrupt38)?ABSOLUTE (__Interrupt38):ABSOLUTE (__DefaultInterrupt) + 0x000062 0x4 LONG 0x59c DEFINED (__Interrupt39)?ABSOLUTE (__Interrupt39):ABSOLUTE (__DefaultInterrupt) + 0x000064 0x4 LONG 0x59c DEFINED (__Interrupt40)?ABSOLUTE (__Interrupt40):ABSOLUTE (__DefaultInterrupt) + 0x000066 0x4 LONG 0x59c DEFINED (__Interrupt41)?ABSOLUTE (__Interrupt41):ABSOLUTE (__DefaultInterrupt) + 0x000068 0x4 LONG 0x59c DEFINED (__Interrupt42)?ABSOLUTE (__Interrupt42):ABSOLUTE (__DefaultInterrupt) + 0x00006a 0x4 LONG 0x59c DEFINED (__Interrupt43)?ABSOLUTE (__Interrupt43):ABSOLUTE (__DefaultInterrupt) + 0x00006c 0x4 LONG 0x59c DEFINED (__Interrupt44)?ABSOLUTE (__Interrupt44):ABSOLUTE (__DefaultInterrupt) + 0x00006e 0x4 LONG 0x59c DEFINED (__PMPInterrupt)?ABSOLUTE (__PMPInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x000070 0x4 LONG 0x59c DEFINED (__DMA4Interrupt)?ABSOLUTE (__DMA4Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000072 0x4 LONG 0x59c DEFINED (__Interrupt47)?ABSOLUTE (__Interrupt47):ABSOLUTE (__DefaultInterrupt) + 0x000074 0x4 LONG 0x59c DEFINED (__Interrupt48)?ABSOLUTE (__Interrupt48):ABSOLUTE (__DefaultInterrupt) + 0x000076 0x4 LONG 0x59c DEFINED (__Interrupt49)?ABSOLUTE (__Interrupt49):ABSOLUTE (__DefaultInterrupt) + 0x000078 0x4 LONG 0x59c DEFINED (__Interrupt50)?ABSOLUTE (__Interrupt50):ABSOLUTE (__DefaultInterrupt) + 0x00007a 0x4 LONG 0x59c DEFINED (__Interrupt51)?ABSOLUTE (__Interrupt51):ABSOLUTE (__DefaultInterrupt) + 0x00007c 0x4 LONG 0x59c DEFINED (__Interrupt52)?ABSOLUTE (__Interrupt52):ABSOLUTE (__DefaultInterrupt) + 0x00007e 0x4 LONG 0x59c DEFINED (__Interrupt53)?ABSOLUTE (__Interrupt53):ABSOLUTE (__DefaultInterrupt) + 0x000080 0x4 LONG 0x59c DEFINED (__Interrupt54)?ABSOLUTE (__Interrupt54):ABSOLUTE (__DefaultInterrupt) + 0x000082 0x4 LONG 0x59c DEFINED (__Interrupt55)?ABSOLUTE (__Interrupt55):ABSOLUTE (__DefaultInterrupt) + 0x000084 0x4 LONG 0x59c DEFINED (__Interrupt56)?ABSOLUTE (__Interrupt56):ABSOLUTE (__DefaultInterrupt) + 0x000086 0x4 LONG 0x59c DEFINED (__MPWM1Interrupt)?ABSOLUTE (__MPWM1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000088 0x4 LONG 0x59c DEFINED (__QEI1Interrupt)?ABSOLUTE (__QEI1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x00008a 0x4 LONG 0x59c DEFINED (__Interrupt59)?ABSOLUTE (__Interrupt59):ABSOLUTE (__DefaultInterrupt) + 0x00008c 0x4 LONG 0x59c DEFINED (__Interrupt60)?ABSOLUTE (__Interrupt60):ABSOLUTE (__DefaultInterrupt) + 0x00008e 0x4 LONG 0x59c DEFINED (__DMA5Interrupt)?ABSOLUTE (__DMA5Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000090 0x4 LONG 0x474 DEFINED (__RTCCInterrupt)?ABSOLUTE (__RTCCInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x000092 0x4 LONG 0x59c DEFINED (__FLTA1Interrupt)?ABSOLUTE (__FLTA1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000094 0x4 LONG 0x59c DEFINED (__Interrupt64)?ABSOLUTE (__Interrupt64):ABSOLUTE (__DefaultInterrupt) + 0x000096 0x4 LONG 0x59c DEFINED (__U1ErrInterrupt)?ABSOLUTE (__U1ErrInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x000098 0x4 LONG 0x59c DEFINED (__U2ErrInterrupt)?ABSOLUTE (__U2ErrInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x00009a 0x4 LONG 0x59c DEFINED (__CRCInterrupt)?ABSOLUTE (__CRCInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x00009c 0x4 LONG 0x59c DEFINED (__DMA6Interrupt)?ABSOLUTE (__DMA6Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x00009e 0x4 LONG 0x59c DEFINED (__DMA7Interrupt)?ABSOLUTE (__DMA7Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x0000a0 0x4 LONG 0x59c DEFINED (__C1TxReqInterrupt)?ABSOLUTE (__C1TxReqInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x0000a2 0x4 LONG 0x59c DEFINED (__Interrupt71)?ABSOLUTE (__Interrupt71):ABSOLUTE (__DefaultInterrupt) + 0x0000a4 0x4 LONG 0x59c DEFINED (__Interrupt72)?ABSOLUTE (__Interrupt72):ABSOLUTE (__DefaultInterrupt) + 0x0000a6 0x4 LONG 0x59c DEFINED (__MPWM2Interrupt)?ABSOLUTE (__MPWM2Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x0000a8 0x4 LONG 0x59c DEFINED (__FLTA2Interrupt)?ABSOLUTE (__FLTA2Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x0000aa 0x4 LONG 0x59c DEFINED (__QEI2Interrupt)?ABSOLUTE (__QEI2Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x0000ac 0x4 LONG 0x59c DEFINED (__Interrupt76)?ABSOLUTE (__Interrupt76):ABSOLUTE (__DefaultInterrupt) + 0x0000ae 0x4 LONG 0x59c DEFINED (__Interrupt77)?ABSOLUTE (__Interrupt77):ABSOLUTE (__DefaultInterrupt) + 0x0000b0 0x4 LONG 0x59c DEFINED (__DAC1RInterrupt)?ABSOLUTE (__DAC1RInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x0000b2 0x4 LONG 0x59c DEFINED (__DAC1LInterrupt)?ABSOLUTE (__DAC1LInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x0000b4 0x4 LONG 0x59c DEFINED (__Interrupt80)?ABSOLUTE (__Interrupt80):ABSOLUTE (__DefaultInterrupt) + 0x0000b6 0x4 LONG 0x59c DEFINED (__Interrupt81)?ABSOLUTE (__Interrupt81):ABSOLUTE (__DefaultInterrupt) + 0x0000b8 0x4 LONG 0x59c DEFINED (__Interrupt82)?ABSOLUTE (__Interrupt82):ABSOLUTE (__DefaultInterrupt) + 0x0000ba 0x4 LONG 0x59c DEFINED (__Interrupt83)?ABSOLUTE (__Interrupt83):ABSOLUTE (__DefaultInterrupt) + 0x0000bc 0x4 LONG 0x59c DEFINED (__Interrupt84)?ABSOLUTE (__Interrupt84):ABSOLUTE (__DefaultInterrupt) + 0x0000be 0x4 LONG 0x59c DEFINED (__Interrupt85)?ABSOLUTE (__Interrupt85):ABSOLUTE (__DefaultInterrupt) + 0x0000c0 0x4 LONG 0x59c DEFINED (__Interrupt86)?ABSOLUTE (__Interrupt86):ABSOLUTE (__DefaultInterrupt) + 0x0000c2 0x4 LONG 0x59c DEFINED (__Interrupt87)?ABSOLUTE (__Interrupt87):ABSOLUTE (__DefaultInterrupt) + 0x0000c4 0x4 LONG 0x59c DEFINED (__Interrupt88)?ABSOLUTE (__Interrupt88):ABSOLUTE (__DefaultInterrupt) + 0x0000c6 0x4 LONG 0x59c DEFINED (__Interrupt89)?ABSOLUTE (__Interrupt89):ABSOLUTE (__DefaultInterrupt) + 0x0000c8 0x4 LONG 0x59c DEFINED (__Interrupt90)?ABSOLUTE (__Interrupt90):ABSOLUTE (__DefaultInterrupt) + 0x0000ca 0x4 LONG 0x59c DEFINED (__Interrupt91)?ABSOLUTE (__Interrupt91):ABSOLUTE (__DefaultInterrupt) + 0x0000cc 0x4 LONG 0x59c DEFINED (__Interrupt92)?ABSOLUTE (__Interrupt92):ABSOLUTE (__DefaultInterrupt) + 0x0000ce 0x4 LONG 0x59c DEFINED (__Interrupt93)?ABSOLUTE (__Interrupt93):ABSOLUTE (__DefaultInterrupt) + 0x0000d0 0x4 LONG 0x59c DEFINED (__Interrupt94)?ABSOLUTE (__Interrupt94):ABSOLUTE (__DefaultInterrupt) + 0x0000d2 0x4 LONG 0x59c DEFINED (__Interrupt95)?ABSOLUTE (__Interrupt95):ABSOLUTE (__DefaultInterrupt) + 0x0000d4 0x4 LONG 0x59c DEFINED (__Interrupt96)?ABSOLUTE (__Interrupt96):ABSOLUTE (__DefaultInterrupt) + 0x0000d6 0x4 LONG 0x59c DEFINED (__Interrupt97)?ABSOLUTE (__Interrupt97):ABSOLUTE (__DefaultInterrupt) + 0x0000d8 0x4 LONG 0x59c DEFINED (__Interrupt98)?ABSOLUTE (__Interrupt98):ABSOLUTE (__DefaultInterrupt) + 0x0000da 0x4 LONG 0x59c DEFINED (__Interrupt99)?ABSOLUTE (__Interrupt99):ABSOLUTE (__DefaultInterrupt) + 0x0000dc 0x4 LONG 0x59c DEFINED (__Interrupt100)?ABSOLUTE (__Interrupt100):ABSOLUTE (__DefaultInterrupt) + 0x0000de 0x4 LONG 0x59c DEFINED (__Interrupt101)?ABSOLUTE (__Interrupt101):ABSOLUTE (__DefaultInterrupt) + 0x0000e0 0x4 LONG 0x59c DEFINED (__Interrupt102)?ABSOLUTE (__Interrupt102):ABSOLUTE (__DefaultInterrupt) + 0x0000e2 0x4 LONG 0x59c DEFINED (__Interrupt103)?ABSOLUTE (__Interrupt103):ABSOLUTE (__DefaultInterrupt) + 0x0000e4 0x4 LONG 0x59c DEFINED (__Interrupt104)?ABSOLUTE (__Interrupt104):ABSOLUTE (__DefaultInterrupt) + 0x0000e6 0x4 LONG 0x59c DEFINED (__Interrupt105)?ABSOLUTE (__Interrupt105):ABSOLUTE (__DefaultInterrupt) + 0x0000e8 0x4 LONG 0x59c DEFINED (__Interrupt106)?ABSOLUTE (__Interrupt106):ABSOLUTE (__DefaultInterrupt) + 0x0000ea 0x4 LONG 0x59c DEFINED (__Interrupt107)?ABSOLUTE (__Interrupt107):ABSOLUTE (__DefaultInterrupt) + 0x0000ec 0x4 LONG 0x59c DEFINED (__Interrupt108)?ABSOLUTE (__Interrupt108):ABSOLUTE (__DefaultInterrupt) + 0x0000ee 0x4 LONG 0x59c DEFINED (__Interrupt109)?ABSOLUTE (__Interrupt109):ABSOLUTE (__DefaultInterrupt) + 0x0000f0 0x4 LONG 0x59c DEFINED (__Interrupt110)?ABSOLUTE (__Interrupt110):ABSOLUTE (__DefaultInterrupt) + 0x0000f2 0x4 LONG 0x59c DEFINED (__Interrupt111)?ABSOLUTE (__Interrupt111):ABSOLUTE (__DefaultInterrupt) + 0x0000f4 0x4 LONG 0x59c DEFINED (__Interrupt112)?ABSOLUTE (__Interrupt112):ABSOLUTE (__DefaultInterrupt) + 0x0000f6 0x4 LONG 0x59c DEFINED (__Interrupt113)?ABSOLUTE (__Interrupt113):ABSOLUTE (__DefaultInterrupt) + 0x0000f8 0x4 LONG 0x59c DEFINED (__Interrupt114)?ABSOLUTE (__Interrupt114):ABSOLUTE (__DefaultInterrupt) + 0x0000fa 0x4 LONG 0x59c DEFINED (__Interrupt115)?ABSOLUTE (__Interrupt115):ABSOLUTE (__DefaultInterrupt) + 0x0000fc 0x4 LONG 0x59c DEFINED (__Interrupt116)?ABSOLUTE (__Interrupt116):ABSOLUTE (__DefaultInterrupt) + 0x0000fe 0x4 LONG 0x59c DEFINED (__Interrupt117)?ABSOLUTE (__Interrupt117):ABSOLUTE (__DefaultInterrupt) + +.aivt 0x000104 0xfc + 0x000104 0x4 LONG 0x59c DEFINED (__AltReservedTrap0)?ABSOLUTE (__AltReservedTrap0):DEFINED (__ReservedTrap0)?ABSOLUTE (__ReservedTrap0):ABSOLUTE (__DefaultInterrupt) + 0x000106 0x4 LONG 0x574 DEFINED (__AltOscillatorFail)?ABSOLUTE (__AltOscillatorFail):DEFINED (__OscillatorFail)?ABSOLUTE (__OscillatorFail):ABSOLUTE (__DefaultInterrupt) + 0x000108 0x4 LONG 0x57c DEFINED (__AltAddressError)?ABSOLUTE (__AltAddressError):DEFINED (__AddressError)?ABSOLUTE (__AddressError):ABSOLUTE (__DefaultInterrupt) + 0x00010a 0x4 LONG 0x584 DEFINED (__AltStackError)?ABSOLUTE (__AltStackError):DEFINED (__StackError)?ABSOLUTE (__StackError):ABSOLUTE (__DefaultInterrupt) + 0x00010c 0x4 LONG 0x58c DEFINED (__AltMathError)?ABSOLUTE (__AltMathError):DEFINED (__MathError)?ABSOLUTE (__MathError):ABSOLUTE (__DefaultInterrupt) + 0x00010e 0x4 LONG 0x594 DEFINED (__AltDMACError)?ABSOLUTE (__AltDMACError):DEFINED (__DMACError)?ABSOLUTE (__DMACError):ABSOLUTE (__DefaultInterrupt) + 0x000110 0x4 LONG 0x59c DEFINED (__AltReservedTrap6)?ABSOLUTE (__AltReservedTrap6):DEFINED (__ReservedTrap6)?ABSOLUTE (__ReservedTrap6):ABSOLUTE (__DefaultInterrupt) + 0x000112 0x4 LONG 0x59c DEFINED (__AltReservedTrap7)?ABSOLUTE (__AltReservedTrap7):DEFINED (__ReservedTrap7)?ABSOLUTE (__ReservedTrap7):ABSOLUTE (__DefaultInterrupt) + 0x000114 0x4 LONG 0x59c DEFINED (__AltINT0Interrupt)?ABSOLUTE (__AltINT0Interrupt):DEFINED (__INT0Interrupt)?ABSOLUTE (__INT0Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000116 0x4 LONG 0x2a6 DEFINED (__AltIC1Interrupt)?ABSOLUTE (__AltIC1Interrupt):DEFINED (__IC1Interrupt)?ABSOLUTE (__IC1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000118 0x4 LONG 0x414 DEFINED (__AltOC1Interrupt)?ABSOLUTE (__AltOC1Interrupt):DEFINED (__OC1Interrupt)?ABSOLUTE (__OC1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x00011a 0x4 LONG 0x332 DEFINED (__AltT1Interrupt)?ABSOLUTE (__AltT1Interrupt):DEFINED (__T1Interrupt)?ABSOLUTE (__T1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x00011c 0x4 LONG 0x512 DEFINED (__AltDMA0Interrupt)?ABSOLUTE (__AltDMA0Interrupt):DEFINED (__DMA0Interrupt)?ABSOLUTE (__DMA0Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x00011e 0x4 LONG 0x2ec DEFINED (__AltIC2Interrupt)?ABSOLUTE (__AltIC2Interrupt):DEFINED (__IC2Interrupt)?ABSOLUTE (__IC2Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000120 0x4 LONG 0x44a DEFINED (__AltOC2Interrupt)?ABSOLUTE (__AltOC2Interrupt):DEFINED (__OC2Interrupt)?ABSOLUTE (__OC2Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000122 0x4 LONG 0x3e0 DEFINED (__AltT2Interrupt)?ABSOLUTE (__AltT2Interrupt):DEFINED (__T2Interrupt)?ABSOLUTE (__T2Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000124 0x4 LONG 0x59c DEFINED (__AltT3Interrupt)?ABSOLUTE (__AltT3Interrupt):DEFINED (__T3Interrupt)?ABSOLUTE (__T3Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000126 0x4 LONG 0x59c DEFINED (__AltSPI1ErrInterrupt)?ABSOLUTE (__AltSPI1ErrInterrupt):DEFINED (__SPI1ErrInterrupt)?ABSOLUTE (__SPI1ErrInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x000128 0x4 LONG 0x59c DEFINED (__AltSPI1Interrupt)?ABSOLUTE (__AltSPI1Interrupt):DEFINED (__SPI1Interrupt)?ABSOLUTE (__SPI1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x00012a 0x4 LONG 0x4b8 DEFINED (__AltU1RXInterrupt)?ABSOLUTE (__AltU1RXInterrupt):DEFINED (__U1RXInterrupt)?ABSOLUTE (__U1RXInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x00012c 0x4 LONG 0x59c DEFINED (__AltU1TXInterrupt)?ABSOLUTE (__AltU1TXInterrupt):DEFINED (__U1TXInterrupt)?ABSOLUTE (__U1TXInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x00012e 0x4 LONG 0x59c DEFINED (__AltADC1Interrupt)?ABSOLUTE (__AltADC1Interrupt):DEFINED (__ADC1Interrupt)?ABSOLUTE (__ADC1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000130 0x4 LONG 0x538 DEFINED (__AltDMA1Interrupt)?ABSOLUTE (__AltDMA1Interrupt):DEFINED (__DMA1Interrupt)?ABSOLUTE (__DMA1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000132 0x4 LONG 0x59c DEFINED (__AltInterrupt15)?ABSOLUTE (__AltInterrupt15):DEFINED (__Interrupt15)?ABSOLUTE (__Interrupt15):ABSOLUTE (__DefaultInterrupt) + 0x000134 0x4 LONG 0x59c DEFINED (__AltSI2C1Interrupt)?ABSOLUTE (__AltSI2C1Interrupt):DEFINED (__SI2C1Interrupt)?ABSOLUTE (__SI2C1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000136 0x4 LONG 0x59c DEFINED (__AltMI2C1Interrupt)?ABSOLUTE (__AltMI2C1Interrupt):DEFINED (__MI2C1Interrupt)?ABSOLUTE (__MI2C1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000138 0x4 LONG 0x59c DEFINED (__AltCMPInterrupt)?ABSOLUTE (__AltCMPInterrupt):DEFINED (__CMPInterrupt)?ABSOLUTE (__CMPInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x00013a 0x4 LONG 0x59c DEFINED (__AltCNInterrupt)?ABSOLUTE (__AltCNInterrupt):DEFINED (__CNInterrupt)?ABSOLUTE (__CNInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x00013c 0x4 LONG 0x59c DEFINED (__AltINT1Interrupt)?ABSOLUTE (__AltINT1Interrupt):DEFINED (__INT1Interrupt)?ABSOLUTE (__INT1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x00013e 0x4 LONG 0x59c DEFINED (__AltInterrupt21)?ABSOLUTE (__AltInterrupt21):DEFINED (__Interrupt21)?ABSOLUTE (__Interrupt21):ABSOLUTE (__DefaultInterrupt) + 0x000140 0x4 LONG 0x59c DEFINED (__AltIC7Interrupt)?ABSOLUTE (__AltIC7Interrupt):DEFINED (__IC7Interrupt)?ABSOLUTE (__IC7Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000142 0x4 LONG 0x59c DEFINED (__AltIC8Interrupt)?ABSOLUTE (__AltIC8Interrupt):DEFINED (__IC8Interrupt)?ABSOLUTE (__IC8Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000144 0x4 LONG 0x59c DEFINED (__AltDMA2Interrupt)?ABSOLUTE (__AltDMA2Interrupt):DEFINED (__DMA2Interrupt)?ABSOLUTE (__DMA2Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000146 0x4 LONG 0x59c DEFINED (__AltOC3Interrupt)?ABSOLUTE (__AltOC3Interrupt):DEFINED (__OC3Interrupt)?ABSOLUTE (__OC3Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000148 0x4 LONG 0x59c DEFINED (__AltOC4Interrupt)?ABSOLUTE (__AltOC4Interrupt):DEFINED (__OC4Interrupt)?ABSOLUTE (__OC4Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x00014a 0x4 LONG 0x59c DEFINED (__AltT4Interrupt)?ABSOLUTE (__AltT4Interrupt):DEFINED (__T4Interrupt)?ABSOLUTE (__T4Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x00014c 0x4 LONG 0x59c DEFINED (__AltT5Interrupt)?ABSOLUTE (__AltT5Interrupt):DEFINED (__T5Interrupt)?ABSOLUTE (__T5Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x00014e 0x4 LONG 0x59c DEFINED (__AltINT2Interrupt)?ABSOLUTE (__AltINT2Interrupt):DEFINED (__INT2Interrupt)?ABSOLUTE (__INT2Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000150 0x4 LONG 0x59c DEFINED (__AltU2RXInterrupt)?ABSOLUTE (__AltU2RXInterrupt):DEFINED (__U2RXInterrupt)?ABSOLUTE (__U2RXInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x000152 0x4 LONG 0x59c DEFINED (__AltU2TXInterrupt)?ABSOLUTE (__AltU2TXInterrupt):DEFINED (__U2TXInterrupt)?ABSOLUTE (__U2TXInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x000154 0x4 LONG 0x59c DEFINED (__AltSPI2ErrInterrupt)?ABSOLUTE (__AltSPI2ErrInterrupt):DEFINED (__SPI2ErrInterrupt)?ABSOLUTE (__SPI2ErrInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x000156 0x4 LONG 0x59c DEFINED (__AltSPI2Interrupt)?ABSOLUTE (__AltSPI2Interrupt):DEFINED (__SPI2Interrupt)?ABSOLUTE (__SPI2Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000158 0x4 LONG 0x59c DEFINED (__AltC1RxRdyInterrupt)?ABSOLUTE (__AltC1RxRdyInterrupt):DEFINED (__C1RxRdyInterrupt)?ABSOLUTE (__C1RxRdyInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x00015a 0x4 LONG 0x59c DEFINED (__AltC1Interrupt)?ABSOLUTE (__AltC1Interrupt):DEFINED (__C1Interrupt)?ABSOLUTE (__C1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x00015c 0x4 LONG 0x59c DEFINED (__AltDMA3Interrupt)?ABSOLUTE (__AltDMA3Interrupt):DEFINED (__DMA3Interrupt)?ABSOLUTE (__DMA3Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x00015e 0x4 LONG 0x59c DEFINED (__AltInterrupt37)?ABSOLUTE (__AltInterrupt37):DEFINED (__Interrupt37)?ABSOLUTE (__Interrupt37):ABSOLUTE (__DefaultInterrupt) + 0x000160 0x4 LONG 0x59c DEFINED (__AltInterrupt38)?ABSOLUTE (__AltInterrupt38):DEFINED (__Interrupt38)?ABSOLUTE (__Interrupt38):ABSOLUTE (__DefaultInterrupt) + 0x000162 0x4 LONG 0x59c DEFINED (__AltInterrupt39)?ABSOLUTE (__AltInterrupt39):DEFINED (__Interrupt39)?ABSOLUTE (__Interrupt39):ABSOLUTE (__DefaultInterrupt) + 0x000164 0x4 LONG 0x59c DEFINED (__AltInterrupt40)?ABSOLUTE (__AltInterrupt40):DEFINED (__Interrupt40)?ABSOLUTE (__Interrupt40):ABSOLUTE (__DefaultInterrupt) + 0x000166 0x4 LONG 0x59c DEFINED (__AltInterrupt41)?ABSOLUTE (__AltInterrupt41):DEFINED (__Interrupt41)?ABSOLUTE (__Interrupt41):ABSOLUTE (__DefaultInterrupt) + 0x000168 0x4 LONG 0x59c DEFINED (__AltInterrupt42)?ABSOLUTE (__AltInterrupt42):DEFINED (__Interrupt42)?ABSOLUTE (__Interrupt42):ABSOLUTE (__DefaultInterrupt) + 0x00016a 0x4 LONG 0x59c DEFINED (__AltInterrupt43)?ABSOLUTE (__AltInterrupt43):DEFINED (__Interrupt43)?ABSOLUTE (__Interrupt43):ABSOLUTE (__DefaultInterrupt) + 0x00016c 0x4 LONG 0x59c DEFINED (__AltInterrupt44)?ABSOLUTE (__AltInterrupt44):DEFINED (__Interrupt44)?ABSOLUTE (__Interrupt44):ABSOLUTE (__DefaultInterrupt) + 0x00016e 0x4 LONG 0x59c DEFINED (__AltPMPInterrupt)?ABSOLUTE (__AltPMPInterrupt):DEFINED (__PMPInterrupt)?ABSOLUTE (__PMPInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x000170 0x4 LONG 0x59c DEFINED (__AltDMA4Interrupt)?ABSOLUTE (__AltDMA4Interrupt):DEFINED (__DMA4Interrupt)?ABSOLUTE (__DMA4Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000172 0x4 LONG 0x59c DEFINED (__AltInterrupt47)?ABSOLUTE (__AltInterrupt47):DEFINED (__Interrupt47)?ABSOLUTE (__Interrupt47):ABSOLUTE (__DefaultInterrupt) + 0x000174 0x4 LONG 0x59c DEFINED (__AltInterrupt48)?ABSOLUTE (__AltInterrupt48):DEFINED (__Interrupt48)?ABSOLUTE (__Interrupt48):ABSOLUTE (__DefaultInterrupt) + 0x000176 0x4 LONG 0x59c DEFINED (__AltInterrupt49)?ABSOLUTE (__AltInterrupt49):DEFINED (__Interrupt49)?ABSOLUTE (__Interrupt49):ABSOLUTE (__DefaultInterrupt) + 0x000178 0x4 LONG 0x59c DEFINED (__AltInterrupt50)?ABSOLUTE (__AltInterrupt50):DEFINED (__Interrupt50)?ABSOLUTE (__Interrupt50):ABSOLUTE (__DefaultInterrupt) + 0x00017a 0x4 LONG 0x59c DEFINED (__AltInterrupt51)?ABSOLUTE (__AltInterrupt51):DEFINED (__Interrupt51)?ABSOLUTE (__Interrupt51):ABSOLUTE (__DefaultInterrupt) + 0x00017c 0x4 LONG 0x59c DEFINED (__AltInterrupt52)?ABSOLUTE (__AltInterrupt52):DEFINED (__Interrupt52)?ABSOLUTE (__Interrupt52):ABSOLUTE (__DefaultInterrupt) + 0x00017e 0x4 LONG 0x59c DEFINED (__AltInterrupt53)?ABSOLUTE (__AltInterrupt53):DEFINED (__Interrupt53)?ABSOLUTE (__Interrupt53):ABSOLUTE (__DefaultInterrupt) + 0x000180 0x4 LONG 0x59c DEFINED (__AltInterrupt54)?ABSOLUTE (__AltInterrupt54):DEFINED (__Interrupt54)?ABSOLUTE (__Interrupt54):ABSOLUTE (__DefaultInterrupt) + 0x000182 0x4 LONG 0x59c DEFINED (__AltInterrupt55)?ABSOLUTE (__AltInterrupt55):DEFINED (__Interrupt55)?ABSOLUTE (__Interrupt55):ABSOLUTE (__DefaultInterrupt) + 0x000184 0x4 LONG 0x59c DEFINED (__AltInterrupt56)?ABSOLUTE (__AltInterrupt56):DEFINED (__Interrupt56)?ABSOLUTE (__Interrupt56):ABSOLUTE (__DefaultInterrupt) + 0x000186 0x4 LONG 0x59c DEFINED (__AltMPWM1Interrupt)?ABSOLUTE (__AltMPWM1Interrupt):DEFINED (__MPWM1Interrupt)?ABSOLUTE (__MPWM1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000188 0x4 LONG 0x59c DEFINED (__AltQEI1Interrupt)?ABSOLUTE (__AltQEI1Interrupt):DEFINED (__QEI1Interrupt)?ABSOLUTE (__QEI1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x00018a 0x4 LONG 0x59c DEFINED (__AltInterrupt59)?ABSOLUTE (__AltInterrupt59):DEFINED (__Interrupt59)?ABSOLUTE (__Interrupt59):ABSOLUTE (__DefaultInterrupt) + 0x00018c 0x4 LONG 0x59c DEFINED (__AltInterrupt60)?ABSOLUTE (__AltInterrupt60):DEFINED (__Interrupt60)?ABSOLUTE (__Interrupt60):ABSOLUTE (__DefaultInterrupt) + 0x00018e 0x4 LONG 0x59c DEFINED (__AltDMA5Interrupt)?ABSOLUTE (__AltDMA5Interrupt):DEFINED (__DMA5Interrupt)?ABSOLUTE (__DMA5Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000190 0x4 LONG 0x474 DEFINED (__AltRTCCInterrupt)?ABSOLUTE (__AltRTCCInterrupt):DEFINED (__RTCCInterrupt)?ABSOLUTE (__RTCCInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x000192 0x4 LONG 0x59c DEFINED (__AltFLTA1Interrupt)?ABSOLUTE (__AltFLTA1Interrupt):DEFINED (__FLTA1Interrupt)?ABSOLUTE (__FLTA1Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x000194 0x4 LONG 0x59c DEFINED (__AltInterrupt64)?ABSOLUTE (__AltInterrupt64):DEFINED (__Interrupt64)?ABSOLUTE (__Interrupt64):ABSOLUTE (__DefaultInterrupt) + 0x000196 0x4 LONG 0x59c DEFINED (__AltU1ErrInterrupt)?ABSOLUTE (__AltU1ErrInterrupt):DEFINED (__U1ErrInterrupt)?ABSOLUTE (__U1ErrInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x000198 0x4 LONG 0x59c DEFINED (__AltU2ErrInterrupt)?ABSOLUTE (__AltU2ErrInterrupt):DEFINED (__U2ErrInterrupt)?ABSOLUTE (__U2ErrInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x00019a 0x4 LONG 0x59c DEFINED (__AltCRCInterrupt)?ABSOLUTE (__AltCRCInterrupt):DEFINED (__CRCInterrupt)?ABSOLUTE (__CRCInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x00019c 0x4 LONG 0x59c DEFINED (__AltDMA6Interrupt)?ABSOLUTE (__AltDMA6Interrupt):DEFINED (__DMA6Interrupt)?ABSOLUTE (__DMA6Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x00019e 0x4 LONG 0x59c DEFINED (__AltDMA7Interrupt)?ABSOLUTE (__AltDMA7Interrupt):DEFINED (__DMA7Interrupt)?ABSOLUTE (__DMA7Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x0001a0 0x4 LONG 0x59c DEFINED (__AltC1TxReqInterrupt)?ABSOLUTE (__AltC1TxReqInterrupt):DEFINED (__C1TxReqInterrupt)?ABSOLUTE (__C1TxReqInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x0001a2 0x4 LONG 0x59c DEFINED (__AltInterrupt71)?ABSOLUTE (__AltInterrupt71):DEFINED (__Interrupt71)?ABSOLUTE (__Interrupt71):ABSOLUTE (__DefaultInterrupt) + 0x0001a4 0x4 LONG 0x59c DEFINED (__AltInterrupt72)?ABSOLUTE (__AltInterrupt72):DEFINED (__Interrupt72)?ABSOLUTE (__Interrupt72):ABSOLUTE (__DefaultInterrupt) + 0x0001a6 0x4 LONG 0x59c DEFINED (__AltMPWM2Interrupt)?ABSOLUTE (__AltMPWM2Interrupt):DEFINED (__MPWM2Interrupt)?ABSOLUTE (__MPWM2Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x0001a8 0x4 LONG 0x59c DEFINED (__AltFLTA2Interrupt)?ABSOLUTE (__AltFLTA2Interrupt):DEFINED (__FLTA2Interrupt)?ABSOLUTE (__FLTA2Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x0001aa 0x4 LONG 0x59c DEFINED (__AltQEI2Interrupt)?ABSOLUTE (__AltQEI2Interrupt):DEFINED (__QEI2Interrupt)?ABSOLUTE (__QEI2Interrupt):ABSOLUTE (__DefaultInterrupt) + 0x0001ac 0x4 LONG 0x59c DEFINED (__AltInterrupt76)?ABSOLUTE (__AltInterrupt76):DEFINED (__Interrupt76)?ABSOLUTE (__Interrupt76):ABSOLUTE (__DefaultInterrupt) + 0x0001ae 0x4 LONG 0x59c DEFINED (__AltInterrupt77)?ABSOLUTE (__AltInterrupt77):DEFINED (__Interrupt77)?ABSOLUTE (__Interrupt77):ABSOLUTE (__DefaultInterrupt) + 0x0001b0 0x4 LONG 0x59c DEFINED (__AltDAC1RInterrupt)?ABSOLUTE (__AltDAC1RInterrupt):DEFINED (__DAC1RInterrupt)?ABSOLUTE (__DAC1RInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x0001b2 0x4 LONG 0x59c DEFINED (__AltDAC1LInterrupt)?ABSOLUTE (__AltDAC1LInterrupt):DEFINED (__DAC1LInterrupt)?ABSOLUTE (__DAC1LInterrupt):ABSOLUTE (__DefaultInterrupt) + 0x0001b4 0x4 LONG 0x59c DEFINED (__AltInterrupt80)?ABSOLUTE (__AltInterrupt80):DEFINED (__Interrupt80)?ABSOLUTE (__Interrupt80):ABSOLUTE (__DefaultInterrupt) + 0x0001b6 0x4 LONG 0x59c DEFINED (__AltInterrupt81)?ABSOLUTE (__AltInterrupt81):DEFINED (__Interrupt81)?ABSOLUTE (__Interrupt81):ABSOLUTE (__DefaultInterrupt) + 0x0001b8 0x4 LONG 0x59c DEFINED (__AltInterrupt82)?ABSOLUTE (__AltInterrupt82):DEFINED (__Interrupt82)?ABSOLUTE (__Interrupt82):ABSOLUTE (__DefaultInterrupt) + 0x0001ba 0x4 LONG 0x59c DEFINED (__AltInterrupt83)?ABSOLUTE (__AltInterrupt83):DEFINED (__Interrupt83)?ABSOLUTE (__Interrupt83):ABSOLUTE (__DefaultInterrupt) + 0x0001bc 0x4 LONG 0x59c DEFINED (__AltInterrupt84)?ABSOLUTE (__AltInterrupt84):DEFINED (__Interrupt84)?ABSOLUTE (__Interrupt84):ABSOLUTE (__DefaultInterrupt) + 0x0001be 0x4 LONG 0x59c DEFINED (__AltInterrupt85)?ABSOLUTE (__AltInterrupt85):DEFINED (__Interrupt85)?ABSOLUTE (__Interrupt85):ABSOLUTE (__DefaultInterrupt) + 0x0001c0 0x4 LONG 0x59c DEFINED (__AltInterrupt86)?ABSOLUTE (__AltInterrupt86):DEFINED (__Interrupt86)?ABSOLUTE (__Interrupt86):ABSOLUTE (__DefaultInterrupt) + 0x0001c2 0x4 LONG 0x59c DEFINED (__AltInterrupt87)?ABSOLUTE (__AltInterrupt87):DEFINED (__Interrupt87)?ABSOLUTE (__Interrupt87):ABSOLUTE (__DefaultInterrupt) + 0x0001c4 0x4 LONG 0x59c DEFINED (__AltInterrupt88)?ABSOLUTE (__AltInterrupt88):DEFINED (__Interrupt88)?ABSOLUTE (__Interrupt88):ABSOLUTE (__DefaultInterrupt) + 0x0001c6 0x4 LONG 0x59c DEFINED (__AltInterrupt89)?ABSOLUTE (__AltInterrupt89):DEFINED (__Interrupt89)?ABSOLUTE (__Interrupt89):ABSOLUTE (__DefaultInterrupt) + 0x0001c8 0x4 LONG 0x59c DEFINED (__AltInterrupt90)?ABSOLUTE (__AltInterrupt90):DEFINED (__Interrupt90)?ABSOLUTE (__Interrupt90):ABSOLUTE (__DefaultInterrupt) + 0x0001ca 0x4 LONG 0x59c DEFINED (__AltInterrupt91)?ABSOLUTE (__AltInterrupt91):DEFINED (__Interrupt91)?ABSOLUTE (__Interrupt91):ABSOLUTE (__DefaultInterrupt) + 0x0001cc 0x4 LONG 0x59c DEFINED (__AltInterrupt92)?ABSOLUTE (__AltInterrupt92):DEFINED (__Interrupt92)?ABSOLUTE (__Interrupt92):ABSOLUTE (__DefaultInterrupt) + 0x0001ce 0x4 LONG 0x59c DEFINED (__AltInterrupt93)?ABSOLUTE (__AltInterrupt93):DEFINED (__Interrupt93)?ABSOLUTE (__Interrupt93):ABSOLUTE (__DefaultInterrupt) + 0x0001d0 0x4 LONG 0x59c DEFINED (__AltInterrupt94)?ABSOLUTE (__AltInterrupt94):DEFINED (__Interrupt94)?ABSOLUTE (__Interrupt94):ABSOLUTE (__DefaultInterrupt) + 0x0001d2 0x4 LONG 0x59c DEFINED (__AltInterrupt95)?ABSOLUTE (__AltInterrupt95):DEFINED (__Interrupt95)?ABSOLUTE (__Interrupt95):ABSOLUTE (__DefaultInterrupt) + 0x0001d4 0x4 LONG 0x59c DEFINED (__AltInterrupt96)?ABSOLUTE (__AltInterrupt96):DEFINED (__Interrupt96)?ABSOLUTE (__Interrupt96):ABSOLUTE (__DefaultInterrupt) + 0x0001d6 0x4 LONG 0x59c DEFINED (__AltInterrupt97)?ABSOLUTE (__AltInterrupt97):DEFINED (__Interrupt97)?ABSOLUTE (__Interrupt97):ABSOLUTE (__DefaultInterrupt) + 0x0001d8 0x4 LONG 0x59c DEFINED (__AltInterrupt98)?ABSOLUTE (__AltInterrupt98):DEFINED (__Interrupt98)?ABSOLUTE (__Interrupt98):ABSOLUTE (__DefaultInterrupt) + 0x0001da 0x4 LONG 0x59c DEFINED (__AltInterrupt99)?ABSOLUTE (__AltInterrupt99):DEFINED (__Interrupt99)?ABSOLUTE (__Interrupt99):ABSOLUTE (__DefaultInterrupt) + 0x0001dc 0x4 LONG 0x59c DEFINED (__AltInterrupt100)?ABSOLUTE (__AltInterrupt100):DEFINED (__Interrupt100)?ABSOLUTE (__Interrupt100):ABSOLUTE (__DefaultInterrupt) + 0x0001de 0x4 LONG 0x59c DEFINED (__AltInterrupt101)?ABSOLUTE (__AltInterrupt101):DEFINED (__Interrupt101)?ABSOLUTE (__Interrupt101):ABSOLUTE (__DefaultInterrupt) + 0x0001e0 0x4 LONG 0x59c DEFINED (__AltInterrupt102)?ABSOLUTE (__AltInterrupt102):DEFINED (__Interrupt102)?ABSOLUTE (__Interrupt102):ABSOLUTE (__DefaultInterrupt) + 0x0001e2 0x4 LONG 0x59c DEFINED (__AltInterrupt103)?ABSOLUTE (__AltInterrupt103):DEFINED (__Interrupt103)?ABSOLUTE (__Interrupt103):ABSOLUTE (__DefaultInterrupt) + 0x0001e4 0x4 LONG 0x59c DEFINED (__AltInterrupt104)?ABSOLUTE (__AltInterrupt104):DEFINED (__Interrupt104)?ABSOLUTE (__Interrupt104):ABSOLUTE (__DefaultInterrupt) + 0x0001e6 0x4 LONG 0x59c DEFINED (__AltInterrupt105)?ABSOLUTE (__AltInterrupt105):DEFINED (__Interrupt105)?ABSOLUTE (__Interrupt105):ABSOLUTE (__DefaultInterrupt) + 0x0001e8 0x4 LONG 0x59c DEFINED (__AltInterrupt106)?ABSOLUTE (__AltInterrupt106):DEFINED (__Interrupt106)?ABSOLUTE (__Interrupt106):ABSOLUTE (__DefaultInterrupt) + 0x0001ea 0x4 LONG 0x59c DEFINED (__AltInterrupt107)?ABSOLUTE (__AltInterrupt107):DEFINED (__Interrupt107)?ABSOLUTE (__Interrupt107):ABSOLUTE (__DefaultInterrupt) + 0x0001ec 0x4 LONG 0x59c DEFINED (__AltInterrupt108)?ABSOLUTE (__AltInterrupt108):DEFINED (__Interrupt108)?ABSOLUTE (__Interrupt108):ABSOLUTE (__DefaultInterrupt) + 0x0001ee 0x4 LONG 0x59c DEFINED (__AltInterrupt109)?ABSOLUTE (__AltInterrupt109):DEFINED (__Interrupt109)?ABSOLUTE (__Interrupt109):ABSOLUTE (__DefaultInterrupt) + 0x0001f0 0x4 LONG 0x59c DEFINED (__AltInterrupt110)?ABSOLUTE (__AltInterrupt110):DEFINED (__Interrupt110)?ABSOLUTE (__Interrupt110):ABSOLUTE (__DefaultInterrupt) + 0x0001f2 0x4 LONG 0x59c DEFINED (__AltInterrupt111)?ABSOLUTE (__AltInterrupt111):DEFINED (__Interrupt111)?ABSOLUTE (__Interrupt111):ABSOLUTE (__DefaultInterrupt) + 0x0001f4 0x4 LONG 0x59c DEFINED (__AltInterrupt112)?ABSOLUTE (__AltInterrupt112):DEFINED (__Interrupt112)?ABSOLUTE (__Interrupt112):ABSOLUTE (__DefaultInterrupt) + 0x0001f6 0x4 LONG 0x59c DEFINED (__AltInterrupt113)?ABSOLUTE (__AltInterrupt113):DEFINED (__Interrupt113)?ABSOLUTE (__Interrupt113):ABSOLUTE (__DefaultInterrupt) + 0x0001f8 0x4 LONG 0x59c DEFINED (__AltInterrupt114)?ABSOLUTE (__AltInterrupt114):DEFINED (__Interrupt114)?ABSOLUTE (__Interrupt114):ABSOLUTE (__DefaultInterrupt) + 0x0001fa 0x4 LONG 0x59c DEFINED (__AltInterrupt115)?ABSOLUTE (__AltInterrupt115):DEFINED (__Interrupt115)?ABSOLUTE (__Interrupt115):ABSOLUTE (__DefaultInterrupt) + 0x0001fc 0x4 LONG 0x59c DEFINED (__AltInterrupt116)?ABSOLUTE (__AltInterrupt116):DEFINED (__Interrupt116)?ABSOLUTE (__Interrupt116):ABSOLUTE (__DefaultInterrupt) + 0x0001fe 0x4 LONG 0x59c DEFINED (__AltInterrupt117)?ABSOLUTE (__AltInterrupt117):DEFINED (__Interrupt117)?ABSOLUTE (__Interrupt117):ABSOLUTE (__DefaultInterrupt) + 0x0000 WREG0 = 0x0 + 0x0000 _WREG0 = 0x0 + 0x0002 WREG1 = 0x2 + 0x0002 _WREG1 = 0x2 + 0x0004 WREG2 = 0x4 + 0x0004 _WREG2 = 0x4 + 0x0006 WREG3 = 0x6 + 0x0006 _WREG3 = 0x6 + 0x0008 WREG4 = 0x8 + 0x0008 _WREG4 = 0x8 + 0x000a WREG5 = 0xa + 0x000a _WREG5 = 0xa + 0x000c WREG6 = 0xc + 0x000c _WREG6 = 0xc + 0x000e WREG7 = 0xe + 0x000e _WREG7 = 0xe + 0x0010 WREG8 = 0x10 + 0x0010 _WREG8 = 0x10 + 0x0012 WREG9 = 0x12 + 0x0012 _WREG9 = 0x12 + 0x0014 WREG10 = 0x14 + 0x0014 _WREG10 = 0x14 + 0x0016 WREG11 = 0x16 + 0x0016 _WREG11 = 0x16 + 0x0018 WREG12 = 0x18 + 0x0018 _WREG12 = 0x18 + 0x001a WREG13 = 0x1a + 0x001a _WREG13 = 0x1a + 0x001c WREG14 = 0x1c + 0x001c _WREG14 = 0x1c + 0x001e WREG15 = 0x1e + 0x001e _WREG15 = 0x1e + 0x0020 SPLIM = 0x20 + 0x0020 _SPLIM = 0x20 + 0x0022 ACCAL = 0x22 + 0x0022 _ACCAL = 0x22 + 0x0024 ACCAH = 0x24 + 0x0024 _ACCAH = 0x24 + 0x0026 ACCAU = 0x26 + 0x0026 _ACCAU = 0x26 + 0x0028 ACCBL = 0x28 + 0x0028 _ACCBL = 0x28 + 0x002a ACCBH = 0x2a + 0x002a _ACCBH = 0x2a + 0x002c ACCBU = 0x2c + 0x002c _ACCBU = 0x2c + 0x002e PCL = 0x2e + 0x002e _PCL = 0x2e + 0x0030 PCH = 0x30 + 0x0030 _PCH = 0x30 + 0x0032 TBLPAG = 0x32 + 0x0032 _TBLPAG = 0x32 + 0x0034 PSVPAG = 0x34 + 0x0034 _PSVPAG = 0x34 + 0x0036 RCOUNT = 0x36 + 0x0036 _RCOUNT = 0x36 + 0x0038 DCOUNT = 0x38 + 0x0038 _DCOUNT = 0x38 + 0x003a DOSTARTL = 0x3a + 0x003a _DOSTARTL = 0x3a + 0x003c DOSTARTH = 0x3c + 0x003c _DOSTARTH = 0x3c + 0x003e DOENDL = 0x3e + 0x003e _DOENDL = 0x3e + 0x0040 DOENDH = 0x40 + 0x0040 _DOENDH = 0x40 + 0x0042 SR = 0x42 + 0x0042 _SR = 0x42 + 0x0042 _SRbits = 0x42 + 0x0044 CORCON = 0x44 + 0x0044 _CORCON = 0x44 + 0x0044 _CORCONbits = 0x44 + 0x0046 MODCON = 0x46 + 0x0046 _MODCON = 0x46 + 0x0046 _MODCONbits = 0x46 + 0x0048 XMODSRT = 0x48 + 0x0048 _XMODSRT = 0x48 + 0x004a XMODEND = 0x4a + 0x004a _XMODEND = 0x4a + 0x004c YMODSRT = 0x4c + 0x004c _YMODSRT = 0x4c + 0x004e YMODEND = 0x4e + 0x004e _YMODEND = 0x4e + 0x0050 XBREV = 0x50 + 0x0050 _XBREV = 0x50 + 0x0050 _XBREVbits = 0x50 + 0x0052 DISICNT = 0x52 + 0x0052 _DISICNT = 0x52 + 0x0060 CNEN1 = 0x60 + 0x0060 _CNEN1 = 0x60 + 0x0060 _CNEN1bits = 0x60 + 0x0062 CNEN2 = 0x62 + 0x0062 _CNEN2 = 0x62 + 0x0062 _CNEN2bits = 0x62 + 0x0068 CNPU1 = 0x68 + 0x0068 _CNPU1 = 0x68 + 0x0068 _CNPU1bits = 0x68 + 0x006a CNPU2 = 0x6a + 0x006a _CNPU2 = 0x6a + 0x006a _CNPU2bits = 0x6a + 0x0080 INTCON1 = 0x80 + 0x0080 _INTCON1 = 0x80 + 0x0080 _INTCON1bits = 0x80 + 0x0082 INTCON2 = 0x82 + 0x0082 _INTCON2 = 0x82 + 0x0082 _INTCON2bits = 0x82 + 0x0084 IFS0 = 0x84 + 0x0084 _IFS0 = 0x84 + 0x0084 _IFS0bits = 0x84 + 0x0086 IFS1 = 0x86 + 0x0086 _IFS1 = 0x86 + 0x0086 _IFS1bits = 0x86 + 0x0088 IFS2 = 0x88 + 0x0088 _IFS2 = 0x88 + 0x0088 _IFS2bits = 0x88 + 0x008a IFS3 = 0x8a + 0x008a _IFS3 = 0x8a + 0x008a _IFS3bits = 0x8a + 0x008c IFS4 = 0x8c + 0x008c _IFS4 = 0x8c + 0x008c _IFS4bits = 0x8c + 0x0094 IEC0 = 0x94 + 0x0094 _IEC0 = 0x94 + 0x0094 _IEC0bits = 0x94 + 0x0096 IEC1 = 0x96 + 0x0096 _IEC1 = 0x96 + 0x0096 _IEC1bits = 0x96 + 0x0098 IEC2 = 0x98 + 0x0098 _IEC2 = 0x98 + 0x0098 _IEC2bits = 0x98 + 0x009a IEC3 = 0x9a + 0x009a _IEC3 = 0x9a + 0x009a _IEC3bits = 0x9a + 0x009c IEC4 = 0x9c + 0x009c _IEC4 = 0x9c + 0x009c _IEC4bits = 0x9c + 0x00a4 IPC0 = 0xa4 + 0x00a4 _IPC0 = 0xa4 + 0x00a4 _IPC0bits = 0xa4 + 0x00a6 IPC1 = 0xa6 + 0x00a6 _IPC1 = 0xa6 + 0x00a6 _IPC1bits = 0xa6 + 0x00a8 IPC2 = 0xa8 + 0x00a8 _IPC2 = 0xa8 + 0x00a8 _IPC2bits = 0xa8 + 0x00aa IPC3 = 0xaa + 0x00aa _IPC3 = 0xaa + 0x00aa _IPC3bits = 0xaa + 0x00ac IPC4 = 0xac + 0x00ac _IPC4 = 0xac + 0x00ac _IPC4bits = 0xac + 0x00ae IPC5 = 0xae + 0x00ae _IPC5 = 0xae + 0x00ae _IPC5bits = 0xae + 0x00b0 IPC6 = 0xb0 + 0x00b0 _IPC6 = 0xb0 + 0x00b0 _IPC6bits = 0xb0 + 0x00b2 IPC7 = 0xb2 + 0x00b2 _IPC7 = 0xb2 + 0x00b2 _IPC7bits = 0xb2 + 0x00b4 IPC8 = 0xb4 + 0x00b4 _IPC8 = 0xb4 + 0x00b4 _IPC8bits = 0xb4 + 0x00b6 IPC9 = 0xb6 + 0x00b6 _IPC9 = 0xb6 + 0x00b6 _IPC9bits = 0xb6 + 0x00ba IPC11 = 0xba + 0x00ba _IPC11 = 0xba + 0x00ba _IPC11bits = 0xba + 0x00c0 IPC14 = 0xc0 + 0x00c0 _IPC14 = 0xc0 + 0x00c0 _IPC14bits = 0xc0 + 0x00c2 IPC15 = 0xc2 + 0x00c2 _IPC15 = 0xc2 + 0x00c2 _IPC15bits = 0xc2 + 0x00c4 IPC16 = 0xc4 + 0x00c4 _IPC16 = 0xc4 + 0x00c4 _IPC16bits = 0xc4 + 0x00c6 IPC17 = 0xc6 + 0x00c6 _IPC17 = 0xc6 + 0x00c6 _IPC17bits = 0xc6 + 0x00c8 IPC18 = 0xc8 + 0x00c8 _IPC18 = 0xc8 + 0x00c8 _IPC18bits = 0xc8 + 0x00e0 INTTREG = 0xe0 + 0x00e0 _INTTREG = 0xe0 + 0x00e0 _INTTREGbits = 0xe0 + 0x0100 TMR1 = 0x100 + 0x0100 _TMR1 = 0x100 + 0x0102 PR1 = 0x102 + 0x0102 _PR1 = 0x102 + 0x0104 T1CON = 0x104 + 0x0104 _T1CON = 0x104 + 0x0104 _T1CONbits = 0x104 + 0x0106 TMR2 = 0x106 + 0x0106 _TMR2 = 0x106 + 0x0108 TMR3HLD = 0x108 + 0x0108 _TMR3HLD = 0x108 + 0x010a TMR3 = 0x10a + 0x010a _TMR3 = 0x10a + 0x010c PR2 = 0x10c + 0x010c _PR2 = 0x10c + 0x010e PR3 = 0x10e + 0x010e _PR3 = 0x10e + 0x0110 T2CON = 0x110 + 0x0110 _T2CON = 0x110 + 0x0110 _T2CONbits = 0x110 + 0x0112 T3CON = 0x112 + 0x0112 _T3CON = 0x112 + 0x0112 _T3CONbits = 0x112 + 0x0114 TMR4 = 0x114 + 0x0114 _TMR4 = 0x114 + 0x0116 TMR5HLD = 0x116 + 0x0116 _TMR5HLD = 0x116 + 0x0118 TMR5 = 0x118 + 0x0118 _TMR5 = 0x118 + 0x011a PR4 = 0x11a + 0x011a _PR4 = 0x11a + 0x011c PR5 = 0x11c + 0x011c _PR5 = 0x11c + 0x011e T4CON = 0x11e + 0x011e _T4CON = 0x11e + 0x011e _T4CONbits = 0x11e + 0x0120 T5CON = 0x120 + 0x0120 _T5CON = 0x120 + 0x0120 _T5CONbits = 0x120 + 0x0140 IC1BUF = 0x140 + 0x0140 _IC1BUF = 0x140 + 0x0142 IC1CON = 0x142 + 0x0142 _IC1CON = 0x142 + 0x0142 _IC1CONbits = 0x142 + 0x0144 IC2BUF = 0x144 + 0x0144 _IC2BUF = 0x144 + 0x0146 IC2CON = 0x146 + 0x0146 _IC2CON = 0x146 + 0x0146 _IC2CONbits = 0x146 + 0x0158 IC7BUF = 0x158 + 0x0158 _IC7BUF = 0x158 + 0x015a IC7CON = 0x15a + 0x015a _IC7CON = 0x15a + 0x015a _IC7CONbits = 0x15a + 0x015c IC8BUF = 0x15c + 0x015c _IC8BUF = 0x15c + 0x015e IC8CON = 0x15e + 0x015e _IC8CON = 0x15e + 0x015e _IC8CONbits = 0x15e + 0x0180 OC1RS = 0x180 + 0x0180 _OC1RS = 0x180 + 0x0182 OC1R = 0x182 + 0x0182 _OC1R = 0x182 + 0x0184 OC1CON = 0x184 + 0x0184 _OC1CON = 0x184 + 0x0184 _OC1CONbits = 0x184 + 0x0186 OC2RS = 0x186 + 0x0186 _OC2RS = 0x186 + 0x0188 OC2R = 0x188 + 0x0188 _OC2R = 0x188 + 0x018a OC2CON = 0x18a + 0x018a _OC2CON = 0x18a + 0x018a _OC2CONbits = 0x18a + 0x018c OC3RS = 0x18c + 0x018c _OC3RS = 0x18c + 0x018e OC3R = 0x18e + 0x018e _OC3R = 0x18e + 0x0190 OC3CON = 0x190 + 0x0190 _OC3CON = 0x190 + 0x0190 _OC3CONbits = 0x190 + 0x0192 OC4RS = 0x192 + 0x0192 _OC4RS = 0x192 + 0x0194 OC4R = 0x194 + 0x0194 _OC4R = 0x194 + 0x0196 OC4CON = 0x196 + 0x0196 _OC4CON = 0x196 + 0x0196 _OC4CONbits = 0x196 + 0x01c0 P1TCON = 0x1c0 + 0x01c0 _P1TCON = 0x1c0 + 0x01c0 _P1TCONbits = 0x1c0 + 0x01c0 PTCON = 0x1c0 + 0x01c0 _PTCON = 0x1c0 + 0x01c0 _PTCONbits = 0x1c0 + 0x01c2 P1TMR = 0x1c2 + 0x01c2 _P1TMR = 0x1c2 + 0x01c2 _P1TMRbits = 0x1c2 + 0x01c2 PTMR = 0x1c2 + 0x01c2 _PTMR = 0x1c2 + 0x01c2 _PTMRbits = 0x1c2 + 0x01c4 P1TPER = 0x1c4 + 0x01c4 _P1TPER = 0x1c4 + 0x01c4 _P1TPERbits = 0x1c4 + 0x01c4 PTPER = 0x1c4 + 0x01c4 _PTPER = 0x1c4 + 0x01c4 _PTPERbits = 0x1c4 + 0x01c6 P1SECMP = 0x1c6 + 0x01c6 _P1SECMP = 0x1c6 + 0x01c6 _P1SECMPbits = 0x1c6 + 0x01c6 SEVTCMP = 0x1c6 + 0x01c6 _SEVTCMP = 0x1c6 + 0x01c6 _SEVTCMPbits = 0x1c6 + 0x01c8 PWM1CON1 = 0x1c8 + 0x01c8 _PWM1CON1 = 0x1c8 + 0x01c8 _PWM1CON1bits = 0x1c8 + 0x01c8 PWMCON1 = 0x1c8 + 0x01c8 _PWMCON1 = 0x1c8 + 0x01c8 _PWMCON1bits = 0x1c8 + 0x01ca PWM1CON2 = 0x1ca + 0x01ca _PWM1CON2 = 0x1ca + 0x01ca _PWM1CON2bits = 0x1ca + 0x01ca PWMCON2 = 0x1ca + 0x01ca _PWMCON2 = 0x1ca + 0x01ca _PWMCON2bits = 0x1ca + 0x01cc DTCON1 = 0x1cc + 0x01cc _DTCON1 = 0x1cc + 0x01cc _DTCON1bits = 0x1cc + 0x01cc P1DTCON1 = 0x1cc + 0x01cc _P1DTCON1 = 0x1cc + 0x01cc _P1DTCON1bits = 0x1cc + 0x01ce DTCON2 = 0x1ce + 0x01ce _DTCON2 = 0x1ce + 0x01ce _DTCON2bits = 0x1ce + 0x01ce P1DTCON2 = 0x1ce + 0x01ce _P1DTCON2 = 0x1ce + 0x01ce _P1DTCON2bits = 0x1ce + 0x01d0 FLTACON = 0x1d0 + 0x01d0 _FLTACON = 0x1d0 + 0x01d0 _FLTACONbits = 0x1d0 + 0x01d0 P1FLTACON = 0x1d0 + 0x01d0 _P1FLTACON = 0x1d0 + 0x01d0 _P1FLTACONbits = 0x1d0 + 0x01d4 OVDCON = 0x1d4 + 0x01d4 _OVDCON = 0x1d4 + 0x01d4 _OVDCONbits = 0x1d4 + 0x01d4 P1OVDCON = 0x1d4 + 0x01d4 _P1OVDCON = 0x1d4 + 0x01d4 _P1OVDCONbits = 0x1d4 + 0x01d6 P1DC1 = 0x1d6 + 0x01d6 _P1DC1 = 0x1d6 + 0x01d6 PDC1 = 0x1d6 + 0x01d6 _PDC1 = 0x1d6 + 0x01d8 P1DC2 = 0x1d8 + 0x01d8 _P1DC2 = 0x1d8 + 0x01d8 PDC2 = 0x1d8 + 0x01d8 _PDC2 = 0x1d8 + 0x01da P1DC3 = 0x1da + 0x01da _P1DC3 = 0x1da + 0x01da PDC3 = 0x1da + 0x01da _PDC3 = 0x1da + 0x01e0 QEI1CON = 0x1e0 + 0x01e0 _QEI1CON = 0x1e0 + 0x01e0 _QEI1CONbits = 0x1e0 + 0x01e0 QEICON = 0x1e0 + 0x01e0 _QEICON = 0x1e0 + 0x01e0 _QEICONbits = 0x1e0 + 0x01e2 DFLT1CON = 0x1e2 + 0x01e2 _DFLT1CON = 0x1e2 + 0x01e2 _DFLT1CONbits = 0x1e2 + 0x01e2 DFLTCON = 0x1e2 + 0x01e2 _DFLTCON = 0x1e2 + 0x01e2 _DFLTCONbits = 0x1e2 + 0x01e4 POS1CNT = 0x1e4 + 0x01e4 _POS1CNT = 0x1e4 + 0x01e4 POSCNT = 0x1e4 + 0x01e4 _POSCNT = 0x1e4 + 0x01e6 MAX1CNT = 0x1e6 + 0x01e6 _MAX1CNT = 0x1e6 + 0x01e6 MAXCNT = 0x1e6 + 0x01e6 _MAXCNT = 0x1e6 + 0x01f0 QEI2CON = 0x1f0 + 0x01f0 _QEI2CON = 0x1f0 + 0x01f0 _QEI2CONbits = 0x1f0 + 0x01f2 DFLT2CON = 0x1f2 + 0x01f2 _DFLT2CON = 0x1f2 + 0x01f2 _DFLT2CONbits = 0x1f2 + 0x01f4 POS2CNT = 0x1f4 + 0x01f4 _POS2CNT = 0x1f4 + 0x01f6 MAX2CNT = 0x1f6 + 0x01f6 _MAX2CNT = 0x1f6 + 0x0200 I2C1RCV = 0x200 + 0x0200 _I2C1RCV = 0x200 + 0x0200 I2CRCV = 0x200 + 0x0200 _I2CRCV = 0x200 + 0x0202 I2C1TRN = 0x202 + 0x0202 _I2C1TRN = 0x202 + 0x0202 I2CTRN = 0x202 + 0x0202 _I2CTRN = 0x202 + 0x0204 I2C1BRG = 0x204 + 0x0204 _I2C1BRG = 0x204 + 0x0206 I2C1CON = 0x206 + 0x0206 _I2C1CON = 0x206 + 0x0206 _I2C1CONbits = 0x206 + 0x0206 I2CCON = 0x206 + 0x0206 _I2CCON = 0x206 + 0x0206 _I2CCONbits = 0x206 + 0x0208 I2C1STAT = 0x208 + 0x0208 _I2C1STAT = 0x208 + 0x0208 _I2C1STATbits = 0x208 + 0x0208 I2CSTAT = 0x208 + 0x0208 _I2CSTAT = 0x208 + 0x0208 _I2CSTATbits = 0x208 + 0x020a I2C1ADD = 0x20a + 0x020a _I2C1ADD = 0x20a + 0x020a I2CADD = 0x20a + 0x020a _I2CADD = 0x20a + 0x020c I2C1MSK = 0x20c + 0x020c _I2C1MSK = 0x20c + 0x0220 U1MODE = 0x220 + 0x0220 _U1MODE = 0x220 + 0x0220 _U1MODEbits = 0x220 + 0x0222 U1STA = 0x222 + 0x0222 _U1STA = 0x222 + 0x0222 _U1STAbits = 0x222 + 0x0224 U1TXREG = 0x224 + 0x0224 _U1TXREG = 0x224 + 0x0224 _U1TXREGbits = 0x224 + 0x0226 U1RXREG = 0x226 + 0x0226 _U1RXREG = 0x226 + 0x0226 _U1RXREGbits = 0x226 + 0x0228 U1BRG = 0x228 + 0x0228 _U1BRG = 0x228 + 0x0230 U2MODE = 0x230 + 0x0230 _U2MODE = 0x230 + 0x0230 _U2MODEbits = 0x230 + 0x0232 U2STA = 0x232 + 0x0232 _U2STA = 0x232 + 0x0232 _U2STAbits = 0x232 + 0x0234 U2TXREG = 0x234 + 0x0234 _U2TXREG = 0x234 + 0x0234 _U2TXREGbits = 0x234 + 0x0236 U2RXREG = 0x236 + 0x0236 _U2RXREG = 0x236 + 0x0236 _U2RXREGbits = 0x236 + 0x0238 U2BRG = 0x238 + 0x0238 _U2BRG = 0x238 + 0x0240 SPI1STAT = 0x240 + 0x0240 _SPI1STAT = 0x240 + 0x0240 _SPI1STATbits = 0x240 + 0x0242 SPI1CON1 = 0x242 + 0x0242 _SPI1CON1 = 0x242 + 0x0242 _SPI1CON1bits = 0x242 + 0x0244 SPI1CON2 = 0x244 + 0x0244 _SPI1CON2 = 0x244 + 0x0244 _SPI1CON2bits = 0x244 + 0x0248 SPI1BUF = 0x248 + 0x0248 _SPI1BUF = 0x248 + 0x0260 SPI2STAT = 0x260 + 0x0260 _SPI2STAT = 0x260 + 0x0260 _SPI2STATbits = 0x260 + 0x0262 SPI2CON1 = 0x262 + 0x0262 _SPI2CON1 = 0x262 + 0x0262 _SPI2CON1bits = 0x262 + 0x0264 SPI2CON2 = 0x264 + 0x0264 _SPI2CON2 = 0x264 + 0x0264 _SPI2CON2bits = 0x264 + 0x0268 SPI2BUF = 0x268 + 0x0268 _SPI2BUF = 0x268 + 0x02c0 TRISA = 0x2c0 + 0x02c0 _TRISA = 0x2c0 + 0x02c0 _TRISAbits = 0x2c0 + 0x02c2 PORTA = 0x2c2 + 0x02c2 _PORTA = 0x2c2 + 0x02c2 _PORTAbits = 0x2c2 + 0x02c4 LATA = 0x2c4 + 0x02c4 _LATA = 0x2c4 + 0x02c4 _LATAbits = 0x2c4 + 0x02c6 ODCA = 0x2c6 + 0x02c6 _ODCA = 0x2c6 + 0x02c6 _ODCAbits = 0x2c6 + 0x02c8 TRISB = 0x2c8 + 0x02c8 _TRISB = 0x2c8 + 0x02c8 _TRISBbits = 0x2c8 + 0x02ca PORTB = 0x2ca + 0x02ca _PORTB = 0x2ca + 0x02ca _PORTBbits = 0x2ca + 0x02cc LATB = 0x2cc + 0x02cc _LATB = 0x2cc + 0x02cc _LATBbits = 0x2cc + 0x02ce ODCB = 0x2ce + 0x02ce _ODCB = 0x2ce + 0x02ce _ODCBbits = 0x2ce + 0x02fc PADCFG1 = 0x2fc + 0x02fc _PADCFG1 = 0x2fc + 0x02fc _PADCFG1bits = 0x2fc + 0x0300 ADC1BUF0 = 0x300 + 0x0300 _ADC1BUF0 = 0x300 + 0x0300 ADCBUF0 = 0x300 + 0x0300 _ADCBUF0 = 0x300 + 0x0320 AD1CON1 = 0x320 + 0x0320 _AD1CON1 = 0x320 + 0x0320 _AD1CON1bits = 0x320 + 0x0322 AD1CON2 = 0x322 + 0x0322 _AD1CON2 = 0x322 + 0x0322 _AD1CON2bits = 0x322 + 0x0324 AD1CON3 = 0x324 + 0x0324 _AD1CON3 = 0x324 + 0x0324 _AD1CON3bits = 0x324 + 0x0326 AD1CHS123 = 0x326 + 0x0326 _AD1CHS123 = 0x326 + 0x0326 _AD1CHS123bits = 0x326 + 0x0328 AD1CHS0 = 0x328 + 0x0328 _AD1CHS0 = 0x328 + 0x0328 _AD1CHS0bits = 0x328 + 0x032c AD1PCFGL = 0x32c + 0x032c _AD1PCFGL = 0x32c + 0x032c _AD1PCFGLbits = 0x32c + 0x032c ADPCFG = 0x32c + 0x032c _ADPCFG = 0x32c + 0x032c _ADPCFGbits = 0x32c + 0x0330 AD1CSSL = 0x330 + 0x0330 _AD1CSSL = 0x330 + 0x0330 _AD1CSSLbits = 0x330 + 0x0332 AD1CON4 = 0x332 + 0x0332 _AD1CON4 = 0x332 + 0x0332 _AD1CON4bits = 0x332 + 0x0380 DMA0CON = 0x380 + 0x0380 _DMA0CON = 0x380 + 0x0380 _DMA0CONbits = 0x380 + 0x0382 DMA0REQ = 0x382 + 0x0382 _DMA0REQ = 0x382 + 0x0382 _DMA0REQbits = 0x382 + 0x0384 DMA0STA = 0x384 + 0x0384 _DMA0STA = 0x384 + 0x0386 DMA0STB = 0x386 + 0x0386 _DMA0STB = 0x386 + 0x0388 DMA0PAD = 0x388 + 0x0388 _DMA0PAD = 0x388 + 0x038a DMA0CNT = 0x38a + 0x038a _DMA0CNT = 0x38a + 0x038c DMA1CON = 0x38c + 0x038c _DMA1CON = 0x38c + 0x038c _DMA1CONbits = 0x38c + 0x038e DMA1REQ = 0x38e + 0x038e _DMA1REQ = 0x38e + 0x038e _DMA1REQbits = 0x38e + 0x0390 DMA1STA = 0x390 + 0x0390 _DMA1STA = 0x390 + 0x0392 DMA1STB = 0x392 + 0x0392 _DMA1STB = 0x392 + 0x0394 DMA1PAD = 0x394 + 0x0394 _DMA1PAD = 0x394 + 0x0396 DMA1CNT = 0x396 + 0x0396 _DMA1CNT = 0x396 + 0x0398 DMA2CON = 0x398 + 0x0398 _DMA2CON = 0x398 + 0x0398 _DMA2CONbits = 0x398 + 0x039a DMA2REQ = 0x39a + 0x039a _DMA2REQ = 0x39a + 0x039a _DMA2REQbits = 0x39a + 0x039c DMA2STA = 0x39c + 0x039c _DMA2STA = 0x39c + 0x039e DMA2STB = 0x39e + 0x039e _DMA2STB = 0x39e + 0x03a0 DMA2PAD = 0x3a0 + 0x03a0 _DMA2PAD = 0x3a0 + 0x03a2 DMA2CNT = 0x3a2 + 0x03a2 _DMA2CNT = 0x3a2 + 0x03a4 DMA3CON = 0x3a4 + 0x03a4 _DMA3CON = 0x3a4 + 0x03a4 _DMA3CONbits = 0x3a4 + 0x03a6 DMA3REQ = 0x3a6 + 0x03a6 _DMA3REQ = 0x3a6 + 0x03a6 _DMA3REQbits = 0x3a6 + 0x03a8 DMA3STA = 0x3a8 + 0x03a8 _DMA3STA = 0x3a8 + 0x03aa DMA3STB = 0x3aa + 0x03aa _DMA3STB = 0x3aa + 0x03ac DMA3PAD = 0x3ac + 0x03ac _DMA3PAD = 0x3ac + 0x03ae DMA3CNT = 0x3ae + 0x03ae _DMA3CNT = 0x3ae + 0x03b0 DMA4CON = 0x3b0 + 0x03b0 _DMA4CON = 0x3b0 + 0x03b0 _DMA4CONbits = 0x3b0 + 0x03b2 DMA4REQ = 0x3b2 + 0x03b2 _DMA4REQ = 0x3b2 + 0x03b2 _DMA4REQbits = 0x3b2 + 0x03b4 DMA4STA = 0x3b4 + 0x03b4 _DMA4STA = 0x3b4 + 0x03b6 DMA4STB = 0x3b6 + 0x03b6 _DMA4STB = 0x3b6 + 0x03b8 DMA4PAD = 0x3b8 + 0x03b8 _DMA4PAD = 0x3b8 + 0x03ba DMA4CNT = 0x3ba + 0x03ba _DMA4CNT = 0x3ba + 0x03bc DMA5CON = 0x3bc + 0x03bc _DMA5CON = 0x3bc + 0x03bc _DMA5CONbits = 0x3bc + 0x03be DMA5REQ = 0x3be + 0x03be _DMA5REQ = 0x3be + 0x03be _DMA5REQbits = 0x3be + 0x03c0 DMA5STA = 0x3c0 + 0x03c0 _DMA5STA = 0x3c0 + 0x03c2 DMA5STB = 0x3c2 + 0x03c2 _DMA5STB = 0x3c2 + 0x03c4 DMA5PAD = 0x3c4 + 0x03c4 _DMA5PAD = 0x3c4 + 0x03c6 DMA5CNT = 0x3c6 + 0x03c6 _DMA5CNT = 0x3c6 + 0x03c8 DMA6CON = 0x3c8 + 0x03c8 _DMA6CON = 0x3c8 + 0x03c8 _DMA6CONbits = 0x3c8 + 0x03ca DMA6REQ = 0x3ca + 0x03ca _DMA6REQ = 0x3ca + 0x03ca _DMA6REQbits = 0x3ca + 0x03cc DMA6STA = 0x3cc + 0x03cc _DMA6STA = 0x3cc + 0x03ce DMA6STB = 0x3ce + 0x03ce _DMA6STB = 0x3ce + 0x03d0 DMA6PAD = 0x3d0 + 0x03d0 _DMA6PAD = 0x3d0 + 0x03d2 DMA6CNT = 0x3d2 + 0x03d2 _DMA6CNT = 0x3d2 + 0x03d4 DMA7CON = 0x3d4 + 0x03d4 _DMA7CON = 0x3d4 + 0x03d4 _DMA7CONbits = 0x3d4 + 0x03d6 DMA7REQ = 0x3d6 + 0x03d6 _DMA7REQ = 0x3d6 + 0x03d6 _DMA7REQbits = 0x3d6 + 0x03d8 DMA7STA = 0x3d8 + 0x03d8 _DMA7STA = 0x3d8 + 0x03da DMA7STB = 0x3da + 0x03da _DMA7STB = 0x3da + 0x03dc DMA7PAD = 0x3dc + 0x03dc _DMA7PAD = 0x3dc + 0x03de DMA7CNT = 0x3de + 0x03de _DMA7CNT = 0x3de + 0x03e0 DMACS0 = 0x3e0 + 0x03e0 _DMACS0 = 0x3e0 + 0x03e0 _DMACS0bits = 0x3e0 + 0x03e2 DMACS1 = 0x3e2 + 0x03e2 _DMACS1 = 0x3e2 + 0x03e2 _DMACS1bits = 0x3e2 + 0x03e4 DSADR = 0x3e4 + 0x03e4 _DSADR = 0x3e4 + 0x0400 C1CTRL1 = 0x400 + 0x0400 _C1CTRL1 = 0x400 + 0x0400 _C1CTRL1bits = 0x400 + 0x0402 C1CTRL2 = 0x402 + 0x0402 _C1CTRL2 = 0x402 + 0x0402 _C1CTRL2bits = 0x402 + 0x0404 C1VEC = 0x404 + 0x0404 _C1VEC = 0x404 + 0x0404 _C1VECbits = 0x404 + 0x0406 C1FCTRL = 0x406 + 0x0406 _C1FCTRL = 0x406 + 0x0406 _C1FCTRLbits = 0x406 + 0x0408 C1FIFO = 0x408 + 0x0408 _C1FIFO = 0x408 + 0x0408 _C1FIFObits = 0x408 + 0x040a C1INTF = 0x40a + 0x040a _C1INTF = 0x40a + 0x040a _C1INTFbits = 0x40a + 0x040c C1INTE = 0x40c + 0x040c _C1INTE = 0x40c + 0x040c _C1INTEbits = 0x40c + 0x040e C1EC = 0x40e + 0x040e _C1EC = 0x40e + 0x040e _C1ECbits = 0x40e + 0x040e C1RERRCNT = 0x40e + 0x040e _C1RERRCNT = 0x40e + 0x040f C1TERRCNT = 0x40f + 0x040f _C1TERRCNT = 0x40f + 0x0410 C1CFG1 = 0x410 + 0x0410 _C1CFG1 = 0x410 + 0x0410 _C1CFG1bits = 0x410 + 0x0412 C1CFG2 = 0x412 + 0x0412 _C1CFG2 = 0x412 + 0x0412 _C1CFG2bits = 0x412 + 0x0414 C1FEN1 = 0x414 + 0x0414 _C1FEN1 = 0x414 + 0x0414 _C1FEN1bits = 0x414 + 0x0418 C1FMSKSEL1 = 0x418 + 0x0418 _C1FMSKSEL1 = 0x418 + 0x0418 _C1FMSKSEL1bits = 0x418 + 0x041a C1FMSKSEL2 = 0x41a + 0x041a _C1FMSKSEL2 = 0x41a + 0x041a _C1FMSKSEL2bits = 0x41a + 0x0420 C1BUFPNT1 = 0x420 + 0x0420 _C1BUFPNT1 = 0x420 + 0x0420 _C1BUFPNT1bits = 0x420 + 0x0420 C1RXFUL1 = 0x420 + 0x0420 _C1RXFUL1 = 0x420 + 0x0420 _C1RXFUL1bits = 0x420 + 0x0422 C1BUFPNT2 = 0x422 + 0x0422 _C1BUFPNT2 = 0x422 + 0x0422 _C1BUFPNT2bits = 0x422 + 0x0422 C1RXFUL2 = 0x422 + 0x0422 _C1RXFUL2 = 0x422 + 0x0422 _C1RXFUL2bits = 0x422 + 0x0424 C1BUFPNT3 = 0x424 + 0x0424 _C1BUFPNT3 = 0x424 + 0x0424 _C1BUFPNT3bits = 0x424 + 0x0426 C1BUFPNT4 = 0x426 + 0x0426 _C1BUFPNT4 = 0x426 + 0x0426 _C1BUFPNT4bits = 0x426 + 0x0428 C1RXOVF1 = 0x428 + 0x0428 _C1RXOVF1 = 0x428 + 0x0428 _C1RXOVF1bits = 0x428 + 0x042a C1RXOVF2 = 0x42a + 0x042a _C1RXOVF2 = 0x42a + 0x042a _C1RXOVF2bits = 0x42a + 0x0430 C1RXM0SID = 0x430 + 0x0430 _C1RXM0SID = 0x430 + 0x0430 _C1RXM0SIDbits = 0x430 + 0x0430 C1TR01CON = 0x430 + 0x0430 _C1TR01CON = 0x430 + 0x0430 _C1TR01CONbits = 0x430 + 0x0432 C1RXM0EID = 0x432 + 0x0432 _C1RXM0EID = 0x432 + 0x0432 _C1RXM0EIDbits = 0x432 + 0x0432 C1TR23CON = 0x432 + 0x0432 _C1TR23CON = 0x432 + 0x0432 _C1TR23CONbits = 0x432 + 0x0434 C1RXM1SID = 0x434 + 0x0434 _C1RXM1SID = 0x434 + 0x0434 _C1RXM1SIDbits = 0x434 + 0x0434 C1TR45CON = 0x434 + 0x0434 _C1TR45CON = 0x434 + 0x0434 _C1TR45CONbits = 0x434 + 0x0436 C1RXM1EID = 0x436 + 0x0436 _C1RXM1EID = 0x436 + 0x0436 _C1RXM1EIDbits = 0x436 + 0x0436 C1TR67CON = 0x436 + 0x0436 _C1TR67CON = 0x436 + 0x0436 _C1TR67CONbits = 0x436 + 0x0438 C1RXM2SID = 0x438 + 0x0438 _C1RXM2SID = 0x438 + 0x0438 _C1RXM2SIDbits = 0x438 + 0x043a C1RXM2EID = 0x43a + 0x043a _C1RXM2EID = 0x43a + 0x043a _C1RXM2EIDbits = 0x43a + 0x0440 C1RXD = 0x440 + 0x0440 _C1RXD = 0x440 + 0x0440 C1RXF0SID = 0x440 + 0x0440 _C1RXF0SID = 0x440 + 0x0440 _C1RXF0SIDbits = 0x440 + 0x0442 C1RXF0EID = 0x442 + 0x0442 _C1RXF0EID = 0x442 + 0x0442 _C1RXF0EIDbits = 0x442 + 0x0442 C1TXD = 0x442 + 0x0442 _C1TXD = 0x442 + 0x0444 C1RXF1SID = 0x444 + 0x0444 _C1RXF1SID = 0x444 + 0x0444 _C1RXF1SIDbits = 0x444 + 0x0446 C1RXF1EID = 0x446 + 0x0446 _C1RXF1EID = 0x446 + 0x0446 _C1RXF1EIDbits = 0x446 + 0x0448 C1RXF2SID = 0x448 + 0x0448 _C1RXF2SID = 0x448 + 0x0448 _C1RXF2SIDbits = 0x448 + 0x044a C1RXF2EID = 0x44a + 0x044a _C1RXF2EID = 0x44a + 0x044a _C1RXF2EIDbits = 0x44a + 0x044c C1RXF3SID = 0x44c + 0x044c _C1RXF3SID = 0x44c + 0x044c _C1RXF3SIDbits = 0x44c + 0x044e C1RXF3EID = 0x44e + 0x044e _C1RXF3EID = 0x44e + 0x044e _C1RXF3EIDbits = 0x44e + 0x0450 C1RXF4SID = 0x450 + 0x0450 _C1RXF4SID = 0x450 + 0x0450 _C1RXF4SIDbits = 0x450 + 0x0452 C1RXF4EID = 0x452 + 0x0452 _C1RXF4EID = 0x452 + 0x0452 _C1RXF4EIDbits = 0x452 + 0x0454 C1RXF5SID = 0x454 + 0x0454 _C1RXF5SID = 0x454 + 0x0454 _C1RXF5SIDbits = 0x454 + 0x0456 C1RXF5EID = 0x456 + 0x0456 _C1RXF5EID = 0x456 + 0x0456 _C1RXF5EIDbits = 0x456 + 0x0458 C1RXF6SID = 0x458 + 0x0458 _C1RXF6SID = 0x458 + 0x0458 _C1RXF6SIDbits = 0x458 + 0x045a C1RXF6EID = 0x45a + 0x045a _C1RXF6EID = 0x45a + 0x045a _C1RXF6EIDbits = 0x45a + 0x045c C1RXF7SID = 0x45c + 0x045c _C1RXF7SID = 0x45c + 0x045c _C1RXF7SIDbits = 0x45c + 0x045e C1RXF7EID = 0x45e + 0x045e _C1RXF7EID = 0x45e + 0x045e _C1RXF7EIDbits = 0x45e + 0x0460 C1RXF8SID = 0x460 + 0x0460 _C1RXF8SID = 0x460 + 0x0460 _C1RXF8SIDbits = 0x460 + 0x0462 C1RXF8EID = 0x462 + 0x0462 _C1RXF8EID = 0x462 + 0x0462 _C1RXF8EIDbits = 0x462 + 0x0464 C1RXF9SID = 0x464 + 0x0464 _C1RXF9SID = 0x464 + 0x0464 _C1RXF9SIDbits = 0x464 + 0x0466 C1RXF9EID = 0x466 + 0x0466 _C1RXF9EID = 0x466 + 0x0466 _C1RXF9EIDbits = 0x466 + 0x0468 C1RXF10SID = 0x468 + 0x0468 _C1RXF10SID = 0x468 + 0x0468 _C1RXF10SIDbits = 0x468 + 0x046a C1RXF10EID = 0x46a + 0x046a _C1RXF10EID = 0x46a + 0x046a _C1RXF10EIDbits = 0x46a + 0x046c C1RXF11SID = 0x46c + 0x046c _C1RXF11SID = 0x46c + 0x046c _C1RXF11SIDbits = 0x46c + 0x046e C1RXF11EID = 0x46e + 0x046e _C1RXF11EID = 0x46e + 0x046e _C1RXF11EIDbits = 0x46e + 0x0470 C1RXF12SID = 0x470 + 0x0470 _C1RXF12SID = 0x470 + 0x0470 _C1RXF12SIDbits = 0x470 + 0x0472 C1RXF12EID = 0x472 + 0x0472 _C1RXF12EID = 0x472 + 0x0472 _C1RXF12EIDbits = 0x472 + 0x0474 C1RXF13SID = 0x474 + 0x0474 _C1RXF13SID = 0x474 + 0x0474 _C1RXF13SIDbits = 0x474 + 0x0476 C1RXF13EID = 0x476 + 0x0476 _C1RXF13EID = 0x476 + 0x0476 _C1RXF13EIDbits = 0x476 + 0x0478 C1RXF14SID = 0x478 + 0x0478 _C1RXF14SID = 0x478 + 0x0478 _C1RXF14SIDbits = 0x478 + 0x047a C1RXF14EID = 0x47a + 0x047a _C1RXF14EID = 0x47a + 0x047a _C1RXF14EIDbits = 0x47a + 0x047c C1RXF15SID = 0x47c + 0x047c _C1RXF15SID = 0x47c + 0x047c _C1RXF15SIDbits = 0x47c + 0x047e C1RXF15EID = 0x47e + 0x047e _C1RXF15EID = 0x47e + 0x047e _C1RXF15EIDbits = 0x47e + 0x05c0 P2TCON = 0x5c0 + 0x05c0 _P2TCON = 0x5c0 + 0x05c0 _P2TCONbits = 0x5c0 + 0x05c2 P2TMR = 0x5c2 + 0x05c2 _P2TMR = 0x5c2 + 0x05c2 _P2TMRbits = 0x5c2 + 0x05c4 P2TPER = 0x5c4 + 0x05c4 _P2TPER = 0x5c4 + 0x05c4 _P2TPERbits = 0x5c4 + 0x05c6 P2SECMP = 0x5c6 + 0x05c6 _P2SECMP = 0x5c6 + 0x05c6 _P2SECMPbits = 0x5c6 + 0x05c8 PWM2CON1 = 0x5c8 + 0x05c8 _PWM2CON1 = 0x5c8 + 0x05c8 _PWM2CON1bits = 0x5c8 + 0x05ca PWM2CON2 = 0x5ca + 0x05ca _PWM2CON2 = 0x5ca + 0x05ca _PWM2CON2bits = 0x5ca + 0x05cc P2DTCON1 = 0x5cc + 0x05cc _P2DTCON1 = 0x5cc + 0x05cc _P2DTCON1bits = 0x5cc + 0x05ce P2DTCON2 = 0x5ce + 0x05ce _P2DTCON2 = 0x5ce + 0x05ce _P2DTCON2bits = 0x5ce + 0x05d0 P2FLTACON = 0x5d0 + 0x05d0 _P2FLTACON = 0x5d0 + 0x05d0 _P2FLTACONbits = 0x5d0 + 0x05d4 P2OVDCON = 0x5d4 + 0x05d4 _P2OVDCON = 0x5d4 + 0x05d4 _P2OVDCONbits = 0x5d4 + 0x05d6 P2DC1 = 0x5d6 + 0x05d6 _P2DC1 = 0x5d6 + 0x0600 PMCON = 0x600 + 0x0600 _PMCON = 0x600 + 0x0600 _PMCONbits = 0x600 + 0x0602 PMMODE = 0x602 + 0x0602 _PMMODE = 0x602 + 0x0602 _PMMODEbits = 0x602 + 0x0604 PMADDR = 0x604 + 0x0604 _PMADDR = 0x604 + 0x0604 _PMADDRbits = 0x604 + 0x0604 PMDOUT1 = 0x604 + 0x0604 _PMDOUT1 = 0x604 + 0x0606 PMDOUT2 = 0x606 + 0x0606 _PMDOUT2 = 0x606 + 0x0608 PMDIN1 = 0x608 + 0x0608 _PMDIN1 = 0x608 + 0x060a PMDIN2 = 0x60a + 0x060a _PMDIN2 = 0x60a + 0x060c PMAEN = 0x60c + 0x060c _PMAEN = 0x60c + 0x060c _PMAENbits = 0x60c + 0x060e PMSTAT = 0x60e + 0x060e _PMSTAT = 0x60e + 0x060e _PMSTATbits = 0x60e + 0x0620 ALRMVAL = 0x620 + 0x0620 _ALRMVAL = 0x620 + 0x0622 ALCFGRPT = 0x622 + 0x0622 _ALCFGRPT = 0x622 + 0x0622 _ALCFGRPTbits = 0x622 + 0x0624 RTCVAL = 0x624 + 0x0624 _RTCVAL = 0x624 + 0x0626 RCFGCAL = 0x626 + 0x0626 _RCFGCAL = 0x626 + 0x0626 _RCFGCALbits = 0x626 + 0x0630 CMCON = 0x630 + 0x0630 _CMCON = 0x630 + 0x0630 _CMCONbits = 0x630 + 0x0632 CVRCON = 0x632 + 0x0632 _CVRCON = 0x632 + 0x0632 _CVRCONbits = 0x632 + 0x0640 CRCCON = 0x640 + 0x0640 _CRCCON = 0x640 + 0x0640 _CRCCONbits = 0x640 + 0x0642 CRCXOR = 0x642 + 0x0642 _CRCXOR = 0x642 + 0x0644 CRCDAT = 0x644 + 0x0644 _CRCDAT = 0x644 + 0x0646 CRCWDAT = 0x646 + 0x0646 _CRCWDAT = 0x646 + 0x0680 RPINR0 = 0x680 + 0x0680 _RPINR0 = 0x680 + 0x0680 _RPINR0bits = 0x680 + 0x0682 RPINR1 = 0x682 + 0x0682 _RPINR1 = 0x682 + 0x0682 _RPINR1bits = 0x682 + 0x0686 RPINR3 = 0x686 + 0x0686 _RPINR3 = 0x686 + 0x0686 _RPINR3bits = 0x686 + 0x0688 RPINR4 = 0x688 + 0x0688 _RPINR4 = 0x688 + 0x0688 _RPINR4bits = 0x688 + 0x068e RPINR7 = 0x68e + 0x068e _RPINR7 = 0x68e + 0x068e _RPINR7bits = 0x68e + 0x0694 RPINR10 = 0x694 + 0x0694 _RPINR10 = 0x694 + 0x0694 _RPINR10bits = 0x694 + 0x0696 RPINR11 = 0x696 + 0x0696 _RPINR11 = 0x696 + 0x0696 _RPINR11bits = 0x696 + 0x0698 RPINR12 = 0x698 + 0x0698 _RPINR12 = 0x698 + 0x0698 _RPINR12bits = 0x698 + 0x069a RPINR13 = 0x69a + 0x069a _RPINR13 = 0x69a + 0x069a _RPINR13bits = 0x69a + 0x069c RPINR14 = 0x69c + 0x069c _RPINR14 = 0x69c + 0x069c _RPINR14bits = 0x69c + 0x069e RPINR15 = 0x69e + 0x069e _RPINR15 = 0x69e + 0x069e _RPINR15bits = 0x69e + 0x06a0 RPINR16 = 0x6a0 + 0x06a0 _RPINR16 = 0x6a0 + 0x06a0 _RPINR16bits = 0x6a0 + 0x06a2 RPINR17 = 0x6a2 + 0x06a2 _RPINR17 = 0x6a2 + 0x06a2 _RPINR17bits = 0x6a2 + 0x06a4 RPINR18 = 0x6a4 + 0x06a4 _RPINR18 = 0x6a4 + 0x06a4 _RPINR18bits = 0x6a4 + 0x06a6 RPINR19 = 0x6a6 + 0x06a6 _RPINR19 = 0x6a6 + 0x06a6 _RPINR19bits = 0x6a6 + 0x06a8 RPINR20 = 0x6a8 + 0x06a8 _RPINR20 = 0x6a8 + 0x06a8 _RPINR20bits = 0x6a8 + 0x06aa RPINR21 = 0x6aa + 0x06aa _RPINR21 = 0x6aa + 0x06aa _RPINR21bits = 0x6aa + 0x06ac RPINR22 = 0x6ac + 0x06ac _RPINR22 = 0x6ac + 0x06ac _RPINR22bits = 0x6ac + 0x06ae RPINR23 = 0x6ae + 0x06ae _RPINR23 = 0x6ae + 0x06ae _RPINR23bits = 0x6ae + 0x06b4 RPINR26 = 0x6b4 + 0x06b4 _RPINR26 = 0x6b4 + 0x06b4 _RPINR26bits = 0x6b4 + 0x06c0 RPOR0 = 0x6c0 + 0x06c0 _RPOR0 = 0x6c0 + 0x06c0 _RPOR0bits = 0x6c0 + 0x06c2 RPOR1 = 0x6c2 + 0x06c2 _RPOR1 = 0x6c2 + 0x06c2 _RPOR1bits = 0x6c2 + 0x06c4 RPOR2 = 0x6c4 + 0x06c4 _RPOR2 = 0x6c4 + 0x06c4 _RPOR2bits = 0x6c4 + 0x06c6 RPOR3 = 0x6c6 + 0x06c6 _RPOR3 = 0x6c6 + 0x06c6 _RPOR3bits = 0x6c6 + 0x06c8 RPOR4 = 0x6c8 + 0x06c8 _RPOR4 = 0x6c8 + 0x06c8 _RPOR4bits = 0x6c8 + 0x06ca RPOR5 = 0x6ca + 0x06ca _RPOR5 = 0x6ca + 0x06ca _RPOR5bits = 0x6ca + 0x06cc RPOR6 = 0x6cc + 0x06cc _RPOR6 = 0x6cc + 0x06cc _RPOR6bits = 0x6cc + 0x06ce RPOR7 = 0x6ce + 0x06ce _RPOR7 = 0x6ce + 0x06ce _RPOR7bits = 0x6ce + 0x06d0 RPOR8 = 0x6d0 + 0x06d0 _RPOR8 = 0x6d0 + 0x06d0 _RPOR8bits = 0x6d0 + 0x06d2 RPOR9 = 0x6d2 + 0x06d2 _RPOR9 = 0x6d2 + 0x06d2 _RPOR9bits = 0x6d2 + 0x06d4 RPOR10 = 0x6d4 + 0x06d4 _RPOR10 = 0x6d4 + 0x06d4 _RPOR10bits = 0x6d4 + 0x06d6 RPOR11 = 0x6d6 + 0x06d6 _RPOR11 = 0x6d6 + 0x06d6 _RPOR11bits = 0x6d6 + 0x06d8 RPOR12 = 0x6d8 + 0x06d8 _RPOR12 = 0x6d8 + 0x06d8 _RPOR12bits = 0x6d8 + 0x0740 RCON = 0x740 + 0x0740 _RCON = 0x740 + 0x0740 _RCONbits = 0x740 + 0x0742 OSCCON = 0x742 + 0x0742 _OSCCON = 0x742 + 0x0742 _OSCCONbits = 0x742 + 0x0742 OSCCONL = 0x742 + 0x0742 _OSCCONL = 0x742 + 0x0743 OSCCONH = 0x743 + 0x0743 _OSCCONH = 0x743 + 0x0744 CLKDIV = 0x744 + 0x0744 _CLKDIV = 0x744 + 0x0744 _CLKDIVbits = 0x744 + 0x0746 PLLFBD = 0x746 + 0x0746 _PLLFBD = 0x746 + 0x0746 _PLLFBDbits = 0x746 + 0x0748 OSCTUN = 0x748 + 0x0748 _OSCTUN = 0x748 + 0x0748 _OSCTUNbits = 0x748 + 0x074a ACLKCON = 0x74a + 0x074a _ACLKCON = 0x74a + 0x074a _ACLKCONbits = 0x74a + 0x0750 BSRAM = 0x750 + 0x0750 _BSRAM = 0x750 + 0x0750 _BSRAMbits = 0x750 + 0x0752 SSRAM = 0x752 + 0x0752 _SSRAM = 0x752 + 0x0752 _SSRAMbits = 0x752 + 0x0760 NVMCON = 0x760 + 0x0760 _NVMCON = 0x760 + 0x0760 _NVMCONbits = 0x760 + 0x0766 NVMKEY = 0x766 + 0x0766 _NVMKEY = 0x766 + 0x0770 PMD1 = 0x770 + 0x0770 _PMD1 = 0x770 + 0x0770 _PMD1bits = 0x770 + 0x0772 PMD2 = 0x772 + 0x0772 _PMD2 = 0x772 + 0x0772 _PMD2bits = 0x772 + 0x0774 PMD3 = 0x774 + 0x0774 _PMD3 = 0x774 + 0x0774 _PMD3bits = 0x774 + 0x0022 ACCA = 0x22 + 0x0022 _ACCA = 0x22 + 0x0028 ACCB = 0x28 + 0x0028 _ACCB = 0x28 + 0x0440 CAN1 = 0x440 + 0x0440 _CAN1 = 0x440 + 0x0140 IC1 = 0x140 + 0x0140 _IC1 = 0x140 + 0x0144 IC2 = 0x144 + 0x0144 _IC2 = 0x144 + 0x0158 IC7 = 0x158 + 0x0158 _IC7 = 0x158 + 0x015c IC8 = 0x15c + 0x015c _IC8 = 0x15c + 0x0180 OC1 = 0x180 + 0x0180 _OC1 = 0x180 + 0x0186 OC2 = 0x186 + 0x0186 _OC2 = 0x186 + 0x018c OC3 = 0x18c + 0x018c _OC3 = 0x18c + 0x0192 OC4 = 0x192 + 0x0192 _OC4 = 0x192 + 0x0240 SPI1 = 0x240 + 0x0240 _SPI1 = 0x240 + 0x0260 SPI2 = 0x260 + 0x0260 _SPI2 = 0x260 + 0x0220 UART1 = 0x220 + 0x0220 _UART1 = 0x220 + 0x0230 UART2 = 0x230 + 0x0230 _UART2 = 0x230 +START GROUP +LOAD c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libfx-elf.a +LOAD c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libpic30-elf.a +LOAD c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a +LOAD c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libc-elf.a +END GROUP +OUTPUT(dist/XC16_dsPIC33FJ128MC802/production/uNAV.X.production.elf elf32-pic30) +LOAD FGS +LOAD jump_table +LOAD data_init + +.debug_pubtypes + 0x0000f0 0x1159 + .debug_pubtypes + 0x0000f0 0x28b build/XC16_dsPIC33FJ128MC802/production/parsing_packet.o + .debug_pubtypes + 0x00037b 0xbe build/XC16_dsPIC33FJ128MC802/production/serial.o + .debug_pubtypes + 0x000439 0x4fa build/XC16_dsPIC33FJ128MC802/production/system.o + .debug_pubtypes + 0x000933 0x15b build/XC16_dsPIC33FJ128MC802/production/interrupts.o + .debug_pubtypes + 0x000a8e 0x12 build/XC16_dsPIC33FJ128MC802/production/configuration_bits.o + .debug_pubtypes + 0x000aa0 0x35 build/XC16_dsPIC33FJ128MC802/production/traps.o + .debug_pubtypes + 0x000ad5 0x121 build/XC16_dsPIC33FJ128MC802/production/user.o + .debug_pubtypes + 0x000bf6 0x1e build/XC16_dsPIC33FJ128MC802/production/main.o + .debug_pubtypes + 0x000c14 0x190 build/XC16_dsPIC33FJ128MC802/production/motors_PID.o + .debug_pubtypes + 0x000da4 0x240 build/XC16_dsPIC33FJ128MC802/production/high_level_control.o + .debug_pubtypes + 0x000fe4 0x265 build/XC16_dsPIC33FJ128MC802/production/decode_packet.o + +__c30_signature + 0x00124a 0x102 + __c30_signature + 0x00124a 0x6 build/XC16_dsPIC33FJ128MC802/production/parsing_packet.o + __c30_signature + 0x001250 0x6 build/XC16_dsPIC33FJ128MC802/production/serial.o + __c30_signature + 0x001256 0x6 build/XC16_dsPIC33FJ128MC802/production/system.o + __c30_signature + 0x00125c 0x6 build/XC16_dsPIC33FJ128MC802/production/interrupts.o + __c30_signature + 0x001262 0x6 build/XC16_dsPIC33FJ128MC802/production/configuration_bits.o + __c30_signature + 0x001268 0x6 build/XC16_dsPIC33FJ128MC802/production/traps.o + __c30_signature + 0x00126e 0x6 build/XC16_dsPIC33FJ128MC802/production/user.o + __c30_signature + 0x001274 0x6 build/XC16_dsPIC33FJ128MC802/production/main.o + __c30_signature + 0x00127a 0x6 build/XC16_dsPIC33FJ128MC802/production/motors_PID.o + __c30_signature + 0x001280 0x6 build/XC16_dsPIC33FJ128MC802/production/high_level_control.o + __c30_signature + 0x001286 0x6 build/XC16_dsPIC33FJ128MC802/production/decode_packet.o + __c30_signature + 0x00128c 0x6 libdsp-elf.a(pid.obj) + __c30_signature + 0x001292 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib/dsPIC33F\libp33FJ128MC802-elf.a(ConfigIntMCPWM1.o) + __c30_signature + 0x001298 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib/dsPIC33F\libp33FJ128MC802-elf.a(OpenMCPWM1.o) + __c30_signature + 0x00129e 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib/dsPIC33F\libp33FJ128MC802-elf.a(SetDutyCycleMCPWM1.o) + __c30_signature + 0x0012a4 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib/dsPIC33F\libp33FJ128MC802-elf.a(SetMCPWM1DeadTimeGeneration.o) + __c30_signature + 0x0012aa 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libpic30-elf.a(crt0_standard.o) + __c30_signature + 0x0012b0 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libpic30-elf.a(data_init_standard.o) + __c30_signature + 0x0012b6 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(addsf3.eo) + __c30_signature + 0x0012bc 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(cosf.eo) + __c30_signature + 0x0012c2 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(divsf3.eo) + __c30_signature + 0x0012c8 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(divsi3.eo) + __c30_signature + 0x0012ce 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(feqltle.eo) + __c30_signature + 0x0012d4 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(fgtge.eo) + __c30_signature + 0x0012da 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(fixsfsi.eo) + __c30_signature + 0x0012e0 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(floatsisf.eo) + __c30_signature + 0x0012e6 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(floatunsisf.eo) + __c30_signature + 0x0012ec 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(fmodf.eo) + __c30_signature + 0x0012f2 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(fmodrem.eo) + __c30_signature + 0x0012f8 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(fpack.eo) + __c30_signature + 0x0012fe 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(funpack.eo) + __c30_signature + 0x001304 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(funpack2.eo) + __c30_signature + 0x00130a 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(futil.eo) + __c30_signature + 0x001310 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(mulsf3.eo) + __c30_signature + 0x001316 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(sincosf.eo) + __c30_signature + 0x00131c 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(sinf.eo) + __c30_signature + 0x001322 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(udivsi3.eo) + __c30_signature + 0x001328 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(errno.eo) + __c30_signature + 0x00132e 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(fcompare.eo) + __c30_signature + 0x001334 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(floatdisf.eo) + __c30_signature + 0x00133a 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(floatundisf.eo) + __c30_signature + 0x001340 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libc-elf.a(memcpy.eo) + __c30_signature + 0x001346 0x6 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libc-elf.a(memset.eo) + +_03B6F6605415eda1 + 0x4600 0x100 + _03B6F6605415eda1 + 0x4600 0x100 build/XC16_dsPIC33FJ128MC802/production/motors_PID.o + 0x4600 _AdcBuffer + +_03B2DC005415eda0 + 0x4700 0xc8 + _03B2DC005415eda0 + 0x4700 0xc8 build/XC16_dsPIC33FJ128MC802/production/serial.o + 0x4700 _BufferTx + +.xbss 0x0800 0xc + .xbss 0x0800 0xc build/XC16_dsPIC33FJ128MC802/production/motors_PID.o + 0x0800 _abcCoefficient1 + 0x0806 _abcCoefficient2 + +.ybss 0x47c8 0xc + .ybss 0x47c8 0xc build/XC16_dsPIC33FJ128MC802/production/motors_PID.o + 0x47c8 _controlHistory1 + 0x47ce _controlHistory2 + +.nbss 0x080c 0x2 + .nbss 0x080c 0x2 c:/program files (x86)/microchip/xc16/v1.22/bin/bin/../../lib\libm-elf.a(errno.eo) + 0x080c _errno + +.bss 0x080e 0x8f4 + .bss 0x080e 0x658 build/XC16_dsPIC33FJ128MC802/production/high_level_control.o + 0x080e _coordinate + 0x081e _delta_odometry + 0x0e5e _counter_delta + 0x0e60 _autosend_delta_odometry + 0x0e62 _sinTh_old + .bss 0x0e66 0xea build/XC16_dsPIC33FJ128MC802/production/serial.o + 0x0e66 _receive_pkg + 0x0f32 _receive_header + 0x0f34 _index_data + 0x0f36 _serial_error + .bss 0x0f50 0xc2 build/XC16_dsPIC33FJ128MC802/production/motors_PID.o + 0x0f50 _PIDstruct1 + 0x0f5a _kCoeffs1 + 0x0f60 _PIDstruct2 + 0x0f6a _kCoeffs2 + 0x0f70 _PulsEncL + 0x0f72 _PulsEncR + 0x0f74 _parameter_motors + 0x0f96 _constraint + 0x0f9e _vel_rif + 0x0fa6 _vel_mis + 0x0fae _pid_left + 0x0fba _pid_right + 0x0fc6 _enable_motors + 0x0fc8 _motor_left + 0x0fd0 _motor_right + 0x0fd8 _emergency + 0x0fde _last_vel_rif + 0x0fe6 _const_vel + 0x0ff2 _k_odo + 0x0ffa _wheel_m + 0x0ffe _parameter_int + .bss 0x1012 0xbe build/XC16_dsPIC33FJ128MC802/production/interrupts.o + 0x1012 _counter_stop + 0x1014 _counter + 0x1016 _counter_odo + 0x1018 _counter_pid + 0x101a _overTmrL + 0x101c _overTmrR + 0x101e _timePeriodL + 0x1022 _timePeriodR + 0x1026 _SIG_VELL + 0x1028 _SIG_VELR + 0x102a _time + 0x1044 _priority + 0x105e _frequency + 0x1078 _name_process_pid_l + 0x108e _name_process_pid_r + 0x10a4 _name_process_velocity + 0x10ba _name_process_odometry + .bss 0x10d0 0x32 build/XC16_dsPIC33FJ128MC802/production/parsing_packet.o + +.data 0x1102 0x32 + .data 0x1102 0x32 build/XC16_dsPIC33FJ128MC802/production/system.o + 0x1102 _version_date_ + 0x110e _version_time_ + 0x1117 _author_code + 0x1128 _name_board + 0x112d _version_code + +.bss 0x47d4 0x6 + .bss 0x47d4 0x6 build/XC16_dsPIC33FJ128MC802/production/system.o + 0x47d4 _reset_count + 0x47d6 _parameter_system + +.data 0x47da 0x8 + .data 0x47da 0x4 build/XC16_dsPIC33FJ128MC802/production/high_level_control.o + 0x47da _cosTh_old + .data 0x47de 0x2 build/XC16_dsPIC33FJ128MC802/production/serial.o + 0x47de _pkg_parse + .data 0x47e0 0x2 build/XC16_dsPIC33FJ128MC802/production/motors_PID.o + 0x47e0 _save_velocity + +.const 0x8bac 0x26 load address 0x000bac + .const 0x8bac 0x26 build/XC16_dsPIC33FJ128MC802/production/system.o + +.text 0x000bd2 0x24e0 + .text 0x000bd2 0xa1e build/XC16_dsPIC33FJ128MC802/production/motors_PID.o + 0x000bd2 _init_parameter + 0x000c8a _update_parameter + 0x000d48 _init_pid_control + 0x000d7e _update_pid_l + 0x000e9e _update_pid_r + 0x000fbe _InitPid1 + 0x000fd6 _InitPid2 + 0x000fee _Emergency + 0x001190 _Velocity + 0x0013fc _MotorPIDL + 0x00149c _MotorPIDR + 0x00153c _adc_motors_current + .text 0x0015f0 0x806 build/XC16_dsPIC33FJ128MC802/production/parsing_packet.o + 0x0015f0 _init_hashmap + 0x001642 _saveData + 0x0018a2 _sendData + 0x001b26 _parse_packet + 0x001c5e _encoder + 0x001cd2 _encoderSingle + 0x001d1e _createPacket + 0x001dd6 _createDataPacket + .text 0x001df6 0x74c build/XC16_dsPIC33FJ128MC802/production/decode_packet.o + 0x001df6 _saveOtherData + 0x002100 _sendOtherData + .text 0x002542 0x520 build/XC16_dsPIC33FJ128MC802/production/system.o + 0x002542 _init_process + 0x0025bc _decodeNameProcess + 0x00261c _update_priority + 0x00262c _update_frequency + 0x002662 _services + 0x00271a _InitInterrupts + 0x002774 _ConfigureOscillator + 0x0027c6 _InitPWM + 0x00280c _InitQEI1 + 0x002838 _InitQEI2 + 0x002864 _InitIC1 + 0x002896 _InitIC2 + 0x0028c8 _InitTimer1 + 0x0028f8 _InitTimer2 + 0x002926 _InitUART1 + 0x002960 _InitDMA0 + 0x002996 _InitDMA1 + 0x0029d4 _InitADC + .text 0x002a62 0x37a build/XC16_dsPIC33FJ128MC802/production/high_level_control.o + 0x002a62 _init_coordinate + 0x002a80 _update_coord + 0x002aa2 _deadReckoning + 0x002d80 _odometry + .text 0x002ddc 0x1aa build/XC16_dsPIC33FJ128MC802/production/serial.o + 0x002ddc _init_buff_serial_error + 0x002dea _decode_pkgs + 0x002dfc _pkg_header + 0x002e2a _pkg_length + 0x002e50 _pkg_data + 0x002eb8 _pkg_error + 0x002ee2 _pkg_checksum + 0x002f14 _pkg_send + .text 0x002f86 0x12c build/XC16_dsPIC33FJ128MC802/production/user.o + 0x002f86 _InitApp + 0x003024 _protectedMemcpy + 0x003052 _maxValue + +.dinit 0x0030b2 0x86 + .dinit 0x0030b2 0x86 data_init + +.text 0x003138 0x18 + .text 0x003138 0x18 build/XC16_dsPIC33FJ128MC802/production/main.o + 0x003138 _main diff --git a/dist/XC16_dsPIC33FJ128MC804/production/MotionControl.X.production.elf b/dist/XC16_dsPIC33FJ128MC804/production/MotionControl.X.production.elf deleted file mode 100755 index 16a1a891fc92e95f83d5ddb202205d94cb0d1050..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202412 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 diff --git a/dist/XC16_dsPIC33FJ128MC804/production/MotionControl.X.production.hex b/dist/XC16_dsPIC33FJ128MC804/production/MotionControl.X.production.hex deleted file mode 100644 index 93ffff7..0000000 --- a/dist/XC16_dsPIC33FJ128MC804/production/MotionControl.X.production.hex +++ /dev/null @@ -1,800 +0,0 @@ -:020000040000fa -:080000000002040000000000f2 -:020000040000fa -:10040000ef8120000e5f24000e0188000000000034 -:100410000c000700407d21000100200011000700b2 -:10042000000020000000e000020032000000020096 -:10043000000000002a180200000000000040da005e -:100440000000fe004440a900000020000000e00081 -:100450000300320000002000a00188004440a800f2 -:100460000000060091018800800078000000eb0089 -:1004700015003700e280400032a0b4009101ba00bc -:10048000e280400032a0b4009102ba00e280400055 -:1004900032a0b4000002eb00472bde00f507b200eb -:1004a000602ce10004003a000059eb008301e900f0 -:1004b000fdff3e00040037006128e100010032002a -:1004c0000082eb00040007001101ba000200e00006 -:1004d000e8ff3a00000006003159ba008301e90044 -:1004e0000c0032002159ba008301e90008003200f3 -:1004f0000400e00003003a00e280400032a0b400b3 -:10050000f5ff370011d9ba008301e900faff3a007c -:100510008100e800e180400032a0b4000000060045 -:100520003216040000000000541604000000000011 -:10053000161604000000000000a0fe003400f800c1 -:10054000881f780008002000a80188004f04780068 -:100550000400fa00000a8000000f7800000a800002 -:10056000100798008420a900714080006008800076 -:100570000088b900000078009e0040001e00900036 -:10058000008050000100200090408800a1408800b9 -:100590000000eb0070408800010f80000080200008 -:1005a00000806000e00f50000200320010002000c8 -:1005b000010037000080eb00d04088000080fa0086 -:1005c0003400f9000080fe000040060000a0fe009c -:1005d0003400f800881f780008002000a801880077 -:1005e0004f0478000400fa00200a8000000f780011 -:1005f000200a80001007980084a0a9008140800094 -:10060000600880000088b900000078009e0040006b -:100610001e0090000080500001002000b0408800c3 -:10062000c14088000000eb0080408800810f8000fe -:100630000080200000806000e00f500002003200c7 -:100640000080eb000100370010002000e04088002f -:100650000080fa003400f9000080fe00004006002f -:100660003600f800809fbe00821f78003400f8003a -:1006700000002000a00188000000fa008460a900aa -:100680008440a80061408000401f200000017800e5 -:10069000110009008280d8008000fd00e00f5000aa -:1006a0000f003a00201680004400de006140600028 -:1006b0000004a200614060000080fb006100600057 -:1006c0004400dd0022168000f1fe2f008100610051 -:1006d00000807000201688000000eb006040880059 -:1006e000604080000000e800604088000080fa0060 -:1006f0003400f9004f0178004f00be003600f900c9 -:100700000040060000a0fe003400f800881f7800ba -:1007100008002000a80188004f0478000000fa00bb -:1007200084e0a90090408000a1408000e00f5000cc -:10073000e08f580003003200704080000000e800a5 -:1007400070408800b0408000c1408000e00f500041 -:10075000e08f580003003200804080000000e80075 -:10076000804088000080fa003400f9000080fe001c -:10077000004006003600f800809fbe00829fbe0049 -:10078000849fbe00869fbe003400f8000000200059 -:10079000a00188000000fa008440a900d5030700ea -:1007a00060040700a20407000080fa003400f9008a -:1007b0004f03be004f02be004f01be004f00be00ff -:1007c0003600f900004006003600f800809fbe00a9 -:1007d000829fbe00849fbe00869fbe003400f8004a -:1007e00000002000a00188000000fa0084c0a900d9 -:1007f0000f0507000080fa003400f9004f03be0027 -:100800004f02be004f01be004f00be003600f9008f -:10081000004006000000fa00001180006600600041 -:10082000e60f500002003a0030118000030037004c -:1008300031118000f00f2000008060000080fa007d -:10084000000006003600f800809fbe00829fbe00b8 -:10085000849fbe00869fbe003400f8000000200088 -:10086000a00188000000fa008560a9001011800036 -:1008700061006000e00f500007003200e5ff070054 -:1008800000407800e2080700e00f50000f0032003f -:1008900084c0a8000d0037001011800064006000c3 -:1008a000e00f5000020032000080eb002709070033 -:1008b0001011800062006000e00f50000300320061 -:1008c0002222a900e0ff2f00200907000080fa0083 -:1008d0003400f9004f03be004f02be004f01be00be -:1008e0004f00be003600f900004006003600f80058 -:1008f000809fbe00829fbe00849fbe00869fbe0078 -:100900003400f80000002000a00188000000fa0078 -:100910008480a9008a0407000080fa003400f900ee -:100920004f03be004f02be004f01be004f00be008d -:100930003600f900004006003400f800881f7800f7 -:1009400008002000a80188004f0478000000fa0089 -:1009500085c0a9000080fa003400f90000400600bc -:100960000000fa008020a900ffff37000000fa0015 -:100970008060a900ffff37000000fa008040a90056 -:10098000ffff37000000fa008080a900ffff37005a -:100990000000fa0080a0a900ffff37000000fa0065 -:1009a0008020a900ffff37000000fa008060a90046 -:1009b000ffff37000000fa008040a900ffff37006a -:1009c0000000fa008080a900ffff37000000fa0055 -:1009d00080a0a900ffff37000000fa00ffff3700ea -:1009e000881f78008a1f78004400f800080f200054 -:1009f000280288000004900010059000a0009000dc -:100a000030019000c00190000300ca000280ca00bb -:100a10000030cb001a00cd004604c3000100ca001c -:100a20004604c0001e04c0000605c0000100cd0041 -:100a300021009800050d7800eaba97000525780096 -:100a40004400f9004f0578004f04780000000600cc -:100a5000801f78004000b0000008eb004f007800d5 -:100a6000801f7800100090000018eb000018eb00c9 -:100a70000008eb004f007800000006004400f8007a -:100a8000020f200022028800910078003000ca0086 -:100a90003080ca000000cb002080ca000000cb00dc -:100aa0003100cd004000ca000000cb000000cb00a8 -:100ab0000010cb003100cd001180cc004400f900c3 -:100ac000000006008b20a9008be0a90067016000f0 -:100ad0004411dd0003068000f1f82f0081806100e1 -:100ae0008280700001068800000178000207b200d1 -:100af0004811dd0013068000f1ff280081806100ad -:100b00008280700011068800680160004311de00d9 -:100b1000610161004911dd00d10480000190a10054 -:100b200082807000d10488000008b2004700de0017 -:100b3000610060004f00dd00d104800001f0a100e1 -:100b400080807000d104880000000600200e88001c -:100b5000310e8800430e8800540e8800020e880073 -:100b60000000060061016100530e80000300a10037 -:100b700082817100530e88000000e90000004000ef -:100b8000621d20000131780000000600600e880020 -:100b90000000060003f0a200889fbe008a9fbe00ee -:100ba0008c1f7800fe000700050133006450e1004f -:100bb0004f0032006420e1005200320003826c00da -:100bc00007003b000905d0000306d000820f540047 -:100bd0000c065d0002003900020032008901780035 -:100be000030678008582550004003d000003fd00e7 -:100bf0008103fd008502ea008b854200840f7200ac -:100c000002003b0060001000e08018006011b80096 -:100c10000005eb007a28e1000a00390006007800a0 -:100c2000c75ddd00f707b200878075002d00370033 -:100c3000828171000a017800610560008180d10025 -:100c40000080d3008502e900f9ff3b000604400064 -:100c50008784480002003b0060041400e0841c000c -:100c60000988a300070032008a8171008281710027 -:100c7000610164008904d1000884d3008b05e80079 -:100c8000170037000978a30013003a000b00e000ba -:100c9000130034008b05e9000804440089844c00eb -:100ca0000a4474000978a3000d003a000b00e0002c -:100cb000070034008b05e9000804440089844c00d7 -:100cc00001003a000b0020000978a300f7ff320072 -:100cd0000001eb0002003700828171000a017800f8 -:100ce000740007000cf0a70001f0a000bd00370061 -:100cf0006420e10002003a00838f6c00bd003300e5 -:100d00000801be000200be00b6003700889fbe008a -:100d10008a9fbe008c1f7800a1000700a800330046 -:100d200003866c006450e1002e0032006420e10074 -:100d3000330032006150e1002f0032006120e100f9 -:100d40003100320085855500eb07b0000900200016 -:100d500008042000050037000804440089844c0082 -:100d60000a0031000603430087834b000001530053 -:100d700081815b00f8ff33000203be000800a00081 -:100d80000804440089844c00f6ff3900c639dd00b0 -:100d90008301730001003200130020008904d10098 -:100da0000884d3000998a300050032000800a700ba -:100db0000300a0008904d1000884d3008b05e8005b -:100dc0008904d1000884d3000001eb000281d20025 -:100dd0003800070001f0a1000cf0a70001f0a0000e -:100de000800037006420e100820032000801be006c -:100df0000200be00f7ff37006120e1007d003200f5 -:100e00006000b800f3ff37000000200001f8270061 -:100e1000f0ff370014002000ad0037000001be00d5 -:100e20004a0007000470a70003f0a1006509b100a3 -:100e3000160032000d0035006828e100060035007c -:100e4000f0ff2f00f1ff27000300e00013003b003c -:100e500001002800000005000000400081804800db -:100e60008502e900fcff3a0008003700f88f4200d5 -:100e700002003c008000eb00000005008100d10072 -:100e80000080d3008502e800fcff3a000300e00088 -:100e900002003b0060001000e08018000000060027 -:100ea0004f89de0082017800a40037006011b8008d -:100eb000b200370081002000618055000b003d002a -:100ec0000b00200061fe2f000100e1001d00340036 -:100ed00082817100610164008904d1000884d3001b -:100ee0000000e800faff3a00710020006100640091 -:100ef0000300700002006000090032006104440039 -:100f0000e0844c000988a500050032008b05e8004c -:100f10006808e10002003a008904d1000884d30087 -:100f2000f20f20000258e10005003d00c75ddd0022 -:100f3000f907b200898075000800780000000600fb -:100f40000bf827008b00780000000500c70ade00c0 -:100f5000f107b200f50fb20008003200e1cf420005 -:100f6000020032000170a00024000500810f700013 -:100f7000010032000408050044000500810f7000e4 -:100f800002003a00140005008502e900000040005c -:100f900081c04800fcff3b000170a0002400050058 -:100fa0000004be00e9ff07000003be000405be0008 -:100fb0000200be00e5ff0700844f75000000060038 -:100fc0000200be006450e100050036006420e1002c -:100fd000020036000968a30001003a000800be00c4 -:100fe0000160a0004f0678004f05be004f04be0010 -:100ff00000000600f0ff2f00f1ff2700f9ff370087 -:10100000889fbe008a9fbe008c1f7800e4ff070007 -:10101000ebff330003866c006450e10024003200d3 -:101020006420e100270032006150e100220032001c -:101030006120e100210032008b854200eb07b10006 -:101040000134b800003ab8000804420089844a001c -:10105000013ab8000030b8008880400009014a0019 -:101060000400330000004000818048000201490074 -:101070008b05e900c909dd00830170000100320021 -:1010800013002000c814de004814dd004709de000c -:101090001200b200c808de000884700085ff070057 -:1010a00001f0a1000cf0a70001f0a000cdff370077 -:1010b0006120e100cfff32000801be000200be0047 -:1010c000f7ff37006150e100fcff3a00c9ff37002d -:1010d000889fbe008a9fbe00841f7800b0ff070073 -:1010e0004f00780011003300f0ff2f00838f6c0059 -:1010f00006003b00040565000a00a7000800370051 -:1011000009f0a6001000200008003700820f5400ec -:10111000838f5c00030039001000200001003e00b6 -:101120000000200009f0a7000000ea004f05be0003 -:101130004f04be000000e00000000600881f780099 -:10114000030478000300e00007003d006000100089 -:10115000e080180060011900e081190002003b00e6 -:1011600001f02d00030037000400070008f0a7007d -:1011700001f0a0004f04780000000600889fbe0028 -:101180008a9fbe0000827000040271000482710018 -:10119000260032000004be000200be006011b8004c -:1011a0006b092000950220000182cf000a0039005f -:1011b0000541b1000082cf00070039000541b100b0 -:1011c0000982cf00040039000541b1000882cf0038 -:1011d000010039000541b100054252001200320001 -:1011e0000a003b0082817100610164008100d1002e -:1011f0000080d3008984d3000884d3008b05e800e5 -:101200000442e800f7ff3a000700370008044400f2 -:1012100089844c0000004800818048008b05e9006b -:101220000442e900f9ff3a0022ff07004f05be0023 -:101230004f04be0000000600800178000200370065 -:10124000b1597800040178000202e900e00f510072 -:08125000fbff3a00000006005c -:020000040000fa -:0200000401f009 -:04000800ffff0000f6 -:020000040000fa -:0200000401f009 -:04000c00faff0000f7 -:020000040000fa -:0200000401f009 -:040010007dff000070 -:020000040000fa -:0200000401f009 -:040014007fff00006a -:020000040000fa -:0200000401f009 -:04001c00dfff000002 -:020000040000fa -:10000800ec040000b0040000b6040000bc040000ca -:10001800c2040000c8040000ec040000ec04000066 -:10002800ec0400009c020000ba030000300300004a -:1000380076040000e6020000e403000082030000ea -:10004800ec040000ec040000ec04000022040000b2 -:10005800ec040000ec0400009c040000ec04000028 -:10006800ec040000ec040000ec040000ec040000c8 -:10007800ec040000ec040000ec040000ec040000b8 -:10008800ec040000ec040000ec040000ec040000a8 -:10009800ec040000ec040000ec040000ec04000098 -:1000a800ec040000ec040000ec040000ec04000088 -:1000b800ec040000ec040000ec040000ec04000078 -:1000c800ec040000ec040000ec040000ec04000068 -:1000d800ec040000ec040000ec040000ec04000058 -:1000e800ec040000ec040000ec040000ec04000048 -:1000f800ec040000ec040000ec040000ec04000038 -:10010800ec040000ec040000ec040000ec04000027 -:10011800ec040000ec040000ec040000ec04000017 -:10012800ec040000ec040000ec040000ec04000007 -:10013800ec040000ec040000ec040000ec040000f7 -:10014800ec040000ec040000ec040000ec040000e7 -:10015800ec040000ec040000ec040000ec040000d7 -:10016800ec040000ec040000ec040000ec040000c7 -:10017800ec040000ec040000ec040000ec040000b7 -:10018800ec040000ec040000ec040000ec040000a7 -:10019800ec040000ec040000ec040000ec04000097 -:1001a800ec040000ec040000ec040000ec04000087 -:1001b800ec040000ec040000ec040000ec04000077 -:1001c800ec040000ec040000ec040000ec04000067 -:1001d800ec040000ec040000ec040000ec04000057 -:1001e800ec040000ec040000ec040000ec04000047 -:0801f800ec040000ec0400001f -:020000040000fa -:10020800ec040000ce040000d4040000da0400006e -:10021800e0040000e6040000ec040000ec04000028 -:10022800ec0400009c020000ba0300003003000048 -:1002380076040000e6020000e403000082030000e8 -:10024800ec040000ec040000ec04000022040000b0 -:10025800ec040000ec0400009c040000ec04000026 -:10026800ec040000ec040000ec040000ec040000c6 -:10027800ec040000ec040000ec040000ec040000b6 -:10028800ec040000ec040000ec040000ec040000a6 -:10029800ec040000ec040000ec040000ec04000096 -:1002a800ec040000ec040000ec040000ec04000086 -:1002b800ec040000ec040000ec040000ec04000076 -:1002c800ec040000ec040000ec040000ec04000066 -:1002d800ec040000ec040000ec040000ec04000056 -:1002e800ec040000ec040000ec040000ec04000046 -:1002f800ec040000ec040000ec040000ec04000036 -:10030800ec040000ec040000ec040000ec04000025 -:10031800ec040000ec040000ec040000ec04000015 -:10032800ec040000ec040000ec040000ec04000005 -:10033800ec040000ec040000ec040000ec040000f5 -:10034800ec040000ec040000ec040000ec040000e5 -:10035800ec040000ec040000ec040000ec040000d5 -:10036800ec040000ec040000ec040000ec040000c5 -:10037800ec040000ec040000ec040000ec040000b5 -:10038800ec040000ec040000ec040000ec040000a5 -:10039800ec040000ec040000ec040000ec04000095 -:1003a800ec040000ec040000ec040000ec04000085 -:1003b800ec040000ec040000ec040000ec04000075 -:1003c800ec040000ec040000ec040000ec04000065 -:1003d800ec040000ec040000ec040000ec04000055 -:1003e800ec040000ec040000ec040000ec04000045 -:0803f800ec040000ec0400001d -:020000040000fa -:101258000000fa00a0702d0031d22300603b8a0004 -:10126800713b8a00a0702d0031d22300a03b8a0078 -:10127800b13b8a00d0cc2c00c1e42300803b8a001b -:10128800913b8a00a0d8200051bd2400c03b8a00b1 -:10129800d13b8a00a0d8200051bd2400a03b8a0081 -:1012a800b13b8a00c27724006000b8000089be0004 -:1012b800c27724006000b80020019800310198002e -:1012c800427824006000b8000089be0042782400fb -:1012d8006000b8002001980031019800417a24008c -:1012e8000040eb00804878000080fa00000006000b -:1012f8000000fa00a099290091f12300603c8a00bf -:10130800713c8a003033230031f32300803c8a008b -:10131800913c8a00d0cc2c00c1dc2300a03c8a0080 -:10132800b13c8a00a099290091f12300c03c8a00b1 -:10133800d13c8a003033230031f32300e03c8a009b -:10134800f13c8a00d0cc2c00c1dc2300003d8a008f -:10135800113d8a000080fa00000006000000fa0033 -:10136800881f7800603c8200713c820018c0b3007e -:101378006011b800a5fe0700e00f5000010035001d -:101388000044eb00e04f54000b003200603c820048 -:10139800713c8200020020000370240016ff070041 -:1013a8000200200003f02300f8fd070099fe070063 -:1013b800000078000a003700603c8200713c82001f -:1013c80002e02f00f36f24000bff0700020020004b -:1013d80003f02300eefd07008efe070000007800f2 -:1013e800903a8a00803c8200913c820018c0b30089 -:1013f8006011b80085fe0700e00f500001003500bd -:101408000044eb00e04f54000b003200803c8200a7 -:10141800913c82000200200003702400f6fe0700c1 -:101428000200200003f02300d8fd070079fe070022 -:10143800000078000a003700803c8200913c82005e -:1014480002e02f00f36f2400ebfe070002002000eb -:1014580003f02300cefd07006efe070000007800b1 -:10146800a03a8a00603c8200713c820018c0b30038 -:101478006011b80065fe0700e00f5000010035005c -:101488000044eb00e04f54000b003200603c820047 -:10149800713c82000200200003702400d6fe070081 -:1014a8000200200003f02300b8fd070059fe0700e2 -:1014b800000078000a003700603c8200713c82001e -:1014c80002e02f00f36f2400cbfe0700020020008b -:1014d80003f02300aefd07004efe07000000780071 -:1014e800b03a8a00690007004f0478000080fa00cb -:1014f800000006000000fa00881f7800c03c820047 -:10150800d13c820018c0b3006011b8003ffe07004c -:10151800e00f5000010035000044eb00e04f54009c -:101528000b003200c03c8200d13c82000200200047 -:1015380003702400b0fe07000200200003f023001f -:1015480092fd070033fe0700000078000a0037000c -:10155800c03c8200d13c820002e02f00f36f2400df -:10156800a5fe07000200200003f0230088fd070005 -:1015780028fe070000007800103b8a00e03c82004b -:10158800f13c820018c0b3006011b8001ffe0700cc -:10159800e00f5000010035000044eb00e04f54001c -:1015a8000b003200e03c8200f13c82000200200087 -:1015b8000370240090fe07000200200003f02300bf -:1015c80072fd070013fe0700000078000a003700cc -:1015d800e03c8200f13c820002e02f00f36f24001f -:1015e80085fe07000200200003f0230068fd0700c5 -:1015f80008fe070000007800203b8a00003d8200ba -:10160800113d820018c0b3006011b800fffd07004b -:10161800e00f5000010035000044eb00e04f54009b -:101628000b003200003d8200113d820002002000c4 -:101638000370240070fe07000200200003f023005e -:1016480052fd0700f3fd0700000078000a0037008c -:10165800003d8200113d820002e02f00f36f24005c -:1016680065fe07000200200003f0230048fd070084 -:10167800e8fd070000007800303b8a000f000700f3 -:101688004f0478000080fa00000006000000fa000d -:1016980000802000403a8a00c0732400503a8a0033 -:1016a80080742400e8fc070081742400207524005d -:1016b800f0fc07000080fa00000006000000fa00b5 -:1016c80060802000c03a8a0020742400d03a8a0042 -:1016d80080752400dcfc0700817524002076240036 -:1016e800e4fc07000080fa00000006000000fa0091 -:1016f800889fbe008a9fbe00407a24001040780070 -:101708000080fb00610060004200dd00621680007e -:10171800b1ff2f0081006100008070006016880012 -:10172800407a2400104078000080fb0061006000cf -:101738004300dd006216800071ff2f008100610008 -:101748000080700060168800483b8200593b820088 -:10175800403f8200cf80de00cffd07000001be00c1 -:101768000800be0024fe07000004be006a3b820099 -:101778007b3b8200703f8200cf80de00c6fd070001 -:101788000001be000a00be001bfe07000001be00eb -:101798000800be00fefc0700020020000300240031 -:1017a80058fd0700427824000089be00483b8200ab -:1017b800593b8200403f8200cf80de00b6fd070023 -:1017c8000001be000800be000bfe07000004be00ba -:1017d8006a3b82007b3b8200703f8200cf80de0044 -:1017e800adfd07000001be000a00be0002fe0700b2 -:1017f8000001be000800be00e4fc07000002be00b5 -:10180800803b8200913b82000001be000400be00c4 -:101818003cfd07004278240020019800310198001f -:10182800403b8200513b82000001be0000002000c6 -:1018380001f8230033fd07000004be00c077240030 -:101848001005be00843b8200953b8200c0772400cf -:10185800b0009000200090000001be000400be000f -:10186800e5fd0700020020000300240025fd070015 -:101878000001be000a00be00c5fc07000001be0052 -:101888000800be00dcfd070062fd070000007800cc -:10189800a03f8a00603b8200713b82000001be00cd -:1018a8000000200001f8230016fd07000004be0018 -:1018b800c07724001005be00843b8200953b82005f -:1018c800c0772400b0009000200090000001be0006 -:1018d8000400be00c8fd0700020020000300240029 -:1018e80008fd07000001be000a00be00a8fc0700b2 -:1018f8000001be000800be00bffd070045fd07004f -:1019080000007800903f8a000000eb004f05be0001 -:101918004f04be000080fa00000006000800fa002c -:10192800889fbe008a9fbe0000088000000f7800d4 -:1019380090408000a140800010079800210798007f -:101948006000b80090408800a1408800d040800026 -:10195800300798000000eb00d04088000000eb0042 -:10196800703f8a00313f8200200f800000804000d5 -:10197800303f8a000000eb00200f88003e009000f6 -:10198800e00f5000120032003e009000cf80de00d1 -:1019980041fd07000004be00ca3b8200db3b820019 -:1019a8001e009000ae0090003efd07000001be0042 -:1019b8000a00be00d3fc07000001be000800be00fc -:1019c8008dfd070013fd070000007800703f8a00b6 -:1019d800903f8200803a8a00703f8200703a8a0005 -:1019e80080742400fcfb0700603a8200c480de009b -:1019f8001080200000804000803f8a00803f8200e5 -:101a08000041eb00800078001000200053fc070024 -:101a1800000880001e0050004f05be004f04be00a5 -:101a28000080fa00000006000800fa00889fbe0047 -:101a38008a9fbe0000088000000f7800b040800038 -:101a4800c140800010079800210798006000b80086 -:101a5800b0408800c1408800e0408000300798000e -:101a68000000eb00e04088000000eb00403f8a00e7 -:101a7800613f8200a00f800000804000603f8a0024 -:101a88000000eb00a00f88003e009000e00f50001f -:101a9800120032003e009000cf80de00fefc0700fe -:101aa8000004be00aa3b8200bb3b82001e009000df -:101ab800ae009000fbfc07000001be000a00be005b -:101ac80090fc07000001be000800be004afd0700a8 -:101ad800d0fc070000007800403f8a00a03f820049 -:101ae8000000ea00003b8a00403f8200f03a8a008a -:101af80080752400b8fb0700e03a8200c480de004d -:101b08001080200000804000503f8a00503f820033 -:101b18000041eb0080007800200020000ffc070047 -:101b2800000880001e0050004f05be004f04be0094 -:101b38000080fa00000006000a00fa000000eb002e -:101b4800000f78006000b80010079800210798007f -:101b58006000b80030079800410798000000eb00cb -:101b6800000f78001a0037001e019000ae019000a7 -:101b78001e007800800040000060240000804000c3 -:101b880010007800cf80de0002004000838048000b -:101b980010079800210798003e019000ce019000a0 -:101ba800010420001e8040008000400000602400e6 -:101bb8000080400010007800cf80de000200400066 -:101bc8008380480030079800410798001e0fe800fe -:101bd800f00320009e007800808f5000e2ff340060 -:101be8001e009000ae0090004a09dd004600de00ad -:101bf80000007100c688de0000007800c03f8a003f -:101c08003e009000ce0090004a09dd004600de004c -:101c180000007100c688de0000007800b03f8a002e -:101c28000080fa0000000600c200fa000000eb0085 -:101c380020079800400420000e0040000204200005 -:101c4800617a24007afd07000000eb00000f78009d -:101c5800580037001e80e8000000470040c0900090 -:101c6800e14f50000300360030c4b300204798000d -:101c7800050037001e80e8000080e80000004700eb -:101c8800c0c09000214798002e4090000080fb00c3 -:101c98006101b900d0fb2f00f1ff2f0002004000c6 -:101ca80083804800f200200003002000820f5000cb -:101cb800838f580035003e00006001000f00370098 -:101cc8003400370033003700320037003100370066 -:101cd800300037002f0037002e003700190037007a -:101ce8002c0037002b00370016003700290037007a -:101cf8002800370027003700120037001e80e80050 -:101d0800800178001e00e8000080e800000047001d -:101d180040c09000450820008e8242004104200007 -:101d28008e8040000181e800e4004700030278004b -:101d38008201780000417800050078002d00070036 -:101d4800150037001e80e8000080e800000047000a -:101d5800c0c090001e00e8000080e80000004700b6 -:101d680040c09000450820008e824200640347006e -:101d78000002eb008141780000417800860078007d -:101d880005007800d40007000300370000000000b9 -:101d980001003700000000001e80e8000000470036 -:101da80040c090000080fb000000e8001e0f4000cb -:101db8001e0fe8009e0078002e209000808f5000b3 -:101dc800a4ff39000f04b00000fc2f000f004000f2 -:101dd8008e0078004100b0001f000900311878001b -:101de8000004b100f80307000f04b1000080fa00f6 -:101df800000006008600fa00881f780000047800ba -:101e08000127980022c798002327980034279800b4 -:101e18002ec090000000fb006101b900f0fb2f000c -:101e2800f1ff2f000200400083804800520120008b -:101e380003002000820f5000838f580074003e007a -:101e48000060010015003700250037003c0037000e -:101e58006f003700630037006d0037006c003700f3 -:101e68006b0037006a0037006900370068003700e8 -:101e780067003700500037006500370064003700fe -:101e88003700370062003700610037006000370014 -:101e98005f0037005e0037003c003700c078240040 -:101ea800000f78000e80e8001e037800c5002000af -:101eb8003e229000ae2190002ec190008e2090000e -:101ec8006000070025fd07000e0078002000b00024 -:101ed8001e000900301c7800e803b10055003700e7 -:101ee80080792400000f7800800420000e00400054 -:101ef8001e037800c50020003e229000ae2190000d -:101f08002ec190008e2090004e0007008e007800b1 -:101f18002100b0000e0078008004b0001e00090007 -:101f2800b01878000dfd07008e0078002100b00081 -:101f38001e000900311c7800e803b1003d0037009d -:101f48002ec090000002eb00e3c4b300004178000b -:101f58008e209000080078005f00070035003700e9 -:101f680080762400000f78001e03780045012000c9 -:101f78003e229000ae2190002ec190008e2090004d -:101f8800080078002f0007002a003700c0772400d7 -:101f9800000f78001e037800850020003e22900084 -:101fa800ae2190002ec190008e209000080078008d -:101fb800240007001f00370040782400000f780035 -:101fc8001e037800850020003e229000ae2190007c -:101fd8002ec190008e20900008007800190007009c -:101fe80014003700407a2400000f78001e037800a0 -:101ff800250020003e229000ae2190002ec19000c6 -:102008008e209000080078000e00070009003700b5 -:1020180060ff2f004b0307002ec090000002eb006a -:10202800e3c4b300004178008e20900008007800d7 -:1020380029000700080078004f0478000080fa00a3 -:10204800000006000c00fa00881f780000047800e1 -:10205800010f78002247980023079800340798005a -:1020680045079800560798005e009000e00f500062 -:102078000e003200ae0090003e00900080804000cc -:102088005e0090004e01900069fc07002e40900011 -:102098000002eb00b3c4b300004178009e00780052 -:1020a800080078000c000700070037002e40900059 -:1020b8000002eb00e3c4b300004178009e00780002 -:1020c8000800780004000700080078004f04780032 -:1020d8000080fa00000006000600fa00881f780059 -:1020e80000047800010f78002247980033479800d1 -:1020f800240798003e4090000080fb006101b90071 -:10210800d0fb2f00f1ff2f00020040008380480021 -:10211800f200200003002000820f5000838f580037 -:102128001d003e00006001000f0037001a00370054 -:10213800190037001800370017003700160037005d -:1021480015003700140037000d0037001200370063 -:10215800110037000a0037000f0037000e00370063 -:102168000d00370000003700ae0190002e419000ae -:102178009e00780008007800130007000e00370062 -:10218800be4190002e4190009e0078000800780023 -:10219800aa0007000800370070ff2f00e9020700b7 -:1021a8000002eb00e3c4b3002e4190009e007800cb -:1021b80008007800c8ff0700080078004f0478007e -:1021c8000080fa00000006004200fa00881f78002c -:1021d80000047800611f9800627f98000327980028 -:1021e8006e7890000080fb006101b900f0fb2f00c1 -:1021f800f1ff2f00020040008380480052012000b8 -:1022080003002000820f5000838f58007f003e009b -:102218000060010015003700290037003d00370035 -:102228007a003700650037007800370077003700fc -:1022380076003700750037007400370073003700e8 -:102248007200370051003700700037006f00370008 -:10225800370037006d0037006c0037006b0037001f -:102268006a003700690037003c003700c078240056 -:102278008e0078001001be008288be00e480400015 -:10228800640040001002be008488be00e480400064 -:10229800640040001003be008688be00e480400051 -:1022a800640040000e027800c30020006e799000a0 -:1022b800ee18900008007800870007005b003700e0 -:1022c800807924008e0078001001be008288be004c -:1022d800e4804000640040001002be008488be0014 -:1022e800e4804000640040001003be008688be0001 -:1022f800e4804000640040000e027800c300200023 -:102308006e799000ee1890000800780072000700bf -:10231800460037000002eb00e3c4b3006e7990007a -:10232800ee189000080078006bff07003f003700a8 -:102338008776240009000900371f78004e01b10094 -:102348000e027800430120006e799000ee1890008c -:10235800080078006000070034003700c0772400c8 -:102368003002be002003be00049fbe000697be00d8 -:102378000e027800830020006e799000ee1890001d -:10238800080078005400070028003700407824002f -:102398003002be002003be00049fbe000697be00a8 -:1023a8000e027800830020006e799000ee189000ed -:1023b80008007800480007001c00370060168000fd -:1023c80064006000e00f50000600320060168000d4 -:1023d80068006000e00f500002003200100020008a -:1023e800010037000000eb0000407800004f780043 -:1023f8000e027800230020006e799000ee189000fd -:1024080008007800340007000800370050ff2f004c -:102418004c0207000002eb00e3c4b3006e799000a1 -:10242800ee189000080078002bff070008007800dd -:102438004f0478000080fa00000006004200fa000d -:10244800711f980002c7980013c79800fe189000e3 -:10245800910078007e1990000101410011c0b3007d -:1024680021419800fe189000910078008100e80052 -:102478007e199000810041000ec19000a240980092 -:10248800fe189000910078008180e8007e19900085 -:10249800810041001ec19000a2409800fe189000e3 -:1024a8009100780063814000fe189000820878004f -:1024b8008ec09000014f78001ec19000124798000e -:1024c8001e0009003e187800e003b100ee03b100d9 -:1024d8000080fa00000006004600fa00881f780015 -:1024e80000047800711f980002c79800132798000d -:1024f800242798002e209000e00f50002b00320077 -:102508007e189000900078001e209000004078000f -:102518007e19900081004100a04098007e1890002c -:10252800100078000000e800fe18900000804000cd -:102538008ec0900021409800ae2090007e18900038 -:102548000081e8007e189000100078000080e80004 -:10255800000041001e21900035fb07007e18900006 -:10256800900078001e209000008040008080e800e5 -:102578007e189000010878000ec09000004f780087 -:1025880020c5b30010479800ae2090000e80e800e8 -:102598001e21900026fb07001e0009003e1c780043 -:1025a800e803b100ee03b1000500370023c5b3000e -:1025b8000ec19000fe189000080078009fff0700e9 -:1025c800080078004f0478000080fa000000060038 -:1025d8000000fa00e0012000303a8800213a80002b -:1025e800f0f32f0000806000203a8800213a800034 -:1025f80000fe2f0000806000203a880040a7a90054 -:102608003200200080072000a10920003374200038 -:1026180080497800814978008249780012002000ba -:102628006004200071052000237420008049780090 -:10263800814978008249780000000000113a800042 -:10264800000027008080600000002300808f500079 -:10265800faff3a0000000000113a80000002200052 -:1026680000806000e00f5000fbff32000080fa009d -:10267800000006000a00fa0000802000000f780021 -:102688000000eb00100798000000280020079800c1 -:10269800b0cb2000300798002000200040079800a9 -:1026a8004e029000be0190002e0190009e00900006 -:1026b8001e00780023f90700ce21a900ce01a90049 -:1026c800ce61a900ce41a90040f02f002df90700e6 -:1026d8000041eb0001802000100020001ff90700d6 -:1026e8000041eb0001802000200020001bf90700ba -:1026f80070ff2f00f1f807000080fa0000000600c4 -:102708000000fa00e1a1a800010f8000007020007d -:1027180000807000000f8800e0e1a800e0c1a90077 -:10272800e041a900e2e1a800110f8000f0f82f00b5 -:10273800808060000006200000807000100f880074 -:102748000080eb00300f88000000eb00200f8800ad -:102758000080fa00000006000000fa00f1a1a800bd -:10276800810f80000070200000807000800f8800ba -:10277800f0e1a800f0c1a900f041a900f2e1a80029 -:10278800910f8000f0f82f00808060000006200084 -:1027980000807000900f88000080eb00b00f880068 -:1027a8000000eb00a00f88000080fa00000006007f -:1027b8000000fa00110a800080ff2f0000806000ee -:1027c800100a880042e1a800110a8000f0f92f00e1 -:1027d800808060000002200000807000100a8800dd -:1027e800110a800080ff2f00008060000000a00018 -:1027f800100a880021058000000720000080700072 -:10280800200588008420a9009420a8000080fa00f0 -:10281800000006000000fa00310a800080ff2f0047 -:1028280000806000300a880046e1a800310a800074 -:10283800f0f92f0080806000000220000080700006 -:10284800300a8800310a800080ff2f000080600075 -:102858000000a000300a8800310580000007200031 -:10286800008070003005880084a0a90094a0a8000a -:102878000080fa00000006000000fa0005e1a90047 -:1028880005a1a80004c1a90021088000f0fc2f00c0 -:1028980000806000200888000441a9000421a900e4 -:1028a8000000eb000008880000c429001008880018 -:1028b80021058000f0ff28008080600000002500ce -:1028c80000807000200588008460a9009460a8003a -:1028d80005e1a8000080fa00000006000000fa00e8 -:1028e80011e1a90011a1a80010c1a9008108800068 -:1028f800f0fc2f0000806000800888001021a900eb -:102908000000eb00300888000080eb0060088800b9 -:102918003105800000002700008070003005880025 -:1029280084e0a90094e0a80011e1a8000080fa0062 -:10293800000006000000fa0021058000f08f2f003b -:102948008080600000302000008070002005880032 -:102958008440a9009440a80031058000f08f2f0022 -:102968008080600000102000008070003005880022 -:1029780084c0a90094c0a8000080fa0000000600e6 -:102988000000fa002002a9000111800090ff2f002a -:10299800008060000011880020a2a9002062a90020 -:1029a800400120004011880023a2a90023e2a900c9 -:1029b8009580a90011118000f0f32f0000806000bd -:1029c8001011880021e2a8002342a8009c20a90039 -:1029d80041058000f0ff2800808060000000220090 -:1029e80000807000400588008560a9009560a800f7 -:1029f8000080fa00000006000000fa00f00720003e -:102a0800501c8800d0002000101c8800011c800089 -:102a1800f0fc2f0080806000000220000080700021 -:102a2800001c8800011c8000c0ff2f00008060008f -:102a3800001c880000602000201c88000030200056 -:102a4800401c88008480a9003105800080ff2f0089 -:102a5800008060006000b300300588009480a80002 -:102a68008de3a8000080fa00000006000000fa00cc -:102a78008de3a9008dc3a8008da3a8008d83a900ac -:102a88008d63a900611c8000f0fc2f0000806000ad -:102a9800601c8800611c8000c0ff2f00008060005f -:102aa8000000a000601c8800b0032000b01c880053 -:102ab800c0002000701c880000702000801c880066 -:102ac80040222000a01c88005105800000702000d2 -:102ad800008070005005880085c0a90095c0a80036 -:102ae8000080fa00000006000000fa0001198000ca -:102af800f0cf2f00008060000019880001198000c5 -:102b0800f0f12f0080806000000620000080700037 -:102b1800001988002043a8002143a90021a3a80088 -:102b28002063a8002343a90011198000f0cf2f00cb -:102b3800808060000010200000807000101988005c -:102b48002223a9002203a90025e3a9002119800056 -:102b580000f021000080700020198800f0c3b30045 -:102b680024e3b7002183a9001119800030fc2f004d -:102b7800008060000020a0001019880091198000d2 -:102b880080ff2f00008060006000b300901988006b -:102b980031198000f09f2f000080600030198800f4 -:102ba8002703a9003119800090ff2f0000806000e2 -:102bb800301988002603a90029e3a90041198000db -:102bc800f00f2e00008060004019880028e3a9005b -:102bd8004119800000fe2f00008060000000a00066 -:102be800401988000080eb00601988002c03a900b8 -:102bf8002c23a90085a0a90095a0a90021e3a8007d -:102c08000080fa00000006000200fa00004f780079 -:102c1800d13f82001e407800010001000080fa00c8 -:102c2800000006000200fa00004f780030c2b3002e -:102c38009e40780080cf500004003a0020632100b5 -:102c4800d03f8a000000eb0002003700d0ff2f00c1 -:102c58003c0007000080fa00000006000200fa00ad -:102c6800004f7800c0c3b3009e40780080cf50006a -:102c780003003600c0ff2f003200070006003700af -:102c880040652100d03f8a009e4078000180fb000b -:102c9800303d8a000000eb000080fa0000000600ca -:102ca8000400fa0020479800e03f82008000e80016 -:102cb800303d82000000e800808f500016003a0086 -:102cc80060612100d03f8a00e03f820080007800e8 -:102cd800807a2400010178008000eb0022000700c0 -:102ce8000080fb00000f78002e4090000080fb0061 -:102cf8009e007800808f500004003a000000eb002e -:102d0800e03f8a00100020000c003700a0ff2f00d1 -:102d18000c00070009003700e13f8200807a240098 -:102d280000804000ae40900001487800e03f8200fb -:102d38000000e800e03f8a000000eb000080fa0095 -:102d4800000006000200fa00000f78000000eb0007 -:102d5800e03f8a0060612100d03f8a001e007800b1 -:102d68000080fa00000006000a00fa002007980018 -:102d780031079800420798000040eb00004f7800a8 -:102d88003e00900010079800080037001e009000d1 -:102d9800ae00900000804000104078001e4f4000b8 -:102da8001e0090000000e800100798009e009000a8 -:102db8004e009000808f5000f4ff35001e407800d0 -:102dc8000080fa00000006000200fa00881f780060 -:102dd8000170240030c2b300804878005e989700e4 -:102de8000040780011702400804878000000eb0053 -:102df800000f7800080037009e80e8001e80e80079 -:102e0800660157000000410000c0970002702400ce -:102e180000f178001e0fe8009e0078005e98970089 -:102e2800808f5000f4ff39005e9897000084e80016 -:102e38005e9897000080e800800078000070240009 -:102e48000101780021002000c7ff0700017024005d -:102e580080707c005e9897000080e800b01c8800b5 -:102e68008de3a8008fe3a8004f0478000080fa00e3 -:102e7800000006000000fa0021742000520420001f -:102e880073052000824878008348780042c7a9006b -:102e98007134800000fe2f00008060005000b300f5 -:102ea8007034880071348000f00f2e00808060003c -:102eb80000a020000080700070348800e134800099 -:102ec80000fe2f00008060005000b300e03488004e -:102ed800e1348000f00f2e00808060000060200048 -:102ee80000807000e03488000135800000fe2f006b -:102ef80000806000b000b300003588000135800014 -:102f0800f00f2e008080600000a02000008070007c -:102f1800003588002135800000fe2f000080600009 -:102f28000030a0002035880041368000f00f2e00c8 -:102f380080806000003020000080700040368800eb -:102f48002174200052042000730520008248780074 -:102f58008348780042c7a800c082a900c842a900d7 -:102f6800c862a900c482a900c2fd0700e4fd0700e9 -:102f7800f9fd07000efe070026fe070057fe0700b2 -:102f8800d9fe07009cfe07007dfe0700b7fe07007c -:102f980039fe070067fe07000080fa0000000600ff -:020000040000fa -:102fa8000c080000120000000200000000000000f1 -:102fb8000000000000000000000000000000000009 -:102fc80000000000e64700001400000002000000b6 -:102fd80000000000000000000000000000000000e9 -:102fe800000000000000000000000000484700004a -:102ff8005e00000000000000000800000c00000057 -:10300800000000003c4700000c0000000000000029 -:10301800004600000001000000000000fa47000020 -:103028000400000002000000161600000000000066 -:10303800a647000040000000000000000047000014 -:0c3048003c000000000000000000000040 -:020000040000fa -:103054000000fa005ffd070087ff07007df8070006 -:10306400a4f80700bef8070023f90700ffff3700a4 -:00000001FF diff --git a/uNAV.zip b/uNAV.zip new file mode 100644 index 0000000000000000000000000000000000000000..03a1efdd8485f8c2ff4232bd09084d0d3efaf59f GIT binary patch literal 83035 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 literal 0 HcmV?d00001