diff --git a/AVR Code/.vs/USB_BULK_TEST/v14/.atsuo b/AVR Code/.vs/USB_BULK_TEST/v14/.atsuo index cebaf658..f495cb53 100644 Binary files a/AVR Code/.vs/USB_BULK_TEST/v14/.atsuo and b/AVR Code/.vs/USB_BULK_TEST/v14/.atsuo differ diff --git a/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.elf b/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.elf index 20c775bf..2df79215 100644 Binary files a/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.elf and b/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.elf differ diff --git a/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.hex b/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.hex index 9f904f05..4c7ebf60 100644 --- a/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.hex +++ b/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.hex @@ -1,766 +1,772 @@ -:100000001DC1000037C1000035C1000033C1000030 -:1000100031C100002FC100000C9421090C944B0940 -:1000200029C1000027C1000025C1000023C1000034 -:1000300021C100001FC100001DC100001BC1000044 -:1000400019C1000017C1000015C1000013C1000054 -:1000500011C100000FC100000DC100000BC1000064 -:100060000C94590A0C94640A05C1000003C10000F5 -:1000700001C10000FFC00000FDC00000FBC0000087 -:10008000F9C00000F7C00000F5C00000F3C0000098 -:10009000F1C00000EFC00000EDC00000EBC00000A8 -:1000A000E9C00000E7C00000E5C00000E3C00000B8 -:1000B000E1C00000DFC00000DDC00000DBC00000C8 -:1000C000D9C00000D7C00000D5C00000D3C00000D8 -:1000D000D1C00000CFC00000CDC00000CBC00000E8 -:1000E000C9C00000C7C00000C5C00000C3C00000F8 -:1000F000C1C00000BFC00000BDC00000BBC0000008 -:10010000B9C00000B7C00000B5C00000B3C0000017 -:10011000B1C00000AFC00000ADC00000B0C400001E -:10012000A9C00000A7C00000A5C00000A3C0000037 -:10013000A1C000009FC000009DC000009BC0000047 -:1001400099C0000097C0000095C000000C94B7094A -:1001500091C000008FC000008DC000008BC0000067 -:1001600089C0000087C0000085C0000083C0000077 -:1001700081C000007FC000007DC000007BC0000087 -:1001800079C0000077C0000075C0000073C0000097 -:1001900071C000006FC000006DC000006BC00000A7 -:1001A00069C0000067C0000065C0000063C00000B7 -:1001B00061C000005FC000005DC000005BC00000C7 -:1001C00059C0000057C0000055C0000053C00000D7 -:1001D00051C000004FC000004DC000004BC00000E7 -:1001E00049C0000047C0000045C0000043C00000F7 -:1001F00041C000000C94CB150C947D1630043204E1 -:100200003404360438043A043C043E04620C870C7F -:10021000AA0CCD0CD60CDB0C310D360D550DE70CB0 -:10022000F10CFB0C090D0C0D0F0D1A0D250D2711EE -:100230002A112D11301133113611391111241FBE1D -:10024000CFEFCDBFDFE2DEBF10E2A0E0B0E2EEE331 -:10025000FFE202C005900D92AC38B107D9F72BE24E -:10026000ACE8B0E201C01D92A03DB207E1F7ACD20C -:100270000C949D17C5CECF93DF93C0E5D0E084E00A -:100280008E838CE1B6D3E0E6F0E083838BEB86834C -:1002900080E8858381E0808388ED84BF10924100EF -:1002A00083E08883E0E5F0E081818330E9F7E0E5F1 -:1002B000F0E080818160808388E18583818180FF97 -:1002C000FDCFE0E5F0E0808180618083818184FF63 -:1002D000FDCF88ED84BF84E080934000DF91CF9113 -:1002E0000895E0E7F0E085818E7F8583E0E0FAE025 -:1002F0008FEB9DE586A397A380EE9EE280A391A35A -:1003000082E0808308958091200A9091210A813EA5 -:100310002EE2920720F02091722120936A00803E05 -:100320002EE2920720F420916F2120936A00209101 -:100330000520222331F080910520815080930520F3 -:1003400035C0885F9A42813D974080F110928C20A1 -:1003500080918D2090918E20A0918F20B09190203F -:100360000196A11DB11D80938D2090938E20A093A6 -:100370008F20B093902080918D2090918E20A0911D -:100380008F20B0919020892F9A2FAB2FBB27EEE7BB -:10039000F1E2848B80918D2090918E20A0918F200E -:1003A000B0919020838B86E0809305208091072078 -:1003B000909108200196B1F4809109208F3F91F02F -:1003C00080910620811106C0809106208150809383 -:1003D00006200895809114019091150180930720C3 -:1003E000909308200895009709F466C00CF09C01D2 -:1003F000992334F422273327281B390B51E001C0FD -:1004000050E0E8E6F0E0838190E0809370219093E3 -:10041000712180917021909171219695982F882754 -:100420009795879580937021909371214281809157 -:10043000702190917121840F911D80937021909370 -:100440007121000080917021909171218217930792 -:1004500028F41092702110927121089580917021DA -:1004600090917121820F931F8115904238F08FEF88 -:100470009FE180937021909371210895552359F045 -:100480008091702190917121821B930B8093702138 -:10049000909371210AC08091702190917121280F51 -:1004A000391F209370213093712180917021909198 -:1004B00071218F7780936A000895CF93DF93C09165 -:1004C000200AD091210A80910320909104209E015E -:1004D000281B390B209373213093742180918C2039 -:1004E00081114DC080917321909174218E3C9F4F5A -:1004F000E4F480917321909174218B369F4FACF07E -:1005000080910220882331F08091022081508093D5 -:10051000022035C080916A008093722181E080932F -:100520008C208CE0809302202AC08CE080930220F3 -:1005300080917321909174218A369F4F1CF08FEF28 -:100540009FEF02C081E090E080936D2190936E2137 -:10055000809173219091742120916D2130916E21B1 -:1005600060E370E00E947B17261B370B20936D2100 -:1005700030936E2180916D2190916E2134DF8091B6 -:100580008C20813029F58091732190917421C3973B -:1005900094F080910220882331F0809102208150D4 -:1005A0008093022015C080916A0080936F2183E0C0 -:1005B00080938C200DC08091732190917421873994 -:1005C00091051CF481E090E002C08FEF9FEF0BDFFC -:1005D000C0930320D0930420DF91CF910895861714 -:1005E000970779F06817790728F49C01261B370BC9 -:1005F000B90109C08617970718F4681B790B03C067 -:10060000089560E070E0862F972F08950F931F9351 -:10061000CF93DF938091002090910120892B51F09E -:100620008091002090910120019780930020909369 -:1006300001204DC080E490E0809300209093012041 -:100640008091072090910820019609F440C0809184 -:1006500014019091150120910920263018F467E7C4 -:1006600071E002C06EEE72E00E946717082F192F2A -:10067000C82FD12F80910720909108208C179D07BB -:1006800080F46091072070910820802F912FA7DFC0 -:10069000029738F080EC9DE58093360A9093370AF4 -:1006A00016C08091072090910820C817D90778F4C8 -:1006B0006091072070910820802F912F90DF029782 -:1006C00030F08FEB9DE58093360A9093370ADF91E7 -:1006D000CF911F910F910895AC01460F571F861BB4 -:1006E000970BE0E0FAE020A131A124173507D8F7F5 -:1006F00020A131A182179307B0F70895E0E8F6E052 -:100700008FE0808385E0848308951F93CF93DF93E8 -:10071000C0E4D0E0198180E4898340E250E068EAD7 -:100720007BE280E290E00E94C90F1983DF91CF91B4 -:100730001F9108951F93CF93DF93C0E4D0E01981F8 -:1007400080E489838BEA95E20E94F30F81E00E94A6 -:1007500012101983DF91CF911F91089508950F937F -:100760001F9380910920811114C02091962087E762 -:1007700091E0289FA001299F500D112444535A4D08 -:100780000FEA13E02EEE32E060E081E80E947F1471 -:1007900013C0209196208EEE92E0289FA001299F01 -:1007A000500D112444535A4D0FEA13E02EEE32E05F -:1007B00060E081E80E947F141F910F9108951CBE94 -:1007C000EEEFF0E409950895A0DF8091A82B88232F -:1007D00069F080E2E8EAFBE2ABEAB5E201900D9253 -:1007E0008A95E1F71092AB25A5DFE9DF87E08093DA -:1007F000A200789440DDB2DFE3D754D177D160E036 -:1008000080E000D1ECD08CE0E0D06FD52AD643D682 -:1008100075DF89E0E0E8F0E2AEE7B1E201900D9229 -:100820008A95E1F7000000000000000000000000D1 -:1008300000000000000000000000000000000000B8 -:1008400080919120882371F3E091AA238E2F90E06C -:1008500088309105A0F4FC01E250FF4F0C948E17F4 -:1008600071D10DC0E1D10BC068D209C0ECD207C074 -:1008700078D305C0FED303C0FDD301C06ED410925F -:100880009120D0CF08950895CF93DF93A0E0B1E0F9 -:1008900054968C915497EEE7F1E2818755968C91AE -:1008A0005597828794968C919497838795968C918F -:1008B00095978487C0E0DAE088A1858B89A1868B33 -:1008C00054968D919C9155978634914080F08091FB -:1008D000140190911501893A914048F480911401D6 -:1008E000909115018093C82B9093C92B00008091A3 -:1008F0009420882339F0F5DC1092942081E08093D5 -:10090000932035C080919320882341F080918C20E2 -:10091000833019F4F8DC7ADE01C0CFDD80919220BB -:10092000882351F080911401909115018093C82B78 -:100930009093C92B1092922080910920853060F409 -:10094000209114013091150181E02737314008F0E2 -:1009500080E0809396200BC0209114013091150106 -:1009600081E02E3E324008F080E080939620DF91B7 -:10097000CF9108950F931F9381E0809399208093E6 -:1009800094200FEA13E02DE730E04CEC55E260E0F4 -:1009900081E80E947F1481E01F910F9108951092C9 -:1009A0009920089581E0089581E00895E0E0F2E063 -:1009B00010A2982F9C71936890A3881F8827881F86 -:1009C000880F81A312A216A20895E0E0F2E010AA17 -:1009D000836880AB80E181AB12AA16AA0895E0E09B -:1009E000F2E010A683E880A78FE281A712A616A6E0 -:1009F0000895AAECB1E092E09C93E82FF0E0849196 -:100A00001C920895CF93DF93E0E7F0E091819D7F02 -:100A1000918310920002623031F1E0E0F2E09CE15B -:100A2000918390E49283811102C080E401C080EC44 -:100A300080930302613011F084E001C083E0C0E0E4 -:100A4000D2E08C8380E2D5DF8C8781E2D2DF8D8794 -:100A5000188E198E81E08883C2DF0EC080EC8093EF -:100A6000030284E0ECCFE0E0F2E09EE1918390E4C9 -:100A700092838111F3CFD9CFDF91CF9108951F9247 -:100A80000F920FB60F9211248F9300000000000008 -:100A9000000081E0809323028F910F900FBE0F9092 -:100AA0001F901895CF93DF93E0E7F0E082818B7F72 -:100AB0008283C0E2D3E08DE0888380E4898389E08B -:100AC0008A8383E396DF888782E393DF898787E3DE -:100AD00090DF8A8786E38DDF8B87E0E2F6E0808116 -:100AE000836080831482DF91CF910895E0E7F0E086 -:100AF00080818E7F808383E8809300010895E0E009 -:100B0000F1E0108A80E4808B10A280A310AA80AB51 -:100B1000E0E4F1E0108280831092982010929720F8 -:100B200081E08093962010927C2110927D2110927A -:100B30007A2110927B2108958093AA2381E08093EB -:100B400091200895CF93DF9310920920D8DFC0E061 -:100B5000D1E01EAA84E288AB19AA49E54AAB32E08B -:100B60003BAB60910B2070910C206CAB7DAB6BEAC2 -:100B700073E268AF79AF1AAE9BE39CAF93E09093BA -:100B80003D0110923E0128A9206828AB1092460131 -:100B9000E0E4F1E0808310924101409342019093A0 -:100BA000430140910D2050910E20409344015093F9 -:100BB00045014AE951E2409348015093490110929E -:100BC0004A0129E320934C0190934D0110924E016C -:100BD000908190689083188A90E4988B888B198A0A -:100BE00095E99A8B90E19B8B4EEE52E04C8B5D8B9E -:100BF000888F398F1A8E8CEC95E28C8F9D8F1E8E8C -:100C000068EC70E084EF91E067DD88EC90E0809321 -:100C100007209093082081E08093062088898068CF -:100C2000888BDF91CF9108951F93CF93DF9311E0CD -:100C30001093092064DFC0E0D1E018AA80E488ABFB -:100C400084E088AB19AA1AAA4BE44BAB1CAA1DAAD4 -:100C50001EAA8AE090E288AF99AF1AAE70EA7CAF24 -:100C600068E060933D0110923E0188A9806A88ABDC -:100C7000E0EAF8E085E58083808310924601E0E4B5 -:100C8000F1E084E280831092410199E59093420162 -:100C900032E030934301A0910B20B0910C20A0933F -:100CA0004401B0934501ABEAB3E2A0934801B0938D -:100CB000490110924A019BE390934C0193E0909379 -:100CC0004D0110924E0120812068208388A399A3B2 -:100CD00025E92AA34BA34EEE52E04CA35DA378A7CF -:100CE00069A71AA66AEB78E26CA77DA71EA6888B77 -:100CF000998B2A8B90E19B8B4C8B5D8B888F398FE6 -:100D00001A8E8CEC95E28C8F9D8F1E8E68EC70E0B5 -:100D100084EF91E0E1DC88EC90E0809307209093F1 -:100D200008201093062088A1806888A3888980689D -:100D3000888BDF91CF911F9108951F93CF93DF93FD -:100D400012E010930920DBDEC0E0D1E01EAA84E2AD -:100D500088AB19AA39E53AAB1BAB40910B205091F7 -:100D60000C204CAB5DAB4BEA53E248AF59AF1AAE27 -:100D70009BE39CAF93E090933D0110923E0128A924 -:100D8000206828AB10924601E0E4F1E080831092E5 -:100D90004101309342019093430120910D20309105 -:100DA0000E2020934401309345012AE931E220933B -:100DB00048013093490110924A0129E320934C01E4 -:100DC00090934D0110924E01908190689083188A03 -:100DD00090E4988B888B198A45E94A8B90E19B8B2C -:100DE0002EEE32E02C8B3D8B888F198F1A8E6CEC97 -:100DF00075E26C8F7D8F1E8E88A319A24AA39BA3D8 -:100E00002CA33DA384E388A719A71AA68AEB98E22E -:100E10008CA79DA71EA668EC70E084EF91E05CDCD7 -:100E200088EC90E0809307209093082081E08093E5 -:100E3000062088898068888B88A1806888A3DF91D4 -:100E4000CF911F9108951F93CF93DF9313E01093D9 -:100E5000092055DEC0E0D1E018A250E458A384E098 -:100E600088A319A21AA24BE44BA31CA21DA21EA286 -:100E70008AE090E288A799A71AA630EA3CA728E062 -:100E80002DA71EA688A1806A88A385E58093A00867 -:100E90001EAA84E288AB19AA69E56AAB1BABE09194 -:100EA0000D20F0910E20ECABFDABEAE9F1E2E8AFEA -:100EB000F9AF1AAE99E39CAF10933D0110923E0139 -:100EC00098A9906898AB10924601E0E4F1E0808325 -:100ED000109241016093420192E09093430160912E -:100EE0000B2070910C2060934401709345016BEAD4 -:100EF00073E2609348017093490110924A019BE3A9 -:100F000090934C0110934D0110924E019081906886 -:100F10009083188A588B888B198A85E98A8B4B8B2A -:100F20008EEE92E08C8B9D8B388F298F1A8E8CECF5 -:100F300095E28C8F9D8F1E8E68EC70E084EF91E0BF -:100F4000CBDB88EC90E0809307209093082081E031 -:100F50008093062088898068888BDF91CF911F91CC -:100F600008951F93CF93DF9314E010930920C7DDFA -:100F7000C0E0D1E018AA80E488AB18AB19AA1AAA7D -:100F80003BE43BAB1CAA1DAA1EAA8AE090E288AFF4 -:100F900099AF1AAE50EA5CAF88E080933D011092A1 -:100FA0003E0198A9906A98AB95E59093A00810929D -:100FB0004601E0E4F1E094E290831092410129E5DA -:100FC0002093420122E02093430160910B20709115 -:100FD0000C2060934401709345016BEA73E26093C7 -:100FE00048017093490110924A012BE320934C0170 -:100FF00023E020934D0110924E0120812068208330 -:10100000988B198A45E94A8B3B8B2EEE32E02C8B6C -:101010003D8B588F898F1A8E6CEC75E26C8F7D8FAB -:101020001E8E98A319A24AA39AE49BA32CA33DA3C6 -:1010300093EC98A789A71AA68AEB98E28CA79DA79C -:101040001EA668EC70E084EF91E046DB88EC90E04F -:10105000809307209093082081E080930620888960 -:101060008068888B88A1806888A3DF91CF911F91C9 -:101070000895FFCFCF93DF9386E0809309203FDD73 -:10108000C0E0D1E01EAA84E288AB19AA39E53AABE8 -:1010900093E09BAB40910D2050910E204CAB5DAB8B -:1010A0004AE951E248AF59AF1AAE29E32CAF909309 -:1010B0003D0110923E0128A9206828AB10924601FC -:1010C000E0E4F1E08083109241013093420132E08C -:1010D0003093430140910B2050910C2040934401E8 -:1010E000509345014BEA53E2409348015093490124 -:1010F00010924A012BE320934C0190934D011092E2 -:101100004E01208120682083188A20E4288B888B58 -:10111000998B95E99A8B90E19B8B4CED55E04C8B2C -:101120005D8B888F398F1A8E8CEC95E28C8F9D8F1A -:101130001E8E68EC70E084EF91E0CEDA80E991E0F9 -:10114000809307209093082081E08093062088896F -:101150008068888BDF91CF910895CF93DF9387E0EC -:1011600080930920CCDCC0E0D1E01EAA94E298ABC9 -:1011700019AA39E53AAB83E08BAB40910D20509131 -:101180000E204CAB5DAB4AE951E248AF59AF1AAE05 -:1011900029E32CAF80933D0110923E0128A92068DD -:1011A00028AB10924601E0E4F1E0908310924101F7 -:1011B0003093420132E03093430140910B20509133 -:1011C0000C2040934401509345014BEA53E2409375 -:1011D00048015093490110924A012BE320934C019E -:1011E00080934D0110924E01208120682083188A3F -:1011F00020E4288B25E2288B898B85E98A8B80E186 -:101200008B8B4CED55E04C8B5D8B988F398F1A8E04 -:101210008CEC95E28C8F9D8F1E8E68EC70E084EFD5 -:1012200091E05ADA80E991E08093072090930820BA -:1012300081E08093062088898068888BDF91CF9138 -:1012400008951F920F920FB60F9211248F939F93C0 -:10125000EF93FF9381E08093030180917C21909133 -:101260007D21019680937C2190937D2180917C212A -:1012700090917D21EEE7F1E2878B80917C21909126 -:101280007D21908FFF91EF919F918F910F900FBED5 -:101290000F901F9018951F920F920FB60F92112466 -:1012A0008F939F93EF93FF9382E08093030180914C -:1012B0007A2190917B21019680937A2190937B21D2 -:1012C00080917A2190917B21EEE7F1E2818F8091EC -:1012D0007A2190917B21928FFF91EF919F918F9135 -:1012E0000F900FBE0F901F901895E0E7F0E08381FC -:1012F0008C7F838384818C7F848380818D7F8083B6 -:10130000E0E8F1E080EC8283128688EC818311862C -:10131000A0E0B8E034E03C9323E011962C931197C1 -:1013200014961C92149785ED91E096968D939C935C -:10133000979716961C921697E0E4F8E03083218385 -:10134000148286A397A31682E0E6F6E0808180618E -:101350008083E0E4F9E083E18183148282E0868384 -:10136000A6A3B7A310A611A681E0808308951F92BB -:101370000F920FB60F9211242F933F934F935F93C9 -:101380008F939F93EF93FF93CF93DF931F92CDB7EC -:10139000DEB78FEF80934C0980910920873031F4BC -:1013A000E0E0F2E084A5898395A502C090912C022B -:1013B00080919520891B209168093091690991E0FD -:1013C00082300CF490E09923C9F091E02A3F374035 -:1013D00008F090E0992391F0209168093091690913 -:1013E00089301CF481E090E002C086E090E0820F3A -:1013F000931F809378099093790923C020916809FD -:101400003091690991E08F3F0CF090E09923C9F089 -:1014100091E02730310508F490E0992391F0209174 -:10142000680930916909883F1CF081E090E002C0B2 -:1014300086E090E0A901481B590B4093780950932E -:1014400079090F90DF91CF91FF91EF919F918F914B -:101450005F914F913F912F910F900FBE0F901F9072 -:101460001895E0E7F0E083818F7E8383E0E4F6E087 -:1014700080818A6A80838FEF848388E5828BE0EAAB -:10148000F8E080E3838384EC858387E0868317829A -:1014900088E184830895E0E7F0E08381877F838398 -:1014A000E0ECF8E080E48083118288E580935506C3 -:1014B00008951F920F920FB60F92112400000F9003 -:1014C0000FBE0F901F9018951F920F920FB60F929C -:1014D00011248F93EF93FF93E0EAF8E080818083FB -:1014E000FF91EF918F910F900FBE0F901F90189565 -:1014F0009FB7F894E82FF0E0E059FF4F60958081A6 -:10150000682360839FBF0895863011F060E001C0BA -:1015100068E18091510081FD26C09FB7F894E0E515 -:10152000F0E08081826080839FBF818181FFFDCF59 -:101530009FB7F894A0E5B0E016968C911697897F36 -:1015400016968C931697E0E6F0E080E885838BEBA7 -:10155000868316968C911697846016968C9380815C -:10156000816080839FBF636084E490E00CD560E479 -:1015700080E0BECF089580919A2008951CD1FC018F -:10158000838180939A20811102C0F4C9089581E07B -:10159000089580919A20813009F401CA08958091BC -:1015A0009A2388234CF480768034A9F480919B237D -:1015B000811113C0F9C908958076803481F4809137 -:1015C0009B2381110EC08091A0239091A123892B90 -:1015D00051F0E8C9089580E0089580E0089580E022 -:1015E000089580E0089580E00895E0919F20F091B3 -:1015F000A0200190F081E02D228133812E0F3F1F2A -:10160000FC014081E40FF11DE217F307B8F481817A -:101610008430B9F0861309C005C081818430A1F0FF -:10162000861303C08E2F9F2F08958081E80FF11D30 -:10163000E217F30790F380E090E0089580E090E0F7 -:10164000089580E090E0089580E090E00895809112 -:101650009C238F770C94AD1308959091A220992329 -:1016600081F1E0919F20F091A0200190F081E02D88 -:101670009481891740F5E0939D20F0939E2022816C -:1016800033812E0F3F1FE217F307F8F49181943056 -:1016900061F49281981309C09381961306C0E09378 -:1016A0009D20F0939E2081E008959081E90FF11D27 -:1016B000E217F30758F3E0939D20F0939E2080E01B -:1016C000089580E0089580E0089580E00895EF9205 -:1016D000FF921F93CF93DF93C82F60E0BEDF182FD8 -:1016E000882381F1A0919F20B091A020EC2FF0E001 -:1016F000EE0FFF1F12968D919C911397E80FF91F23 -:10170000E080F180D7011696ED91FC91179709952D -:10171000682F8C2FA2DF182F8823A1F0C0919D2065 -:10172000D0919E2065E0CE0160DFEC01892B21F095 -:101730008A810E948215F6CFD7011296ED91FC9115 -:1017400013970995812FDF91CF911F91FF90EF9013 -:1017500008951F93CF93DF93182F7FDF882339F1EC -:10176000C0919D20D0919E2065E0CE013EDFEC012E -:10177000892B41F04C815D816B818A81FBD781117E -:10178000F3CF15C0A0919F20B091A020E12FF0E0F1 -:10179000EE0FFF1F12968D919C911397E80FF91F82 -:1017A0000190F081E02D0190F081E02D0995DF910D -:1017B000CF911F91089580919D2090919E20089532 -:1017C00065C70895CF938091A2208823C1F0E0914E -:1017D0009F20F091A0200190F081E02D848188234A -:1017E00071F0C0E08C2F73DFCF5FE0919F20F0910C -:1017F000A0200190F081E02D8481C81798F3109209 -:10180000A2201092A6201092A720CF910895CF93E6 -:101810008091A220882349F1A0919F20B091A0201F -:10182000ED91FC91119784818823F9F0C0E0EC2FB1 -:10183000F0E0EE0FFF1F12968D919C911397E80F29 -:10184000F91F0190F081E02D0084F185E02D3097A3 -:1018500009F00995CF5FA0919F20B091A020ED9154 -:10186000FC9111978481C81710F3CF9108950F93BD -:101870001F93CF93DF93EAE9F3E21286138614866F -:101880001586168617868081282F88233CF4409180 -:10189000A0235091A123452B09F469C3982F90767A -:1018A000903409F00AC1E0919B234E2F50E0FA01D9 -:1018B000E05AF109E930F10508F0FFC0EA5FFE4F98 -:1018C0000C948E1781E08093922080910720909154 -:1018D0000820EEE7F1E285878091072090910820AB -:1018E000968780917221878780916F21808BA8E6EF -:1018F000B0E012968C911297818B13968C91828B0B -:101900006091A0237091A123CF012DD734C3E0E0D3 -:10191000F8E01082CAE9D3E28A819B8186AB97AB5B -:101920008C818F7080836E817F818AE991E21BD7E1 -:101930008E819F8120910D2030910E208217930778 -:1019400009F419C380930D2090930E2080910920F3 -:10195000F3D811C3E0E4F8E01082CAE9D3E28A8147 -:101960009B8186AB97AB8C818F7080836E817F81EA -:101970008BEA93E2F8D68E819F8120910B203091E3 -:101980000C208217930709F4F6C280930B209093E2 -:101990000C2080910920D0D8EEC2109268091092D4 -:1019A000690980919C2380939520E5C280919C23B6 -:1019B00080932406E0C2E0919C23F0919D23E830BF -:1019C000F10508F07AC0E15FFE4F0C948E1760E0DD -:1019D00080E018D880919E230E94D60480E0ACD885 -:1019E000CAC260E080E00ED880919E230E94D60497 -:1019F00081E0A2D8C0C261E081E004D8CAE9D3E2A4 -:101A00008C810E94D6048D810E94E50482E094D8E6 -:101A1000B2C283E091D8AFC284E08ED8ACC260E09D -:101A200080E00E94020580919E230E94D60485E0FA -:101A300083D8A1C261E080E00E94020580919E23CC -:101A40000E94D60486E078D896C262E080E00E94C8 -:101A5000020580919E2380680E94D60487E06CD89E -:101A60008AC280919C238093840685C280919C23A6 -:101A700090919D23892B91F00E94850380E2E8EAF2 -:101A8000FBE2ABEAB5E201900D928A95E1F781E0C5 -:101A90008093AB250E949A030E948503E9E7F0E05A -:101AA00091E088EDF89484BF90836091A0237091B9 -:101AB000A1238AE890E257D65EC29111E1C12223A8 -:101AC0000CF005C12091A0233091A12321153105EF -:101AD00009F4D6C18F7109F0A3C090919B23963071 -:101AE00079F0983009F492C091119AC022303105F2 -:101AF00009F0C6C162E070E086EA90E234D63DC2E9 -:101B000080919C2390919D23292F332722303105EA -:101B1000A9F024F42130310541F0A9C12330310569 -:101B2000D9F12F30310551F1A2C180911920909146 -:101B30001A20DC016C9170E016D659C0E091192092 -:101B4000F0911A202189821708F09AC19927880FED -:101B5000991F880F991FE0911B20F0911C20E80F1E -:101B6000F91F80819181FC0162817381FCD5E09134 -:101B7000A223F091A32382E0818339C080911D20AC -:101B800090911E20009709F47BC1DC0112966D91A3 -:101B90007C911397E8D52BC099278130910571F07E -:101BA00038F0029709F06CC12AE630E288E009C0FB -:101BB00064E070E08CE790E2D6D519C023E730E20C -:101BC00087E0422FAAE5B0E2E22FF32F219130E027 -:101BD0002D933D939E2F941B9817C0F3682F660F8B -:101BE0006E5F6093582070E088E590E2BCD5EAE92A -:101BF000F3E286819781228533858217930708F067 -:101C0000BCC18093A4239093A523B7C12130310593 -:101C100009F036C161E070E082EA90E2A4D5ADC17E -:101C20008130E1F590919B239A30C1F52130310547 -:101C300009F026C18091A220882309F421C1C09116 -:101C40009E23D0919F2300919F201091A020D80126 -:101C5000ED91FC918481C81708F012C160E08C2FCF -:101C6000FCDC882309F40CC1CE019927880F991F49 -:101C7000D8011296ED91FC911397E80FF91F01908E -:101C8000F081E02D86819781FC0109958093A42045 -:101C900061E070E084EA90E266D56FC1823009F0BD -:101CA000EFC080919B238111E4C02230310509F0FF -:101CB000E7C080919E23D3D590E080939B209093A2 -:101CC0009C2062E070E08BE990E24DD556C18F71A7 -:101CD00009F083C090919B23933009F4CCC018F491 -:101CE0009130A1F07AC0953019F0993039F175C072 -:101CF0008091A0239091A123892B09F0C1C087E294 -:101D00009BE08093A6239093A72337C18091A023C3 -:101D10009091A123892B09F0B3C080919C239091CD -:101D20009D23019709F0ACC08091A6209091A72037 -:101D30008D7F8093A6209093A7201FC18091A02320 -:101D40009091A123892B09F09BC00AD5882309F41F -:101D500097C020919C2330919D233327E091192037 -:101D6000F0911A20818990E08217930708F488C0C7 -:101D700029DD80919C2390919D238093A22088232C -:101D800009F4FBC099278150904C880F991F880F48 -:101D9000991FE0911B20F0911C20E80FF91FE093A0 -:101DA0009F20F093A0200190F081E02D8481882372 -:101DB00009F4E3C0C0E060E08C2FCBDC882309F499 -:101DC0005FC0CF5FE0919F20F091A0200190F08153 -:101DD000E02D8481C81778F3D0C08130E1F4909170 -:101DE0009B239B30C1F48091A0239091A123892B48 -:101DF00009F046C08091A220882309F441C0EAE995 -:101E0000F3E2C481D2818C2F62DC8823C9F16D2F6B -:101E10008C2F9FDC33C0823099F580919B238130D9 -:101E200019F0833089F029C08091A0239091A123DB -:101E3000892B31F580919C2390919D23892B01F56D -:101E400080919E2327D51AC08091A0239091A12331 -:101E5000892BB1F480919C2390919D23892B81F44F -:101E6000CAE9D3E28C8105D68C8168D607C080E0B0 -:101E700005C080E003C080E001C080E081117EC029 -:101E800080919A238F71813071F58091A2208823EF -:101E900051F100919E2310919F23C0919F20D091DA -:101EA000A020E881F98184810817E8F460E0802FA0 -:101EB000D4DB8823C1F0F801FF27CF01880F991FD9 -:101EC000EA81FB81E80FF91FC081D181EE81FF819A -:101ED0000995682F802FC1DB882329F0EC81FD81D3 -:101EE000099581114BC080919A238F71823009F03E -:101EF00040C08091A2208823B1F1A0919F20B09191 -:101F0000A020ED91FC9111978481882371F1C0E0AC -:101F1000EC2FF0E0EE0FFF1F12968D919C9113971E -:101F2000E80FF91F00811181D8011696ED91FC91FF -:101F300017970995682F8C2F90DB8823F9F0D8012B -:101F40001496ED91FC9115970995811117C0CF5FFB -:101F5000A0919F20B091A020ED91FC9111979481C8 -:101F6000C917B0F20BC080E009C080E007C080E074 -:101F700005C080E003C081E001C081E0DF91CF9126 -:101F80001F910F9108951BBEFC0128ED24BF6083B3 -:101F90000895CF93DF939C01DB01E0ECF1E097859E -:101FA0009923ECF3CCECD1E0988198609883B90147 -:101FB000705FCD01B9D78881877F8883DF91CF910A -:101FC0000895E0ECF1E097859923ECF3ACECB1E0F7 -:101FD0009C9198609C93E82FF0E0F05F60838C9177 -:101FE000877F8C930895EF92FF920F931F93CF9367 -:101FF000DF938C01E0ECF1E087858823ECF3780136 -:1020000080E2E80EF11CE8018C2F801B6991D9DF7A -:10201000CE15DF05C9F7DF91CF911F910F91FF908A -:10202000EF9008951F93CF93DF93E0ECF1E0978555 -:102030009923ECF320E2829FC0011124C0ECD1E08F -:102040001A82998388831A8585E38A8761E08BECFD -:1020500091E099DF1A87DF91CF911F910895409108 -:10206000CA01E62FF72F8093CA0184914093CA01D9 -:102070000895811122C090916C219923D9F09091FB -:10208000CB2B911101C0FFCF2FB7F894EAECFBE204 -:102090009181915091832FBF0DC09091CB2B9F3F89 -:1020A00009F4FFCF2FB7F894EAECFBE291819F5F30 -:1020B00091832FBF80936C21089590916C21992377 -:1020C00061F3F8CF0F93E8ECF4E080818F7D80839B -:1020D00080818F7D8083E0E5F1E202E0059310923C -:1020E00052211092532100E2069300E40693E8E4A3 -:1020F000F1E200E2069300E40693EAE9F3E21486D3 -:102100001586168617861286138610923F210F9128 -:1021100008950F9385E080933F21E1E5F1E204E02B -:102120000593E9E4F1E204E005930F9108950F931C -:1021300083E080933F211092522110925321E0E5D9 -:10214000F1E202E006930F910895E091A623F09149 -:10215000A723309709F0099508950F93CF93DF9344 -:1021600080913F21833019F4F0DFACDF5EC08091B5 -:102170003B2190913C21C091A423D091A523C81B61 -:10218000D90B71F520913D2130913E21820F931F93 -:1021900080933D2190933E212091A0233091A12353 -:1021A0008217930721F08091A820882341F084E0D2 -:1021B00080933F21E8E4F1E202E0069336C0E0912B -:1021C000A823F091A923309799F00995882381F0ED -:1021D00010923B2110923C21C091A423D091A523C1 -:1021E000C034D10528F01092A820C0E4D0E003C08C -:1021F00081E08093A820E0E4F1E2C28BD38B809150 -:102200003B2190913C212091A2233091A323280FC0 -:10221000391F248B358BC80FD91FC0933B21D09316 -:102220003C21E0E5F1E202E00693DF91CF910F91CE -:102230000895FC018181E82FE7708E2F90E0FC016A -:102240003197E730F105C0F4E95EFE4F67C680E1E3 -:1022500090E0089580E290E0089580E490E0089591 -:1022600080E890E0089580E091E0089580E092E0B9 -:1022700008958FEF93E0089588E090E00895282F67 -:102280002F7030E0220F331F082E000C990B882787 -:10229000990F881F9927820F931F02979C01220F85 -:1022A000331F220F331F220F331F820F931F8751BB -:1022B0009F4D08950F93CF938091CC0480FF62C00F -:1022C00081E08093CC04E8E4F1E200E80693E0E5E5 -:1022D000F1E200E806938093CA04E8E4F1E200E149 -:1022E000069380913F21882329F08350823008F49F -:1022F0002CDFE8DE80914A2190914B21089709F06C -:1023000043C088E0EBEFF0E2AAE9B3E201900D925E -:102310008A95E1F7E8ECF4E0808180628083808137 -:1023200080628083A4DAC82F811103C0F2DEC1E08D -:102330002CC080919A2388236CF410923D21109236 -:102340003E2110923B2110923C2182E080933F215C -:1023500004DF1BC08091A0239091A123892B11F44D -:10236000E6DE13C010923D2110923E2110923B21D7 -:1023700010923C2181E080933F21E8E4F1E202E009 -:10238000069303C0C0E001C0C1E08C2FCF910F9134 -:1023900008958F929F92AF92BF92DF92EF92FF9239 -:1023A0000F931F93CF93DF93D82E69DF8C01BD2C41 -:1023B000BB1CBB24BB1CCD2DCF70D0E0CC0FDD1FD0 -:1023C000CB0DD11DCE01880F991F880F991F880F43 -:1023D000991F9C01285B3E4D7901C9012ADF4C0100 -:1023E000BB2009F470C0FE01EE0FFF1FEE0FFF1FB0 -:1023F000EE0FFF1FE05CFE4D26853785D801159650 -:102400008D919C911697820F931F15968D939C9397 -:10241000169713962D913C9114978217930709F400 -:102420003CC0281B390B2115B4E03B0738F02FEFD7 -:1024300033E0C901B4014BD5281B390BF801808169 -:1024400081FF09C0C901B40142D541E0892B09F0DF -:1024500040E0842F01C080E0D8019C9180FB91F97D -:102460009C93CC0FDD1FCC0FDD1FCC0FDD1FC05C9C -:10247000DE4D1E861F862A873B8711962D913C9143 -:10248000129715968D919C911697820F931F8C87AA -:102490009D87F70102E00693CAC0D8018C9181FFA5 -:1024A000B3C08D7F8C93CC0FDD1FCC0FDD1FCC0F05 -:1024B000DD1FC05CDE4D1E861F861A861B86F70157 -:1024C00002E00693B4C0FE01EE0FFF1FEE0FFF1FE8 -:1024D000EE0FFF1FE05CFE4DA284B384D8018C9107 -:1024E00082FF19C01196ED91FC91129715962D91CE -:1024F0003C91169713968D919C911497B401E7D453 -:10250000B0E4DB9EB001112467597F4DAC01CF01CF -:10251000820F931F09D5F801258136812A0D3B1DB5 -:1025200025833683838194818217930768F485839A -:102530009683CC0FDD1FCC0FDD1FCC0FDD1FC05CE1 -:10254000DE4D8E859F8560C0FE01EE0FFF1FEE0FF2 -:10255000FF1FEE0FFF1FE05CFE4D468557854A15B5 -:102560005B0509F051C02817390709F44DC0AC01CB -:10257000421B530B9A01211554E0350750F02FEF01 -:1025800033E0C901B401A3D4D901A81BB90BCD0113 -:1025900007C0C901B4019BD4F901E81BF90BCF01B5 -:1025A000FE01EE0FFF1FEE0FFF1FEE0FFF1FE05C9F -:1025B000FE4D128613868815990578F4D8018C9102 -:1025C00084608C93B0E4DB9EC001112487599F4D39 -:1025D000848795878686978613C0F801418152814A -:1025E00025813681240F351FCC0FDD1FCC0FDD1F59 -:1025F000CC0FDD1FC05CDE4D2C873D878E879F870B -:10260000F70102E0069313C0D8018C9180FF0FC040 -:102610008E7F8C931796ED91FC911897309739F037 -:1026200015966D917C9116974D2D80E00995DF915F -:10263000CF911F910F91FF90EF90DF90BF90AF90DF -:102640009F908F900895CF93CFB7F89481E011DDDC -:10265000EAECF4E080E4808380E28083E1ECF4E063 -:10266000808181608083A9ECB4E08C9182608C933E -:10267000E8ECF4E08081806480838C9181608C93AD -:10268000808180688083CFBFCF910895CF93DF93FF -:10269000C0E6D0E0188280E30E94840AE0ECF4E017 -:1026A00080818064808381E08883CFB7F894E0E400 -:1026B000F1E21186118A118E11A2E9EEF0E2808119 -:1026C0008E7F8083E2EFF0E280818E7F80836AE1FB -:1026D00070E082E0C4DC8F3F19F08093FA0403C0FD -:1026E0008FE18093FA046BE170E082E0B8DC8F3F09 -:1026F00019F08093FB0403C08FE18093FB04E0ECAE -:10270000F4E0808181608083808180688083808123 -:102710008061808388E491E28683978380818062F0 -:1027200080838FEF8093C504E8ECF4E080818260C1 -:10273000808310926C218091CF2B8F3F09F4FFCFC3 -:102740009FB7F894EAECFBE285818F5F85839FBF9A -:102750007ADFCFBFDF91CF9108958093C3040895AE -:102760008091C3040895EAE9F3E280879187628744 -:1027700073870895282F2F7030E0220F331F082E03 -:10278000000C990B8827990F881F9927820F931F98 -:10279000FC01EE0FFF1FEE0FFF1FEE0FFF1FE05CAF -:1027A000FE4D2185207C09F058C06370613011F026 -:1027B00018F404C020EC03C020E801C020E4403835 -:1027C0005105E9F050F440325105A9F0403451056B -:1027D000A1F040315105D9F40CC0411532E0530746 -:1027E00091F04F3F33E0530781F04115514079F4A8 -:1027F00008C041E00DC042E00BC043E009C044E026 -:1028000007C045E005C046E003C047E001C040E026 -:10281000FC01EE0FFF1FEE0FFF1FEE0FFF1FE05C2E -:10282000FE4D1186DC01AA0FBB1FAA0FBB1FAA0F0A -:10283000BB1FA85BBE4D36E03C93242B2187880F3D -:10284000991F880F991F880F991FFC01E05CFE4DAE -:1028500081858062818781E0089580E00895E82F76 -:10286000EF70F0E0EE0FFF1F082E000C990B882789 -:10287000990F881F9927E80FF91FEE0FFF1FEE0F22 -:10288000FF1FEE0FFF1FE05CFE4D818582FB882756 -:1028900080F90895282F2F7030E0A901440F551FAB -:1028A000282F082E000C330B2227330F221F33272B -:1028B000240F351FF901EE0FFF1FEE0FFF1FEE0F64 -:1028C000FF1FE05CFE4D918592FF17C0220F331F62 -:1028D000220F331F220F331FF901E05CFE4D91855B -:1028E0009B7F9187CCDCFC01808180FF06C08E7FBE -:1028F00080830780F085E02D099581E008957F921F -:102900008F929F92AF92BF92CF92DF92EF92FF92FF -:102910000F931F93CF93DF93982E862E6A01790130 -:10292000AEDC5C01792C771C7724771CC92DCF7025 -:10293000D0E0CC0FDD1FC70DD11DFE01EE0FFF1F34 -:10294000EE0FFF1FEE0FFF1FE05CFE4D8185807CC8 -:1029500009F47DC0FE01EE0FFF1FEE0FFF1FEE0F0B -:10296000FF1FE05CFE4D8185807C803C61F0FE01B4 -:10297000EE0FFF1FEE0FFF1FEE0FFF1FE05CFE4D7F -:10298000818582FD66C08FB7F894F501908190FF34 -:1029900003C08FBF712C5EC0F50190819160908360 -:1029A0008FBFC182D282E382F482158216820783AE -:1029B0001087811006C091E0E114F10419F090E055 -:1029C00001C091E0F501808190FB81F98B7F8083CC -:1029D000772059F0CC0FDD1FCC0FDD1FCC0FDD1F92 -:1029E000C05CDE4D1E861F862DC0FE01EE0FFF1F50 -:1029F000EE0FFF1FEE0FFF1FE05CFE4D8185807C18 -:102A0000803CA1F4CE01880F991F880F991F880F71 -:102A1000991F885B9E4D0DDCBC01C70158D2892BE4 -:102A200029F0F50180818E7F808314C0CC0FDD1FDB -:102A3000CC0FDD1FCC0FDD1FC05CDE4D1A861B8660 -:102A40001E861F86892DA5DC7724739403C0712C04 -:102A500001C0712C872DDF91CF911F910F91FF90B5 -:102A6000EF90DF90CF90BF90AF909F908F907F902E -:102A70000895FF920F931F93CF93DF93182FF82E93 -:102A8000FF1CFF24FF1CC82FCF70D0E0CC0FDD1F30 -:102A9000CF0DD11DF4DBDC01FE01EE0FFF1FEE0FA9 -:102AA000FF1FEE0FFF1FE85BFE4D02E005938C91C8 -:102AB00080FF22C08E7F8C931796ED91FC91189722 -:102AC0003097D1F0FF2059F0CC0FDD1FCC0FDD1F68 -:102AD000CC0FDD1FC05CDE4D6E857F850AC0CC0F3C -:102AE000DD1FCC0FDD1FCC0FDD1FC05CDE4D6A8506 -:102AF0007B85412F81E00995DF91CF911F910F9147 -:102B0000FF900895CF93C82FB4DFEC2FEF70F0E063 -:102B1000EE0FFF1F8C2FCC0F990B8827990F881F62 -:102B20009927E80FF91FEE0FFF1FEE0FFF1FEE0FA3 -:102B3000FF1FE05CFE4D1186CF9108950F93E82FA3 -:102B4000EF70F0E0EE0FFF1F282F082E000C330B64 -:102B50002227330F221F3327E20FF31FDF01AA0FB3 -:102B6000BB1FAA0FBB1FAA0FBB1FA05CBE4D1996AF -:102B70009C911997946019969C93EE0FFF1FEE0F8E -:102B8000FF1FEE0FFF1FE85BFE4D01E0069371DFB4 -:102B900081E00F9108951F920F920FB60F921124AA -:102BA0000F932F933F934F935F936F937F938F93E5 -:102BB0009F93AF93BF93EF93FF938091CB048823B0 -:102BC00044F480E88093CA040E94070C0E944404E5 -:102BD00082C08091CB0482FF20C084E08093CA042D -:102BE0008091502186FF77C08091CC0481FD73C015 -:102BF00061DB811170C080913F21813011F497DA3F -:102C00006AC0843009F067C0E1E5F1E204E00593B1 -:102C1000E9E4F1E204E005935EC08091CB0481FF1A -:102C200055C082E08093CA048091482186FF53C03A -:102C30008091CC0481FD4FC03DDB81114CC080915F -:102C40003F21823041F484E080933F21E8E4F1E2C7 -:102C500002E0069340C0833009F03DC0E1E5F1E2B7 -:102C600004E00593E9E4F1E204E0059334C080E177 -:102C70008093CA040E94E20B1092C304E0E4F1E2E4 -:102C8000118696E0908783E48187118A908B818BEF -:102C90008BEF90E28487958715DA1DC08091CB0475 -:102CA00086FF08C080E48093CA0480E0E2D90E94D5 -:102CB000420411C08091CB0485FF0DC080E2809357 -:102CC000CA0481E0D6D90E94430405C08091CB0498 -:102CD00084FFE4CFCCCFFF91EF91BF91AF919F9153 -:102CE0008F917F916F915F914F913F912F910F91B4 -:102CF0000F900FBE0F901F9018951F920F920FB656 -:102D00000F9211240F931F932F933F934F935F9331 -:102D10006F937F938F939F93AF93BF93CF93DF93E3 -:102D2000EF93FF938091CC0481FD03C0C3DA81113E -:102D3000B9C082E08093CC048091C5048195880F4E -:102D4000E8E4F1E2E81BF1092081318128543142A5 -:102D5000369527953695279536952795822F869512 -:102D600020FD02C090E001C090E8890FE82FEF70CD -:102D7000F0E0EE0FFF1F282F082E000C330B222748 -:102D8000330F221F3327E20FF31FDF01AA0FBB1FF0 -:102D9000AA0FBB1FAA0FBB1FA85BBE4D9C9195FF3E -:102DA00081C0FD0100E20693811177C080913F212F -:102DB000843019F4CAD986D975C000914A2110917E -:102DC0004B218091A4239091A523C0913B21D091C8 -:102DD0003C219E01200F311F8217930718F48C01AC -:102DE0000C1B1D0B8091A2239091A323A8016BEFD4 -:102DF00070E28C0F9D1F98D0C00FD11FC0933B2154 -:102E0000D0933C210034110569F480913D219091CB -:102E10003E218C0F9D1F2091A0233091A12382176A -:102E2000930780F0EAE9F3E2C287D3870684F78547 -:102E3000E02D309729F00995811102C06AD932C07E -:102E400076D930C08091A4239091A523C817D907C3 -:102E5000F9F4E091A823F091A923309711F459D9FE -:102E600021C00995811102C054D91CC020913D2177 -:102E700030913E2180913B2190913C21820F931F04 -:102E800080933D2190933E2110923B2110923C2152 -:102E9000E8E4F1E202E0069305C0803811F45DD960 -:102EA00001C077DAFF91EF91DF91CF91BF91AF91A0 -:102EB0009F918F917F916F915F914F913F912F9152 -:102EC0001F910F910F900FBE0F901F901895AA1B86 -:102ED000BB1B51E107C0AA1FBB1FA617B70710F005 -:102EE000A61BB70B881F991F5A95A9F78095909537 -:102EF000BC01CD01089597FB072E16F4009406D06F -:102F000077FD08D0E4DF07FC05D03EF4909581956D -:102F10009F4F0895709561957F4F0895EE0FFF1FA5 -:102F20000590F491E02D0994FB01DC0102C00190B1 -:0E2F30000D9241505040D8F70895F894FFCF0D -:102F3E0040000CE02E0AFFFFFFFF5580008000BE10 -:102F4E000AC90ACF0ABB0A000044201F200000282D -:102F5E002023200F2000000009021900010100802B -:102F6E00FA0904000001FFFFFF0007058101FF03BE -:102F7E00010000001201000200000040EB0394BAB1 -:102F8E00000201020001000000030000000000002A -:102F9E00000000000000000000004C6162726164DD -:102FAE006F72004573706F54656B00000403090463 -:0C2FBE0064656275673132330000020068 +:1000000025C100003FC100003DC100003BC1000010 +:1000100039C1000037C100000C941F090C94760907 +:1000200031C100002FC100002DC100002BC1000014 +:1000300029C1000027C1000025C1000023C1000024 +:1000400021C100001FC100001DC100001BC1000034 +:1000500019C1000017C1000015C1000013C1000044 +:100060000C94840A0C948F0A0DC100000BC100008F +:1000700009C1000007C1000005C1000003C1000064 +:1000800001C10000FFC00000FDC00000FBC0000077 +:10009000F9C00000F7C00000F5C00000F3C0000088 +:1000A000F1C00000EFC00000EDC00000EBC0000098 +:1000B000E9C00000E7C00000E5C00000E3C00000A8 +:1000C000E1C00000DFC00000DDC00000DBC00000B8 +:1000D000D9C00000D7C00000D5C00000D3C00000C8 +:1000E000D1C00000CFC00000CDC00000CBC00000D8 +:1000F000C9C00000C7C00000C5C00000C3C00000E8 +:10010000C1C00000BFC00000BDC00000BBC00000F7 +:10011000B9C00000B7C00000B5C00000A6C4000010 +:10012000B1C00000AFC00000ADC00000ABC0000017 +:10013000A9C00000A7C00000A5C00000A3C0000027 +:10014000A1C000009FC000009DC000000C94E20907 +:1001500099C0000097C0000095C0000093C0000047 +:1001600091C000008FC000008DC000008BC0000057 +:1001700089C0000087C0000085C0000083C0000067 +:1001800081C000007FC000007DC000007BC0000077 +:1001900079C0000077C0000075C0000073C0000087 +:1001A00071C000006FC000006DC000006BC0000097 +:1001B00069C0000067C0000065C0000063C00000A7 +:1001C00061C000005FC000005DC000005BC00000B7 +:1001D00059C0000057C0000055C0000053C00000C7 +:1001E00051C000004FC000004DC000004BC00000D7 +:1001F00049C000000C94F9150C94AB16210423049B +:100200002504270429042B042D042F04430445044A +:10021000470449044B0450044D044F048D0CB20CA8 +:10022000D50CF80C010D060D5F0D640D830D120D3C +:100230001D0D280D370D3A0D3D0D480D530D55116F +:1002400058115B115E1161116411671111241FBEF9 +:10025000CFEFCDBFDFE2DEBF10E2A0E0B0E2EAE91F +:10026000FFE202C005900D92AC38B107D9F72BE23E +:10027000ACE8B0E201C01D92A03DB207E1F794D214 +:100280000C94CB17BDCECF93DF93C0E5D0E084E0D4 +:100290008E838CE1A4D3E0E6F0E083838BEB86834E +:1002A00080E8858381E0808388ED84BF10924100DF +:1002B00083E08883E0E5F0E081818330E9F7E0E5E1 +:1002C000F0E080818160808388E18583818180FF87 +:1002D000FDCFE0E5F0E0808180618083818184FF53 +:1002E000FDCF88ED84BF84E080934000DF91CF9103 +:1002F0000895E0E7F0E085818E7F8583E0E0FAE015 +:100300008FEB9DE586A397A380EE9EE280A391A349 +:1003100082E0808308958091200A9091210A813E95 +:100320002EE2920720F02091722120936A00803EF5 +:100330002EE2920720F420916F2120936A002091F1 +:100340000520222331F080910520815080930520E3 +:1003500035C0885F9A42813D974080F110928C2091 +:1003600080918D2090918E20A0918F20B09190202F +:100370000196A11DB11D80938D2090938E20A09396 +:100380008F20B093902080918D2090918E20A0910D +:100390008F20B0919020892F9A2FAB2FBB27EEE7AB +:1003A000F1E2848B80918D2090918E20A0918F20FE +:1003B000B0919020838B86E0809305208091072068 +:1003C000909108200196B1F4809109208F3F91F01F +:1003D00080910620811106C0809106208150809373 +:1003E00006200895809114019091150180930720B3 +:1003F000909308200895009709F466C00CF09C01C2 +:10040000992334F422273327281B390B51E001C0EC +:1004100050E0E8E6F0E0838190E0809370219093D3 +:10042000712180917021909171219695982F882744 +:100430009795879580937021909371214281809147 +:10044000702190917121840F911D80937021909360 +:100450007121000080917021909171218217930782 +:1004600028F41092702110927121089580917021CA +:1004700090917121820F931F8115904238F08FEF78 +:100480009FE180937021909371210895552359F035 +:100490008091702190917121821B930B8093702128 +:1004A000909371210AC08091702190917121280F41 +:1004B000391F209370213093712180917021909188 +:1004C00071218F7780936A000895CF93DF93C09155 +:1004D000200AD091210A80910320909104209E014E +:1004E000281B390B209373213093742180918C2029 +:1004F00081114DC080917321909174218E3C9F4F4A +:10050000E4F480917321909174218B369F4FACF06D +:1005100080910220882331F08091022081508093C5 +:10052000022035C080916A008093722181E080931F +:100530008C208CE0809302202AC08CE080930220E3 +:1005400080917321909174218A369F4F1CF08FEF18 +:100550009FEF02C081E090E080936D2190936E2127 +:10056000809173219091742120916D2130916E21A1 +:1005700060E370E00E94A917261B370B20936D21C2 +:1005800030936E2180916D2190916E2134DF8091A6 +:100590008C20813029F58091732190917421C3972B +:1005A00094F080910220882331F0809102208150C4 +:1005B0008093022015C080916A0080936F2183E0B0 +:1005C00080938C200DC08091732190917421873984 +:1005D00091051CF481E090E002C08FEF9FEF0BDFEC +:1005E000C0930320D0930420DF91CF910895861704 +:1005F000970779F06817790728F49C01261B370BB9 +:10060000B90109C08617970718F4681B790B03C056 +:10061000089560E070E0862F972F08950F931F9341 +:10062000CF93DF938091002090910120892B51F08E +:100630008091002090910120019780930020909359 +:1006400001204DC080E490E0809300209093012031 +:100650008091072090910820019609F440C0809174 +:1006600014019091150120910920263018F467E7B4 +:1006700071E002C06EEE72E00E949517082F192FEC +:10068000C82FD12F80910720909108208C179D07AB +:1006900080F46091072070910820802F912FA7DFB0 +:1006A000029738F080EC9DE58093360A9093370AE4 +:1006B00016C08091072090910820C817D90778F4B8 +:1006C0006091072070910820802F912F90DF029772 +:1006D00030F08FEB9DE58093360A9093370ADF91D7 +:1006E000CF911F910F910895AC01460F571F861BA4 +:1006F000970BE0E0FAE020A131A124173507D8F7E5 +:1007000020A131A182179307B0F70895E0E8F6E041 +:100710008FE0808385E0848308951F93CF93DF93D8 +:10072000C0E4D0E0198180E4898340E250E068EAC7 +:100730007BE280E290E00E94F70F1983DF91CF9176 +:100740001F9108951F93CF93DF93C0E4D0E01981E8 +:1007500080E489838BEA95E20E94211081E00E9467 +:1007600040101983DF91CF911F91089508950F9341 +:100770001F93209196208EEE92E0289FA001299F42 +:10078000500D112444535A4D07EB13E02EEE32E086 +:1007900060E081E80E94AD141F910F9108951CBE86 +:1007A000EEEFF0E409950895B8DF8091A82B882337 +:1007B00069F080E2E8EAFBE2ABEAB5E201900D9273 +:1007C0008A95E1F71092AB25BDDFE9DF87E08093E2 +:1007D000A200789458DDCADF0E940B0C59D17CD15D +:1007E00060E080E005D1F1D08CE0E5D0A9D564D6F9 +:1007F0007DD68CDF89E0E0E8F0E2AEE7B1E201907F +:100800000D928A95E1F70000000000000000000052 +:1008100000000000000000000000000000000000D8 +:10082000000080919120882371F3E091AA238E2FFC +:1008300090E088309105A0F4FC01E250FF4F0C9449 +:10084000BC1776D10DC0E8D10BC070D209C0F5D26B +:1008500007C082D305C009D403C008D401C07AD42C +:1008600010929120D0CF08950895CF93DF93E09117 +:1008700009208E2F90E08830910590F4FC01EA5F0A +:10088000FE4F0C94BC17C7D10BC04FD209C0D4D2B5 +:1008900007C061D305C0E8D303C05BD401C0CED488 +:1008A000A0E0B1E054968C915497EEE7F1E2818795 +:1008B00055968C915597828794968C9194978387BF +:1008C00095968C9195978487C0E0DAE088A1858B16 +:1008D00089A1868B54968D919C9155978634914031 +:1008E00080F08091140190911501893A914048F46B +:1008F00080911401909115018093C82B9093C92B7E +:10090000000080919420882339F0F3DC1092942029 +:1009100081E08093932021C080919320882341F02F +:1009200080918C20833019F4F6DC78DE01C0CDDDB7 +:1009300080919220882351F08091140190911501AB +:100940008093C82B9093C92B10929220909196205F +:1009500081E0911180E080939620DF91CF910895FE +:100960000F931F9381E0809399208093942007EB4D +:1009700013E02DE730E04CEC55E260E081E80E94A6 +:10098000AD1481E01F910F91089510929920089560 +:1009900081E0089581E00895E0E0F2E010A2982F50 +:1009A0009C71936890A3881F8827881F880F81A354 +:1009B00012A216A20895E0E0F2E010AA836880ABCC +:1009C00080E181AB12AA16AA0895E0E0F2E010A639 +:1009D00083E880A78FE281A712A616A60895AAEC45 +:1009E000B1E092E09C93E82FF0E084911C9208958E +:1009F000CF93DF93E0E7F0E091819D7F91831092A8 +:100A00000002623031F1E0E0F2E09CE1918390E499 +:100A10009283811102C080E401C080EC80930302C4 +:100A2000613011F084E001C083E0C0E0D2E08C834B +:100A300080E2D5DF8C8781E2D2DF8D87188E198E18 +:100A400081E08883C2DF0EC080EC8093030284E0E3 +:100A5000ECCFE0E0F2E09EE1918390E4928381119B +:100A6000F3CFD9CFDF91CF9108951F920F920FB698 +:100A70000F9211248F93000000000000000081E01D +:100A8000809323028F910F900FBE0F901F901895A7 +:100A9000CF93DF93E0E7F0E082818B7F8283C0E237 +:100AA000D3E08DE0888380E4898389E08A8383E3CF +:100AB00096DF888782E393DF898787E390DF8A87E1 +:100AC00086E38DDF8B87E0E2F6E0808183608083C0 +:100AD0001482DF91CF910895E0E7F0E080818E7F6E +:100AE000808383E8809300010895E0E0F1E0108ABC +:100AF00080E4808B10A280A310AA80ABE0E4F1E038 +:100B000010828083109298201092972081E0809329 +:100B1000962010927C2110927D2110927A211092C1 +:100B20007B2108958093AA2381E0809391200895EA +:100B3000CF93DF9310920920D8DFC0E0D1E01EAA46 +:100B400094E298AB19AA49E54AAB32E03BAB60911D +:100B50000B2070910C206CAB7DAB6BEA73E268AF3D +:100B600079AF1AAE8BE38CAF83E080933D01109296 +:100B70003E0128A9206828AB10924601E0E4F1E08C +:100B80009083109241014093420180934301409130 +:100B90000D2050910E2040934401509345014AE9A5 +:100BA00051E2409348015093490110924A0129E3D0 +:100BB00020934C0180934D0110924E0120812068BA +:100BC0002083188A20E4288B24E0288B898B85E9F0 +:100BD0008A8B80E18B8B47E751E04C8B5D8B988F44 +:100BE000398F1A8E8CEC95E28C8F9D8F1E8E68EC5F +:100BF00070E084EF91E078DD88EC90E0809307204E +:100C00009093082081E08093062088898068888BF3 +:100C1000DF91CF91089508951F93CF93DF9311E053 +:100C20001093092062DFC0E0D1E018AA80E488AB0D +:100C300084E088AB19AA1AAA4BE44BAB1CAA1DAAE4 +:100C40001EAA8AE090E288AF99AF1AAE70EA7CAF34 +:100C500068E060933D0110923E0188A9806A88ABEC +:100C6000E0EAF8E085E58083808310924601E0E4C5 +:100C7000F1E084E280831092410199E59093420172 +:100C800032E030934301A0910B20B0910C20A0934F +:100C90004401B0934501ABEAB3E2A0934801B0939D +:100CA000490110924A019BE390934C0193E0909389 +:100CB0004D0110924E0120812068208388A399A3C2 +:100CC00025E92AA34BA34EEE52E04CA35DA378A7DF +:100CD00069A71AA66AEB78E26CA77DA71EA6888B87 +:100CE000998B2A8B90E19B8B4C8B5D8B888F398FF6 +:100CF0001A8E8CEC95E28C8F9D8F1E8E68EC70E0C6 +:100D000084EF91E0F1DC88EC90E0809307209093F1 +:100D100008201093062088A1806888A388898068AD +:100D2000888BDF91CF911F91089508951F93CF93E2 +:100D3000DF9312E010930920D8DEC0E0D1E01EAAB4 +:100D400084E288AB19AA39E53AAB1BAB40910B2082 +:100D500050910C204CAB5DAB4BEA53E248AF59AF1E +:100D60001AAE9BE39CAF93E090933D0110923E013D +:100D700028A9206828AB10924601E0E4F1E08083C6 +:100D800010924101309342019093430120910D2034 +:100D900030910E2020934401309345012AE931E23D +:100DA000209348013093490110924A0129E320938E +:100DB0004C0190934D0110924E0190819068908368 +:100DC000188A90E4988B888B198A45E94A8B90E1C0 +:100DD0009B8B2EEE32E02C8B3D8B888F198F1A8ED9 +:100DE0006CEC75E26C8F7D8F1E8E88A319A24AA3CE +:100DF0009BA32CA33DA384E388A719A71AA68AEB7B +:100E000098E28CA79DA71EA668EC70E084EF91E0A5 +:100E10006BDC88EC90E0809307209093082081E0C1 +:100E20008093062088898068888B88A1806888A341 +:100E3000DF91CF911F91089508951F93CF93DF9372 +:100E400013E01093092051DEC0E0D1E018A250E475 +:100E500058A384E088A319A21AA24BE44BA31CA2B6 +:100E60001DA21EA28AE090E288A799A71AA630EADE +:100E70003CA728E02DA71EA688A1806A88A385E547 +:100E80008093A0081EAA84E288AB19AA69E56AAB20 +:100E90001BABE0910D20F0910E20ECABFDABEAE92D +:100EA000F1E2E8AFF9AF1AAE99E39CAF10933D01C0 +:100EB00010923E0198A9906898AB10924601E0E428 +:100EC000F1E08083109241016093420192E090939F +:100ED000430160910B2070910C206093440170934A +:100EE00045016BEA73E260934801709349011092E7 +:100EF0004A019BE390934C0110934D0110924E01D7 +:100F0000908190689083188A588B888B198A85E91C +:100F10008A8B4B8B8EEE92E08C8B9D8B388F298F3A +:100F20001A8E8CEC95E28C8F9D8F1E8E68EC70E093 +:100F300084EF91E0D9DB88EC90E0809307209093D8 +:100F4000082081E08093062088898068888BDF9163 +:100F5000CF911F91089508951F93CF93DF9314E0CD +:100F600010930920C2DDC0E0D1E018AA80E488AB6C +:100F700018AB19AA1AAA3BE43BAB1CAA1DAA1EAACD +:100F80008AE090E288AF99AF1AAE50EA5CAF88E091 +:100F900080933D0110923E0198A9906A98AB95E527 +:100FA0009093A00810924601E0E4F1E094E290836F +:100FB0001092410129E52093420122E02093430150 +:100FC00060910B2070910C20609344017093450157 +:100FD0006BEA73E2609348017093490110924A01F1 +:100FE0002BE320934C0123E020934D0110924E01FE +:100FF000208120682083988B198A45E94A8B3B8B96 +:101000002EEE32E02C8B3D8B588F898F1A8E6CEC34 +:1010100075E26C8F7D8F1E8E98A319A24AA39AE465 +:101020009BA32CA33DA393EC98A789A71AA68AEBB0 +:1010300098E28CA79DA71EA668EC70E084EF91E073 +:1010400053DB88EC90E0809307209093082081E0A8 +:101050008093062088898068888B88A1806888A30F +:10106000DF91CF911F9108950895FFCFCF93DF9324 +:1010700086E08093092039DDC0E0D1E01EAA84E239 +:1010800088AB19AA39E53AAB93E09BAB40910D20B0 +:1010900050910E204CAB5DAB4AE951E248AF59AFDD +:1010A0001AAE29E32CAF90933D0110923E0128A97E +:1010B000206828AB10924601E0E4F1E080831092B2 +:1010C00041013093420132E03093430140910B20C3 +:1010D00050910C2040934401509345014BEA53E258 +:1010E000409348015093490110924A012BE3209309 +:1010F0004C0190934D0110924E0120812068208375 +:10110000188A20E4288B888B998B95E99A8B90E13B +:101110009B8B4CED55E04C8B5D8B888F398F1A8EF5 +:101120008CEC95E28C8F9D8F1E8E68EC70E084EFC6 +:1011300091E0DADA80E991E080930720909308202B +:1011400081E08093062088898068888BDF91CF9129 +:1011500008950895CF93DF9387E080930920C5DC3D +:10116000C0E0D1E01EAA94E298AB19AA39E53AABE7 +:1011700083E08BAB40910D2050910E204CAB5DABCA +:101180004AE951E248AF59AF1AAE29E32CAF809338 +:101190003D0110923E0128A9206828AB109246011B +:1011A000E0E4F1E09083109241013093420132E09B +:1011B0003093430140910B2050910C204093440107 +:1011C000509345014BEA53E2409348015093490143 +:1011D00010924A012BE320934C0180934D01109211 +:1011E0004E01208120682083188A20E4288B25E284 +:1011F000288B898B85E98A8B80E18B8B4CED55E0C0 +:101200004C8B5D8B988F398F1A8E8CEC95E28C8F7E +:101210009D8F1E8E68EC70E084EF91E065DA80E9C6 +:1012200091E0809307209093082081E0809306202E +:1012300088898068888BDF91CF91089508951F92E7 +:101240000F920FB60F9211248F939F93AF93BF937A +:10125000EF93FF93E0E0F1E081E0838380917C21D4 +:1012600090917D21019680937C2190937D218091A6 +:101270007C2190917D21AEE7B1E257968C935797F0 +:1012800080917C2190917D2158969C93108A84E0D6 +:10129000808B87E791E0848B958B809196208823C3 +:1012A00019F080E090E002C08EEE92E084539A4DF7 +:1012B00080931C0180919620882319F080E090E0B3 +:1012C00002C08EEE92E084539A4DE0E0F1E0958FFB +:1012D00080898068808BFF91EF91BF91AF919F9142 +:1012E0008F910F900FBE0F901F9018951F920F9225 +:1012F0000FB60F9211248F939F93EF93FF9382E089 +:101300008093030180917A2190917B2101968093B3 +:101310007A2190937B2180917A2190917B21EEE735 +:10132000F1E2818F80917A2190917B21928FFF91C0 +:10133000EF919F918F910F900FBE0F901F90189576 +:10134000E0E7F0E083818C7F838384818C7F8483DA +:1013500080818D7F8083E0E8F1E080EC82831286DB +:1013600088EC81831186A0E0B8E034E03C9323E070 +:1013700011962C93119714961C92149785ED91E079 +:1013800096968D939C93979716961C921697E0E4E9 +:10139000F8E030832183148286A397A31682E0E6C7 +:1013A000F6E0808180618083E0E4F9E083E181837D +:1013B000148282E08683A6A3B7A310A611A681E0BB +:1013C000808308951F920F920FB60F9211242F93CE +:1013D0003F934F935F938F939F93EF93FF93CF939D +:1013E000DF931F92CDB7DEB78FEF80934C098091CA +:1013F0000920873031F4E0E0F2E084A5898395A5E7 +:1014000002C090912C0280919520891B209168093F +:101410003091690991E082300CF490E09923C9F091 +:1014200091E02A3F374008F090E0992391F0209115 +:1014300068093091690989301CF481E090E002C0AC +:1014400086E090E0820F931F80937809909379094A +:1014500023C0209168093091690991E08F3F0CF019 +:1014600090E09923C9F091E02730310508F490E02D +:10147000992391F02091680930916909883F1CF007 +:1014800081E090E002C086E090E0A901481B590B82 +:1014900040937809509379090F90DF91CF91FF9194 +:1014A000EF919F918F915F914F913F912F910F906D +:1014B0000FBE0F901F901895E0E7F0E083818F7EBC +:1014C0008383E0E4F6E080818A6A80838FEF8483FF +:1014D00088E5828BE0EAF8E080E3838384EC85830F +:1014E00087E08683178288E184830895E0E7F0E04F +:1014F0008381877F8383E0ECF8E080E4808311823E +:1015000088E58093550608951F920F920FB60F92AB +:10151000112400000F900FBE0F901F9018951F927E +:101520000F920FB60F9211248F93EF93FF93E0EA7F +:10153000F8E080818083FF91EF918F910F900FBE33 +:101540000F901F9018959FB7F894E82FF0E0E0599E +:10155000FF4F60958081682360839FBF0895863028 +:1015600011F060E001C068E18091510081FD26C06A +:101570009FB7F894E0E5F0E08081826080839FBFB0 +:10158000818181FFFDCF9FB7F894A0E5B0E016966A +:101590008C911697897F16968C931697E0E6F0E06B +:1015A00080E885838BEB868316968C9116978460F2 +:1015B00016968C938081816080839FBF636084E4F2 +:1015C00090E00FD560E480E0BECF089580919A202E +:1015D00008951CD1FC01838180939A20811102C05F +:1015E000BFC9089581E0089580919A20813009F45F +:1015F000CCC9089580919A2388234CF48076803456 +:10160000A9F480919B23811113C0C4C908958076E9 +:10161000803481F480919B2381110EC08091A0239E +:101620009091A123892B51F0B3C9089580E00895CA +:1016300080E0089580E0089580E0089580E00895B6 +:10164000E0919F20F091A0200190F081E02D228177 +:1016500033812E0F3F1FFC014081E40FF11DE21783 +:10166000F307B8F481818430B9F0861309C005C04E +:1016700081818430A1F0861303C08E2F9F2F08959F +:101680008081E80FF11DE217F30790F380E090E00E +:10169000089580E090E0089580E090E0089580E073 +:1016A00090E0089580919C238F770C94DB1308952C +:1016B0009091A220992381F1E0919F20F091A020A8 +:1016C0000190F081E02D9481891740F5E0939D20F1 +:1016D000F0939E20228133812E0F3F1FE217F307E4 +:1016E000F8F49181943061F49281981309C0938148 +:1016F000961306C0E0939D20F0939E2081E008950C +:101700009081E90FF11DE217F30758F3E0939D2054 +:10171000F0939E2080E0089580E0089580E0089591 +:1017200080E00895EF92FF921F93CF93DF93C82F2D +:1017300060E0BEDF182F882381F1A0919F20B09137 +:10174000A020EC2FF0E0EE0FFF1F12968D919C91E0 +:101750001397E80FF91FE080F180D7011696ED91FD +:10176000FC9117970995682F8C2FA2DF182F8823DB +:10177000A1F0C0919D20D0919E2065E0CE0160DF58 +:10178000EC01892B21F08A810E94B015F6CFD70198 +:101790001296ED91FC9113970995812FDF91CF91CE +:1017A0001F91FF90EF9008951F93CF93DF93182F11 +:1017B0007FDF882339F1C0919D20D0919E2065E084 +:1017C000CE013EDFEC01892B41F04C815D816B81C4 +:1017D0008A81FED78111F3CF15C0A0919F20B091CF +:1017E000A020E12FF0E0EE0FFF1F12968D919C914B +:1017F0001397E80FF91F0190F081E02D0190F0811F +:10180000E02D0995DF91CF911F91089580919D2042 +:1018100090919E20089568C70895CF938091A2204B +:101820008823C1F0E0919F20F091A0200190F081E9 +:10183000E02D8481882371F0C0E08C2F73DFCF5FAF +:10184000E0919F20F091A0200190F081E02D848113 +:10185000C81798F31092A2201092A6201092A720E9 +:10186000CF910895CF938091A220882349F1A09130 +:101870009F20B091A020ED91FC9111978481882345 +:10188000F9F0C0E0EC2FF0E0EE0FFF1F12968D9103 +:101890009C911397E80FF91F0190F081E02D0084CF +:1018A000F185E02D309709F00995CF5FA0919F2039 +:1018B000B091A020ED91FC9111978481C81710F38D +:1018C000CF9108950F931F93CF93DF93EAE9F3E24B +:1018D0001286138614861586168617868081282F11 +:1018E00088233CF44091A0235091A123452B09F477 +:1018F0006CC3982F9076903409F00DC1E0919B2332 +:101900004E2F50E0FA01E05AF109E930F10508F0F4 +:1019100002C1E25FFE4F0C94BC1781E080939220DD +:101920008091072090910820EEE7F1E28587809171 +:101930000720909108209687809172218787809157 +:101940006F21808BA8E6B0E012968C911297818B64 +:1019500013968C91828B6091A0237091A123CF016B +:1019600030D737C3E0E0F8E01082CAE9D3E28A81D9 +:101970009B8186AB97AB8C818F7080836E817F81DA +:101980008AE991E21ED78E819F8120910D203091AE +:101990000E208217930709F41CC380930D209093A7 +:1019A0000E2080910920BED814C3E0E4F8E0108234 +:1019B000CAE9D3E28A819B8186AB97AB8C818F7019 +:1019C00080836E817F818BEA93E2FBD68E819F813B +:1019D00020910B2030910C208217930709F4F9C253 +:1019E00080930B2090930C20809109209BD8F1C20A +:1019F000109268091092690980919C238093952028 +:101A0000E8C280919C2380932406E3C2E0919C234A +:101A1000F0919D23E830F10508F07DC0E95EFE4FAE +:101A20000C94BC1760E080E00E94F80480919E2333 +:101A30000E94CC0480E076D8CCC260E080E00E94B6 +:101A4000F80480919E230E94CC0481E06BD8C1C22F +:101A500061E081E00E94F804CAE9D3E28C810E942F +:101A6000CC048D810E94DB0482E05CD8B2C283E0AA +:101A700059D8AFC284E056D8ACC260E080E00E9482 +:101A8000F80480919E230E94CC0485E04BD8A1C22B +:101A900061E080E00E94F80480919E230E94CC04C3 +:101AA00086E040D896C262E080E00E94F80480910F +:101AB0009E2380680E94CC0487E034D88AC280913B +:101AC0009C238093840685C280919C2390919D23C2 +:101AD000892B91F00E948D0380E2E8EAFBE2ABEAF9 +:101AE000B5E201900D928A95E1F781E08093AB25F4 +:101AF0000E94A2030E948D03E9E7F0E091E088EDE7 +:101B0000F89484BF90836091A0237091A1238AE808 +:101B100090E257D65EC29111E1C122230CF005C1BB +:101B20002091A0233091A1232115310509F4D6C1BC +:101B30008F7109F0A3C090919B23963079F0983073 +:101B400009F492C091119AC02230310509F0C6C142 +:101B500062E070E086EA90E234D63DC280919C2338 +:101B600090919D23292F332722303105A9F024F4A9 +:101B70002130310541F0A9C123303105D9F12F3091 +:101B8000310551F1A2C18091192090911A20DC01F8 +:101B90006C9170E016D659C0E0911920F0911A208E +:101BA0002189821708F09AC19927880F991F880FF9 +:101BB000991FE0911B20F0911C20E80FF91F8081F4 +:101BC0009181FC0162817381FCD5E091A223F091A7 +:101BD000A32382E0818339C080911D2090911E2033 +:101BE000009709F47BC1DC0112966D917C911397EB +:101BF000E8D52BC099278130910571F038F0029714 +:101C000009F06CC12AE630E288E009C064E070E0C7 +:101C10008CE790E2D6D519C023E730E287E0422F67 +:101C2000AAE5B0E2E22FF32F219130E02D933D930E +:101C30009E2F941B9817C0F3682F660F6E5F6093FA +:101C4000582070E088E590E2BCD5EAE9F3E28681AD +:101C50009781228533858217930708F0BCC1809352 +:101C6000A4239093A523B7C12130310509F036C1D3 +:101C700061E070E082EA90E2A4D5ADC18130E1F587 +:101C800090919B239A30C1F52130310509F026C18E +:101C90008091A220882309F421C1C0919E23D09174 +:101CA0009F2300919F201091A020D801ED91FC91DD +:101CB0008481C81708F012C160E08C2FF9DC8823FA +:101CC00009F40CC1CE019927880F991FD8011296EB +:101CD000ED91FC911397E80FF91F0190F081E02D31 +:101CE00086819781FC0109958093A42061E070E0D2 +:101CF00084EA90E266D56FC1823009F0EFC080912E +:101D00009B238111E4C02230310509F0E7C08091A6 +:101D10009E23D3D590E080939B2090939C2062E0FB +:101D200070E08BE990E24DD556C18F7109F083C008 +:101D300090919B23933009F4CCC018F49130A1F01A +:101D40007AC0953019F0993039F175C08091A0238F +:101D50009091A123892B09F0C1C082E59BE080937B +:101D6000A6239093A72337C18091A0239091A1230C +:101D7000892B09F0B3C080919C2390919D230197FA +:101D800009F0ACC08091A6209091A7208D7F809310 +:101D9000A6209093A7201FC18091A0239091A123FA +:101DA000892B09F09BC00AD5882309F497C020919C +:101DB0009C2330919D233327E0911920F0911A2024 +:101DC000818990E08217930708F488C026DD80910E +:101DD0009C2390919D238093A220882309F4FBC02B +:101DE00099278150904C880F991F880F991FE09177 +:101DF0001B20F0911C20E80FF91FE0939F20F09327 +:101E0000A0200190F081E02D8481882309F4E3C0B3 +:101E1000C0E060E08C2FC8DC882309F45FC0CF5F8E +:101E2000E0919F20F091A0200190F081E02D84812D +:101E3000C81778F3D0C08130E1F490919B239B3098 +:101E4000C1F48091A0239091A123892B09F046C071 +:101E50008091A220882309F441C0EAE9F3E2C48119 +:101E6000D2818C2F5FDC8823C9F16D2F8C2F9CDCF5 +:101E700033C0823099F580919B23813019F08330F3 +:101E800089F029C08091A0239091A123892B31F55D +:101E900080919C2390919D23892B01F580919E2315 +:101EA00027D51AC08091A0239091A123892BB1F44A +:101EB00080919C2390919D23892B81F4CAE9D3E2E0 +:101EC0008C8105D68C8168D607C080E005C080E093 +:101ED00003C080E001C080E081117EC080919A2320 +:101EE0008F71813071F58091A220882351F100918A +:101EF0009E2310919F23C0919F20D091A020E88124 +:101F0000F98184810817E8F460E0802FD1DB882311 +:101F1000C1F0F801FF27CF01880F991FEA81FB81EB +:101F2000E80FF91FC081D181EE81FF810995682FEB +:101F3000802FBEDB882329F0EC81FD81099581117A +:101F40004BC080919A238F71823009F040C08091FC +:101F5000A2208823B1F1A0919F20B091A020ED9103 +:101F6000FC9111978481882371F1C0E0EC2FF0E09F +:101F7000EE0FFF1F12968D919C911397E80FF91F9A +:101F800000811181D8011696ED91FC911797099562 +:101F9000682F8C2F8DDB8823F9F0D8011496ED91F2 +:101FA000FC9115970995811117C0CF5FA0919F20D3 +:101FB000B091A020ED91FC9111979481C917B0F2D6 +:101FC0000BC080E009C080E007C080E005C080E071 +:101FD00003C081E001C081E0DF91CF911F910F919B +:101FE00008951BBEFC0128ED24BF60830895CF93A4 +:101FF000DF939C01DB01E0ECF1E097859923ECF3A2 +:10200000CCECD1E0988198609883B901705FCD01E4 +:10201000B9D78881877F8883DF91CF910895E0ECDD +:10202000F1E097859923ECF3ACECB1E09C919860DA +:102030009C93E82FF0E0F05F60838C91877F8C9316 +:102040000895EF92FF920F931F93CF93DF938C012C +:10205000E0ECF1E087858823ECF3780180E2E80E7C +:10206000F11CE8018C2F801B6991D9DFCE15DF05AB +:10207000C9F7DF91CF911F910F91FF90EF900895D5 +:102080001F93CF93DF93E0ECF1E097859923ECF376 +:1020900020E2829FC0011124C0ECD1E01A82998312 +:1020A00088831A8585E38A8761E08BEC91E099DF6C +:1020B0001A87DF91CF911F9108954091CA01E62FB1 +:1020C000F72F8093CA0184914093CA01089581112A +:1020D00022C090916C219923D9F09091CB2B911132 +:1020E00001C0FFCF2FB7F894EAECFBE29181915049 +:1020F00091832FBF0DC09091CB2B9F3F09F4FFCF51 +:102100002FB7F894EAECFBE291819F5F91832FBF98 +:1021100080936C21089590916C21992361F3F8CFFD +:102120000F93E8ECF4E080818F7D808380818F7D48 +:102130008083E0E5F1E202E00593109252211092D3 +:10214000532100E2069300E40693E8E4F1E200E2A2 +:10215000069300E40693EAE9F3E2148615861686F0 +:1021600017861286138610923F210F9108950F93C0 +:1021700085E080933F21E1E5F1E204E00593E9E4A5 +:10218000F1E204E005930F9108950F9383E08093AB +:102190003F211092522110925321E0E5F1E202E03A +:1021A00006930F910895E091A623F091A72330970D +:1021B00009F0099508950F93CF93DF9380913F2104 +:1021C000833019F4F0DFACDF5EC080913B21909149 +:1021D0003C21C091A423D091A523C81BD90B71F534 +:1021E00020913D2130913E21820F931F80933D210C +:1021F00090933E212091A0233091A1238217930731 +:1022000021F08091A820882341F084E080933F2131 +:10221000E8E4F1E202E0069336C0E091A823F091F1 +:10222000A923309799F00995882381F010923B21DA +:1022300010923C21C091A423D091A523C034D10594 +:1022400028F01092A820C0E4D0E003C081E0809381 +:10225000A820E0E4F1E2C28BD38B80913B219091E6 +:102260003C212091A2233091A323280F391F248BD6 +:10227000358BC80FD91FC0933B21D0933C21E0E59B +:10228000F1E202E00693DF91CF910F910895FC01F6 +:102290008181E82FE7708E2F90E0FC013197E730C5 +:1022A000F105C0F4E15EFE4F67C680E190E008955D +:1022B00080E290E0089580E490E0089580E890E066 +:1022C000089580E091E0089580E092E008958FEF16 +:1022D00093E0089588E090E00895282F2F7030E073 +:1022E000220F331F082E000C990B8827990F881F87 +:1022F0009927820F931F02979C01220F331F220FF1 +:10230000331F220F331F820F931F87519F4D089554 +:102310000F93CF938091CC0480FF62C081E08093C3 +:10232000CC04E8E4F1E200E80693E0E5F1E200E83D +:1023300006938093CA04E8E4F1E200E106938091F9 +:102340003F21882329F08350823008F42CDFE8DE17 +:1023500080914A2190914B21089709F043C088E071 +:10236000EBEFF0E2AAE9B3E201900D928A95E1F772 +:10237000E8ECF4E0808180628083808180628083E9 +:10238000A1DAC82F811103C0F2DEC1E02CC0809118 +:102390009A2388236CF410923D2110923E211092D2 +:1023A0003B2110923C2182E080933F2104DF1BC03F +:1023B0008091A0239091A123892B11F4E6DE13C014 +:1023C00010923D2110923E2110923B2110923C210F +:1023D00081E080933F21E8E4F1E202E0069303C04C +:1023E000C0E001C0C1E08C2FCF910F9108958F9272 +:1023F0009F92AF92BF92DF92EF92FF920F931F9343 +:10240000CF93DF93D82E69DF8C01BD2CBB1CBB247E +:10241000BB1CCD2DCF70D0E0CC0FDD1FCB0DD11D5F +:10242000CE01880F991F880F991F880F991F9C0153 +:10243000285B3E4D7901C9012ADF4C01BB2009F41C +:1024400070C0FE01EE0FFF1FEE0FFF1FEE0FFF1F0C +:10245000E05CFE4D26853785D80115968D919C91BF +:102460001697820F931F15968D939C93169713962C +:102470002D913C9114978217930709F43CC0281BB7 +:10248000390B2115B4E03B0738F02FEF33E0C901D9 +:10249000B4014BD5281B390BF801808181FF09C09D +:1024A000C901B40142D541E0892B09F040E0842FF5 +:1024B00001C080E0D8019C9180FB91F99C93CC0FE6 +:1024C000DD1FCC0FDD1FCC0FDD1FC05CDE4D1E8677 +:1024D0001F862A873B8711962D913C91129715965E +:1024E0008D919C911697820F931F8C879D87F70182 +:1024F00002E00693CAC0D8018C9181FFB3C08D7FE2 +:102500008C93CC0FDD1FCC0FDD1FCC0FDD1FC05C0B +:10251000DE4D1E861F861A861B86F70102E0069393 +:10252000B4C0FE01EE0FFF1FEE0FFF1FEE0FFF1FE7 +:10253000E05CFE4DA284B384D8018C9182FF19C067 +:102540001196ED91FC91129715962D913C9116974D +:1025500013968D919C911497B401E7D4B0E4DB9E5F +:10256000B001112467597F4DAC01CF01820F931F39 +:1025700009D5F801258136812A0D3B1D2583368337 +:10258000838194818217930768F485839683CC0FA7 +:10259000DD1FCC0FDD1FCC0FDD1FC05CDE4D8E8537 +:1025A0009F8560C0FE01EE0FFF1FEE0FFF1FEE0FB5 +:1025B000FF1FE05CFE4D468557854A155B0509F017 +:1025C00051C02817390709F44DC0AC01421B530B09 +:1025D0009A01211554E0350750F02FEF33E0C9017F +:1025E000B401A3D4D901A81BB90BCD0107C0C901FF +:1025F000B4019BD4F901E81BF90BCF01FE01EE0FEA +:10260000FF1FEE0FFF1FEE0FFF1FE05CFE4D128657 +:1026100013868815990578F4D8018C9184608C9381 +:10262000B0E4DB9EC001112487599F4D84879587B4 +:102630008686978613C0F8014181528125813681B3 +:10264000240F351FCC0FDD1FCC0FDD1FCC0FDD1F7E +:10265000C05CDE4D2C873D878E879F87F70102E0A7 +:10266000069313C0D8018C9180FF0FC08E7F8C938E +:102670001796ED91FC911897309739F015966D915A +:102680007C9116974D2D80E00995DF91CF911F9198 +:102690000F91FF90EF90DF90BF90AF909F908F9041 +:1026A0000895CF93CFB7F89481E011DDEAECF4E020 +:1026B00080E4808380E28083E1ECF4E080818160CB +:1026C0008083A9ECB4E08C9182608C93E8ECF4E018 +:1026D0008081806480838C9181608C93808180680C +:1026E0008083CFBFCF910895CF93DF93C0E6D0E032 +:1026F000188280E30E94AF0AE0ECF4E080818064FD +:10270000808381E08883CFB7F894E0E4F1E211861A +:10271000118A118E11A2E9EEF0E280818E7F808312 +:10272000E2EFF0E280818E7F80836AE170E082E0F8 +:10273000C4DC8F3F19F08093FA0403C08FE18093CB +:10274000FA046BE170E082E0B8DC8F3F19F080930F +:10275000FB0403C08FE18093FB04E0ECF4E0808194 +:1027600081608083808180688083808180618083B4 +:1027700088E491E2868397838081806280838FEFF3 +:102780008093C504E8ECF4E080818260808310923D +:102790006C218091CF2B8F3F09F4FFCF9FB7F89426 +:1027A000EAECFBE285818F5F85839FBF7ADFCFBF35 +:1027B000DF91CF9108958093C30408958091C3045D +:1027C0000895EAE9F3E28087918762877387089525 +:1027D000282F2F7030E0220F331F082E000C990B8A +:1027E0008827990F881F9927820F931FFC01EE0FEE +:1027F000FF1FEE0FFF1FEE0FFF1FE05CFE4D218558 +:10280000207C09F058C06370613011F018F404C0E6 +:1028100020EC03C020E801C020E440385105E9F075 +:1028200050F440325105A9F040345105A1F0403137 +:102830005105D9F40CC0411532E0530791F04F3FD8 +:1028400033E0530781F04115514079F408C041E06D +:102850000DC042E00BC043E009C044E007C045E0C2 +:1028600005C046E003C047E001C040E0FC01EE0FB8 +:10287000FF1FEE0FFF1FEE0FFF1FE05CFE4D1186E6 +:10288000DC01AA0FBB1FAA0FBB1FAA0FBB1FA85BAF +:10289000BE4D36E03C93242B2187880F991F880F6B +:1028A000991F880F991FFC01E05CFE4D81858062B5 +:1028B000818781E0089580E00895E82FEF70F0E0CF +:1028C000EE0FFF1F082E000C990B8827990F881F09 +:1028D0009927E80FF91FEE0FFF1FEE0FFF1FEE0FF6 +:1028E000FF1FE05CFE4D818582FB882780F90895FB +:1028F000282F2F7030E0A901440F551F282F082ED4 +:10290000000C330B2227330F221F3327240F351FD0 +:10291000F901EE0FFF1FEE0FFF1FEE0FFF1FE05C30 +:10292000FE4D918592FF17C0220F331F220F331FD8 +:10293000220F331FF901E05CFE4D91859B7F91874B +:10294000CCDCFC01808180FF06C08E7F8083078005 +:10295000F085E02D099581E008957F928F929F92F6 +:10296000AF92BF92CF92DF92EF92FF920F931F939D +:10297000CF93DF93982E862E6A017901AEDC5C013D +:10298000792C771C7724771CC92DCF70D0E0CC0F21 +:10299000DD1FC70DD11DFE01EE0FFF1FEE0FFF1F44 +:1029A000EE0FFF1FE05CFE4D8185807C09F47DC049 +:1029B000FE01EE0FFF1FEE0FFF1FEE0FFF1FE05C8B +:1029C000FE4D8185807C803C61F0FE01EE0FFF1F93 +:1029D000EE0FFF1FEE0FFF1FE05CFE4D818582FDB5 +:1029E00066C08FB7F894F501908190FF03C08FBF48 +:1029F000712C5EC0F5019081916090838FBFC18280 +:102A0000D282E382F48215821682078310878110B6 +:102A100006C091E0E114F10419F090E001C091E0EA +:102A2000F501808190FB81F98B7F8083772059F0BD +:102A3000CC0FDD1FCC0FDD1FCC0FDD1FC05CDE4DCA +:102A40001E861F862DC0FE01EE0FFF1FEE0FFF1F1B +:102A5000EE0FFF1FE05CFE4D8185807C803CA1F481 +:102A6000CE01880F991F880F991F880F991F885BC7 +:102A70009E4D0DDCBC01C70158D2892B29F0F50110 +:102A800080818E7F808314C0CC0FDD1FCC0FDD1FB3 +:102A9000CC0FDD1FC05CDE4D1A861B861E861F868E +:102AA000892DA5DC7724739403C0712C01C0712C8F +:102AB000872DDF91CF911F910F91FF90EF90DF90C5 +:102AC000CF90BF90AF909F908F907F900895FF928E +:102AD0000F931F93CF93DF93182FF82EFF1CFF2423 +:102AE000FF1CC82FCF70D0E0CC0FDD1FCF0DD11D44 +:102AF000F4DBDC01FE01EE0FFF1FEE0FFF1FEE0FF8 +:102B0000FF1FE85BFE4D02E005938C9180FF22C021 +:102B10008E7F8C931796ED91FC9118973097D1F09A +:102B2000FF2059F0CC0FDD1FCC0FDD1FCC0FDD1FB8 +:102B3000C05CDE4D6E857F850AC0CC0FDD1FCC0FDB +:102B4000DD1FCC0FDD1FC05CDE4D6A857B85412F0C +:102B500081E00995DF91CF911F910F91FF9008952A +:102B6000CF93C82FB4DFEC2FEF70F0E0EE0FFF1F14 +:102B70008C2FCC0F990B8827990F881F9927E80F66 +:102B8000F91FEE0FFF1FEE0FFF1FEE0FFF1FE05CA0 +:102B9000FE4D1186CF9108950F93E82FEF70F0E06E +:102BA000EE0FFF1F282F082E000C330B2227330FA8 +:102BB000221F3327E20FF31FDF01AA0FBB1FAA0F4B +:102BC000BB1FAA0FBB1FA05CBE4D19969C91199705 +:102BD000946019969C93EE0FFF1FEE0FFF1FEE0FF0 +:102BE000FF1FE85BFE4D01E0069371DF81E00F916E +:102BF00008951F920F920FB60F9211240F932F93E7 +:102C00003F934F935F936F937F938F939F93AF9374 +:102C1000BF93EF93FF938091CB04882344F480E823 +:102C20008093CA040E94320C0E94350482C08091B5 +:102C3000CB0482FF20C084E08093CA04809150219D +:102C400086FF77C08091CC0481FD73C061DB811168 +:102C500070C080913F21813011F497DA6AC08430CE +:102C600009F067C0E1E5F1E204E00593E9E4F1E28F +:102C700004E005935EC08091CB0481FF55C082E0E3 +:102C80008093CA048091482186FF53C08091CC0470 +:102C900081FD4FC03DDB81114CC080913F218230CE +:102CA00041F484E080933F21E8E4F1E202E00693FE +:102CB00040C0833009F03DC0E1E5F1E204E0059356 +:102CC000E9E4F1E204E0059334C080E18093CA04B2 +:102CD0000E940D0C1092C304E0E4F1E2118696E02C +:102CE000908783E48187118A908B818B8BEF90E2B0 +:102CF0008487958715DA1DC08091CB0486FF08C0B4 +:102D000080E48093CA0480E0E2D90E94330411C0B9 +:102D10008091CB0485FF0DC080E28093CA0481E0DE +:102D2000D6D90E94340405C08091CB0484FFE4CF3F +:102D3000CCCFFF91EF91BF91AF919F918F917F91F8 +:102D40006F915F914F913F912F910F910F900FBE17 +:102D50000F901F9018951F920F920FB60F9211248B +:102D60000F931F932F933F934F935F936F937F9393 +:102D70008F939F93AF93BF93CF93DF93EF93FF9383 +:102D80008091CC0481FD03C0C3DA8111B9C082E017 +:102D90008093CC048091C5048195880FE8E4F1E22A +:102DA000E81BF1092081318128543142369527955D +:102DB0003695279536952795822F869520FD02C05A +:102DC00090E001C090E8890FE82FEF70F0E0EE0F7F +:102DD000FF1F282F082E000C330B2227330F221F32 +:102DE0003327E20FF31FDF01AA0FBB1FAA0FBB1F80 +:102DF000AA0FBB1FA85BBE4D9C9195FF81C0FD0132 +:102E000000E20693811177C080913F21843019F44C +:102E1000CAD986D975C000914A2110914B21809161 +:102E2000A4239091A523C0913B21D0913C219E01E8 +:102E3000200F311F8217930718F48C010C1B1D0BF8 +:102E40008091A2239091A323A8016BEF70E28C0FD5 +:102E50009D1F98D0C00FD11FC0933B21D0933C2120 +:102E60000034110569F480913D2190913E218C0F31 +:102E70009D1F2091A0233091A1238217930780F0FA +:102E8000EAE9F3E2C287D3870684F785E02D30971D +:102E900029F00995811102C06AD932C076D930C0B3 +:102EA0008091A4239091A523C817D907F9F4E09144 +:102EB000A823F091A923309711F459D921C009957D +:102EC000811102C054D91CC020913D2130913E2176 +:102ED00080913B2190913C21820F931F80933D2153 +:102EE00090933E2110923B2110923C21E8E4F1E2C4 +:102EF00002E0069305C0803811F45DD901C077DA8D +:102F0000FF91EF91DF91CF91BF91AF919F918F9101 +:102F10007F916F915F914F913F912F911F910F91F1 +:102F20000F900FBE0F901F901895AA1BBB1B51E16D +:102F300007C0AA1FBB1FA617B70710F0A61BB70B29 +:102F4000881F991F5A95A9F780959095BC01CD01CE +:102F5000089597FB072E16F4009406D077FD08D04D +:102F6000E4DF07FC05D03EF4909581959F4F0895CE +:102F7000709561957F4F0895EE0FFF1F0590F491B6 +:102F8000E02D0994FB01DC0102C001900D9241503B +:0A2F90005040D8F70895F894FFCFE1 +:102F9A0040000CE02E0AFFFFFFFF5580008000E989 +:102FAA000AF40AFA0AE60A000044201F2000002850 +:102FBA002023200F200000000902190001010080CF +:102FCA00FA0904000001FFFFFF0007058101FF0362 +:102FDA00010000001201000200000040EB0394BA55 +:102FEA0000020102000100000003000000000000CE +:102FFA00000000000000000000004C616272616481 +:10300A006F72004573706F54656B00000403090406 +:0C301A006465627567313233000002000B :00000001FF diff --git a/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.lss b/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.lss index c9e5f84f..98bf7446 100644 --- a/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.lss +++ b/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.lss @@ -3,1163 +3,1144 @@ USB_BULK_TEST.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn - 0 .text 00002f3e 00000000 00000000 00000094 2**1 + 0 .text 00002f9a 00000000 00000000 00000094 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE - 1 .data 0000008c 00802000 00002f3e 00002fd4 2**2 + 1 .data 0000008c 00802000 00002f9a 00003030 2**2 CONTENTS, ALLOC, LOAD, DATA - 2 .bss 00000b44 0080208c 0080208c 00003060 2**2 + 2 .bss 00000b44 0080208c 0080208c 000030bc 2**2 ALLOC - 3 .comment 00000030 00000000 00000000 00003060 2**0 + 3 .comment 00000030 00000000 00000000 000030bc 2**0 CONTENTS, READONLY - 4 .note.gnu.avr.deviceinfo 00000040 00000000 00000000 00003090 2**2 + 4 .note.gnu.avr.deviceinfo 00000040 00000000 00000000 000030ec 2**2 CONTENTS, READONLY - 5 .debug_aranges 00000600 00000000 00000000 000030d0 2**3 + 5 .debug_aranges 00000600 00000000 00000000 00003130 2**3 CONTENTS, READONLY, DEBUGGING - 6 .debug_info 0000db18 00000000 00000000 000036d0 2**0 + 6 .debug_info 0000db75 00000000 00000000 00003730 2**0 CONTENTS, READONLY, DEBUGGING - 7 .debug_abbrev 000024be 00000000 00000000 000111e8 2**0 + 7 .debug_abbrev 000024f0 00000000 00000000 000112a5 2**0 CONTENTS, READONLY, DEBUGGING - 8 .debug_line 0000ac63 00000000 00000000 000136a6 2**0 + 8 .debug_line 0000aced 00000000 00000000 00013795 2**0 CONTENTS, READONLY, DEBUGGING - 9 .debug_frame 00000f28 00000000 00000000 0001e30c 2**2 + 9 .debug_frame 00000f30 00000000 00000000 0001e484 2**2 CONTENTS, READONLY, DEBUGGING - 10 .debug_str 00030168 00000000 00000000 0001f234 2**0 + 10 .debug_str 00030168 00000000 00000000 0001f3b4 2**0 CONTENTS, READONLY, DEBUGGING - 11 .debug_loc 000037be 00000000 00000000 0004f39c 2**0 + 11 .debug_loc 000037a1 00000000 00000000 0004f51c 2**0 CONTENTS, READONLY, DEBUGGING - 12 .debug_ranges 00000518 00000000 00000000 00052b60 2**3 + 12 .debug_ranges 00000518 00000000 00000000 00052cc0 2**3 CONTENTS, READONLY, DEBUGGING - 13 .debug_macro 0000c3d5 00000000 00000000 00053078 2**0 + 13 .debug_macro 0000c3d5 00000000 00000000 000531d8 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: 00000000 <__vectors>: - 0: 1d c1 rjmp .+570 ; 0x23c <__ctors_end> + 0: 25 c1 rjmp .+586 ; 0x24c <__ctors_end> 2: 00 00 nop - 4: 37 c1 rjmp .+622 ; 0x274 <__bad_interrupt> + 4: 3f c1 rjmp .+638 ; 0x284 <__bad_interrupt> 6: 00 00 nop - 8: 35 c1 rjmp .+618 ; 0x274 <__bad_interrupt> + 8: 3d c1 rjmp .+634 ; 0x284 <__bad_interrupt> a: 00 00 nop - c: 33 c1 rjmp .+614 ; 0x274 <__bad_interrupt> + c: 3b c1 rjmp .+630 ; 0x284 <__bad_interrupt> e: 00 00 nop - 10: 31 c1 rjmp .+610 ; 0x274 <__bad_interrupt> + 10: 39 c1 rjmp .+626 ; 0x284 <__bad_interrupt> 12: 00 00 nop - 14: 2f c1 rjmp .+606 ; 0x274 <__bad_interrupt> + 14: 37 c1 rjmp .+622 ; 0x284 <__bad_interrupt> 16: 00 00 nop - 18: 0c 94 21 09 jmp 0x1242 ; 0x1242 <__vector_6> - 1c: 0c 94 4b 09 jmp 0x1296 ; 0x1296 <__vector_7> - 20: 29 c1 rjmp .+594 ; 0x274 <__bad_interrupt> + 18: 0c 94 1f 09 jmp 0x123e ; 0x123e <__vector_6> + 1c: 0c 94 76 09 jmp 0x12ec ; 0x12ec <__vector_7> + 20: 31 c1 rjmp .+610 ; 0x284 <__bad_interrupt> 22: 00 00 nop - 24: 27 c1 rjmp .+590 ; 0x274 <__bad_interrupt> + 24: 2f c1 rjmp .+606 ; 0x284 <__bad_interrupt> 26: 00 00 nop - 28: 25 c1 rjmp .+586 ; 0x274 <__bad_interrupt> + 28: 2d c1 rjmp .+602 ; 0x284 <__bad_interrupt> 2a: 00 00 nop - 2c: 23 c1 rjmp .+582 ; 0x274 <__bad_interrupt> + 2c: 2b c1 rjmp .+598 ; 0x284 <__bad_interrupt> 2e: 00 00 nop - 30: 21 c1 rjmp .+578 ; 0x274 <__bad_interrupt> + 30: 29 c1 rjmp .+594 ; 0x284 <__bad_interrupt> 32: 00 00 nop - 34: 1f c1 rjmp .+574 ; 0x274 <__bad_interrupt> + 34: 27 c1 rjmp .+590 ; 0x284 <__bad_interrupt> 36: 00 00 nop - 38: 1d c1 rjmp .+570 ; 0x274 <__bad_interrupt> + 38: 25 c1 rjmp .+586 ; 0x284 <__bad_interrupt> 3a: 00 00 nop - 3c: 1b c1 rjmp .+566 ; 0x274 <__bad_interrupt> + 3c: 23 c1 rjmp .+582 ; 0x284 <__bad_interrupt> 3e: 00 00 nop - 40: 19 c1 rjmp .+562 ; 0x274 <__bad_interrupt> + 40: 21 c1 rjmp .+578 ; 0x284 <__bad_interrupt> 42: 00 00 nop - 44: 17 c1 rjmp .+558 ; 0x274 <__bad_interrupt> + 44: 1f c1 rjmp .+574 ; 0x284 <__bad_interrupt> 46: 00 00 nop - 48: 15 c1 rjmp .+554 ; 0x274 <__bad_interrupt> + 48: 1d c1 rjmp .+570 ; 0x284 <__bad_interrupt> 4a: 00 00 nop - 4c: 13 c1 rjmp .+550 ; 0x274 <__bad_interrupt> + 4c: 1b c1 rjmp .+566 ; 0x284 <__bad_interrupt> 4e: 00 00 nop - 50: 11 c1 rjmp .+546 ; 0x274 <__bad_interrupt> + 50: 19 c1 rjmp .+562 ; 0x284 <__bad_interrupt> 52: 00 00 nop - 54: 0f c1 rjmp .+542 ; 0x274 <__bad_interrupt> + 54: 17 c1 rjmp .+558 ; 0x284 <__bad_interrupt> 56: 00 00 nop - 58: 0d c1 rjmp .+538 ; 0x274 <__bad_interrupt> + 58: 15 c1 rjmp .+554 ; 0x284 <__bad_interrupt> 5a: 00 00 nop - 5c: 0b c1 rjmp .+534 ; 0x274 <__bad_interrupt> + 5c: 13 c1 rjmp .+550 ; 0x284 <__bad_interrupt> 5e: 00 00 nop - 60: 0c 94 59 0a jmp 0x14b2 ; 0x14b2 <__vector_24> - 64: 0c 94 64 0a jmp 0x14c8 ; 0x14c8 <__vector_25> - 68: 05 c1 rjmp .+522 ; 0x274 <__bad_interrupt> + 60: 0c 94 84 0a jmp 0x1508 ; 0x1508 <__vector_24> + 64: 0c 94 8f 0a jmp 0x151e ; 0x151e <__vector_25> + 68: 0d c1 rjmp .+538 ; 0x284 <__bad_interrupt> 6a: 00 00 nop - 6c: 03 c1 rjmp .+518 ; 0x274 <__bad_interrupt> + 6c: 0b c1 rjmp .+534 ; 0x284 <__bad_interrupt> 6e: 00 00 nop - 70: 01 c1 rjmp .+514 ; 0x274 <__bad_interrupt> + 70: 09 c1 rjmp .+530 ; 0x284 <__bad_interrupt> 72: 00 00 nop - 74: ff c0 rjmp .+510 ; 0x274 <__bad_interrupt> + 74: 07 c1 rjmp .+526 ; 0x284 <__bad_interrupt> 76: 00 00 nop - 78: fd c0 rjmp .+506 ; 0x274 <__bad_interrupt> + 78: 05 c1 rjmp .+522 ; 0x284 <__bad_interrupt> 7a: 00 00 nop - 7c: fb c0 rjmp .+502 ; 0x274 <__bad_interrupt> + 7c: 03 c1 rjmp .+518 ; 0x284 <__bad_interrupt> 7e: 00 00 nop - 80: f9 c0 rjmp .+498 ; 0x274 <__bad_interrupt> + 80: 01 c1 rjmp .+514 ; 0x284 <__bad_interrupt> 82: 00 00 nop - 84: f7 c0 rjmp .+494 ; 0x274 <__bad_interrupt> + 84: ff c0 rjmp .+510 ; 0x284 <__bad_interrupt> 86: 00 00 nop - 88: f5 c0 rjmp .+490 ; 0x274 <__bad_interrupt> + 88: fd c0 rjmp .+506 ; 0x284 <__bad_interrupt> 8a: 00 00 nop - 8c: f3 c0 rjmp .+486 ; 0x274 <__bad_interrupt> + 8c: fb c0 rjmp .+502 ; 0x284 <__bad_interrupt> 8e: 00 00 nop - 90: f1 c0 rjmp .+482 ; 0x274 <__bad_interrupt> + 90: f9 c0 rjmp .+498 ; 0x284 <__bad_interrupt> 92: 00 00 nop - 94: ef c0 rjmp .+478 ; 0x274 <__bad_interrupt> + 94: f7 c0 rjmp .+494 ; 0x284 <__bad_interrupt> 96: 00 00 nop - 98: ed c0 rjmp .+474 ; 0x274 <__bad_interrupt> + 98: f5 c0 rjmp .+490 ; 0x284 <__bad_interrupt> 9a: 00 00 nop - 9c: eb c0 rjmp .+470 ; 0x274 <__bad_interrupt> + 9c: f3 c0 rjmp .+486 ; 0x284 <__bad_interrupt> 9e: 00 00 nop - a0: e9 c0 rjmp .+466 ; 0x274 <__bad_interrupt> + a0: f1 c0 rjmp .+482 ; 0x284 <__bad_interrupt> a2: 00 00 nop - a4: e7 c0 rjmp .+462 ; 0x274 <__bad_interrupt> + a4: ef c0 rjmp .+478 ; 0x284 <__bad_interrupt> a6: 00 00 nop - a8: e5 c0 rjmp .+458 ; 0x274 <__bad_interrupt> + a8: ed c0 rjmp .+474 ; 0x284 <__bad_interrupt> aa: 00 00 nop - ac: e3 c0 rjmp .+454 ; 0x274 <__bad_interrupt> + ac: eb c0 rjmp .+470 ; 0x284 <__bad_interrupt> ae: 00 00 nop - b0: e1 c0 rjmp .+450 ; 0x274 <__bad_interrupt> + b0: e9 c0 rjmp .+466 ; 0x284 <__bad_interrupt> b2: 00 00 nop - b4: df c0 rjmp .+446 ; 0x274 <__bad_interrupt> + b4: e7 c0 rjmp .+462 ; 0x284 <__bad_interrupt> b6: 00 00 nop - b8: dd c0 rjmp .+442 ; 0x274 <__bad_interrupt> + b8: e5 c0 rjmp .+458 ; 0x284 <__bad_interrupt> ba: 00 00 nop - bc: db c0 rjmp .+438 ; 0x274 <__bad_interrupt> + bc: e3 c0 rjmp .+454 ; 0x284 <__bad_interrupt> be: 00 00 nop - c0: d9 c0 rjmp .+434 ; 0x274 <__bad_interrupt> + c0: e1 c0 rjmp .+450 ; 0x284 <__bad_interrupt> c2: 00 00 nop - c4: d7 c0 rjmp .+430 ; 0x274 <__bad_interrupt> + c4: df c0 rjmp .+446 ; 0x284 <__bad_interrupt> c6: 00 00 nop - c8: d5 c0 rjmp .+426 ; 0x274 <__bad_interrupt> + c8: dd c0 rjmp .+442 ; 0x284 <__bad_interrupt> ca: 00 00 nop - cc: d3 c0 rjmp .+422 ; 0x274 <__bad_interrupt> + cc: db c0 rjmp .+438 ; 0x284 <__bad_interrupt> ce: 00 00 nop - d0: d1 c0 rjmp .+418 ; 0x274 <__bad_interrupt> + d0: d9 c0 rjmp .+434 ; 0x284 <__bad_interrupt> d2: 00 00 nop - d4: cf c0 rjmp .+414 ; 0x274 <__bad_interrupt> + d4: d7 c0 rjmp .+430 ; 0x284 <__bad_interrupt> d6: 00 00 nop - d8: cd c0 rjmp .+410 ; 0x274 <__bad_interrupt> + d8: d5 c0 rjmp .+426 ; 0x284 <__bad_interrupt> da: 00 00 nop - dc: cb c0 rjmp .+406 ; 0x274 <__bad_interrupt> + dc: d3 c0 rjmp .+422 ; 0x284 <__bad_interrupt> de: 00 00 nop - e0: c9 c0 rjmp .+402 ; 0x274 <__bad_interrupt> + e0: d1 c0 rjmp .+418 ; 0x284 <__bad_interrupt> e2: 00 00 nop - e4: c7 c0 rjmp .+398 ; 0x274 <__bad_interrupt> + e4: cf c0 rjmp .+414 ; 0x284 <__bad_interrupt> e6: 00 00 nop - e8: c5 c0 rjmp .+394 ; 0x274 <__bad_interrupt> + e8: cd c0 rjmp .+410 ; 0x284 <__bad_interrupt> ea: 00 00 nop - ec: c3 c0 rjmp .+390 ; 0x274 <__bad_interrupt> + ec: cb c0 rjmp .+406 ; 0x284 <__bad_interrupt> ee: 00 00 nop - f0: c1 c0 rjmp .+386 ; 0x274 <__bad_interrupt> + f0: c9 c0 rjmp .+402 ; 0x284 <__bad_interrupt> f2: 00 00 nop - f4: bf c0 rjmp .+382 ; 0x274 <__bad_interrupt> + f4: c7 c0 rjmp .+398 ; 0x284 <__bad_interrupt> f6: 00 00 nop - f8: bd c0 rjmp .+378 ; 0x274 <__bad_interrupt> + f8: c5 c0 rjmp .+394 ; 0x284 <__bad_interrupt> fa: 00 00 nop - fc: bb c0 rjmp .+374 ; 0x274 <__bad_interrupt> + fc: c3 c0 rjmp .+390 ; 0x284 <__bad_interrupt> fe: 00 00 nop - 100: b9 c0 rjmp .+370 ; 0x274 <__bad_interrupt> + 100: c1 c0 rjmp .+386 ; 0x284 <__bad_interrupt> 102: 00 00 nop - 104: b7 c0 rjmp .+366 ; 0x274 <__bad_interrupt> + 104: bf c0 rjmp .+382 ; 0x284 <__bad_interrupt> 106: 00 00 nop - 108: b5 c0 rjmp .+362 ; 0x274 <__bad_interrupt> + 108: bd c0 rjmp .+378 ; 0x284 <__bad_interrupt> 10a: 00 00 nop - 10c: b3 c0 rjmp .+358 ; 0x274 <__bad_interrupt> + 10c: bb c0 rjmp .+374 ; 0x284 <__bad_interrupt> 10e: 00 00 nop - 110: b1 c0 rjmp .+354 ; 0x274 <__bad_interrupt> + 110: b9 c0 rjmp .+370 ; 0x284 <__bad_interrupt> 112: 00 00 nop - 114: af c0 rjmp .+350 ; 0x274 <__bad_interrupt> + 114: b7 c0 rjmp .+366 ; 0x284 <__bad_interrupt> 116: 00 00 nop - 118: ad c0 rjmp .+346 ; 0x274 <__bad_interrupt> + 118: b5 c0 rjmp .+362 ; 0x284 <__bad_interrupt> 11a: 00 00 nop - 11c: b0 c4 rjmp .+2400 ; 0xa7e <__vector_71> + 11c: a6 c4 rjmp .+2380 ; 0xa6a <__vector_71> 11e: 00 00 nop - 120: a9 c0 rjmp .+338 ; 0x274 <__bad_interrupt> + 120: b1 c0 rjmp .+354 ; 0x284 <__bad_interrupt> 122: 00 00 nop - 124: a7 c0 rjmp .+334 ; 0x274 <__bad_interrupt> + 124: af c0 rjmp .+350 ; 0x284 <__bad_interrupt> 126: 00 00 nop - 128: a5 c0 rjmp .+330 ; 0x274 <__bad_interrupt> + 128: ad c0 rjmp .+346 ; 0x284 <__bad_interrupt> 12a: 00 00 nop - 12c: a3 c0 rjmp .+326 ; 0x274 <__bad_interrupt> + 12c: ab c0 rjmp .+342 ; 0x284 <__bad_interrupt> 12e: 00 00 nop - 130: a1 c0 rjmp .+322 ; 0x274 <__bad_interrupt> + 130: a9 c0 rjmp .+338 ; 0x284 <__bad_interrupt> 132: 00 00 nop - 134: 9f c0 rjmp .+318 ; 0x274 <__bad_interrupt> + 134: a7 c0 rjmp .+334 ; 0x284 <__bad_interrupt> 136: 00 00 nop - 138: 9d c0 rjmp .+314 ; 0x274 <__bad_interrupt> + 138: a5 c0 rjmp .+330 ; 0x284 <__bad_interrupt> 13a: 00 00 nop - 13c: 9b c0 rjmp .+310 ; 0x274 <__bad_interrupt> + 13c: a3 c0 rjmp .+326 ; 0x284 <__bad_interrupt> 13e: 00 00 nop - 140: 99 c0 rjmp .+306 ; 0x274 <__bad_interrupt> + 140: a1 c0 rjmp .+322 ; 0x284 <__bad_interrupt> 142: 00 00 nop - 144: 97 c0 rjmp .+302 ; 0x274 <__bad_interrupt> + 144: 9f c0 rjmp .+318 ; 0x284 <__bad_interrupt> 146: 00 00 nop - 148: 95 c0 rjmp .+298 ; 0x274 <__bad_interrupt> + 148: 9d c0 rjmp .+314 ; 0x284 <__bad_interrupt> 14a: 00 00 nop - 14c: 0c 94 b7 09 jmp 0x136e ; 0x136e <__vector_83> - 150: 91 c0 rjmp .+290 ; 0x274 <__bad_interrupt> + 14c: 0c 94 e2 09 jmp 0x13c4 ; 0x13c4 <__vector_83> + 150: 99 c0 rjmp .+306 ; 0x284 <__bad_interrupt> 152: 00 00 nop - 154: 8f c0 rjmp .+286 ; 0x274 <__bad_interrupt> + 154: 97 c0 rjmp .+302 ; 0x284 <__bad_interrupt> 156: 00 00 nop - 158: 8d c0 rjmp .+282 ; 0x274 <__bad_interrupt> + 158: 95 c0 rjmp .+298 ; 0x284 <__bad_interrupt> 15a: 00 00 nop - 15c: 8b c0 rjmp .+278 ; 0x274 <__bad_interrupt> + 15c: 93 c0 rjmp .+294 ; 0x284 <__bad_interrupt> 15e: 00 00 nop - 160: 89 c0 rjmp .+274 ; 0x274 <__bad_interrupt> + 160: 91 c0 rjmp .+290 ; 0x284 <__bad_interrupt> 162: 00 00 nop - 164: 87 c0 rjmp .+270 ; 0x274 <__bad_interrupt> + 164: 8f c0 rjmp .+286 ; 0x284 <__bad_interrupt> 166: 00 00 nop - 168: 85 c0 rjmp .+266 ; 0x274 <__bad_interrupt> + 168: 8d c0 rjmp .+282 ; 0x284 <__bad_interrupt> 16a: 00 00 nop - 16c: 83 c0 rjmp .+262 ; 0x274 <__bad_interrupt> + 16c: 8b c0 rjmp .+278 ; 0x284 <__bad_interrupt> 16e: 00 00 nop - 170: 81 c0 rjmp .+258 ; 0x274 <__bad_interrupt> + 170: 89 c0 rjmp .+274 ; 0x284 <__bad_interrupt> 172: 00 00 nop - 174: 7f c0 rjmp .+254 ; 0x274 <__bad_interrupt> + 174: 87 c0 rjmp .+270 ; 0x284 <__bad_interrupt> 176: 00 00 nop - 178: 7d c0 rjmp .+250 ; 0x274 <__bad_interrupt> + 178: 85 c0 rjmp .+266 ; 0x284 <__bad_interrupt> 17a: 00 00 nop - 17c: 7b c0 rjmp .+246 ; 0x274 <__bad_interrupt> + 17c: 83 c0 rjmp .+262 ; 0x284 <__bad_interrupt> 17e: 00 00 nop - 180: 79 c0 rjmp .+242 ; 0x274 <__bad_interrupt> + 180: 81 c0 rjmp .+258 ; 0x284 <__bad_interrupt> 182: 00 00 nop - 184: 77 c0 rjmp .+238 ; 0x274 <__bad_interrupt> + 184: 7f c0 rjmp .+254 ; 0x284 <__bad_interrupt> 186: 00 00 nop - 188: 75 c0 rjmp .+234 ; 0x274 <__bad_interrupt> + 188: 7d c0 rjmp .+250 ; 0x284 <__bad_interrupt> 18a: 00 00 nop - 18c: 73 c0 rjmp .+230 ; 0x274 <__bad_interrupt> + 18c: 7b c0 rjmp .+246 ; 0x284 <__bad_interrupt> 18e: 00 00 nop - 190: 71 c0 rjmp .+226 ; 0x274 <__bad_interrupt> + 190: 79 c0 rjmp .+242 ; 0x284 <__bad_interrupt> 192: 00 00 nop - 194: 6f c0 rjmp .+222 ; 0x274 <__bad_interrupt> + 194: 77 c0 rjmp .+238 ; 0x284 <__bad_interrupt> 196: 00 00 nop - 198: 6d c0 rjmp .+218 ; 0x274 <__bad_interrupt> + 198: 75 c0 rjmp .+234 ; 0x284 <__bad_interrupt> 19a: 00 00 nop - 19c: 6b c0 rjmp .+214 ; 0x274 <__bad_interrupt> + 19c: 73 c0 rjmp .+230 ; 0x284 <__bad_interrupt> 19e: 00 00 nop - 1a0: 69 c0 rjmp .+210 ; 0x274 <__bad_interrupt> + 1a0: 71 c0 rjmp .+226 ; 0x284 <__bad_interrupt> 1a2: 00 00 nop - 1a4: 67 c0 rjmp .+206 ; 0x274 <__bad_interrupt> + 1a4: 6f c0 rjmp .+222 ; 0x284 <__bad_interrupt> 1a6: 00 00 nop - 1a8: 65 c0 rjmp .+202 ; 0x274 <__bad_interrupt> + 1a8: 6d c0 rjmp .+218 ; 0x284 <__bad_interrupt> 1aa: 00 00 nop - 1ac: 63 c0 rjmp .+198 ; 0x274 <__bad_interrupt> + 1ac: 6b c0 rjmp .+214 ; 0x284 <__bad_interrupt> 1ae: 00 00 nop - 1b0: 61 c0 rjmp .+194 ; 0x274 <__bad_interrupt> + 1b0: 69 c0 rjmp .+210 ; 0x284 <__bad_interrupt> 1b2: 00 00 nop - 1b4: 5f c0 rjmp .+190 ; 0x274 <__bad_interrupt> + 1b4: 67 c0 rjmp .+206 ; 0x284 <__bad_interrupt> 1b6: 00 00 nop - 1b8: 5d c0 rjmp .+186 ; 0x274 <__bad_interrupt> + 1b8: 65 c0 rjmp .+202 ; 0x284 <__bad_interrupt> 1ba: 00 00 nop - 1bc: 5b c0 rjmp .+182 ; 0x274 <__bad_interrupt> + 1bc: 63 c0 rjmp .+198 ; 0x284 <__bad_interrupt> 1be: 00 00 nop - 1c0: 59 c0 rjmp .+178 ; 0x274 <__bad_interrupt> + 1c0: 61 c0 rjmp .+194 ; 0x284 <__bad_interrupt> 1c2: 00 00 nop - 1c4: 57 c0 rjmp .+174 ; 0x274 <__bad_interrupt> + 1c4: 5f c0 rjmp .+190 ; 0x284 <__bad_interrupt> 1c6: 00 00 nop - 1c8: 55 c0 rjmp .+170 ; 0x274 <__bad_interrupt> + 1c8: 5d c0 rjmp .+186 ; 0x284 <__bad_interrupt> 1ca: 00 00 nop - 1cc: 53 c0 rjmp .+166 ; 0x274 <__bad_interrupt> + 1cc: 5b c0 rjmp .+182 ; 0x284 <__bad_interrupt> 1ce: 00 00 nop - 1d0: 51 c0 rjmp .+162 ; 0x274 <__bad_interrupt> + 1d0: 59 c0 rjmp .+178 ; 0x284 <__bad_interrupt> 1d2: 00 00 nop - 1d4: 4f c0 rjmp .+158 ; 0x274 <__bad_interrupt> + 1d4: 57 c0 rjmp .+174 ; 0x284 <__bad_interrupt> 1d6: 00 00 nop - 1d8: 4d c0 rjmp .+154 ; 0x274 <__bad_interrupt> + 1d8: 55 c0 rjmp .+170 ; 0x284 <__bad_interrupt> 1da: 00 00 nop - 1dc: 4b c0 rjmp .+150 ; 0x274 <__bad_interrupt> + 1dc: 53 c0 rjmp .+166 ; 0x284 <__bad_interrupt> 1de: 00 00 nop - 1e0: 49 c0 rjmp .+146 ; 0x274 <__bad_interrupt> + 1e0: 51 c0 rjmp .+162 ; 0x284 <__bad_interrupt> 1e2: 00 00 nop - 1e4: 47 c0 rjmp .+142 ; 0x274 <__bad_interrupt> + 1e4: 4f c0 rjmp .+158 ; 0x284 <__bad_interrupt> 1e6: 00 00 nop - 1e8: 45 c0 rjmp .+138 ; 0x274 <__bad_interrupt> + 1e8: 4d c0 rjmp .+154 ; 0x284 <__bad_interrupt> 1ea: 00 00 nop - 1ec: 43 c0 rjmp .+134 ; 0x274 <__bad_interrupt> + 1ec: 4b c0 rjmp .+150 ; 0x284 <__bad_interrupt> 1ee: 00 00 nop - 1f0: 41 c0 rjmp .+130 ; 0x274 <__bad_interrupt> + 1f0: 49 c0 rjmp .+146 ; 0x284 <__bad_interrupt> 1f2: 00 00 nop - 1f4: 0c 94 cb 15 jmp 0x2b96 ; 0x2b96 <__vector_125> - 1f8: 0c 94 7d 16 jmp 0x2cfa ; 0x2cfa <__vector_126> - 1fc: 30 04 cpc r3, r0 - 1fe: 32 04 cpc r3, r2 - 200: 34 04 cpc r3, r4 - 202: 36 04 cpc r3, r6 - 204: 38 04 cpc r3, r8 - 206: 3a 04 cpc r3, r10 - 208: 3c 04 cpc r3, r12 - 20a: 3e 04 cpc r3, r14 - 20c: 62 0c add r6, r2 - 20e: 87 0c add r8, r7 - 210: aa 0c add r10, r10 - 212: cd 0c add r12, r13 - 214: d6 0c add r13, r6 - 216: db 0c add r13, r11 - 218: 31 0d add r19, r1 - 21a: 36 0d add r19, r6 - 21c: 55 0d add r21, r5 - 21e: e7 0c add r14, r7 - 220: f1 0c add r15, r1 - 222: fb 0c add r15, r11 - 224: 09 0d add r16, r9 - 226: 0c 0d add r16, r12 - 228: 0f 0d add r16, r15 - 22a: 1a 0d add r17, r10 - 22c: 25 0d add r18, r5 - 22e: 27 11 cpse r18, r7 - 230: 2a 11 cpse r18, r10 - 232: 2d 11 cpse r18, r13 - 234: 30 11 cpse r19, r0 - 236: 33 11 cpse r19, r3 - 238: 36 11 cpse r19, r6 - 23a: 39 11 cpse r19, r9 + 1f4: 0c 94 f9 15 jmp 0x2bf2 ; 0x2bf2 <__vector_125> + 1f8: 0c 94 ab 16 jmp 0x2d56 ; 0x2d56 <__vector_126> + 1fc: 21 04 cpc r2, r1 + 1fe: 23 04 cpc r2, r3 + 200: 25 04 cpc r2, r5 + 202: 27 04 cpc r2, r7 + 204: 29 04 cpc r2, r9 + 206: 2b 04 cpc r2, r11 + 208: 2d 04 cpc r2, r13 + 20a: 2f 04 cpc r2, r15 + 20c: 43 04 cpc r4, r3 + 20e: 45 04 cpc r4, r5 + 210: 47 04 cpc r4, r7 + 212: 49 04 cpc r4, r9 + 214: 4b 04 cpc r4, r11 + 216: 50 04 cpc r5, r0 + 218: 4d 04 cpc r4, r13 + 21a: 4f 04 cpc r4, r15 + 21c: 8d 0c add r8, r13 + 21e: b2 0c add r11, r2 + 220: d5 0c add r13, r5 + 222: f8 0c add r15, r8 + 224: 01 0d add r16, r1 + 226: 06 0d add r16, r6 + 228: 5f 0d add r21, r15 + 22a: 64 0d add r22, r4 + 22c: 83 0d add r24, r3 + 22e: 12 0d add r17, r2 + 230: 1d 0d add r17, r13 + 232: 28 0d add r18, r8 + 234: 37 0d add r19, r7 + 236: 3a 0d add r19, r10 + 238: 3d 0d add r19, r13 + 23a: 48 0d add r20, r8 + 23c: 53 0d add r21, r3 + 23e: 55 11 cpse r21, r5 + 240: 58 11 cpse r21, r8 + 242: 5b 11 cpse r21, r11 + 244: 5e 11 cpse r21, r14 + 246: 61 11 cpse r22, r1 + 248: 64 11 cpse r22, r4 + 24a: 67 11 cpse r22, r7 -0000023c <__ctors_end>: - 23c: 11 24 eor r1, r1 - 23e: 1f be out 0x3f, r1 ; 63 - 240: cf ef ldi r28, 0xFF ; 255 - 242: cd bf out 0x3d, r28 ; 61 - 244: df e2 ldi r29, 0x2F ; 47 - 246: de bf out 0x3e, r29 ; 62 +0000024c <__ctors_end>: + 24c: 11 24 eor r1, r1 + 24e: 1f be out 0x3f, r1 ; 63 + 250: cf ef ldi r28, 0xFF ; 255 + 252: cd bf out 0x3d, r28 ; 61 + 254: df e2 ldi r29, 0x2F ; 47 + 256: de bf out 0x3e, r29 ; 62 -00000248 <__do_copy_data>: - 248: 10 e2 ldi r17, 0x20 ; 32 - 24a: a0 e0 ldi r26, 0x00 ; 0 - 24c: b0 e2 ldi r27, 0x20 ; 32 - 24e: ee e3 ldi r30, 0x3E ; 62 - 250: ff e2 ldi r31, 0x2F ; 47 - 252: 02 c0 rjmp .+4 ; 0x258 <__do_copy_data+0x10> - 254: 05 90 lpm r0, Z+ - 256: 0d 92 st X+, r0 - 258: ac 38 cpi r26, 0x8C ; 140 - 25a: b1 07 cpc r27, r17 - 25c: d9 f7 brne .-10 ; 0x254 <__do_copy_data+0xc> +00000258 <__do_copy_data>: + 258: 10 e2 ldi r17, 0x20 ; 32 + 25a: a0 e0 ldi r26, 0x00 ; 0 + 25c: b0 e2 ldi r27, 0x20 ; 32 + 25e: ea e9 ldi r30, 0x9A ; 154 + 260: ff e2 ldi r31, 0x2F ; 47 + 262: 02 c0 rjmp .+4 ; 0x268 <__do_copy_data+0x10> + 264: 05 90 lpm r0, Z+ + 266: 0d 92 st X+, r0 + 268: ac 38 cpi r26, 0x8C ; 140 + 26a: b1 07 cpc r27, r17 + 26c: d9 f7 brne .-10 ; 0x264 <__do_copy_data+0xc> -0000025e <__do_clear_bss>: - 25e: 2b e2 ldi r18, 0x2B ; 43 - 260: ac e8 ldi r26, 0x8C ; 140 - 262: b0 e2 ldi r27, 0x20 ; 32 - 264: 01 c0 rjmp .+2 ; 0x268 <.do_clear_bss_start> +0000026e <__do_clear_bss>: + 26e: 2b e2 ldi r18, 0x2B ; 43 + 270: ac e8 ldi r26, 0x8C ; 140 + 272: b0 e2 ldi r27, 0x20 ; 32 + 274: 01 c0 rjmp .+2 ; 0x278 <.do_clear_bss_start> -00000266 <.do_clear_bss_loop>: - 266: 1d 92 st X+, r1 +00000276 <.do_clear_bss_loop>: + 276: 1d 92 st X+, r1 -00000268 <.do_clear_bss_start>: - 268: a0 3d cpi r26, 0xD0 ; 208 - 26a: b2 07 cpc r27, r18 - 26c: e1 f7 brne .-8 ; 0x266 <.do_clear_bss_loop> - 26e: ac d2 rcall .+1368 ; 0x7c8
- 270: 0c 94 9d 17 jmp 0x2f3a ; 0x2f3a <_exit> +00000278 <.do_clear_bss_start>: + 278: a0 3d cpi r26, 0xD0 ; 208 + 27a: b2 07 cpc r27, r18 + 27c: e1 f7 brne .-8 ; 0x276 <.do_clear_bss_loop> + 27e: 94 d2 rcall .+1320 ; 0x7a8
+ 280: 0c 94 cb 17 jmp 0x2f96 ; 0x2f96 <_exit> -00000274 <__bad_interrupt>: - 274: c5 ce rjmp .-630 ; 0x0 <__vectors> +00000284 <__bad_interrupt>: + 284: bd ce rjmp .-646 ; 0x0 <__vectors> -00000276 : +00000286 : } int tiny_distance_from_centre(unsigned int point){ int midVal = point-12000; return midVal < 0 ? -midVal : midVal; } - 276: cf 93 push r28 - 278: df 93 push r29 - 27a: c0 e5 ldi r28, 0x50 ; 80 - 27c: d0 e0 ldi r29, 0x00 ; 0 - 27e: 84 e0 ldi r24, 0x04 ; 4 - 280: 8e 83 std Y+6, r24 ; 0x06 - 282: 8c e1 ldi r24, 0x1C ; 28 - 284: b6 d3 rcall .+1900 ; 0x9f2 - 286: e0 e6 ldi r30, 0x60 ; 96 - 288: f0 e0 ldi r31, 0x00 ; 0 - 28a: 83 83 std Z+3, r24 ; 0x03 - 28c: 8b eb ldi r24, 0xBB ; 187 - 28e: 86 83 std Z+6, r24 ; 0x06 - 290: 80 e8 ldi r24, 0x80 ; 128 - 292: 85 83 std Z+5, r24 ; 0x05 - 294: 81 e0 ldi r24, 0x01 ; 1 - 296: 80 83 st Z, r24 - 298: 88 ed ldi r24, 0xD8 ; 216 - 29a: 84 bf out 0x34, r24 ; 52 - 29c: 10 92 41 00 sts 0x0041, r1 ; 0x800041 <__TEXT_REGION_LENGTH__+0x700041> - 2a0: 83 e0 ldi r24, 0x03 ; 3 - 2a2: 88 83 st Y, r24 - 2a4: e0 e5 ldi r30, 0x50 ; 80 - 2a6: f0 e0 ldi r31, 0x00 ; 0 - 2a8: 81 81 ldd r24, Z+1 ; 0x01 - 2aa: 83 30 cpi r24, 0x03 ; 3 - 2ac: e9 f7 brne .-6 ; 0x2a8 - 2ae: e0 e5 ldi r30, 0x50 ; 80 - 2b0: f0 e0 ldi r31, 0x00 ; 0 - 2b2: 80 81 ld r24, Z - 2b4: 81 60 ori r24, 0x01 ; 1 - 2b6: 80 83 st Z, r24 - 2b8: 88 e1 ldi r24, 0x18 ; 24 - 2ba: 85 83 std Z+5, r24 ; 0x05 - 2bc: 81 81 ldd r24, Z+1 ; 0x01 - 2be: 80 ff sbrs r24, 0 - 2c0: fd cf rjmp .-6 ; 0x2bc - 2c2: e0 e5 ldi r30, 0x50 ; 80 - 2c4: f0 e0 ldi r31, 0x00 ; 0 - 2c6: 80 81 ld r24, Z - 2c8: 80 61 ori r24, 0x10 ; 16 - 2ca: 80 83 st Z, r24 + 286: cf 93 push r28 + 288: df 93 push r29 + 28a: c0 e5 ldi r28, 0x50 ; 80 + 28c: d0 e0 ldi r29, 0x00 ; 0 + 28e: 84 e0 ldi r24, 0x04 ; 4 + 290: 8e 83 std Y+6, r24 ; 0x06 + 292: 8c e1 ldi r24, 0x1C ; 28 + 294: a4 d3 rcall .+1864 ; 0x9de + 296: e0 e6 ldi r30, 0x60 ; 96 + 298: f0 e0 ldi r31, 0x00 ; 0 + 29a: 83 83 std Z+3, r24 ; 0x03 + 29c: 8b eb ldi r24, 0xBB ; 187 + 29e: 86 83 std Z+6, r24 ; 0x06 + 2a0: 80 e8 ldi r24, 0x80 ; 128 + 2a2: 85 83 std Z+5, r24 ; 0x05 + 2a4: 81 e0 ldi r24, 0x01 ; 1 + 2a6: 80 83 st Z, r24 + 2a8: 88 ed ldi r24, 0xD8 ; 216 + 2aa: 84 bf out 0x34, r24 ; 52 + 2ac: 10 92 41 00 sts 0x0041, r1 ; 0x800041 <__TEXT_REGION_LENGTH__+0x700041> + 2b0: 83 e0 ldi r24, 0x03 ; 3 + 2b2: 88 83 st Y, r24 + 2b4: e0 e5 ldi r30, 0x50 ; 80 + 2b6: f0 e0 ldi r31, 0x00 ; 0 + 2b8: 81 81 ldd r24, Z+1 ; 0x01 + 2ba: 83 30 cpi r24, 0x03 ; 3 + 2bc: e9 f7 brne .-6 ; 0x2b8 + 2be: e0 e5 ldi r30, 0x50 ; 80 + 2c0: f0 e0 ldi r31, 0x00 ; 0 + 2c2: 80 81 ld r24, Z + 2c4: 81 60 ori r24, 0x01 ; 1 + 2c6: 80 83 st Z, r24 + 2c8: 88 e1 ldi r24, 0x18 ; 24 + 2ca: 85 83 std Z+5, r24 ; 0x05 2cc: 81 81 ldd r24, Z+1 ; 0x01 - 2ce: 84 ff sbrs r24, 4 - 2d0: fd cf rjmp .-6 ; 0x2cc - 2d2: 88 ed ldi r24, 0xD8 ; 216 - 2d4: 84 bf out 0x34, r24 ; 52 - 2d6: 84 e0 ldi r24, 0x04 ; 4 - 2d8: 80 93 40 00 sts 0x0040, r24 ; 0x800040 <__TEXT_REGION_LENGTH__+0x700040> - 2dc: df 91 pop r29 - 2de: cf 91 pop r28 - 2e0: 08 95 ret + 2ce: 80 ff sbrs r24, 0 + 2d0: fd cf rjmp .-6 ; 0x2cc + 2d2: e0 e5 ldi r30, 0x50 ; 80 + 2d4: f0 e0 ldi r31, 0x00 ; 0 + 2d6: 80 81 ld r24, Z + 2d8: 80 61 ori r24, 0x10 ; 16 + 2da: 80 83 st Z, r24 + 2dc: 81 81 ldd r24, Z+1 ; 0x01 + 2de: 84 ff sbrs r24, 4 + 2e0: fd cf rjmp .-6 ; 0x2dc + 2e2: 88 ed ldi r24, 0xD8 ; 216 + 2e4: 84 bf out 0x34, r24 ; 52 + 2e6: 84 e0 ldi r24, 0x04 ; 4 + 2e8: 80 93 40 00 sts 0x0040, r24 ; 0x800040 <__TEXT_REGION_LENGTH__+0x700040> + 2ec: df 91 pop r29 + 2ee: cf 91 pop r28 + 2f0: 08 95 ret -000002e2 : - 2e2: e0 e7 ldi r30, 0x70 ; 112 - 2e4: f0 e0 ldi r31, 0x00 ; 0 - 2e6: 85 81 ldd r24, Z+5 ; 0x05 - 2e8: 8e 7f andi r24, 0xFE ; 254 - 2ea: 85 83 std Z+5, r24 ; 0x05 - 2ec: e0 e0 ldi r30, 0x00 ; 0 - 2ee: fa e0 ldi r31, 0x0A ; 10 - 2f0: 8f eb ldi r24, 0xBF ; 191 - 2f2: 9d e5 ldi r25, 0x5D ; 93 - 2f4: 86 a3 std Z+38, r24 ; 0x26 - 2f6: 97 a3 std Z+39, r25 ; 0x27 - 2f8: 80 ee ldi r24, 0xE0 ; 224 - 2fa: 9e e2 ldi r25, 0x2E ; 46 - 2fc: 80 a3 std Z+32, r24 ; 0x20 - 2fe: 91 a3 std Z+33, r25 ; 0x21 - 300: 82 e0 ldi r24, 0x02 ; 2 - 302: 80 83 st Z, r24 - 304: 08 95 ret +000002f2 : + 2f2: e0 e7 ldi r30, 0x70 ; 112 + 2f4: f0 e0 ldi r31, 0x00 ; 0 + 2f6: 85 81 ldd r24, Z+5 ; 0x05 + 2f8: 8e 7f andi r24, 0xFE ; 254 + 2fa: 85 83 std Z+5, r24 ; 0x05 + 2fc: e0 e0 ldi r30, 0x00 ; 0 + 2fe: fa e0 ldi r31, 0x0A ; 10 + 300: 8f eb ldi r24, 0xBF ; 191 + 302: 9d e5 ldi r25, 0x5D ; 93 + 304: 86 a3 std Z+38, r24 ; 0x26 + 306: 97 a3 std Z+39, r25 ; 0x27 + 308: 80 ee ldi r24, 0xE0 ; 224 + 30a: 9e e2 ldi r25, 0x2E ; 46 + 30c: 80 a3 std Z+32, r24 ; 0x20 + 30e: 91 a3 std Z+33, r25 ; 0x21 + 310: 82 e0 ldi r24, 0x02 ; 2 + 312: 80 83 st Z, r24 + 314: 08 95 ret -00000306 : - 306: 80 91 20 0a lds r24, 0x0A20 ; 0x800a20 <__TEXT_REGION_LENGTH__+0x700a20> - 30a: 90 91 21 0a lds r25, 0x0A21 ; 0x800a21 <__TEXT_REGION_LENGTH__+0x700a21> - 30e: 81 3e cpi r24, 0xE1 ; 225 - 310: 2e e2 ldi r18, 0x2E ; 46 - 312: 92 07 cpc r25, r18 - 314: 20 f0 brcs .+8 ; 0x31e - 316: 20 91 72 21 lds r18, 0x2172 ; 0x802172 - 31a: 20 93 6a 00 sts 0x006A, r18 ; 0x80006a <__TEXT_REGION_LENGTH__+0x70006a> - 31e: 80 3e cpi r24, 0xE0 ; 224 +00000316 : + 316: 80 91 20 0a lds r24, 0x0A20 ; 0x800a20 <__TEXT_REGION_LENGTH__+0x700a20> + 31a: 90 91 21 0a lds r25, 0x0A21 ; 0x800a21 <__TEXT_REGION_LENGTH__+0x700a21> + 31e: 81 3e cpi r24, 0xE1 ; 225 320: 2e e2 ldi r18, 0x2E ; 46 322: 92 07 cpc r25, r18 - 324: 20 f4 brcc .+8 ; 0x32e - 326: 20 91 6f 21 lds r18, 0x216F ; 0x80216f + 324: 20 f0 brcs .+8 ; 0x32e + 326: 20 91 72 21 lds r18, 0x2172 ; 0x802172 32a: 20 93 6a 00 sts 0x006A, r18 ; 0x80006a <__TEXT_REGION_LENGTH__+0x70006a> - 32e: 20 91 05 20 lds r18, 0x2005 ; 0x802005 - 332: 22 23 and r18, r18 - 334: 31 f0 breq .+12 ; 0x342 - 336: 80 91 05 20 lds r24, 0x2005 ; 0x802005 - 33a: 81 50 subi r24, 0x01 ; 1 - 33c: 80 93 05 20 sts 0x2005, r24 ; 0x802005 - 340: 35 c0 rjmp .+106 ; 0x3ac - 342: 88 5f subi r24, 0xF8 ; 248 - 344: 9a 42 sbci r25, 0x2A ; 42 - 346: 81 3d cpi r24, 0xD1 ; 209 - 348: 97 40 sbci r25, 0x07 ; 7 - 34a: 80 f1 brcs .+96 ; 0x3ac - 34c: 10 92 8c 20 sts 0x208C, r1 ; 0x80208c <__data_end> - 350: 80 91 8d 20 lds r24, 0x208D ; 0x80208d - 354: 90 91 8e 20 lds r25, 0x208E ; 0x80208e - 358: a0 91 8f 20 lds r26, 0x208F ; 0x80208f - 35c: b0 91 90 20 lds r27, 0x2090 ; 0x802090 - 360: 01 96 adiw r24, 0x01 ; 1 - 362: a1 1d adc r26, r1 - 364: b1 1d adc r27, r1 - 366: 80 93 8d 20 sts 0x208D, r24 ; 0x80208d - 36a: 90 93 8e 20 sts 0x208E, r25 ; 0x80208e - 36e: a0 93 8f 20 sts 0x208F, r26 ; 0x80208f - 372: b0 93 90 20 sts 0x2090, r27 ; 0x802090 - 376: 80 91 8d 20 lds r24, 0x208D ; 0x80208d - 37a: 90 91 8e 20 lds r25, 0x208E ; 0x80208e - 37e: a0 91 8f 20 lds r26, 0x208F ; 0x80208f - 382: b0 91 90 20 lds r27, 0x2090 ; 0x802090 - 386: 89 2f mov r24, r25 - 388: 9a 2f mov r25, r26 - 38a: ab 2f mov r26, r27 - 38c: bb 27 eor r27, r27 - 38e: ee e7 ldi r30, 0x7E ; 126 - 390: f1 e2 ldi r31, 0x21 ; 33 - 392: 84 8b std Z+20, r24 ; 0x14 - 394: 80 91 8d 20 lds r24, 0x208D ; 0x80208d - 398: 90 91 8e 20 lds r25, 0x208E ; 0x80208e - 39c: a0 91 8f 20 lds r26, 0x208F ; 0x80208f - 3a0: b0 91 90 20 lds r27, 0x2090 ; 0x802090 - 3a4: 83 8b std Z+19, r24 ; 0x13 - 3a6: 86 e0 ldi r24, 0x06 ; 6 - 3a8: 80 93 05 20 sts 0x2005, r24 ; 0x802005 - 3ac: 80 91 07 20 lds r24, 0x2007 ; 0x802007 - 3b0: 90 91 08 20 lds r25, 0x2008 ; 0x802008 - 3b4: 01 96 adiw r24, 0x01 ; 1 - 3b6: b1 f4 brne .+44 ; 0x3e4 - 3b8: 80 91 09 20 lds r24, 0x2009 ; 0x802009 - 3bc: 8f 3f cpi r24, 0xFF ; 255 - 3be: 91 f0 breq .+36 ; 0x3e4 - 3c0: 80 91 06 20 lds r24, 0x2006 ; 0x802006 - 3c4: 81 11 cpse r24, r1 - 3c6: 06 c0 rjmp .+12 ; 0x3d4 - 3c8: 80 91 06 20 lds r24, 0x2006 ; 0x802006 - 3cc: 81 50 subi r24, 0x01 ; 1 - 3ce: 80 93 06 20 sts 0x2006, r24 ; 0x802006 - 3d2: 08 95 ret - 3d4: 80 91 14 01 lds r24, 0x0114 ; 0x800114 <__TEXT_REGION_LENGTH__+0x700114> - 3d8: 90 91 15 01 lds r25, 0x0115 ; 0x800115 <__TEXT_REGION_LENGTH__+0x700115> - 3dc: 80 93 07 20 sts 0x2007, r24 ; 0x802007 - 3e0: 90 93 08 20 sts 0x2008, r25 ; 0x802008 - 3e4: 08 95 ret + 32e: 80 3e cpi r24, 0xE0 ; 224 + 330: 2e e2 ldi r18, 0x2E ; 46 + 332: 92 07 cpc r25, r18 + 334: 20 f4 brcc .+8 ; 0x33e + 336: 20 91 6f 21 lds r18, 0x216F ; 0x80216f + 33a: 20 93 6a 00 sts 0x006A, r18 ; 0x80006a <__TEXT_REGION_LENGTH__+0x70006a> + 33e: 20 91 05 20 lds r18, 0x2005 ; 0x802005 + 342: 22 23 and r18, r18 + 344: 31 f0 breq .+12 ; 0x352 + 346: 80 91 05 20 lds r24, 0x2005 ; 0x802005 + 34a: 81 50 subi r24, 0x01 ; 1 + 34c: 80 93 05 20 sts 0x2005, r24 ; 0x802005 + 350: 35 c0 rjmp .+106 ; 0x3bc + 352: 88 5f subi r24, 0xF8 ; 248 + 354: 9a 42 sbci r25, 0x2A ; 42 + 356: 81 3d cpi r24, 0xD1 ; 209 + 358: 97 40 sbci r25, 0x07 ; 7 + 35a: 80 f1 brcs .+96 ; 0x3bc + 35c: 10 92 8c 20 sts 0x208C, r1 ; 0x80208c <__data_end> + 360: 80 91 8d 20 lds r24, 0x208D ; 0x80208d + 364: 90 91 8e 20 lds r25, 0x208E ; 0x80208e + 368: a0 91 8f 20 lds r26, 0x208F ; 0x80208f + 36c: b0 91 90 20 lds r27, 0x2090 ; 0x802090 + 370: 01 96 adiw r24, 0x01 ; 1 + 372: a1 1d adc r26, r1 + 374: b1 1d adc r27, r1 + 376: 80 93 8d 20 sts 0x208D, r24 ; 0x80208d + 37a: 90 93 8e 20 sts 0x208E, r25 ; 0x80208e + 37e: a0 93 8f 20 sts 0x208F, r26 ; 0x80208f + 382: b0 93 90 20 sts 0x2090, r27 ; 0x802090 + 386: 80 91 8d 20 lds r24, 0x208D ; 0x80208d + 38a: 90 91 8e 20 lds r25, 0x208E ; 0x80208e + 38e: a0 91 8f 20 lds r26, 0x208F ; 0x80208f + 392: b0 91 90 20 lds r27, 0x2090 ; 0x802090 + 396: 89 2f mov r24, r25 + 398: 9a 2f mov r25, r26 + 39a: ab 2f mov r26, r27 + 39c: bb 27 eor r27, r27 + 39e: ee e7 ldi r30, 0x7E ; 126 + 3a0: f1 e2 ldi r31, 0x21 ; 33 + 3a2: 84 8b std Z+20, r24 ; 0x14 + 3a4: 80 91 8d 20 lds r24, 0x208D ; 0x80208d + 3a8: 90 91 8e 20 lds r25, 0x208E ; 0x80208e + 3ac: a0 91 8f 20 lds r26, 0x208F ; 0x80208f + 3b0: b0 91 90 20 lds r27, 0x2090 ; 0x802090 + 3b4: 83 8b std Z+19, r24 ; 0x13 + 3b6: 86 e0 ldi r24, 0x06 ; 6 + 3b8: 80 93 05 20 sts 0x2005, r24 ; 0x802005 + 3bc: 80 91 07 20 lds r24, 0x2007 ; 0x802007 + 3c0: 90 91 08 20 lds r25, 0x2008 ; 0x802008 + 3c4: 01 96 adiw r24, 0x01 ; 1 + 3c6: b1 f4 brne .+44 ; 0x3f4 + 3c8: 80 91 09 20 lds r24, 0x2009 ; 0x802009 + 3cc: 8f 3f cpi r24, 0xFF ; 255 + 3ce: 91 f0 breq .+36 ; 0x3f4 + 3d0: 80 91 06 20 lds r24, 0x2006 ; 0x802006 + 3d4: 81 11 cpse r24, r1 + 3d6: 06 c0 rjmp .+12 ; 0x3e4 + 3d8: 80 91 06 20 lds r24, 0x2006 ; 0x802006 + 3dc: 81 50 subi r24, 0x01 ; 1 + 3de: 80 93 06 20 sts 0x2006, r24 ; 0x802006 + 3e2: 08 95 ret + 3e4: 80 91 14 01 lds r24, 0x0114 ; 0x800114 <__TEXT_REGION_LENGTH__+0x700114> + 3e8: 90 91 15 01 lds r25, 0x0115 ; 0x800115 <__TEXT_REGION_LENGTH__+0x700115> + 3ec: 80 93 07 20 sts 0x2007, r24 ; 0x802007 + 3f0: 90 93 08 20 sts 0x2008, r25 ; 0x802008 + 3f4: 08 95 ret -000003e6 : - 3e6: 00 97 sbiw r24, 0x00 ; 0 - 3e8: 09 f4 brne .+2 ; 0x3ec - 3ea: 66 c0 rjmp .+204 ; 0x4b8 <__FUSE_REGION_LENGTH__+0xb8> - 3ec: 0c f0 brlt .+2 ; 0x3f0 - 3ee: 9c 01 movw r18, r24 - 3f0: 99 23 and r25, r25 - 3f2: 34 f4 brge .+12 ; 0x400 <__FUSE_REGION_LENGTH__> - 3f4: 22 27 eor r18, r18 - 3f6: 33 27 eor r19, r19 - 3f8: 28 1b sub r18, r24 - 3fa: 39 0b sbc r19, r25 - 3fc: 51 e0 ldi r21, 0x01 ; 1 - 3fe: 01 c0 rjmp .+2 ; 0x402 <__FUSE_REGION_LENGTH__+0x2> - 400: 50 e0 ldi r21, 0x00 ; 0 - 402: e8 e6 ldi r30, 0x68 ; 104 - 404: f0 e0 ldi r31, 0x00 ; 0 - 406: 83 81 ldd r24, Z+3 ; 0x03 - 408: 90 e0 ldi r25, 0x00 ; 0 - 40a: 80 93 70 21 sts 0x2170, r24 ; 0x802170 - 40e: 90 93 71 21 sts 0x2171, r25 ; 0x802171 - 412: 80 91 70 21 lds r24, 0x2170 ; 0x802170 - 416: 90 91 71 21 lds r25, 0x2171 ; 0x802171 - 41a: 96 95 lsr r25 - 41c: 98 2f mov r25, r24 - 41e: 88 27 eor r24, r24 - 420: 97 95 ror r25 - 422: 87 95 ror r24 - 424: 80 93 70 21 sts 0x2170, r24 ; 0x802170 - 428: 90 93 71 21 sts 0x2171, r25 ; 0x802171 - 42c: 42 81 ldd r20, Z+2 ; 0x02 - 42e: 80 91 70 21 lds r24, 0x2170 ; 0x802170 - 432: 90 91 71 21 lds r25, 0x2171 ; 0x802171 - 436: 84 0f add r24, r20 - 438: 91 1d adc r25, r1 - 43a: 80 93 70 21 sts 0x2170, r24 ; 0x802170 - 43e: 90 93 71 21 sts 0x2171, r25 ; 0x802171 - 442: 00 00 nop - 444: 80 91 70 21 lds r24, 0x2170 ; 0x802170 - 448: 90 91 71 21 lds r25, 0x2171 ; 0x802171 - 44c: 82 17 cp r24, r18 - 44e: 93 07 cpc r25, r19 - 450: 28 f4 brcc .+10 ; 0x45c <__FUSE_REGION_LENGTH__+0x5c> - 452: 10 92 70 21 sts 0x2170, r1 ; 0x802170 - 456: 10 92 71 21 sts 0x2171, r1 ; 0x802171 - 45a: 08 95 ret - 45c: 80 91 70 21 lds r24, 0x2170 ; 0x802170 - 460: 90 91 71 21 lds r25, 0x2171 ; 0x802171 - 464: 82 0f add r24, r18 - 466: 93 1f adc r25, r19 - 468: 81 15 cp r24, r1 - 46a: 90 42 sbci r25, 0x20 ; 32 - 46c: 38 f0 brcs .+14 ; 0x47c <__FUSE_REGION_LENGTH__+0x7c> - 46e: 8f ef ldi r24, 0xFF ; 255 - 470: 9f e1 ldi r25, 0x1F ; 31 - 472: 80 93 70 21 sts 0x2170, r24 ; 0x802170 - 476: 90 93 71 21 sts 0x2171, r25 ; 0x802171 - 47a: 08 95 ret - 47c: 55 23 and r21, r21 - 47e: 59 f0 breq .+22 ; 0x496 <__FUSE_REGION_LENGTH__+0x96> - 480: 80 91 70 21 lds r24, 0x2170 ; 0x802170 - 484: 90 91 71 21 lds r25, 0x2171 ; 0x802171 - 488: 82 1b sub r24, r18 - 48a: 93 0b sbc r25, r19 - 48c: 80 93 70 21 sts 0x2170, r24 ; 0x802170 - 490: 90 93 71 21 sts 0x2171, r25 ; 0x802171 - 494: 0a c0 rjmp .+20 ; 0x4aa <__FUSE_REGION_LENGTH__+0xaa> - 496: 80 91 70 21 lds r24, 0x2170 ; 0x802170 - 49a: 90 91 71 21 lds r25, 0x2171 ; 0x802171 - 49e: 28 0f add r18, r24 - 4a0: 39 1f adc r19, r25 - 4a2: 20 93 70 21 sts 0x2170, r18 ; 0x802170 - 4a6: 30 93 71 21 sts 0x2171, r19 ; 0x802171 - 4aa: 80 91 70 21 lds r24, 0x2170 ; 0x802170 - 4ae: 90 91 71 21 lds r25, 0x2171 ; 0x802171 - 4b2: 8f 77 andi r24, 0x7F ; 127 - 4b4: 80 93 6a 00 sts 0x006A, r24 ; 0x80006a <__TEXT_REGION_LENGTH__+0x70006a> - 4b8: 08 95 ret +000003f6 : + 3f6: 00 97 sbiw r24, 0x00 ; 0 + 3f8: 09 f4 brne .+2 ; 0x3fc + 3fa: 66 c0 rjmp .+204 ; 0x4c8 <__FUSE_REGION_LENGTH__+0xc8> + 3fc: 0c f0 brlt .+2 ; 0x400 <__FUSE_REGION_LENGTH__> + 3fe: 9c 01 movw r18, r24 + 400: 99 23 and r25, r25 + 402: 34 f4 brge .+12 ; 0x410 <__FUSE_REGION_LENGTH__+0x10> + 404: 22 27 eor r18, r18 + 406: 33 27 eor r19, r19 + 408: 28 1b sub r18, r24 + 40a: 39 0b sbc r19, r25 + 40c: 51 e0 ldi r21, 0x01 ; 1 + 40e: 01 c0 rjmp .+2 ; 0x412 <__FUSE_REGION_LENGTH__+0x12> + 410: 50 e0 ldi r21, 0x00 ; 0 + 412: e8 e6 ldi r30, 0x68 ; 104 + 414: f0 e0 ldi r31, 0x00 ; 0 + 416: 83 81 ldd r24, Z+3 ; 0x03 + 418: 90 e0 ldi r25, 0x00 ; 0 + 41a: 80 93 70 21 sts 0x2170, r24 ; 0x802170 + 41e: 90 93 71 21 sts 0x2171, r25 ; 0x802171 + 422: 80 91 70 21 lds r24, 0x2170 ; 0x802170 + 426: 90 91 71 21 lds r25, 0x2171 ; 0x802171 + 42a: 96 95 lsr r25 + 42c: 98 2f mov r25, r24 + 42e: 88 27 eor r24, r24 + 430: 97 95 ror r25 + 432: 87 95 ror r24 + 434: 80 93 70 21 sts 0x2170, r24 ; 0x802170 + 438: 90 93 71 21 sts 0x2171, r25 ; 0x802171 + 43c: 42 81 ldd r20, Z+2 ; 0x02 + 43e: 80 91 70 21 lds r24, 0x2170 ; 0x802170 + 442: 90 91 71 21 lds r25, 0x2171 ; 0x802171 + 446: 84 0f add r24, r20 + 448: 91 1d adc r25, r1 + 44a: 80 93 70 21 sts 0x2170, r24 ; 0x802170 + 44e: 90 93 71 21 sts 0x2171, r25 ; 0x802171 + 452: 00 00 nop + 454: 80 91 70 21 lds r24, 0x2170 ; 0x802170 + 458: 90 91 71 21 lds r25, 0x2171 ; 0x802171 + 45c: 82 17 cp r24, r18 + 45e: 93 07 cpc r25, r19 + 460: 28 f4 brcc .+10 ; 0x46c <__FUSE_REGION_LENGTH__+0x6c> + 462: 10 92 70 21 sts 0x2170, r1 ; 0x802170 + 466: 10 92 71 21 sts 0x2171, r1 ; 0x802171 + 46a: 08 95 ret + 46c: 80 91 70 21 lds r24, 0x2170 ; 0x802170 + 470: 90 91 71 21 lds r25, 0x2171 ; 0x802171 + 474: 82 0f add r24, r18 + 476: 93 1f adc r25, r19 + 478: 81 15 cp r24, r1 + 47a: 90 42 sbci r25, 0x20 ; 32 + 47c: 38 f0 brcs .+14 ; 0x48c <__FUSE_REGION_LENGTH__+0x8c> + 47e: 8f ef ldi r24, 0xFF ; 255 + 480: 9f e1 ldi r25, 0x1F ; 31 + 482: 80 93 70 21 sts 0x2170, r24 ; 0x802170 + 486: 90 93 71 21 sts 0x2171, r25 ; 0x802171 + 48a: 08 95 ret + 48c: 55 23 and r21, r21 + 48e: 59 f0 breq .+22 ; 0x4a6 <__FUSE_REGION_LENGTH__+0xa6> + 490: 80 91 70 21 lds r24, 0x2170 ; 0x802170 + 494: 90 91 71 21 lds r25, 0x2171 ; 0x802171 + 498: 82 1b sub r24, r18 + 49a: 93 0b sbc r25, r19 + 49c: 80 93 70 21 sts 0x2170, r24 ; 0x802170 + 4a0: 90 93 71 21 sts 0x2171, r25 ; 0x802171 + 4a4: 0a c0 rjmp .+20 ; 0x4ba <__FUSE_REGION_LENGTH__+0xba> + 4a6: 80 91 70 21 lds r24, 0x2170 ; 0x802170 + 4aa: 90 91 71 21 lds r25, 0x2171 ; 0x802171 + 4ae: 28 0f add r18, r24 + 4b0: 39 1f adc r19, r25 + 4b2: 20 93 70 21 sts 0x2170, r18 ; 0x802170 + 4b6: 30 93 71 21 sts 0x2171, r19 ; 0x802171 + 4ba: 80 91 70 21 lds r24, 0x2170 ; 0x802170 + 4be: 90 91 71 21 lds r25, 0x2171 ; 0x802171 + 4c2: 8f 77 andi r24, 0x7F ; 127 + 4c4: 80 93 6a 00 sts 0x006A, r24 ; 0x80006a <__TEXT_REGION_LENGTH__+0x70006a> + 4c8: 08 95 ret -000004ba : +000004ca : volatile int gradient; volatile unsigned int calChange; #define NUM_INAROW 12 volatile unsigned char inarow = NUM_INAROW; void tiny_calibration_find_values(){ - 4ba: cf 93 push r28 - 4bc: df 93 push r29 + 4ca: cf 93 push r28 + 4cc: df 93 push r29 unsigned int cnt = TC_CALI.CNT; - 4be: c0 91 20 0a lds r28, 0x0A20 ; 0x800a20 <__TEXT_REGION_LENGTH__+0x700a20> - 4c2: d0 91 21 0a lds r29, 0x0A21 ; 0x800a21 <__TEXT_REGION_LENGTH__+0x700a21> + 4ce: c0 91 20 0a lds r28, 0x0A20 ; 0x800a20 <__TEXT_REGION_LENGTH__+0x700a20> + 4d2: d0 91 21 0a lds r29, 0x0A21 ; 0x800a21 <__TEXT_REGION_LENGTH__+0x700a21> gradient = cnt - last_val; - 4c6: 80 91 03 20 lds r24, 0x2003 ; 0x802003 - 4ca: 90 91 04 20 lds r25, 0x2004 ; 0x802004 - 4ce: 9e 01 movw r18, r28 - 4d0: 28 1b sub r18, r24 - 4d2: 39 0b sbc r19, r25 - 4d4: 20 93 73 21 sts 0x2173, r18 ; 0x802173 - 4d8: 30 93 74 21 sts 0x2174, r19 ; 0x802174 + 4d6: 80 91 03 20 lds r24, 0x2003 ; 0x802003 + 4da: 90 91 04 20 lds r25, 0x2004 ; 0x802004 + 4de: 9e 01 movw r18, r28 + 4e0: 28 1b sub r18, r24 + 4e2: 39 0b sbc r19, r25 + 4e4: 20 93 73 21 sts 0x2173, r18 ; 0x802173 + 4e8: 30 93 74 21 sts 0x2174, r19 ; 0x802174 //Find the negative value first. if(calibration_values_found == 0x00){ - 4dc: 80 91 8c 20 lds r24, 0x208C ; 0x80208c <__data_end> - 4e0: 81 11 cpse r24, r1 - 4e2: 4d c0 rjmp .+154 ; 0x57e + 4ec: 80 91 8c 20 lds r24, 0x208C ; 0x80208c <__data_end> + 4f0: 81 11 cpse r24, r1 + 4f2: 4d c0 rjmp .+154 ; 0x58e if((gradient < -50) && (gradient > -150)){ - 4e4: 80 91 73 21 lds r24, 0x2173 ; 0x802173 - 4e8: 90 91 74 21 lds r25, 0x2174 ; 0x802174 - 4ec: 8e 3c cpi r24, 0xCE ; 206 - 4ee: 9f 4f sbci r25, 0xFF ; 255 - 4f0: e4 f4 brge .+56 ; 0x52a - 4f2: 80 91 73 21 lds r24, 0x2173 ; 0x802173 - 4f6: 90 91 74 21 lds r25, 0x2174 ; 0x802174 - 4fa: 8b 36 cpi r24, 0x6B ; 107 - 4fc: 9f 4f sbci r25, 0xFF ; 255 - 4fe: ac f0 brlt .+42 ; 0x52a + 4f4: 80 91 73 21 lds r24, 0x2173 ; 0x802173 + 4f8: 90 91 74 21 lds r25, 0x2174 ; 0x802174 + 4fc: 8e 3c cpi r24, 0xCE ; 206 + 4fe: 9f 4f sbci r25, 0xFF ; 255 + 500: e4 f4 brge .+56 ; 0x53a + 502: 80 91 73 21 lds r24, 0x2173 ; 0x802173 + 506: 90 91 74 21 lds r25, 0x2174 ; 0x802174 + 50a: 8b 36 cpi r24, 0x6B ; 107 + 50c: 9f 4f sbci r25, 0xFF ; 255 + 50e: ac f0 brlt .+42 ; 0x53a if(inarow){ - 500: 80 91 02 20 lds r24, 0x2002 ; 0x802002 - 504: 88 23 and r24, r24 - 506: 31 f0 breq .+12 ; 0x514 + 510: 80 91 02 20 lds r24, 0x2002 ; 0x802002 + 514: 88 23 and r24, r24 + 516: 31 f0 breq .+12 ; 0x524 inarow--; - 508: 80 91 02 20 lds r24, 0x2002 ; 0x802002 - 50c: 81 50 subi r24, 0x01 ; 1 - 50e: 80 93 02 20 sts 0x2002, r24 ; 0x802002 - 512: 35 c0 rjmp .+106 ; 0x57e + 518: 80 91 02 20 lds r24, 0x2002 ; 0x802002 + 51c: 81 50 subi r24, 0x01 ; 1 + 51e: 80 93 02 20 sts 0x2002, r24 ; 0x802002 + 522: 35 c0 rjmp .+106 ; 0x58e }else{ cali_value_negative_gradient = DFLLRC2M.CALA; - 514: 80 91 6a 00 lds r24, 0x006A ; 0x80006a <__TEXT_REGION_LENGTH__+0x70006a> - 518: 80 93 72 21 sts 0x2172, r24 ; 0x802172 + 524: 80 91 6a 00 lds r24, 0x006A ; 0x80006a <__TEXT_REGION_LENGTH__+0x70006a> + 528: 80 93 72 21 sts 0x2172, r24 ; 0x802172 calibration_values_found = 0x01; - 51c: 81 e0 ldi r24, 0x01 ; 1 - 51e: 80 93 8c 20 sts 0x208C, r24 ; 0x80208c <__data_end> + 52c: 81 e0 ldi r24, 0x01 ; 1 + 52e: 80 93 8c 20 sts 0x208C, r24 ; 0x80208c <__data_end> inarow = NUM_INAROW; - 522: 8c e0 ldi r24, 0x0C ; 12 - 524: 80 93 02 20 sts 0x2002, r24 ; 0x802002 - 528: 2a c0 rjmp .+84 ; 0x57e + 532: 8c e0 ldi r24, 0x0C ; 12 + 534: 80 93 02 20 sts 0x2002, r24 ; 0x802002 + 538: 2a c0 rjmp .+84 ; 0x58e } } else{ inarow = NUM_INAROW; - 52a: 8c e0 ldi r24, 0x0C ; 12 - 52c: 80 93 02 20 sts 0x2002, r24 ; 0x802002 + 53a: 8c e0 ldi r24, 0x0C ; 12 + 53c: 80 93 02 20 sts 0x2002, r24 ; 0x802002 calChange = gradient < -150 ? 1 : -1; - 530: 80 91 73 21 lds r24, 0x2173 ; 0x802173 - 534: 90 91 74 21 lds r25, 0x2174 ; 0x802174 - 538: 8a 36 cpi r24, 0x6A ; 106 - 53a: 9f 4f sbci r25, 0xFF ; 255 - 53c: 1c f0 brlt .+6 ; 0x544 - 53e: 8f ef ldi r24, 0xFF ; 255 - 540: 9f ef ldi r25, 0xFF ; 255 - 542: 02 c0 rjmp .+4 ; 0x548 - 544: 81 e0 ldi r24, 0x01 ; 1 - 546: 90 e0 ldi r25, 0x00 ; 0 - 548: 80 93 6d 21 sts 0x216D, r24 ; 0x80216d - 54c: 90 93 6e 21 sts 0x216E, r25 ; 0x80216e + 540: 80 91 73 21 lds r24, 0x2173 ; 0x802173 + 544: 90 91 74 21 lds r25, 0x2174 ; 0x802174 + 548: 8a 36 cpi r24, 0x6A ; 106 + 54a: 9f 4f sbci r25, 0xFF ; 255 + 54c: 1c f0 brlt .+6 ; 0x554 + 54e: 8f ef ldi r24, 0xFF ; 255 + 550: 9f ef ldi r25, 0xFF ; 255 + 552: 02 c0 rjmp .+4 ; 0x558 + 554: 81 e0 ldi r24, 0x01 ; 1 + 556: 90 e0 ldi r25, 0x00 ; 0 + 558: 80 93 6d 21 sts 0x216D, r24 ; 0x80216d + 55c: 90 93 6e 21 sts 0x216E, r25 ; 0x80216e calChange -= gradient / 48; - 550: 80 91 73 21 lds r24, 0x2173 ; 0x802173 - 554: 90 91 74 21 lds r25, 0x2174 ; 0x802174 - 558: 20 91 6d 21 lds r18, 0x216D ; 0x80216d - 55c: 30 91 6e 21 lds r19, 0x216E ; 0x80216e - 560: 60 e3 ldi r22, 0x30 ; 48 - 562: 70 e0 ldi r23, 0x00 ; 0 - 564: 0e 94 7b 17 call 0x2ef6 ; 0x2ef6 <__divmodhi4> - 568: 26 1b sub r18, r22 - 56a: 37 0b sbc r19, r23 - 56c: 20 93 6d 21 sts 0x216D, r18 ; 0x80216d - 570: 30 93 6e 21 sts 0x216E, r19 ; 0x80216e + 560: 80 91 73 21 lds r24, 0x2173 ; 0x802173 + 564: 90 91 74 21 lds r25, 0x2174 ; 0x802174 + 568: 20 91 6d 21 lds r18, 0x216D ; 0x80216d + 56c: 30 91 6e 21 lds r19, 0x216E ; 0x80216e + 570: 60 e3 ldi r22, 0x30 ; 48 + 572: 70 e0 ldi r23, 0x00 ; 0 + 574: 0e 94 a9 17 call 0x2f52 ; 0x2f52 <__divmodhi4> + 578: 26 1b sub r18, r22 + 57a: 37 0b sbc r19, r23 + 57c: 20 93 6d 21 sts 0x216D, r18 ; 0x80216d + 580: 30 93 6e 21 sts 0x216E, r19 ; 0x80216e tiny_calibration_safe_add(calChange); - 574: 80 91 6d 21 lds r24, 0x216D ; 0x80216d - 578: 90 91 6e 21 lds r25, 0x216E ; 0x80216e - 57c: 34 df rcall .-408 ; 0x3e6 + 584: 80 91 6d 21 lds r24, 0x216D ; 0x80216d + 588: 90 91 6e 21 lds r25, 0x216E ; 0x80216e + 58c: 34 df rcall .-408 ; 0x3f6 } } //Search for the positive gradient if(calibration_values_found == 0x01){ - 57e: 80 91 8c 20 lds r24, 0x208C ; 0x80208c <__data_end> - 582: 81 30 cpi r24, 0x01 ; 1 - 584: 29 f5 brne .+74 ; 0x5d0 + 58e: 80 91 8c 20 lds r24, 0x208C ; 0x80208c <__data_end> + 592: 81 30 cpi r24, 0x01 ; 1 + 594: 29 f5 brne .+74 ; 0x5e0 if(gradient > 50){ - 586: 80 91 73 21 lds r24, 0x2173 ; 0x802173 - 58a: 90 91 74 21 lds r25, 0x2174 ; 0x802174 - 58e: c3 97 sbiw r24, 0x33 ; 51 - 590: 94 f0 brlt .+36 ; 0x5b6 + 596: 80 91 73 21 lds r24, 0x2173 ; 0x802173 + 59a: 90 91 74 21 lds r25, 0x2174 ; 0x802174 + 59e: c3 97 sbiw r24, 0x33 ; 51 + 5a0: 94 f0 brlt .+36 ; 0x5c6 if(inarow){ - 592: 80 91 02 20 lds r24, 0x2002 ; 0x802002 - 596: 88 23 and r24, r24 - 598: 31 f0 breq .+12 ; 0x5a6 + 5a2: 80 91 02 20 lds r24, 0x2002 ; 0x802002 + 5a6: 88 23 and r24, r24 + 5a8: 31 f0 breq .+12 ; 0x5b6 inarow--; - 59a: 80 91 02 20 lds r24, 0x2002 ; 0x802002 - 59e: 81 50 subi r24, 0x01 ; 1 - 5a0: 80 93 02 20 sts 0x2002, r24 ; 0x802002 - 5a4: 15 c0 rjmp .+42 ; 0x5d0 + 5aa: 80 91 02 20 lds r24, 0x2002 ; 0x802002 + 5ae: 81 50 subi r24, 0x01 ; 1 + 5b0: 80 93 02 20 sts 0x2002, r24 ; 0x802002 + 5b4: 15 c0 rjmp .+42 ; 0x5e0 } else{ cali_value_positive_gradient = DFLLRC2M.CALA; - 5a6: 80 91 6a 00 lds r24, 0x006A ; 0x80006a <__TEXT_REGION_LENGTH__+0x70006a> - 5aa: 80 93 6f 21 sts 0x216F, r24 ; 0x80216f + 5b6: 80 91 6a 00 lds r24, 0x006A ; 0x80006a <__TEXT_REGION_LENGTH__+0x70006a> + 5ba: 80 93 6f 21 sts 0x216F, r24 ; 0x80216f calibration_values_found = 0x03; - 5ae: 83 e0 ldi r24, 0x03 ; 3 - 5b0: 80 93 8c 20 sts 0x208C, r24 ; 0x80208c <__data_end> - 5b4: 0d c0 rjmp .+26 ; 0x5d0 + 5be: 83 e0 ldi r24, 0x03 ; 3 + 5c0: 80 93 8c 20 sts 0x208C, r24 ; 0x80208c <__data_end> + 5c4: 0d c0 rjmp .+26 ; 0x5e0 } } else tiny_calibration_safe_add((gradient > 150 ? -1 : 1)); - 5b6: 80 91 73 21 lds r24, 0x2173 ; 0x802173 - 5ba: 90 91 74 21 lds r25, 0x2174 ; 0x802174 - 5be: 87 39 cpi r24, 0x97 ; 151 - 5c0: 91 05 cpc r25, r1 - 5c2: 1c f4 brge .+6 ; 0x5ca - 5c4: 81 e0 ldi r24, 0x01 ; 1 - 5c6: 90 e0 ldi r25, 0x00 ; 0 - 5c8: 02 c0 rjmp .+4 ; 0x5ce - 5ca: 8f ef ldi r24, 0xFF ; 255 - 5cc: 9f ef ldi r25, 0xFF ; 255 - 5ce: 0b df rcall .-490 ; 0x3e6 + 5c6: 80 91 73 21 lds r24, 0x2173 ; 0x802173 + 5ca: 90 91 74 21 lds r25, 0x2174 ; 0x802174 + 5ce: 87 39 cpi r24, 0x97 ; 151 + 5d0: 91 05 cpc r25, r1 + 5d2: 1c f4 brge .+6 ; 0x5da + 5d4: 81 e0 ldi r24, 0x01 ; 1 + 5d6: 90 e0 ldi r25, 0x00 ; 0 + 5d8: 02 c0 rjmp .+4 ; 0x5de + 5da: 8f ef ldi r24, 0xFF ; 255 + 5dc: 9f ef ldi r25, 0xFF ; 255 + 5de: 0b df rcall .-490 ; 0x3f6 } last_val = cnt; - 5d0: c0 93 03 20 sts 0x2003, r28 ; 0x802003 - 5d4: d0 93 04 20 sts 0x2004, r29 ; 0x802004 + 5e0: c0 93 03 20 sts 0x2003, r28 ; 0x802003 + 5e4: d0 93 04 20 sts 0x2004, r29 ; 0x802004 } - 5d8: df 91 pop r29 - 5da: cf 91 pop r28 - 5dc: 08 95 ret + 5e8: df 91 pop r29 + 5ea: cf 91 pop r28 + 5ec: 08 95 ret -000005de : +000005ee : return; } } unsigned int magnitude_difference(unsigned int a, unsigned int b){ if(a==b) return 0; - 5de: 86 17 cp r24, r22 - 5e0: 97 07 cpc r25, r23 - 5e2: 79 f0 breq .+30 ; 0x602 + 5ee: 86 17 cp r24, r22 + 5f0: 97 07 cpc r25, r23 + 5f2: 79 f0 breq .+30 ; 0x612 if(a>b) return a - b; - 5e4: 68 17 cp r22, r24 - 5e6: 79 07 cpc r23, r25 - 5e8: 28 f4 brcc .+10 ; 0x5f4 - 5ea: 9c 01 movw r18, r24 - 5ec: 26 1b sub r18, r22 - 5ee: 37 0b sbc r19, r23 - 5f0: b9 01 movw r22, r18 - 5f2: 09 c0 rjmp .+18 ; 0x606 + 5f4: 68 17 cp r22, r24 + 5f6: 79 07 cpc r23, r25 + 5f8: 28 f4 brcc .+10 ; 0x604 + 5fa: 9c 01 movw r18, r24 + 5fc: 26 1b sub r18, r22 + 5fe: 37 0b sbc r19, r23 + 600: b9 01 movw r22, r18 + 602: 09 c0 rjmp .+18 ; 0x616 if(b>a) return b - a; - 5f4: 86 17 cp r24, r22 - 5f6: 97 07 cpc r25, r23 - 5f8: 18 f4 brcc .+6 ; 0x600 - 5fa: 68 1b sub r22, r24 - 5fc: 79 0b sbc r23, r25 - 5fe: 03 c0 rjmp .+6 ; 0x606 - 600: 08 95 ret + 604: 86 17 cp r24, r22 + 606: 97 07 cpc r25, r23 + 608: 18 f4 brcc .+6 ; 0x610 + 60a: 68 1b sub r22, r24 + 60c: 79 0b sbc r23, r25 + 60e: 03 c0 rjmp .+6 ; 0x616 + 610: 08 95 ret return; } } unsigned int magnitude_difference(unsigned int a, unsigned int b){ if(a==b) return 0; - 602: 60 e0 ldi r22, 0x00 ; 0 - 604: 70 e0 ldi r23, 0x00 ; 0 - 606: 86 2f mov r24, r22 - 608: 97 2f mov r25, r23 + 612: 60 e0 ldi r22, 0x00 ; 0 + 614: 70 e0 ldi r23, 0x00 ; 0 + 616: 86 2f mov r24, r22 + 618: 97 2f mov r25, r23 if(a>b) return a - b; if(b>a) return b - a; } - 60a: 08 95 ret + 61a: 08 95 ret -0000060c : +0000061c : } #define LAYER2_INTERVAL 64 #define MAXIMUM_DEVIATION 1 volatile unsigned int layer2_counter = LAYER2_INTERVAL; void tiny_calibration_layer2(){ - 60c: 0f 93 push r16 - 60e: 1f 93 push r17 - 610: cf 93 push r28 - 612: df 93 push r29 + 61c: 0f 93 push r16 + 61e: 1f 93 push r17 + 620: cf 93 push r28 + 622: df 93 push r29 //Run only once every LAYER2_INTERVAL milliseconds. if(layer2_counter){ - 614: 80 91 00 20 lds r24, 0x2000 ; 0x802000 <__data_start> - 618: 90 91 01 20 lds r25, 0x2001 ; 0x802001 <__data_start+0x1> - 61c: 89 2b or r24, r25 - 61e: 51 f0 breq .+20 ; 0x634 + 624: 80 91 00 20 lds r24, 0x2000 ; 0x802000 <__data_start> + 628: 90 91 01 20 lds r25, 0x2001 ; 0x802001 <__data_start+0x1> + 62c: 89 2b or r24, r25 + 62e: 51 f0 breq .+20 ; 0x644 layer2_counter--; - 620: 80 91 00 20 lds r24, 0x2000 ; 0x802000 <__data_start> - 624: 90 91 01 20 lds r25, 0x2001 ; 0x802001 <__data_start+0x1> - 628: 01 97 sbiw r24, 0x01 ; 1 - 62a: 80 93 00 20 sts 0x2000, r24 ; 0x802000 <__data_start> - 62e: 90 93 01 20 sts 0x2001, r25 ; 0x802001 <__data_start+0x1> + 630: 80 91 00 20 lds r24, 0x2000 ; 0x802000 <__data_start> + 634: 90 91 01 20 lds r25, 0x2001 ; 0x802001 <__data_start+0x1> + 638: 01 97 sbiw r24, 0x01 ; 1 + 63a: 80 93 00 20 sts 0x2000, r24 ; 0x802000 <__data_start> + 63e: 90 93 01 20 sts 0x2001, r25 ; 0x802001 <__data_start+0x1> return; - 632: 4d c0 rjmp .+154 ; 0x6ce + 642: 4d c0 rjmp .+154 ; 0x6de } layer2_counter = LAYER2_INTERVAL; - 634: 80 e4 ldi r24, 0x40 ; 64 - 636: 90 e0 ldi r25, 0x00 ; 0 - 638: 80 93 00 20 sts 0x2000, r24 ; 0x802000 <__data_start> - 63c: 90 93 01 20 sts 0x2001, r25 ; 0x802001 <__data_start+0x1> + 644: 80 e4 ldi r24, 0x40 ; 64 + 646: 90 e0 ldi r25, 0x00 ; 0 + 648: 80 93 00 20 sts 0x2000, r24 ; 0x802000 <__data_start> + 64c: 90 93 01 20 sts 0x2001, r25 ; 0x802001 <__data_start+0x1> //Return if a median TRFCNT hasn't been set yet. if(median_TRFCNT == 65535){ - 640: 80 91 07 20 lds r24, 0x2007 ; 0x802007 - 644: 90 91 08 20 lds r25, 0x2008 ; 0x802008 - 648: 01 96 adiw r24, 0x01 ; 1 - 64a: 09 f4 brne .+2 ; 0x64e - 64c: 40 c0 rjmp .+128 ; 0x6ce + 650: 80 91 07 20 lds r24, 0x2007 ; 0x802007 + 654: 90 91 08 20 lds r25, 0x2008 ; 0x802008 + 658: 01 96 adiw r24, 0x01 ; 1 + 65a: 09 f4 brne .+2 ; 0x65e + 65c: 40 c0 rjmp .+128 ; 0x6de return; } unsigned int TRFCNT_temp = DMA.CH0.TRFCNT; - 64e: 80 91 14 01 lds r24, 0x0114 ; 0x800114 <__TEXT_REGION_LENGTH__+0x700114> - 652: 90 91 15 01 lds r25, 0x0115 ; 0x800115 <__TEXT_REGION_LENGTH__+0x700115> + 65e: 80 91 14 01 lds r24, 0x0114 ; 0x800114 <__TEXT_REGION_LENGTH__+0x700114> + 662: 90 91 15 01 lds r25, 0x0115 ; 0x800115 <__TEXT_REGION_LENGTH__+0x700115> TRFCNT_temp = TRFCNT_temp % (global_mode > 5 ? PACKET_SIZE : HALFPACKET_SIZE); - 656: 20 91 09 20 lds r18, 0x2009 ; 0x802009 - 65a: 26 30 cpi r18, 0x06 ; 6 - 65c: 18 f4 brcc .+6 ; 0x664 - 65e: 67 e7 ldi r22, 0x77 ; 119 - 660: 71 e0 ldi r23, 0x01 ; 1 - 662: 02 c0 rjmp .+4 ; 0x668 - 664: 6e ee ldi r22, 0xEE ; 238 - 666: 72 e0 ldi r23, 0x02 ; 2 - 668: 0e 94 67 17 call 0x2ece ; 0x2ece <__udivmodhi4> - 66c: 08 2f mov r16, r24 - 66e: 19 2f mov r17, r25 - 670: c8 2f mov r28, r24 - 672: d1 2f mov r29, r17 + 666: 20 91 09 20 lds r18, 0x2009 ; 0x802009 + 66a: 26 30 cpi r18, 0x06 ; 6 + 66c: 18 f4 brcc .+6 ; 0x674 + 66e: 67 e7 ldi r22, 0x77 ; 119 + 670: 71 e0 ldi r23, 0x01 ; 1 + 672: 02 c0 rjmp .+4 ; 0x678 + 674: 6e ee ldi r22, 0xEE ; 238 + 676: 72 e0 ldi r23, 0x02 ; 2 + 678: 0e 94 95 17 call 0x2f2a ; 0x2f2a <__udivmodhi4> + 67c: 08 2f mov r16, r24 + 67e: 19 2f mov r17, r25 + 680: c8 2f mov r28, r24 + 682: d1 2f mov r29, r17 if((TRFCNT_temp > median_TRFCNT) && (magnitude_difference(TRFCNT_temp, median_TRFCNT) > MAXIMUM_DEVIATION)){ - 674: 80 91 07 20 lds r24, 0x2007 ; 0x802007 - 678: 90 91 08 20 lds r25, 0x2008 ; 0x802008 - 67c: 8c 17 cp r24, r28 - 67e: 9d 07 cpc r25, r29 - 680: 80 f4 brcc .+32 ; 0x6a2 - 682: 60 91 07 20 lds r22, 0x2007 ; 0x802007 - 686: 70 91 08 20 lds r23, 0x2008 ; 0x802008 - 68a: 80 2f mov r24, r16 - 68c: 91 2f mov r25, r17 - 68e: a7 df rcall .-178 ; 0x5de - 690: 02 97 sbiw r24, 0x02 ; 2 - 692: 38 f0 brcs .+14 ; 0x6a2 + 684: 80 91 07 20 lds r24, 0x2007 ; 0x802007 + 688: 90 91 08 20 lds r25, 0x2008 ; 0x802008 + 68c: 8c 17 cp r24, r28 + 68e: 9d 07 cpc r25, r29 + 690: 80 f4 brcc .+32 ; 0x6b2 + 692: 60 91 07 20 lds r22, 0x2007 ; 0x802007 + 696: 70 91 08 20 lds r23, 0x2008 ; 0x802008 + 69a: 80 2f mov r24, r16 + 69c: 91 2f mov r25, r17 + 69e: a7 df rcall .-178 ; 0x5ee + 6a0: 02 97 sbiw r24, 0x02 ; 2 + 6a2: 38 f0 brcs .+14 ; 0x6b2 TC_CALI.PERBUF = 24000; - 694: 80 ec ldi r24, 0xC0 ; 192 - 696: 9d e5 ldi r25, 0x5D ; 93 - 698: 80 93 36 0a sts 0x0A36, r24 ; 0x800a36 <__TEXT_REGION_LENGTH__+0x700a36> - 69c: 90 93 37 0a sts 0x0A37, r25 ; 0x800a37 <__TEXT_REGION_LENGTH__+0x700a37> + 6a4: 80 ec ldi r24, 0xC0 ; 192 + 6a6: 9d e5 ldi r25, 0x5D ; 93 + 6a8: 80 93 36 0a sts 0x0A36, r24 ; 0x800a36 <__TEXT_REGION_LENGTH__+0x700a36> + 6ac: 90 93 37 0a sts 0x0A37, r25 ; 0x800a37 <__TEXT_REGION_LENGTH__+0x700a37> return; - 6a0: 16 c0 rjmp .+44 ; 0x6ce + 6b0: 16 c0 rjmp .+44 ; 0x6de } if((TRFCNT_temp < median_TRFCNT) && (magnitude_difference(TRFCNT_temp, median_TRFCNT) > MAXIMUM_DEVIATION)){ - 6a2: 80 91 07 20 lds r24, 0x2007 ; 0x802007 - 6a6: 90 91 08 20 lds r25, 0x2008 ; 0x802008 - 6aa: c8 17 cp r28, r24 - 6ac: d9 07 cpc r29, r25 - 6ae: 78 f4 brcc .+30 ; 0x6ce - 6b0: 60 91 07 20 lds r22, 0x2007 ; 0x802007 - 6b4: 70 91 08 20 lds r23, 0x2008 ; 0x802008 - 6b8: 80 2f mov r24, r16 - 6ba: 91 2f mov r25, r17 - 6bc: 90 df rcall .-224 ; 0x5de - 6be: 02 97 sbiw r24, 0x02 ; 2 - 6c0: 30 f0 brcs .+12 ; 0x6ce + 6b2: 80 91 07 20 lds r24, 0x2007 ; 0x802007 + 6b6: 90 91 08 20 lds r25, 0x2008 ; 0x802008 + 6ba: c8 17 cp r28, r24 + 6bc: d9 07 cpc r29, r25 + 6be: 78 f4 brcc .+30 ; 0x6de + 6c0: 60 91 07 20 lds r22, 0x2007 ; 0x802007 + 6c4: 70 91 08 20 lds r23, 0x2008 ; 0x802008 + 6c8: 80 2f mov r24, r16 + 6ca: 91 2f mov r25, r17 + 6cc: 90 df rcall .-224 ; 0x5ee + 6ce: 02 97 sbiw r24, 0x02 ; 2 + 6d0: 30 f0 brcs .+12 ; 0x6de TC_CALI.PERBUF = 23999; - 6c2: 8f eb ldi r24, 0xBF ; 191 - 6c4: 9d e5 ldi r25, 0x5D ; 93 - 6c6: 80 93 36 0a sts 0x0A36, r24 ; 0x800a36 <__TEXT_REGION_LENGTH__+0x700a36> - 6ca: 90 93 37 0a sts 0x0A37, r25 ; 0x800a37 <__TEXT_REGION_LENGTH__+0x700a37> + 6d2: 8f eb ldi r24, 0xBF ; 191 + 6d4: 9d e5 ldi r25, 0x5D ; 93 + 6d6: 80 93 36 0a sts 0x0A36, r24 ; 0x800a36 <__TEXT_REGION_LENGTH__+0x700a36> + 6da: 90 93 37 0a sts 0x0A37, r25 ; 0x800a37 <__TEXT_REGION_LENGTH__+0x700a37> return; } } - 6ce: df 91 pop r29 - 6d0: cf 91 pop r28 - 6d2: 1f 91 pop r17 - 6d4: 0f 91 pop r16 - 6d6: 08 95 ret + 6de: df 91 pop r29 + 6e0: cf 91 pop r28 + 6e2: 1f 91 pop r17 + 6e4: 0f 91 pop r16 + 6e6: 08 95 ret -000006d8 : +000006e8 : if(b>a) return b - a; } void tiny_calibration_synchronise_phase(unsigned int phase, unsigned int precision){ //Wait for the calibration timer to roughly equal a phase value, then return. unsigned int maxVal = phase + precision; - 6d8: ac 01 movw r20, r24 - 6da: 46 0f add r20, r22 - 6dc: 57 1f adc r21, r23 + 6e8: ac 01 movw r20, r24 + 6ea: 46 0f add r20, r22 + 6ec: 57 1f adc r21, r23 unsigned int minVal = phase - precision; - 6de: 86 1b sub r24, r22 - 6e0: 97 0b sbc r25, r23 + 6ee: 86 1b sub r24, r22 + 6f0: 97 0b sbc r25, r23 while (!((TC_CALI.CNT < maxVal) && (TC_CALI.CNT > minVal))); - 6e2: e0 e0 ldi r30, 0x00 ; 0 - 6e4: fa e0 ldi r31, 0x0A ; 10 - 6e6: 20 a1 ldd r18, Z+32 ; 0x20 - 6e8: 31 a1 ldd r19, Z+33 ; 0x21 - 6ea: 24 17 cp r18, r20 - 6ec: 35 07 cpc r19, r21 - 6ee: d8 f7 brcc .-10 ; 0x6e6 - 6f0: 20 a1 ldd r18, Z+32 ; 0x20 - 6f2: 31 a1 ldd r19, Z+33 ; 0x21 - 6f4: 82 17 cp r24, r18 - 6f6: 93 07 cpc r25, r19 - 6f8: b0 f7 brcc .-20 ; 0x6e6 + 6f2: e0 e0 ldi r30, 0x00 ; 0 + 6f4: fa e0 ldi r31, 0x0A ; 10 + 6f6: 20 a1 ldd r18, Z+32 ; 0x20 + 6f8: 31 a1 ldd r19, Z+33 ; 0x21 + 6fa: 24 17 cp r18, r20 + 6fc: 35 07 cpc r19, r21 + 6fe: d8 f7 brcc .-10 ; 0x6f6 + 700: 20 a1 ldd r18, Z+32 ; 0x20 + 702: 31 a1 ldd r19, Z+33 ; 0x21 + 704: 82 17 cp r24, r18 + 706: 93 07 cpc r25, r19 + 708: b0 f7 brcc .-20 ; 0x6f6 return; } - 6fa: 08 95 ret + 70a: 08 95 ret -000006fc : +0000070c : #include "tiny_dig.h" #include "globals.h" void tiny_dig_setup(void){ PORTE.DIR = 0x0f; - 6fc: e0 e8 ldi r30, 0x80 ; 128 - 6fe: f6 e0 ldi r31, 0x06 ; 6 - 700: 8f e0 ldi r24, 0x0F ; 15 - 702: 80 83 st Z, r24 + 70c: e0 e8 ldi r30, 0x80 ; 128 + 70e: f6 e0 ldi r31, 0x06 ; 6 + 710: 8f e0 ldi r24, 0x0F ; 15 + 712: 80 83 st Z, r24 PORTE.OUT = 0x05; - 704: 85 e0 ldi r24, 0x05 ; 5 - 706: 84 83 std Z+4, r24 ; 0x04 - 708: 08 95 ret + 714: 85 e0 ldi r24, 0x05 ; 5 + 716: 84 83 std Z+4, r24 ; 0x04 + 718: 08 95 ret -0000070a : +0000071a : * Author: Esposch */ #include #include "tiny_eeprom.h" void eeprom_safe_read(){ - 70a: 1f 93 push r17 - 70c: cf 93 push r28 - 70e: df 93 push r29 + 71a: 1f 93 push r17 + 71c: cf 93 push r28 + 71e: df 93 push r29 unsigned char previous_clk_settings = CLK.PSCTRL; - 710: c0 e4 ldi r28, 0x40 ; 64 - 712: d0 e0 ldi r29, 0x00 ; 0 - 714: 19 81 ldd r17, Y+1 ; 0x01 + 720: c0 e4 ldi r28, 0x40 ; 64 + 722: d0 e0 ldi r29, 0x00 ; 0 + 724: 19 81 ldd r17, Y+1 ; 0x01 CLK.PSCTRL = CLK_PSADIV4_bm; //Slow down the clock to prevent EEPROM misses - 716: 80 e4 ldi r24, 0x40 ; 64 - 718: 89 83 std Y+1, r24 ; 0x01 + 726: 80 e4 ldi r24, 0x40 ; 64 + 728: 89 83 std Y+1, r24 ; 0x01 nvm_eeprom_read_buffer(EEPROM_CURRENT_PAGE*EEPROM_PAGE_SIZE, eeprom_buffer_read, EEPROM_PAGE_SIZE); - 71a: 40 e2 ldi r20, 0x20 ; 32 - 71c: 50 e0 ldi r21, 0x00 ; 0 - 71e: 68 ea ldi r22, 0xA8 ; 168 - 720: 7b e2 ldi r23, 0x2B ; 43 - 722: 80 e2 ldi r24, 0x20 ; 32 - 724: 90 e0 ldi r25, 0x00 ; 0 - 726: 0e 94 c9 0f call 0x1f92 ; 0x1f92 + 72a: 40 e2 ldi r20, 0x20 ; 32 + 72c: 50 e0 ldi r21, 0x00 ; 0 + 72e: 68 ea ldi r22, 0xA8 ; 168 + 730: 7b e2 ldi r23, 0x2B ; 43 + 732: 80 e2 ldi r24, 0x20 ; 32 + 734: 90 e0 ldi r25, 0x00 ; 0 + 736: 0e 94 f7 0f call 0x1fee ; 0x1fee CLK.PSCTRL = previous_clk_settings; - 72a: 19 83 std Y+1, r17 ; 0x01 + 73a: 19 83 std Y+1, r17 ; 0x01 return; } - 72c: df 91 pop r29 - 72e: cf 91 pop r28 - 730: 1f 91 pop r17 - 732: 08 95 ret + 73c: df 91 pop r29 + 73e: cf 91 pop r28 + 740: 1f 91 pop r17 + 742: 08 95 ret -00000734 : +00000744 : void eeprom_safe_write(){ - 734: 1f 93 push r17 - 736: cf 93 push r28 - 738: df 93 push r29 + 744: 1f 93 push r17 + 746: cf 93 push r28 + 748: df 93 push r29 unsigned char previous_clk_settings = CLK.PSCTRL; - 73a: c0 e4 ldi r28, 0x40 ; 64 - 73c: d0 e0 ldi r29, 0x00 ; 0 - 73e: 19 81 ldd r17, Y+1 ; 0x01 + 74a: c0 e4 ldi r28, 0x40 ; 64 + 74c: d0 e0 ldi r29, 0x00 ; 0 + 74e: 19 81 ldd r17, Y+1 ; 0x01 CLK.PSCTRL = CLK_PSADIV4_bm; //Slow down the clock to prevent EEPROM misses - 740: 80 e4 ldi r24, 0x40 ; 64 - 742: 89 83 std Y+1, r24 ; 0x01 + 750: 80 e4 ldi r24, 0x40 ; 64 + 752: 89 83 std Y+1, r24 ; 0x01 nvm_eeprom_load_page_to_buffer(eeprom_buffer_write); - 744: 8b ea ldi r24, 0xAB ; 171 - 746: 95 e2 ldi r25, 0x25 ; 37 - 748: 0e 94 f3 0f call 0x1fe6 ; 0x1fe6 + 754: 8b ea ldi r24, 0xAB ; 171 + 756: 95 e2 ldi r25, 0x25 ; 37 + 758: 0e 94 21 10 call 0x2042 ; 0x2042 nvm_eeprom_atomic_write_page(EEPROM_CURRENT_PAGE); - 74c: 81 e0 ldi r24, 0x01 ; 1 - 74e: 0e 94 12 10 call 0x2024 ; 0x2024 + 75c: 81 e0 ldi r24, 0x01 ; 1 + 75e: 0e 94 40 10 call 0x2080 ; 0x2080 CLK.PSCTRL = previous_clk_settings; - 752: 19 83 std Y+1, r17 ; 0x01 + 762: 19 83 std Y+1, r17 ; 0x01 return; } - 754: df 91 pop r29 - 756: cf 91 pop r28 - 758: 1f 91 pop r17 - 75a: 08 95 ret + 764: df 91 pop r29 + 766: cf 91 pop r28 + 768: 1f 91 pop r17 + 76a: 08 95 ret -0000075c : +0000076c : #include #include #include void board_init(void) { - 75c: 08 95 ret + 76c: 08 95 ret -0000075e : +0000076e : bool main_setup_in_received(void) { return true; } void iso_callback(udd_ep_status_t status, iram_size_t nb_transfered, udd_ep_id_t ep){ - 75e: 0f 93 push r16 - 760: 1f 93 push r17 + 76e: 0f 93 push r16 + 770: 1f 93 push r17 else{ udd_ep_run(ep, false, (uint8_t *)&isoBuf[usb_state * PACKET_SIZE + offset], 125, iso_callback); } return; #else - if (global_mode < 1){ - 762: 80 91 09 20 lds r24, 0x2009 ; 0x802009 - 766: 81 11 cpse r24, r1 - 768: 14 c0 rjmp .+40 ; 0x792 - udd_ep_run(0x81, false, (uint8_t *)&isoBuf[usb_state * HALFPACKET_SIZE], PACKET_SIZE, iso_callback); - 76a: 20 91 96 20 lds r18, 0x2096 ; 0x802096 - 76e: 87 e7 ldi r24, 0x77 ; 119 - 770: 91 e0 ldi r25, 0x01 ; 1 - 772: 28 9f mul r18, r24 - 774: a0 01 movw r20, r0 - 776: 29 9f mul r18, r25 - 778: 50 0d add r21, r0 - 77a: 11 24 eor r1, r1 - 77c: 44 53 subi r20, 0x34 ; 52 - 77e: 5a 4d sbci r21, 0xDA ; 218 - 780: 0f ea ldi r16, 0xAF ; 175 - 782: 13 e0 ldi r17, 0x03 ; 3 - 784: 2e ee ldi r18, 0xEE ; 238 - 786: 32 e0 ldi r19, 0x02 ; 2 - 788: 60 e0 ldi r22, 0x00 ; 0 - 78a: 81 e8 ldi r24, 0x81 ; 129 - 78c: 0e 94 7f 14 call 0x28fe ; 0x28fe - 790: 13 c0 rjmp .+38 ; 0x7b8 - } - else{ udd_ep_run(0x81, false, (uint8_t *)&isoBuf[usb_state * PACKET_SIZE], PACKET_SIZE, iso_callback); - 792: 20 91 96 20 lds r18, 0x2096 ; 0x802096 - 796: 8e ee ldi r24, 0xEE ; 238 - 798: 92 e0 ldi r25, 0x02 ; 2 - 79a: 28 9f mul r18, r24 - 79c: a0 01 movw r20, r0 - 79e: 29 9f mul r18, r25 - 7a0: 50 0d add r21, r0 - 7a2: 11 24 eor r1, r1 - 7a4: 44 53 subi r20, 0x34 ; 52 - 7a6: 5a 4d sbci r21, 0xDA ; 218 - 7a8: 0f ea ldi r16, 0xAF ; 175 - 7aa: 13 e0 ldi r17, 0x03 ; 3 - 7ac: 2e ee ldi r18, 0xEE ; 238 - 7ae: 32 e0 ldi r19, 0x02 ; 2 - 7b0: 60 e0 ldi r22, 0x00 ; 0 - 7b2: 81 e8 ldi r24, 0x81 ; 129 - 7b4: 0e 94 7f 14 call 0x28fe ; 0x28fe - } - + 772: 20 91 96 20 lds r18, 0x2096 ; 0x802096 + 776: 8e ee ldi r24, 0xEE ; 238 + 778: 92 e0 ldi r25, 0x02 ; 2 + 77a: 28 9f mul r18, r24 + 77c: a0 01 movw r20, r0 + 77e: 29 9f mul r18, r25 + 780: 50 0d add r21, r0 + 782: 11 24 eor r1, r1 + 784: 44 53 subi r20, 0x34 ; 52 + 786: 5a 4d sbci r21, 0xDA ; 218 + 788: 07 eb ldi r16, 0xB7 ; 183 + 78a: 13 e0 ldi r17, 0x03 ; 3 + 78c: 2e ee ldi r18, 0xEE ; 238 + 78e: 32 e0 ldi r19, 0x02 ; 2 + 790: 60 e0 ldi r22, 0x00 ; 0 + 792: 81 e8 ldi r24, 0x81 ; 129 + 794: 0e 94 ad 14 call 0x295a ; 0x295a #endif } - 7b8: 1f 91 pop r17 - 7ba: 0f 91 pop r16 - 7bc: 08 95 ret + 798: 1f 91 pop r17 + 79a: 0f 91 pop r16 + 79c: 08 95 ret -000007be : +0000079e : volatile unsigned char eeprom_buffer_write[EEPROM_PAGE_SIZE]; volatile unsigned char eeprom_buffer_read[EEPROM_PAGE_SIZE]; void jump_to_bootloader(){ void(* start_bootloader)(void) = (void (*)(void))((BOOT_SECTION_START + ATMEL_DFU_OFFSET)>>1); EIND = BOOT_SECTION_START>>17; - 7be: 1c be out 0x3c, r1 ; 60 + 79e: 1c be out 0x3c, r1 ; 60 start_bootloader(); - 7c0: ee ef ldi r30, 0xFE ; 254 - 7c2: f0 e4 ldi r31, 0x40 ; 64 - 7c4: 09 95 icall - 7c6: 08 95 ret + 7a0: ee ef ldi r30, 0xFE ; 254 + 7a2: f0 e4 ldi r31, 0x40 ; 64 + 7a4: 09 95 icall + 7a6: 08 95 ret -000007c8
: +000007a8
: } int main(void){ eeprom_safe_read(); - 7c8: a0 df rcall .-192 ; 0x70a + 7a8: b8 df rcall .-144 ; 0x71a if(eeprom_buffer_read[0]){ - 7ca: 80 91 a8 2b lds r24, 0x2BA8 ; 0x802ba8 - 7ce: 88 23 and r24, r24 - 7d0: 69 f0 breq .+26 ; 0x7ec + 7aa: 80 91 a8 2b lds r24, 0x2BA8 ; 0x802ba8 + 7ae: 88 23 and r24, r24 + 7b0: 69 f0 breq .+26 ; 0x7cc memcpy(eeprom_buffer_write, eeprom_buffer_read, EEPROM_PAGE_SIZE); - 7d2: 80 e2 ldi r24, 0x20 ; 32 - 7d4: e8 ea ldi r30, 0xA8 ; 168 - 7d6: fb e2 ldi r31, 0x2B ; 43 - 7d8: ab ea ldi r26, 0xAB ; 171 - 7da: b5 e2 ldi r27, 0x25 ; 37 - 7dc: 01 90 ld r0, Z+ - 7de: 0d 92 st X+, r0 - 7e0: 8a 95 dec r24 - 7e2: e1 f7 brne .-8 ; 0x7dc + 7b2: 80 e2 ldi r24, 0x20 ; 32 + 7b4: e8 ea ldi r30, 0xA8 ; 168 + 7b6: fb e2 ldi r31, 0x2B ; 43 + 7b8: ab ea ldi r26, 0xAB ; 171 + 7ba: b5 e2 ldi r27, 0x25 ; 37 + 7bc: 01 90 ld r0, Z+ + 7be: 0d 92 st X+, r0 + 7c0: 8a 95 dec r24 + 7c2: e1 f7 brne .-8 ; 0x7bc eeprom_buffer_write[0] = 0; - 7e4: 10 92 ab 25 sts 0x25AB, r1 ; 0x8025ab + 7c4: 10 92 ab 25 sts 0x25AB, r1 ; 0x8025ab eeprom_safe_write(); - 7e8: a5 df rcall .-182 ; 0x734 + 7c8: bd df rcall .-134 ; 0x744 //eeprom_safe_read(); jump_to_bootloader(); - 7ea: e9 df rcall .-46 ; 0x7be + 7ca: e9 df rcall .-46 ; 0x79e } irq_initialize_vectors(); - 7ec: 87 e0 ldi r24, 0x07 ; 7 - 7ee: 80 93 a2 00 sts 0x00A2, r24 ; 0x8000a2 <__TEXT_REGION_LENGTH__+0x7000a2> + 7cc: 87 e0 ldi r24, 0x07 ; 7 + 7ce: 80 93 a2 00 sts 0x00A2, r24 ; 0x8000a2 <__TEXT_REGION_LENGTH__+0x7000a2> cpu_irq_enable(); - 7f2: 78 94 sei + 7d2: 78 94 sei // sysclk_init(); tiny_calibration_init(); - 7f4: 40 dd rcall .-1408 ; 0x276 + 7d4: 58 dd rcall .-1360 ; 0x286 board_init(); - 7f6: b2 df rcall .-156 ; 0x75c + 7d6: ca df rcall .-108 ; 0x76c udc_start(); - 7f8: e3 d7 rcall .+4038 ; 0x17c0 + 7d8: 0e 94 0b 0c call 0x1816 ; 0x1816 tiny_dac_setup(); - 7fa: 54 d1 rcall .+680 ; 0xaa4 + 7dc: 59 d1 rcall .+690 ; 0xa90 tiny_dma_setup(); - 7fc: 77 d1 rcall .+750 ; 0xaec + 7de: 7c d1 rcall .+760 ; 0xad8 tiny_adc_setup(0, 0); - 7fe: 60 e0 ldi r22, 0x00 ; 0 - 800: 80 e0 ldi r24, 0x00 ; 0 - 802: 00 d1 rcall .+512 ; 0xa04 + 7e0: 60 e0 ldi r22, 0x00 ; 0 + 7e2: 80 e0 ldi r24, 0x00 ; 0 + 7e4: 05 d1 rcall .+522 ; 0x9f0 tiny_adc_pid_setup(); - 804: ec d0 rcall .+472 ; 0x9de + 7e6: f1 d0 rcall .+482 ; 0x9ca tiny_adc_ch1setup(12); - 806: 8c e0 ldi r24, 0x0C ; 12 - 808: e0 d0 rcall .+448 ; 0x9ca + 7e8: 8c e0 ldi r24, 0x0C ; 12 + 7ea: e5 d0 rcall .+458 ; 0x9b6 tiny_timer_setup(); - 80a: 6f d5 rcall .+2782 ; 0x12ea + 7ec: a9 d5 rcall .+2898 ; 0x1340 tiny_uart_setup(); - 80c: 2a d6 rcall .+3156 ; 0x1462 + 7ee: 64 d6 rcall .+3272 ; 0x14b8 tiny_spi_setup(); - 80e: 43 d6 rcall .+3206 ; 0x1496 + 7f0: 7d d6 rcall .+3322 ; 0x14ec tiny_dig_setup(); - 810: 75 df rcall .-278 ; 0x6fc + 7f2: 8c df rcall .-232 ; 0x70c //USARTC0.DATA = 0x55; //asm("nop"); strcpy(uds.header, "debug123"); - 812: 89 e0 ldi r24, 0x09 ; 9 - 814: e0 e8 ldi r30, 0x80 ; 128 - 816: f0 e2 ldi r31, 0x20 ; 32 - 818: ae e7 ldi r26, 0x7E ; 126 - 81a: b1 e2 ldi r27, 0x21 ; 33 - 81c: 01 90 ld r0, Z+ - 81e: 0d 92 st X+, r0 - 820: 8a 95 dec r24 - 822: e1 f7 brne .-8 ; 0x81c + 7f4: 89 e0 ldi r24, 0x09 ; 9 + 7f6: e0 e8 ldi r30, 0x80 ; 128 + 7f8: f0 e2 ldi r31, 0x20 ; 32 + 7fa: ae e7 ldi r26, 0x7E ; 126 + 7fc: b1 e2 ldi r27, 0x21 ; 33 + 7fe: 01 90 ld r0, Z+ + 800: 0d 92 st X+, r0 + 802: 8a 95 dec r24 + 804: e1 f7 brne .-8 ; 0x7fe ... asm("nop"); asm("nop"); @@ -1167,6233 +1148,6952 @@ int main(void){ asm("nop"); asm("nop"); if(modeChanged){ - 840: 80 91 91 20 lds r24, 0x2091 ; 0x802091 - 844: 88 23 and r24, r24 - 846: 71 f3 breq .-36 ; 0x824 + 822: 80 91 91 20 lds r24, 0x2091 ; 0x802091 + 826: 88 23 and r24, r24 + 828: 71 f3 breq .-36 ; 0x806 switch(futureMode){ - 848: e0 91 aa 23 lds r30, 0x23AA ; 0x8023aa - 84c: 8e 2f mov r24, r30 - 84e: 90 e0 ldi r25, 0x00 ; 0 - 850: 88 30 cpi r24, 0x08 ; 8 - 852: 91 05 cpc r25, r1 - 854: a0 f4 brcc .+40 ; 0x87e - 856: fc 01 movw r30, r24 - 858: e2 50 subi r30, 0x02 ; 2 - 85a: ff 4f sbci r31, 0xFF ; 255 - 85c: 0c 94 8e 17 jmp 0x2f1c ; 0x2f1c <__tablejump2__> + 82a: e0 91 aa 23 lds r30, 0x23AA ; 0x8023aa + 82e: 8e 2f mov r24, r30 + 830: 90 e0 ldi r25, 0x00 ; 0 + 832: 88 30 cpi r24, 0x08 ; 8 + 834: 91 05 cpc r25, r1 + 836: a0 f4 brcc .+40 ; 0x860 + 838: fc 01 movw r30, r24 + 83a: e2 50 subi r30, 0x02 ; 2 + 83c: ff 4f sbci r31, 0xFF ; 255 + 83e: 0c 94 bc 17 jmp 0x2f78 ; 0x2f78 <__tablejump2__> case 0: tiny_dma_set_mode_0(); - 860: 71 d1 rcall .+738 ; 0xb44 + 842: 76 d1 rcall .+748 ; 0xb30 break; - 862: 0d c0 rjmp .+26 ; 0x87e + 844: 0d c0 rjmp .+26 ; 0x860 case 1: tiny_dma_set_mode_1(); - 864: e1 d1 rcall .+962 ; 0xc28 + 846: e8 d1 rcall .+976 ; 0xc18 break; - 866: 0b c0 rjmp .+22 ; 0x87e + 848: 0b c0 rjmp .+22 ; 0x860 case 2: tiny_dma_set_mode_2(); - 868: 68 d2 rcall .+1232 ; 0xd3a + 84a: 70 d2 rcall .+1248 ; 0xd2c break; - 86a: 09 c0 rjmp .+18 ; 0x87e + 84c: 09 c0 rjmp .+18 ; 0x860 case 3: tiny_dma_set_mode_3(); - 86c: ec d2 rcall .+1496 ; 0xe46 + 84e: f5 d2 rcall .+1514 ; 0xe3a break; - 86e: 07 c0 rjmp .+14 ; 0x87e + 850: 07 c0 rjmp .+14 ; 0x860 case 4: tiny_dma_set_mode_4(); - 870: 78 d3 rcall .+1776 ; 0xf62 + 852: 82 d3 rcall .+1796 ; 0xf58 break; - 872: 05 c0 rjmp .+10 ; 0x87e + 854: 05 c0 rjmp .+10 ; 0x860 case 5: tiny_dma_set_mode_5(); - 874: fe d3 rcall .+2044 ; 0x1072 + 856: 09 d4 rcall .+2066 ; 0x106a break; - 876: 03 c0 rjmp .+6 ; 0x87e + 858: 03 c0 rjmp .+6 ; 0x860 case 6: tiny_dma_set_mode_6(); - 878: fd d3 rcall .+2042 ; 0x1074 + 85a: 08 d4 rcall .+2064 ; 0x106c break; - 87a: 01 c0 rjmp .+2 ; 0x87e + 85c: 01 c0 rjmp .+2 ; 0x860 case 7: tiny_dma_set_mode_7(); - 87c: 6e d4 rcall .+2268 ; 0x115a + 85e: 7a d4 rcall .+2292 ; 0x1154 break; } modeChanged = 0; - 87e: 10 92 91 20 sts 0x2091, r1 ; 0x802091 - 882: d0 cf rjmp .-96 ; 0x824 + 860: 10 92 91 20 sts 0x2091, r1 ; 0x802091 + 864: d0 cf rjmp .-96 ; 0x806 -00000884 : +00000866 : //! Global variable to give and record information about setup request management udd_ctrl_request_t udd_g_ctrlreq; //CALLBACKS: void main_suspend_action(void) { - 884: 08 95 ret + 866: 08 95 ret -00000886 : +00000868 : return; } void main_resume_action(void) { - 886: 08 95 ret + 868: 08 95 ret -00000888 : +0000086a : return; } void main_sof_action(void) { - 888: cf 93 push r28 - 88a: df 93 push r29 + 86a: cf 93 push r28 + 86c: df 93 push r29 + #ifdef SINGLE_ENDPOINT_INTERFACE + switch(global_mode){ + 86e: e0 91 09 20 lds r30, 0x2009 ; 0x802009 + 872: 8e 2f mov r24, r30 + 874: 90 e0 ldi r25, 0x00 ; 0 + 876: 88 30 cpi r24, 0x08 ; 8 + 878: 91 05 cpc r25, r1 + 87a: 90 f4 brcc .+36 ; 0x8a0 + 87c: fc 01 movw r30, r24 + 87e: ea 5f subi r30, 0xFA ; 250 + 880: fe 4f sbci r31, 0xFE ; 254 + 882: 0c 94 bc 17 jmp 0x2f78 ; 0x2f78 <__tablejump2__> + case 0: + tiny_dma_loop_mode_0(); + 886: c7 d1 rcall .+910 ; 0xc16 + break; + 888: 0b c0 rjmp .+22 ; 0x8a0 + case 1: + tiny_dma_loop_mode_1(); + 88a: 4f d2 rcall .+1182 ; 0xd2a + break; + 88c: 09 c0 rjmp .+18 ; 0x8a0 + case 2: + tiny_dma_loop_mode_2(); + 88e: d4 d2 rcall .+1448 ; 0xe38 + break; + 890: 07 c0 rjmp .+14 ; 0x8a0 + case 3: + tiny_dma_loop_mode_3(); + 892: 61 d3 rcall .+1730 ; 0xf56 + break; + 894: 05 c0 rjmp .+10 ; 0x8a0 + case 4: + tiny_dma_loop_mode_4(); + 896: e8 d3 rcall .+2000 ; 0x1068 + break; + 898: 03 c0 rjmp .+6 ; 0x8a0 + case 6: + tiny_dma_loop_mode_6(); + 89a: 5b d4 rcall .+2230 ; 0x1152 + break; + 89c: 01 c0 rjmp .+2 ; 0x8a0 + case 7: + tiny_dma_loop_mode_7(); + 89e: ce d4 rcall .+2460 ; 0x123c + default: + break; + } + #endif + uds.trfcntL0 = DMA.CH0.TRFCNTL; - 88c: a0 e0 ldi r26, 0x00 ; 0 - 88e: b1 e0 ldi r27, 0x01 ; 1 - 890: 54 96 adiw r26, 0x14 ; 20 - 892: 8c 91 ld r24, X - 894: 54 97 sbiw r26, 0x14 ; 20 - 896: ee e7 ldi r30, 0x7E ; 126 - 898: f1 e2 ldi r31, 0x21 ; 33 - 89a: 81 87 std Z+9, r24 ; 0x09 - uds.trfcntH0 = DMA.CH0.TRFCNTH; - 89c: 55 96 adiw r26, 0x15 ; 21 - 89e: 8c 91 ld r24, X - 8a0: 55 97 sbiw r26, 0x15 ; 21 - 8a2: 82 87 std Z+10, r24 ; 0x0a - uds.trfcntL1 = DMA.CH1.TRFCNTL; - 8a4: 94 96 adiw r26, 0x24 ; 36 + 8a0: a0 e0 ldi r26, 0x00 ; 0 + 8a2: b1 e0 ldi r27, 0x01 ; 1 + 8a4: 54 96 adiw r26, 0x14 ; 20 8a6: 8c 91 ld r24, X - 8a8: 94 97 sbiw r26, 0x24 ; 36 - 8aa: 83 87 std Z+11, r24 ; 0x0b + 8a8: 54 97 sbiw r26, 0x14 ; 20 + 8aa: ee e7 ldi r30, 0x7E ; 126 + 8ac: f1 e2 ldi r31, 0x21 ; 33 + 8ae: 81 87 std Z+9, r24 ; 0x09 + uds.trfcntH0 = DMA.CH0.TRFCNTH; + 8b0: 55 96 adiw r26, 0x15 ; 21 + 8b2: 8c 91 ld r24, X + 8b4: 55 97 sbiw r26, 0x15 ; 21 + 8b6: 82 87 std Z+10, r24 ; 0x0a + uds.trfcntL1 = DMA.CH1.TRFCNTL; + 8b8: 94 96 adiw r26, 0x24 ; 36 + 8ba: 8c 91 ld r24, X + 8bc: 94 97 sbiw r26, 0x24 ; 36 + 8be: 83 87 std Z+11, r24 ; 0x0b uds.trfcntH1 = DMA.CH1.TRFCNTH; - 8ac: 95 96 adiw r26, 0x25 ; 37 - 8ae: 8c 91 ld r24, X - 8b0: 95 97 sbiw r26, 0x25 ; 37 - 8b2: 84 87 std Z+12, r24 ; 0x0c + 8c0: 95 96 adiw r26, 0x25 ; 37 + 8c2: 8c 91 ld r24, X + 8c4: 95 97 sbiw r26, 0x25 ; 37 + 8c6: 84 87 std Z+12, r24 ; 0x0c uds.counterL = TC_CALI.CNTL; - 8b4: c0 e0 ldi r28, 0x00 ; 0 - 8b6: da e0 ldi r29, 0x0A ; 10 - 8b8: 88 a1 ldd r24, Y+32 ; 0x20 - 8ba: 85 8b std Z+21, r24 ; 0x15 + 8c8: c0 e0 ldi r28, 0x00 ; 0 + 8ca: da e0 ldi r29, 0x0A ; 10 + 8cc: 88 a1 ldd r24, Y+32 ; 0x20 + 8ce: 85 8b std Z+21, r24 ; 0x15 uds.counterH = TC_CALI.CNTH; - 8bc: 89 a1 ldd r24, Y+33 ; 0x21 - 8be: 86 8b std Z+22, r24 ; 0x16 + 8d0: 89 a1 ldd r24, Y+33 ; 0x21 + 8d2: 86 8b std Z+22, r24 ; 0x16 if((DMA.CH0.TRFCNT > 325) && (DMA.CH0.TRFCNT < 425)){ - 8c0: 54 96 adiw r26, 0x14 ; 20 - 8c2: 8d 91 ld r24, X+ - 8c4: 9c 91 ld r25, X - 8c6: 55 97 sbiw r26, 0x15 ; 21 - 8c8: 86 34 cpi r24, 0x46 ; 70 - 8ca: 91 40 sbci r25, 0x01 ; 1 - 8cc: 80 f0 brcs .+32 ; 0x8ee - 8ce: 80 91 14 01 lds r24, 0x0114 ; 0x800114 <__TEXT_REGION_LENGTH__+0x700114> - 8d2: 90 91 15 01 lds r25, 0x0115 ; 0x800115 <__TEXT_REGION_LENGTH__+0x700115> - 8d6: 89 3a cpi r24, 0xA9 ; 169 - 8d8: 91 40 sbci r25, 0x01 ; 1 - 8da: 48 f4 brcc .+18 ; 0x8ee + 8d4: 54 96 adiw r26, 0x14 ; 20 + 8d6: 8d 91 ld r24, X+ + 8d8: 9c 91 ld r25, X + 8da: 55 97 sbiw r26, 0x15 ; 21 + 8dc: 86 34 cpi r24, 0x46 ; 70 + 8de: 91 40 sbci r25, 0x01 ; 1 + 8e0: 80 f0 brcs .+32 ; 0x902 + 8e2: 80 91 14 01 lds r24, 0x0114 ; 0x800114 <__TEXT_REGION_LENGTH__+0x700114> + 8e6: 90 91 15 01 lds r25, 0x0115 ; 0x800115 <__TEXT_REGION_LENGTH__+0x700115> + 8ea: 89 3a cpi r24, 0xA9 ; 169 + 8ec: 91 40 sbci r25, 0x01 ; 1 + 8ee: 48 f4 brcc .+18 ; 0x902 currentTrfcnt = DMA.CH0.TRFCNT; - 8dc: 80 91 14 01 lds r24, 0x0114 ; 0x800114 <__TEXT_REGION_LENGTH__+0x700114> - 8e0: 90 91 15 01 lds r25, 0x0115 ; 0x800115 <__TEXT_REGION_LENGTH__+0x700115> - 8e4: 80 93 c8 2b sts 0x2BC8, r24 ; 0x802bc8 - 8e8: 90 93 c9 2b sts 0x2BC9, r25 ; 0x802bc9 + 8f0: 80 91 14 01 lds r24, 0x0114 ; 0x800114 <__TEXT_REGION_LENGTH__+0x700114> + 8f4: 90 91 15 01 lds r25, 0x0115 ; 0x800115 <__TEXT_REGION_LENGTH__+0x700115> + 8f8: 80 93 c8 2b sts 0x2BC8, r24 ; 0x802bc8 + 8fc: 90 93 c9 2b sts 0x2BC9, r25 ; 0x802bc9 asm("nop"); - 8ec: 00 00 nop + 900: 00 00 nop } if(firstFrame){ - 8ee: 80 91 94 20 lds r24, 0x2094 ; 0x802094 - 8f2: 88 23 and r24, r24 - 8f4: 39 f0 breq .+14 ; 0x904 + 902: 80 91 94 20 lds r24, 0x2094 ; 0x802094 + 906: 88 23 and r24, r24 + 908: 39 f0 breq .+14 ; 0x918 tiny_calibration_first_sof(); - 8f6: f5 dc rcall .-1558 ; 0x2e2 + 90a: f3 dc rcall .-1562 ; 0x2f2 firstFrame = 0; - 8f8: 10 92 94 20 sts 0x2094, r1 ; 0x802094 + 90c: 10 92 94 20 sts 0x2094, r1 ; 0x802094 tcinit = 1; - 8fc: 81 e0 ldi r24, 0x01 ; 1 - 8fe: 80 93 93 20 sts 0x2093, r24 ; 0x802093 + 910: 81 e0 ldi r24, 0x01 ; 1 + 912: 80 93 93 20 sts 0x2093, r24 ; 0x802093 return; - 902: 35 c0 rjmp .+106 ; 0x96e + 916: 21 c0 rjmp .+66 ; 0x95a } else{ if(tcinit){ - 904: 80 91 93 20 lds r24, 0x2093 ; 0x802093 - 908: 88 23 and r24, r24 - 90a: 41 f0 breq .+16 ; 0x91c + 918: 80 91 93 20 lds r24, 0x2093 ; 0x802093 + 91c: 88 23 and r24, r24 + 91e: 41 f0 breq .+16 ; 0x930 if(calibration_values_found == 0x03){ - 90c: 80 91 8c 20 lds r24, 0x208C ; 0x80208c <__data_end> - 910: 83 30 cpi r24, 0x03 ; 3 - 912: 19 f4 brne .+6 ; 0x91a + 920: 80 91 8c 20 lds r24, 0x208C ; 0x80208c <__data_end> + 924: 83 30 cpi r24, 0x03 ; 3 + 926: 19 f4 brne .+6 ; 0x92e tiny_calibration_maintain(); - 914: f8 dc rcall .-1552 ; 0x306 + 928: f6 dc rcall .-1556 ; 0x316 tiny_calibration_layer2(); - 916: 7a de rcall .-780 ; 0x60c - 918: 01 c0 rjmp .+2 ; 0x91c + 92a: 78 de rcall .-784 ; 0x61c + 92c: 01 c0 rjmp .+2 ; 0x930 } else tiny_calibration_find_values(); - 91a: cf dd rcall .-1122 ; 0x4ba + 92e: cd dd rcall .-1126 ; 0x4ca } else debug_divider++;*/ } } if(debugOnNextEnd){ - 91c: 80 91 92 20 lds r24, 0x2092 ; 0x802092 - 920: 88 23 and r24, r24 - 922: 51 f0 breq .+20 ; 0x938 + 930: 80 91 92 20 lds r24, 0x2092 ; 0x802092 + 934: 88 23 and r24, r24 + 936: 51 f0 breq .+20 ; 0x94c currentTrfcnt = DMA.CH0.TRFCNT; - 924: 80 91 14 01 lds r24, 0x0114 ; 0x800114 <__TEXT_REGION_LENGTH__+0x700114> - 928: 90 91 15 01 lds r25, 0x0115 ; 0x800115 <__TEXT_REGION_LENGTH__+0x700115> - 92c: 80 93 c8 2b sts 0x2BC8, r24 ; 0x802bc8 - 930: 90 93 c9 2b sts 0x2BC9, r25 ; 0x802bc9 + 938: 80 91 14 01 lds r24, 0x0114 ; 0x800114 <__TEXT_REGION_LENGTH__+0x700114> + 93c: 90 91 15 01 lds r25, 0x0115 ; 0x800115 <__TEXT_REGION_LENGTH__+0x700115> + 940: 80 93 c8 2b sts 0x2BC8, r24 ; 0x802bc8 + 944: 90 93 c9 2b sts 0x2BC9, r25 ; 0x802bc9 debugOnNextEnd = 0; - 934: 10 92 92 20 sts 0x2092, r1 ; 0x802092 - } - if(global_mode < 5){ - 938: 80 91 09 20 lds r24, 0x2009 ; 0x802009 - 93c: 85 30 cpi r24, 0x05 ; 5 - 93e: 60 f4 brcc .+24 ; 0x958 - usb_state = (DMA.CH0.TRFCNT < 375) ? 1 : 0; - 940: 20 91 14 01 lds r18, 0x0114 ; 0x800114 <__TEXT_REGION_LENGTH__+0x700114> - 944: 30 91 15 01 lds r19, 0x0115 ; 0x800115 <__TEXT_REGION_LENGTH__+0x700115> - 948: 81 e0 ldi r24, 0x01 ; 1 - 94a: 27 37 cpi r18, 0x77 ; 119 - 94c: 31 40 sbci r19, 0x01 ; 1 - 94e: 08 f0 brcs .+2 ; 0x952 - 950: 80 e0 ldi r24, 0x00 ; 0 - 952: 80 93 96 20 sts 0x2096, r24 ; 0x802096 - 956: 0b c0 rjmp .+22 ; 0x96e - } - else{ - usb_state = (DMA.CH0.TRFCNT < 750) ? 1 : 0; - 958: 20 91 14 01 lds r18, 0x0114 ; 0x800114 <__TEXT_REGION_LENGTH__+0x700114> - 95c: 30 91 15 01 lds r19, 0x0115 ; 0x800115 <__TEXT_REGION_LENGTH__+0x700115> - 960: 81 e0 ldi r24, 0x01 ; 1 - 962: 2e 3e cpi r18, 0xEE ; 238 - 964: 32 40 sbci r19, 0x02 ; 2 - 966: 08 f0 brcs .+2 ; 0x96a - 968: 80 e0 ldi r24, 0x00 ; 0 - 96a: 80 93 96 20 sts 0x2096, r24 ; 0x802096 - } + 948: 10 92 92 20 sts 0x2092, r1 ; 0x802092 + } + else{ + usb_state = (DMA.CH0.TRFCNT < 750) ? 1 : 0; + } + #else + usb_state = !usb_state; + 94c: 90 91 96 20 lds r25, 0x2096 ; 0x802096 + 950: 81 e0 ldi r24, 0x01 ; 1 + 952: 91 11 cpse r25, r1 + 954: 80 e0 ldi r24, 0x00 ; 0 + 956: 80 93 96 20 sts 0x2096, r24 ; 0x802096 + #endif + return; } - 96e: df 91 pop r29 - 970: cf 91 pop r28 - 972: 08 95 ret + 95a: df 91 pop r29 + 95c: cf 91 pop r28 + 95e: 08 95 ret -00000974 : +00000960 : bool main_vendor_enable(void) { - 974: 0f 93 push r16 - 976: 1f 93 push r17 + 960: 0f 93 push r16 + 962: 1f 93 push r17 main_b_vendor_enable = true; - 978: 81 e0 ldi r24, 0x01 ; 1 - 97a: 80 93 99 20 sts 0x2099, r24 ; 0x802099 + 964: 81 e0 ldi r24, 0x01 ; 1 + 966: 80 93 99 20 sts 0x2099, r24 ; 0x802099 firstFrame = 1; - 97e: 80 93 94 20 sts 0x2094, r24 ; 0x802094 + 96a: 80 93 94 20 sts 0x2094, r24 ; 0x802094 udd_ep_run(0x81, false, (uint8_t *)&isoBuf[0], 125, iso_callback); - 982: 0f ea ldi r16, 0xAF ; 175 - 984: 13 e0 ldi r17, 0x03 ; 3 - 986: 2d e7 ldi r18, 0x7D ; 125 - 988: 30 e0 ldi r19, 0x00 ; 0 - 98a: 4c ec ldi r20, 0xCC ; 204 - 98c: 55 e2 ldi r21, 0x25 ; 37 - 98e: 60 e0 ldi r22, 0x00 ; 0 - 990: 81 e8 ldi r24, 0x81 ; 129 - 992: 0e 94 7f 14 call 0x28fe ; 0x28fe + 96e: 07 eb ldi r16, 0xB7 ; 183 + 970: 13 e0 ldi r17, 0x03 ; 3 + 972: 2d e7 ldi r18, 0x7D ; 125 + 974: 30 e0 ldi r19, 0x00 ; 0 + 976: 4c ec ldi r20, 0xCC ; 204 + 978: 55 e2 ldi r21, 0x25 ; 37 + 97a: 60 e0 ldi r22, 0x00 ; 0 + 97c: 81 e8 ldi r24, 0x81 ; 129 + 97e: 0e 94 ad 14 call 0x295a ; 0x295a udd_ep_run(0x84, false, (uint8_t *)&isoBuf[375], 125, iso_callback); udd_ep_run(0x85, false, (uint8_t *)&isoBuf[500], 125, iso_callback); udd_ep_run(0x86, false, (uint8_t *)&isoBuf[625], 125, iso_callback); #endif return true; } - 996: 81 e0 ldi r24, 0x01 ; 1 - 998: 1f 91 pop r17 - 99a: 0f 91 pop r16 - 99c: 08 95 ret + 982: 81 e0 ldi r24, 0x01 ; 1 + 984: 1f 91 pop r17 + 986: 0f 91 pop r16 + 988: 08 95 ret -0000099e : +0000098a : void main_vendor_disable(void) { main_b_vendor_enable = false; - 99e: 10 92 99 20 sts 0x2099, r1 ; 0x802099 - 9a2: 08 95 ret + 98a: 10 92 99 20 sts 0x2099, r1 ; 0x802099 + 98e: 08 95 ret -000009a4 : +00000990 : } bool main_setup_out_received(void) { return 1; } - 9a4: 81 e0 ldi r24, 0x01 ; 1 - 9a6: 08 95 ret + 990: 81 e0 ldi r24, 0x01 ; 1 + 992: 08 95 ret -000009a8 : +00000994 : bool main_setup_in_received(void) { return true; } - 9a8: 81 e0 ldi r24, 0x01 ; 1 - 9aa: 08 95 ret + 994: 81 e0 ldi r24, 0x01 ; 1 + 996: 08 95 ret -000009ac : +00000998 : return; } void tiny_adc_ch0setup(unsigned char gain_mask){ ADCA.CH0.CTRL = 0x00; //Reset - 9ac: e0 e0 ldi r30, 0x00 ; 0 - 9ae: f2 e0 ldi r31, 0x02 ; 2 - 9b0: 10 a2 std Z+32, r1 ; 0x20 + 998: e0 e0 ldi r30, 0x00 ; 0 + 99a: f2 e0 ldi r31, 0x02 ; 2 + 99c: 10 a2 std Z+32, r1 ; 0x20 ADCA.CH0.CTRL = ADC_CH_START_bm | (gain_mask&0x1c) | ADC_CH_INPUTMODE_DIFFWGAIN_gc; - 9b2: 98 2f mov r25, r24 - 9b4: 9c 71 andi r25, 0x1C ; 28 - 9b6: 93 68 ori r25, 0x83 ; 131 - 9b8: 90 a3 std Z+32, r25 ; 0x20 + 99e: 98 2f mov r25, r24 + 9a0: 9c 71 andi r25, 0x1C ; 28 + 9a2: 93 68 ori r25, 0x83 ; 131 + 9a4: 90 a3 std Z+32, r25 ; 0x20 #ifdef VERO ADCA.CH0.MUXCTRL = ADC_CH_MUXPOS_PIN0_gc | ((gain_mask&0x80) ? ADC_CH_MUXNEG_PIN6_gc : ADC_CH_MUXNEG_PIN4_gc); - 9ba: 88 1f adc r24, r24 - 9bc: 88 27 eor r24, r24 - 9be: 88 1f adc r24, r24 - 9c0: 88 0f add r24, r24 - 9c2: 81 a3 std Z+33, r24 ; 0x21 + 9a6: 88 1f adc r24, r24 + 9a8: 88 27 eor r24, r24 + 9aa: 88 1f adc r24, r24 + 9ac: 88 0f add r24, r24 + 9ae: 81 a3 std Z+33, r24 ; 0x21 #else ADCA.CH0.MUXCTRL = ((gain_mask&0x80) ? ADC_CH_MUXPOS_PIN2_gc : ADC_CH_MUXPOS_PIN0_gc) | ((gain_mask&0x80) ? ADC_CH_MUXNEG_PIN6_gc : ADC_CH_MUXNEG_PIN4_gc); #endif ADCA.CH0.INTCTRL = ADC_CH_INTLVL_OFF_gc; - 9c4: 12 a2 std Z+34, r1 ; 0x22 + 9b0: 12 a2 std Z+34, r1 ; 0x22 ADCA.CH0.SCAN = 0x00; //Disable scanning - 9c6: 16 a2 std Z+38, r1 ; 0x26 - 9c8: 08 95 ret + 9b2: 16 a2 std Z+38, r1 ; 0x26 + 9b4: 08 95 ret -000009ca : +000009b6 : } void tiny_adc_ch1setup(unsigned char gain_mask){ ADCA.CH2.CTRL = 0x00; //Reset - 9ca: e0 e0 ldi r30, 0x00 ; 0 - 9cc: f2 e0 ldi r31, 0x02 ; 2 - 9ce: 10 aa std Z+48, r1 ; 0x30 + 9b6: e0 e0 ldi r30, 0x00 ; 0 + 9b8: f2 e0 ldi r31, 0x02 ; 2 + 9ba: 10 aa std Z+48, r1 ; 0x30 ADCA.CH2.CTRL = ADC_CH_START_bm | gain_mask | ADC_CH_INPUTMODE_DIFFWGAIN_gc; - 9d0: 83 68 ori r24, 0x83 ; 131 - 9d2: 80 ab std Z+48, r24 ; 0x30 + 9bc: 83 68 ori r24, 0x83 ; 131 + 9be: 80 ab std Z+48, r24 ; 0x30 ADCA.CH2.MUXCTRL = ADC_CH_MUXPOS_PIN2_gc | ADC_CH_MUXNEG_PIN4_gc; - 9d4: 80 e1 ldi r24, 0x10 ; 16 - 9d6: 81 ab std Z+49, r24 ; 0x31 + 9c0: 80 e1 ldi r24, 0x10 ; 16 + 9c2: 81 ab std Z+49, r24 ; 0x31 ADCA.CH2.INTCTRL = ADC_CH_INTLVL_OFF_gc; - 9d8: 12 aa std Z+50, r1 ; 0x32 + 9c4: 12 aa std Z+50, r1 ; 0x32 ADCA.CH2.SCAN = 0x00; //Disable scanning - 9da: 16 aa std Z+54, r1 ; 0x36 - 9dc: 08 95 ret + 9c6: 16 aa std Z+54, r1 ; 0x36 + 9c8: 08 95 ret -000009de : +000009ca : } void tiny_adc_pid_setup(void){ ADCA.CH1.CTRL = 0x00; //Reset - 9de: e0 e0 ldi r30, 0x00 ; 0 - 9e0: f2 e0 ldi r31, 0x02 ; 2 - 9e2: 10 a6 std Z+40, r1 ; 0x28 + 9ca: e0 e0 ldi r30, 0x00 ; 0 + 9cc: f2 e0 ldi r31, 0x02 ; 2 + 9ce: 10 a6 std Z+40, r1 ; 0x28 ADCA.CH1.CTRL = ADC_CH_START_bm | ADC_CH_GAIN_1X_gc | ADC_CH_INPUTMODE_DIFFWGAIN_gc; - 9e4: 83 e8 ldi r24, 0x83 ; 131 - 9e6: 80 a7 std Z+40, r24 ; 0x28 + 9d0: 83 e8 ldi r24, 0x83 ; 131 + 9d2: 80 a7 std Z+40, r24 ; 0x28 ADCA.CH1.MUXCTRL = ADC_CH_MUXPOS_PIN5_gc | 0b00000111; - 9e8: 8f e2 ldi r24, 0x2F ; 47 - 9ea: 81 a7 std Z+41, r24 ; 0x29 + 9d4: 8f e2 ldi r24, 0x2F ; 47 + 9d6: 81 a7 std Z+41, r24 ; 0x29 ADCA.CH1.INTCTRL = ADC_CH_INTLVL_OFF_gc; - 9ec: 12 a6 std Z+42, r1 ; 0x2a + 9d8: 12 a6 std Z+42, r1 ; 0x2a ADCA.CH1.SCAN = 0x00; //Disable scanning - 9ee: 16 a6 std Z+46, r1 ; 0x2e - 9f0: 08 95 ret + 9da: 16 a6 std Z+46, r1 ; 0x2e + 9dc: 08 95 ret -000009f2 : +000009de : //FROM: http://www.avrfreaks.net/forum/xmega-production-signature-row uint8_t ReadCalibrationByte(uint8_t index){ uint8_t result; /* Load the NVM Command register to read the calibration row. */ NVM_CMD = NVM_CMD_READ_CALIB_ROW_gc; - 9f2: aa ec ldi r26, 0xCA ; 202 - 9f4: b1 e0 ldi r27, 0x01 ; 1 - 9f6: 92 e0 ldi r25, 0x02 ; 2 - 9f8: 9c 93 st X, r25 + 9de: aa ec ldi r26, 0xCA ; 202 + 9e0: b1 e0 ldi r27, 0x01 ; 1 + 9e2: 92 e0 ldi r25, 0x02 ; 2 + 9e4: 9c 93 st X, r25 result = pgm_read_byte(index); - 9fa: e8 2f mov r30, r24 - 9fc: f0 e0 ldi r31, 0x00 ; 0 - 9fe: 84 91 lpm r24, Z + 9e6: e8 2f mov r30, r24 + 9e8: f0 e0 ldi r31, 0x00 ; 0 + 9ea: 84 91 lpm r24, Z /* Clean up NVM Command register. */ NVM_CMD = NVM_CMD_NO_OPERATION_gc; - a00: 1c 92 st X, r1 + 9ec: 1c 92 st X, r1 return( result ); } - a02: 08 95 ret + 9ee: 08 95 ret -00000a04 : +000009f0 : // These 2 files need to be included in order to read // the production calibration values from EEPROM #include #include void tiny_adc_setup(unsigned char ch2_enable, unsigned char seven_fiddy_ksps){ - a04: cf 93 push r28 - a06: df 93 push r29 + 9f0: cf 93 push r28 + 9f2: df 93 push r29 PR.PRPA &=0b11111101; - a08: e0 e7 ldi r30, 0x70 ; 112 - a0a: f0 e0 ldi r31, 0x00 ; 0 - a0c: 91 81 ldd r25, Z+1 ; 0x01 - a0e: 9d 7f andi r25, 0xFD ; 253 - a10: 91 83 std Z+1, r25 ; 0x01 + 9f4: e0 e7 ldi r30, 0x70 ; 112 + 9f6: f0 e0 ldi r31, 0x00 ; 0 + 9f8: 91 81 ldd r25, Z+1 ; 0x01 + 9fa: 9d 7f andi r25, 0xFD ; 253 + 9fc: 91 83 std Z+1, r25 ; 0x01 ADCA.CTRLA = 0x00; //Turn off - a12: 10 92 00 02 sts 0x0200, r1 ; 0x800200 <__TEXT_REGION_LENGTH__+0x700200> + 9fe: 10 92 00 02 sts 0x0200, r1 ; 0x800200 <__TEXT_REGION_LENGTH__+0x700200> ADCA.CTRLB = ADC_FREERUN_bm | (seven_fiddy_ksps == 2 ? ADC_RESOLUTION_LEFT12BIT_gc : ADC_RESOLUTION_8BIT_gc) | ADC_CONMODE_bm ; - a16: 62 30 cpi r22, 0x02 ; 2 - a18: 31 f1 breq .+76 ; 0xa66 - a1a: e0 e0 ldi r30, 0x00 ; 0 - a1c: f2 e0 ldi r31, 0x02 ; 2 - a1e: 9c e1 ldi r25, 0x1C ; 28 - a20: 91 83 std Z+1, r25 ; 0x01 + a02: 62 30 cpi r22, 0x02 ; 2 + a04: 31 f1 breq .+76 ; 0xa52 + a06: e0 e0 ldi r30, 0x00 ; 0 + a08: f2 e0 ldi r31, 0x02 ; 2 + a0a: 9c e1 ldi r25, 0x1C ; 28 + a0c: 91 83 std Z+1, r25 ; 0x01 ADCA.REFCTRL = ADC_REFSEL_INTVCC2_gc; - a22: 90 e4 ldi r25, 0x40 ; 64 - a24: 92 83 std Z+2, r25 ; 0x02 + a0e: 90 e4 ldi r25, 0x40 ; 64 + a10: 92 83 std Z+2, r25 ; 0x02 ADCA.EVCTRL = ch2_enable ? ADC_SWEEP_0123_gc : ADC_SWEEP_01_gc; //Non-zero causes issues with interrupts! ;.; - a26: 81 11 cpse r24, r1 - a28: 02 c0 rjmp .+4 ; 0xa2e - a2a: 80 e4 ldi r24, 0x40 ; 64 - a2c: 01 c0 rjmp .+2 ; 0xa30 - a2e: 80 ec ldi r24, 0xC0 ; 192 - a30: 80 93 03 02 sts 0x0203, r24 ; 0x800203 <__TEXT_REGION_LENGTH__+0x700203> + a12: 81 11 cpse r24, r1 + a14: 02 c0 rjmp .+4 ; 0xa1a + a16: 80 e4 ldi r24, 0x40 ; 64 + a18: 01 c0 rjmp .+2 ; 0xa1c + a1a: 80 ec ldi r24, 0xC0 ; 192 + a1c: 80 93 03 02 sts 0x0203, r24 ; 0x800203 <__TEXT_REGION_LENGTH__+0x700203> #if OVERCLOCK == 48 ADCA.PRESCALER = seven_fiddy_ksps == 1 ? ADC_PRESCALER_DIV32_gc : ADC_PRESCALER_DIV64_gc; //ADC Clock = Sysclock/128 - a34: 61 30 cpi r22, 0x01 ; 1 - a36: 11 f0 breq .+4 ; 0xa3c - a38: 84 e0 ldi r24, 0x04 ; 4 - a3a: 01 c0 rjmp .+2 ; 0xa3e - a3c: 83 e0 ldi r24, 0x03 ; 3 - a3e: c0 e0 ldi r28, 0x00 ; 0 - a40: d2 e0 ldi r29, 0x02 ; 2 - a42: 8c 83 std Y+4, r24 ; 0x04 + a20: 61 30 cpi r22, 0x01 ; 1 + a22: 11 f0 breq .+4 ; 0xa28 + a24: 84 e0 ldi r24, 0x04 ; 4 + a26: 01 c0 rjmp .+2 ; 0xa2a + a28: 83 e0 ldi r24, 0x03 ; 3 + a2a: c0 e0 ldi r28, 0x00 ; 0 + a2c: d2 e0 ldi r29, 0x02 ; 2 + a2e: 8c 83 std Y+4, r24 ; 0x04 #else ADCA.PRESCALER = seven_fiddy_ksps == 1 ? ADC_PRESCALER_DIV16_gc : ADC_PRESCALER_DIV32_gc; //ADC Clock = Sysclock/128 #endif ADCA.CALL = ReadCalibrationByte(offsetof(NVM_PROD_SIGNATURES_t, ADCACAL0)); //Load calibration bytes from production row. - a44: 80 e2 ldi r24, 0x20 ; 32 - a46: d5 df rcall .-86 ; 0x9f2 - a48: 8c 87 std Y+12, r24 ; 0x0c + a30: 80 e2 ldi r24, 0x20 ; 32 + a32: d5 df rcall .-86 ; 0x9de + a34: 8c 87 std Y+12, r24 ; 0x0c ADCA.CALH = ReadCalibrationByte(offsetof(NVM_PROD_SIGNATURES_t, ADCACAL1)); //Load calibration bytes from production row. - a4a: 81 e2 ldi r24, 0x21 ; 33 - a4c: d2 df rcall .-92 ; 0x9f2 - a4e: 8d 87 std Y+13, r24 ; 0x0d + a36: 81 e2 ldi r24, 0x21 ; 33 + a38: d2 df rcall .-92 ; 0x9de + a3a: 8d 87 std Y+13, r24 ; 0x0d ADCA.CMP = 0x0000; //No compare used - a50: 18 8e std Y+24, r1 ; 0x18 - a52: 19 8e std Y+25, r1 ; 0x19 + a3c: 18 8e std Y+24, r1 ; 0x18 + a3e: 19 8e std Y+25, r1 ; 0x19 ADCA.CTRLA = ADC_ENABLE_bm; - a54: 81 e0 ldi r24, 0x01 ; 1 - a56: 88 83 st Y, r24 + a40: 81 e0 ldi r24, 0x01 ; 1 + a42: 88 83 st Y, r24 tiny_adc_pid_setup(); - a58: c2 df rcall .-124 ; 0x9de - a5a: 0e c0 rjmp .+28 ; 0xa78 + a44: c2 df rcall .-124 ; 0x9ca + a46: 0e c0 rjmp .+28 ; 0xa64 PR.PRPA &=0b11111101; ADCA.CTRLA = 0x00; //Turn off ADCA.CTRLB = ADC_FREERUN_bm | (seven_fiddy_ksps == 2 ? ADC_RESOLUTION_LEFT12BIT_gc : ADC_RESOLUTION_8BIT_gc) | ADC_CONMODE_bm ; ADCA.REFCTRL = ADC_REFSEL_INTVCC2_gc; ADCA.EVCTRL = ch2_enable ? ADC_SWEEP_0123_gc : ADC_SWEEP_01_gc; //Non-zero causes issues with interrupts! ;.; - a5c: 80 ec ldi r24, 0xC0 ; 192 - a5e: 80 93 03 02 sts 0x0203, r24 ; 0x800203 <__TEXT_REGION_LENGTH__+0x700203> + a48: 80 ec ldi r24, 0xC0 ; 192 + a4a: 80 93 03 02 sts 0x0203, r24 ; 0x800203 <__TEXT_REGION_LENGTH__+0x700203> #if OVERCLOCK == 48 ADCA.PRESCALER = seven_fiddy_ksps == 1 ? ADC_PRESCALER_DIV32_gc : ADC_PRESCALER_DIV64_gc; //ADC Clock = Sysclock/128 - a62: 84 e0 ldi r24, 0x04 ; 4 - a64: ec cf rjmp .-40 ; 0xa3e + a4e: 84 e0 ldi r24, 0x04 ; 4 + a50: ec cf rjmp .-40 ; 0xa2a void tiny_adc_setup(unsigned char ch2_enable, unsigned char seven_fiddy_ksps){ PR.PRPA &=0b11111101; ADCA.CTRLA = 0x00; //Turn off ADCA.CTRLB = ADC_FREERUN_bm | (seven_fiddy_ksps == 2 ? ADC_RESOLUTION_LEFT12BIT_gc : ADC_RESOLUTION_8BIT_gc) | ADC_CONMODE_bm ; - a66: e0 e0 ldi r30, 0x00 ; 0 - a68: f2 e0 ldi r31, 0x02 ; 2 - a6a: 9e e1 ldi r25, 0x1E ; 30 - a6c: 91 83 std Z+1, r25 ; 0x01 + a52: e0 e0 ldi r30, 0x00 ; 0 + a54: f2 e0 ldi r31, 0x02 ; 2 + a56: 9e e1 ldi r25, 0x1E ; 30 + a58: 91 83 std Z+1, r25 ; 0x01 ADCA.REFCTRL = ADC_REFSEL_INTVCC2_gc; - a6e: 90 e4 ldi r25, 0x40 ; 64 - a70: 92 83 std Z+2, r25 ; 0x02 + a5a: 90 e4 ldi r25, 0x40 ; 64 + a5c: 92 83 std Z+2, r25 ; 0x02 ADCA.EVCTRL = ch2_enable ? ADC_SWEEP_0123_gc : ADC_SWEEP_01_gc; //Non-zero causes issues with interrupts! ;.; - a72: 81 11 cpse r24, r1 - a74: f3 cf rjmp .-26 ; 0xa5c - a76: d9 cf rjmp .-78 ; 0xa2a + a5e: 81 11 cpse r24, r1 + a60: f3 cf rjmp .-26 ; 0xa48 + a62: d9 cf rjmp .-78 ; 0xa16 ADCA.CTRLA = ADC_ENABLE_bm; tiny_adc_pid_setup(); return; } - a78: df 91 pop r29 - a7a: cf 91 pop r28 - a7c: 08 95 ret + a64: df 91 pop r29 + a66: cf 91 pop r28 + a68: 08 95 ret -00000a7e <__vector_71>: +00000a6a <__vector_71>: NVM_CMD = NVM_CMD_NO_OPERATION_gc; return( result ); } ISR(ADCA_CH0_vect){ - a7e: 1f 92 push r1 - a80: 0f 92 push r0 - a82: 0f b6 in r0, 0x3f ; 63 - a84: 0f 92 push r0 - a86: 11 24 eor r1, r1 - a88: 8f 93 push r24 + a6a: 1f 92 push r1 + a6c: 0f 92 push r0 + a6e: 0f b6 in r0, 0x3f ; 63 + a70: 0f 92 push r0 + a72: 11 24 eor r1, r1 + a74: 8f 93 push r24 ... asm("nop"); asm("nop"); asm("nop"); asm("nop"); ADCA.CH0.INTFLAGS = 0x01; - a92: 81 e0 ldi r24, 0x01 ; 1 - a94: 80 93 23 02 sts 0x0223, r24 ; 0x800223 <__TEXT_REGION_LENGTH__+0x700223> - a98: 8f 91 pop r24 - a9a: 0f 90 pop r0 - a9c: 0f be out 0x3f, r0 ; 63 - a9e: 0f 90 pop r0 - aa0: 1f 90 pop r1 - aa2: 18 95 reti + a7e: 81 e0 ldi r24, 0x01 ; 1 + a80: 80 93 23 02 sts 0x0223, r24 ; 0x800223 <__TEXT_REGION_LENGTH__+0x700223> + a84: 8f 91 pop r24 + a86: 0f 90 pop r0 + a88: 0f be out 0x3f, r0 ; 63 + a8a: 0f 90 pop r0 + a8c: 1f 90 pop r1 + a8e: 18 95 reti -00000aa4 : +00000a90 : #include "tiny_adc.h" #include #include void tiny_dac_setup(void){ - aa4: cf 93 push r28 - aa6: df 93 push r29 + a90: cf 93 push r28 + a92: df 93 push r29 //Turn on in PR PR.PRPB &=0b11111011; - aa8: e0 e7 ldi r30, 0x70 ; 112 - aaa: f0 e0 ldi r31, 0x00 ; 0 - aac: 82 81 ldd r24, Z+2 ; 0x02 - aae: 8b 7f andi r24, 0xFB ; 251 - ab0: 82 83 std Z+2, r24 ; 0x02 + a94: e0 e7 ldi r30, 0x70 ; 112 + a96: f0 e0 ldi r31, 0x00 ; 0 + a98: 82 81 ldd r24, Z+2 ; 0x02 + a9a: 8b 7f andi r24, 0xFB ; 251 + a9c: 82 83 std Z+2, r24 ; 0x02 DACB.CTRLA = DAC_CH1EN_bm | DAC_CH0EN_bm | DAC_ENABLE_bm; - ab2: c0 e2 ldi r28, 0x20 ; 32 - ab4: d3 e0 ldi r29, 0x03 ; 3 - ab6: 8d e0 ldi r24, 0x0D ; 13 - ab8: 88 83 st Y, r24 + a9e: c0 e2 ldi r28, 0x20 ; 32 + aa0: d3 e0 ldi r29, 0x03 ; 3 + aa2: 8d e0 ldi r24, 0x0D ; 13 + aa4: 88 83 st Y, r24 DACB.CTRLB = DAC_CHSEL_DUAL_gc; - aba: 80 e4 ldi r24, 0x40 ; 64 - abc: 89 83 std Y+1, r24 ; 0x01 + aa6: 80 e4 ldi r24, 0x40 ; 64 + aa8: 89 83 std Y+1, r24 ; 0x01 DACB.CTRLC = DAC_REFSEL_AVCC_gc | DAC_LEFTADJ_bm; - abe: 89 e0 ldi r24, 0x09 ; 9 - ac0: 8a 83 std Y+2, r24 ; 0x02 + aaa: 89 e0 ldi r24, 0x09 ; 9 + aac: 8a 83 std Y+2, r24 ; 0x02 //EVCTRL unset //DACB.CH0DATAH = 127;//contains (8-bit) sample, assuming left adjust! //TODO: Calibrate DACB.CH0GAINCAL = ReadCalibrationByte(offsetof(NVM_PROD_SIGNATURES_t, DACB0GAINCAL)); //Load calibration bytes from production row. - ac2: 83 e3 ldi r24, 0x33 ; 51 - ac4: 96 df rcall .-212 ; 0x9f2 - ac6: 88 87 std Y+8, r24 ; 0x08 + aae: 83 e3 ldi r24, 0x33 ; 51 + ab0: 96 df rcall .-212 ; 0x9de + ab2: 88 87 std Y+8, r24 ; 0x08 DACB.CH0OFFSETCAL = ReadCalibrationByte(offsetof(NVM_PROD_SIGNATURES_t, DACB0OFFCAL)); //Load calibration bytes from production row. - ac8: 82 e3 ldi r24, 0x32 ; 50 - aca: 93 df rcall .-218 ; 0x9f2 - acc: 89 87 std Y+9, r24 ; 0x09 + ab4: 82 e3 ldi r24, 0x32 ; 50 + ab6: 93 df rcall .-218 ; 0x9de + ab8: 89 87 std Y+9, r24 ; 0x09 DACB.CH1GAINCAL = ReadCalibrationByte(offsetof(NVM_PROD_SIGNATURES_t, DACB1GAINCAL)); //Load calibration bytes from production row. - ace: 87 e3 ldi r24, 0x37 ; 55 - ad0: 90 df rcall .-224 ; 0x9f2 - ad2: 8a 87 std Y+10, r24 ; 0x0a + aba: 87 e3 ldi r24, 0x37 ; 55 + abc: 90 df rcall .-224 ; 0x9de + abe: 8a 87 std Y+10, r24 ; 0x0a DACB.CH1OFFSETCAL = ReadCalibrationByte(offsetof(NVM_PROD_SIGNATURES_t, DACB1OFFCAL)); //Load calibration bytes from production row. - ad4: 86 e3 ldi r24, 0x36 ; 54 - ad6: 8d df rcall .-230 ; 0x9f2 - ad8: 8b 87 std Y+11, r24 ; 0x0b + ac0: 86 e3 ldi r24, 0x36 ; 54 + ac2: 8d df rcall .-230 ; 0x9de + ac4: 8b 87 std Y+11, r24 ; 0x0b //Set up for triple mode! PORTB.DIR |= 0x03; - ada: e0 e2 ldi r30, 0x20 ; 32 - adc: f6 e0 ldi r31, 0x06 ; 6 - ade: 80 81 ld r24, Z - ae0: 83 60 ori r24, 0x03 ; 3 - ae2: 80 83 st Z, r24 + ac6: e0 e2 ldi r30, 0x20 ; 32 + ac8: f6 e0 ldi r31, 0x06 ; 6 + aca: 80 81 ld r24, Z + acc: 83 60 ori r24, 0x03 ; 3 + ace: 80 83 st Z, r24 PORTB.OUT = 0x00; - ae4: 14 82 std Z+4, r1 ; 0x04 - ae6: df 91 pop r29 - ae8: cf 91 pop r28 - aea: 08 95 ret + ad0: 14 82 std Z+4, r1 ; 0x04 + ad2: df 91 pop r29 + ad4: cf 91 pop r28 + ad6: 08 95 ret -00000aec : - median_TRFCNT_delay = 1; //Wait a few frames before actually setting median_TRFCNT, in case a SOF interrupt was queued during tiny_dma_set_mode_xxx. - DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm; //Enable! +00000ad8 : +#include "util/delay.h" + + +void tiny_dma_setup(void){ + //Turn on DMA + PR.PRGEN &=0b111111110; //Turn on DMA clk + ad8: e0 e7 ldi r30, 0x70 ; 112 + ada: f0 e0 ldi r31, 0x00 ; 0 + adc: 80 81 ld r24, Z + ade: 8e 7f andi r24, 0xFE ; 254 + ae0: 80 83 st Z, r24 + DMA.CTRL = DMA_ENABLE_bm | DMA_PRIMODE_CH0123_gc; + ae2: 83 e8 ldi r24, 0x83 ; 131 + ae4: 80 93 00 01 sts 0x0100, r24 ; 0x800100 <__TEXT_REGION_LENGTH__+0x700100> + ae8: 08 95 ret + +00000aea : +} +void tiny_dma_flush(void){ + DMA.CH0.CTRLA = 0x00; + aea: e0 e0 ldi r30, 0x00 ; 0 + aec: f1 e0 ldi r31, 0x01 ; 1 + aee: 10 8a std Z+16, r1 ; 0x10 + DMA.CH0.CTRLA = DMA_CH_RESET_bm; + af0: 80 e4 ldi r24, 0x40 ; 64 + af2: 80 8b std Z+16, r24 ; 0x10 + + DMA.CH1.CTRLA = 0x00; + af4: 10 a2 std Z+32, r1 ; 0x20 + DMA.CH1.CTRLA = DMA_CH_RESET_bm; + af6: 80 a3 std Z+32, r24 ; 0x20 + + DMA.CH2.CTRLA = 0x00; + af8: 10 aa std Z+48, r1 ; 0x30 + DMA.CH2.CTRLA = DMA_CH_RESET_bm; + afa: 80 ab std Z+48, r24 ; 0x30 + + DMA.CH3.CTRLA = 0x00; + afc: e0 e4 ldi r30, 0x40 ; 64 + afe: f1 e0 ldi r31, 0x01 ; 1 + b00: 10 82 st Z, r1 + DMA.CH3.CTRLA = DMA_CH_RESET_bm; + b02: 80 83 st Z, r24 + + b1_state = 0; + b04: 10 92 98 20 sts 0x2098, r1 ; 0x802098 + b2_state = 0; + b08: 10 92 97 20 sts 0x2097, r1 ; 0x802097 + usb_state = 1; + b0c: 81 e0 ldi r24, 0x01 ; 1 + b0e: 80 93 96 20 sts 0x2096, r24 ; 0x802096 + + dma_ch0_ran = 0; + b12: 10 92 7c 21 sts 0x217C, r1 ; 0x80217c + b16: 10 92 7d 21 sts 0x217D, r1 ; 0x80217d + dma_ch1_ran = 0; + b1a: 10 92 7a 21 sts 0x217A, r1 ; 0x80217a + b1e: 10 92 7b 21 sts 0x217B, r1 ; 0x80217b + b22: 08 95 ret + +00000b24 : +} +void tiny_dma_delayed_set(unsigned char mode){ + futureMode = mode; + b24: 80 93 aa 23 sts 0x23AA, r24 ; 0x8023aa + modeChanged = 1; + b28: 81 e0 ldi r24, 0x01 ; 1 + b2a: 80 93 91 20 sts 0x2091, r24 ; 0x802091 + b2e: 08 95 ret + +00000b30 : +} +void tiny_dma_set_mode_0(void){ + b30: cf 93 push r28 + b32: df 93 push r29 + + global_mode = 0; + b34: 10 92 09 20 sts 0x2009, r1 ; 0x802009 + + tiny_dma_flush(); + b38: d8 df rcall .-80 ; 0xaea + + DMA.CH2.REPCNT = 0; //Repeat forever! + b3a: c0 e0 ldi r28, 0x00 ; 0 + b3c: d1 e0 ldi r29, 0x01 ; 1 + b3e: 1e aa std Y+54, r1 ; 0x36 + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + b40: 94 e2 ldi r25, 0x24 ; 36 + b42: 98 ab std Y+48, r25 ; 0x30 + DMA.CH2.CTRLB = 0x00; //No interrupt for DacBuf!! + b44: 19 aa std Y+49, r1 ; 0x31 + DMA.CH2.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + b46: 49 e5 ldi r20, 0x59 ; 89 + b48: 4a ab std Y+50, r20 ; 0x32 + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER + b4a: 32 e0 ldi r19, 0x02 ; 2 + b4c: 3b ab std Y+51, r19 ; 0x33 + DMA.CH2.TRFCNT = auxDacBufLen; + b4e: 60 91 0b 20 lds r22, 0x200B ; 0x80200b + b52: 70 91 0c 20 lds r23, 0x200C ; 0x80200c + b56: 6c ab std Y+52, r22 ; 0x34 + b58: 7d ab std Y+53, r23 ; 0x35 + + DMA.CH2.SRCADDR0 = (( (uint16_t) &dacBuf_CH2[0]) >> 0) & 0xFF; //Source address is dacbuf + b5a: 6b ea ldi r22, 0xAB ; 171 + b5c: 73 e2 ldi r23, 0x23 ; 35 + b5e: 68 af std Y+56, r22 ; 0x38 + DMA.CH2.SRCADDR1 = (( (uint16_t) &dacBuf_CH2[0]) >> 8) & 0xFF; + b60: 79 af std Y+57, r23 ; 0x39 + DMA.CH2.SRCADDR2 = 0x00; + b62: 1a ae std Y+58, r1 ; 0x3a + + DMA.CH2.DESTADDR0 = (( (uint16_t) &DACB.CH1DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + b64: 8b e3 ldi r24, 0x3B ; 59 + b66: 8c af std Y+60, r24 ; 0x3c + DMA.CH2.DESTADDR1 = (( (uint16_t) &DACB.CH1DATAH) >> 8) & 0xFF; + b68: 83 e0 ldi r24, 0x03 ; 3 + b6a: 80 93 3d 01 sts 0x013D, r24 ; 0x80013d <__TEXT_REGION_LENGTH__+0x70013d> + DMA.CH2.DESTADDR2 = 0x00; + b6e: 10 92 3e 01 sts 0x013E, r1 ; 0x80013e <__TEXT_REGION_LENGTH__+0x70013e> + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + b72: 28 a9 ldd r18, Y+48 ; 0x30 + b74: 20 68 ori r18, 0x80 ; 128 + b76: 28 ab std Y+48, r18 ; 0x30 + DMA.CH3.REPCNT = 0; //Repeat forever! + b78: 10 92 46 01 sts 0x0146, r1 ; 0x800146 <__TEXT_REGION_LENGTH__+0x700146> + DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + b7c: e0 e4 ldi r30, 0x40 ; 64 + b7e: f1 e0 ldi r31, 0x01 ; 1 + b80: 90 83 st Z, r25 + DMA.CH3.CTRLB = 0x00; //Hi interrupt on block complete + b82: 10 92 41 01 sts 0x0141, r1 ; 0x800141 <__TEXT_REGION_LENGTH__+0x700141> + DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + b86: 40 93 42 01 sts 0x0142, r20 ; 0x800142 <__TEXT_REGION_LENGTH__+0x700142> + DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH2_gc; //Triggered from TCC0 when it hits PER + b8a: 80 93 43 01 sts 0x0143, r24 ; 0x800143 <__TEXT_REGION_LENGTH__+0x700143> + DMA.CH3.TRFCNT = dacBuf_len; + b8e: 40 91 0d 20 lds r20, 0x200D ; 0x80200d + b92: 50 91 0e 20 lds r21, 0x200E ; 0x80200e + b96: 40 93 44 01 sts 0x0144, r20 ; 0x800144 <__TEXT_REGION_LENGTH__+0x700144> + b9a: 50 93 45 01 sts 0x0145, r21 ; 0x800145 <__TEXT_REGION_LENGTH__+0x700145> + + DMA.CH3.SRCADDR0 = (( (uint16_t) &dacBuf_CH1[0]) >> 0) & 0xFF; //Source address is dacbuf + b9e: 4a e9 ldi r20, 0x9A ; 154 + ba0: 51 e2 ldi r21, 0x21 ; 33 + ba2: 40 93 48 01 sts 0x0148, r20 ; 0x800148 <__TEXT_REGION_LENGTH__+0x700148> + DMA.CH3.SRCADDR1 = (( (uint16_t) &dacBuf_CH1[0]) >> 8) & 0xFF; + ba6: 50 93 49 01 sts 0x0149, r21 ; 0x800149 <__TEXT_REGION_LENGTH__+0x700149> + DMA.CH3.SRCADDR2 = 0x00; + baa: 10 92 4a 01 sts 0x014A, r1 ; 0x80014a <__TEXT_REGION_LENGTH__+0x70014a> + + DMA.CH3.DESTADDR0 = (( (uint16_t) &DACB.CH0DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + bae: 29 e3 ldi r18, 0x39 ; 57 + bb0: 20 93 4c 01 sts 0x014C, r18 ; 0x80014c <__TEXT_REGION_LENGTH__+0x70014c> + DMA.CH3.DESTADDR1 = (( (uint16_t) &DACB.CH0DATAH) >> 8) & 0xFF; + bb4: 80 93 4d 01 sts 0x014D, r24 ; 0x80014d <__TEXT_REGION_LENGTH__+0x70014d> + DMA.CH3.DESTADDR2 = 0x00; + bb8: 10 92 4e 01 sts 0x014E, r1 ; 0x80014e <__TEXT_REGION_LENGTH__+0x70014e> + + //Must enable last for REPCNT won't work! + DMA.CH3.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + bbc: 20 81 ld r18, Z + bbe: 20 68 ori r18, 0x80 ; 128 + bc0: 20 83 st Z, r18 + + DMA.CH0.CTRLA = 0x00; + bc2: 18 8a std Y+16, r1 ; 0x10 + DMA.CH0.CTRLA = DMA_CH_RESET_bm; + bc4: 20 e4 ldi r18, 0x40 ; 64 + bc6: 28 8b std Y+16, r18 ; 0x10 + + DMA.CH0.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + bc8: 24 e0 ldi r18, 0x04 ; 4 + bca: 28 8b std Y+16, r18 ; 0x10 + DMA.CH0.CTRLB = 0x03; //No interrupt! + bcc: 89 8b std Y+17, r24 ; 0x11 + DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_DESTRELOAD_BLOCK_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + bce: 85 e9 ldi r24, 0x95 ; 149 + bd0: 8a 8b std Y+18, r24 ; 0x12 + DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_ADCA_CH0_gc; //Triggered from ADCA channel 0 + bd2: 80 e1 ldi r24, 0x10 ; 16 + bd4: 8b 8b std Y+19, r24 ; 0x13 + DMA.CH0.TRFCNT = HALFPACKET_SIZE; + bd6: 47 e7 ldi r20, 0x77 ; 119 + bd8: 51 e0 ldi r21, 0x01 ; 1 + bda: 4c 8b std Y+20, r20 ; 0x14 + bdc: 5d 8b std Y+21, r21 ; 0x15 + + DMA.CH0.SRCADDR0 = (( (uint16_t) &ADCA.CH0.RESL) >> 0) & 0xFF; //Source address is ADC + bde: 98 8f std Y+24, r25 ; 0x18 + DMA.CH0.SRCADDR1 = (( (uint16_t) &ADCA.CH0.RESL) >> 8) & 0xFF; + be0: 39 8f std Y+25, r19 ; 0x19 + DMA.CH0.SRCADDR2 = 0x00; + be2: 1a 8e std Y+26, r1 ; 0x1a + + DMA.CH0.DESTADDR0 = (( (uint16_t) &isoBuf[0]) >> 0) & 0xFF; //Dest address is isoBuf + be4: 8c ec ldi r24, 0xCC ; 204 + be6: 95 e2 ldi r25, 0x25 ; 37 + be8: 8c 8f std Y+28, r24 ; 0x1c + DMA.CH0.DESTADDR1 = (( (uint16_t) &isoBuf[0]) >> 8) & 0xFF; + bea: 9d 8f std Y+29, r25 ; 0x1d + DMA.CH0.DESTADDR2 = 0x00; + bec: 1e 8e std Y+30, r1 ; 0x1e + + tiny_calibration_synchronise_phase(500, 200); + bee: 68 ec ldi r22, 0xC8 ; 200 + bf0: 70 e0 ldi r23, 0x00 ; 0 + bf2: 84 ef ldi r24, 0xF4 ; 244 + bf4: 91 e0 ldi r25, 0x01 ; 1 + bf6: 78 dd rcall .-1296 ; 0x6e8 + median_TRFCNT = 200; + bf8: 88 ec ldi r24, 0xC8 ; 200 + bfa: 90 e0 ldi r25, 0x00 ; 0 + bfc: 80 93 07 20 sts 0x2007, r24 ; 0x802007 + c00: 90 93 08 20 sts 0x2008, r25 ; 0x802008 + median_TRFCNT_delay = 1; //Wait a few frames before actually setting median_TRFCNT, in case a SOF interrupt was queued during tiny_dma_set_mode_xxx. + c04: 81 e0 ldi r24, 0x01 ; 1 + c06: 80 93 06 20 sts 0x2006, r24 ; 0x802006 + DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + c0a: 88 89 ldd r24, Y+16 ; 0x10 + c0c: 80 68 ori r24, 0x80 ; 128 + c0e: 88 8b std Y+16, r24 ; 0x10 + +} + c10: df 91 pop r29 + c12: cf 91 pop r28 + c14: 08 95 ret + +00000c16 : + +void tiny_dma_loop_mode_0(void){ + c16: 08 95 ret + +00000c18 : + return; } -void tiny_dma_loop_mode_7(void){ - aec: e0 e7 ldi r30, 0x70 ; 112 - aee: f0 e0 ldi r31, 0x00 ; 0 - af0: 80 81 ld r24, Z - af2: 8e 7f andi r24, 0xFE ; 254 - af4: 80 83 st Z, r24 - af6: 83 e8 ldi r24, 0x83 ; 131 - af8: 80 93 00 01 sts 0x0100, r24 ; 0x800100 <__TEXT_REGION_LENGTH__+0x700100> - afc: 08 95 ret +void tiny_dma_set_mode_1(void){ + c18: 1f 93 push r17 + c1a: cf 93 push r28 + c1c: df 93 push r29 + + + global_mode = 1; + c1e: 11 e0 ldi r17, 0x01 ; 1 + c20: 10 93 09 20 sts 0x2009, r17 ; 0x802009 + + tiny_dma_flush(); + c24: 62 df rcall .-316 ; 0xaea + + //AUX channel (to keep it tx, therefore always rx) + DMA.CH2.CTRLA = 0x00; + c26: c0 e0 ldi r28, 0x00 ; 0 + c28: d1 e0 ldi r29, 0x01 ; 1 + c2a: 18 aa std Y+48, r1 ; 0x30 + DMA.CH2.CTRLA = DMA_CH_RESET_bm; + c2c: 80 e4 ldi r24, 0x40 ; 64 + c2e: 88 ab std Y+48, r24 ; 0x30 + + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + c30: 84 e0 ldi r24, 0x04 ; 4 + c32: 88 ab std Y+48, r24 ; 0x30 + DMA.CH2.CTRLB = 0x00; //No int + c34: 19 aa std Y+49, r1 ; 0x31 + DMA.CH2.ADDRCTRL = DMA_CH_SRCDIR_FIXED_gc | DMA_CH_DESTDIR_FIXED_gc; //Source and address fixed. + c36: 1a aa std Y+50, r1 ; 0x32 + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_USARTC0_RXC_gc; + c38: 4b e4 ldi r20, 0x4B ; 75 + c3a: 4b ab std Y+51, r20 ; 0x33 + DMA.CH2.TRFCNT = 0; + c3c: 1c aa std Y+52, r1 ; 0x34 + c3e: 1d aa std Y+53, r1 ; 0x35 + DMA.CH2.REPCNT = 0; + c40: 1e aa std Y+54, r1 ; 0x36 + + DMA.CH2.SRCADDR0 = (( (uint16_t) &dummy) >> 0) & 0xFF; + c42: 8a e0 ldi r24, 0x0A ; 10 + c44: 90 e2 ldi r25, 0x20 ; 32 + c46: 88 af std Y+56, r24 ; 0x38 + DMA.CH2.SRCADDR1 = (( (uint16_t) &dummy) >> 8) & 0xFF; + c48: 99 af std Y+57, r25 ; 0x39 + DMA.CH2.SRCADDR2 = 0x00; + c4a: 1a ae std Y+58, r1 ; 0x3a + + DMA.CH2.DESTADDR0 = (( (uint16_t) &USARTC0.DATA) >> 0) & 0xFF; + c4c: 70 ea ldi r23, 0xA0 ; 160 + c4e: 7c af std Y+60, r23 ; 0x3c + DMA.CH2.DESTADDR1 = (( (uint16_t) &USARTC0.DATA) >> 8) & 0xFF; + c50: 68 e0 ldi r22, 0x08 ; 8 + c52: 60 93 3d 01 sts 0x013D, r22 ; 0x80013d <__TEXT_REGION_LENGTH__+0x70013d> + DMA.CH2.DESTADDR2 = 0x00; + c56: 10 92 3e 01 sts 0x013E, r1 ; 0x80013e <__TEXT_REGION_LENGTH__+0x70013e> + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_REPEAT_bm | DMA_CH_ENABLE_bm; //Enable! + c5a: 88 a9 ldd r24, Y+48 ; 0x30 + c5c: 80 6a ori r24, 0xA0 ; 160 + c5e: 88 ab std Y+48, r24 ; 0x30 -00000afe : - afe: e0 e0 ldi r30, 0x00 ; 0 - b00: f1 e0 ldi r31, 0x01 ; 1 - b02: 10 8a std Z+16, r1 ; 0x10 - b04: 80 e4 ldi r24, 0x40 ; 64 - b06: 80 8b std Z+16, r24 ; 0x10 - b08: 10 a2 std Z+32, r1 ; 0x20 - b0a: 80 a3 std Z+32, r24 ; 0x20 - b0c: 10 aa std Z+48, r1 ; 0x30 - b0e: 80 ab std Z+48, r24 ; 0x30 - b10: e0 e4 ldi r30, 0x40 ; 64 - b12: f1 e0 ldi r31, 0x01 ; 1 - b14: 10 82 st Z, r1 - b16: 80 83 st Z, r24 - b18: 10 92 98 20 sts 0x2098, r1 ; 0x802098 - b1c: 10 92 97 20 sts 0x2097, r1 ; 0x802097 - b20: 81 e0 ldi r24, 0x01 ; 1 - b22: 80 93 96 20 sts 0x2096, r24 ; 0x802096 - b26: 10 92 7c 21 sts 0x217C, r1 ; 0x80217c - b2a: 10 92 7d 21 sts 0x217D, r1 ; 0x80217d - b2e: 10 92 7a 21 sts 0x217A, r1 ; 0x80217a - b32: 10 92 7b 21 sts 0x217B, r1 ; 0x80217b - b36: 08 95 ret + USARTC0.DATA = 0x55; + c60: e0 ea ldi r30, 0xA0 ; 160 + c62: f8 e0 ldi r31, 0x08 ; 8 + c64: 85 e5 ldi r24, 0x55 ; 85 + c66: 80 83 st Z, r24 + USARTC0.DATA = 0x55; + c68: 80 83 st Z, r24 -00000b38 : - b38: 80 93 aa 23 sts 0x23AA, r24 ; 0x8023aa - b3c: 81 e0 ldi r24, 0x01 ; 1 - b3e: 80 93 91 20 sts 0x2091, r24 ; 0x802091 - b42: 08 95 ret + DMA.CH3.REPCNT = 0; //Repeat forever! + c6a: 10 92 46 01 sts 0x0146, r1 ; 0x800146 <__TEXT_REGION_LENGTH__+0x700146> + DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + c6e: e0 e4 ldi r30, 0x40 ; 64 + c70: f1 e0 ldi r31, 0x01 ; 1 + c72: 84 e2 ldi r24, 0x24 ; 36 + c74: 80 83 st Z, r24 + DMA.CH3.CTRLB = 0x00; //No interrupt for DacBuf!! + c76: 10 92 41 01 sts 0x0141, r1 ; 0x800141 <__TEXT_REGION_LENGTH__+0x700141> + DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + c7a: 99 e5 ldi r25, 0x59 ; 89 + c7c: 90 93 42 01 sts 0x0142, r25 ; 0x800142 <__TEXT_REGION_LENGTH__+0x700142> + DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER + c80: 32 e0 ldi r19, 0x02 ; 2 + c82: 30 93 43 01 sts 0x0143, r19 ; 0x800143 <__TEXT_REGION_LENGTH__+0x700143> + DMA.CH3.TRFCNT = auxDacBufLen; + c86: a0 91 0b 20 lds r26, 0x200B ; 0x80200b + c8a: b0 91 0c 20 lds r27, 0x200C ; 0x80200c + c8e: a0 93 44 01 sts 0x0144, r26 ; 0x800144 <__TEXT_REGION_LENGTH__+0x700144> + c92: b0 93 45 01 sts 0x0145, r27 ; 0x800145 <__TEXT_REGION_LENGTH__+0x700145> -00000b44 : - b44: cf 93 push r28 - b46: df 93 push r29 - b48: 10 92 09 20 sts 0x2009, r1 ; 0x802009 - b4c: d8 df rcall .-80 ; 0xafe - b4e: c0 e0 ldi r28, 0x00 ; 0 - b50: d1 e0 ldi r29, 0x01 ; 1 - b52: 1e aa std Y+54, r1 ; 0x36 - b54: 84 e2 ldi r24, 0x24 ; 36 - b56: 88 ab std Y+48, r24 ; 0x30 - b58: 19 aa std Y+49, r1 ; 0x31 - b5a: 49 e5 ldi r20, 0x59 ; 89 - b5c: 4a ab std Y+50, r20 ; 0x32 - b5e: 32 e0 ldi r19, 0x02 ; 2 - b60: 3b ab std Y+51, r19 ; 0x33 - b62: 60 91 0b 20 lds r22, 0x200B ; 0x80200b - b66: 70 91 0c 20 lds r23, 0x200C ; 0x80200c - b6a: 6c ab std Y+52, r22 ; 0x34 - b6c: 7d ab std Y+53, r23 ; 0x35 - b6e: 6b ea ldi r22, 0xAB ; 171 - b70: 73 e2 ldi r23, 0x23 ; 35 - b72: 68 af std Y+56, r22 ; 0x38 - b74: 79 af std Y+57, r23 ; 0x39 - b76: 1a ae std Y+58, r1 ; 0x3a - b78: 9b e3 ldi r25, 0x3B ; 59 - b7a: 9c af std Y+60, r25 ; 0x3c - b7c: 93 e0 ldi r25, 0x03 ; 3 - b7e: 90 93 3d 01 sts 0x013D, r25 ; 0x80013d <__TEXT_REGION_LENGTH__+0x70013d> - b82: 10 92 3e 01 sts 0x013E, r1 ; 0x80013e <__TEXT_REGION_LENGTH__+0x70013e> - b86: 28 a9 ldd r18, Y+48 ; 0x30 - b88: 20 68 ori r18, 0x80 ; 128 - b8a: 28 ab std Y+48, r18 ; 0x30 - b8c: 10 92 46 01 sts 0x0146, r1 ; 0x800146 <__TEXT_REGION_LENGTH__+0x700146> - b90: e0 e4 ldi r30, 0x40 ; 64 - b92: f1 e0 ldi r31, 0x01 ; 1 - b94: 80 83 st Z, r24 - b96: 10 92 41 01 sts 0x0141, r1 ; 0x800141 <__TEXT_REGION_LENGTH__+0x700141> - b9a: 40 93 42 01 sts 0x0142, r20 ; 0x800142 <__TEXT_REGION_LENGTH__+0x700142> - b9e: 90 93 43 01 sts 0x0143, r25 ; 0x800143 <__TEXT_REGION_LENGTH__+0x700143> - ba2: 40 91 0d 20 lds r20, 0x200D ; 0x80200d - ba6: 50 91 0e 20 lds r21, 0x200E ; 0x80200e - baa: 40 93 44 01 sts 0x0144, r20 ; 0x800144 <__TEXT_REGION_LENGTH__+0x700144> - bae: 50 93 45 01 sts 0x0145, r21 ; 0x800145 <__TEXT_REGION_LENGTH__+0x700145> - bb2: 4a e9 ldi r20, 0x9A ; 154 - bb4: 51 e2 ldi r21, 0x21 ; 33 - bb6: 40 93 48 01 sts 0x0148, r20 ; 0x800148 <__TEXT_REGION_LENGTH__+0x700148> - bba: 50 93 49 01 sts 0x0149, r21 ; 0x800149 <__TEXT_REGION_LENGTH__+0x700149> - bbe: 10 92 4a 01 sts 0x014A, r1 ; 0x80014a <__TEXT_REGION_LENGTH__+0x70014a> - bc2: 29 e3 ldi r18, 0x39 ; 57 - bc4: 20 93 4c 01 sts 0x014C, r18 ; 0x80014c <__TEXT_REGION_LENGTH__+0x70014c> - bc8: 90 93 4d 01 sts 0x014D, r25 ; 0x80014d <__TEXT_REGION_LENGTH__+0x70014d> - bcc: 10 92 4e 01 sts 0x014E, r1 ; 0x80014e <__TEXT_REGION_LENGTH__+0x70014e> - bd0: 90 81 ld r25, Z - bd2: 90 68 ori r25, 0x80 ; 128 - bd4: 90 83 st Z, r25 - bd6: 18 8a std Y+16, r1 ; 0x10 - bd8: 90 e4 ldi r25, 0x40 ; 64 - bda: 98 8b std Y+16, r25 ; 0x10 - bdc: 88 8b std Y+16, r24 ; 0x10 - bde: 19 8a std Y+17, r1 ; 0x11 - be0: 95 e9 ldi r25, 0x95 ; 149 - be2: 9a 8b std Y+18, r25 ; 0x12 - be4: 90 e1 ldi r25, 0x10 ; 16 - be6: 9b 8b std Y+19, r25 ; 0x13 - be8: 4e ee ldi r20, 0xEE ; 238 - bea: 52 e0 ldi r21, 0x02 ; 2 - bec: 4c 8b std Y+20, r20 ; 0x14 - bee: 5d 8b std Y+21, r21 ; 0x15 - bf0: 88 8f std Y+24, r24 ; 0x18 - bf2: 39 8f std Y+25, r19 ; 0x19 - bf4: 1a 8e std Y+26, r1 ; 0x1a - bf6: 8c ec ldi r24, 0xCC ; 204 - bf8: 95 e2 ldi r25, 0x25 ; 37 - bfa: 8c 8f std Y+28, r24 ; 0x1c - bfc: 9d 8f std Y+29, r25 ; 0x1d - bfe: 1e 8e std Y+30, r1 ; 0x1e - c00: 68 ec ldi r22, 0xC8 ; 200 - c02: 70 e0 ldi r23, 0x00 ; 0 - c04: 84 ef ldi r24, 0xF4 ; 244 - c06: 91 e0 ldi r25, 0x01 ; 1 - c08: 67 dd rcall .-1330 ; 0x6d8 - c0a: 88 ec ldi r24, 0xC8 ; 200 - c0c: 90 e0 ldi r25, 0x00 ; 0 - c0e: 80 93 07 20 sts 0x2007, r24 ; 0x802007 - c12: 90 93 08 20 sts 0x2008, r25 ; 0x802008 - c16: 81 e0 ldi r24, 0x01 ; 1 - c18: 80 93 06 20 sts 0x2006, r24 ; 0x802006 - c1c: 88 89 ldd r24, Y+16 ; 0x10 - c1e: 80 68 ori r24, 0x80 ; 128 - c20: 88 8b std Y+16, r24 ; 0x10 - c22: df 91 pop r29 - c24: cf 91 pop r28 - c26: 08 95 ret + DMA.CH3.SRCADDR0 = (( (uint16_t) &dacBuf_CH2[0]) >> 0) & 0xFF; //Source address is dacbuf + c96: ab ea ldi r26, 0xAB ; 171 + c98: b3 e2 ldi r27, 0x23 ; 35 + c9a: a0 93 48 01 sts 0x0148, r26 ; 0x800148 <__TEXT_REGION_LENGTH__+0x700148> + DMA.CH3.SRCADDR1 = (( (uint16_t) &dacBuf_CH2[0]) >> 8) & 0xFF; + c9e: b0 93 49 01 sts 0x0149, r27 ; 0x800149 <__TEXT_REGION_LENGTH__+0x700149> + DMA.CH3.SRCADDR2 = 0x00; + ca2: 10 92 4a 01 sts 0x014A, r1 ; 0x80014a <__TEXT_REGION_LENGTH__+0x70014a> + + DMA.CH3.DESTADDR0 = (( (uint16_t) &DACB.CH1DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + ca6: 9b e3 ldi r25, 0x3B ; 59 + ca8: 90 93 4c 01 sts 0x014C, r25 ; 0x80014c <__TEXT_REGION_LENGTH__+0x70014c> + DMA.CH3.DESTADDR1 = (( (uint16_t) &DACB.CH1DATAH) >> 8) & 0xFF; + cac: 93 e0 ldi r25, 0x03 ; 3 + cae: 90 93 4d 01 sts 0x014D, r25 ; 0x80014d <__TEXT_REGION_LENGTH__+0x70014d> + DMA.CH3.DESTADDR2 = 0x00; + cb2: 10 92 4e 01 sts 0x014E, r1 ; 0x80014e <__TEXT_REGION_LENGTH__+0x70014e> + + //Must enable last for REPCNT won't work! + DMA.CH3.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + cb6: 20 81 ld r18, Z + cb8: 20 68 ori r18, 0x80 ; 128 + cba: 20 83 st Z, r18 + + DMA.CH1.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; //Do not repeat! + cbc: 88 a3 std Y+32, r24 ; 0x20 + DMA.CH1.CTRLB = 0x03; //Hi interrupt + cbe: 99 a3 std Y+33, r25 ; 0x21 + DMA.CH1.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_DESTRELOAD_BLOCK_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + cc0: 25 e9 ldi r18, 0x95 ; 149 + cc2: 2a a3 std Y+34, r18 ; 0x22 + DMA.CH1.TRIGSRC = DMA_CH_TRIGSRC_USARTC0_RXC_gc; + cc4: 4b a3 std Y+35, r20 ; 0x23 + DMA.CH1.TRFCNT = PACKET_SIZE; + cc6: 4e ee ldi r20, 0xEE ; 238 + cc8: 52 e0 ldi r21, 0x02 ; 2 + cca: 4c a3 std Y+36, r20 ; 0x24 + ccc: 5d a3 std Y+37, r21 ; 0x25 + + DMA.CH1.SRCADDR0 = (( (uint16_t) &USARTC0.DATA) >> 0) & 0xFF; + cce: 78 a7 std Y+40, r23 ; 0x28 + DMA.CH1.SRCADDR1 = (( (uint16_t) &USARTC0.DATA) >> 8) & 0xFF; + cd0: 69 a7 std Y+41, r22 ; 0x29 + DMA.CH1.SRCADDR2 = 0x00; + cd2: 1a a6 std Y+42, r1 ; 0x2a + + DMA.CH1.DESTADDR0 = (( (uint16_t) &isoBuf[PACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + cd4: 6a eb ldi r22, 0xBA ; 186 + cd6: 78 e2 ldi r23, 0x28 ; 40 + cd8: 6c a7 std Y+44, r22 ; 0x2c + DMA.CH1.DESTADDR1 = (( (uint16_t) &isoBuf[PACKET_SIZE]) >> 8) & 0xFF; + cda: 7d a7 std Y+45, r23 ; 0x2d + DMA.CH1.DESTADDR2 = 0x00; + cdc: 1e a6 std Y+46, r1 ; 0x2e + + DMA.CH0.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; //Do not repeat! + cde: 88 8b std Y+16, r24 ; 0x10 + DMA.CH0.CTRLB = 0x03; //No interrupt! + ce0: 99 8b std Y+17, r25 ; 0x11 + DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_DESTRELOAD_BLOCK_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + ce2: 2a 8b std Y+18, r18 ; 0x12 + DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_ADCA_CH0_gc; //Triggered from ADCA channel 0 + ce4: 90 e1 ldi r25, 0x10 ; 16 + ce6: 9b 8b std Y+19, r25 ; 0x13 + DMA.CH0.TRFCNT = PACKET_SIZE; + ce8: 4c 8b std Y+20, r20 ; 0x14 + cea: 5d 8b std Y+21, r21 ; 0x15 + + DMA.CH0.SRCADDR0 = (( (uint16_t) &ADCA.CH0.RESL) >> 0) & 0xFF; //Source address is ADC + cec: 88 8f std Y+24, r24 ; 0x18 + DMA.CH0.SRCADDR1 = (( (uint16_t) &ADCA.CH0.RESL) >> 8) & 0xFF; + cee: 39 8f std Y+25, r19 ; 0x19 + DMA.CH0.SRCADDR2 = 0x00; + cf0: 1a 8e std Y+26, r1 ; 0x1a + + DMA.CH0.DESTADDR0 = (( (uint16_t) &isoBuf[0]) >> 0) & 0xFF; //Dest address is isoBuf + cf2: 8c ec ldi r24, 0xCC ; 204 + cf4: 95 e2 ldi r25, 0x25 ; 37 + cf6: 8c 8f std Y+28, r24 ; 0x1c + DMA.CH0.DESTADDR1 = (( (uint16_t) &isoBuf[0]) >> 8) & 0xFF; + cf8: 9d 8f std Y+29, r25 ; 0x1d + DMA.CH0.DESTADDR2 = 0x00; + cfa: 1e 8e std Y+30, r1 ; 0x1e + + tiny_calibration_synchronise_phase(500, 200); + cfc: 68 ec ldi r22, 0xC8 ; 200 + cfe: 70 e0 ldi r23, 0x00 ; 0 + d00: 84 ef ldi r24, 0xF4 ; 244 + d02: 91 e0 ldi r25, 0x01 ; 1 + d04: f1 dc rcall .-1566 ; 0x6e8 + median_TRFCNT = 200; + d06: 88 ec ldi r24, 0xC8 ; 200 + d08: 90 e0 ldi r25, 0x00 ; 0 + d0a: 80 93 07 20 sts 0x2007, r24 ; 0x802007 + d0e: 90 93 08 20 sts 0x2008, r25 ; 0x802008 + median_TRFCNT_delay = 1; //Wait a few frames before actually setting median_TRFCNT, in case a SOF interrupt was queued during tiny_dma_set_mode_xxx. + d12: 10 93 06 20 sts 0x2006, r17 ; 0x802006 + DMA.CH1.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + d16: 88 a1 ldd r24, Y+32 ; 0x20 + d18: 80 68 ori r24, 0x80 ; 128 + d1a: 88 a3 std Y+32, r24 ; 0x20 + DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + d1c: 88 89 ldd r24, Y+16 ; 0x10 + d1e: 80 68 ori r24, 0x80 ; 128 + d20: 88 8b std Y+16, r24 ; 0x10 + + + +} + d22: df 91 pop r29 + d24: cf 91 pop r28 + d26: 1f 91 pop r17 + d28: 08 95 ret -00000c28 : - c28: 1f 93 push r17 - c2a: cf 93 push r28 - c2c: df 93 push r29 - c2e: 11 e0 ldi r17, 0x01 ; 1 - c30: 10 93 09 20 sts 0x2009, r17 ; 0x802009 - c34: 64 df rcall .-312 ; 0xafe - c36: c0 e0 ldi r28, 0x00 ; 0 - c38: d1 e0 ldi r29, 0x01 ; 1 - c3a: 18 aa std Y+48, r1 ; 0x30 - c3c: 80 e4 ldi r24, 0x40 ; 64 - c3e: 88 ab std Y+48, r24 ; 0x30 - c40: 84 e0 ldi r24, 0x04 ; 4 - c42: 88 ab std Y+48, r24 ; 0x30 - c44: 19 aa std Y+49, r1 ; 0x31 - c46: 1a aa std Y+50, r1 ; 0x32 - c48: 4b e4 ldi r20, 0x4B ; 75 - c4a: 4b ab std Y+51, r20 ; 0x33 - c4c: 1c aa std Y+52, r1 ; 0x34 - c4e: 1d aa std Y+53, r1 ; 0x35 - c50: 1e aa std Y+54, r1 ; 0x36 - c52: 8a e0 ldi r24, 0x0A ; 10 - c54: 90 e2 ldi r25, 0x20 ; 32 - c56: 88 af std Y+56, r24 ; 0x38 - c58: 99 af std Y+57, r25 ; 0x39 - c5a: 1a ae std Y+58, r1 ; 0x3a - c5c: 70 ea ldi r23, 0xA0 ; 160 - c5e: 7c af std Y+60, r23 ; 0x3c - c60: 68 e0 ldi r22, 0x08 ; 8 - c62: 60 93 3d 01 sts 0x013D, r22 ; 0x80013d <__TEXT_REGION_LENGTH__+0x70013d> - c66: 10 92 3e 01 sts 0x013E, r1 ; 0x80013e <__TEXT_REGION_LENGTH__+0x70013e> - c6a: 88 a9 ldd r24, Y+48 ; 0x30 - c6c: 80 6a ori r24, 0xA0 ; 160 - c6e: 88 ab std Y+48, r24 ; 0x30 - c70: e0 ea ldi r30, 0xA0 ; 160 - c72: f8 e0 ldi r31, 0x08 ; 8 - c74: 85 e5 ldi r24, 0x55 ; 85 - c76: 80 83 st Z, r24 - c78: 80 83 st Z, r24 - c7a: 10 92 46 01 sts 0x0146, r1 ; 0x800146 <__TEXT_REGION_LENGTH__+0x700146> - c7e: e0 e4 ldi r30, 0x40 ; 64 - c80: f1 e0 ldi r31, 0x01 ; 1 - c82: 84 e2 ldi r24, 0x24 ; 36 - c84: 80 83 st Z, r24 - c86: 10 92 41 01 sts 0x0141, r1 ; 0x800141 <__TEXT_REGION_LENGTH__+0x700141> - c8a: 99 e5 ldi r25, 0x59 ; 89 - c8c: 90 93 42 01 sts 0x0142, r25 ; 0x800142 <__TEXT_REGION_LENGTH__+0x700142> - c90: 32 e0 ldi r19, 0x02 ; 2 - c92: 30 93 43 01 sts 0x0143, r19 ; 0x800143 <__TEXT_REGION_LENGTH__+0x700143> - c96: a0 91 0b 20 lds r26, 0x200B ; 0x80200b - c9a: b0 91 0c 20 lds r27, 0x200C ; 0x80200c - c9e: a0 93 44 01 sts 0x0144, r26 ; 0x800144 <__TEXT_REGION_LENGTH__+0x700144> - ca2: b0 93 45 01 sts 0x0145, r27 ; 0x800145 <__TEXT_REGION_LENGTH__+0x700145> - ca6: ab ea ldi r26, 0xAB ; 171 - ca8: b3 e2 ldi r27, 0x23 ; 35 - caa: a0 93 48 01 sts 0x0148, r26 ; 0x800148 <__TEXT_REGION_LENGTH__+0x700148> - cae: b0 93 49 01 sts 0x0149, r27 ; 0x800149 <__TEXT_REGION_LENGTH__+0x700149> - cb2: 10 92 4a 01 sts 0x014A, r1 ; 0x80014a <__TEXT_REGION_LENGTH__+0x70014a> - cb6: 9b e3 ldi r25, 0x3B ; 59 - cb8: 90 93 4c 01 sts 0x014C, r25 ; 0x80014c <__TEXT_REGION_LENGTH__+0x70014c> - cbc: 93 e0 ldi r25, 0x03 ; 3 - cbe: 90 93 4d 01 sts 0x014D, r25 ; 0x80014d <__TEXT_REGION_LENGTH__+0x70014d> - cc2: 10 92 4e 01 sts 0x014E, r1 ; 0x80014e <__TEXT_REGION_LENGTH__+0x70014e> - cc6: 20 81 ld r18, Z - cc8: 20 68 ori r18, 0x80 ; 128 - cca: 20 83 st Z, r18 - ccc: 88 a3 std Y+32, r24 ; 0x20 - cce: 99 a3 std Y+33, r25 ; 0x21 - cd0: 25 e9 ldi r18, 0x95 ; 149 - cd2: 2a a3 std Y+34, r18 ; 0x22 - cd4: 4b a3 std Y+35, r20 ; 0x23 - cd6: 4e ee ldi r20, 0xEE ; 238 - cd8: 52 e0 ldi r21, 0x02 ; 2 - cda: 4c a3 std Y+36, r20 ; 0x24 - cdc: 5d a3 std Y+37, r21 ; 0x25 - cde: 78 a7 std Y+40, r23 ; 0x28 - ce0: 69 a7 std Y+41, r22 ; 0x29 - ce2: 1a a6 std Y+42, r1 ; 0x2a - ce4: 6a eb ldi r22, 0xBA ; 186 - ce6: 78 e2 ldi r23, 0x28 ; 40 - ce8: 6c a7 std Y+44, r22 ; 0x2c - cea: 7d a7 std Y+45, r23 ; 0x2d - cec: 1e a6 std Y+46, r1 ; 0x2e - cee: 88 8b std Y+16, r24 ; 0x10 - cf0: 99 8b std Y+17, r25 ; 0x11 - cf2: 2a 8b std Y+18, r18 ; 0x12 - cf4: 90 e1 ldi r25, 0x10 ; 16 - cf6: 9b 8b std Y+19, r25 ; 0x13 - cf8: 4c 8b std Y+20, r20 ; 0x14 - cfa: 5d 8b std Y+21, r21 ; 0x15 - cfc: 88 8f std Y+24, r24 ; 0x18 - cfe: 39 8f std Y+25, r19 ; 0x19 - d00: 1a 8e std Y+26, r1 ; 0x1a - d02: 8c ec ldi r24, 0xCC ; 204 - d04: 95 e2 ldi r25, 0x25 ; 37 - d06: 8c 8f std Y+28, r24 ; 0x1c - d08: 9d 8f std Y+29, r25 ; 0x1d - d0a: 1e 8e std Y+30, r1 ; 0x1e - d0c: 68 ec ldi r22, 0xC8 ; 200 - d0e: 70 e0 ldi r23, 0x00 ; 0 - d10: 84 ef ldi r24, 0xF4 ; 244 - d12: 91 e0 ldi r25, 0x01 ; 1 - d14: e1 dc rcall .-1598 ; 0x6d8 - d16: 88 ec ldi r24, 0xC8 ; 200 - d18: 90 e0 ldi r25, 0x00 ; 0 - d1a: 80 93 07 20 sts 0x2007, r24 ; 0x802007 - d1e: 90 93 08 20 sts 0x2008, r25 ; 0x802008 - d22: 10 93 06 20 sts 0x2006, r17 ; 0x802006 - d26: 88 a1 ldd r24, Y+32 ; 0x20 - d28: 80 68 ori r24, 0x80 ; 128 - d2a: 88 a3 std Y+32, r24 ; 0x20 - d2c: 88 89 ldd r24, Y+16 ; 0x10 - d2e: 80 68 ori r24, 0x80 ; 128 - d30: 88 8b std Y+16, r24 ; 0x10 - d32: df 91 pop r29 - d34: cf 91 pop r28 - d36: 1f 91 pop r17 - d38: 08 95 ret +00000d2a : -00000d3a : - d3a: 1f 93 push r17 - d3c: cf 93 push r28 - d3e: df 93 push r29 - d40: 12 e0 ldi r17, 0x02 ; 2 - d42: 10 93 09 20 sts 0x2009, r17 ; 0x802009 - d46: db de rcall .-586 ; 0xafe - d48: c0 e0 ldi r28, 0x00 ; 0 - d4a: d1 e0 ldi r29, 0x01 ; 1 - d4c: 1e aa std Y+54, r1 ; 0x36 - d4e: 84 e2 ldi r24, 0x24 ; 36 - d50: 88 ab std Y+48, r24 ; 0x30 - d52: 19 aa std Y+49, r1 ; 0x31 - d54: 39 e5 ldi r19, 0x59 ; 89 - d56: 3a ab std Y+50, r19 ; 0x32 - d58: 1b ab std Y+51, r17 ; 0x33 - d5a: 40 91 0b 20 lds r20, 0x200B ; 0x80200b - d5e: 50 91 0c 20 lds r21, 0x200C ; 0x80200c - d62: 4c ab std Y+52, r20 ; 0x34 - d64: 5d ab std Y+53, r21 ; 0x35 - d66: 4b ea ldi r20, 0xAB ; 171 - d68: 53 e2 ldi r21, 0x23 ; 35 - d6a: 48 af std Y+56, r20 ; 0x38 - d6c: 59 af std Y+57, r21 ; 0x39 - d6e: 1a ae std Y+58, r1 ; 0x3a - d70: 9b e3 ldi r25, 0x3B ; 59 - d72: 9c af std Y+60, r25 ; 0x3c - d74: 93 e0 ldi r25, 0x03 ; 3 - d76: 90 93 3d 01 sts 0x013D, r25 ; 0x80013d <__TEXT_REGION_LENGTH__+0x70013d> - d7a: 10 92 3e 01 sts 0x013E, r1 ; 0x80013e <__TEXT_REGION_LENGTH__+0x70013e> - d7e: 28 a9 ldd r18, Y+48 ; 0x30 - d80: 20 68 ori r18, 0x80 ; 128 - d82: 28 ab std Y+48, r18 ; 0x30 - d84: 10 92 46 01 sts 0x0146, r1 ; 0x800146 <__TEXT_REGION_LENGTH__+0x700146> - d88: e0 e4 ldi r30, 0x40 ; 64 - d8a: f1 e0 ldi r31, 0x01 ; 1 - d8c: 80 83 st Z, r24 - d8e: 10 92 41 01 sts 0x0141, r1 ; 0x800141 <__TEXT_REGION_LENGTH__+0x700141> - d92: 30 93 42 01 sts 0x0142, r19 ; 0x800142 <__TEXT_REGION_LENGTH__+0x700142> - d96: 90 93 43 01 sts 0x0143, r25 ; 0x800143 <__TEXT_REGION_LENGTH__+0x700143> - d9a: 20 91 0d 20 lds r18, 0x200D ; 0x80200d - d9e: 30 91 0e 20 lds r19, 0x200E ; 0x80200e - da2: 20 93 44 01 sts 0x0144, r18 ; 0x800144 <__TEXT_REGION_LENGTH__+0x700144> - da6: 30 93 45 01 sts 0x0145, r19 ; 0x800145 <__TEXT_REGION_LENGTH__+0x700145> - daa: 2a e9 ldi r18, 0x9A ; 154 - dac: 31 e2 ldi r19, 0x21 ; 33 - dae: 20 93 48 01 sts 0x0148, r18 ; 0x800148 <__TEXT_REGION_LENGTH__+0x700148> - db2: 30 93 49 01 sts 0x0149, r19 ; 0x800149 <__TEXT_REGION_LENGTH__+0x700149> - db6: 10 92 4a 01 sts 0x014A, r1 ; 0x80014a <__TEXT_REGION_LENGTH__+0x70014a> - dba: 29 e3 ldi r18, 0x39 ; 57 - dbc: 20 93 4c 01 sts 0x014C, r18 ; 0x80014c <__TEXT_REGION_LENGTH__+0x70014c> - dc0: 90 93 4d 01 sts 0x014D, r25 ; 0x80014d <__TEXT_REGION_LENGTH__+0x70014d> - dc4: 10 92 4e 01 sts 0x014E, r1 ; 0x80014e <__TEXT_REGION_LENGTH__+0x70014e> - dc8: 90 81 ld r25, Z - dca: 90 68 ori r25, 0x80 ; 128 - dcc: 90 83 st Z, r25 - dce: 18 8a std Y+16, r1 ; 0x10 - dd0: 90 e4 ldi r25, 0x40 ; 64 - dd2: 98 8b std Y+16, r25 ; 0x10 - dd4: 88 8b std Y+16, r24 ; 0x10 - dd6: 19 8a std Y+17, r1 ; 0x11 - dd8: 45 e9 ldi r20, 0x95 ; 149 - dda: 4a 8b std Y+18, r20 ; 0x12 - ddc: 90 e1 ldi r25, 0x10 ; 16 - dde: 9b 8b std Y+19, r25 ; 0x13 - de0: 2e ee ldi r18, 0xEE ; 238 - de2: 32 e0 ldi r19, 0x02 ; 2 - de4: 2c 8b std Y+20, r18 ; 0x14 - de6: 3d 8b std Y+21, r19 ; 0x15 - de8: 88 8f std Y+24, r24 ; 0x18 - dea: 19 8f std Y+25, r17 ; 0x19 - dec: 1a 8e std Y+26, r1 ; 0x1a - dee: 6c ec ldi r22, 0xCC ; 204 - df0: 75 e2 ldi r23, 0x25 ; 37 - df2: 6c 8f std Y+28, r22 ; 0x1c - df4: 7d 8f std Y+29, r23 ; 0x1d - df6: 1e 8e std Y+30, r1 ; 0x1e - df8: 88 a3 std Y+32, r24 ; 0x20 - dfa: 19 a2 std Y+33, r1 ; 0x21 - dfc: 4a a3 std Y+34, r20 ; 0x22 - dfe: 9b a3 std Y+35, r25 ; 0x23 - e00: 2c a3 std Y+36, r18 ; 0x24 - e02: 3d a3 std Y+37, r19 ; 0x25 - e04: 84 e3 ldi r24, 0x34 ; 52 - e06: 88 a7 std Y+40, r24 ; 0x28 - e08: 19 a7 std Y+41, r17 ; 0x29 - e0a: 1a a6 std Y+42, r1 ; 0x2a - e0c: 8a eb ldi r24, 0xBA ; 186 - e0e: 98 e2 ldi r25, 0x28 ; 40 - e10: 8c a7 std Y+44, r24 ; 0x2c - e12: 9d a7 std Y+45, r25 ; 0x2d - e14: 1e a6 std Y+46, r1 ; 0x2e - e16: 68 ec ldi r22, 0xC8 ; 200 - e18: 70 e0 ldi r23, 0x00 ; 0 - e1a: 84 ef ldi r24, 0xF4 ; 244 - e1c: 91 e0 ldi r25, 0x01 ; 1 - e1e: 5c dc rcall .-1864 ; 0x6d8 - e20: 88 ec ldi r24, 0xC8 ; 200 - e22: 90 e0 ldi r25, 0x00 ; 0 - e24: 80 93 07 20 sts 0x2007, r24 ; 0x802007 - e28: 90 93 08 20 sts 0x2008, r25 ; 0x802008 - e2c: 81 e0 ldi r24, 0x01 ; 1 - e2e: 80 93 06 20 sts 0x2006, r24 ; 0x802006 - e32: 88 89 ldd r24, Y+16 ; 0x10 - e34: 80 68 ori r24, 0x80 ; 128 - e36: 88 8b std Y+16, r24 ; 0x10 - e38: 88 a1 ldd r24, Y+32 ; 0x20 - e3a: 80 68 ori r24, 0x80 ; 128 - e3c: 88 a3 std Y+32, r24 ; 0x20 - e3e: df 91 pop r29 - e40: cf 91 pop r28 - e42: 1f 91 pop r17 - e44: 08 95 ret +void tiny_dma_loop_mode_1(void){ + d2a: 08 95 ret -00000e46 : - e46: 1f 93 push r17 - e48: cf 93 push r28 - e4a: df 93 push r29 - e4c: 13 e0 ldi r17, 0x03 ; 3 - e4e: 10 93 09 20 sts 0x2009, r17 ; 0x802009 - e52: 55 de rcall .-854 ; 0xafe - e54: c0 e0 ldi r28, 0x00 ; 0 - e56: d1 e0 ldi r29, 0x01 ; 1 - e58: 18 a2 std Y+32, r1 ; 0x20 - e5a: 50 e4 ldi r21, 0x40 ; 64 - e5c: 58 a3 std Y+32, r21 ; 0x20 - e5e: 84 e0 ldi r24, 0x04 ; 4 - e60: 88 a3 std Y+32, r24 ; 0x20 - e62: 19 a2 std Y+33, r1 ; 0x21 - e64: 1a a2 std Y+34, r1 ; 0x22 - e66: 4b e4 ldi r20, 0x4B ; 75 - e68: 4b a3 std Y+35, r20 ; 0x23 - e6a: 1c a2 std Y+36, r1 ; 0x24 - e6c: 1d a2 std Y+37, r1 ; 0x25 - e6e: 1e a2 std Y+38, r1 ; 0x26 - e70: 8a e0 ldi r24, 0x0A ; 10 - e72: 90 e2 ldi r25, 0x20 ; 32 - e74: 88 a7 std Y+40, r24 ; 0x28 - e76: 99 a7 std Y+41, r25 ; 0x29 - e78: 1a a6 std Y+42, r1 ; 0x2a - e7a: 30 ea ldi r19, 0xA0 ; 160 - e7c: 3c a7 std Y+44, r19 ; 0x2c - e7e: 28 e0 ldi r18, 0x08 ; 8 - e80: 2d a7 std Y+45, r18 ; 0x2d - e82: 1e a6 std Y+46, r1 ; 0x2e - e84: 88 a1 ldd r24, Y+32 ; 0x20 - e86: 80 6a ori r24, 0xA0 ; 160 - e88: 88 a3 std Y+32, r24 ; 0x20 - e8a: 85 e5 ldi r24, 0x55 ; 85 - e8c: 80 93 a0 08 sts 0x08A0, r24 ; 0x8008a0 <__TEXT_REGION_LENGTH__+0x7008a0> - e90: 1e aa std Y+54, r1 ; 0x36 - e92: 84 e2 ldi r24, 0x24 ; 36 - e94: 88 ab std Y+48, r24 ; 0x30 - e96: 19 aa std Y+49, r1 ; 0x31 - e98: 69 e5 ldi r22, 0x59 ; 89 - e9a: 6a ab std Y+50, r22 ; 0x32 - e9c: 1b ab std Y+51, r17 ; 0x33 - e9e: e0 91 0d 20 lds r30, 0x200D ; 0x80200d - ea2: f0 91 0e 20 lds r31, 0x200E ; 0x80200e - ea6: ec ab std Y+52, r30 ; 0x34 - ea8: fd ab std Y+53, r31 ; 0x35 - eaa: ea e9 ldi r30, 0x9A ; 154 - eac: f1 e2 ldi r31, 0x21 ; 33 - eae: e8 af std Y+56, r30 ; 0x38 - eb0: f9 af std Y+57, r31 ; 0x39 - eb2: 1a ae std Y+58, r1 ; 0x3a - eb4: 99 e3 ldi r25, 0x39 ; 57 - eb6: 9c af std Y+60, r25 ; 0x3c - eb8: 10 93 3d 01 sts 0x013D, r17 ; 0x80013d <__TEXT_REGION_LENGTH__+0x70013d> - ebc: 10 92 3e 01 sts 0x013E, r1 ; 0x80013e <__TEXT_REGION_LENGTH__+0x70013e> - ec0: 98 a9 ldd r25, Y+48 ; 0x30 - ec2: 90 68 ori r25, 0x80 ; 128 - ec4: 98 ab std Y+48, r25 ; 0x30 - ec6: 10 92 46 01 sts 0x0146, r1 ; 0x800146 <__TEXT_REGION_LENGTH__+0x700146> - eca: e0 e4 ldi r30, 0x40 ; 64 - ecc: f1 e0 ldi r31, 0x01 ; 1 - ece: 80 83 st Z, r24 - ed0: 10 92 41 01 sts 0x0141, r1 ; 0x800141 <__TEXT_REGION_LENGTH__+0x700141> - ed4: 60 93 42 01 sts 0x0142, r22 ; 0x800142 <__TEXT_REGION_LENGTH__+0x700142> - ed8: 92 e0 ldi r25, 0x02 ; 2 - eda: 90 93 43 01 sts 0x0143, r25 ; 0x800143 <__TEXT_REGION_LENGTH__+0x700143> - ede: 60 91 0b 20 lds r22, 0x200B ; 0x80200b - ee2: 70 91 0c 20 lds r23, 0x200C ; 0x80200c - ee6: 60 93 44 01 sts 0x0144, r22 ; 0x800144 <__TEXT_REGION_LENGTH__+0x700144> - eea: 70 93 45 01 sts 0x0145, r23 ; 0x800145 <__TEXT_REGION_LENGTH__+0x700145> - eee: 6b ea ldi r22, 0xAB ; 171 - ef0: 73 e2 ldi r23, 0x23 ; 35 - ef2: 60 93 48 01 sts 0x0148, r22 ; 0x800148 <__TEXT_REGION_LENGTH__+0x700148> - ef6: 70 93 49 01 sts 0x0149, r23 ; 0x800149 <__TEXT_REGION_LENGTH__+0x700149> - efa: 10 92 4a 01 sts 0x014A, r1 ; 0x80014a <__TEXT_REGION_LENGTH__+0x70014a> - efe: 9b e3 ldi r25, 0x3B ; 59 - f00: 90 93 4c 01 sts 0x014C, r25 ; 0x80014c <__TEXT_REGION_LENGTH__+0x70014c> - f04: 10 93 4d 01 sts 0x014D, r17 ; 0x80014d <__TEXT_REGION_LENGTH__+0x70014d> - f08: 10 92 4e 01 sts 0x014E, r1 ; 0x80014e <__TEXT_REGION_LENGTH__+0x70014e> - f0c: 90 81 ld r25, Z - f0e: 90 68 ori r25, 0x80 ; 128 - f10: 90 83 st Z, r25 - f12: 18 8a std Y+16, r1 ; 0x10 - f14: 58 8b std Y+16, r21 ; 0x10 - f16: 88 8b std Y+16, r24 ; 0x10 - f18: 19 8a std Y+17, r1 ; 0x11 - f1a: 85 e9 ldi r24, 0x95 ; 149 - f1c: 8a 8b std Y+18, r24 ; 0x12 - f1e: 4b 8b std Y+19, r20 ; 0x13 - f20: 8e ee ldi r24, 0xEE ; 238 - f22: 92 e0 ldi r25, 0x02 ; 2 - f24: 8c 8b std Y+20, r24 ; 0x14 - f26: 9d 8b std Y+21, r25 ; 0x15 - f28: 38 8f std Y+24, r19 ; 0x18 - f2a: 29 8f std Y+25, r18 ; 0x19 - f2c: 1a 8e std Y+26, r1 ; 0x1a - f2e: 8c ec ldi r24, 0xCC ; 204 - f30: 95 e2 ldi r25, 0x25 ; 37 - f32: 8c 8f std Y+28, r24 ; 0x1c - f34: 9d 8f std Y+29, r25 ; 0x1d - f36: 1e 8e std Y+30, r1 ; 0x1e - f38: 68 ec ldi r22, 0xC8 ; 200 - f3a: 70 e0 ldi r23, 0x00 ; 0 - f3c: 84 ef ldi r24, 0xF4 ; 244 - f3e: 91 e0 ldi r25, 0x01 ; 1 - f40: cb db rcall .-2154 ; 0x6d8 - f42: 88 ec ldi r24, 0xC8 ; 200 - f44: 90 e0 ldi r25, 0x00 ; 0 - f46: 80 93 07 20 sts 0x2007, r24 ; 0x802007 - f4a: 90 93 08 20 sts 0x2008, r25 ; 0x802008 - f4e: 81 e0 ldi r24, 0x01 ; 1 - f50: 80 93 06 20 sts 0x2006, r24 ; 0x802006 - f54: 88 89 ldd r24, Y+16 ; 0x10 - f56: 80 68 ori r24, 0x80 ; 128 - f58: 88 8b std Y+16, r24 ; 0x10 - f5a: df 91 pop r29 - f5c: cf 91 pop r28 - f5e: 1f 91 pop r17 - f60: 08 95 ret +00000d2c : + return; +} -00000f62 : - f62: 1f 93 push r17 - f64: cf 93 push r28 - f66: df 93 push r29 - f68: 14 e0 ldi r17, 0x04 ; 4 - f6a: 10 93 09 20 sts 0x2009, r17 ; 0x802009 - f6e: c7 dd rcall .-1138 ; 0xafe - f70: c0 e0 ldi r28, 0x00 ; 0 - f72: d1 e0 ldi r29, 0x01 ; 1 - f74: 18 aa std Y+48, r1 ; 0x30 - f76: 80 e4 ldi r24, 0x40 ; 64 - f78: 88 ab std Y+48, r24 ; 0x30 - f7a: 18 ab std Y+48, r17 ; 0x30 - f7c: 19 aa std Y+49, r1 ; 0x31 - f7e: 1a aa std Y+50, r1 ; 0x32 - f80: 3b e4 ldi r19, 0x4B ; 75 - f82: 3b ab std Y+51, r19 ; 0x33 - f84: 1c aa std Y+52, r1 ; 0x34 - f86: 1d aa std Y+53, r1 ; 0x35 - f88: 1e aa std Y+54, r1 ; 0x36 - f8a: 8a e0 ldi r24, 0x0A ; 10 - f8c: 90 e2 ldi r25, 0x20 ; 32 - f8e: 88 af std Y+56, r24 ; 0x38 - f90: 99 af std Y+57, r25 ; 0x39 - f92: 1a ae std Y+58, r1 ; 0x3a - f94: 50 ea ldi r21, 0xA0 ; 160 - f96: 5c af std Y+60, r21 ; 0x3c - f98: 88 e0 ldi r24, 0x08 ; 8 - f9a: 80 93 3d 01 sts 0x013D, r24 ; 0x80013d <__TEXT_REGION_LENGTH__+0x70013d> - f9e: 10 92 3e 01 sts 0x013E, r1 ; 0x80013e <__TEXT_REGION_LENGTH__+0x70013e> - fa2: 98 a9 ldd r25, Y+48 ; 0x30 - fa4: 90 6a ori r25, 0xA0 ; 160 - fa6: 98 ab std Y+48, r25 ; 0x30 - fa8: 95 e5 ldi r25, 0x55 ; 85 - faa: 90 93 a0 08 sts 0x08A0, r25 ; 0x8008a0 <__TEXT_REGION_LENGTH__+0x7008a0> - fae: 10 92 46 01 sts 0x0146, r1 ; 0x800146 <__TEXT_REGION_LENGTH__+0x700146> - fb2: e0 e4 ldi r30, 0x40 ; 64 - fb4: f1 e0 ldi r31, 0x01 ; 1 - fb6: 94 e2 ldi r25, 0x24 ; 36 - fb8: 90 83 st Z, r25 - fba: 10 92 41 01 sts 0x0141, r1 ; 0x800141 <__TEXT_REGION_LENGTH__+0x700141> - fbe: 29 e5 ldi r18, 0x59 ; 89 - fc0: 20 93 42 01 sts 0x0142, r18 ; 0x800142 <__TEXT_REGION_LENGTH__+0x700142> - fc4: 22 e0 ldi r18, 0x02 ; 2 - fc6: 20 93 43 01 sts 0x0143, r18 ; 0x800143 <__TEXT_REGION_LENGTH__+0x700143> - fca: 60 91 0b 20 lds r22, 0x200B ; 0x80200b - fce: 70 91 0c 20 lds r23, 0x200C ; 0x80200c - fd2: 60 93 44 01 sts 0x0144, r22 ; 0x800144 <__TEXT_REGION_LENGTH__+0x700144> - fd6: 70 93 45 01 sts 0x0145, r23 ; 0x800145 <__TEXT_REGION_LENGTH__+0x700145> - fda: 6b ea ldi r22, 0xAB ; 171 - fdc: 73 e2 ldi r23, 0x23 ; 35 - fde: 60 93 48 01 sts 0x0148, r22 ; 0x800148 <__TEXT_REGION_LENGTH__+0x700148> - fe2: 70 93 49 01 sts 0x0149, r23 ; 0x800149 <__TEXT_REGION_LENGTH__+0x700149> - fe6: 10 92 4a 01 sts 0x014A, r1 ; 0x80014a <__TEXT_REGION_LENGTH__+0x70014a> - fea: 2b e3 ldi r18, 0x3B ; 59 - fec: 20 93 4c 01 sts 0x014C, r18 ; 0x80014c <__TEXT_REGION_LENGTH__+0x70014c> - ff0: 23 e0 ldi r18, 0x03 ; 3 - ff2: 20 93 4d 01 sts 0x014D, r18 ; 0x80014d <__TEXT_REGION_LENGTH__+0x70014d> - ff6: 10 92 4e 01 sts 0x014E, r1 ; 0x80014e <__TEXT_REGION_LENGTH__+0x70014e> - ffa: 20 81 ld r18, Z - ffc: 20 68 ori r18, 0x80 ; 128 - ffe: 20 83 st Z, r18 - 1000: 98 8b std Y+16, r25 ; 0x10 - 1002: 19 8a std Y+17, r1 ; 0x11 - 1004: 45 e9 ldi r20, 0x95 ; 149 - 1006: 4a 8b std Y+18, r20 ; 0x12 - 1008: 3b 8b std Y+19, r19 ; 0x13 - 100a: 2e ee ldi r18, 0xEE ; 238 - 100c: 32 e0 ldi r19, 0x02 ; 2 - 100e: 2c 8b std Y+20, r18 ; 0x14 - 1010: 3d 8b std Y+21, r19 ; 0x15 - 1012: 58 8f std Y+24, r21 ; 0x18 - 1014: 89 8f std Y+25, r24 ; 0x19 - 1016: 1a 8e std Y+26, r1 ; 0x1a - 1018: 6c ec ldi r22, 0xCC ; 204 - 101a: 75 e2 ldi r23, 0x25 ; 37 - 101c: 6c 8f std Y+28, r22 ; 0x1c - 101e: 7d 8f std Y+29, r23 ; 0x1d - 1020: 1e 8e std Y+30, r1 ; 0x1e - 1022: 98 a3 std Y+32, r25 ; 0x20 - 1024: 19 a2 std Y+33, r1 ; 0x21 - 1026: 4a a3 std Y+34, r20 ; 0x22 - 1028: 9a e4 ldi r25, 0x4A ; 74 - 102a: 9b a3 std Y+35, r25 ; 0x23 - 102c: 2c a3 std Y+36, r18 ; 0x24 - 102e: 3d a3 std Y+37, r19 ; 0x25 - 1030: 93 ec ldi r25, 0xC3 ; 195 - 1032: 98 a7 std Y+40, r25 ; 0x28 - 1034: 89 a7 std Y+41, r24 ; 0x29 - 1036: 1a a6 std Y+42, r1 ; 0x2a - 1038: 8a eb ldi r24, 0xBA ; 186 - 103a: 98 e2 ldi r25, 0x28 ; 40 - 103c: 8c a7 std Y+44, r24 ; 0x2c - 103e: 9d a7 std Y+45, r25 ; 0x2d - 1040: 1e a6 std Y+46, r1 ; 0x2e - 1042: 68 ec ldi r22, 0xC8 ; 200 - 1044: 70 e0 ldi r23, 0x00 ; 0 - 1046: 84 ef ldi r24, 0xF4 ; 244 - 1048: 91 e0 ldi r25, 0x01 ; 1 - 104a: 46 db rcall .-2420 ; 0x6d8 - 104c: 88 ec ldi r24, 0xC8 ; 200 - 104e: 90 e0 ldi r25, 0x00 ; 0 - 1050: 80 93 07 20 sts 0x2007, r24 ; 0x802007 - 1054: 90 93 08 20 sts 0x2008, r25 ; 0x802008 - 1058: 81 e0 ldi r24, 0x01 ; 1 - 105a: 80 93 06 20 sts 0x2006, r24 ; 0x802006 - 105e: 88 89 ldd r24, Y+16 ; 0x10 - 1060: 80 68 ori r24, 0x80 ; 128 - 1062: 88 8b std Y+16, r24 ; 0x10 - 1064: 88 a1 ldd r24, Y+32 ; 0x20 - 1066: 80 68 ori r24, 0x80 ; 128 - 1068: 88 a3 std Y+32, r24 ; 0x20 - 106a: df 91 pop r29 - 106c: cf 91 pop r28 - 106e: 1f 91 pop r17 - 1070: 08 95 ret +void tiny_dma_set_mode_2(void){ + d2c: 1f 93 push r17 + d2e: cf 93 push r28 + d30: df 93 push r29 + + global_mode = 2; + d32: 12 e0 ldi r17, 0x02 ; 2 + d34: 10 93 09 20 sts 0x2009, r17 ; 0x802009 + + tiny_dma_flush(); + d38: d8 de rcall .-592 ; 0xaea + + DMA.CH2.REPCNT = 0; //Repeat forever! + d3a: c0 e0 ldi r28, 0x00 ; 0 + d3c: d1 e0 ldi r29, 0x01 ; 1 + d3e: 1e aa std Y+54, r1 ; 0x36 + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + d40: 84 e2 ldi r24, 0x24 ; 36 + d42: 88 ab std Y+48, r24 ; 0x30 + DMA.CH2.CTRLB = 0x00; //No interrupt for DacBuf!! + d44: 19 aa std Y+49, r1 ; 0x31 + DMA.CH2.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + d46: 39 e5 ldi r19, 0x59 ; 89 + d48: 3a ab std Y+50, r19 ; 0x32 + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER + d4a: 1b ab std Y+51, r17 ; 0x33 + DMA.CH2.TRFCNT = auxDacBufLen; + d4c: 40 91 0b 20 lds r20, 0x200B ; 0x80200b + d50: 50 91 0c 20 lds r21, 0x200C ; 0x80200c + d54: 4c ab std Y+52, r20 ; 0x34 + d56: 5d ab std Y+53, r21 ; 0x35 -00001072 : - 1072: ff cf rjmp .-2 ; 0x1072 + DMA.CH2.SRCADDR0 = (( (uint16_t) &dacBuf_CH2[0]) >> 0) & 0xFF; //Source address is dacbuf + d58: 4b ea ldi r20, 0xAB ; 171 + d5a: 53 e2 ldi r21, 0x23 ; 35 + d5c: 48 af std Y+56, r20 ; 0x38 + DMA.CH2.SRCADDR1 = (( (uint16_t) &dacBuf_CH2[0]) >> 8) & 0xFF; + d5e: 59 af std Y+57, r21 ; 0x39 + DMA.CH2.SRCADDR2 = 0x00; + d60: 1a ae std Y+58, r1 ; 0x3a + + DMA.CH2.DESTADDR0 = (( (uint16_t) &DACB.CH1DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + d62: 9b e3 ldi r25, 0x3B ; 59 + d64: 9c af std Y+60, r25 ; 0x3c + DMA.CH2.DESTADDR1 = (( (uint16_t) &DACB.CH1DATAH) >> 8) & 0xFF; + d66: 93 e0 ldi r25, 0x03 ; 3 + d68: 90 93 3d 01 sts 0x013D, r25 ; 0x80013d <__TEXT_REGION_LENGTH__+0x70013d> + DMA.CH2.DESTADDR2 = 0x00; + d6c: 10 92 3e 01 sts 0x013E, r1 ; 0x80013e <__TEXT_REGION_LENGTH__+0x70013e> + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + d70: 28 a9 ldd r18, Y+48 ; 0x30 + d72: 20 68 ori r18, 0x80 ; 128 + d74: 28 ab std Y+48, r18 ; 0x30 + + DMA.CH3.REPCNT = 0; //Repeat forever! + d76: 10 92 46 01 sts 0x0146, r1 ; 0x800146 <__TEXT_REGION_LENGTH__+0x700146> + DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + d7a: e0 e4 ldi r30, 0x40 ; 64 + d7c: f1 e0 ldi r31, 0x01 ; 1 + d7e: 80 83 st Z, r24 + DMA.CH3.CTRLB = 0x00; //Hi interrupt on block complete + d80: 10 92 41 01 sts 0x0141, r1 ; 0x800141 <__TEXT_REGION_LENGTH__+0x700141> + DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + d84: 30 93 42 01 sts 0x0142, r19 ; 0x800142 <__TEXT_REGION_LENGTH__+0x700142> + DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH2_gc; //Triggered from TCC0 when it hits PER + d88: 90 93 43 01 sts 0x0143, r25 ; 0x800143 <__TEXT_REGION_LENGTH__+0x700143> + DMA.CH3.TRFCNT = dacBuf_len; + d8c: 20 91 0d 20 lds r18, 0x200D ; 0x80200d + d90: 30 91 0e 20 lds r19, 0x200E ; 0x80200e + d94: 20 93 44 01 sts 0x0144, r18 ; 0x800144 <__TEXT_REGION_LENGTH__+0x700144> + d98: 30 93 45 01 sts 0x0145, r19 ; 0x800145 <__TEXT_REGION_LENGTH__+0x700145> -00001074 : - 1074: cf 93 push r28 - 1076: df 93 push r29 - 1078: 86 e0 ldi r24, 0x06 ; 6 - 107a: 80 93 09 20 sts 0x2009, r24 ; 0x802009 - 107e: 3f dd rcall .-1410 ; 0xafe - 1080: c0 e0 ldi r28, 0x00 ; 0 - 1082: d1 e0 ldi r29, 0x01 ; 1 - 1084: 1e aa std Y+54, r1 ; 0x36 - 1086: 84 e2 ldi r24, 0x24 ; 36 - 1088: 88 ab std Y+48, r24 ; 0x30 - 108a: 19 aa std Y+49, r1 ; 0x31 - 108c: 39 e5 ldi r19, 0x59 ; 89 - 108e: 3a ab std Y+50, r19 ; 0x32 - 1090: 93 e0 ldi r25, 0x03 ; 3 - 1092: 9b ab std Y+51, r25 ; 0x33 - 1094: 40 91 0d 20 lds r20, 0x200D ; 0x80200d - 1098: 50 91 0e 20 lds r21, 0x200E ; 0x80200e - 109c: 4c ab std Y+52, r20 ; 0x34 - 109e: 5d ab std Y+53, r21 ; 0x35 - 10a0: 4a e9 ldi r20, 0x9A ; 154 - 10a2: 51 e2 ldi r21, 0x21 ; 33 - 10a4: 48 af std Y+56, r20 ; 0x38 - 10a6: 59 af std Y+57, r21 ; 0x39 - 10a8: 1a ae std Y+58, r1 ; 0x3a - 10aa: 29 e3 ldi r18, 0x39 ; 57 - 10ac: 2c af std Y+60, r18 ; 0x3c - 10ae: 90 93 3d 01 sts 0x013D, r25 ; 0x80013d <__TEXT_REGION_LENGTH__+0x70013d> - 10b2: 10 92 3e 01 sts 0x013E, r1 ; 0x80013e <__TEXT_REGION_LENGTH__+0x70013e> - 10b6: 28 a9 ldd r18, Y+48 ; 0x30 - 10b8: 20 68 ori r18, 0x80 ; 128 - 10ba: 28 ab std Y+48, r18 ; 0x30 - 10bc: 10 92 46 01 sts 0x0146, r1 ; 0x800146 <__TEXT_REGION_LENGTH__+0x700146> - 10c0: e0 e4 ldi r30, 0x40 ; 64 - 10c2: f1 e0 ldi r31, 0x01 ; 1 - 10c4: 80 83 st Z, r24 - 10c6: 10 92 41 01 sts 0x0141, r1 ; 0x800141 <__TEXT_REGION_LENGTH__+0x700141> - 10ca: 30 93 42 01 sts 0x0142, r19 ; 0x800142 <__TEXT_REGION_LENGTH__+0x700142> - 10ce: 32 e0 ldi r19, 0x02 ; 2 - 10d0: 30 93 43 01 sts 0x0143, r19 ; 0x800143 <__TEXT_REGION_LENGTH__+0x700143> - 10d4: 40 91 0b 20 lds r20, 0x200B ; 0x80200b - 10d8: 50 91 0c 20 lds r21, 0x200C ; 0x80200c - 10dc: 40 93 44 01 sts 0x0144, r20 ; 0x800144 <__TEXT_REGION_LENGTH__+0x700144> - 10e0: 50 93 45 01 sts 0x0145, r21 ; 0x800145 <__TEXT_REGION_LENGTH__+0x700145> - 10e4: 4b ea ldi r20, 0xAB ; 171 - 10e6: 53 e2 ldi r21, 0x23 ; 35 - 10e8: 40 93 48 01 sts 0x0148, r20 ; 0x800148 <__TEXT_REGION_LENGTH__+0x700148> - 10ec: 50 93 49 01 sts 0x0149, r21 ; 0x800149 <__TEXT_REGION_LENGTH__+0x700149> - 10f0: 10 92 4a 01 sts 0x014A, r1 ; 0x80014a <__TEXT_REGION_LENGTH__+0x70014a> - 10f4: 2b e3 ldi r18, 0x3B ; 59 - 10f6: 20 93 4c 01 sts 0x014C, r18 ; 0x80014c <__TEXT_REGION_LENGTH__+0x70014c> - 10fa: 90 93 4d 01 sts 0x014D, r25 ; 0x80014d <__TEXT_REGION_LENGTH__+0x70014d> - 10fe: 10 92 4e 01 sts 0x014E, r1 ; 0x80014e <__TEXT_REGION_LENGTH__+0x70014e> - 1102: 20 81 ld r18, Z - 1104: 20 68 ori r18, 0x80 ; 128 - 1106: 20 83 st Z, r18 - 1108: 18 8a std Y+16, r1 ; 0x10 - 110a: 20 e4 ldi r18, 0x40 ; 64 - 110c: 28 8b std Y+16, r18 ; 0x10 - 110e: 88 8b std Y+16, r24 ; 0x10 - 1110: 99 8b std Y+17, r25 ; 0x11 - 1112: 95 e9 ldi r25, 0x95 ; 149 - 1114: 9a 8b std Y+18, r25 ; 0x12 - 1116: 90 e1 ldi r25, 0x10 ; 16 - 1118: 9b 8b std Y+19, r25 ; 0x13 - 111a: 4c ed ldi r20, 0xDC ; 220 - 111c: 55 e0 ldi r21, 0x05 ; 5 - 111e: 4c 8b std Y+20, r20 ; 0x14 - 1120: 5d 8b std Y+21, r21 ; 0x15 - 1122: 88 8f std Y+24, r24 ; 0x18 - 1124: 39 8f std Y+25, r19 ; 0x19 - 1126: 1a 8e std Y+26, r1 ; 0x1a - 1128: 8c ec ldi r24, 0xCC ; 204 - 112a: 95 e2 ldi r25, 0x25 ; 37 - 112c: 8c 8f std Y+28, r24 ; 0x1c - 112e: 9d 8f std Y+29, r25 ; 0x1d - 1130: 1e 8e std Y+30, r1 ; 0x1e - 1132: 68 ec ldi r22, 0xC8 ; 200 - 1134: 70 e0 ldi r23, 0x00 ; 0 - 1136: 84 ef ldi r24, 0xF4 ; 244 - 1138: 91 e0 ldi r25, 0x01 ; 1 - 113a: ce da rcall .-2660 ; 0x6d8 - 113c: 80 e9 ldi r24, 0x90 ; 144 - 113e: 91 e0 ldi r25, 0x01 ; 1 - 1140: 80 93 07 20 sts 0x2007, r24 ; 0x802007 - 1144: 90 93 08 20 sts 0x2008, r25 ; 0x802008 - 1148: 81 e0 ldi r24, 0x01 ; 1 - 114a: 80 93 06 20 sts 0x2006, r24 ; 0x802006 - 114e: 88 89 ldd r24, Y+16 ; 0x10 - 1150: 80 68 ori r24, 0x80 ; 128 - 1152: 88 8b std Y+16, r24 ; 0x10 - 1154: df 91 pop r29 - 1156: cf 91 pop r28 - 1158: 08 95 ret + DMA.CH3.SRCADDR0 = (( (uint16_t) &dacBuf_CH1[0]) >> 0) & 0xFF; //Source address is dacbuf + d9c: 2a e9 ldi r18, 0x9A ; 154 + d9e: 31 e2 ldi r19, 0x21 ; 33 + da0: 20 93 48 01 sts 0x0148, r18 ; 0x800148 <__TEXT_REGION_LENGTH__+0x700148> + DMA.CH3.SRCADDR1 = (( (uint16_t) &dacBuf_CH1[0]) >> 8) & 0xFF; + da4: 30 93 49 01 sts 0x0149, r19 ; 0x800149 <__TEXT_REGION_LENGTH__+0x700149> + DMA.CH3.SRCADDR2 = 0x00; + da8: 10 92 4a 01 sts 0x014A, r1 ; 0x80014a <__TEXT_REGION_LENGTH__+0x70014a> + + DMA.CH3.DESTADDR0 = (( (uint16_t) &DACB.CH0DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + dac: 29 e3 ldi r18, 0x39 ; 57 + dae: 20 93 4c 01 sts 0x014C, r18 ; 0x80014c <__TEXT_REGION_LENGTH__+0x70014c> + DMA.CH3.DESTADDR1 = (( (uint16_t) &DACB.CH0DATAH) >> 8) & 0xFF; + db2: 90 93 4d 01 sts 0x014D, r25 ; 0x80014d <__TEXT_REGION_LENGTH__+0x70014d> + DMA.CH3.DESTADDR2 = 0x00; + db6: 10 92 4e 01 sts 0x014E, r1 ; 0x80014e <__TEXT_REGION_LENGTH__+0x70014e> + + //Must enable last for REPCNT won't work! + DMA.CH3.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + dba: 90 81 ld r25, Z + dbc: 90 68 ori r25, 0x80 ; 128 + dbe: 90 83 st Z, r25 + + DMA.CH0.CTRLA = 0x00; + dc0: 18 8a std Y+16, r1 ; 0x10 + DMA.CH0.CTRLA = DMA_CH_RESET_bm; + dc2: 90 e4 ldi r25, 0x40 ; 64 + dc4: 98 8b std Y+16, r25 ; 0x10 + + DMA.CH0.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; //Do not repeat! + dc6: 88 8b std Y+16, r24 ; 0x10 + DMA.CH0.CTRLB = 0x00; //No interrupt! + dc8: 19 8a std Y+17, r1 ; 0x11 + DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_DESTRELOAD_BLOCK_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + dca: 45 e9 ldi r20, 0x95 ; 149 + dcc: 4a 8b std Y+18, r20 ; 0x12 + DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_ADCA_CH0_gc; //Triggered from ADCA channel 0 + dce: 90 e1 ldi r25, 0x10 ; 16 + dd0: 9b 8b std Y+19, r25 ; 0x13 + DMA.CH0.TRFCNT = PACKET_SIZE; + dd2: 2e ee ldi r18, 0xEE ; 238 + dd4: 32 e0 ldi r19, 0x02 ; 2 + dd6: 2c 8b std Y+20, r18 ; 0x14 + dd8: 3d 8b std Y+21, r19 ; 0x15 + + DMA.CH0.SRCADDR0 = (( (uint16_t) &ADCA.CH0.RESL) >> 0) & 0xFF; //Source address is ADC + dda: 88 8f std Y+24, r24 ; 0x18 + DMA.CH0.SRCADDR1 = (( (uint16_t) &ADCA.CH0.RESL) >> 8) & 0xFF; + ddc: 19 8f std Y+25, r17 ; 0x19 + DMA.CH0.SRCADDR2 = 0x00; + dde: 1a 8e std Y+26, r1 ; 0x1a + + DMA.CH0.DESTADDR0 = (( (uint16_t) &isoBuf[0]) >> 0) & 0xFF; //Dest address is isoBuf + de0: 6c ec ldi r22, 0xCC ; 204 + de2: 75 e2 ldi r23, 0x25 ; 37 + de4: 6c 8f std Y+28, r22 ; 0x1c + DMA.CH0.DESTADDR1 = (( (uint16_t) &isoBuf[0]) >> 8) & 0xFF; + de6: 7d 8f std Y+29, r23 ; 0x1d + DMA.CH0.DESTADDR2 = 0x00; + de8: 1e 8e std Y+30, r1 ; 0x1e + + + DMA.CH1.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; //Do not repeat! + dea: 88 a3 std Y+32, r24 ; 0x20 + DMA.CH1.CTRLB = 0x00; //No interrupt! + dec: 19 a2 std Y+33, r1 ; 0x21 + DMA.CH1.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_DESTRELOAD_BLOCK_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + dee: 4a a3 std Y+34, r20 ; 0x22 + DMA.CH1.TRIGSRC = DMA_CH_TRIGSRC_ADCA_CH0_gc; //Triggered from ADCA channel 0 + df0: 9b a3 std Y+35, r25 ; 0x23 + DMA.CH1.TRFCNT = PACKET_SIZE; + df2: 2c a3 std Y+36, r18 ; 0x24 + df4: 3d a3 std Y+37, r19 ; 0x25 + + DMA.CH1.SRCADDR0 = (( (uint16_t) &ADCA.CH2.RESL) >> 0) & 0xFF; //Source address is ADC + df6: 84 e3 ldi r24, 0x34 ; 52 + df8: 88 a7 std Y+40, r24 ; 0x28 + DMA.CH1.SRCADDR1 = (( (uint16_t) &ADCA.CH2.RESL) >> 8) & 0xFF; + dfa: 19 a7 std Y+41, r17 ; 0x29 + DMA.CH1.SRCADDR2 = 0x00; + dfc: 1a a6 std Y+42, r1 ; 0x2a + + DMA.CH1.DESTADDR0 = (( (uint16_t) &isoBuf[PACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + dfe: 8a eb ldi r24, 0xBA ; 186 + e00: 98 e2 ldi r25, 0x28 ; 40 + e02: 8c a7 std Y+44, r24 ; 0x2c + DMA.CH1.DESTADDR1 = (( (uint16_t) &isoBuf[PACKET_SIZE]) >> 8) & 0xFF; + e04: 9d a7 std Y+45, r25 ; 0x2d + DMA.CH1.DESTADDR2 = 0x00; + e06: 1e a6 std Y+46, r1 ; 0x2e + + //Must enable last for REPCNT won't work! -0000115a : - 115a: cf 93 push r28 - 115c: df 93 push r29 - 115e: 87 e0 ldi r24, 0x07 ; 7 - 1160: 80 93 09 20 sts 0x2009, r24 ; 0x802009 - 1164: cc dc rcall .-1640 ; 0xafe - 1166: c0 e0 ldi r28, 0x00 ; 0 - 1168: d1 e0 ldi r29, 0x01 ; 1 - 116a: 1e aa std Y+54, r1 ; 0x36 - 116c: 94 e2 ldi r25, 0x24 ; 36 - 116e: 98 ab std Y+48, r25 ; 0x30 - 1170: 19 aa std Y+49, r1 ; 0x31 - 1172: 39 e5 ldi r19, 0x59 ; 89 - 1174: 3a ab std Y+50, r19 ; 0x32 - 1176: 83 e0 ldi r24, 0x03 ; 3 - 1178: 8b ab std Y+51, r24 ; 0x33 - 117a: 40 91 0d 20 lds r20, 0x200D ; 0x80200d - 117e: 50 91 0e 20 lds r21, 0x200E ; 0x80200e - 1182: 4c ab std Y+52, r20 ; 0x34 - 1184: 5d ab std Y+53, r21 ; 0x35 - 1186: 4a e9 ldi r20, 0x9A ; 154 - 1188: 51 e2 ldi r21, 0x21 ; 33 - 118a: 48 af std Y+56, r20 ; 0x38 - 118c: 59 af std Y+57, r21 ; 0x39 - 118e: 1a ae std Y+58, r1 ; 0x3a - 1190: 29 e3 ldi r18, 0x39 ; 57 - 1192: 2c af std Y+60, r18 ; 0x3c - 1194: 80 93 3d 01 sts 0x013D, r24 ; 0x80013d <__TEXT_REGION_LENGTH__+0x70013d> - 1198: 10 92 3e 01 sts 0x013E, r1 ; 0x80013e <__TEXT_REGION_LENGTH__+0x70013e> - 119c: 28 a9 ldd r18, Y+48 ; 0x30 - 119e: 20 68 ori r18, 0x80 ; 128 - 11a0: 28 ab std Y+48, r18 ; 0x30 - 11a2: 10 92 46 01 sts 0x0146, r1 ; 0x800146 <__TEXT_REGION_LENGTH__+0x700146> - 11a6: e0 e4 ldi r30, 0x40 ; 64 - 11a8: f1 e0 ldi r31, 0x01 ; 1 - 11aa: 90 83 st Z, r25 - 11ac: 10 92 41 01 sts 0x0141, r1 ; 0x800141 <__TEXT_REGION_LENGTH__+0x700141> - 11b0: 30 93 42 01 sts 0x0142, r19 ; 0x800142 <__TEXT_REGION_LENGTH__+0x700142> - 11b4: 32 e0 ldi r19, 0x02 ; 2 - 11b6: 30 93 43 01 sts 0x0143, r19 ; 0x800143 <__TEXT_REGION_LENGTH__+0x700143> - 11ba: 40 91 0b 20 lds r20, 0x200B ; 0x80200b - 11be: 50 91 0c 20 lds r21, 0x200C ; 0x80200c - 11c2: 40 93 44 01 sts 0x0144, r20 ; 0x800144 <__TEXT_REGION_LENGTH__+0x700144> - 11c6: 50 93 45 01 sts 0x0145, r21 ; 0x800145 <__TEXT_REGION_LENGTH__+0x700145> - 11ca: 4b ea ldi r20, 0xAB ; 171 - 11cc: 53 e2 ldi r21, 0x23 ; 35 - 11ce: 40 93 48 01 sts 0x0148, r20 ; 0x800148 <__TEXT_REGION_LENGTH__+0x700148> - 11d2: 50 93 49 01 sts 0x0149, r21 ; 0x800149 <__TEXT_REGION_LENGTH__+0x700149> - 11d6: 10 92 4a 01 sts 0x014A, r1 ; 0x80014a <__TEXT_REGION_LENGTH__+0x70014a> - 11da: 2b e3 ldi r18, 0x3B ; 59 - 11dc: 20 93 4c 01 sts 0x014C, r18 ; 0x80014c <__TEXT_REGION_LENGTH__+0x70014c> - 11e0: 80 93 4d 01 sts 0x014D, r24 ; 0x80014d <__TEXT_REGION_LENGTH__+0x70014d> - 11e4: 10 92 4e 01 sts 0x014E, r1 ; 0x80014e <__TEXT_REGION_LENGTH__+0x70014e> - 11e8: 20 81 ld r18, Z - 11ea: 20 68 ori r18, 0x80 ; 128 - 11ec: 20 83 st Z, r18 - 11ee: 18 8a std Y+16, r1 ; 0x10 - 11f0: 20 e4 ldi r18, 0x40 ; 64 - 11f2: 28 8b std Y+16, r18 ; 0x10 - 11f4: 25 e2 ldi r18, 0x25 ; 37 - 11f6: 28 8b std Y+16, r18 ; 0x10 - 11f8: 89 8b std Y+17, r24 ; 0x11 - 11fa: 85 e9 ldi r24, 0x95 ; 149 - 11fc: 8a 8b std Y+18, r24 ; 0x12 - 11fe: 80 e1 ldi r24, 0x10 ; 16 - 1200: 8b 8b std Y+19, r24 ; 0x13 - 1202: 4c ed ldi r20, 0xDC ; 220 - 1204: 55 e0 ldi r21, 0x05 ; 5 - 1206: 4c 8b std Y+20, r20 ; 0x14 - 1208: 5d 8b std Y+21, r21 ; 0x15 - 120a: 98 8f std Y+24, r25 ; 0x18 - 120c: 39 8f std Y+25, r19 ; 0x19 - 120e: 1a 8e std Y+26, r1 ; 0x1a - 1210: 8c ec ldi r24, 0xCC ; 204 - 1212: 95 e2 ldi r25, 0x25 ; 37 - 1214: 8c 8f std Y+28, r24 ; 0x1c - 1216: 9d 8f std Y+29, r25 ; 0x1d - 1218: 1e 8e std Y+30, r1 ; 0x1e - 121a: 68 ec ldi r22, 0xC8 ; 200 - 121c: 70 e0 ldi r23, 0x00 ; 0 - 121e: 84 ef ldi r24, 0xF4 ; 244 + tiny_calibration_synchronise_phase(500, 200); + e08: 68 ec ldi r22, 0xC8 ; 200 + e0a: 70 e0 ldi r23, 0x00 ; 0 + e0c: 84 ef ldi r24, 0xF4 ; 244 + e0e: 91 e0 ldi r25, 0x01 ; 1 + e10: 6b dc rcall .-1834 ; 0x6e8 + median_TRFCNT = 200; + e12: 88 ec ldi r24, 0xC8 ; 200 + e14: 90 e0 ldi r25, 0x00 ; 0 + e16: 80 93 07 20 sts 0x2007, r24 ; 0x802007 + e1a: 90 93 08 20 sts 0x2008, r25 ; 0x802008 + median_TRFCNT_delay = 1; //Wait a few frames before actually setting median_TRFCNT, in case a SOF interrupt was queued during tiny_dma_set_mode_xxx. + e1e: 81 e0 ldi r24, 0x01 ; 1 + e20: 80 93 06 20 sts 0x2006, r24 ; 0x802006 + DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + e24: 88 89 ldd r24, Y+16 ; 0x10 + e26: 80 68 ori r24, 0x80 ; 128 + e28: 88 8b std Y+16, r24 ; 0x10 + DMA.CH1.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + e2a: 88 a1 ldd r24, Y+32 ; 0x20 + e2c: 80 68 ori r24, 0x80 ; 128 + e2e: 88 a3 std Y+32, r24 ; 0x20 + +} + e30: df 91 pop r29 + e32: cf 91 pop r28 + e34: 1f 91 pop r17 + e36: 08 95 ret + +00000e38 : + +void tiny_dma_loop_mode_2(void){ + e38: 08 95 ret + +00000e3a : + return; +} + + + +void tiny_dma_set_mode_3(void){ + e3a: 1f 93 push r17 + e3c: cf 93 push r28 + e3e: df 93 push r29 + + global_mode = 3; + e40: 13 e0 ldi r17, 0x03 ; 3 + e42: 10 93 09 20 sts 0x2009, r17 ; 0x802009 + + tiny_dma_flush(); + e46: 51 de rcall .-862 ; 0xaea + + //AUX channel (to keep it tx, therefore always rx) + DMA.CH1.CTRLA = 0x00; + e48: c0 e0 ldi r28, 0x00 ; 0 + e4a: d1 e0 ldi r29, 0x01 ; 1 + e4c: 18 a2 std Y+32, r1 ; 0x20 + DMA.CH1.CTRLA = DMA_CH_RESET_bm; + e4e: 50 e4 ldi r21, 0x40 ; 64 + e50: 58 a3 std Y+32, r21 ; 0x20 + + DMA.CH1.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + e52: 84 e0 ldi r24, 0x04 ; 4 + e54: 88 a3 std Y+32, r24 ; 0x20 + DMA.CH1.CTRLB = 0x00; //No int + e56: 19 a2 std Y+33, r1 ; 0x21 + DMA.CH1.ADDRCTRL = DMA_CH_SRCDIR_FIXED_gc | DMA_CH_DESTDIR_FIXED_gc; //Source and address fixed. + e58: 1a a2 std Y+34, r1 ; 0x22 + DMA.CH1.TRIGSRC = DMA_CH_TRIGSRC_USARTC0_RXC_gc; + e5a: 4b e4 ldi r20, 0x4B ; 75 + e5c: 4b a3 std Y+35, r20 ; 0x23 + DMA.CH1.TRFCNT = 0; + e5e: 1c a2 std Y+36, r1 ; 0x24 + e60: 1d a2 std Y+37, r1 ; 0x25 + DMA.CH1.REPCNT = 0; + e62: 1e a2 std Y+38, r1 ; 0x26 + + DMA.CH1.SRCADDR0 = (( (uint16_t) &dummy) >> 0) & 0xFF; + e64: 8a e0 ldi r24, 0x0A ; 10 + e66: 90 e2 ldi r25, 0x20 ; 32 + e68: 88 a7 std Y+40, r24 ; 0x28 + DMA.CH1.SRCADDR1 = (( (uint16_t) &dummy) >> 8) & 0xFF; + e6a: 99 a7 std Y+41, r25 ; 0x29 + DMA.CH1.SRCADDR2 = 0x00; + e6c: 1a a6 std Y+42, r1 ; 0x2a + + DMA.CH1.DESTADDR0 = (( (uint16_t) &USARTC0.DATA) >> 0) & 0xFF; + e6e: 30 ea ldi r19, 0xA0 ; 160 + e70: 3c a7 std Y+44, r19 ; 0x2c + DMA.CH1.DESTADDR1 = (( (uint16_t) &USARTC0.DATA) >> 8) & 0xFF; + e72: 28 e0 ldi r18, 0x08 ; 8 + e74: 2d a7 std Y+45, r18 ; 0x2d + DMA.CH1.DESTADDR2 = 0x00; + e76: 1e a6 std Y+46, r1 ; 0x2e + + //Must enable last for REPCNT won't work! + DMA.CH1.CTRLA |= DMA_CH_REPEAT_bm | DMA_CH_ENABLE_bm; //Enable! + e78: 88 a1 ldd r24, Y+32 ; 0x20 + e7a: 80 6a ori r24, 0xA0 ; 160 + e7c: 88 a3 std Y+32, r24 ; 0x20 + + USARTC0.DATA = 0x55; + e7e: 85 e5 ldi r24, 0x55 ; 85 + e80: 80 93 a0 08 sts 0x08A0, r24 ; 0x8008a0 <__TEXT_REGION_LENGTH__+0x7008a0> + + DMA.CH2.REPCNT = 0; //Repeat forever! + e84: 1e aa std Y+54, r1 ; 0x36 + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + e86: 84 e2 ldi r24, 0x24 ; 36 + e88: 88 ab std Y+48, r24 ; 0x30 + DMA.CH2.CTRLB = 0x00; //Hi interrupt on block complete + e8a: 19 aa std Y+49, r1 ; 0x31 + DMA.CH2.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + e8c: 69 e5 ldi r22, 0x59 ; 89 + e8e: 6a ab std Y+50, r22 ; 0x32 + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH2_gc; //Triggered from TCC0 when it hits PER + e90: 1b ab std Y+51, r17 ; 0x33 + DMA.CH2.TRFCNT = dacBuf_len; + e92: e0 91 0d 20 lds r30, 0x200D ; 0x80200d + e96: f0 91 0e 20 lds r31, 0x200E ; 0x80200e + e9a: ec ab std Y+52, r30 ; 0x34 + e9c: fd ab std Y+53, r31 ; 0x35 + + DMA.CH2.SRCADDR0 = (( (uint16_t) &dacBuf_CH1[0]) >> 0) & 0xFF; //Source address is dacbuf + e9e: ea e9 ldi r30, 0x9A ; 154 + ea0: f1 e2 ldi r31, 0x21 ; 33 + ea2: e8 af std Y+56, r30 ; 0x38 + DMA.CH2.SRCADDR1 = (( (uint16_t) &dacBuf_CH1[0]) >> 8) & 0xFF; + ea4: f9 af std Y+57, r31 ; 0x39 + DMA.CH2.SRCADDR2 = 0x00; + ea6: 1a ae std Y+58, r1 ; 0x3a + + DMA.CH2.DESTADDR0 = (( (uint16_t) &DACB.CH0DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + ea8: 99 e3 ldi r25, 0x39 ; 57 + eaa: 9c af std Y+60, r25 ; 0x3c + DMA.CH2.DESTADDR1 = (( (uint16_t) &DACB.CH0DATAH) >> 8) & 0xFF; + eac: 10 93 3d 01 sts 0x013D, r17 ; 0x80013d <__TEXT_REGION_LENGTH__+0x70013d> + DMA.CH2.DESTADDR2 = 0x00; + eb0: 10 92 3e 01 sts 0x013E, r1 ; 0x80013e <__TEXT_REGION_LENGTH__+0x70013e> + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + eb4: 98 a9 ldd r25, Y+48 ; 0x30 + eb6: 90 68 ori r25, 0x80 ; 128 + eb8: 98 ab std Y+48, r25 ; 0x30 + + DMA.CH3.REPCNT = 0; //Repeat forever! + eba: 10 92 46 01 sts 0x0146, r1 ; 0x800146 <__TEXT_REGION_LENGTH__+0x700146> + DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + ebe: e0 e4 ldi r30, 0x40 ; 64 + ec0: f1 e0 ldi r31, 0x01 ; 1 + ec2: 80 83 st Z, r24 + DMA.CH3.CTRLB = 0x00; //No interrupt for DacBuf!! + ec4: 10 92 41 01 sts 0x0141, r1 ; 0x800141 <__TEXT_REGION_LENGTH__+0x700141> + DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + ec8: 60 93 42 01 sts 0x0142, r22 ; 0x800142 <__TEXT_REGION_LENGTH__+0x700142> + DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER + ecc: 92 e0 ldi r25, 0x02 ; 2 + ece: 90 93 43 01 sts 0x0143, r25 ; 0x800143 <__TEXT_REGION_LENGTH__+0x700143> + DMA.CH3.TRFCNT = auxDacBufLen; + ed2: 60 91 0b 20 lds r22, 0x200B ; 0x80200b + ed6: 70 91 0c 20 lds r23, 0x200C ; 0x80200c + eda: 60 93 44 01 sts 0x0144, r22 ; 0x800144 <__TEXT_REGION_LENGTH__+0x700144> + ede: 70 93 45 01 sts 0x0145, r23 ; 0x800145 <__TEXT_REGION_LENGTH__+0x700145> + + DMA.CH3.SRCADDR0 = (( (uint16_t) &dacBuf_CH2[0]) >> 0) & 0xFF; //Source address is dacbuf + ee2: 6b ea ldi r22, 0xAB ; 171 + ee4: 73 e2 ldi r23, 0x23 ; 35 + ee6: 60 93 48 01 sts 0x0148, r22 ; 0x800148 <__TEXT_REGION_LENGTH__+0x700148> + DMA.CH3.SRCADDR1 = (( (uint16_t) &dacBuf_CH2[0]) >> 8) & 0xFF; + eea: 70 93 49 01 sts 0x0149, r23 ; 0x800149 <__TEXT_REGION_LENGTH__+0x700149> + DMA.CH3.SRCADDR2 = 0x00; + eee: 10 92 4a 01 sts 0x014A, r1 ; 0x80014a <__TEXT_REGION_LENGTH__+0x70014a> + + DMA.CH3.DESTADDR0 = (( (uint16_t) &DACB.CH1DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + ef2: 9b e3 ldi r25, 0x3B ; 59 + ef4: 90 93 4c 01 sts 0x014C, r25 ; 0x80014c <__TEXT_REGION_LENGTH__+0x70014c> + DMA.CH3.DESTADDR1 = (( (uint16_t) &DACB.CH1DATAH) >> 8) & 0xFF; + ef8: 10 93 4d 01 sts 0x014D, r17 ; 0x80014d <__TEXT_REGION_LENGTH__+0x70014d> + DMA.CH3.DESTADDR2 = 0x00; + efc: 10 92 4e 01 sts 0x014E, r1 ; 0x80014e <__TEXT_REGION_LENGTH__+0x70014e> + + //Must enable last for REPCNT won't work! + DMA.CH3.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + f00: 90 81 ld r25, Z + f02: 90 68 ori r25, 0x80 ; 128 + f04: 90 83 st Z, r25 + + //Actual data being transferred + DMA.CH0.CTRLA = 0x00; + f06: 18 8a std Y+16, r1 ; 0x10 + DMA.CH0.CTRLA = DMA_CH_RESET_bm; + f08: 58 8b std Y+16, r21 ; 0x10 + + DMA.CH0.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; //Do not repeat! + f0a: 88 8b std Y+16, r24 ; 0x10 + DMA.CH0.CTRLB = 0x00; //Hi interrupt + f0c: 19 8a std Y+17, r1 ; 0x11 + DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_DESTRELOAD_BLOCK_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + f0e: 85 e9 ldi r24, 0x95 ; 149 + f10: 8a 8b std Y+18, r24 ; 0x12 + DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_USARTC0_RXC_gc; + f12: 4b 8b std Y+19, r20 ; 0x13 + DMA.CH0.TRFCNT = PACKET_SIZE; + f14: 8e ee ldi r24, 0xEE ; 238 + f16: 92 e0 ldi r25, 0x02 ; 2 + f18: 8c 8b std Y+20, r24 ; 0x14 + f1a: 9d 8b std Y+21, r25 ; 0x15 + + DMA.CH0.SRCADDR0 = (( (uint16_t) &USARTC0.DATA) >> 0) & 0xFF; //Source address is ADC + f1c: 38 8f std Y+24, r19 ; 0x18 + DMA.CH0.SRCADDR1 = (( (uint16_t) &USARTC0.DATA) >> 8) & 0xFF; + f1e: 29 8f std Y+25, r18 ; 0x19 + DMA.CH0.SRCADDR2 = 0x00; + f20: 1a 8e std Y+26, r1 ; 0x1a + + DMA.CH0.DESTADDR0 = (( (uint16_t) &isoBuf[0]) >> 0) & 0xFF; //Dest address is isoBuf + f22: 8c ec ldi r24, 0xCC ; 204 + f24: 95 e2 ldi r25, 0x25 ; 37 + f26: 8c 8f std Y+28, r24 ; 0x1c + DMA.CH0.DESTADDR1 = (( (uint16_t) &isoBuf[0]) >> 8) & 0xFF; + f28: 9d 8f std Y+29, r25 ; 0x1d + DMA.CH0.DESTADDR2 = 0x00; + f2a: 1e 8e std Y+30, r1 ; 0x1e + + tiny_calibration_synchronise_phase(500, 200); + f2c: 68 ec ldi r22, 0xC8 ; 200 + f2e: 70 e0 ldi r23, 0x00 ; 0 + f30: 84 ef ldi r24, 0xF4 ; 244 + f32: 91 e0 ldi r25, 0x01 ; 1 + f34: d9 db rcall .-2126 ; 0x6e8 + median_TRFCNT = 200; + f36: 88 ec ldi r24, 0xC8 ; 200 + f38: 90 e0 ldi r25, 0x00 ; 0 + f3a: 80 93 07 20 sts 0x2007, r24 ; 0x802007 + f3e: 90 93 08 20 sts 0x2008, r25 ; 0x802008 + median_TRFCNT_delay = 1; //Wait a few frames before actually setting median_TRFCNT, in case a SOF interrupt was queued during tiny_dma_set_mode_xxx. + f42: 81 e0 ldi r24, 0x01 ; 1 + f44: 80 93 06 20 sts 0x2006, r24 ; 0x802006 + + //Must enable last for REPCNT won't work! + DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + f48: 88 89 ldd r24, Y+16 ; 0x10 + f4a: 80 68 ori r24, 0x80 ; 128 + f4c: 88 8b std Y+16, r24 ; 0x10 + + +} + f4e: df 91 pop r29 + f50: cf 91 pop r28 + f52: 1f 91 pop r17 + f54: 08 95 ret + +00000f56 : + +void tiny_dma_loop_mode_3(void){ + f56: 08 95 ret + +00000f58 : + return; +} + +void tiny_dma_set_mode_4(void){ + f58: 1f 93 push r17 + f5a: cf 93 push r28 + f5c: df 93 push r29 + + global_mode = 4; + f5e: 14 e0 ldi r17, 0x04 ; 4 + f60: 10 93 09 20 sts 0x2009, r17 ; 0x802009 + + tiny_dma_flush(); + f64: c2 dd rcall .-1148 ; 0xaea + + //AUX channel (to keep it tx, therefore always rx) + DMA.CH2.CTRLA = 0x00; + f66: c0 e0 ldi r28, 0x00 ; 0 + f68: d1 e0 ldi r29, 0x01 ; 1 + f6a: 18 aa std Y+48, r1 ; 0x30 + DMA.CH2.CTRLA = DMA_CH_RESET_bm; + f6c: 80 e4 ldi r24, 0x40 ; 64 + f6e: 88 ab std Y+48, r24 ; 0x30 + + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + f70: 18 ab std Y+48, r17 ; 0x30 + DMA.CH2.CTRLB = 0x00; //No int + f72: 19 aa std Y+49, r1 ; 0x31 + DMA.CH2.ADDRCTRL = DMA_CH_SRCDIR_FIXED_gc | DMA_CH_DESTDIR_FIXED_gc; //Source and address fixed. + f74: 1a aa std Y+50, r1 ; 0x32 + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_USARTC0_RXC_gc; + f76: 3b e4 ldi r19, 0x4B ; 75 + f78: 3b ab std Y+51, r19 ; 0x33 + DMA.CH2.TRFCNT = 0; + f7a: 1c aa std Y+52, r1 ; 0x34 + f7c: 1d aa std Y+53, r1 ; 0x35 + DMA.CH2.REPCNT = 0; + f7e: 1e aa std Y+54, r1 ; 0x36 + + DMA.CH2.SRCADDR0 = (( (uint16_t) &dummy) >> 0) & 0xFF; + f80: 8a e0 ldi r24, 0x0A ; 10 + f82: 90 e2 ldi r25, 0x20 ; 32 + f84: 88 af std Y+56, r24 ; 0x38 + DMA.CH2.SRCADDR1 = (( (uint16_t) &dummy) >> 8) & 0xFF; + f86: 99 af std Y+57, r25 ; 0x39 + DMA.CH2.SRCADDR2 = 0x00; + f88: 1a ae std Y+58, r1 ; 0x3a + + DMA.CH2.DESTADDR0 = (( (uint16_t) &USARTC0.DATA) >> 0) & 0xFF; + f8a: 50 ea ldi r21, 0xA0 ; 160 + f8c: 5c af std Y+60, r21 ; 0x3c + DMA.CH2.DESTADDR1 = (( (uint16_t) &USARTC0.DATA) >> 8) & 0xFF; + f8e: 88 e0 ldi r24, 0x08 ; 8 + f90: 80 93 3d 01 sts 0x013D, r24 ; 0x80013d <__TEXT_REGION_LENGTH__+0x70013d> + DMA.CH2.DESTADDR2 = 0x00; + f94: 10 92 3e 01 sts 0x013E, r1 ; 0x80013e <__TEXT_REGION_LENGTH__+0x70013e> + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_REPEAT_bm | DMA_CH_ENABLE_bm; //Enable! + f98: 98 a9 ldd r25, Y+48 ; 0x30 + f9a: 90 6a ori r25, 0xA0 ; 160 + f9c: 98 ab std Y+48, r25 ; 0x30 + + USARTC0.DATA = 0x55; + f9e: 95 e5 ldi r25, 0x55 ; 85 + fa0: 90 93 a0 08 sts 0x08A0, r25 ; 0x8008a0 <__TEXT_REGION_LENGTH__+0x7008a0> + + DMA.CH3.REPCNT = 0; //Repeat forever! + fa4: 10 92 46 01 sts 0x0146, r1 ; 0x800146 <__TEXT_REGION_LENGTH__+0x700146> + DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + fa8: e0 e4 ldi r30, 0x40 ; 64 + faa: f1 e0 ldi r31, 0x01 ; 1 + fac: 94 e2 ldi r25, 0x24 ; 36 + fae: 90 83 st Z, r25 + DMA.CH3.CTRLB = 0x00; //No interrupt for DacBuf!! + fb0: 10 92 41 01 sts 0x0141, r1 ; 0x800141 <__TEXT_REGION_LENGTH__+0x700141> + DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + fb4: 29 e5 ldi r18, 0x59 ; 89 + fb6: 20 93 42 01 sts 0x0142, r18 ; 0x800142 <__TEXT_REGION_LENGTH__+0x700142> + DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER + fba: 22 e0 ldi r18, 0x02 ; 2 + fbc: 20 93 43 01 sts 0x0143, r18 ; 0x800143 <__TEXT_REGION_LENGTH__+0x700143> + DMA.CH3.TRFCNT = auxDacBufLen; + fc0: 60 91 0b 20 lds r22, 0x200B ; 0x80200b + fc4: 70 91 0c 20 lds r23, 0x200C ; 0x80200c + fc8: 60 93 44 01 sts 0x0144, r22 ; 0x800144 <__TEXT_REGION_LENGTH__+0x700144> + fcc: 70 93 45 01 sts 0x0145, r23 ; 0x800145 <__TEXT_REGION_LENGTH__+0x700145> + + DMA.CH3.SRCADDR0 = (( (uint16_t) &dacBuf_CH2[0]) >> 0) & 0xFF; //Source address is dacbuf + fd0: 6b ea ldi r22, 0xAB ; 171 + fd2: 73 e2 ldi r23, 0x23 ; 35 + fd4: 60 93 48 01 sts 0x0148, r22 ; 0x800148 <__TEXT_REGION_LENGTH__+0x700148> + DMA.CH3.SRCADDR1 = (( (uint16_t) &dacBuf_CH2[0]) >> 8) & 0xFF; + fd8: 70 93 49 01 sts 0x0149, r23 ; 0x800149 <__TEXT_REGION_LENGTH__+0x700149> + DMA.CH3.SRCADDR2 = 0x00; + fdc: 10 92 4a 01 sts 0x014A, r1 ; 0x80014a <__TEXT_REGION_LENGTH__+0x70014a> + + DMA.CH3.DESTADDR0 = (( (uint16_t) &DACB.CH1DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + fe0: 2b e3 ldi r18, 0x3B ; 59 + fe2: 20 93 4c 01 sts 0x014C, r18 ; 0x80014c <__TEXT_REGION_LENGTH__+0x70014c> + DMA.CH3.DESTADDR1 = (( (uint16_t) &DACB.CH1DATAH) >> 8) & 0xFF; + fe6: 23 e0 ldi r18, 0x03 ; 3 + fe8: 20 93 4d 01 sts 0x014D, r18 ; 0x80014d <__TEXT_REGION_LENGTH__+0x70014d> + DMA.CH3.DESTADDR2 = 0x00; + fec: 10 92 4e 01 sts 0x014E, r1 ; 0x80014e <__TEXT_REGION_LENGTH__+0x70014e> + + //Must enable last for REPCNT won't work! + DMA.CH3.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + ff0: 20 81 ld r18, Z + ff2: 20 68 ori r18, 0x80 ; 128 + ff4: 20 83 st Z, r18 + + //Actual data being transferred + DMA.CH0.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; //Do not repeat! + ff6: 98 8b std Y+16, r25 ; 0x10 + DMA.CH0.CTRLB = 0x00; //No interrupt + ff8: 19 8a std Y+17, r1 ; 0x11 + DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_DESTRELOAD_BLOCK_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + ffa: 45 e9 ldi r20, 0x95 ; 149 + ffc: 4a 8b std Y+18, r20 ; 0x12 + DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_USARTC0_RXC_gc; + ffe: 3b 8b std Y+19, r19 ; 0x13 + DMA.CH0.TRFCNT = PACKET_SIZE; + 1000: 2e ee ldi r18, 0xEE ; 238 + 1002: 32 e0 ldi r19, 0x02 ; 2 + 1004: 2c 8b std Y+20, r18 ; 0x14 + 1006: 3d 8b std Y+21, r19 ; 0x15 + + DMA.CH0.SRCADDR0 = (( (uint16_t) &USARTC0.DATA) >> 0) & 0xFF; //Source address is ADC + 1008: 58 8f std Y+24, r21 ; 0x18 + DMA.CH0.SRCADDR1 = (( (uint16_t) &USARTC0.DATA) >> 8) & 0xFF; + 100a: 89 8f std Y+25, r24 ; 0x19 + DMA.CH0.SRCADDR2 = 0x00; + 100c: 1a 8e std Y+26, r1 ; 0x1a + + DMA.CH0.DESTADDR0 = (( (uint16_t) &isoBuf[0]) >> 0) & 0xFF; //Dest address is isoBuf + 100e: 6c ec ldi r22, 0xCC ; 204 + 1010: 75 e2 ldi r23, 0x25 ; 37 + 1012: 6c 8f std Y+28, r22 ; 0x1c + DMA.CH0.DESTADDR1 = (( (uint16_t) &isoBuf[0]) >> 8) & 0xFF; + 1014: 7d 8f std Y+29, r23 ; 0x1d + DMA.CH0.DESTADDR2 = 0x00; + 1016: 1e 8e std Y+30, r1 ; 0x1e + + + DMA.CH1.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; //Do not repeat! + 1018: 98 a3 std Y+32, r25 ; 0x20 + DMA.CH1.CTRLB = 0x00; //Hi interrupt on block complete + 101a: 19 a2 std Y+33, r1 ; 0x21 + DMA.CH1.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_DESTRELOAD_BLOCK_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + 101c: 4a a3 std Y+34, r20 ; 0x22 + DMA.CH1.TRIGSRC = DMA_CH_TRIGSRC_SPIC_gc; + 101e: 9a e4 ldi r25, 0x4A ; 74 + 1020: 9b a3 std Y+35, r25 ; 0x23 + DMA.CH1.TRFCNT = PACKET_SIZE; + 1022: 2c a3 std Y+36, r18 ; 0x24 + 1024: 3d a3 std Y+37, r19 ; 0x25 + + DMA.CH1.SRCADDR0 = (( (uint16_t) &SPIC.DATA) >> 0) & 0xFF; //Source address is ADC + 1026: 93 ec ldi r25, 0xC3 ; 195 + 1028: 98 a7 std Y+40, r25 ; 0x28 + DMA.CH1.SRCADDR1 = (( (uint16_t) &SPIC.DATA) >> 8) & 0xFF; + 102a: 89 a7 std Y+41, r24 ; 0x29 + DMA.CH1.SRCADDR2 = 0x00; + 102c: 1a a6 std Y+42, r1 ; 0x2a + + DMA.CH1.DESTADDR0 = (( (uint16_t) &isoBuf[PACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + 102e: 8a eb ldi r24, 0xBA ; 186 + 1030: 98 e2 ldi r25, 0x28 ; 40 + 1032: 8c a7 std Y+44, r24 ; 0x2c + DMA.CH1.DESTADDR1 = (( (uint16_t) &isoBuf[PACKET_SIZE]) >> 8) & 0xFF; + 1034: 9d a7 std Y+45, r25 ; 0x2d + DMA.CH1.DESTADDR2 = 0x00; + 1036: 1e a6 std Y+46, r1 ; 0x2e + + tiny_calibration_synchronise_phase(500, 200); + 1038: 68 ec ldi r22, 0xC8 ; 200 + 103a: 70 e0 ldi r23, 0x00 ; 0 + 103c: 84 ef ldi r24, 0xF4 ; 244 + 103e: 91 e0 ldi r25, 0x01 ; 1 + 1040: 53 db rcall .-2394 ; 0x6e8 + median_TRFCNT = 200; + 1042: 88 ec ldi r24, 0xC8 ; 200 + 1044: 90 e0 ldi r25, 0x00 ; 0 + 1046: 80 93 07 20 sts 0x2007, r24 ; 0x802007 + 104a: 90 93 08 20 sts 0x2008, r25 ; 0x802008 + median_TRFCNT_delay = 1; //Wait a few frames before actually setting median_TRFCNT, in case a SOF interrupt was queued during tiny_dma_set_mode_xxx. + 104e: 81 e0 ldi r24, 0x01 ; 1 + 1050: 80 93 06 20 sts 0x2006, r24 ; 0x802006 + DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + 1054: 88 89 ldd r24, Y+16 ; 0x10 + 1056: 80 68 ori r24, 0x80 ; 128 + 1058: 88 8b std Y+16, r24 ; 0x10 + DMA.CH1.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + 105a: 88 a1 ldd r24, Y+32 ; 0x20 + 105c: 80 68 ori r24, 0x80 ; 128 + 105e: 88 a3 std Y+32, r24 ; 0x20 + +} + 1060: df 91 pop r29 + 1062: cf 91 pop r28 + 1064: 1f 91 pop r17 + 1066: 08 95 ret + +00001068 : + +void tiny_dma_loop_mode_4(void){ + 1068: 08 95 ret + +0000106a : +return; +} + + +void tiny_dma_set_mode_5(void){ + while(1); //Deliberate Crash! Mode 5 should be invalid. + 106a: ff cf rjmp .-2 ; 0x106a + +0000106c : +} + +void tiny_dma_set_mode_6(void){ + 106c: cf 93 push r28 + 106e: df 93 push r29 + + global_mode = 6; + 1070: 86 e0 ldi r24, 0x06 ; 6 + 1072: 80 93 09 20 sts 0x2009, r24 ; 0x802009 + + tiny_dma_flush(); + 1076: 39 dd rcall .-1422 ; 0xaea + + DMA.CH2.REPCNT = 0; //Repeat forever! + 1078: c0 e0 ldi r28, 0x00 ; 0 + 107a: d1 e0 ldi r29, 0x01 ; 1 + 107c: 1e aa std Y+54, r1 ; 0x36 + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + 107e: 84 e2 ldi r24, 0x24 ; 36 + 1080: 88 ab std Y+48, r24 ; 0x30 + DMA.CH2.CTRLB = 0x00; //Hi interrupt on block complete + 1082: 19 aa std Y+49, r1 ; 0x31 + DMA.CH2.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + 1084: 39 e5 ldi r19, 0x59 ; 89 + 1086: 3a ab std Y+50, r19 ; 0x32 + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH2_gc; //Triggered from TCC0 when it hits PER + 1088: 93 e0 ldi r25, 0x03 ; 3 + 108a: 9b ab std Y+51, r25 ; 0x33 + DMA.CH2.TRFCNT = dacBuf_len; + 108c: 40 91 0d 20 lds r20, 0x200D ; 0x80200d + 1090: 50 91 0e 20 lds r21, 0x200E ; 0x80200e + 1094: 4c ab std Y+52, r20 ; 0x34 + 1096: 5d ab std Y+53, r21 ; 0x35 + + DMA.CH2.SRCADDR0 = (( (uint16_t) &dacBuf_CH1[0]) >> 0) & 0xFF; //Source address is dacbuf + 1098: 4a e9 ldi r20, 0x9A ; 154 + 109a: 51 e2 ldi r21, 0x21 ; 33 + 109c: 48 af std Y+56, r20 ; 0x38 + DMA.CH2.SRCADDR1 = (( (uint16_t) &dacBuf_CH1[0]) >> 8) & 0xFF; + 109e: 59 af std Y+57, r21 ; 0x39 + DMA.CH2.SRCADDR2 = 0x00; + 10a0: 1a ae std Y+58, r1 ; 0x3a + + DMA.CH2.DESTADDR0 = (( (uint16_t) &DACB.CH0DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + 10a2: 29 e3 ldi r18, 0x39 ; 57 + 10a4: 2c af std Y+60, r18 ; 0x3c + DMA.CH2.DESTADDR1 = (( (uint16_t) &DACB.CH0DATAH) >> 8) & 0xFF; + 10a6: 90 93 3d 01 sts 0x013D, r25 ; 0x80013d <__TEXT_REGION_LENGTH__+0x70013d> + DMA.CH2.DESTADDR2 = 0x00; + 10aa: 10 92 3e 01 sts 0x013E, r1 ; 0x80013e <__TEXT_REGION_LENGTH__+0x70013e> + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + 10ae: 28 a9 ldd r18, Y+48 ; 0x30 + 10b0: 20 68 ori r18, 0x80 ; 128 + 10b2: 28 ab std Y+48, r18 ; 0x30 + + DMA.CH3.REPCNT = 0; //Repeat forever! + 10b4: 10 92 46 01 sts 0x0146, r1 ; 0x800146 <__TEXT_REGION_LENGTH__+0x700146> + DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + 10b8: e0 e4 ldi r30, 0x40 ; 64 + 10ba: f1 e0 ldi r31, 0x01 ; 1 + 10bc: 80 83 st Z, r24 + DMA.CH3.CTRLB = 0x00; //No interrupt for DacBuf!! + 10be: 10 92 41 01 sts 0x0141, r1 ; 0x800141 <__TEXT_REGION_LENGTH__+0x700141> + DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + 10c2: 30 93 42 01 sts 0x0142, r19 ; 0x800142 <__TEXT_REGION_LENGTH__+0x700142> + DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER + 10c6: 32 e0 ldi r19, 0x02 ; 2 + 10c8: 30 93 43 01 sts 0x0143, r19 ; 0x800143 <__TEXT_REGION_LENGTH__+0x700143> + DMA.CH3.TRFCNT = auxDacBufLen; + 10cc: 40 91 0b 20 lds r20, 0x200B ; 0x80200b + 10d0: 50 91 0c 20 lds r21, 0x200C ; 0x80200c + 10d4: 40 93 44 01 sts 0x0144, r20 ; 0x800144 <__TEXT_REGION_LENGTH__+0x700144> + 10d8: 50 93 45 01 sts 0x0145, r21 ; 0x800145 <__TEXT_REGION_LENGTH__+0x700145> + + DMA.CH3.SRCADDR0 = (( (uint16_t) &dacBuf_CH2[0]) >> 0) & 0xFF; //Source address is dacbuf + 10dc: 4b ea ldi r20, 0xAB ; 171 + 10de: 53 e2 ldi r21, 0x23 ; 35 + 10e0: 40 93 48 01 sts 0x0148, r20 ; 0x800148 <__TEXT_REGION_LENGTH__+0x700148> + DMA.CH3.SRCADDR1 = (( (uint16_t) &dacBuf_CH2[0]) >> 8) & 0xFF; + 10e4: 50 93 49 01 sts 0x0149, r21 ; 0x800149 <__TEXT_REGION_LENGTH__+0x700149> + DMA.CH3.SRCADDR2 = 0x00; + 10e8: 10 92 4a 01 sts 0x014A, r1 ; 0x80014a <__TEXT_REGION_LENGTH__+0x70014a> + + DMA.CH3.DESTADDR0 = (( (uint16_t) &DACB.CH1DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + 10ec: 2b e3 ldi r18, 0x3B ; 59 + 10ee: 20 93 4c 01 sts 0x014C, r18 ; 0x80014c <__TEXT_REGION_LENGTH__+0x70014c> + DMA.CH3.DESTADDR1 = (( (uint16_t) &DACB.CH1DATAH) >> 8) & 0xFF; + 10f2: 90 93 4d 01 sts 0x014D, r25 ; 0x80014d <__TEXT_REGION_LENGTH__+0x70014d> + DMA.CH3.DESTADDR2 = 0x00; + 10f6: 10 92 4e 01 sts 0x014E, r1 ; 0x80014e <__TEXT_REGION_LENGTH__+0x70014e> + + //Must enable last for REPCNT won't work! + DMA.CH3.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + 10fa: 20 81 ld r18, Z + 10fc: 20 68 ori r18, 0x80 ; 128 + 10fe: 20 83 st Z, r18 + + DMA.CH0.CTRLA = 0x00; + 1100: 18 8a std Y+16, r1 ; 0x10 + DMA.CH0.CTRLA = DMA_CH_RESET_bm; + 1102: 20 e4 ldi r18, 0x40 ; 64 + 1104: 28 8b std Y+16, r18 ; 0x10 + + DMA.CH0.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + 1106: 88 8b std Y+16, r24 ; 0x10 + DMA.CH0.CTRLB = 0x03; //Hi interrupt! + 1108: 99 8b std Y+17, r25 ; 0x11 + DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_DESTRELOAD_BLOCK_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + 110a: 95 e9 ldi r25, 0x95 ; 149 + 110c: 9a 8b std Y+18, r25 ; 0x12 + DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_ADCA_CH0_gc; //Triggered from ADCA channel 0 + 110e: 90 e1 ldi r25, 0x10 ; 16 + 1110: 9b 8b std Y+19, r25 ; 0x13 + DMA.CH0.TRFCNT = BUFFER_SIZE; + 1112: 4c ed ldi r20, 0xDC ; 220 + 1114: 55 e0 ldi r21, 0x05 ; 5 + 1116: 4c 8b std Y+20, r20 ; 0x14 + 1118: 5d 8b std Y+21, r21 ; 0x15 + + DMA.CH0.SRCADDR0 = (( (uint16_t) &ADCA.CH0.RESL) >> 0) & 0xFF; //Source address is ADC + 111a: 88 8f std Y+24, r24 ; 0x18 + DMA.CH0.SRCADDR1 = (( (uint16_t) &ADCA.CH0.RESL) >> 8) & 0xFF; + 111c: 39 8f std Y+25, r19 ; 0x19 + DMA.CH0.SRCADDR2 = 0x00; + 111e: 1a 8e std Y+26, r1 ; 0x1a + + DMA.CH0.DESTADDR0 = (( (uint16_t) &isoBuf[0]) >> 0) & 0xFF; //Dest address is isoBuf + 1120: 8c ec ldi r24, 0xCC ; 204 + 1122: 95 e2 ldi r25, 0x25 ; 37 + 1124: 8c 8f std Y+28, r24 ; 0x1c + DMA.CH0.DESTADDR1 = (( (uint16_t) &isoBuf[0]) >> 8) & 0xFF; + 1126: 9d 8f std Y+29, r25 ; 0x1d + DMA.CH0.DESTADDR2 = 0x00; + 1128: 1e 8e std Y+30, r1 ; 0x1e + + tiny_calibration_synchronise_phase(500, 200); + 112a: 68 ec ldi r22, 0xC8 ; 200 + 112c: 70 e0 ldi r23, 0x00 ; 0 + 112e: 84 ef ldi r24, 0xF4 ; 244 + 1130: 91 e0 ldi r25, 0x01 ; 1 + 1132: da da rcall .-2636 ; 0x6e8 + median_TRFCNT = 400; + 1134: 80 e9 ldi r24, 0x90 ; 144 + 1136: 91 e0 ldi r25, 0x01 ; 1 + 1138: 80 93 07 20 sts 0x2007, r24 ; 0x802007 + 113c: 90 93 08 20 sts 0x2008, r25 ; 0x802008 + median_TRFCNT_delay = 1; //Wait a few frames before actually setting median_TRFCNT, in case a SOF interrupt was queued during tiny_dma_set_mode_xxx. + 1140: 81 e0 ldi r24, 0x01 ; 1 + 1142: 80 93 06 20 sts 0x2006, r24 ; 0x802006 + DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + 1146: 88 89 ldd r24, Y+16 ; 0x10 + 1148: 80 68 ori r24, 0x80 ; 128 + 114a: 88 8b std Y+16, r24 ; 0x10 + + +} + 114c: df 91 pop r29 + 114e: cf 91 pop r28 + 1150: 08 95 ret + +00001152 : + +void tiny_dma_loop_mode_6(void){ + 1152: 08 95 ret + +00001154 : + return; +} + +void tiny_dma_set_mode_7(void){ + 1154: cf 93 push r28 + 1156: df 93 push r29 + + global_mode = 7; + 1158: 87 e0 ldi r24, 0x07 ; 7 + 115a: 80 93 09 20 sts 0x2009, r24 ; 0x802009 + + tiny_dma_flush(); + 115e: c5 dc rcall .-1654 ; 0xaea + + DMA.CH2.REPCNT = 0; //Repeat forever! + 1160: c0 e0 ldi r28, 0x00 ; 0 + 1162: d1 e0 ldi r29, 0x01 ; 1 + 1164: 1e aa std Y+54, r1 ; 0x36 + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + 1166: 94 e2 ldi r25, 0x24 ; 36 + 1168: 98 ab std Y+48, r25 ; 0x30 + DMA.CH2.CTRLB = 0x00; //Hi interrupt on block complete + 116a: 19 aa std Y+49, r1 ; 0x31 + DMA.CH2.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + 116c: 39 e5 ldi r19, 0x59 ; 89 + 116e: 3a ab std Y+50, r19 ; 0x32 + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH2_gc; //Triggered from TCC0 when it hits PER + 1170: 83 e0 ldi r24, 0x03 ; 3 + 1172: 8b ab std Y+51, r24 ; 0x33 + DMA.CH2.TRFCNT = dacBuf_len; + 1174: 40 91 0d 20 lds r20, 0x200D ; 0x80200d + 1178: 50 91 0e 20 lds r21, 0x200E ; 0x80200e + 117c: 4c ab std Y+52, r20 ; 0x34 + 117e: 5d ab std Y+53, r21 ; 0x35 + + DMA.CH2.SRCADDR0 = (( (uint16_t) &dacBuf_CH1[0]) >> 0) & 0xFF; //Source address is dacbuf + 1180: 4a e9 ldi r20, 0x9A ; 154 + 1182: 51 e2 ldi r21, 0x21 ; 33 + 1184: 48 af std Y+56, r20 ; 0x38 + DMA.CH2.SRCADDR1 = (( (uint16_t) &dacBuf_CH1[0]) >> 8) & 0xFF; + 1186: 59 af std Y+57, r21 ; 0x39 + DMA.CH2.SRCADDR2 = 0x00; + 1188: 1a ae std Y+58, r1 ; 0x3a + + DMA.CH2.DESTADDR0 = (( (uint16_t) &DACB.CH0DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + 118a: 29 e3 ldi r18, 0x39 ; 57 + 118c: 2c af std Y+60, r18 ; 0x3c + DMA.CH2.DESTADDR1 = (( (uint16_t) &DACB.CH0DATAH) >> 8) & 0xFF; + 118e: 80 93 3d 01 sts 0x013D, r24 ; 0x80013d <__TEXT_REGION_LENGTH__+0x70013d> + DMA.CH2.DESTADDR2 = 0x00; + 1192: 10 92 3e 01 sts 0x013E, r1 ; 0x80013e <__TEXT_REGION_LENGTH__+0x70013e> + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + 1196: 28 a9 ldd r18, Y+48 ; 0x30 + 1198: 20 68 ori r18, 0x80 ; 128 + 119a: 28 ab std Y+48, r18 ; 0x30 + + DMA.CH3.REPCNT = 0; //Repeat forever! + 119c: 10 92 46 01 sts 0x0146, r1 ; 0x800146 <__TEXT_REGION_LENGTH__+0x700146> + DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + 11a0: e0 e4 ldi r30, 0x40 ; 64 + 11a2: f1 e0 ldi r31, 0x01 ; 1 + 11a4: 90 83 st Z, r25 + DMA.CH3.CTRLB = 0x00; //No interrupt for DacBuf!! + 11a6: 10 92 41 01 sts 0x0141, r1 ; 0x800141 <__TEXT_REGION_LENGTH__+0x700141> + DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + 11aa: 30 93 42 01 sts 0x0142, r19 ; 0x800142 <__TEXT_REGION_LENGTH__+0x700142> + DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER + 11ae: 32 e0 ldi r19, 0x02 ; 2 + 11b0: 30 93 43 01 sts 0x0143, r19 ; 0x800143 <__TEXT_REGION_LENGTH__+0x700143> + DMA.CH3.TRFCNT = auxDacBufLen; + 11b4: 40 91 0b 20 lds r20, 0x200B ; 0x80200b + 11b8: 50 91 0c 20 lds r21, 0x200C ; 0x80200c + 11bc: 40 93 44 01 sts 0x0144, r20 ; 0x800144 <__TEXT_REGION_LENGTH__+0x700144> + 11c0: 50 93 45 01 sts 0x0145, r21 ; 0x800145 <__TEXT_REGION_LENGTH__+0x700145> + + DMA.CH3.SRCADDR0 = (( (uint16_t) &dacBuf_CH2[0]) >> 0) & 0xFF; //Source address is dacbuf + 11c4: 4b ea ldi r20, 0xAB ; 171 + 11c6: 53 e2 ldi r21, 0x23 ; 35 + 11c8: 40 93 48 01 sts 0x0148, r20 ; 0x800148 <__TEXT_REGION_LENGTH__+0x700148> + DMA.CH3.SRCADDR1 = (( (uint16_t) &dacBuf_CH2[0]) >> 8) & 0xFF; + 11cc: 50 93 49 01 sts 0x0149, r21 ; 0x800149 <__TEXT_REGION_LENGTH__+0x700149> + DMA.CH3.SRCADDR2 = 0x00; + 11d0: 10 92 4a 01 sts 0x014A, r1 ; 0x80014a <__TEXT_REGION_LENGTH__+0x70014a> + + DMA.CH3.DESTADDR0 = (( (uint16_t) &DACB.CH1DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + 11d4: 2b e3 ldi r18, 0x3B ; 59 + 11d6: 20 93 4c 01 sts 0x014C, r18 ; 0x80014c <__TEXT_REGION_LENGTH__+0x70014c> + DMA.CH3.DESTADDR1 = (( (uint16_t) &DACB.CH1DATAH) >> 8) & 0xFF; + 11da: 80 93 4d 01 sts 0x014D, r24 ; 0x80014d <__TEXT_REGION_LENGTH__+0x70014d> + DMA.CH3.DESTADDR2 = 0x00; + 11de: 10 92 4e 01 sts 0x014E, r1 ; 0x80014e <__TEXT_REGION_LENGTH__+0x70014e> + + //Must enable last for REPCNT won't work! + DMA.CH3.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + 11e2: 20 81 ld r18, Z + 11e4: 20 68 ori r18, 0x80 ; 128 + 11e6: 20 83 st Z, r18 + + DMA.CH0.CTRLA = 0x00; + 11e8: 18 8a std Y+16, r1 ; 0x10 + DMA.CH0.CTRLA = DMA_CH_RESET_bm; + 11ea: 20 e4 ldi r18, 0x40 ; 64 + 11ec: 28 8b std Y+16, r18 ; 0x10 + + DMA.CH0.CTRLA = DMA_CH_BURSTLEN_2BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; //Do not repeat! + 11ee: 25 e2 ldi r18, 0x25 ; 37 + 11f0: 28 8b std Y+16, r18 ; 0x10 + DMA.CH0.CTRLB = 0x03; //No interrupt! + 11f2: 89 8b std Y+17, r24 ; 0x11 + DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_DESTRELOAD_BLOCK_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + 11f4: 85 e9 ldi r24, 0x95 ; 149 + 11f6: 8a 8b std Y+18, r24 ; 0x12 + DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_ADCA_CH0_gc; //Triggered from ADCA channel 0 + 11f8: 80 e1 ldi r24, 0x10 ; 16 + 11fa: 8b 8b std Y+19, r24 ; 0x13 + DMA.CH0.TRFCNT = BUFFER_SIZE; + 11fc: 4c ed ldi r20, 0xDC ; 220 + 11fe: 55 e0 ldi r21, 0x05 ; 5 + 1200: 4c 8b std Y+20, r20 ; 0x14 + 1202: 5d 8b std Y+21, r21 ; 0x15 + + DMA.CH0.SRCADDR0 = (( (uint16_t) &ADCA.CH0.RESL) >> 0) & 0xFF; //Source address is ADC + 1204: 98 8f std Y+24, r25 ; 0x18 + DMA.CH0.SRCADDR1 = (( (uint16_t) &ADCA.CH0.RESL) >> 8) & 0xFF; + 1206: 39 8f std Y+25, r19 ; 0x19 + DMA.CH0.SRCADDR2 = 0x00; + 1208: 1a 8e std Y+26, r1 ; 0x1a + + DMA.CH0.DESTADDR0 = (( (uint16_t) &isoBuf[0]) >> 0) & 0xFF; //Dest address is isoBuf + 120a: 8c ec ldi r24, 0xCC ; 204 + 120c: 95 e2 ldi r25, 0x25 ; 37 + 120e: 8c 8f std Y+28, r24 ; 0x1c + DMA.CH0.DESTADDR1 = (( (uint16_t) &isoBuf[0]) >> 8) & 0xFF; + 1210: 9d 8f std Y+29, r25 ; 0x1d + DMA.CH0.DESTADDR2 = 0x00; + 1212: 1e 8e std Y+30, r1 ; 0x1e + + tiny_calibration_synchronise_phase(500, 200); + 1214: 68 ec ldi r22, 0xC8 ; 200 + 1216: 70 e0 ldi r23, 0x00 ; 0 + 1218: 84 ef ldi r24, 0xF4 ; 244 + 121a: 91 e0 ldi r25, 0x01 ; 1 + 121c: 65 da rcall .-2870 ; 0x6e8 + median_TRFCNT = 400; + 121e: 80 e9 ldi r24, 0x90 ; 144 1220: 91 e0 ldi r25, 0x01 ; 1 - 1222: 5a da rcall .-2892 ; 0x6d8 - 1224: 80 e9 ldi r24, 0x90 ; 144 - 1226: 91 e0 ldi r25, 0x01 ; 1 - 1228: 80 93 07 20 sts 0x2007, r24 ; 0x802007 - 122c: 90 93 08 20 sts 0x2008, r25 ; 0x802008 - 1230: 81 e0 ldi r24, 0x01 ; 1 - 1232: 80 93 06 20 sts 0x2006, r24 ; 0x802006 - 1236: 88 89 ldd r24, Y+16 ; 0x10 - 1238: 80 68 ori r24, 0x80 ; 128 - 123a: 88 8b std Y+16, r24 ; 0x10 - 123c: df 91 pop r29 - 123e: cf 91 pop r28 - 1240: 08 95 ret + 1222: 80 93 07 20 sts 0x2007, r24 ; 0x802007 + 1226: 90 93 08 20 sts 0x2008, r25 ; 0x802008 + median_TRFCNT_delay = 1; //Wait a few frames before actually setting median_TRFCNT, in case a SOF interrupt was queued during tiny_dma_set_mode_xxx. + 122a: 81 e0 ldi r24, 0x01 ; 1 + 122c: 80 93 06 20 sts 0x2006, r24 ; 0x802006 + DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + 1230: 88 89 ldd r24, Y+16 ; 0x10 + 1232: 80 68 ori r24, 0x80 ; 128 + 1234: 88 8b std Y+16, r24 ; 0x10 + +} + 1236: df 91 pop r29 + 1238: cf 91 pop r28 + 123a: 08 95 ret -00001242 <__vector_6>: +0000123c : + +void tiny_dma_loop_mode_7(void){ + 123c: 08 95 ret + +0000123e <__vector_6>: } ISR(DMA_CH0_vect){ - 1242: 1f 92 push r1 + 123e: 1f 92 push r1 + 1240: 0f 92 push r0 + 1242: 0f b6 in r0, 0x3f ; 63 1244: 0f 92 push r0 - 1246: 0f b6 in r0, 0x3f ; 63 - 1248: 0f 92 push r0 - 124a: 11 24 eor r1, r1 - 124c: 8f 93 push r24 - 124e: 9f 93 push r25 + 1246: 11 24 eor r1, r1 + 1248: 8f 93 push r24 + 124a: 9f 93 push r25 + 124c: af 93 push r26 + 124e: bf 93 push r27 1250: ef 93 push r30 1252: ff 93 push r31 DMA.INTFLAGS = 0x01; - 1254: 81 e0 ldi r24, 0x01 ; 1 - 1256: 80 93 03 01 sts 0x0103, r24 ; 0x800103 <__TEXT_REGION_LENGTH__+0x700103> + 1254: e0 e0 ldi r30, 0x00 ; 0 + 1256: f1 e0 ldi r31, 0x01 ; 1 + 1258: 81 e0 ldi r24, 0x01 ; 1 + 125a: 83 83 std Z+3, r24 ; 0x03 dma_ch0_ran++; - 125a: 80 91 7c 21 lds r24, 0x217C ; 0x80217c - 125e: 90 91 7d 21 lds r25, 0x217D ; 0x80217d - 1262: 01 96 adiw r24, 0x01 ; 1 - 1264: 80 93 7c 21 sts 0x217C, r24 ; 0x80217c - 1268: 90 93 7d 21 sts 0x217D, r25 ; 0x80217d + 125c: 80 91 7c 21 lds r24, 0x217C ; 0x80217c + 1260: 90 91 7d 21 lds r25, 0x217D ; 0x80217d + 1264: 01 96 adiw r24, 0x01 ; 1 + 1266: 80 93 7c 21 sts 0x217C, r24 ; 0x80217c + 126a: 90 93 7d 21 sts 0x217D, r25 ; 0x80217d uds.dma_ch0_cntL = dma_ch0_ran & 0xff; - 126c: 80 91 7c 21 lds r24, 0x217C ; 0x80217c - 1270: 90 91 7d 21 lds r25, 0x217D ; 0x80217d - 1274: ee e7 ldi r30, 0x7E ; 126 - 1276: f1 e2 ldi r31, 0x21 ; 33 - 1278: 87 8b std Z+23, r24 ; 0x17 + 126e: 80 91 7c 21 lds r24, 0x217C ; 0x80217c + 1272: 90 91 7d 21 lds r25, 0x217D ; 0x80217d + 1276: ae e7 ldi r26, 0x7E ; 126 + 1278: b1 e2 ldi r27, 0x21 ; 33 + 127a: 57 96 adiw r26, 0x17 ; 23 + 127c: 8c 93 st X, r24 + 127e: 57 97 sbiw r26, 0x17 ; 23 uds.dma_ch0_cntH = (dma_ch0_ran >> 8) & 0xff; - 127a: 80 91 7c 21 lds r24, 0x217C ; 0x80217c - 127e: 90 91 7d 21 lds r25, 0x217D ; 0x80217d - 1282: 90 8f std Z+24, r25 ; 0x18 -} - 1284: ff 91 pop r31 - 1286: ef 91 pop r30 - 1288: 9f 91 pop r25 - 128a: 8f 91 pop r24 - 128c: 0f 90 pop r0 - 128e: 0f be out 0x3f, r0 ; 63 - 1290: 0f 90 pop r0 - 1292: 1f 90 pop r1 - 1294: 18 95 reti + 1280: 80 91 7c 21 lds r24, 0x217C ; 0x80217c + 1284: 90 91 7d 21 lds r25, 0x217D ; 0x80217d + 1288: 58 96 adiw r26, 0x18 ; 24 + 128a: 9c 93 st X, r25 + + DMA.CH0.CTRLA = 0x00; + 128c: 10 8a std Z+16, r1 ; 0x10 + DMA.CH0.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + 128e: 84 e0 ldi r24, 0x04 ; 4 + 1290: 80 8b std Z+16, r24 ; 0x10 + DMA.CH0.TRFCNT = HALFPACKET_SIZE; + 1292: 87 e7 ldi r24, 0x77 ; 119 + 1294: 91 e0 ldi r25, 0x01 ; 1 + 1296: 84 8b std Z+20, r24 ; 0x14 + 1298: 95 8b std Z+21, r25 ; 0x15 + + DMA.CH0.DESTADDR0 = (( (uint16_t) &isoBuf[!usb_state * PACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + 129a: 80 91 96 20 lds r24, 0x2096 ; 0x802096 + 129e: 88 23 and r24, r24 + 12a0: 19 f0 breq .+6 ; 0x12a8 <__vector_6+0x6a> + 12a2: 80 e0 ldi r24, 0x00 ; 0 + 12a4: 90 e0 ldi r25, 0x00 ; 0 + 12a6: 02 c0 rjmp .+4 ; 0x12ac <__vector_6+0x6e> + 12a8: 8e ee ldi r24, 0xEE ; 238 + 12aa: 92 e0 ldi r25, 0x02 ; 2 + 12ac: 84 53 subi r24, 0x34 ; 52 + 12ae: 9a 4d sbci r25, 0xDA ; 218 + 12b0: 80 93 1c 01 sts 0x011C, r24 ; 0x80011c <__TEXT_REGION_LENGTH__+0x70011c> + DMA.CH0.DESTADDR1 = (( (uint16_t) &isoBuf[!usb_state * PACKET_SIZE]) >> 8) & 0xFF; + 12b4: 80 91 96 20 lds r24, 0x2096 ; 0x802096 + 12b8: 88 23 and r24, r24 + 12ba: 19 f0 breq .+6 ; 0x12c2 <__vector_6+0x84> + 12bc: 80 e0 ldi r24, 0x00 ; 0 + 12be: 90 e0 ldi r25, 0x00 ; 0 + 12c0: 02 c0 rjmp .+4 ; 0x12c6 <__vector_6+0x88> + 12c2: 8e ee ldi r24, 0xEE ; 238 + 12c4: 92 e0 ldi r25, 0x02 ; 2 + 12c6: 84 53 subi r24, 0x34 ; 52 + 12c8: 9a 4d sbci r25, 0xDA ; 218 + 12ca: e0 e0 ldi r30, 0x00 ; 0 + 12cc: f1 e0 ldi r31, 0x01 ; 1 + 12ce: 95 8f std Z+29, r25 ; 0x1d -00001296 <__vector_7>: + DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm; + 12d0: 80 89 ldd r24, Z+16 ; 0x10 + 12d2: 80 68 ori r24, 0x80 ; 128 + 12d4: 80 8b std Z+16, r24 ; 0x10 +} + 12d6: ff 91 pop r31 + 12d8: ef 91 pop r30 + 12da: bf 91 pop r27 + 12dc: af 91 pop r26 + 12de: 9f 91 pop r25 + 12e0: 8f 91 pop r24 + 12e2: 0f 90 pop r0 + 12e4: 0f be out 0x3f, r0 ; 63 + 12e6: 0f 90 pop r0 + 12e8: 1f 90 pop r1 + 12ea: 18 95 reti + +000012ec <__vector_7>: ISR(DMA_CH1_vect){ - 1296: 1f 92 push r1 - 1298: 0f 92 push r0 - 129a: 0f b6 in r0, 0x3f ; 63 - 129c: 0f 92 push r0 - 129e: 11 24 eor r1, r1 - 12a0: 8f 93 push r24 - 12a2: 9f 93 push r25 - 12a4: ef 93 push r30 - 12a6: ff 93 push r31 + 12ec: 1f 92 push r1 + 12ee: 0f 92 push r0 + 12f0: 0f b6 in r0, 0x3f ; 63 + 12f2: 0f 92 push r0 + 12f4: 11 24 eor r1, r1 + 12f6: 8f 93 push r24 + 12f8: 9f 93 push r25 + 12fa: ef 93 push r30 + 12fc: ff 93 push r31 DMA.INTFLAGS = 0x02; - 12a8: 82 e0 ldi r24, 0x02 ; 2 - 12aa: 80 93 03 01 sts 0x0103, r24 ; 0x800103 <__TEXT_REGION_LENGTH__+0x700103> + 12fe: 82 e0 ldi r24, 0x02 ; 2 + 1300: 80 93 03 01 sts 0x0103, r24 ; 0x800103 <__TEXT_REGION_LENGTH__+0x700103> dma_ch1_ran++; - 12ae: 80 91 7a 21 lds r24, 0x217A ; 0x80217a - 12b2: 90 91 7b 21 lds r25, 0x217B ; 0x80217b - 12b6: 01 96 adiw r24, 0x01 ; 1 - 12b8: 80 93 7a 21 sts 0x217A, r24 ; 0x80217a - 12bc: 90 93 7b 21 sts 0x217B, r25 ; 0x80217b + 1304: 80 91 7a 21 lds r24, 0x217A ; 0x80217a + 1308: 90 91 7b 21 lds r25, 0x217B ; 0x80217b + 130c: 01 96 adiw r24, 0x01 ; 1 + 130e: 80 93 7a 21 sts 0x217A, r24 ; 0x80217a + 1312: 90 93 7b 21 sts 0x217B, r25 ; 0x80217b uds.dma_ch1_cntL = dma_ch1_ran & 0xff; - 12c0: 80 91 7a 21 lds r24, 0x217A ; 0x80217a - 12c4: 90 91 7b 21 lds r25, 0x217B ; 0x80217b - 12c8: ee e7 ldi r30, 0x7E ; 126 - 12ca: f1 e2 ldi r31, 0x21 ; 33 - 12cc: 81 8f std Z+25, r24 ; 0x19 + 1316: 80 91 7a 21 lds r24, 0x217A ; 0x80217a + 131a: 90 91 7b 21 lds r25, 0x217B ; 0x80217b + 131e: ee e7 ldi r30, 0x7E ; 126 + 1320: f1 e2 ldi r31, 0x21 ; 33 + 1322: 81 8f std Z+25, r24 ; 0x19 uds.dma_ch1_cntH = (dma_ch1_ran >> 8) & 0xff; - 12ce: 80 91 7a 21 lds r24, 0x217A ; 0x80217a - 12d2: 90 91 7b 21 lds r25, 0x217B ; 0x80217b - 12d6: 92 8f std Z+26, r25 ; 0x1a + 1324: 80 91 7a 21 lds r24, 0x217A ; 0x80217a + 1328: 90 91 7b 21 lds r25, 0x217B ; 0x80217b + 132c: 92 8f std Z+26, r25 ; 0x1a } - 12d8: ff 91 pop r31 - 12da: ef 91 pop r30 - 12dc: 9f 91 pop r25 - 12de: 8f 91 pop r24 - 12e0: 0f 90 pop r0 - 12e2: 0f be out 0x3f, r0 ; 63 - 12e4: 0f 90 pop r0 - 12e6: 1f 90 pop r1 - 12e8: 18 95 reti + 132e: ff 91 pop r31 + 1330: ef 91 pop r30 + 1332: 9f 91 pop r25 + 1334: 8f 91 pop r24 + 1336: 0f 90 pop r0 + 1338: 0f be out 0x3f, r0 ; 63 + 133a: 0f 90 pop r0 + 133c: 1f 90 pop r1 + 133e: 18 95 reti -000012ea : +00001340 : #define PSU_PER 2048 #define jump 6 void tiny_timer_setup(void){ //Turn everything on! PR.PRPC &= 0b11111100; //Enable TCC0, TCC1 - 12ea: e0 e7 ldi r30, 0x70 ; 112 - 12ec: f0 e0 ldi r31, 0x00 ; 0 - 12ee: 83 81 ldd r24, Z+3 ; 0x03 - 12f0: 8c 7f andi r24, 0xFC ; 252 - 12f2: 83 83 std Z+3, r24 ; 0x03 + 1340: e0 e7 ldi r30, 0x70 ; 112 + 1342: f0 e0 ldi r31, 0x00 ; 0 + 1344: 83 81 ldd r24, Z+3 ; 0x03 + 1346: 8c 7f andi r24, 0xFC ; 252 + 1348: 83 83 std Z+3, r24 ; 0x03 PR.PRPD &= 0b11111100; //Enable TCD0, TCD1 - 12f4: 84 81 ldd r24, Z+4 ; 0x04 - 12f6: 8c 7f andi r24, 0xFC ; 252 - 12f8: 84 83 std Z+4, r24 ; 0x04 + 134a: 84 81 ldd r24, Z+4 ; 0x04 + 134c: 8c 7f andi r24, 0xFC ; 252 + 134e: 84 83 std Z+4, r24 ; 0x04 PR.PRGEN &= 0b11111101; //Enable EVSYS - 12fa: 80 81 ld r24, Z - 12fc: 8d 7f andi r24, 0xFD ; 253 - 12fe: 80 83 st Z, r24 + 1350: 80 81 ld r24, Z + 1352: 8d 7f andi r24, 0xFD ; 253 + 1354: 80 83 st Z, r24 //Set up EVSYS EVSYS.CH2MUX = TCDAC_OVF; - 1300: e0 e8 ldi r30, 0x80 ; 128 - 1302: f1 e0 ldi r31, 0x01 ; 1 - 1304: 80 ec ldi r24, 0xC0 ; 192 - 1306: 82 83 std Z+2, r24 ; 0x02 + 1356: e0 e8 ldi r30, 0x80 ; 128 + 1358: f1 e0 ldi r31, 0x01 ; 1 + 135a: 80 ec ldi r24, 0xC0 ; 192 + 135c: 82 83 std Z+2, r24 ; 0x02 EVSYS.CH2CTRL = 0x00; //No filtering or Quadrature stuff - 1308: 12 86 std Z+10, r1 ; 0x0a + 135e: 12 86 std Z+10, r1 ; 0x0a EVSYS.CH1MUX = TCDAC_AUX_OVF; - 130a: 88 ec ldi r24, 0xC8 ; 200 - 130c: 81 83 std Z+1, r24 ; 0x01 + 1360: 88 ec ldi r24, 0xC8 ; 200 + 1362: 81 83 std Z+1, r24 ; 0x01 EVSYS.CH1CTRL = 0x00; //No filtering or Quadrature stuff - 130e: 11 86 std Z+9, r1 ; 0x09 + 1364: 11 86 std Z+9, r1 ; 0x09 //Waveform (50Hz sin wave) TC_DAC.CTRLA = 0x04; //Some clk setting - not 100% sure since it was SW generated - 1310: a0 e0 ldi r26, 0x00 ; 0 - 1312: b8 e0 ldi r27, 0x08 ; 8 - 1314: 34 e0 ldi r19, 0x04 ; 4 - 1316: 3c 93 st X, r19 + 1366: a0 e0 ldi r26, 0x00 ; 0 + 1368: b8 e0 ldi r27, 0x08 ; 8 + 136a: 34 e0 ldi r19, 0x04 ; 4 + 136c: 3c 93 st X, r19 TC_DAC.CTRLB = TC_WGMODE_SINGLESLOPE_gc; //No enable is set - 1318: 23 e0 ldi r18, 0x03 ; 3 - 131a: 11 96 adiw r26, 0x01 ; 1 - 131c: 2c 93 st X, r18 - 131e: 11 97 sbiw r26, 0x01 ; 1 + 136e: 23 e0 ldi r18, 0x03 ; 3 + 1370: 11 96 adiw r26, 0x01 ; 1 + 1372: 2c 93 st X, r18 + 1374: 11 97 sbiw r26, 0x01 ; 1 TC_DAC.CTRLE = TC_BYTEM_NORMAL_gc; - 1320: 14 96 adiw r26, 0x04 ; 4 - 1322: 1c 92 st X, r1 - 1324: 14 97 sbiw r26, 0x04 ; 4 + 1376: 14 96 adiw r26, 0x04 ; 4 + 1378: 1c 92 st X, r1 + 137a: 14 97 sbiw r26, 0x04 ; 4 TC_DAC.PER = 469; - 1326: 85 ed ldi r24, 0xD5 ; 213 - 1328: 91 e0 ldi r25, 0x01 ; 1 - 132a: 96 96 adiw r26, 0x26 ; 38 - 132c: 8d 93 st X+, r24 - 132e: 9c 93 st X, r25 - 1330: 97 97 sbiw r26, 0x27 ; 39 + 137c: 85 ed ldi r24, 0xD5 ; 213 + 137e: 91 e0 ldi r25, 0x01 ; 1 + 1380: 96 96 adiw r26, 0x26 ; 38 + 1382: 8d 93 st X+, r24 + 1384: 9c 93 st X, r25 + 1386: 97 97 sbiw r26, 0x27 ; 39 TC_DAC.INTCTRLA = 0x00; - 1332: 16 96 adiw r26, 0x06 ; 6 - 1334: 1c 92 st X, r1 - 1336: 16 97 sbiw r26, 0x06 ; 6 + 1388: 16 96 adiw r26, 0x06 ; 6 + 138a: 1c 92 st X, r1 + 138c: 16 97 sbiw r26, 0x06 ; 6 //Aux channel (blank 50Hz) TC_AUXDAC.CTRLA = 0x04; //Some clk setting - not 100% sure since it was SW generated - 1338: e0 e4 ldi r30, 0x40 ; 64 - 133a: f8 e0 ldi r31, 0x08 ; 8 - 133c: 30 83 st Z, r19 + 138e: e0 e4 ldi r30, 0x40 ; 64 + 1390: f8 e0 ldi r31, 0x08 ; 8 + 1392: 30 83 st Z, r19 TC_AUXDAC.CTRLB = TC_WGMODE_SINGLESLOPE_gc; //No enable is set - 133e: 21 83 std Z+1, r18 ; 0x01 + 1394: 21 83 std Z+1, r18 ; 0x01 TC_AUXDAC.CTRLE = TC_BYTEM_NORMAL_gc; - 1340: 14 82 std Z+4, r1 ; 0x04 + 1396: 14 82 std Z+4, r1 ; 0x04 TC_AUXDAC.PER = 469; - 1342: 86 a3 std Z+38, r24 ; 0x26 - 1344: 97 a3 std Z+39, r25 ; 0x27 + 1398: 86 a3 std Z+38, r24 ; 0x26 + 139a: 97 a3 std Z+39, r25 ; 0x27 TC_AUXDAC.INTCTRLA = 0x00; - 1346: 16 82 std Z+6, r1 ; 0x06 + 139c: 16 82 std Z+6, r1 ; 0x06 //PSU PORTD.DIR |= 0b00010000; - 1348: e0 e6 ldi r30, 0x60 ; 96 - 134a: f6 e0 ldi r31, 0x06 ; 6 - 134c: 80 81 ld r24, Z - 134e: 80 61 ori r24, 0x10 ; 16 - 1350: 80 83 st Z, r24 + 139e: e0 e6 ldi r30, 0x60 ; 96 + 13a0: f6 e0 ldi r31, 0x06 ; 6 + 13a2: 80 81 ld r24, Z + 13a4: 80 61 ori r24, 0x10 ; 16 + 13a6: 80 83 st Z, r24 TC_PSU.CTRLB = 0x10 | TC_WGMODE_SINGLESLOPE_gc; //CCAEN is set - 1352: e0 e4 ldi r30, 0x40 ; 64 - 1354: f9 e0 ldi r31, 0x09 ; 9 - 1356: 83 e1 ldi r24, 0x13 ; 19 - 1358: 81 83 std Z+1, r24 ; 0x01 + 13a8: e0 e4 ldi r30, 0x40 ; 64 + 13aa: f9 e0 ldi r31, 0x09 ; 9 + 13ac: 83 e1 ldi r24, 0x13 ; 19 + 13ae: 81 83 std Z+1, r24 ; 0x01 TC_PSU.CTRLE = TC_BYTEM_NORMAL_gc; - 135a: 14 82 std Z+4, r1 ; 0x04 + 13b0: 14 82 std Z+4, r1 ; 0x04 TC_PSU.INTCTRLA = TC_OVFINTLVL_MED_gc; - 135c: 82 e0 ldi r24, 0x02 ; 2 - 135e: 86 83 std Z+6, r24 ; 0x06 + 13b2: 82 e0 ldi r24, 0x02 ; 2 + 13b4: 86 83 std Z+6, r24 ; 0x06 TC_PSU.PER = PSU_PER; // Max value of CNT - 1360: a6 a3 std Z+38, r26 ; 0x26 - 1362: b7 a3 std Z+39, r27 ; 0x27 + 13b6: a6 a3 std Z+38, r26 ; 0x26 + 13b8: b7 a3 std Z+39, r27 ; 0x27 TC_PSU.CCA = 0; //Initial Duty cycle of 0% - 1364: 10 a6 std Z+40, r1 ; 0x28 - 1366: 11 a6 std Z+41, r1 ; 0x29 + 13ba: 10 a6 std Z+40, r1 ; 0x28 + 13bc: 11 a6 std Z+41, r1 ; 0x29 TC_PSU.CTRLA = TC_CLKSEL_DIV1_gc; - 1368: 81 e0 ldi r24, 0x01 ; 1 - 136a: 80 83 st Z, r24 - 136c: 08 95 ret + 13be: 81 e0 ldi r24, 0x01 ; 1 + 13c0: 80 83 st Z, r24 + 13c2: 08 95 ret -0000136e <__vector_83>: +000013c4 <__vector_83>: TCC1.PER = 1800; // Max value of CNT TCC1.CTRLA = TC_CLKSEL_DIV1_gc; */ } ISR(TC_PSU_OVF){ - 136e: 1f 92 push r1 - 1370: 0f 92 push r0 - 1372: 0f b6 in r0, 0x3f ; 63 - 1374: 0f 92 push r0 - 1376: 11 24 eor r1, r1 - 1378: 2f 93 push r18 - 137a: 3f 93 push r19 - 137c: 4f 93 push r20 - 137e: 5f 93 push r21 - 1380: 8f 93 push r24 - 1382: 9f 93 push r25 - 1384: ef 93 push r30 - 1386: ff 93 push r31 - 1388: cf 93 push r28 - 138a: df 93 push r29 - 138c: 1f 92 push r1 - 138e: cd b7 in r28, 0x3d ; 61 - 1390: de b7 in r29, 0x3e ; 62 + 13c4: 1f 92 push r1 + 13c6: 0f 92 push r0 + 13c8: 0f b6 in r0, 0x3f ; 63 + 13ca: 0f 92 push r0 + 13cc: 11 24 eor r1, r1 + 13ce: 2f 93 push r18 + 13d0: 3f 93 push r19 + 13d2: 4f 93 push r20 + 13d4: 5f 93 push r21 + 13d6: 8f 93 push r24 + 13d8: 9f 93 push r25 + 13da: ef 93 push r30 + 13dc: ff 93 push r31 + 13de: cf 93 push r28 + 13e0: df 93 push r29 + 13e2: 1f 92 push r1 + 13e4: cd b7 in r28, 0x3d ; 61 + 13e6: de b7 in r29, 0x3e ; 62 char tempvar; char err; volatile char nothing; TC_PSU.INTFLAGS = 0xff; - 1392: 8f ef ldi r24, 0xFF ; 255 - 1394: 80 93 4c 09 sts 0x094C, r24 ; 0x80094c <__TEXT_REGION_LENGTH__+0x70094c> + 13e8: 8f ef ldi r24, 0xFF ; 255 + 13ea: 80 93 4c 09 sts 0x094C, r24 ; 0x80094c <__TEXT_REGION_LENGTH__+0x70094c> if (global_mode == 7){ - 1398: 80 91 09 20 lds r24, 0x2009 ; 0x802009 - 139c: 87 30 cpi r24, 0x07 ; 7 - 139e: 31 f4 brne .+12 ; 0x13ac <__vector_83+0x3e> + 13ee: 80 91 09 20 lds r24, 0x2009 ; 0x802009 + 13f2: 87 30 cpi r24, 0x07 ; 7 + 13f4: 31 f4 brne .+12 ; 0x1402 <__vector_83+0x3e> nothing = ADCA.CH1.RESL; - 13a0: e0 e0 ldi r30, 0x00 ; 0 - 13a2: f2 e0 ldi r31, 0x02 ; 2 - 13a4: 84 a5 ldd r24, Z+44 ; 0x2c - 13a6: 89 83 std Y+1, r24 ; 0x01 + 13f6: e0 e0 ldi r30, 0x00 ; 0 + 13f8: f2 e0 ldi r31, 0x02 ; 2 + 13fa: 84 a5 ldd r24, Z+44 ; 0x2c + 13fc: 89 83 std Y+1, r24 ; 0x01 tempvar = ADCA.CH1.RESH; - 13a8: 95 a5 ldd r25, Z+45 ; 0x2d - 13aa: 02 c0 rjmp .+4 ; 0x13b0 <__vector_83+0x42> + 13fe: 95 a5 ldd r25, Z+45 ; 0x2d + 1400: 02 c0 rjmp .+4 ; 0x1406 <__vector_83+0x42> } else{ tempvar = ADCA.CH1.RESL; - 13ac: 90 91 2c 02 lds r25, 0x022C ; 0x80022c <__TEXT_REGION_LENGTH__+0x70022c> + 1402: 90 91 2c 02 lds r25, 0x022C ; 0x80022c <__TEXT_REGION_LENGTH__+0x70022c> } //tempvar = (global_mode == 7 ? (char) ADCA.CH1.RESH : (char) ADCA.CH1.RESL); //test_byte = tempvar; err = (char) (PSU_target - tempvar); - 13b0: 80 91 95 20 lds r24, 0x2095 ; 0x802095 - 13b4: 89 1b sub r24, r25 + 1406: 80 91 95 20 lds r24, 0x2095 ; 0x802095 + 140a: 89 1b sub r24, r25 if ((err > 1) & ((unsigned short) TC_PSU.CCA < PSU_PER - jump) ){ - 13b6: 20 91 68 09 lds r18, 0x0968 ; 0x800968 <__TEXT_REGION_LENGTH__+0x700968> - 13ba: 30 91 69 09 lds r19, 0x0969 ; 0x800969 <__TEXT_REGION_LENGTH__+0x700969> - 13be: 91 e0 ldi r25, 0x01 ; 1 - 13c0: 82 30 cpi r24, 0x02 ; 2 - 13c2: 0c f4 brge .+2 ; 0x13c6 <__vector_83+0x58> - 13c4: 90 e0 ldi r25, 0x00 ; 0 - 13c6: 99 23 and r25, r25 - 13c8: c9 f0 breq .+50 ; 0x13fc <__vector_83+0x8e> - 13ca: 91 e0 ldi r25, 0x01 ; 1 - 13cc: 2a 3f cpi r18, 0xFA ; 250 - 13ce: 37 40 sbci r19, 0x07 ; 7 - 13d0: 08 f0 brcs .+2 ; 0x13d4 <__vector_83+0x66> - 13d2: 90 e0 ldi r25, 0x00 ; 0 - 13d4: 99 23 and r25, r25 - 13d6: 91 f0 breq .+36 ; 0x13fc <__vector_83+0x8e> + 140c: 20 91 68 09 lds r18, 0x0968 ; 0x800968 <__TEXT_REGION_LENGTH__+0x700968> + 1410: 30 91 69 09 lds r19, 0x0969 ; 0x800969 <__TEXT_REGION_LENGTH__+0x700969> + 1414: 91 e0 ldi r25, 0x01 ; 1 + 1416: 82 30 cpi r24, 0x02 ; 2 + 1418: 0c f4 brge .+2 ; 0x141c <__vector_83+0x58> + 141a: 90 e0 ldi r25, 0x00 ; 0 + 141c: 99 23 and r25, r25 + 141e: c9 f0 breq .+50 ; 0x1452 <__vector_83+0x8e> + 1420: 91 e0 ldi r25, 0x01 ; 1 + 1422: 2a 3f cpi r18, 0xFA ; 250 + 1424: 37 40 sbci r19, 0x07 ; 7 + 1426: 08 f0 brcs .+2 ; 0x142a <__vector_83+0x66> + 1428: 90 e0 ldi r25, 0x00 ; 0 + 142a: 99 23 and r25, r25 + 142c: 91 f0 breq .+36 ; 0x1452 <__vector_83+0x8e> TC_PSU.CCABUF = TC_PSU.CCA + ((err > 8) ? jump : 1); - 13d8: 20 91 68 09 lds r18, 0x0968 ; 0x800968 <__TEXT_REGION_LENGTH__+0x700968> - 13dc: 30 91 69 09 lds r19, 0x0969 ; 0x800969 <__TEXT_REGION_LENGTH__+0x700969> - 13e0: 89 30 cpi r24, 0x09 ; 9 - 13e2: 1c f4 brge .+6 ; 0x13ea <__vector_83+0x7c> - 13e4: 81 e0 ldi r24, 0x01 ; 1 - 13e6: 90 e0 ldi r25, 0x00 ; 0 - 13e8: 02 c0 rjmp .+4 ; 0x13ee <__vector_83+0x80> - 13ea: 86 e0 ldi r24, 0x06 ; 6 - 13ec: 90 e0 ldi r25, 0x00 ; 0 - 13ee: 82 0f add r24, r18 - 13f0: 93 1f adc r25, r19 - 13f2: 80 93 78 09 sts 0x0978, r24 ; 0x800978 <__TEXT_REGION_LENGTH__+0x700978> - 13f6: 90 93 79 09 sts 0x0979, r25 ; 0x800979 <__TEXT_REGION_LENGTH__+0x700979> - 13fa: 23 c0 rjmp .+70 ; 0x1442 <__vector_83+0xd4> + 142e: 20 91 68 09 lds r18, 0x0968 ; 0x800968 <__TEXT_REGION_LENGTH__+0x700968> + 1432: 30 91 69 09 lds r19, 0x0969 ; 0x800969 <__TEXT_REGION_LENGTH__+0x700969> + 1436: 89 30 cpi r24, 0x09 ; 9 + 1438: 1c f4 brge .+6 ; 0x1440 <__vector_83+0x7c> + 143a: 81 e0 ldi r24, 0x01 ; 1 + 143c: 90 e0 ldi r25, 0x00 ; 0 + 143e: 02 c0 rjmp .+4 ; 0x1444 <__vector_83+0x80> + 1440: 86 e0 ldi r24, 0x06 ; 6 + 1442: 90 e0 ldi r25, 0x00 ; 0 + 1444: 82 0f add r24, r18 + 1446: 93 1f adc r25, r19 + 1448: 80 93 78 09 sts 0x0978, r24 ; 0x800978 <__TEXT_REGION_LENGTH__+0x700978> + 144c: 90 93 79 09 sts 0x0979, r25 ; 0x800979 <__TEXT_REGION_LENGTH__+0x700979> + 1450: 23 c0 rjmp .+70 ; 0x1498 <__vector_83+0xd4> } else if ((err < -1) & ((unsigned short) TC_PSU.CCA > jump)){ - 13fc: 20 91 68 09 lds r18, 0x0968 ; 0x800968 <__TEXT_REGION_LENGTH__+0x700968> - 1400: 30 91 69 09 lds r19, 0x0969 ; 0x800969 <__TEXT_REGION_LENGTH__+0x700969> - 1404: 91 e0 ldi r25, 0x01 ; 1 - 1406: 8f 3f cpi r24, 0xFF ; 255 - 1408: 0c f0 brlt .+2 ; 0x140c <__vector_83+0x9e> - 140a: 90 e0 ldi r25, 0x00 ; 0 - 140c: 99 23 and r25, r25 - 140e: c9 f0 breq .+50 ; 0x1442 <__vector_83+0xd4> - 1410: 91 e0 ldi r25, 0x01 ; 1 - 1412: 27 30 cpi r18, 0x07 ; 7 - 1414: 31 05 cpc r19, r1 - 1416: 08 f4 brcc .+2 ; 0x141a <__vector_83+0xac> - 1418: 90 e0 ldi r25, 0x00 ; 0 - 141a: 99 23 and r25, r25 - 141c: 91 f0 breq .+36 ; 0x1442 <__vector_83+0xd4> + 1452: 20 91 68 09 lds r18, 0x0968 ; 0x800968 <__TEXT_REGION_LENGTH__+0x700968> + 1456: 30 91 69 09 lds r19, 0x0969 ; 0x800969 <__TEXT_REGION_LENGTH__+0x700969> + 145a: 91 e0 ldi r25, 0x01 ; 1 + 145c: 8f 3f cpi r24, 0xFF ; 255 + 145e: 0c f0 brlt .+2 ; 0x1462 <__vector_83+0x9e> + 1460: 90 e0 ldi r25, 0x00 ; 0 + 1462: 99 23 and r25, r25 + 1464: c9 f0 breq .+50 ; 0x1498 <__vector_83+0xd4> + 1466: 91 e0 ldi r25, 0x01 ; 1 + 1468: 27 30 cpi r18, 0x07 ; 7 + 146a: 31 05 cpc r19, r1 + 146c: 08 f4 brcc .+2 ; 0x1470 <__vector_83+0xac> + 146e: 90 e0 ldi r25, 0x00 ; 0 + 1470: 99 23 and r25, r25 + 1472: 91 f0 breq .+36 ; 0x1498 <__vector_83+0xd4> TC_PSU.CCABUF = TC_PSU.CCA - ((err < -8) ? jump : 1); - 141e: 20 91 68 09 lds r18, 0x0968 ; 0x800968 <__TEXT_REGION_LENGTH__+0x700968> - 1422: 30 91 69 09 lds r19, 0x0969 ; 0x800969 <__TEXT_REGION_LENGTH__+0x700969> - 1426: 88 3f cpi r24, 0xF8 ; 248 - 1428: 1c f0 brlt .+6 ; 0x1430 <__vector_83+0xc2> - 142a: 81 e0 ldi r24, 0x01 ; 1 - 142c: 90 e0 ldi r25, 0x00 ; 0 - 142e: 02 c0 rjmp .+4 ; 0x1434 <__vector_83+0xc6> - 1430: 86 e0 ldi r24, 0x06 ; 6 - 1432: 90 e0 ldi r25, 0x00 ; 0 - 1434: a9 01 movw r20, r18 - 1436: 48 1b sub r20, r24 - 1438: 59 0b sbc r21, r25 - 143a: 40 93 78 09 sts 0x0978, r20 ; 0x800978 <__TEXT_REGION_LENGTH__+0x700978> - 143e: 50 93 79 09 sts 0x0979, r21 ; 0x800979 <__TEXT_REGION_LENGTH__+0x700979> + 1474: 20 91 68 09 lds r18, 0x0968 ; 0x800968 <__TEXT_REGION_LENGTH__+0x700968> + 1478: 30 91 69 09 lds r19, 0x0969 ; 0x800969 <__TEXT_REGION_LENGTH__+0x700969> + 147c: 88 3f cpi r24, 0xF8 ; 248 + 147e: 1c f0 brlt .+6 ; 0x1486 <__vector_83+0xc2> + 1480: 81 e0 ldi r24, 0x01 ; 1 + 1482: 90 e0 ldi r25, 0x00 ; 0 + 1484: 02 c0 rjmp .+4 ; 0x148a <__vector_83+0xc6> + 1486: 86 e0 ldi r24, 0x06 ; 6 + 1488: 90 e0 ldi r25, 0x00 ; 0 + 148a: a9 01 movw r20, r18 + 148c: 48 1b sub r20, r24 + 148e: 59 0b sbc r21, r25 + 1490: 40 93 78 09 sts 0x0978, r20 ; 0x800978 <__TEXT_REGION_LENGTH__+0x700978> + 1494: 50 93 79 09 sts 0x0979, r21 ; 0x800979 <__TEXT_REGION_LENGTH__+0x700979> } - 1442: 0f 90 pop r0 - 1444: df 91 pop r29 - 1446: cf 91 pop r28 - 1448: ff 91 pop r31 - 144a: ef 91 pop r30 - 144c: 9f 91 pop r25 - 144e: 8f 91 pop r24 - 1450: 5f 91 pop r21 - 1452: 4f 91 pop r20 - 1454: 3f 91 pop r19 - 1456: 2f 91 pop r18 - 1458: 0f 90 pop r0 - 145a: 0f be out 0x3f, r0 ; 63 - 145c: 0f 90 pop r0 - 145e: 1f 90 pop r1 - 1460: 18 95 reti + 1498: 0f 90 pop r0 + 149a: df 91 pop r29 + 149c: cf 91 pop r28 + 149e: ff 91 pop r31 + 14a0: ef 91 pop r30 + 14a2: 9f 91 pop r25 + 14a4: 8f 91 pop r24 + 14a6: 5f 91 pop r21 + 14a8: 4f 91 pop r20 + 14aa: 3f 91 pop r19 + 14ac: 2f 91 pop r18 + 14ae: 0f 90 pop r0 + 14b0: 0f be out 0x3f, r0 ; 63 + 14b2: 0f 90 pop r0 + 14b4: 1f 90 pop r1 + 14b6: 18 95 reti -00001462 : +000014b8 : #include "tiny_uart.h" #include "globals.h" void tiny_uart_setup(void){ PR.PRPC &= 0b11101111; - 1462: e0 e7 ldi r30, 0x70 ; 112 - 1464: f0 e0 ldi r31, 0x00 ; 0 - 1466: 83 81 ldd r24, Z+3 ; 0x03 - 1468: 8f 7e andi r24, 0xEF ; 239 - 146a: 83 83 std Z+3, r24 ; 0x03 + 14b8: e0 e7 ldi r30, 0x70 ; 112 + 14ba: f0 e0 ldi r31, 0x00 ; 0 + 14bc: 83 81 ldd r24, Z+3 ; 0x03 + 14be: 8f 7e andi r24, 0xEF ; 239 + 14c0: 83 83 std Z+3, r24 ; 0x03 //PR.PRPE &= 0b11111110; ??? PORTC.DIR |= 0b10101010; - 146c: e0 e4 ldi r30, 0x40 ; 64 - 146e: f6 e0 ldi r31, 0x06 ; 6 - 1470: 80 81 ld r24, Z - 1472: 8a 6a ori r24, 0xAA ; 170 - 1474: 80 83 st Z, r24 + 14c2: e0 e4 ldi r30, 0x40 ; 64 + 14c4: f6 e0 ldi r31, 0x06 ; 6 + 14c6: 80 81 ld r24, Z + 14c8: 8a 6a ori r24, 0xAA ; 170 + 14ca: 80 83 st Z, r24 PORTC.OUT = 0xff; - 1476: 8f ef ldi r24, 0xFF ; 255 - 1478: 84 83 std Z+4, r24 ; 0x04 + 14cc: 8f ef ldi r24, 0xFF ; 255 + 14ce: 84 83 std Z+4, r24 ; 0x04 PORTC.PIN2CTRL = PORT_INVEN_bm | PORT_OPC_PULLUP_gc; - 147a: 88 e5 ldi r24, 0x58 ; 88 - 147c: 82 8b std Z+18, r24 ; 0x12 + 14d0: 88 e5 ldi r24, 0x58 ; 88 + 14d2: 82 8b std Z+18, r24 ; 0x12 //PORTC.REMAP = 0x10; //Remap USART to [7:4] //#ifndef VERO // PORTC.REMAP = 0x20; //Swap MOSI and SCK - for small boards only!!! //#endif USARTC0.CTRLA = USART_RXCINTLVL_HI_gc; - 147e: e0 ea ldi r30, 0xA0 ; 160 - 1480: f8 e0 ldi r31, 0x08 ; 8 - 1482: 80 e3 ldi r24, 0x30 ; 48 - 1484: 83 83 std Z+3, r24 ; 0x03 + 14d4: e0 ea ldi r30, 0xA0 ; 160 + 14d6: f8 e0 ldi r31, 0x08 ; 8 + 14d8: 80 e3 ldi r24, 0x30 ; 48 + 14da: 83 83 std Z+3, r24 ; 0x03 USARTC0.CTRLC = USART_CMODE_MSPI_gc | 0b00000100; //LSB received first, UPCHA disabled - 1486: 84 ec ldi r24, 0xC4 ; 196 - 1488: 85 83 std Z+5, r24 ; 0x05 + 14dc: 84 ec ldi r24, 0xC4 ; 196 + 14de: 85 83 std Z+5, r24 ; 0x05 #if OVERCLOCK == 48 USARTC0.BAUDCTRLA = 7; //BSEL = fper/(2fbaud) -1; 48/(2*3) - 1 = 7 - 148a: 87 e0 ldi r24, 0x07 ; 7 - 148c: 86 83 std Z+6, r24 ; 0x06 + 14e0: 87 e0 ldi r24, 0x07 ; 7 + 14e2: 86 83 std Z+6, r24 ; 0x06 #else USARTC0.BAUDCTRLA = 3; //BSEL = fper/(2fbaud) -1; 24/(2*3) - 1 = 3 #endif USARTC0.BAUDCTRLB = 0x00;// USART_BSCALE0_bm goes to 1.5MHz for some reason; - 148e: 17 82 std Z+7, r1 ; 0x07 + 14e4: 17 82 std Z+7, r1 ; 0x07 USARTC0.CTRLB = USART_RXEN_bm | USART_TXEN_bm; - 1490: 88 e1 ldi r24, 0x18 ; 24 - 1492: 84 83 std Z+4, r24 ; 0x04 - 1494: 08 95 ret + 14e6: 88 e1 ldi r24, 0x18 ; 24 + 14e8: 84 83 std Z+4, r24 ; 0x04 + 14ea: 08 95 ret -00001496 : +000014ec : } void tiny_spi_setup(void){ //Power Reduction disable PR.PRPC &= 0b11110111; - 1496: e0 e7 ldi r30, 0x70 ; 112 - 1498: f0 e0 ldi r31, 0x00 ; 0 - 149a: 83 81 ldd r24, Z+3 ; 0x03 - 149c: 87 7f andi r24, 0xF7 ; 247 - 149e: 83 83 std Z+3, r24 ; 0x03 + 14ec: e0 e7 ldi r30, 0x70 ; 112 + 14ee: f0 e0 ldi r31, 0x00 ; 0 + 14f0: 83 81 ldd r24, Z+3 ; 0x03 + 14f2: 87 7f andi r24, 0xF7 ; 247 + 14f4: 83 83 std Z+3, r24 ; 0x03 //SPI enable SPIC.CTRL = SPI_ENABLE_bm; //Slave mode - 14a0: e0 ec ldi r30, 0xC0 ; 192 - 14a2: f8 e0 ldi r31, 0x08 ; 8 - 14a4: 80 e4 ldi r24, 0x40 ; 64 - 14a6: 80 83 st Z, r24 + 14f6: e0 ec ldi r30, 0xC0 ; 192 + 14f8: f8 e0 ldi r31, 0x08 ; 8 + 14fa: 80 e4 ldi r24, 0x40 ; 64 + 14fc: 80 83 st Z, r24 SPIC.INTCTRL = SPI_INTLVL_OFF_gc; - 14a8: 11 82 std Z+1, r1 ; 0x01 + 14fe: 11 82 std Z+1, r1 ; 0x01 //#ifdef VERO PORTC.PIN5CTRL = PORT_INVEN_bm | PORT_OPC_PULLUP_gc; - 14aa: 88 e5 ldi r24, 0x58 ; 88 - 14ac: 80 93 55 06 sts 0x0655, r24 ; 0x800655 <__TEXT_REGION_LENGTH__+0x700655> - 14b0: 08 95 ret + 1500: 88 e5 ldi r24, 0x58 ; 88 + 1502: 80 93 55 06 sts 0x0655, r24 ; 0x800655 <__TEXT_REGION_LENGTH__+0x700655> + 1506: 08 95 ret -000014b2 <__vector_24>: +00001508 <__vector_24>: //#endif return; } ISR(SPIC_INT_vect){ - 14b2: 1f 92 push r1 - 14b4: 0f 92 push r0 - 14b6: 0f b6 in r0, 0x3f ; 63 - 14b8: 0f 92 push r0 - 14ba: 11 24 eor r1, r1 + 1508: 1f 92 push r1 + 150a: 0f 92 push r0 + 150c: 0f b6 in r0, 0x3f ; 63 + 150e: 0f 92 push r0 + 1510: 11 24 eor r1, r1 asm("nop"); - 14bc: 00 00 nop + 1512: 00 00 nop } - 14be: 0f 90 pop r0 - 14c0: 0f be out 0x3f, r0 ; 63 - 14c2: 0f 90 pop r0 - 14c4: 1f 90 pop r1 - 14c6: 18 95 reti + 1514: 0f 90 pop r0 + 1516: 0f be out 0x3f, r0 ; 63 + 1518: 0f 90 pop r0 + 151a: 1f 90 pop r1 + 151c: 18 95 reti -000014c8 <__vector_25>: +0000151e <__vector_25>: ISR(USARTC0_RXC_vect){ - 14c8: 1f 92 push r1 - 14ca: 0f 92 push r0 - 14cc: 0f b6 in r0, 0x3f ; 63 - 14ce: 0f 92 push r0 - 14d0: 11 24 eor r1, r1 - 14d2: 8f 93 push r24 - 14d4: ef 93 push r30 - 14d6: ff 93 push r31 + 151e: 1f 92 push r1 + 1520: 0f 92 push r0 + 1522: 0f b6 in r0, 0x3f ; 63 + 1524: 0f 92 push r0 + 1526: 11 24 eor r1, r1 + 1528: 8f 93 push r24 + 152a: ef 93 push r30 + 152c: ff 93 push r31 unsigned char temp = USARTC0.DATA; - 14d8: e0 ea ldi r30, 0xA0 ; 160 - 14da: f8 e0 ldi r31, 0x08 ; 8 - 14dc: 80 81 ld r24, Z + 152e: e0 ea ldi r30, 0xA0 ; 160 + 1530: f8 e0 ldi r31, 0x08 ; 8 + 1532: 80 81 ld r24, Z USARTC0.DATA = temp; - 14de: 80 83 st Z, r24 - 14e0: ff 91 pop r31 - 14e2: ef 91 pop r30 - 14e4: 8f 91 pop r24 - 14e6: 0f 90 pop r0 - 14e8: 0f be out 0x3f, r0 ; 63 - 14ea: 0f 90 pop r0 - 14ec: 1f 90 pop r1 - 14ee: 18 95 reti + 1534: 80 83 st Z, r24 + 1536: ff 91 pop r31 + 1538: ef 91 pop r30 + 153a: 8f 91 pop r24 + 153c: 0f 90 pop r0 + 153e: 0f be out 0x3f, r0 ; 63 + 1540: 0f 90 pop r0 + 1542: 1f 90 pop r1 + 1544: 18 95 reti -000014f0 : +00001546 : } static inline void cpu_irq_restore(irqflags_t flags) { barrier(); SREG = flags; - 14f0: 9f b7 in r25, 0x3f ; 63 - 14f2: f8 94 cli - 14f4: e8 2f mov r30, r24 - 14f6: f0 e0 ldi r31, 0x00 ; 0 - 14f8: e0 59 subi r30, 0x90 ; 144 - 14fa: ff 4f sbci r31, 0xFF ; 255 - 14fc: 60 95 com r22 - 14fe: 80 81 ld r24, Z - 1500: 68 23 and r22, r24 - 1502: 60 83 st Z, r22 - 1504: 9f bf out 0x3f, r25 ; 63 - 1506: 08 95 ret + 1546: 9f b7 in r25, 0x3f ; 63 + 1548: f8 94 cli + 154a: e8 2f mov r30, r24 + 154c: f0 e0 ldi r31, 0x00 ; 0 + 154e: e0 59 subi r30, 0x90 ; 144 + 1550: ff 4f sbci r31, 0xFF ; 255 + 1552: 60 95 com r22 + 1554: 80 81 ld r24, Z + 1556: 68 23 and r22, r24 + 1558: 60 83 st Z, r22 + 155a: 9f bf out 0x3f, r25 ; 63 + 155c: 08 95 ret -00001508 : +0000155e : /* * Enable or disable prescaler depending on if the USB frequency is 6 * MHz or 48 MHz. Only 6 MHz USB frequency requires prescaling. */ if (frequency == 6) { - 1508: 86 30 cpi r24, 0x06 ; 6 - 150a: 11 f0 breq .+4 ; 0x1510 + 155e: 86 30 cpi r24, 0x06 ; 6 + 1560: 11 f0 breq .+4 ; 0x1566 prescaler = CLK_USBPSDIV_8_gc; } else { prescaler = 0; - 150c: 60 e0 ldi r22, 0x00 ; 0 - 150e: 01 c0 rjmp .+2 ; 0x1512 + 1562: 60 e0 ldi r22, 0x00 ; 0 + 1564: 01 c0 rjmp .+2 ; 0x1568 /* * Enable or disable prescaler depending on if the USB frequency is 6 * MHz or 48 MHz. Only 6 MHz USB frequency requires prescaling. */ if (frequency == 6) { prescaler = CLK_USBPSDIV_8_gc; - 1510: 68 e1 ldi r22, 0x18 ; 24 + 1566: 68 e1 ldi r22, 0x18 ; 24 static inline bool osc_is_ready(uint8_t id) { Assert(id != OSC_ID_USBSOF); return OSC.STATUS & id; - 1512: 80 91 51 00 lds r24, 0x0051 ; 0x800051 <__TEXT_REGION_LENGTH__+0x700051> + 1568: 80 91 51 00 lds r24, 0x0051 ; 0x800051 <__TEXT_REGION_LENGTH__+0x700051> /* * Switch to the system clock selected by the user. */ switch (CONFIG_USBCLK_SOURCE) { case USBCLK_SRC_RCOSC: if (!osc_is_ready(OSC_ID_RC32MHZ)) { - 1516: 81 fd sbrc r24, 1 - 1518: 26 c0 rjmp .+76 ; 0x1566 + 156c: 81 fd sbrc r24, 1 + 156e: 26 c0 rjmp .+76 ; 0x15bc typedef uint8_t irqflags_t; static inline irqflags_t cpu_irq_save(void) { irqflags_t flags = SREG; - 151a: 9f b7 in r25, 0x3f ; 63 + 1570: 9f b7 in r25, 0x3f ; 63 cpu_irq_disable(); - 151c: f8 94 cli + 1572: f8 94 cli irqflags_t flags; Assert(id != OSC_ID_USBSOF); flags = cpu_irq_save(); OSC.CTRL |= id; - 151e: e0 e5 ldi r30, 0x50 ; 80 - 1520: f0 e0 ldi r31, 0x00 ; 0 - 1522: 80 81 ld r24, Z - 1524: 82 60 ori r24, 0x02 ; 2 - 1526: 80 83 st Z, r24 + 1574: e0 e5 ldi r30, 0x50 ; 80 + 1576: f0 e0 ldi r31, 0x00 ; 0 + 1578: 80 81 ld r24, Z + 157a: 82 60 ori r24, 0x02 ; 2 + 157c: 80 83 st Z, r24 } static inline void cpu_irq_restore(irqflags_t flags) { barrier(); SREG = flags; - 1528: 9f bf out 0x3f, r25 ; 63 + 157e: 9f bf out 0x3f, r25 ; 63 static inline bool osc_is_ready(uint8_t id) { Assert(id != OSC_ID_USBSOF); return OSC.STATUS & id; - 152a: 81 81 ldd r24, Z+1 ; 0x01 + 1580: 81 81 ldd r24, Z+1 ; 0x01 * * \param id A number identifying the oscillator to wait for. */ static inline void osc_wait_ready(uint8_t id) { while (!osc_is_ready(id)) { - 152c: 81 ff sbrs r24, 1 - 152e: fd cf rjmp .-6 ; 0x152a + 1582: 81 ff sbrs r24, 1 + 1584: fd cf rjmp .-6 ; 0x1580 typedef uint8_t irqflags_t; static inline irqflags_t cpu_irq_save(void) { irqflags_t flags = SREG; - 1530: 9f b7 in r25, 0x3f ; 63 + 1586: 9f b7 in r25, 0x3f ; 63 cpu_irq_disable(); - 1532: f8 94 cli + 1588: f8 94 cli # if !XMEGA_E || (ref_id == OSC_ID_USBSOF) #endif ); OSC.DFLLCTRL &= ~(OSC_RC32MCREF_gm); - 1534: a0 e5 ldi r26, 0x50 ; 80 - 1536: b0 e0 ldi r27, 0x00 ; 0 - 1538: 16 96 adiw r26, 0x06 ; 6 - 153a: 8c 91 ld r24, X - 153c: 16 97 sbiw r26, 0x06 ; 6 - 153e: 89 7f andi r24, 0xF9 ; 249 - 1540: 16 96 adiw r26, 0x06 ; 6 - 1542: 8c 93 st X, r24 - 1544: 16 97 sbiw r26, 0x06 ; 6 + 158a: a0 e5 ldi r26, 0x50 ; 80 + 158c: b0 e0 ldi r27, 0x00 ; 0 + 158e: 16 96 adiw r26, 0x06 ; 6 + 1590: 8c 91 ld r24, X + 1592: 16 97 sbiw r26, 0x06 ; 6 + 1594: 89 7f andi r24, 0xF9 ; 249 + 1596: 16 96 adiw r26, 0x06 ; 6 + 1598: 8c 93 st X, r24 + 159a: 16 97 sbiw r26, 0x06 ; 6 else if (ref_id == OSC_ID_USBSOF) { /* * Calibrate 32MRC at 48MHz using USB SOF * 48MHz / 1kHz = 0xBB80 */ DFLLRC32M.COMP1 = 0x80; - 1546: e0 e6 ldi r30, 0x60 ; 96 - 1548: f0 e0 ldi r31, 0x00 ; 0 - 154a: 80 e8 ldi r24, 0x80 ; 128 - 154c: 85 83 std Z+5, r24 ; 0x05 + 159c: e0 e6 ldi r30, 0x60 ; 96 + 159e: f0 e0 ldi r31, 0x00 ; 0 + 15a0: 80 e8 ldi r24, 0x80 ; 128 + 15a2: 85 83 std Z+5, r24 ; 0x05 DFLLRC32M.COMP2 = 0xBB; - 154e: 8b eb ldi r24, 0xBB ; 187 - 1550: 86 83 std Z+6, r24 ; 0x06 + 15a4: 8b eb ldi r24, 0xBB ; 187 + 15a6: 86 83 std Z+6, r24 ; 0x06 OSC.DFLLCTRL |= OSC_RC32MCREF_USBSOF_gc; - 1552: 16 96 adiw r26, 0x06 ; 6 - 1554: 8c 91 ld r24, X - 1556: 16 97 sbiw r26, 0x06 ; 6 - 1558: 84 60 ori r24, 0x04 ; 4 - 155a: 16 96 adiw r26, 0x06 ; 6 - 155c: 8c 93 st X, r24 + 15a8: 16 96 adiw r26, 0x06 ; 6 + 15aa: 8c 91 ld r24, X + 15ac: 16 97 sbiw r26, 0x06 ; 6 + 15ae: 84 60 ori r24, 0x04 ; 4 + 15b0: 16 96 adiw r26, 0x06 ; 6 + 15b2: 8c 93 st X, r24 OSC.DFLLCTRL &= ~(OSC_RC32MCREF_bm); # endif } #endif DFLLRC32M.CTRL |= DFLL_ENABLE_bm; - 155e: 80 81 ld r24, Z - 1560: 81 60 ori r24, 0x01 ; 1 - 1562: 80 83 st Z, r24 + 15b4: 80 81 ld r24, Z + 15b6: 81 60 ori r24, 0x01 ; 1 + 15b8: 80 83 st Z, r24 } static inline void cpu_irq_restore(irqflags_t flags) { barrier(); SREG = flags; - 1564: 9f bf out 0x3f, r25 ; 63 + 15ba: 9f bf out 0x3f, r25 ; 63 } osc_enable_autocalibration(OSC_ID_RC32MHZ, CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC); #endif } ccp_write_io((uint8_t *)&CLK.USBCTRL, (prescaler) - 1566: 63 60 ori r22, 0x03 ; 3 - 1568: 84 e4 ldi r24, 0x44 ; 68 - 156a: 90 e0 ldi r25, 0x00 ; 0 - 156c: 0c d5 rcall .+2584 ; 0x1f86 + 15bc: 63 60 ori r22, 0x03 ; 3 + 15be: 84 e4 ldi r24, 0x44 ; 68 + 15c0: 90 e0 ldi r25, 0x00 ; 0 + 15c2: 0f d5 rcall .+2590 ; 0x1fe2 default: Assert(false); break; } sysclk_enable_module(SYSCLK_PORT_GEN, SYSCLK_USB); - 156e: 60 e4 ldi r22, 0x40 ; 64 - 1570: 80 e0 ldi r24, 0x00 ; 0 - 1572: be cf rjmp .-132 ; 0x14f0 - 1574: 08 95 ret + 15c4: 60 e4 ldi r22, 0x40 ; 64 + 15c6: 80 e0 ldi r24, 0x00 ; 0 + 15c8: be cf rjmp .-132 ; 0x1546 + 15ca: 08 95 ret -00001576 : +000015cc : } uint8_t udi_vendor_getsetting(void) { return udi_vendor_alternate_setting; } - 1576: 80 91 9a 20 lds r24, 0x209A ; 0x80209a - 157a: 08 95 ret + 15cc: 80 91 9a 20 lds r24, 0x209A ; 0x80209a + 15d0: 08 95 ret -0000157c : +000015d2 : * \name Internal routines */ //@{ bool udi_vendor_enable(void) { udi_vendor_alternate_setting = udc_get_interface_desc()->bAlternateSetting; - 157c: 1c d1 rcall .+568 ; 0x17b6 - 157e: fc 01 movw r30, r24 - 1580: 83 81 ldd r24, Z+3 ; 0x03 - 1582: 80 93 9a 20 sts 0x209A, r24 ; 0x80209a + 15d2: 1c d1 rcall .+568 ; 0x180c + 15d4: fc 01 movw r30, r24 + 15d6: 83 81 ldd r24, Z+3 ; 0x03 + 15d8: 80 93 9a 20 sts 0x209A, r24 ; 0x80209a if (0 == udi_vendor_alternate_setting) { - 1586: 81 11 cpse r24, r1 - 1588: 02 c0 rjmp .+4 ; 0x158e + 15dc: 81 11 cpse r24, r1 + 15de: 02 c0 rjmp .+4 ; 0x15e4 // Call application callback // to notify that interface is enabled if (!UDI_VENDOR_ENABLE_EXT()) { - 158a: f4 c9 rjmp .-3096 ; 0x974 - 158c: 08 95 ret + 15e0: bf c9 rjmp .-3202 ; 0x960 + 15e2: 08 95 ret return false; } } return true; - 158e: 81 e0 ldi r24, 0x01 ; 1 + 15e4: 81 e0 ldi r24, 0x01 ; 1 } - 1590: 08 95 ret + 15e6: 08 95 ret -00001592 : +000015e8 : void udi_vendor_disable(void) { if (1 == udi_vendor_alternate_setting) { - 1592: 80 91 9a 20 lds r24, 0x209A ; 0x80209a - 1596: 81 30 cpi r24, 0x01 ; 1 - 1598: 09 f4 brne .+2 ; 0x159c + 15e8: 80 91 9a 20 lds r24, 0x209A ; 0x80209a + 15ec: 81 30 cpi r24, 0x01 ; 1 + 15ee: 09 f4 brne .+2 ; 0x15f2 UDI_VENDOR_DISABLE_EXT(); - 159a: 01 ca rjmp .-3070 ; 0x99e - 159c: 08 95 ret + 15f0: cc c9 rjmp .-3176 ; 0x98a + 15f2: 08 95 ret -0000159e : +000015f4 : } bool udi_vendor_setup(void) { if (Udd_setup_is_in()) { - 159e: 80 91 9a 23 lds r24, 0x239A ; 0x80239a - 15a2: 88 23 and r24, r24 - 15a4: 4c f4 brge .+18 ; 0x15b8 + 15f4: 80 91 9a 23 lds r24, 0x239A ; 0x80239a + 15f8: 88 23 and r24, r24 + 15fa: 4c f4 brge .+18 ; 0x160e if ((Udd_setup_type() == USB_REQ_TYPE_VENDOR) - 15a6: 80 76 andi r24, 0x60 ; 96 - 15a8: 80 34 cpi r24, 0x40 ; 64 - 15aa: a9 f4 brne .+42 ; 0x15d6 + 15fc: 80 76 andi r24, 0x60 ; 96 + 15fe: 80 34 cpi r24, 0x40 ; 64 + 1600: a9 f4 brne .+42 ; 0x162c && (udd_g_ctrlreq.req.bRequest == 0)) { - 15ac: 80 91 9b 23 lds r24, 0x239B ; 0x80239b - 15b0: 81 11 cpse r24, r1 - 15b2: 13 c0 rjmp .+38 ; 0x15da + 1602: 80 91 9b 23 lds r24, 0x239B ; 0x80239b + 1606: 81 11 cpse r24, r1 + 1608: 13 c0 rjmp .+38 ; 0x1630 return UDI_VENDOR_SETUP_IN_RECEIVED(); - 15b4: f9 c9 rjmp .-3086 ; 0x9a8 - 15b6: 08 95 ret + 160a: c4 c9 rjmp .-3192 ; 0x994 + 160c: 08 95 ret } } if (Udd_setup_is_out()) { if ((Udd_setup_type() == USB_REQ_TYPE_VENDOR) - 15b8: 80 76 andi r24, 0x60 ; 96 - 15ba: 80 34 cpi r24, 0x40 ; 64 - 15bc: 81 f4 brne .+32 ; 0x15de + 160e: 80 76 andi r24, 0x60 ; 96 + 1610: 80 34 cpi r24, 0x40 ; 64 + 1612: 81 f4 brne .+32 ; 0x1634 && (udd_g_ctrlreq.req.bRequest == 0) - 15be: 80 91 9b 23 lds r24, 0x239B ; 0x80239b - 15c2: 81 11 cpse r24, r1 - 15c4: 0e c0 rjmp .+28 ; 0x15e2 + 1614: 80 91 9b 23 lds r24, 0x239B ; 0x80239b + 1618: 81 11 cpse r24, r1 + 161a: 0e c0 rjmp .+28 ; 0x1638 && (0 != udd_g_ctrlreq.req.wLength)) { - 15c6: 80 91 a0 23 lds r24, 0x23A0 ; 0x8023a0 - 15ca: 90 91 a1 23 lds r25, 0x23A1 ; 0x8023a1 - 15ce: 89 2b or r24, r25 - 15d0: 51 f0 breq .+20 ; 0x15e6 + 161c: 80 91 a0 23 lds r24, 0x23A0 ; 0x8023a0 + 1620: 90 91 a1 23 lds r25, 0x23A1 ; 0x8023a1 + 1624: 89 2b or r24, r25 + 1626: 51 f0 breq .+20 ; 0x163c return UDI_VENDOR_SETUP_OUT_RECEIVED(); - 15d2: e8 c9 rjmp .-3120 ; 0x9a4 - 15d4: 08 95 ret + 1628: b3 c9 rjmp .-3226 ; 0x990 + 162a: 08 95 ret } } return false; // Not supported request - 15d6: 80 e0 ldi r24, 0x00 ; 0 - 15d8: 08 95 ret - 15da: 80 e0 ldi r24, 0x00 ; 0 - 15dc: 08 95 ret - 15de: 80 e0 ldi r24, 0x00 ; 0 - 15e0: 08 95 ret - 15e2: 80 e0 ldi r24, 0x00 ; 0 - 15e4: 08 95 ret - 15e6: 80 e0 ldi r24, 0x00 ; 0 + 162c: 80 e0 ldi r24, 0x00 ; 0 + 162e: 08 95 ret + 1630: 80 e0 ldi r24, 0x00 ; 0 + 1632: 08 95 ret + 1634: 80 e0 ldi r24, 0x00 ; 0 + 1636: 08 95 ret + 1638: 80 e0 ldi r24, 0x00 ; 0 + 163a: 08 95 ret + 163c: 80 e0 ldi r24, 0x00 ; 0 } - 15e8: 08 95 ret + 163e: 08 95 ret -000015ea : +00001640 : /*! \brief Stop the USB Device stack */ void udc_stop(void) { udd_disable(); udc_reset(); - 15ea: e0 91 9f 20 lds r30, 0x209F ; 0x80209f - 15ee: f0 91 a0 20 lds r31, 0x20A0 ; 0x8020a0 - 15f2: 01 90 ld r0, Z+ - 15f4: f0 81 ld r31, Z - 15f6: e0 2d mov r30, r0 - 15f8: 22 81 ldd r18, Z+2 ; 0x02 - 15fa: 33 81 ldd r19, Z+3 ; 0x03 - 15fc: 2e 0f add r18, r30 - 15fe: 3f 1f adc r19, r31 - 1600: fc 01 movw r30, r24 - 1602: 40 81 ld r20, Z - 1604: e4 0f add r30, r20 - 1606: f1 1d adc r31, r1 - 1608: e2 17 cp r30, r18 - 160a: f3 07 cpc r31, r19 - 160c: b8 f4 brcc .+46 ; 0x163c - 160e: 81 81 ldd r24, Z+1 ; 0x01 - 1610: 84 30 cpi r24, 0x04 ; 4 - 1612: b9 f0 breq .+46 ; 0x1642 - 1614: 86 13 cpse r24, r22 - 1616: 09 c0 rjmp .+18 ; 0x162a - 1618: 05 c0 rjmp .+10 ; 0x1624 - 161a: 81 81 ldd r24, Z+1 ; 0x01 - 161c: 84 30 cpi r24, 0x04 ; 4 - 161e: a1 f0 breq .+40 ; 0x1648 - 1620: 86 13 cpse r24, r22 - 1622: 03 c0 rjmp .+6 ; 0x162a - 1624: 8e 2f mov r24, r30 - 1626: 9f 2f mov r25, r31 - 1628: 08 95 ret - 162a: 80 81 ld r24, Z - 162c: e8 0f add r30, r24 - 162e: f1 1d adc r31, r1 - 1630: e2 17 cp r30, r18 - 1632: f3 07 cpc r31, r19 - 1634: 90 f3 brcs .-28 ; 0x161a - 1636: 80 e0 ldi r24, 0x00 ; 0 - 1638: 90 e0 ldi r25, 0x00 ; 0 - 163a: 08 95 ret - 163c: 80 e0 ldi r24, 0x00 ; 0 - 163e: 90 e0 ldi r25, 0x00 ; 0 - 1640: 08 95 ret - 1642: 80 e0 ldi r24, 0x00 ; 0 - 1644: 90 e0 ldi r25, 0x00 ; 0 - 1646: 08 95 ret - 1648: 80 e0 ldi r24, 0x00 ; 0 - 164a: 90 e0 ldi r25, 0x00 ; 0 - 164c: 08 95 ret - -0000164e : - 164e: 80 91 9c 23 lds r24, 0x239C ; 0x80239c - 1652: 8f 77 andi r24, 0x7F ; 127 - 1654: 0c 94 ad 13 jmp 0x275a ; 0x275a - 1658: 08 95 ret - -0000165a : - 165a: 90 91 a2 20 lds r25, 0x20A2 ; 0x8020a2 - 165e: 99 23 and r25, r25 - 1660: 81 f1 breq .+96 ; 0x16c2 - 1662: e0 91 9f 20 lds r30, 0x209F ; 0x80209f - 1666: f0 91 a0 20 lds r31, 0x20A0 ; 0x8020a0 - 166a: 01 90 ld r0, Z+ - 166c: f0 81 ld r31, Z - 166e: e0 2d mov r30, r0 - 1670: 94 81 ldd r25, Z+4 ; 0x04 - 1672: 89 17 cp r24, r25 - 1674: 40 f5 brcc .+80 ; 0x16c6 - 1676: e0 93 9d 20 sts 0x209D, r30 ; 0x80209d - 167a: f0 93 9e 20 sts 0x209E, r31 ; 0x80209e - 167e: 22 81 ldd r18, Z+2 ; 0x02 - 1680: 33 81 ldd r19, Z+3 ; 0x03 - 1682: 2e 0f add r18, r30 - 1684: 3f 1f adc r19, r31 + 1640: e0 91 9f 20 lds r30, 0x209F ; 0x80209f + 1644: f0 91 a0 20 lds r31, 0x20A0 ; 0x8020a0 + 1648: 01 90 ld r0, Z+ + 164a: f0 81 ld r31, Z + 164c: e0 2d mov r30, r0 + 164e: 22 81 ldd r18, Z+2 ; 0x02 + 1650: 33 81 ldd r19, Z+3 ; 0x03 + 1652: 2e 0f add r18, r30 + 1654: 3f 1f adc r19, r31 + 1656: fc 01 movw r30, r24 + 1658: 40 81 ld r20, Z + 165a: e4 0f add r30, r20 + 165c: f1 1d adc r31, r1 + 165e: e2 17 cp r30, r18 + 1660: f3 07 cpc r31, r19 + 1662: b8 f4 brcc .+46 ; 0x1692 + 1664: 81 81 ldd r24, Z+1 ; 0x01 + 1666: 84 30 cpi r24, 0x04 ; 4 + 1668: b9 f0 breq .+46 ; 0x1698 + 166a: 86 13 cpse r24, r22 + 166c: 09 c0 rjmp .+18 ; 0x1680 + 166e: 05 c0 rjmp .+10 ; 0x167a + 1670: 81 81 ldd r24, Z+1 ; 0x01 + 1672: 84 30 cpi r24, 0x04 ; 4 + 1674: a1 f0 breq .+40 ; 0x169e + 1676: 86 13 cpse r24, r22 + 1678: 03 c0 rjmp .+6 ; 0x1680 + 167a: 8e 2f mov r24, r30 + 167c: 9f 2f mov r25, r31 + 167e: 08 95 ret + 1680: 80 81 ld r24, Z + 1682: e8 0f add r30, r24 + 1684: f1 1d adc r31, r1 1686: e2 17 cp r30, r18 1688: f3 07 cpc r31, r19 - 168a: f8 f4 brcc .+62 ; 0x16ca - 168c: 91 81 ldd r25, Z+1 ; 0x01 - 168e: 94 30 cpi r25, 0x04 ; 4 - 1690: 61 f4 brne .+24 ; 0x16aa - 1692: 92 81 ldd r25, Z+2 ; 0x02 - 1694: 98 13 cpse r25, r24 - 1696: 09 c0 rjmp .+18 ; 0x16aa - 1698: 93 81 ldd r25, Z+3 ; 0x03 - 169a: 96 13 cpse r25, r22 - 169c: 06 c0 rjmp .+12 ; 0x16aa - 169e: e0 93 9d 20 sts 0x209D, r30 ; 0x80209d - 16a2: f0 93 9e 20 sts 0x209E, r31 ; 0x80209e - 16a6: 81 e0 ldi r24, 0x01 ; 1 - 16a8: 08 95 ret - 16aa: 90 81 ld r25, Z - 16ac: e9 0f add r30, r25 - 16ae: f1 1d adc r31, r1 - 16b0: e2 17 cp r30, r18 - 16b2: f3 07 cpc r31, r19 - 16b4: 58 f3 brcs .-42 ; 0x168c - 16b6: e0 93 9d 20 sts 0x209D, r30 ; 0x80209d - 16ba: f0 93 9e 20 sts 0x209E, r31 ; 0x80209e - 16be: 80 e0 ldi r24, 0x00 ; 0 - 16c0: 08 95 ret - 16c2: 80 e0 ldi r24, 0x00 ; 0 - 16c4: 08 95 ret - 16c6: 80 e0 ldi r24, 0x00 ; 0 - 16c8: 08 95 ret - 16ca: 80 e0 ldi r24, 0x00 ; 0 - 16cc: 08 95 ret + 168a: 90 f3 brcs .-28 ; 0x1670 + 168c: 80 e0 ldi r24, 0x00 ; 0 + 168e: 90 e0 ldi r25, 0x00 ; 0 + 1690: 08 95 ret + 1692: 80 e0 ldi r24, 0x00 ; 0 + 1694: 90 e0 ldi r25, 0x00 ; 0 + 1696: 08 95 ret + 1698: 80 e0 ldi r24, 0x00 ; 0 + 169a: 90 e0 ldi r25, 0x00 ; 0 + 169c: 08 95 ret + 169e: 80 e0 ldi r24, 0x00 ; 0 + 16a0: 90 e0 ldi r25, 0x00 ; 0 + 16a2: 08 95 ret -000016ce : - 16ce: ef 92 push r14 - 16d0: ff 92 push r15 - 16d2: 1f 93 push r17 - 16d4: cf 93 push r28 - 16d6: df 93 push r29 - 16d8: c8 2f mov r28, r24 - 16da: 60 e0 ldi r22, 0x00 ; 0 - 16dc: be df rcall .-132 ; 0x165a - 16de: 18 2f mov r17, r24 - 16e0: 88 23 and r24, r24 - 16e2: 81 f1 breq .+96 ; 0x1744 - 16e4: a0 91 9f 20 lds r26, 0x209F ; 0x80209f - 16e8: b0 91 a0 20 lds r27, 0x20A0 ; 0x8020a0 - 16ec: ec 2f mov r30, r28 - 16ee: f0 e0 ldi r31, 0x00 ; 0 - 16f0: ee 0f add r30, r30 - 16f2: ff 1f adc r31, r31 - 16f4: 12 96 adiw r26, 0x02 ; 2 - 16f6: 8d 91 ld r24, X+ - 16f8: 9c 91 ld r25, X - 16fa: 13 97 sbiw r26, 0x03 ; 3 - 16fc: e8 0f add r30, r24 - 16fe: f9 1f adc r31, r25 - 1700: e0 80 ld r14, Z - 1702: f1 80 ldd r15, Z+1 ; 0x01 - 1704: d7 01 movw r26, r14 - 1706: 16 96 adiw r26, 0x06 ; 6 - 1708: ed 91 ld r30, X+ - 170a: fc 91 ld r31, X - 170c: 17 97 sbiw r26, 0x07 ; 7 - 170e: 09 95 icall - 1710: 68 2f mov r22, r24 - 1712: 8c 2f mov r24, r28 - 1714: a2 df rcall .-188 ; 0x165a - 1716: 18 2f mov r17, r24 - 1718: 88 23 and r24, r24 - 171a: a1 f0 breq .+40 ; 0x1744 - 171c: c0 91 9d 20 lds r28, 0x209D ; 0x80209d - 1720: d0 91 9e 20 lds r29, 0x209E ; 0x80209e - 1724: 65 e0 ldi r22, 0x05 ; 5 - 1726: ce 01 movw r24, r28 - 1728: 60 df rcall .-320 ; 0x15ea - 172a: ec 01 movw r28, r24 - 172c: 89 2b or r24, r25 - 172e: 21 f0 breq .+8 ; 0x1738 - 1730: 8a 81 ldd r24, Y+2 ; 0x02 - 1732: 0e 94 82 15 call 0x2b04 ; 0x2b04 - 1736: f6 cf rjmp .-20 ; 0x1724 - 1738: d7 01 movw r26, r14 - 173a: 12 96 adiw r26, 0x02 ; 2 - 173c: ed 91 ld r30, X+ - 173e: fc 91 ld r31, X - 1740: 13 97 sbiw r26, 0x03 ; 3 - 1742: 09 95 icall - 1744: 81 2f mov r24, r17 - 1746: df 91 pop r29 - 1748: cf 91 pop r28 - 174a: 1f 91 pop r17 - 174c: ff 90 pop r15 - 174e: ef 90 pop r14 - 1750: 08 95 ret +000016a4 : + 16a4: 80 91 9c 23 lds r24, 0x239C ; 0x80239c + 16a8: 8f 77 andi r24, 0x7F ; 127 + 16aa: 0c 94 db 13 jmp 0x27b6 ; 0x27b6 + 16ae: 08 95 ret -00001752 : - 1752: 1f 93 push r17 - 1754: cf 93 push r28 - 1756: df 93 push r29 - 1758: 18 2f mov r17, r24 - 175a: 7f df rcall .-258 ; 0x165a - 175c: 88 23 and r24, r24 - 175e: 39 f1 breq .+78 ; 0x17ae - 1760: c0 91 9d 20 lds r28, 0x209D ; 0x80209d - 1764: d0 91 9e 20 lds r29, 0x209E ; 0x80209e - 1768: 65 e0 ldi r22, 0x05 ; 5 - 176a: ce 01 movw r24, r28 - 176c: 3e df rcall .-388 ; 0x15ea - 176e: ec 01 movw r28, r24 - 1770: 89 2b or r24, r25 - 1772: 41 f0 breq .+16 ; 0x1784 - 1774: 4c 81 ldd r20, Y+4 ; 0x04 - 1776: 5d 81 ldd r21, Y+5 ; 0x05 - 1778: 6b 81 ldd r22, Y+3 ; 0x03 - 177a: 8a 81 ldd r24, Y+2 ; 0x02 - 177c: fb d7 rcall .+4086 ; 0x2774 - 177e: 81 11 cpse r24, r1 - 1780: f3 cf rjmp .-26 ; 0x1768 - 1782: 15 c0 rjmp .+42 ; 0x17ae - 1784: a0 91 9f 20 lds r26, 0x209F ; 0x80209f - 1788: b0 91 a0 20 lds r27, 0x20A0 ; 0x8020a0 - 178c: e1 2f mov r30, r17 - 178e: f0 e0 ldi r31, 0x00 ; 0 - 1790: ee 0f add r30, r30 - 1792: ff 1f adc r31, r31 - 1794: 12 96 adiw r26, 0x02 ; 2 - 1796: 8d 91 ld r24, X+ - 1798: 9c 91 ld r25, X - 179a: 13 97 sbiw r26, 0x03 ; 3 - 179c: e8 0f add r30, r24 - 179e: f9 1f adc r31, r25 - 17a0: 01 90 ld r0, Z+ - 17a2: f0 81 ld r31, Z - 17a4: e0 2d mov r30, r0 - 17a6: 01 90 ld r0, Z+ - 17a8: f0 81 ld r31, Z - 17aa: e0 2d mov r30, r0 - 17ac: 09 95 icall - 17ae: df 91 pop r29 - 17b0: cf 91 pop r28 - 17b2: 1f 91 pop r17 - 17b4: 08 95 ret +000016b0 : + 16b0: 90 91 a2 20 lds r25, 0x20A2 ; 0x8020a2 + 16b4: 99 23 and r25, r25 + 16b6: 81 f1 breq .+96 ; 0x1718 + 16b8: e0 91 9f 20 lds r30, 0x209F ; 0x80209f + 16bc: f0 91 a0 20 lds r31, 0x20A0 ; 0x8020a0 + 16c0: 01 90 ld r0, Z+ + 16c2: f0 81 ld r31, Z + 16c4: e0 2d mov r30, r0 + 16c6: 94 81 ldd r25, Z+4 ; 0x04 + 16c8: 89 17 cp r24, r25 + 16ca: 40 f5 brcc .+80 ; 0x171c + 16cc: e0 93 9d 20 sts 0x209D, r30 ; 0x80209d + 16d0: f0 93 9e 20 sts 0x209E, r31 ; 0x80209e + 16d4: 22 81 ldd r18, Z+2 ; 0x02 + 16d6: 33 81 ldd r19, Z+3 ; 0x03 + 16d8: 2e 0f add r18, r30 + 16da: 3f 1f adc r19, r31 + 16dc: e2 17 cp r30, r18 + 16de: f3 07 cpc r31, r19 + 16e0: f8 f4 brcc .+62 ; 0x1720 + 16e2: 91 81 ldd r25, Z+1 ; 0x01 + 16e4: 94 30 cpi r25, 0x04 ; 4 + 16e6: 61 f4 brne .+24 ; 0x1700 + 16e8: 92 81 ldd r25, Z+2 ; 0x02 + 16ea: 98 13 cpse r25, r24 + 16ec: 09 c0 rjmp .+18 ; 0x1700 + 16ee: 93 81 ldd r25, Z+3 ; 0x03 + 16f0: 96 13 cpse r25, r22 + 16f2: 06 c0 rjmp .+12 ; 0x1700 + 16f4: e0 93 9d 20 sts 0x209D, r30 ; 0x80209d + 16f8: f0 93 9e 20 sts 0x209E, r31 ; 0x80209e + 16fc: 81 e0 ldi r24, 0x01 ; 1 + 16fe: 08 95 ret + 1700: 90 81 ld r25, Z + 1702: e9 0f add r30, r25 + 1704: f1 1d adc r31, r1 + 1706: e2 17 cp r30, r18 + 1708: f3 07 cpc r31, r19 + 170a: 58 f3 brcs .-42 ; 0x16e2 + 170c: e0 93 9d 20 sts 0x209D, r30 ; 0x80209d + 1710: f0 93 9e 20 sts 0x209E, r31 ; 0x80209e + 1714: 80 e0 ldi r24, 0x00 ; 0 + 1716: 08 95 ret + 1718: 80 e0 ldi r24, 0x00 ; 0 + 171a: 08 95 ret + 171c: 80 e0 ldi r24, 0x00 ; 0 + 171e: 08 95 ret + 1720: 80 e0 ldi r24, 0x00 ; 0 + 1722: 08 95 ret -000017b6 : - 17b6: 80 91 9d 20 lds r24, 0x209D ; 0x80209d - 17ba: 90 91 9e 20 lds r25, 0x209E ; 0x80209e - 17be: 08 95 ret +00001724 : + 1724: ef 92 push r14 + 1726: ff 92 push r15 + 1728: 1f 93 push r17 + 172a: cf 93 push r28 + 172c: df 93 push r29 + 172e: c8 2f mov r28, r24 + 1730: 60 e0 ldi r22, 0x00 ; 0 + 1732: be df rcall .-132 ; 0x16b0 + 1734: 18 2f mov r17, r24 + 1736: 88 23 and r24, r24 + 1738: 81 f1 breq .+96 ; 0x179a + 173a: a0 91 9f 20 lds r26, 0x209F ; 0x80209f + 173e: b0 91 a0 20 lds r27, 0x20A0 ; 0x8020a0 + 1742: ec 2f mov r30, r28 + 1744: f0 e0 ldi r31, 0x00 ; 0 + 1746: ee 0f add r30, r30 + 1748: ff 1f adc r31, r31 + 174a: 12 96 adiw r26, 0x02 ; 2 + 174c: 8d 91 ld r24, X+ + 174e: 9c 91 ld r25, X + 1750: 13 97 sbiw r26, 0x03 ; 3 + 1752: e8 0f add r30, r24 + 1754: f9 1f adc r31, r25 + 1756: e0 80 ld r14, Z + 1758: f1 80 ldd r15, Z+1 ; 0x01 + 175a: d7 01 movw r26, r14 + 175c: 16 96 adiw r26, 0x06 ; 6 + 175e: ed 91 ld r30, X+ + 1760: fc 91 ld r31, X + 1762: 17 97 sbiw r26, 0x07 ; 7 + 1764: 09 95 icall + 1766: 68 2f mov r22, r24 + 1768: 8c 2f mov r24, r28 + 176a: a2 df rcall .-188 ; 0x16b0 + 176c: 18 2f mov r17, r24 + 176e: 88 23 and r24, r24 + 1770: a1 f0 breq .+40 ; 0x179a + 1772: c0 91 9d 20 lds r28, 0x209D ; 0x80209d + 1776: d0 91 9e 20 lds r29, 0x209E ; 0x80209e + 177a: 65 e0 ldi r22, 0x05 ; 5 + 177c: ce 01 movw r24, r28 + 177e: 60 df rcall .-320 ; 0x1640 + 1780: ec 01 movw r28, r24 + 1782: 89 2b or r24, r25 + 1784: 21 f0 breq .+8 ; 0x178e + 1786: 8a 81 ldd r24, Y+2 ; 0x02 + 1788: 0e 94 b0 15 call 0x2b60 ; 0x2b60 + 178c: f6 cf rjmp .-20 ; 0x177a + 178e: d7 01 movw r26, r14 + 1790: 12 96 adiw r26, 0x02 ; 2 + 1792: ed 91 ld r30, X+ + 1794: fc 91 ld r31, X + 1796: 13 97 sbiw r26, 0x03 ; 3 + 1798: 09 95 icall + 179a: 81 2f mov r24, r17 + 179c: df 91 pop r29 + 179e: cf 91 pop r28 + 17a0: 1f 91 pop r17 + 17a2: ff 90 pop r15 + 17a4: ef 90 pop r14 + 17a6: 08 95 ret -000017c0 : - 17c0: 65 c7 rjmp .+3786 ; 0x268c - 17c2: 08 95 ret +000017a8 : + 17a8: 1f 93 push r17 + 17aa: cf 93 push r28 + 17ac: df 93 push r29 + 17ae: 18 2f mov r17, r24 + 17b0: 7f df rcall .-258 ; 0x16b0 + 17b2: 88 23 and r24, r24 + 17b4: 39 f1 breq .+78 ; 0x1804 + 17b6: c0 91 9d 20 lds r28, 0x209D ; 0x80209d + 17ba: d0 91 9e 20 lds r29, 0x209E ; 0x80209e + 17be: 65 e0 ldi r22, 0x05 ; 5 + 17c0: ce 01 movw r24, r28 + 17c2: 3e df rcall .-388 ; 0x1640 + 17c4: ec 01 movw r28, r24 + 17c6: 89 2b or r24, r25 + 17c8: 41 f0 breq .+16 ; 0x17da + 17ca: 4c 81 ldd r20, Y+4 ; 0x04 + 17cc: 5d 81 ldd r21, Y+5 ; 0x05 + 17ce: 6b 81 ldd r22, Y+3 ; 0x03 + 17d0: 8a 81 ldd r24, Y+2 ; 0x02 + 17d2: fe d7 rcall .+4092 ; 0x27d0 + 17d4: 81 11 cpse r24, r1 + 17d6: f3 cf rjmp .-26 ; 0x17be + 17d8: 15 c0 rjmp .+42 ; 0x1804 + 17da: a0 91 9f 20 lds r26, 0x209F ; 0x80209f + 17de: b0 91 a0 20 lds r27, 0x20A0 ; 0x8020a0 + 17e2: e1 2f mov r30, r17 + 17e4: f0 e0 ldi r31, 0x00 ; 0 + 17e6: ee 0f add r30, r30 + 17e8: ff 1f adc r31, r31 + 17ea: 12 96 adiw r26, 0x02 ; 2 + 17ec: 8d 91 ld r24, X+ + 17ee: 9c 91 ld r25, X + 17f0: 13 97 sbiw r26, 0x03 ; 3 + 17f2: e8 0f add r30, r24 + 17f4: f9 1f adc r31, r25 + 17f6: 01 90 ld r0, Z+ + 17f8: f0 81 ld r31, Z + 17fa: e0 2d mov r30, r0 + 17fc: 01 90 ld r0, Z+ + 17fe: f0 81 ld r31, Z + 1800: e0 2d mov r30, r0 + 1802: 09 95 icall + 1804: df 91 pop r29 + 1806: cf 91 pop r28 + 1808: 1f 91 pop r17 + 180a: 08 95 ret -000017c4 : - 17c4: cf 93 push r28 - 17c6: 80 91 a2 20 lds r24, 0x20A2 ; 0x8020a2 - 17ca: 88 23 and r24, r24 - 17cc: c1 f0 breq .+48 ; 0x17fe - 17ce: e0 91 9f 20 lds r30, 0x209F ; 0x80209f - 17d2: f0 91 a0 20 lds r31, 0x20A0 ; 0x8020a0 - 17d6: 01 90 ld r0, Z+ - 17d8: f0 81 ld r31, Z - 17da: e0 2d mov r30, r0 - 17dc: 84 81 ldd r24, Z+4 ; 0x04 - 17de: 88 23 and r24, r24 - 17e0: 71 f0 breq .+28 ; 0x17fe - 17e2: c0 e0 ldi r28, 0x00 ; 0 - 17e4: 8c 2f mov r24, r28 - 17e6: 73 df rcall .-282 ; 0x16ce - 17e8: cf 5f subi r28, 0xFF ; 255 - 17ea: e0 91 9f 20 lds r30, 0x209F ; 0x80209f - 17ee: f0 91 a0 20 lds r31, 0x20A0 ; 0x8020a0 - 17f2: 01 90 ld r0, Z+ - 17f4: f0 81 ld r31, Z - 17f6: e0 2d mov r30, r0 - 17f8: 84 81 ldd r24, Z+4 ; 0x04 - 17fa: c8 17 cp r28, r24 - 17fc: 98 f3 brcs .-26 ; 0x17e4 - 17fe: 10 92 a2 20 sts 0x20A2, r1 ; 0x8020a2 - 1802: 10 92 a6 20 sts 0x20A6, r1 ; 0x8020a6 - 1806: 10 92 a7 20 sts 0x20A7, r1 ; 0x8020a7 - 180a: cf 91 pop r28 - 180c: 08 95 ret +0000180c : + 180c: 80 91 9d 20 lds r24, 0x209D ; 0x80209d + 1810: 90 91 9e 20 lds r25, 0x209E ; 0x80209e + 1814: 08 95 ret -0000180e : +00001816 : + 1816: 68 c7 rjmp .+3792 ; 0x26e8 + 1818: 08 95 ret + +0000181a : + 181a: cf 93 push r28 + 181c: 80 91 a2 20 lds r24, 0x20A2 ; 0x8020a2 + 1820: 88 23 and r24, r24 + 1822: c1 f0 breq .+48 ; 0x1854 + 1824: e0 91 9f 20 lds r30, 0x209F ; 0x80209f + 1828: f0 91 a0 20 lds r31, 0x20A0 ; 0x8020a0 + 182c: 01 90 ld r0, Z+ + 182e: f0 81 ld r31, Z + 1830: e0 2d mov r30, r0 + 1832: 84 81 ldd r24, Z+4 ; 0x04 + 1834: 88 23 and r24, r24 + 1836: 71 f0 breq .+28 ; 0x1854 + 1838: c0 e0 ldi r28, 0x00 ; 0 + 183a: 8c 2f mov r24, r28 + 183c: 73 df rcall .-282 ; 0x1724 + 183e: cf 5f subi r28, 0xFF ; 255 + 1840: e0 91 9f 20 lds r30, 0x209F ; 0x80209f + 1844: f0 91 a0 20 lds r31, 0x20A0 ; 0x8020a0 + 1848: 01 90 ld r0, Z+ + 184a: f0 81 ld r31, Z + 184c: e0 2d mov r30, r0 + 184e: 84 81 ldd r24, Z+4 ; 0x04 + 1850: c8 17 cp r28, r24 + 1852: 98 f3 brcs .-26 ; 0x183a + 1854: 10 92 a2 20 sts 0x20A2, r1 ; 0x8020a2 + 1858: 10 92 a6 20 sts 0x20A6, r1 ; 0x8020a6 + 185c: 10 92 a7 20 sts 0x20A7, r1 ; 0x8020a7 + 1860: cf 91 pop r28 + 1862: 08 95 ret + +00001864 : CPU_TO_LE16(USB_DEV_STATUS_BUS_POWERED); #endif } void udc_sof_notify(void) { - 180e: cf 93 push r28 + 1864: cf 93 push r28 uint8_t iface_num; if (udc_num_configuration) { - 1810: 80 91 a2 20 lds r24, 0x20A2 ; 0x8020a2 - 1814: 88 23 and r24, r24 - 1816: 49 f1 breq .+82 ; 0x186a + 1866: 80 91 a2 20 lds r24, 0x20A2 ; 0x8020a2 + 186a: 88 23 and r24, r24 + 186c: 49 f1 breq .+82 ; 0x18c0 for (iface_num = 0; iface_num < udc_ptr_conf->desc->bNumInterfaces; - 1818: a0 91 9f 20 lds r26, 0x209F ; 0x80209f - 181c: b0 91 a0 20 lds r27, 0x20A0 ; 0x8020a0 - 1820: ed 91 ld r30, X+ - 1822: fc 91 ld r31, X - 1824: 11 97 sbiw r26, 0x01 ; 1 + 186e: a0 91 9f 20 lds r26, 0x209F ; 0x80209f + 1872: b0 91 a0 20 lds r27, 0x20A0 ; 0x8020a0 + 1876: ed 91 ld r30, X+ + 1878: fc 91 ld r31, X + 187a: 11 97 sbiw r26, 0x01 ; 1 void udc_sof_notify(void) { uint8_t iface_num; if (udc_num_configuration) { for (iface_num = 0; - 1826: 84 81 ldd r24, Z+4 ; 0x04 - 1828: 88 23 and r24, r24 - 182a: f9 f0 breq .+62 ; 0x186a - 182c: c0 e0 ldi r28, 0x00 ; 0 + 187c: 84 81 ldd r24, Z+4 ; 0x04 + 187e: 88 23 and r24, r24 + 1880: f9 f0 breq .+62 ; 0x18c0 + 1882: c0 e0 ldi r28, 0x00 ; 0 iface_num < udc_ptr_conf->desc->bNumInterfaces; iface_num++) { if (udc_ptr_conf->udi_apis[iface_num]->sof_notify != NULL) { - 182e: ec 2f mov r30, r28 - 1830: f0 e0 ldi r31, 0x00 ; 0 - 1832: ee 0f add r30, r30 - 1834: ff 1f adc r31, r31 - 1836: 12 96 adiw r26, 0x02 ; 2 - 1838: 8d 91 ld r24, X+ - 183a: 9c 91 ld r25, X - 183c: 13 97 sbiw r26, 0x03 ; 3 - 183e: e8 0f add r30, r24 - 1840: f9 1f adc r31, r25 - 1842: 01 90 ld r0, Z+ - 1844: f0 81 ld r31, Z - 1846: e0 2d mov r30, r0 - 1848: 00 84 ldd r0, Z+8 ; 0x08 - 184a: f1 85 ldd r31, Z+9 ; 0x09 - 184c: e0 2d mov r30, r0 - 184e: 30 97 sbiw r30, 0x00 ; 0 - 1850: 09 f0 breq .+2 ; 0x1854 + 1884: ec 2f mov r30, r28 + 1886: f0 e0 ldi r31, 0x00 ; 0 + 1888: ee 0f add r30, r30 + 188a: ff 1f adc r31, r31 + 188c: 12 96 adiw r26, 0x02 ; 2 + 188e: 8d 91 ld r24, X+ + 1890: 9c 91 ld r25, X + 1892: 13 97 sbiw r26, 0x03 ; 3 + 1894: e8 0f add r30, r24 + 1896: f9 1f adc r31, r25 + 1898: 01 90 ld r0, Z+ + 189a: f0 81 ld r31, Z + 189c: e0 2d mov r30, r0 + 189e: 00 84 ldd r0, Z+8 ; 0x08 + 18a0: f1 85 ldd r31, Z+9 ; 0x09 + 18a2: e0 2d mov r30, r0 + 18a4: 30 97 sbiw r30, 0x00 ; 0 + 18a6: 09 f0 breq .+2 ; 0x18aa udc_ptr_conf->udi_apis[iface_num]->sof_notify(); - 1852: 09 95 icall + 18a8: 09 95 icall uint8_t iface_num; if (udc_num_configuration) { for (iface_num = 0; iface_num < udc_ptr_conf->desc->bNumInterfaces; iface_num++) { - 1854: cf 5f subi r28, 0xFF ; 255 + 18aa: cf 5f subi r28, 0xFF ; 255 { uint8_t iface_num; if (udc_num_configuration) { for (iface_num = 0; iface_num < udc_ptr_conf->desc->bNumInterfaces; - 1856: a0 91 9f 20 lds r26, 0x209F ; 0x80209f - 185a: b0 91 a0 20 lds r27, 0x20A0 ; 0x8020a0 - 185e: ed 91 ld r30, X+ - 1860: fc 91 ld r31, X - 1862: 11 97 sbiw r26, 0x01 ; 1 + 18ac: a0 91 9f 20 lds r26, 0x209F ; 0x80209f + 18b0: b0 91 a0 20 lds r27, 0x20A0 ; 0x8020a0 + 18b4: ed 91 ld r30, X+ + 18b6: fc 91 ld r31, X + 18b8: 11 97 sbiw r26, 0x01 ; 1 void udc_sof_notify(void) { uint8_t iface_num; if (udc_num_configuration) { for (iface_num = 0; - 1864: 84 81 ldd r24, Z+4 ; 0x04 - 1866: c8 17 cp r28, r24 - 1868: 10 f3 brcs .-60 ; 0x182e + 18ba: 84 81 ldd r24, Z+4 ; 0x04 + 18bc: c8 17 cp r28, r24 + 18be: 10 f3 brcs .-60 ; 0x1884 if (udc_ptr_conf->udi_apis[iface_num]->sof_notify != NULL) { udc_ptr_conf->udi_apis[iface_num]->sof_notify(); } } } } - 186a: cf 91 pop r28 - 186c: 08 95 ret + 18c0: cf 91 pop r28 + 18c2: 08 95 ret -0000186e : +000018c4 : * sent to a specific application callback. * * \return true if the request is supported, else the request is stalled by UDD */ bool udc_process_setup(void) { - 186e: 0f 93 push r16 - 1870: 1f 93 push r17 - 1872: cf 93 push r28 - 1874: df 93 push r29 + 18c4: 0f 93 push r16 + 18c6: 1f 93 push r17 + 18c8: cf 93 push r28 + 18ca: df 93 push r29 // By default no data (receive/send) and no callbacks registered udd_g_ctrlreq.payload_size = 0; - 1876: ea e9 ldi r30, 0x9A ; 154 - 1878: f3 e2 ldi r31, 0x23 ; 35 - 187a: 12 86 std Z+10, r1 ; 0x0a - 187c: 13 86 std Z+11, r1 ; 0x0b + 18cc: ea e9 ldi r30, 0x9A ; 154 + 18ce: f3 e2 ldi r31, 0x23 ; 35 + 18d0: 12 86 std Z+10, r1 ; 0x0a + 18d2: 13 86 std Z+11, r1 ; 0x0b udd_g_ctrlreq.callback = NULL; - 187e: 14 86 std Z+12, r1 ; 0x0c - 1880: 15 86 std Z+13, r1 ; 0x0d + 18d4: 14 86 std Z+12, r1 ; 0x0c + 18d6: 15 86 std Z+13, r1 ; 0x0d udd_g_ctrlreq.over_under_run = NULL; - 1882: 16 86 std Z+14, r1 ; 0x0e - 1884: 17 86 std Z+15, r1 ; 0x0f + 18d8: 16 86 std Z+14, r1 ; 0x0e + 18da: 17 86 std Z+15, r1 ; 0x0f if (Udd_setup_is_in()) { - 1886: 80 81 ld r24, Z - 1888: 28 2f mov r18, r24 - 188a: 88 23 and r24, r24 - 188c: 3c f4 brge .+14 ; 0x189c + 18dc: 80 81 ld r24, Z + 18de: 28 2f mov r18, r24 + 18e0: 88 23 and r24, r24 + 18e2: 3c f4 brge .+14 ; 0x18f2 if (udd_g_ctrlreq.req.wLength == 0) { - 188e: 40 91 a0 23 lds r20, 0x23A0 ; 0x8023a0 - 1892: 50 91 a1 23 lds r21, 0x23A1 ; 0x8023a1 - 1896: 45 2b or r20, r21 - 1898: 09 f4 brne .+2 ; 0x189c - 189a: 69 c3 rjmp .+1746 ; 0x1f6e + 18e4: 40 91 a0 23 lds r20, 0x23A0 ; 0x8023a0 + 18e8: 50 91 a1 23 lds r21, 0x23A1 ; 0x8023a1 + 18ec: 45 2b or r20, r21 + 18ee: 09 f4 brne .+2 ; 0x18f2 + 18f0: 6c c3 rjmp .+1752 ; 0x1fca return false; // Error from USB host } } if (Udd_setup_type() == USB_REQ_TYPE_VENDOR){ - 189c: 98 2f mov r25, r24 - 189e: 90 76 andi r25, 0x60 ; 96 - 18a0: 90 34 cpi r25, 0x40 ; 64 - 18a2: 09 f0 breq .+2 ; 0x18a6 - 18a4: 0a c1 rjmp .+532 ; 0x1aba + 18f2: 98 2f mov r25, r24 + 18f4: 90 76 andi r25, 0x60 ; 96 + 18f6: 90 34 cpi r25, 0x40 ; 64 + 18f8: 09 f0 breq .+2 ; 0x18fc + 18fa: 0d c1 rjmp .+538 ; 0x1b16 } return false; } static bool udc_reqvend(void){ switch (udd_g_ctrlreq.req.bRequest){ - 18a6: e0 91 9b 23 lds r30, 0x239B ; 0x80239b - 18aa: 4e 2f mov r20, r30 - 18ac: 50 e0 ldi r21, 0x00 ; 0 - 18ae: fa 01 movw r30, r20 - 18b0: e0 5a subi r30, 0xA0 ; 160 - 18b2: f1 09 sbc r31, r1 - 18b4: e9 30 cpi r30, 0x09 ; 9 - 18b6: f1 05 cpc r31, r1 - 18b8: 08 f0 brcs .+2 ; 0x18bc - 18ba: ff c0 rjmp .+510 ; 0x1aba - 18bc: ea 5f subi r30, 0xFA ; 250 - 18be: fe 4f sbci r31, 0xFE ; 254 - 18c0: 0c 94 8e 17 jmp 0x2f1c ; 0x2f1c <__tablejump2__> + 18fc: e0 91 9b 23 lds r30, 0x239B ; 0x80239b + 1900: 4e 2f mov r20, r30 + 1902: 50 e0 ldi r21, 0x00 ; 0 + 1904: fa 01 movw r30, r20 + 1906: e0 5a subi r30, 0xA0 ; 160 + 1908: f1 09 sbc r31, r1 + 190a: e9 30 cpi r30, 0x09 ; 9 + 190c: f1 05 cpc r31, r1 + 190e: 08 f0 brcs .+2 ; 0x1912 + 1910: 02 c1 rjmp .+516 ; 0x1b16 + 1912: e2 5f subi r30, 0xF2 ; 242 + 1914: fe 4f sbci r31, 0xFE ; 254 + 1916: 0c 94 bc 17 jmp 0x2f78 ; 0x2f78 <__tablejump2__> case 0xa0: //Break! (Debug command) debugOnNextEnd = 1; - 18c4: 81 e0 ldi r24, 0x01 ; 1 - 18c6: 80 93 92 20 sts 0x2092, r24 ; 0x802092 + 191a: 81 e0 ldi r24, 0x01 ; 1 + 191c: 80 93 92 20 sts 0x2092, r24 ; 0x802092 uds.medianTrfcntL = median_TRFCNT & 0xff; - 18ca: 80 91 07 20 lds r24, 0x2007 ; 0x802007 - 18ce: 90 91 08 20 lds r25, 0x2008 ; 0x802008 - 18d2: ee e7 ldi r30, 0x7E ; 126 - 18d4: f1 e2 ldi r31, 0x21 ; 33 - 18d6: 85 87 std Z+13, r24 ; 0x0d + 1920: 80 91 07 20 lds r24, 0x2007 ; 0x802007 + 1924: 90 91 08 20 lds r25, 0x2008 ; 0x802008 + 1928: ee e7 ldi r30, 0x7E ; 126 + 192a: f1 e2 ldi r31, 0x21 ; 33 + 192c: 85 87 std Z+13, r24 ; 0x0d uds.medianTrfcntH = (median_TRFCNT >> 8) & 0xff; - 18d8: 80 91 07 20 lds r24, 0x2007 ; 0x802007 - 18dc: 90 91 08 20 lds r25, 0x2008 ; 0x802008 - 18e0: 96 87 std Z+14, r25 ; 0x0e + 192e: 80 91 07 20 lds r24, 0x2007 ; 0x802007 + 1932: 90 91 08 20 lds r25, 0x2008 ; 0x802008 + 1936: 96 87 std Z+14, r25 ; 0x0e uds.calValNeg = cali_value_negative_gradient; - 18e2: 80 91 72 21 lds r24, 0x2172 ; 0x802172 - 18e6: 87 87 std Z+15, r24 ; 0x0f + 1938: 80 91 72 21 lds r24, 0x2172 ; 0x802172 + 193c: 87 87 std Z+15, r24 ; 0x0f uds.calValPos = cali_value_positive_gradient; - 18e8: 80 91 6f 21 lds r24, 0x216F ; 0x80216f - 18ec: 80 8b std Z+16, r24 ; 0x10 + 193e: 80 91 6f 21 lds r24, 0x216F ; 0x80216f + 1942: 80 8b std Z+16, r24 ; 0x10 uds.CALA = DFLLRC2M.CALA; - 18ee: a8 e6 ldi r26, 0x68 ; 104 - 18f0: b0 e0 ldi r27, 0x00 ; 0 - 18f2: 12 96 adiw r26, 0x02 ; 2 - 18f4: 8c 91 ld r24, X - 18f6: 12 97 sbiw r26, 0x02 ; 2 - 18f8: 81 8b std Z+17, r24 ; 0x11 + 1944: a8 e6 ldi r26, 0x68 ; 104 + 1946: b0 e0 ldi r27, 0x00 ; 0 + 1948: 12 96 adiw r26, 0x02 ; 2 + 194a: 8c 91 ld r24, X + 194c: 12 97 sbiw r26, 0x02 ; 2 + 194e: 81 8b std Z+17, r24 ; 0x11 uds.CALB = DFLLRC2M.CALB; - 18fa: 13 96 adiw r26, 0x03 ; 3 - 18fc: 8c 91 ld r24, X - 18fe: 82 8b std Z+18, r24 ; 0x12 + 1950: 13 96 adiw r26, 0x03 ; 3 + 1952: 8c 91 ld r24, X + 1954: 82 8b std Z+18, r24 ; 0x12 udd_set_setup_payload(&uds, udd_g_ctrlreq.req.wLength); - 1900: 60 91 a0 23 lds r22, 0x23A0 ; 0x8023a0 - 1904: 70 91 a1 23 lds r23, 0x23A1 ; 0x8023a1 - 1908: cf 01 movw r24, r30 - 190a: 2d d7 rcall .+3674 ; 0x2766 - 190c: 34 c3 rjmp .+1640 ; 0x1f76 + 1956: 60 91 a0 23 lds r22, 0x23A0 ; 0x8023a0 + 195a: 70 91 a1 23 lds r23, 0x23A1 ; 0x8023a1 + 195e: cf 01 movw r24, r30 + 1960: 30 d7 rcall .+3680 ; 0x27c2 + 1962: 37 c3 rjmp .+1646 ; 0x1fd2 //asm("nop"); return 1; case 0xa1: //Receive waveform for signal gen TC_DAC.CTRLA = 0x00; - 190e: e0 e0 ldi r30, 0x00 ; 0 - 1910: f8 e0 ldi r31, 0x08 ; 8 - 1912: 10 82 st Z, r1 + 1964: e0 e0 ldi r30, 0x00 ; 0 + 1966: f8 e0 ldi r31, 0x08 ; 8 + 1968: 10 82 st Z, r1 TC_DAC.PERBUF = udd_g_ctrlreq.req.wValue; - 1914: ca e9 ldi r28, 0x9A ; 154 - 1916: d3 e2 ldi r29, 0x23 ; 35 - 1918: 8a 81 ldd r24, Y+2 ; 0x02 - 191a: 9b 81 ldd r25, Y+3 ; 0x03 - 191c: 86 ab std Z+54, r24 ; 0x36 - 191e: 97 ab std Z+55, r25 ; 0x37 + 196a: ca e9 ldi r28, 0x9A ; 154 + 196c: d3 e2 ldi r29, 0x23 ; 35 + 196e: 8a 81 ldd r24, Y+2 ; 0x02 + 1970: 9b 81 ldd r25, Y+3 ; 0x03 + 1972: 86 ab std Z+54, r24 ; 0x36 + 1974: 97 ab std Z+55, r25 ; 0x37 TC_DAC.CTRLA = (unsigned char) udd_g_ctrlreq.req.wIndex & 0x0F; - 1920: 8c 81 ldd r24, Y+4 ; 0x04 - 1922: 8f 70 andi r24, 0x0F ; 15 - 1924: 80 83 st Z, r24 + 1976: 8c 81 ldd r24, Y+4 ; 0x04 + 1978: 8f 70 andi r24, 0x0F ; 15 + 197a: 80 83 st Z, r24 udd_set_setup_payload(dacBuf_CH1, udd_g_ctrlreq.req.wLength); - 1926: 6e 81 ldd r22, Y+6 ; 0x06 - 1928: 7f 81 ldd r23, Y+7 ; 0x07 - 192a: 8a e9 ldi r24, 0x9A ; 154 - 192c: 91 e2 ldi r25, 0x21 ; 33 - 192e: 1b d7 rcall .+3638 ; 0x2766 + 197c: 6e 81 ldd r22, Y+6 ; 0x06 + 197e: 7f 81 ldd r23, Y+7 ; 0x07 + 1980: 8a e9 ldi r24, 0x9A ; 154 + 1982: 91 e2 ldi r25, 0x21 ; 33 + 1984: 1e d7 rcall .+3644 ; 0x27c2 if(dacBuf_len != udd_g_ctrlreq.req.wLength){ - 1930: 8e 81 ldd r24, Y+6 ; 0x06 - 1932: 9f 81 ldd r25, Y+7 ; 0x07 - 1934: 20 91 0d 20 lds r18, 0x200D ; 0x80200d - 1938: 30 91 0e 20 lds r19, 0x200E ; 0x80200e - 193c: 82 17 cp r24, r18 - 193e: 93 07 cpc r25, r19 - 1940: 09 f4 brne .+2 ; 0x1944 - 1942: 19 c3 rjmp .+1586 ; 0x1f76 + 1986: 8e 81 ldd r24, Y+6 ; 0x06 + 1988: 9f 81 ldd r25, Y+7 ; 0x07 + 198a: 20 91 0d 20 lds r18, 0x200D ; 0x80200d + 198e: 30 91 0e 20 lds r19, 0x200E ; 0x80200e + 1992: 82 17 cp r24, r18 + 1994: 93 07 cpc r25, r19 + 1996: 09 f4 brne .+2 ; 0x199a + 1998: 1c c3 rjmp .+1592 ; 0x1fd2 dacBuf_len = udd_g_ctrlreq.req.wLength; - 1944: 80 93 0d 20 sts 0x200D, r24 ; 0x80200d - 1948: 90 93 0e 20 sts 0x200E, r25 ; 0x80200e + 199a: 80 93 0d 20 sts 0x200D, r24 ; 0x80200d + 199e: 90 93 0e 20 sts 0x200E, r25 ; 0x80200e tiny_dma_delayed_set(global_mode); - 194c: 80 91 09 20 lds r24, 0x2009 ; 0x802009 - 1950: f3 d8 rcall .-3610 ; 0xb38 - 1952: 11 c3 rjmp .+1570 ; 0x1f76 + 19a2: 80 91 09 20 lds r24, 0x2009 ; 0x802009 + 19a6: be d8 rcall .-3716 ; 0xb24 + 19a8: 14 c3 rjmp .+1576 ; 0x1fd2 } return 1; case 0xa2: //CH2 waveform TC_AUXDAC.CTRLA = 0x00; - 1954: e0 e4 ldi r30, 0x40 ; 64 - 1956: f8 e0 ldi r31, 0x08 ; 8 - 1958: 10 82 st Z, r1 + 19aa: e0 e4 ldi r30, 0x40 ; 64 + 19ac: f8 e0 ldi r31, 0x08 ; 8 + 19ae: 10 82 st Z, r1 TC_AUXDAC.PERBUF = udd_g_ctrlreq.req.wValue; - 195a: ca e9 ldi r28, 0x9A ; 154 - 195c: d3 e2 ldi r29, 0x23 ; 35 - 195e: 8a 81 ldd r24, Y+2 ; 0x02 - 1960: 9b 81 ldd r25, Y+3 ; 0x03 - 1962: 86 ab std Z+54, r24 ; 0x36 - 1964: 97 ab std Z+55, r25 ; 0x37 + 19b0: ca e9 ldi r28, 0x9A ; 154 + 19b2: d3 e2 ldi r29, 0x23 ; 35 + 19b4: 8a 81 ldd r24, Y+2 ; 0x02 + 19b6: 9b 81 ldd r25, Y+3 ; 0x03 + 19b8: 86 ab std Z+54, r24 ; 0x36 + 19ba: 97 ab std Z+55, r25 ; 0x37 TC_AUXDAC.CTRLA = (unsigned char) udd_g_ctrlreq.req.wIndex & 0x0F; - 1966: 8c 81 ldd r24, Y+4 ; 0x04 - 1968: 8f 70 andi r24, 0x0F ; 15 - 196a: 80 83 st Z, r24 + 19bc: 8c 81 ldd r24, Y+4 ; 0x04 + 19be: 8f 70 andi r24, 0x0F ; 15 + 19c0: 80 83 st Z, r24 udd_set_setup_payload(dacBuf_CH2, udd_g_ctrlreq.req.wLength); - 196c: 6e 81 ldd r22, Y+6 ; 0x06 - 196e: 7f 81 ldd r23, Y+7 ; 0x07 - 1970: 8b ea ldi r24, 0xAB ; 171 - 1972: 93 e2 ldi r25, 0x23 ; 35 - 1974: f8 d6 rcall .+3568 ; 0x2766 + 19c2: 6e 81 ldd r22, Y+6 ; 0x06 + 19c4: 7f 81 ldd r23, Y+7 ; 0x07 + 19c6: 8b ea ldi r24, 0xAB ; 171 + 19c8: 93 e2 ldi r25, 0x23 ; 35 + 19ca: fb d6 rcall .+3574 ; 0x27c2 if(auxDacBufLen != udd_g_ctrlreq.req.wLength){ - 1976: 8e 81 ldd r24, Y+6 ; 0x06 - 1978: 9f 81 ldd r25, Y+7 ; 0x07 - 197a: 20 91 0b 20 lds r18, 0x200B ; 0x80200b - 197e: 30 91 0c 20 lds r19, 0x200C ; 0x80200c - 1982: 82 17 cp r24, r18 - 1984: 93 07 cpc r25, r19 - 1986: 09 f4 brne .+2 ; 0x198a - 1988: f6 c2 rjmp .+1516 ; 0x1f76 + 19cc: 8e 81 ldd r24, Y+6 ; 0x06 + 19ce: 9f 81 ldd r25, Y+7 ; 0x07 + 19d0: 20 91 0b 20 lds r18, 0x200B ; 0x80200b + 19d4: 30 91 0c 20 lds r19, 0x200C ; 0x80200c + 19d8: 82 17 cp r24, r18 + 19da: 93 07 cpc r25, r19 + 19dc: 09 f4 brne .+2 ; 0x19e0 + 19de: f9 c2 rjmp .+1522 ; 0x1fd2 auxDacBufLen = udd_g_ctrlreq.req.wLength; - 198a: 80 93 0b 20 sts 0x200B, r24 ; 0x80200b - 198e: 90 93 0c 20 sts 0x200C, r25 ; 0x80200c + 19e0: 80 93 0b 20 sts 0x200B, r24 ; 0x80200b + 19e4: 90 93 0c 20 sts 0x200C, r25 ; 0x80200c tiny_dma_delayed_set(global_mode); - 1992: 80 91 09 20 lds r24, 0x2009 ; 0x802009 - 1996: d0 d8 rcall .-3680 ; 0xb38 - 1998: ee c2 rjmp .+1500 ; 0x1f76 + 19e8: 80 91 09 20 lds r24, 0x2009 ; 0x802009 + 19ec: 9b d8 rcall .-3786 ; 0xb24 + 19ee: f1 c2 rjmp .+1506 ; 0x1fd2 } return 1; case 0xa3: //PSU voltage control TC_PSU.CCA = 0; - 199a: 10 92 68 09 sts 0x0968, r1 ; 0x800968 <__TEXT_REGION_LENGTH__+0x700968> - 199e: 10 92 69 09 sts 0x0969, r1 ; 0x800969 <__TEXT_REGION_LENGTH__+0x700969> + 19f0: 10 92 68 09 sts 0x0968, r1 ; 0x800968 <__TEXT_REGION_LENGTH__+0x700968> + 19f4: 10 92 69 09 sts 0x0969, r1 ; 0x800969 <__TEXT_REGION_LENGTH__+0x700969> PSU_target = udd_g_ctrlreq.req.wValue; - 19a2: 80 91 9c 23 lds r24, 0x239C ; 0x80239c - 19a6: 80 93 95 20 sts 0x2095, r24 ; 0x802095 - 19aa: e5 c2 rjmp .+1482 ; 0x1f76 + 19f8: 80 91 9c 23 lds r24, 0x239C ; 0x80239c + 19fc: 80 93 95 20 sts 0x2095, r24 ; 0x802095 + 1a00: e8 c2 rjmp .+1488 ; 0x1fd2 return 1; case 0xa4: //Triple mode PORTB.OUT = udd_g_ctrlreq.req.wValue; - 19ac: 80 91 9c 23 lds r24, 0x239C ; 0x80239c - 19b0: 80 93 24 06 sts 0x0624, r24 ; 0x800624 <__TEXT_REGION_LENGTH__+0x700624> - 19b4: e0 c2 rjmp .+1472 ; 0x1f76 + 1a02: 80 91 9c 23 lds r24, 0x239C ; 0x80239c + 1a06: 80 93 24 06 sts 0x0624, r24 ; 0x800624 <__TEXT_REGION_LENGTH__+0x700624> + 1a0a: e3 c2 rjmp .+1478 ; 0x1fd2 return 1; case 0xa5: //Control Gain and Scope modes switch(udd_g_ctrlreq.req.wValue){ - 19b6: e0 91 9c 23 lds r30, 0x239C ; 0x80239c - 19ba: f0 91 9d 23 lds r31, 0x239D ; 0x80239d - 19be: e8 30 cpi r30, 0x08 ; 8 - 19c0: f1 05 cpc r31, r1 - 19c2: 08 f0 brcs .+2 ; 0x19c6 - 19c4: 7a c0 rjmp .+244 ; 0x1aba - 19c6: e1 5f subi r30, 0xF1 ; 241 - 19c8: fe 4f sbci r31, 0xFE ; 254 - 19ca: 0c 94 8e 17 jmp 0x2f1c ; 0x2f1c <__tablejump2__> + 1a0c: e0 91 9c 23 lds r30, 0x239C ; 0x80239c + 1a10: f0 91 9d 23 lds r31, 0x239D ; 0x80239d + 1a14: e8 30 cpi r30, 0x08 ; 8 + 1a16: f1 05 cpc r31, r1 + 1a18: 08 f0 brcs .+2 ; 0x1a1c + 1a1a: 7d c0 rjmp .+250 ; 0x1b16 + 1a1c: e9 5e subi r30, 0xE9 ; 233 + 1a1e: fe 4f sbci r31, 0xFE ; 254 + 1a20: 0c 94 bc 17 jmp 0x2f78 ; 0x2f78 <__tablejump2__> case 0: //Mode 0 tiny_adc_setup(0, 0); - 19ce: 60 e0 ldi r22, 0x00 ; 0 - 19d0: 80 e0 ldi r24, 0x00 ; 0 - 19d2: 18 d8 rcall .-4048 ; 0xa04 + 1a24: 60 e0 ldi r22, 0x00 ; 0 + 1a26: 80 e0 ldi r24, 0x00 ; 0 + 1a28: 0e 94 f8 04 call 0x9f0 ; 0x9f0 tiny_adc_ch0setup(udd_g_ctrlreq.req.wIndex); - 19d4: 80 91 9e 23 lds r24, 0x239E ; 0x80239e - 19d8: 0e 94 d6 04 call 0x9ac ; 0x9ac + 1a2c: 80 91 9e 23 lds r24, 0x239E ; 0x80239e + 1a30: 0e 94 cc 04 call 0x998 ; 0x998 tiny_dma_delayed_set(0); - 19dc: 80 e0 ldi r24, 0x00 ; 0 - 19de: ac d8 rcall .-3752 ; 0xb38 - 19e0: ca c2 rjmp .+1428 ; 0x1f76 + 1a34: 80 e0 ldi r24, 0x00 ; 0 + 1a36: 76 d8 rcall .-3860 ; 0xb24 + 1a38: cc c2 rjmp .+1432 ; 0x1fd2 break; case 1: //Mode 1 tiny_adc_setup(0, 0); - 19e2: 60 e0 ldi r22, 0x00 ; 0 - 19e4: 80 e0 ldi r24, 0x00 ; 0 - 19e6: 0e d8 rcall .-4068 ; 0xa04 + 1a3a: 60 e0 ldi r22, 0x00 ; 0 + 1a3c: 80 e0 ldi r24, 0x00 ; 0 + 1a3e: 0e 94 f8 04 call 0x9f0 ; 0x9f0 tiny_adc_ch0setup(udd_g_ctrlreq.req.wIndex); - 19e8: 80 91 9e 23 lds r24, 0x239E ; 0x80239e - 19ec: 0e 94 d6 04 call 0x9ac ; 0x9ac + 1a42: 80 91 9e 23 lds r24, 0x239E ; 0x80239e + 1a46: 0e 94 cc 04 call 0x998 ; 0x998 tiny_dma_delayed_set(1); - 19f0: 81 e0 ldi r24, 0x01 ; 1 - 19f2: a2 d8 rcall .-3772 ; 0xb38 - 19f4: c0 c2 rjmp .+1408 ; 0x1f76 + 1a4a: 81 e0 ldi r24, 0x01 ; 1 + 1a4c: 6b d8 rcall .-3882 ; 0xb24 + 1a4e: c1 c2 rjmp .+1410 ; 0x1fd2 break; case 2: //Mode 2 tiny_adc_setup(1, 1); - 19f6: 61 e0 ldi r22, 0x01 ; 1 - 19f8: 81 e0 ldi r24, 0x01 ; 1 - 19fa: 04 d8 rcall .-4088 ; 0xa04 + 1a50: 61 e0 ldi r22, 0x01 ; 1 + 1a52: 81 e0 ldi r24, 0x01 ; 1 + 1a54: 0e 94 f8 04 call 0x9f0 ; 0x9f0 tiny_adc_ch0setup(udd_g_ctrlreq.req.wIndex); - 19fc: ca e9 ldi r28, 0x9A ; 154 - 19fe: d3 e2 ldi r29, 0x23 ; 35 - 1a00: 8c 81 ldd r24, Y+4 ; 0x04 - 1a02: 0e 94 d6 04 call 0x9ac ; 0x9ac + 1a58: ca e9 ldi r28, 0x9A ; 154 + 1a5a: d3 e2 ldi r29, 0x23 ; 35 + 1a5c: 8c 81 ldd r24, Y+4 ; 0x04 + 1a5e: 0e 94 cc 04 call 0x998 ; 0x998 tiny_adc_ch1setup(udd_g_ctrlreq.req.wIndex>>8); - 1a06: 8d 81 ldd r24, Y+5 ; 0x05 - 1a08: 0e 94 e5 04 call 0x9ca ; 0x9ca + 1a62: 8d 81 ldd r24, Y+5 ; 0x05 + 1a64: 0e 94 db 04 call 0x9b6 ; 0x9b6 tiny_dma_delayed_set(2); - 1a0c: 82 e0 ldi r24, 0x02 ; 2 - 1a0e: 94 d8 rcall .-3800 ; 0xb38 - 1a10: b2 c2 rjmp .+1380 ; 0x1f76 + 1a68: 82 e0 ldi r24, 0x02 ; 2 + 1a6a: 5c d8 rcall .-3912 ; 0xb24 + 1a6c: b2 c2 rjmp .+1380 ; 0x1fd2 break; case 3: //Mode 3 tiny_dma_delayed_set(3); - 1a12: 83 e0 ldi r24, 0x03 ; 3 - 1a14: 91 d8 rcall .-3806 ; 0xb38 - 1a16: af c2 rjmp .+1374 ; 0x1f76 + 1a6e: 83 e0 ldi r24, 0x03 ; 3 + 1a70: 59 d8 rcall .-3918 ; 0xb24 + 1a72: af c2 rjmp .+1374 ; 0x1fd2 break; case 4: //Mode 4 tiny_dma_delayed_set(4); - 1a18: 84 e0 ldi r24, 0x04 ; 4 - 1a1a: 8e d8 rcall .-3812 ; 0xb38 - 1a1c: ac c2 rjmp .+1368 ; 0x1f76 + 1a74: 84 e0 ldi r24, 0x04 ; 4 + 1a76: 56 d8 rcall .-3924 ; 0xb24 + 1a78: ac c2 rjmp .+1368 ; 0x1fd2 break; case 5: //Mode 5 tiny_adc_setup(0, 0); - 1a1e: 60 e0 ldi r22, 0x00 ; 0 - 1a20: 80 e0 ldi r24, 0x00 ; 0 - 1a22: 0e 94 02 05 call 0xa04 ; 0xa04 + 1a7a: 60 e0 ldi r22, 0x00 ; 0 + 1a7c: 80 e0 ldi r24, 0x00 ; 0 + 1a7e: 0e 94 f8 04 call 0x9f0 ; 0x9f0 tiny_adc_ch0setup(udd_g_ctrlreq.req.wIndex); - 1a26: 80 91 9e 23 lds r24, 0x239E ; 0x80239e - 1a2a: 0e 94 d6 04 call 0x9ac ; 0x9ac + 1a82: 80 91 9e 23 lds r24, 0x239E ; 0x80239e + 1a86: 0e 94 cc 04 call 0x998 ; 0x998 tiny_dma_delayed_set(5); - 1a2e: 85 e0 ldi r24, 0x05 ; 5 - 1a30: 83 d8 rcall .-3834 ; 0xb38 - 1a32: a1 c2 rjmp .+1346 ; 0x1f76 + 1a8a: 85 e0 ldi r24, 0x05 ; 5 + 1a8c: 4b d8 rcall .-3946 ; 0xb24 + 1a8e: a1 c2 rjmp .+1346 ; 0x1fd2 break; case 6: //Mode 6 tiny_adc_setup(0, 1); - 1a34: 61 e0 ldi r22, 0x01 ; 1 - 1a36: 80 e0 ldi r24, 0x00 ; 0 - 1a38: 0e 94 02 05 call 0xa04 ; 0xa04 + 1a90: 61 e0 ldi r22, 0x01 ; 1 + 1a92: 80 e0 ldi r24, 0x00 ; 0 + 1a94: 0e 94 f8 04 call 0x9f0 ; 0x9f0 tiny_adc_ch0setup(udd_g_ctrlreq.req.wIndex); - 1a3c: 80 91 9e 23 lds r24, 0x239E ; 0x80239e - 1a40: 0e 94 d6 04 call 0x9ac ; 0x9ac + 1a98: 80 91 9e 23 lds r24, 0x239E ; 0x80239e + 1a9c: 0e 94 cc 04 call 0x998 ; 0x998 tiny_dma_delayed_set(6); - 1a44: 86 e0 ldi r24, 0x06 ; 6 - 1a46: 78 d8 rcall .-3856 ; 0xb38 - 1a48: 96 c2 rjmp .+1324 ; 0x1f76 + 1aa0: 86 e0 ldi r24, 0x06 ; 6 + 1aa2: 40 d8 rcall .-3968 ; 0xb24 + 1aa4: 96 c2 rjmp .+1324 ; 0x1fd2 break; case 7: //Mode 7 tiny_adc_setup(0, 2); - 1a4a: 62 e0 ldi r22, 0x02 ; 2 - 1a4c: 80 e0 ldi r24, 0x00 ; 0 - 1a4e: 0e 94 02 05 call 0xa04 ; 0xa04 + 1aa6: 62 e0 ldi r22, 0x02 ; 2 + 1aa8: 80 e0 ldi r24, 0x00 ; 0 + 1aaa: 0e 94 f8 04 call 0x9f0 ; 0x9f0 tiny_adc_ch0setup(udd_g_ctrlreq.req.wIndex | 0x80); - 1a52: 80 91 9e 23 lds r24, 0x239E ; 0x80239e - 1a56: 80 68 ori r24, 0x80 ; 128 - 1a58: 0e 94 d6 04 call 0x9ac ; 0x9ac + 1aae: 80 91 9e 23 lds r24, 0x239E ; 0x80239e + 1ab2: 80 68 ori r24, 0x80 ; 128 + 1ab4: 0e 94 cc 04 call 0x998 ; 0x998 tiny_dma_delayed_set(7); - 1a5c: 87 e0 ldi r24, 0x07 ; 7 - 1a5e: 6c d8 rcall .-3880 ; 0xb38 - 1a60: 8a c2 rjmp .+1300 ; 0x1f76 + 1ab8: 87 e0 ldi r24, 0x07 ; 7 + 1aba: 34 d8 rcall .-3992 ; 0xb24 + 1abc: 8a c2 rjmp .+1300 ; 0x1fd2 default: return 0; } return 1; case 0xa6: //Digital out??? PORTE.OUT = udd_g_ctrlreq.req.wValue; - 1a62: 80 91 9c 23 lds r24, 0x239C ; 0x80239c - 1a66: 80 93 84 06 sts 0x0684, r24 ; 0x800684 <__TEXT_REGION_LENGTH__+0x700684> - 1a6a: 85 c2 rjmp .+1290 ; 0x1f76 + 1abe: 80 91 9c 23 lds r24, 0x239C ; 0x80239c + 1ac2: 80 93 84 06 sts 0x0684, r24 ; 0x800684 <__TEXT_REGION_LENGTH__+0x700684> + 1ac6: 85 c2 rjmp .+1290 ; 0x1fd2 return 1; case 0xa7: //Soft Reset //Fill EEPROM buffer with value if(udd_g_ctrlreq.req.wValue){ - 1a6c: 80 91 9c 23 lds r24, 0x239C ; 0x80239c - 1a70: 90 91 9d 23 lds r25, 0x239D ; 0x80239d - 1a74: 89 2b or r24, r25 - 1a76: 91 f0 breq .+36 ; 0x1a9c + 1ac8: 80 91 9c 23 lds r24, 0x239C ; 0x80239c + 1acc: 90 91 9d 23 lds r25, 0x239D ; 0x80239d + 1ad0: 89 2b or r24, r25 + 1ad2: 91 f0 breq .+36 ; 0x1af8 eeprom_safe_read(); - 1a78: 0e 94 85 03 call 0x70a ; 0x70a + 1ad4: 0e 94 8d 03 call 0x71a ; 0x71a memcpy(eeprom_buffer_write, eeprom_buffer_read, EEPROM_PAGE_SIZE); - 1a7c: 80 e2 ldi r24, 0x20 ; 32 - 1a7e: e8 ea ldi r30, 0xA8 ; 168 - 1a80: fb e2 ldi r31, 0x2B ; 43 - 1a82: ab ea ldi r26, 0xAB ; 171 - 1a84: b5 e2 ldi r27, 0x25 ; 37 - 1a86: 01 90 ld r0, Z+ - 1a88: 0d 92 st X+, r0 - 1a8a: 8a 95 dec r24 - 1a8c: e1 f7 brne .-8 ; 0x1a86 + 1ad8: 80 e2 ldi r24, 0x20 ; 32 + 1ada: e8 ea ldi r30, 0xA8 ; 168 + 1adc: fb e2 ldi r31, 0x2B ; 43 + 1ade: ab ea ldi r26, 0xAB ; 171 + 1ae0: b5 e2 ldi r27, 0x25 ; 37 + 1ae2: 01 90 ld r0, Z+ + 1ae4: 0d 92 st X+, r0 + 1ae6: 8a 95 dec r24 + 1ae8: e1 f7 brne .-8 ; 0x1ae2 eeprom_buffer_write[0] = 1; - 1a8e: 81 e0 ldi r24, 0x01 ; 1 - 1a90: 80 93 ab 25 sts 0x25AB, r24 ; 0x8025ab + 1aea: 81 e0 ldi r24, 0x01 ; 1 + 1aec: 80 93 ab 25 sts 0x25AB, r24 ; 0x8025ab eeprom_safe_write(); - 1a94: 0e 94 9a 03 call 0x734 ; 0x734 + 1af0: 0e 94 a2 03 call 0x744 ; 0x744 eeprom_safe_read(); - 1a98: 0e 94 85 03 call 0x70a ; 0x70a + 1af4: 0e 94 8d 03 call 0x71a ; 0x71a } //Code here from SprinterSB //http://www.avrfreaks.net/comment/872674 //I don't understand it, but it seems to do the job __asm volatile ("cli" "\n\t" - 1a9c: e9 e7 ldi r30, 0x79 ; 121 - 1a9e: f0 e0 ldi r31, 0x00 ; 0 - 1aa0: 91 e0 ldi r25, 0x01 ; 1 - 1aa2: 88 ed ldi r24, 0xD8 ; 216 - 1aa4: f8 94 cli - 1aa6: 84 bf out 0x34, r24 ; 52 - 1aa8: 90 83 st Z, r25 + 1af8: e9 e7 ldi r30, 0x79 ; 121 + 1afa: f0 e0 ldi r31, 0x00 ; 0 + 1afc: 91 e0 ldi r25, 0x01 ; 1 + 1afe: 88 ed ldi r24, 0xD8 ; 216 + 1b00: f8 94 cli + 1b02: 84 bf out 0x34, r24 ; 52 + 1b04: 90 83 st Z, r25 [swrst] "r" ((uint8_t) RST_SWRST_bm), [rst] "e" (&RST.CTRL) : "memory"); __builtin_unreachable(); case 0xa8: //Firmware Version Request udd_set_setup_payload(&firmver, udd_g_ctrlreq.req.wLength); - 1aaa: 60 91 a0 23 lds r22, 0x23A0 ; 0x8023a0 - 1aae: 70 91 a1 23 lds r23, 0x23A1 ; 0x8023a1 - 1ab2: 8a e8 ldi r24, 0x8A ; 138 - 1ab4: 90 e2 ldi r25, 0x20 ; 32 - 1ab6: 57 d6 rcall .+3246 ; 0x2766 - 1ab8: 5e c2 rjmp .+1212 ; 0x1f76 + 1b06: 60 91 a0 23 lds r22, 0x23A0 ; 0x8023a0 + 1b0a: 70 91 a1 23 lds r23, 0x23A1 ; 0x8023a1 + 1b0e: 8a e8 ldi r24, 0x8A ; 138 + 1b10: 90 e2 ldi r25, 0x20 ; 32 + 1b12: 57 d6 rcall .+3246 ; 0x27c2 + 1b14: 5e c2 rjmp .+1212 ; 0x1fd2 return true; } } // If standard request then try to decode it in UDC if (Udd_setup_type() == USB_REQ_TYPE_STANDARD) { - 1aba: 91 11 cpse r25, r1 - 1abc: e1 c1 rjmp .+962 ; 0x1e80 + 1b16: 91 11 cpse r25, r1 + 1b18: e1 c1 rjmp .+962 ; 0x1edc * * \return true if the request is supported */ static bool udc_reqstd(void) { if (Udd_setup_is_in()) { - 1abe: 22 23 and r18, r18 - 1ac0: 0c f0 brlt .+2 ; 0x1ac4 - 1ac2: 05 c1 rjmp .+522 ; 0x1cce + 1b1a: 22 23 and r18, r18 + 1b1c: 0c f0 brlt .+2 ; 0x1b20 + 1b1e: 05 c1 rjmp .+522 ; 0x1d2a // GET Standard Requests if (udd_g_ctrlreq.req.wLength == 0) { - 1ac4: 20 91 a0 23 lds r18, 0x23A0 ; 0x8023a0 - 1ac8: 30 91 a1 23 lds r19, 0x23A1 ; 0x8023a1 - 1acc: 21 15 cp r18, r1 - 1ace: 31 05 cpc r19, r1 - 1ad0: 09 f4 brne .+2 ; 0x1ad4 - 1ad2: d6 c1 rjmp .+940 ; 0x1e80 + 1b20: 20 91 a0 23 lds r18, 0x23A0 ; 0x8023a0 + 1b24: 30 91 a1 23 lds r19, 0x23A1 ; 0x8023a1 + 1b28: 21 15 cp r18, r1 + 1b2a: 31 05 cpc r19, r1 + 1b2c: 09 f4 brne .+2 ; 0x1b30 + 1b2e: d6 c1 rjmp .+940 ; 0x1edc return false; // Error for USB host } if (USB_REQ_RECIP_DEVICE == Udd_setup_recipient()) { - 1ad4: 8f 71 andi r24, 0x1F ; 31 - 1ad6: 09 f0 breq .+2 ; 0x1ada - 1ad8: a3 c0 rjmp .+326 ; 0x1c20 + 1b30: 8f 71 andi r24, 0x1F ; 31 + 1b32: 09 f0 breq .+2 ; 0x1b36 + 1b34: a3 c0 rjmp .+326 ; 0x1c7c // Standard Get Device request switch (udd_g_ctrlreq.req.bRequest) { - 1ada: 90 91 9b 23 lds r25, 0x239B ; 0x80239b - 1ade: 96 30 cpi r25, 0x06 ; 6 - 1ae0: 79 f0 breq .+30 ; 0x1b00 - 1ae2: 98 30 cpi r25, 0x08 ; 8 - 1ae4: 09 f4 brne .+2 ; 0x1ae8 - 1ae6: 92 c0 rjmp .+292 ; 0x1c0c - 1ae8: 91 11 cpse r25, r1 - 1aea: 9a c0 rjmp .+308 ; 0x1c20 + 1b36: 90 91 9b 23 lds r25, 0x239B ; 0x80239b + 1b3a: 96 30 cpi r25, 0x06 ; 6 + 1b3c: 79 f0 breq .+30 ; 0x1b5c + 1b3e: 98 30 cpi r25, 0x08 ; 8 + 1b40: 09 f4 brne .+2 ; 0x1b44 + 1b42: 92 c0 rjmp .+292 ; 0x1c68 + 1b44: 91 11 cpse r25, r1 + 1b46: 9a c0 rjmp .+308 ; 0x1c7c * * \return true if success */ static bool udc_req_std_dev_get_status(void) { if (udd_g_ctrlreq.req.wLength != sizeof(udc_device_status)) { - 1aec: 22 30 cpi r18, 0x02 ; 2 - 1aee: 31 05 cpc r19, r1 - 1af0: 09 f0 breq .+2 ; 0x1af4 - 1af2: c6 c1 rjmp .+908 ; 0x1e80 + 1b48: 22 30 cpi r18, 0x02 ; 2 + 1b4a: 31 05 cpc r19, r1 + 1b4c: 09 f0 breq .+2 ; 0x1b50 + 1b4e: c6 c1 rjmp .+908 ; 0x1edc return false; } udd_set_setup_payload( (uint8_t *) & udc_device_status, - 1af4: 62 e0 ldi r22, 0x02 ; 2 - 1af6: 70 e0 ldi r23, 0x00 ; 0 - 1af8: 86 ea ldi r24, 0xA6 ; 166 - 1afa: 90 e2 ldi r25, 0x20 ; 32 - 1afc: 34 d6 rcall .+3176 ; 0x2766 - 1afe: 3d c2 rjmp .+1146 ; 0x1f7a + 1b50: 62 e0 ldi r22, 0x02 ; 2 + 1b52: 70 e0 ldi r23, 0x00 ; 0 + 1b54: 86 ea ldi r24, 0xA6 ; 166 + 1b56: 90 e2 ldi r25, 0x20 ; 32 + 1b58: 34 d6 rcall .+3176 ; 0x27c2 + 1b5a: 3d c2 rjmp .+1146 ; 0x1fd6 */ static bool udc_req_std_dev_get_descriptor(void) { uint8_t conf_num; conf_num = udd_g_ctrlreq.req.wValue & 0xff; - 1b00: 80 91 9c 23 lds r24, 0x239C ; 0x80239c - 1b04: 90 91 9d 23 lds r25, 0x239D ; 0x80239d + 1b5c: 80 91 9c 23 lds r24, 0x239C ; 0x80239c + 1b60: 90 91 9d 23 lds r25, 0x239D ; 0x80239d // Check descriptor ID switch ((uint8_t) (udd_g_ctrlreq.req.wValue >> 8)) { - 1b08: 29 2f mov r18, r25 - 1b0a: 33 27 eor r19, r19 - 1b0c: 22 30 cpi r18, 0x02 ; 2 - 1b0e: 31 05 cpc r19, r1 - 1b10: a9 f0 breq .+42 ; 0x1b3c - 1b12: 24 f4 brge .+8 ; 0x1b1c - 1b14: 21 30 cpi r18, 0x01 ; 1 - 1b16: 31 05 cpc r19, r1 - 1b18: 41 f0 breq .+16 ; 0x1b2a - 1b1a: a9 c1 rjmp .+850 ; 0x1e6e - 1b1c: 23 30 cpi r18, 0x03 ; 3 - 1b1e: 31 05 cpc r19, r1 - 1b20: d9 f1 breq .+118 ; 0x1b98 - 1b22: 2f 30 cpi r18, 0x0F ; 15 - 1b24: 31 05 cpc r19, r1 - 1b26: 51 f1 breq .+84 ; 0x1b7c - 1b28: a2 c1 rjmp .+836 ; 0x1e6e + 1b64: 29 2f mov r18, r25 + 1b66: 33 27 eor r19, r19 + 1b68: 22 30 cpi r18, 0x02 ; 2 + 1b6a: 31 05 cpc r19, r1 + 1b6c: a9 f0 breq .+42 ; 0x1b98 + 1b6e: 24 f4 brge .+8 ; 0x1b78 + 1b70: 21 30 cpi r18, 0x01 ; 1 + 1b72: 31 05 cpc r19, r1 + 1b74: 41 f0 breq .+16 ; 0x1b86 + 1b76: a9 c1 rjmp .+850 ; 0x1eca + 1b78: 23 30 cpi r18, 0x03 ; 3 + 1b7a: 31 05 cpc r19, r1 + 1b7c: d9 f1 breq .+118 ; 0x1bf4 + 1b7e: 2f 30 cpi r18, 0x0F ; 15 + 1b80: 31 05 cpc r19, r1 + 1b82: 51 f1 breq .+84 ; 0x1bd8 + 1b84: a2 c1 rjmp .+836 ; 0x1eca } else #endif { udd_set_setup_payload( (uint8_t *) udc_config.confdev_lsfs, udc_config.confdev_lsfs->bLength); - 1b2a: 80 91 19 20 lds r24, 0x2019 ; 0x802019 - 1b2e: 90 91 1a 20 lds r25, 0x201A ; 0x80201a + 1b86: 80 91 19 20 lds r24, 0x2019 ; 0x802019 + 1b8a: 90 91 1a 20 lds r25, 0x201A ; 0x80201a (uint8_t *) udc_config.confdev_hs, udc_config.confdev_hs->bLength); } else #endif { udd_set_setup_payload( - 1b32: dc 01 movw r26, r24 - 1b34: 6c 91 ld r22, X - 1b36: 70 e0 ldi r23, 0x00 ; 0 - 1b38: 16 d6 rcall .+3116 ; 0x2766 - 1b3a: 59 c0 rjmp .+178 ; 0x1bee + 1b8e: dc 01 movw r26, r24 + 1b90: 6c 91 ld r22, X + 1b92: 70 e0 ldi r23, 0x00 ; 0 + 1b94: 16 d6 rcall .+3116 ; 0x27c2 + 1b96: 59 c0 rjmp .+178 ; 0x1c4a le16_to_cpu(udc_config.conf_hs[conf_num].desc->wTotalLength)); } else #endif { // FS descriptor if (conf_num >= udc_config.confdev_lsfs-> - 1b3c: e0 91 19 20 lds r30, 0x2019 ; 0x802019 - 1b40: f0 91 1a 20 lds r31, 0x201A ; 0x80201a - 1b44: 21 89 ldd r18, Z+17 ; 0x11 - 1b46: 82 17 cp r24, r18 - 1b48: 08 f0 brcs .+2 ; 0x1b4c - 1b4a: 9a c1 rjmp .+820 ; 0x1e80 + 1b98: e0 91 19 20 lds r30, 0x2019 ; 0x802019 + 1b9c: f0 91 1a 20 lds r31, 0x201A ; 0x80201a + 1ba0: 21 89 ldd r18, Z+17 ; 0x11 + 1ba2: 82 17 cp r24, r18 + 1ba4: 08 f0 brcs .+2 ; 0x1ba8 + 1ba6: 9a c1 rjmp .+820 ; 0x1edc bNumConfigurations) { return false; } udd_set_setup_payload( (uint8_t *)udc_config.conf_lsfs[conf_num].desc, le16_to_cpu(udc_config.conf_lsfs[conf_num].desc->wTotalLength)); - 1b4c: 99 27 eor r25, r25 - 1b4e: 88 0f add r24, r24 - 1b50: 99 1f adc r25, r25 - 1b52: 88 0f add r24, r24 - 1b54: 99 1f adc r25, r25 - 1b56: e0 91 1b 20 lds r30, 0x201B ; 0x80201b - 1b5a: f0 91 1c 20 lds r31, 0x201C ; 0x80201c - 1b5e: e8 0f add r30, r24 - 1b60: f9 1f adc r31, r25 - 1b62: 80 81 ld r24, Z - 1b64: 91 81 ldd r25, Z+1 ; 0x01 + 1ba8: 99 27 eor r25, r25 + 1baa: 88 0f add r24, r24 + 1bac: 99 1f adc r25, r25 + 1bae: 88 0f add r24, r24 + 1bb0: 99 1f adc r25, r25 + 1bb2: e0 91 1b 20 lds r30, 0x201B ; 0x80201b + 1bb6: f0 91 1c 20 lds r31, 0x201C ; 0x80201c + 1bba: e8 0f add r30, r24 + 1bbc: f9 1f adc r31, r25 + 1bbe: 80 81 ld r24, Z + 1bc0: 91 81 ldd r25, Z+1 ; 0x01 // FS descriptor if (conf_num >= udc_config.confdev_lsfs-> bNumConfigurations) { return false; } udd_set_setup_payload( - 1b66: fc 01 movw r30, r24 - 1b68: 62 81 ldd r22, Z+2 ; 0x02 - 1b6a: 73 81 ldd r23, Z+3 ; 0x03 - 1b6c: fc d5 rcall .+3064 ; 0x2766 + 1bc2: fc 01 movw r30, r24 + 1bc4: 62 81 ldd r22, Z+2 ; 0x02 + 1bc6: 73 81 ldd r23, Z+3 ; 0x03 + 1bc8: fc d5 rcall .+3064 ; 0x27c2 (uint8_t *)udc_config.conf_lsfs[conf_num].desc, le16_to_cpu(udc_config.conf_lsfs[conf_num].desc->wTotalLength)); } ((usb_conf_desc_t *) udd_g_ctrlreq.payload)->bDescriptorType = - 1b6e: e0 91 a2 23 lds r30, 0x23A2 ; 0x8023a2 - 1b72: f0 91 a3 23 lds r31, 0x23A3 ; 0x8023a3 - 1b76: 82 e0 ldi r24, 0x02 ; 2 - 1b78: 81 83 std Z+1, r24 ; 0x01 - 1b7a: 39 c0 rjmp .+114 ; 0x1bee + 1bca: e0 91 a2 23 lds r30, 0x23A2 ; 0x8023a2 + 1bce: f0 91 a3 23 lds r31, 0x23A3 ; 0x8023a3 + 1bd2: 82 e0 ldi r24, 0x02 ; 2 + 1bd4: 81 83 std Z+1, r24 ; 0x01 + 1bd6: 39 c0 rjmp .+114 ; 0x1c4a break; #endif case USB_DT_BOS: // Device BOS descriptor requested if (udc_config.conf_bos == NULL) { - 1b7c: 80 91 1d 20 lds r24, 0x201D ; 0x80201d - 1b80: 90 91 1e 20 lds r25, 0x201E ; 0x80201e - 1b84: 00 97 sbiw r24, 0x00 ; 0 - 1b86: 09 f4 brne .+2 ; 0x1b8a - 1b88: 7b c1 rjmp .+758 ; 0x1e80 + 1bd8: 80 91 1d 20 lds r24, 0x201D ; 0x80201d + 1bdc: 90 91 1e 20 lds r25, 0x201E ; 0x80201e + 1be0: 00 97 sbiw r24, 0x00 ; 0 + 1be2: 09 f4 brne .+2 ; 0x1be6 + 1be4: 7b c1 rjmp .+758 ; 0x1edc return false; } udd_set_setup_payload( (uint8_t *) udc_config.conf_bos, - 1b8a: dc 01 movw r26, r24 - 1b8c: 12 96 adiw r26, 0x02 ; 2 - 1b8e: 6d 91 ld r22, X+ - 1b90: 7c 91 ld r23, X - 1b92: 13 97 sbiw r26, 0x03 ; 3 - 1b94: e8 d5 rcall .+3024 ; 0x2766 - 1b96: 2b c0 rjmp .+86 ; 0x1bee + 1be6: dc 01 movw r26, r24 + 1be8: 12 96 adiw r26, 0x02 ; 2 + 1bea: 6d 91 ld r22, X+ + 1bec: 7c 91 ld r23, X + 1bee: 13 97 sbiw r26, 0x03 ; 3 + 1bf0: e8 d5 rcall .+3024 ; 0x27c2 + 1bf2: 2b c0 rjmp .+86 ; 0x1c4a uint8_t i; const uint8_t *str; uint8_t str_length = 0; // Link payload pointer to the string corresponding at request switch (udd_g_ctrlreq.req.wValue & 0xff) { - 1b98: 99 27 eor r25, r25 - 1b9a: 81 30 cpi r24, 0x01 ; 1 - 1b9c: 91 05 cpc r25, r1 - 1b9e: 71 f0 breq .+28 ; 0x1bbc - 1ba0: 38 f0 brcs .+14 ; 0x1bb0 - 1ba2: 02 97 sbiw r24, 0x02 ; 2 - 1ba4: 09 f0 breq .+2 ; 0x1ba8 - 1ba6: 6c c1 rjmp .+728 ; 0x1e80 + 1bf4: 99 27 eor r25, r25 + 1bf6: 81 30 cpi r24, 0x01 ; 1 + 1bf8: 91 05 cpc r25, r1 + 1bfa: 71 f0 breq .+28 ; 0x1c18 + 1bfc: 38 f0 brcs .+14 ; 0x1c0c + 1bfe: 02 97 sbiw r24, 0x02 ; 2 + 1c00: 09 f0 breq .+2 ; 0x1c04 + 1c02: 6c c1 rjmp .+728 ; 0x1edc break; #endif #ifdef USB_DEVICE_PRODUCT_NAME case 2: str_length = USB_DEVICE_PRODUCT_NAME_SIZE; str = udc_string_product_name; - 1ba8: 2a e6 ldi r18, 0x6A ; 106 - 1baa: 30 e2 ldi r19, 0x20 ; 32 + 1c04: 2a e6 ldi r18, 0x6A ; 106 + 1c06: 30 e2 ldi r19, 0x20 ; 32 str = udc_string_manufacturer_name; break; #endif #ifdef USB_DEVICE_PRODUCT_NAME case 2: str_length = USB_DEVICE_PRODUCT_NAME_SIZE; - 1bac: 88 e0 ldi r24, 0x08 ; 8 - 1bae: 09 c0 rjmp .+18 ; 0x1bc2 + 1c08: 88 e0 ldi r24, 0x08 ; 8 + 1c0a: 09 c0 rjmp .+18 ; 0x1c1e uint8_t str_length = 0; // Link payload pointer to the string corresponding at request switch (udd_g_ctrlreq.req.wValue & 0xff) { case 0: udd_set_setup_payload((uint8_t *) &udc_string_desc_languageid, - 1bb0: 64 e0 ldi r22, 0x04 ; 4 - 1bb2: 70 e0 ldi r23, 0x00 ; 0 - 1bb4: 8c e7 ldi r24, 0x7C ; 124 - 1bb6: 90 e2 ldi r25, 0x20 ; 32 - 1bb8: d6 d5 rcall .+2988 ; 0x2766 - 1bba: 19 c0 rjmp .+50 ; 0x1bee + 1c0c: 64 e0 ldi r22, 0x04 ; 4 + 1c0e: 70 e0 ldi r23, 0x00 ; 0 + 1c10: 8c e7 ldi r24, 0x7C ; 124 + 1c12: 90 e2 ldi r25, 0x20 ; 32 + 1c14: d6 d5 rcall .+2988 ; 0x27c2 + 1c16: 19 c0 rjmp .+50 ; 0x1c4a break; #ifdef USB_DEVICE_MANUFACTURE_NAME case 1: str_length = USB_DEVICE_MANUFACTURE_NAME_SIZE; str = udc_string_manufacturer_name; - 1bbc: 23 e7 ldi r18, 0x73 ; 115 - 1bbe: 30 e2 ldi r19, 0x20 ; 32 + 1c18: 23 e7 ldi r18, 0x73 ; 115 + 1c1a: 30 e2 ldi r19, 0x20 ; 32 sizeof(udc_string_desc_languageid)); break; #ifdef USB_DEVICE_MANUFACTURE_NAME case 1: str_length = USB_DEVICE_MANUFACTURE_NAME_SIZE; - 1bc0: 87 e0 ldi r24, 0x07 ; 7 - 1bc2: 42 2f mov r20, r18 - 1bc4: aa e5 ldi r26, 0x5A ; 90 - 1bc6: b0 e2 ldi r27, 0x20 ; 32 + 1c1c: 87 e0 ldi r24, 0x07 ; 7 + 1c1e: 42 2f mov r20, r18 + 1c20: aa e5 ldi r26, 0x5A ; 90 + 1c22: b0 e2 ldi r27, 0x20 ; 32 str = udc_string_manufacturer_name; break; #endif #ifdef USB_DEVICE_PRODUCT_NAME case 2: str_length = USB_DEVICE_PRODUCT_NAME_SIZE; - 1bc8: e2 2f mov r30, r18 - 1bca: f3 2f mov r31, r19 + 1c24: e2 2f mov r30, r18 + 1c26: f3 2f mov r31, r19 return false; } if (str_length) { for(i = 0; i < str_length; i++) { udc_string_desc.string[i] = cpu_to_le16((le16_t)str[i]); - 1bcc: 21 91 ld r18, Z+ - 1bce: 30 e0 ldi r19, 0x00 ; 0 - 1bd0: 2d 93 st X+, r18 - 1bd2: 3d 93 st X+, r19 - 1bd4: 9e 2f mov r25, r30 - 1bd6: 94 1b sub r25, r20 + 1c28: 21 91 ld r18, Z+ + 1c2a: 30 e0 ldi r19, 0x00 ; 0 + 1c2c: 2d 93 st X+, r18 + 1c2e: 3d 93 st X+, r19 + 1c30: 9e 2f mov r25, r30 + 1c32: 94 1b sub r25, r20 #endif return false; } if (str_length) { for(i = 0; i < str_length; i++) { - 1bd8: 98 17 cp r25, r24 - 1bda: c0 f3 brcs .-16 ; 0x1bcc + 1c34: 98 17 cp r25, r24 + 1c36: c0 f3 brcs .-16 ; 0x1c28 udc_string_desc.string[i] = cpu_to_le16((le16_t)str[i]); } udc_string_desc.header.bLength = 2 + (str_length) * 2; - 1bdc: 68 2f mov r22, r24 - 1bde: 66 0f add r22, r22 - 1be0: 6e 5f subi r22, 0xFE ; 254 - 1be2: 60 93 58 20 sts 0x2058, r22 ; 0x802058 + 1c38: 68 2f mov r22, r24 + 1c3a: 66 0f add r22, r22 + 1c3c: 6e 5f subi r22, 0xFE ; 254 + 1c3e: 60 93 58 20 sts 0x2058, r22 ; 0x802058 udd_set_setup_payload( - 1be6: 70 e0 ldi r23, 0x00 ; 0 - 1be8: 88 e5 ldi r24, 0x58 ; 88 - 1bea: 90 e2 ldi r25, 0x20 ; 32 - 1bec: bc d5 rcall .+2936 ; 0x2766 + 1c42: 70 e0 ldi r23, 0x00 ; 0 + 1c44: 88 e5 ldi r24, 0x58 ; 88 + 1c46: 90 e2 ldi r25, 0x20 ; 32 + 1c48: bc d5 rcall .+2936 ; 0x27c2 default: // Unknown descriptor requested return false; } // if the descriptor is larger than length requested, then reduce it if (udd_g_ctrlreq.req.wLength < udd_g_ctrlreq.payload_size) { - 1bee: ea e9 ldi r30, 0x9A ; 154 - 1bf0: f3 e2 ldi r31, 0x23 ; 35 - 1bf2: 86 81 ldd r24, Z+6 ; 0x06 - 1bf4: 97 81 ldd r25, Z+7 ; 0x07 - 1bf6: 22 85 ldd r18, Z+10 ; 0x0a - 1bf8: 33 85 ldd r19, Z+11 ; 0x0b - 1bfa: 82 17 cp r24, r18 - 1bfc: 93 07 cpc r25, r19 - 1bfe: 08 f0 brcs .+2 ; 0x1c02 - 1c00: bc c1 rjmp .+888 ; 0x1f7a + 1c4a: ea e9 ldi r30, 0x9A ; 154 + 1c4c: f3 e2 ldi r31, 0x23 ; 35 + 1c4e: 86 81 ldd r24, Z+6 ; 0x06 + 1c50: 97 81 ldd r25, Z+7 ; 0x07 + 1c52: 22 85 ldd r18, Z+10 ; 0x0a + 1c54: 33 85 ldd r19, Z+11 ; 0x0b + 1c56: 82 17 cp r24, r18 + 1c58: 93 07 cpc r25, r19 + 1c5a: 08 f0 brcs .+2 ; 0x1c5e + 1c5c: bc c1 rjmp .+888 ; 0x1fd6 udd_g_ctrlreq.payload_size = udd_g_ctrlreq.req.wLength; - 1c02: 80 93 a4 23 sts 0x23A4, r24 ; 0x8023a4 - 1c06: 90 93 a5 23 sts 0x23A5, r25 ; 0x8023a5 - 1c0a: b7 c1 rjmp .+878 ; 0x1f7a + 1c5e: 80 93 a4 23 sts 0x23A4, r24 ; 0x8023a4 + 1c62: 90 93 a5 23 sts 0x23A5, r25 ; 0x8023a5 + 1c66: b7 c1 rjmp .+878 ; 0x1fd6 * * \return true if success */ static bool udc_req_std_dev_get_configuration(void) { if (udd_g_ctrlreq.req.wLength != 1) { - 1c0c: 21 30 cpi r18, 0x01 ; 1 - 1c0e: 31 05 cpc r19, r1 - 1c10: 09 f0 breq .+2 ; 0x1c14 - 1c12: 36 c1 rjmp .+620 ; 0x1e80 + 1c68: 21 30 cpi r18, 0x01 ; 1 + 1c6a: 31 05 cpc r19, r1 + 1c6c: 09 f0 breq .+2 ; 0x1c70 + 1c6e: 36 c1 rjmp .+620 ; 0x1edc return false; } udd_set_setup_payload(&udc_num_configuration,1); - 1c14: 61 e0 ldi r22, 0x01 ; 1 - 1c16: 70 e0 ldi r23, 0x00 ; 0 - 1c18: 82 ea ldi r24, 0xA2 ; 162 - 1c1a: 90 e2 ldi r25, 0x20 ; 32 - 1c1c: a4 d5 rcall .+2888 ; 0x2766 - 1c1e: ad c1 rjmp .+858 ; 0x1f7a + 1c70: 61 e0 ldi r22, 0x01 ; 1 + 1c72: 70 e0 ldi r23, 0x00 ; 0 + 1c74: 82 ea ldi r24, 0xA2 ; 162 + 1c76: 90 e2 ldi r25, 0x20 ; 32 + 1c78: a4 d5 rcall .+2888 ; 0x27c2 + 1c7a: ad c1 rjmp .+858 ; 0x1fd6 default: break; } } if (USB_REQ_RECIP_INTERFACE == Udd_setup_recipient()) { - 1c20: 81 30 cpi r24, 0x01 ; 1 - 1c22: e1 f5 brne .+120 ; 0x1c9c + 1c7c: 81 30 cpi r24, 0x01 ; 1 + 1c7e: e1 f5 brne .+120 ; 0x1cf8 // Standard Get Interface request switch (udd_g_ctrlreq.req.bRequest) { - 1c24: 90 91 9b 23 lds r25, 0x239B ; 0x80239b - 1c28: 9a 30 cpi r25, 0x0A ; 10 - 1c2a: c1 f5 brne .+112 ; 0x1c9c + 1c80: 90 91 9b 23 lds r25, 0x239B ; 0x80239b + 1c84: 9a 30 cpi r25, 0x0A ; 10 + 1c86: c1 f5 brne .+112 ; 0x1cf8 static bool udc_req_std_iface_get_setting(void) { uint8_t iface_num; udi_api_t UDC_DESC_STORAGE *udi_api; if (udd_g_ctrlreq.req.wLength != 1) { - 1c2c: 21 30 cpi r18, 0x01 ; 1 - 1c2e: 31 05 cpc r19, r1 - 1c30: 09 f0 breq .+2 ; 0x1c34 - 1c32: 26 c1 rjmp .+588 ; 0x1e80 + 1c88: 21 30 cpi r18, 0x01 ; 1 + 1c8a: 31 05 cpc r19, r1 + 1c8c: 09 f0 breq .+2 ; 0x1c90 + 1c8e: 26 c1 rjmp .+588 ; 0x1edc return false; // Error in request } if (!udc_num_configuration) { - 1c34: 80 91 a2 20 lds r24, 0x20A2 ; 0x8020a2 - 1c38: 88 23 and r24, r24 - 1c3a: 09 f4 brne .+2 ; 0x1c3e - 1c3c: 21 c1 rjmp .+578 ; 0x1e80 + 1c90: 80 91 a2 20 lds r24, 0x20A2 ; 0x8020a2 + 1c94: 88 23 and r24, r24 + 1c96: 09 f4 brne .+2 ; 0x1c9a + 1c98: 21 c1 rjmp .+578 ; 0x1edc return false; // The device is not is configured state yet } // Check the interface number included in the request iface_num = udd_g_ctrlreq.req.wIndex & 0xFF; - 1c3e: c0 91 9e 23 lds r28, 0x239E ; 0x80239e - 1c42: d0 91 9f 23 lds r29, 0x239F ; 0x80239f + 1c9a: c0 91 9e 23 lds r28, 0x239E ; 0x80239e + 1c9e: d0 91 9f 23 lds r29, 0x239F ; 0x80239f if (iface_num >= udc_ptr_conf->desc->bNumInterfaces) { - 1c46: 00 91 9f 20 lds r16, 0x209F ; 0x80209f - 1c4a: 10 91 a0 20 lds r17, 0x20A0 ; 0x8020a0 - 1c4e: d8 01 movw r26, r16 - 1c50: ed 91 ld r30, X+ - 1c52: fc 91 ld r31, X - 1c54: 84 81 ldd r24, Z+4 ; 0x04 - 1c56: c8 17 cp r28, r24 - 1c58: 08 f0 brcs .+2 ; 0x1c5c - 1c5a: 12 c1 rjmp .+548 ; 0x1e80 + 1ca2: 00 91 9f 20 lds r16, 0x209F ; 0x80209f + 1ca6: 10 91 a0 20 lds r17, 0x20A0 ; 0x8020a0 + 1caa: d8 01 movw r26, r16 + 1cac: ed 91 ld r30, X+ + 1cae: fc 91 ld r31, X + 1cb0: 84 81 ldd r24, Z+4 ; 0x04 + 1cb2: c8 17 cp r28, r24 + 1cb4: 08 f0 brcs .+2 ; 0x1cb8 + 1cb6: 12 c1 rjmp .+548 ; 0x1edc return false; } // Select first alternate setting of the interface to update udc_ptr_iface // before call iface->getsetting() if (!udc_update_iface_desc(iface_num, 0)) { - 1c5c: 60 e0 ldi r22, 0x00 ; 0 - 1c5e: 8c 2f mov r24, r28 - 1c60: fc dc rcall .-1544 ; 0x165a - 1c62: 88 23 and r24, r24 - 1c64: 09 f4 brne .+2 ; 0x1c68 - 1c66: 0c c1 rjmp .+536 ; 0x1e80 + 1cb8: 60 e0 ldi r22, 0x00 ; 0 + 1cba: 8c 2f mov r24, r28 + 1cbc: f9 dc rcall .-1550 ; 0x16b0 + 1cbe: 88 23 and r24, r24 + 1cc0: 09 f4 brne .+2 ; 0x1cc4 + 1cc2: 0c c1 rjmp .+536 ; 0x1edc return false; } // Get alternate setting from UDI udi_api = udc_ptr_conf->udi_apis[iface_num]; - 1c68: ce 01 movw r24, r28 - 1c6a: 99 27 eor r25, r25 - 1c6c: 88 0f add r24, r24 - 1c6e: 99 1f adc r25, r25 - 1c70: d8 01 movw r26, r16 - 1c72: 12 96 adiw r26, 0x02 ; 2 - 1c74: ed 91 ld r30, X+ - 1c76: fc 91 ld r31, X - 1c78: 13 97 sbiw r26, 0x03 ; 3 - 1c7a: e8 0f add r30, r24 - 1c7c: f9 1f adc r31, r25 + 1cc4: ce 01 movw r24, r28 + 1cc6: 99 27 eor r25, r25 + 1cc8: 88 0f add r24, r24 + 1cca: 99 1f adc r25, r25 + 1ccc: d8 01 movw r26, r16 + 1cce: 12 96 adiw r26, 0x02 ; 2 + 1cd0: ed 91 ld r30, X+ + 1cd2: fc 91 ld r31, X + 1cd4: 13 97 sbiw r26, 0x03 ; 3 + 1cd6: e8 0f add r30, r24 + 1cd8: f9 1f adc r31, r25 udc_iface_setting = udi_api->getsetting(); - 1c7e: 01 90 ld r0, Z+ - 1c80: f0 81 ld r31, Z - 1c82: e0 2d mov r30, r0 - 1c84: 86 81 ldd r24, Z+6 ; 0x06 - 1c86: 97 81 ldd r25, Z+7 ; 0x07 - 1c88: fc 01 movw r30, r24 - 1c8a: 09 95 icall - 1c8c: 80 93 a4 20 sts 0x20A4, r24 ; 0x8020a4 + 1cda: 01 90 ld r0, Z+ + 1cdc: f0 81 ld r31, Z + 1cde: e0 2d mov r30, r0 + 1ce0: 86 81 ldd r24, Z+6 ; 0x06 + 1ce2: 97 81 ldd r25, Z+7 ; 0x07 + 1ce4: fc 01 movw r30, r24 + 1ce6: 09 95 icall + 1ce8: 80 93 a4 20 sts 0x20A4, r24 ; 0x8020a4 // Link value to payload pointer of request udd_set_setup_payload(&udc_iface_setting,1); - 1c90: 61 e0 ldi r22, 0x01 ; 1 - 1c92: 70 e0 ldi r23, 0x00 ; 0 - 1c94: 84 ea ldi r24, 0xA4 ; 164 - 1c96: 90 e2 ldi r25, 0x20 ; 32 - 1c98: 66 d5 rcall .+2764 ; 0x2766 - 1c9a: 6f c1 rjmp .+734 ; 0x1f7a + 1cec: 61 e0 ldi r22, 0x01 ; 1 + 1cee: 70 e0 ldi r23, 0x00 ; 0 + 1cf0: 84 ea ldi r24, 0xA4 ; 164 + 1cf2: 90 e2 ldi r25, 0x20 ; 32 + 1cf4: 66 d5 rcall .+2764 ; 0x27c2 + 1cf6: 6f c1 rjmp .+734 ; 0x1fd6 default: break; } } #if (0!=USB_DEVICE_MAX_EP) if (USB_REQ_RECIP_ENDPOINT == Udd_setup_recipient()) { - 1c9c: 82 30 cpi r24, 0x02 ; 2 - 1c9e: 09 f0 breq .+2 ; 0x1ca2 - 1ca0: ef c0 rjmp .+478 ; 0x1e80 + 1cf8: 82 30 cpi r24, 0x02 ; 2 + 1cfa: 09 f0 breq .+2 ; 0x1cfe + 1cfc: ef c0 rjmp .+478 ; 0x1edc // Standard Get Endpoint request switch (udd_g_ctrlreq.req.bRequest) { - 1ca2: 80 91 9b 23 lds r24, 0x239B ; 0x80239b - 1ca6: 81 11 cpse r24, r1 - 1ca8: e4 c0 rjmp .+456 ; 0x1e72 + 1cfe: 80 91 9b 23 lds r24, 0x239B ; 0x80239b + 1d02: 81 11 cpse r24, r1 + 1d04: e4 c0 rjmp .+456 ; 0x1ece */ static bool udc_req_std_ep_get_status(void) { static le16_t udc_ep_status; if (udd_g_ctrlreq.req.wLength != sizeof(udc_ep_status)) { - 1caa: 22 30 cpi r18, 0x02 ; 2 - 1cac: 31 05 cpc r19, r1 - 1cae: 09 f0 breq .+2 ; 0x1cb2 - 1cb0: e7 c0 rjmp .+462 ; 0x1e80 + 1d06: 22 30 cpi r18, 0x02 ; 2 + 1d08: 31 05 cpc r19, r1 + 1d0a: 09 f0 breq .+2 ; 0x1d0e + 1d0c: e7 c0 rjmp .+462 ; 0x1edc return false; } udc_ep_status = udd_ep_is_halted(udd_g_ctrlreq.req. - 1cb2: 80 91 9e 23 lds r24, 0x239E ; 0x80239e - 1cb6: d3 d5 rcall .+2982 ; 0x285e - 1cb8: 90 e0 ldi r25, 0x00 ; 0 - 1cba: 80 93 9b 20 sts 0x209B, r24 ; 0x80209b - 1cbe: 90 93 9c 20 sts 0x209C, r25 ; 0x80209c + 1d0e: 80 91 9e 23 lds r24, 0x239E ; 0x80239e + 1d12: d3 d5 rcall .+2982 ; 0x28ba + 1d14: 90 e0 ldi r25, 0x00 ; 0 + 1d16: 80 93 9b 20 sts 0x209B, r24 ; 0x80209b + 1d1a: 90 93 9c 20 sts 0x209C, r25 ; 0x80209c wIndex & 0xFF) ? CPU_TO_LE16(USB_EP_STATUS_HALTED) : 0; udd_set_setup_payload( (uint8_t *) & udc_ep_status, - 1cc2: 62 e0 ldi r22, 0x02 ; 2 - 1cc4: 70 e0 ldi r23, 0x00 ; 0 - 1cc6: 8b e9 ldi r24, 0x9B ; 155 - 1cc8: 90 e2 ldi r25, 0x20 ; 32 - 1cca: 4d d5 rcall .+2714 ; 0x2766 - 1ccc: 56 c1 rjmp .+684 ; 0x1f7a + 1d1e: 62 e0 ldi r22, 0x02 ; 2 + 1d20: 70 e0 ldi r23, 0x00 ; 0 + 1d22: 8b e9 ldi r24, 0x9B ; 155 + 1d24: 90 e2 ldi r25, 0x20 ; 32 + 1d26: 4d d5 rcall .+2714 ; 0x27c2 + 1d28: 56 c1 rjmp .+684 ; 0x1fd6 } } #endif } else { // SET Standard Requests if (USB_REQ_RECIP_DEVICE == Udd_setup_recipient()) { - 1cce: 8f 71 andi r24, 0x1F ; 31 - 1cd0: 09 f0 breq .+2 ; 0x1cd4 - 1cd2: 83 c0 rjmp .+262 ; 0x1dda + 1d2a: 8f 71 andi r24, 0x1F ; 31 + 1d2c: 09 f0 breq .+2 ; 0x1d30 + 1d2e: 83 c0 rjmp .+262 ; 0x1e36 // Standard Set Device request switch (udd_g_ctrlreq.req.bRequest) { - 1cd4: 90 91 9b 23 lds r25, 0x239B ; 0x80239b - 1cd8: 93 30 cpi r25, 0x03 ; 3 - 1cda: 09 f4 brne .+2 ; 0x1cde - 1cdc: cc c0 rjmp .+408 ; 0x1e76 - 1cde: 18 f4 brcc .+6 ; 0x1ce6 - 1ce0: 91 30 cpi r25, 0x01 ; 1 - 1ce2: a1 f0 breq .+40 ; 0x1d0c - 1ce4: 7a c0 rjmp .+244 ; 0x1dda - 1ce6: 95 30 cpi r25, 0x05 ; 5 - 1ce8: 19 f0 breq .+6 ; 0x1cf0 - 1cea: 99 30 cpi r25, 0x09 ; 9 - 1cec: 39 f1 breq .+78 ; 0x1d3c - 1cee: 75 c0 rjmp .+234 ; 0x1dda + 1d30: 90 91 9b 23 lds r25, 0x239B ; 0x80239b + 1d34: 93 30 cpi r25, 0x03 ; 3 + 1d36: 09 f4 brne .+2 ; 0x1d3a + 1d38: cc c0 rjmp .+408 ; 0x1ed2 + 1d3a: 18 f4 brcc .+6 ; 0x1d42 + 1d3c: 91 30 cpi r25, 0x01 ; 1 + 1d3e: a1 f0 breq .+40 ; 0x1d68 + 1d40: 7a c0 rjmp .+244 ; 0x1e36 + 1d42: 95 30 cpi r25, 0x05 ; 5 + 1d44: 19 f0 breq .+6 ; 0x1d4c + 1d46: 99 30 cpi r25, 0x09 ; 9 + 1d48: 39 f1 breq .+78 ; 0x1d98 + 1d4a: 75 c0 rjmp .+234 ; 0x1e36 * * \return true if success */ static bool udc_req_std_dev_set_address(void) { if (udd_g_ctrlreq.req.wLength) { - 1cf0: 80 91 a0 23 lds r24, 0x23A0 ; 0x8023a0 - 1cf4: 90 91 a1 23 lds r25, 0x23A1 ; 0x8023a1 - 1cf8: 89 2b or r24, r25 - 1cfa: 09 f0 breq .+2 ; 0x1cfe - 1cfc: c1 c0 rjmp .+386 ; 0x1e80 + 1d4c: 80 91 a0 23 lds r24, 0x23A0 ; 0x8023a0 + 1d50: 90 91 a1 23 lds r25, 0x23A1 ; 0x8023a1 + 1d54: 89 2b or r24, r25 + 1d56: 09 f0 breq .+2 ; 0x1d5a + 1d58: c1 c0 rjmp .+386 ; 0x1edc return false; } // The address must be changed at the end of setup request after the handshake // then we use a callback to change address udd_g_ctrlreq.callback = udc_valid_address; - 1cfe: 87 e2 ldi r24, 0x27 ; 39 - 1d00: 9b e0 ldi r25, 0x0B ; 11 - 1d02: 80 93 a6 23 sts 0x23A6, r24 ; 0x8023a6 - 1d06: 90 93 a7 23 sts 0x23A7, r25 ; 0x8023a7 - 1d0a: 37 c1 rjmp .+622 ; 0x1f7a + 1d5a: 82 e5 ldi r24, 0x52 ; 82 + 1d5c: 9b e0 ldi r25, 0x0B ; 11 + 1d5e: 80 93 a6 23 sts 0x23A6, r24 ; 0x8023a6 + 1d62: 90 93 a7 23 sts 0x23A7, r25 ; 0x8023a7 + 1d66: 37 c1 rjmp .+622 ; 0x1fd6 * * \return true if success */ static bool udc_req_std_dev_clear_feature(void) { if (udd_g_ctrlreq.req.wLength) { - 1d0c: 80 91 a0 23 lds r24, 0x23A0 ; 0x8023a0 - 1d10: 90 91 a1 23 lds r25, 0x23A1 ; 0x8023a1 - 1d14: 89 2b or r24, r25 - 1d16: 09 f0 breq .+2 ; 0x1d1a - 1d18: b3 c0 rjmp .+358 ; 0x1e80 + 1d68: 80 91 a0 23 lds r24, 0x23A0 ; 0x8023a0 + 1d6c: 90 91 a1 23 lds r25, 0x23A1 ; 0x8023a1 + 1d70: 89 2b or r24, r25 + 1d72: 09 f0 breq .+2 ; 0x1d76 + 1d74: b3 c0 rjmp .+358 ; 0x1edc return false; } if (udd_g_ctrlreq.req.wValue == USB_DEV_FEATURE_REMOTE_WAKEUP) { - 1d1a: 80 91 9c 23 lds r24, 0x239C ; 0x80239c - 1d1e: 90 91 9d 23 lds r25, 0x239D ; 0x80239d - 1d22: 01 97 sbiw r24, 0x01 ; 1 - 1d24: 09 f0 breq .+2 ; 0x1d28 - 1d26: ac c0 rjmp .+344 ; 0x1e80 + 1d76: 80 91 9c 23 lds r24, 0x239C ; 0x80239c + 1d7a: 90 91 9d 23 lds r25, 0x239D ; 0x80239d + 1d7e: 01 97 sbiw r24, 0x01 ; 1 + 1d80: 09 f0 breq .+2 ; 0x1d84 + 1d82: ac c0 rjmp .+344 ; 0x1edc udc_device_status &= CPU_TO_LE16(~(uint32_t)USB_DEV_STATUS_REMOTEWAKEUP); - 1d28: 80 91 a6 20 lds r24, 0x20A6 ; 0x8020a6 - 1d2c: 90 91 a7 20 lds r25, 0x20A7 ; 0x8020a7 - 1d30: 8d 7f andi r24, 0xFD ; 253 - 1d32: 80 93 a6 20 sts 0x20A6, r24 ; 0x8020a6 - 1d36: 90 93 a7 20 sts 0x20A7, r25 ; 0x8020a7 - 1d3a: 1f c1 rjmp .+574 ; 0x1f7a + 1d84: 80 91 a6 20 lds r24, 0x20A6 ; 0x8020a6 + 1d88: 90 91 a7 20 lds r25, 0x20A7 ; 0x8020a7 + 1d8c: 8d 7f andi r24, 0xFD ; 253 + 1d8e: 80 93 a6 20 sts 0x20A6, r24 ; 0x8020a6 + 1d92: 90 93 a7 20 sts 0x20A7, r25 ; 0x8020a7 + 1d96: 1f c1 rjmp .+574 ; 0x1fd6 static bool udc_req_std_dev_set_configuration(void) { uint8_t iface_num; // Check request length if (udd_g_ctrlreq.req.wLength) { - 1d3c: 80 91 a0 23 lds r24, 0x23A0 ; 0x8023a0 - 1d40: 90 91 a1 23 lds r25, 0x23A1 ; 0x8023a1 - 1d44: 89 2b or r24, r25 - 1d46: 09 f0 breq .+2 ; 0x1d4a - 1d48: 9b c0 rjmp .+310 ; 0x1e80 + 1d98: 80 91 a0 23 lds r24, 0x23A0 ; 0x8023a0 + 1d9c: 90 91 a1 23 lds r25, 0x23A1 ; 0x8023a1 + 1da0: 89 2b or r24, r25 + 1da2: 09 f0 breq .+2 ; 0x1da6 + 1da4: 9b c0 rjmp .+310 ; 0x1edc return false; } // Authorize configuration only if the address is valid if (!udd_getaddress()) { - 1d4a: 0a d5 rcall .+2580 ; 0x2760 - 1d4c: 88 23 and r24, r24 - 1d4e: 09 f4 brne .+2 ; 0x1d52 - 1d50: 97 c0 rjmp .+302 ; 0x1e80 + 1da6: 0a d5 rcall .+2580 ; 0x27bc + 1da8: 88 23 and r24, r24 + 1daa: 09 f4 brne .+2 ; 0x1dae + 1dac: 97 c0 rjmp .+302 ; 0x1edc } } else #endif { // FS descriptor if ((udd_g_ctrlreq.req.wValue & 0xFF) > - 1d52: 20 91 9c 23 lds r18, 0x239C ; 0x80239c - 1d56: 30 91 9d 23 lds r19, 0x239D ; 0x80239d - 1d5a: 33 27 eor r19, r19 + 1dae: 20 91 9c 23 lds r18, 0x239C ; 0x80239c + 1db2: 30 91 9d 23 lds r19, 0x239D ; 0x80239d + 1db6: 33 27 eor r19, r19 udc_config.confdev_lsfs->bNumConfigurations) { - 1d5c: e0 91 19 20 lds r30, 0x2019 ; 0x802019 - 1d60: f0 91 1a 20 lds r31, 0x201A ; 0x80201a + 1db8: e0 91 19 20 lds r30, 0x2019 ; 0x802019 + 1dbc: f0 91 1a 20 lds r31, 0x201A ; 0x80201a } } else #endif { // FS descriptor if ((udd_g_ctrlreq.req.wValue & 0xFF) > - 1d64: 81 89 ldd r24, Z+17 ; 0x11 - 1d66: 90 e0 ldi r25, 0x00 ; 0 - 1d68: 82 17 cp r24, r18 - 1d6a: 93 07 cpc r25, r19 - 1d6c: 08 f4 brcc .+2 ; 0x1d70 - 1d6e: 88 c0 rjmp .+272 ; 0x1e80 + 1dc0: 81 89 ldd r24, Z+17 ; 0x11 + 1dc2: 90 e0 ldi r25, 0x00 ; 0 + 1dc4: 82 17 cp r24, r18 + 1dc6: 93 07 cpc r25, r19 + 1dc8: 08 f4 brcc .+2 ; 0x1dcc + 1dca: 88 c0 rjmp .+272 ; 0x1edc return false; } } // Reset current configuration udc_reset(); - 1d70: 29 dd rcall .-1454 ; 0x17c4 + 1dcc: 26 dd rcall .-1460 ; 0x181a // Enable new configuration udc_num_configuration = udd_g_ctrlreq.req.wValue & 0xFF; - 1d72: 80 91 9c 23 lds r24, 0x239C ; 0x80239c - 1d76: 90 91 9d 23 lds r25, 0x239D ; 0x80239d - 1d7a: 80 93 a2 20 sts 0x20A2, r24 ; 0x8020a2 + 1dce: 80 91 9c 23 lds r24, 0x239C ; 0x80239c + 1dd2: 90 91 9d 23 lds r25, 0x239D ; 0x80239d + 1dd6: 80 93 a2 20 sts 0x20A2, r24 ; 0x8020a2 if (udc_num_configuration == 0) { - 1d7e: 88 23 and r24, r24 - 1d80: 09 f4 brne .+2 ; 0x1d84 - 1d82: fb c0 rjmp .+502 ; 0x1f7a + 1dda: 88 23 and r24, r24 + 1ddc: 09 f4 brne .+2 ; 0x1de0 + 1dde: fb c0 rjmp .+502 ; 0x1fd6 udc_ptr_conf = &udc_config.conf_hs[udc_num_configuration - 1]; } else #endif { // FS descriptor udc_ptr_conf = &udc_config.conf_lsfs[udc_num_configuration - 1]; - 1d84: 99 27 eor r25, r25 - 1d86: 81 50 subi r24, 0x01 ; 1 - 1d88: 90 4c sbci r25, 0xC0 ; 192 - 1d8a: 88 0f add r24, r24 - 1d8c: 99 1f adc r25, r25 - 1d8e: 88 0f add r24, r24 - 1d90: 99 1f adc r25, r25 - 1d92: e0 91 1b 20 lds r30, 0x201B ; 0x80201b - 1d96: f0 91 1c 20 lds r31, 0x201C ; 0x80201c - 1d9a: e8 0f add r30, r24 - 1d9c: f9 1f adc r31, r25 - 1d9e: e0 93 9f 20 sts 0x209F, r30 ; 0x80209f - 1da2: f0 93 a0 20 sts 0x20A0, r31 ; 0x8020a0 + 1de0: 99 27 eor r25, r25 + 1de2: 81 50 subi r24, 0x01 ; 1 + 1de4: 90 4c sbci r25, 0xC0 ; 192 + 1de6: 88 0f add r24, r24 + 1de8: 99 1f adc r25, r25 + 1dea: 88 0f add r24, r24 + 1dec: 99 1f adc r25, r25 + 1dee: e0 91 1b 20 lds r30, 0x201B ; 0x80201b + 1df2: f0 91 1c 20 lds r31, 0x201C ; 0x80201c + 1df6: e8 0f add r30, r24 + 1df8: f9 1f adc r31, r25 + 1dfa: e0 93 9f 20 sts 0x209F, r30 ; 0x80209f + 1dfe: f0 93 a0 20 sts 0x20A0, r31 ; 0x8020a0 } // Enable all interfaces of the selected configuration for (iface_num = 0; iface_num < udc_ptr_conf->desc->bNumInterfaces; - 1da6: 01 90 ld r0, Z+ - 1da8: f0 81 ld r31, Z - 1daa: e0 2d mov r30, r0 - 1dac: 84 81 ldd r24, Z+4 ; 0x04 - 1dae: 88 23 and r24, r24 - 1db0: 09 f4 brne .+2 ; 0x1db4 - 1db2: e3 c0 rjmp .+454 ; 0x1f7a - 1db4: c0 e0 ldi r28, 0x00 ; 0 + 1e02: 01 90 ld r0, Z+ + 1e04: f0 81 ld r31, Z + 1e06: e0 2d mov r30, r0 + 1e08: 84 81 ldd r24, Z+4 ; 0x04 + 1e0a: 88 23 and r24, r24 + 1e0c: 09 f4 brne .+2 ; 0x1e10 + 1e0e: e3 c0 rjmp .+454 ; 0x1fd6 + 1e10: c0 e0 ldi r28, 0x00 ; 0 iface_num++) { if (!udc_iface_enable(iface_num, 0)) { - 1db6: 60 e0 ldi r22, 0x00 ; 0 - 1db8: 8c 2f mov r24, r28 - 1dba: cb dc rcall .-1642 ; 0x1752 - 1dbc: 88 23 and r24, r24 - 1dbe: 09 f4 brne .+2 ; 0x1dc2 - 1dc0: 5f c0 rjmp .+190 ; 0x1e80 + 1e12: 60 e0 ldi r22, 0x00 ; 0 + 1e14: 8c 2f mov r24, r28 + 1e16: c8 dc rcall .-1648 ; 0x17a8 + 1e18: 88 23 and r24, r24 + 1e1a: 09 f4 brne .+2 ; 0x1e1e + 1e1c: 5f c0 rjmp .+190 ; 0x1edc // FS descriptor udc_ptr_conf = &udc_config.conf_lsfs[udc_num_configuration - 1]; } // Enable all interfaces of the selected configuration for (iface_num = 0; iface_num < udc_ptr_conf->desc->bNumInterfaces; iface_num++) { - 1dc2: cf 5f subi r28, 0xFF ; 255 + 1e1e: cf 5f subi r28, 0xFF ; 255 { // FS descriptor udc_ptr_conf = &udc_config.conf_lsfs[udc_num_configuration - 1]; } // Enable all interfaces of the selected configuration for (iface_num = 0; iface_num < udc_ptr_conf->desc->bNumInterfaces; - 1dc4: e0 91 9f 20 lds r30, 0x209F ; 0x80209f - 1dc8: f0 91 a0 20 lds r31, 0x20A0 ; 0x8020a0 - 1dcc: 01 90 ld r0, Z+ - 1dce: f0 81 ld r31, Z - 1dd0: e0 2d mov r30, r0 - 1dd2: 84 81 ldd r24, Z+4 ; 0x04 - 1dd4: c8 17 cp r28, r24 - 1dd6: 78 f3 brcs .-34 ; 0x1db6 - 1dd8: d0 c0 rjmp .+416 ; 0x1f7a + 1e20: e0 91 9f 20 lds r30, 0x209F ; 0x80209f + 1e24: f0 91 a0 20 lds r31, 0x20A0 ; 0x8020a0 + 1e28: 01 90 ld r0, Z+ + 1e2a: f0 81 ld r31, Z + 1e2c: e0 2d mov r30, r0 + 1e2e: 84 81 ldd r24, Z+4 ; 0x04 + 1e30: c8 17 cp r28, r24 + 1e32: 78 f3 brcs .-34 ; 0x1e12 + 1e34: d0 c0 rjmp .+416 ; 0x1fd6 default: break; } } if (USB_REQ_RECIP_INTERFACE == Udd_setup_recipient()) { - 1dda: 81 30 cpi r24, 0x01 ; 1 - 1ddc: e1 f4 brne .+56 ; 0x1e16 + 1e36: 81 30 cpi r24, 0x01 ; 1 + 1e38: e1 f4 brne .+56 ; 0x1e72 // Standard Set Interface request switch (udd_g_ctrlreq.req.bRequest) { - 1dde: 90 91 9b 23 lds r25, 0x239B ; 0x80239b - 1de2: 9b 30 cpi r25, 0x0B ; 11 - 1de4: c1 f4 brne .+48 ; 0x1e16 + 1e3a: 90 91 9b 23 lds r25, 0x239B ; 0x80239b + 1e3e: 9b 30 cpi r25, 0x0B ; 11 + 1e40: c1 f4 brne .+48 ; 0x1e72 */ static bool udc_req_std_iface_set_setting(void) { uint8_t iface_num, setting_num; if (udd_g_ctrlreq.req.wLength) { - 1de6: 80 91 a0 23 lds r24, 0x23A0 ; 0x8023a0 - 1dea: 90 91 a1 23 lds r25, 0x23A1 ; 0x8023a1 - 1dee: 89 2b or r24, r25 - 1df0: 09 f0 breq .+2 ; 0x1df4 - 1df2: 46 c0 rjmp .+140 ; 0x1e80 + 1e42: 80 91 a0 23 lds r24, 0x23A0 ; 0x8023a0 + 1e46: 90 91 a1 23 lds r25, 0x23A1 ; 0x8023a1 + 1e4a: 89 2b or r24, r25 + 1e4c: 09 f0 breq .+2 ; 0x1e50 + 1e4e: 46 c0 rjmp .+140 ; 0x1edc return false; // Error in request } if (!udc_num_configuration) { - 1df4: 80 91 a2 20 lds r24, 0x20A2 ; 0x8020a2 - 1df8: 88 23 and r24, r24 - 1dfa: 09 f4 brne .+2 ; 0x1dfe - 1dfc: 41 c0 rjmp .+130 ; 0x1e80 + 1e50: 80 91 a2 20 lds r24, 0x20A2 ; 0x8020a2 + 1e54: 88 23 and r24, r24 + 1e56: 09 f4 brne .+2 ; 0x1e5a + 1e58: 41 c0 rjmp .+130 ; 0x1edc return false; // The device is not is configured state yet } iface_num = udd_g_ctrlreq.req.wIndex & 0xFF; - 1dfe: ea e9 ldi r30, 0x9A ; 154 - 1e00: f3 e2 ldi r31, 0x23 ; 35 - 1e02: c4 81 ldd r28, Z+4 ; 0x04 + 1e5a: ea e9 ldi r30, 0x9A ; 154 + 1e5c: f3 e2 ldi r31, 0x23 ; 35 + 1e5e: c4 81 ldd r28, Z+4 ; 0x04 setting_num = udd_g_ctrlreq.req.wValue & 0xFF; - 1e04: d2 81 ldd r29, Z+2 ; 0x02 + 1e60: d2 81 ldd r29, Z+2 ; 0x02 // Disable current setting if (!udc_iface_disable(iface_num)) { - 1e06: 8c 2f mov r24, r28 - 1e08: 62 dc rcall .-1852 ; 0x16ce - 1e0a: 88 23 and r24, r24 - 1e0c: c9 f1 breq .+114 ; 0x1e80 + 1e62: 8c 2f mov r24, r28 + 1e64: 5f dc rcall .-1858 ; 0x1724 + 1e66: 88 23 and r24, r24 + 1e68: c9 f1 breq .+114 ; 0x1edc return false; } // Enable new setting return udc_iface_enable(iface_num, setting_num); - 1e0e: 6d 2f mov r22, r29 - 1e10: 8c 2f mov r24, r28 - 1e12: 9f dc rcall .-1730 ; 0x1752 - 1e14: 33 c0 rjmp .+102 ; 0x1e7c + 1e6a: 6d 2f mov r22, r29 + 1e6c: 8c 2f mov r24, r28 + 1e6e: 9c dc rcall .-1736 ; 0x17a8 + 1e70: 33 c0 rjmp .+102 ; 0x1ed8 default: break; } } #if (0!=USB_DEVICE_MAX_EP) if (USB_REQ_RECIP_ENDPOINT == Udd_setup_recipient()) { - 1e16: 82 30 cpi r24, 0x02 ; 2 - 1e18: 99 f5 brne .+102 ; 0x1e80 + 1e72: 82 30 cpi r24, 0x02 ; 2 + 1e74: 99 f5 brne .+102 ; 0x1edc // Standard Set Endpoint request switch (udd_g_ctrlreq.req.bRequest) { - 1e1a: 80 91 9b 23 lds r24, 0x239B ; 0x80239b - 1e1e: 81 30 cpi r24, 0x01 ; 1 - 1e20: 19 f0 breq .+6 ; 0x1e28 - 1e22: 83 30 cpi r24, 0x03 ; 3 - 1e24: 89 f0 breq .+34 ; 0x1e48 - 1e26: 29 c0 rjmp .+82 ; 0x1e7a + 1e76: 80 91 9b 23 lds r24, 0x239B ; 0x80239b + 1e7a: 81 30 cpi r24, 0x01 ; 1 + 1e7c: 19 f0 breq .+6 ; 0x1e84 + 1e7e: 83 30 cpi r24, 0x03 ; 3 + 1e80: 89 f0 breq .+34 ; 0x1ea4 + 1e82: 29 c0 rjmp .+82 ; 0x1ed6 * * \return true if success */ static bool udc_req_std_ep_clear_feature(void) { if (udd_g_ctrlreq.req.wLength) { - 1e28: 80 91 a0 23 lds r24, 0x23A0 ; 0x8023a0 - 1e2c: 90 91 a1 23 lds r25, 0x23A1 ; 0x8023a1 - 1e30: 89 2b or r24, r25 - 1e32: 31 f5 brne .+76 ; 0x1e80 + 1e84: 80 91 a0 23 lds r24, 0x23A0 ; 0x8023a0 + 1e88: 90 91 a1 23 lds r25, 0x23A1 ; 0x8023a1 + 1e8c: 89 2b or r24, r25 + 1e8e: 31 f5 brne .+76 ; 0x1edc return false; } if (udd_g_ctrlreq.req.wValue == USB_EP_FEATURE_HALT) { - 1e34: 80 91 9c 23 lds r24, 0x239C ; 0x80239c - 1e38: 90 91 9d 23 lds r25, 0x239D ; 0x80239d - 1e3c: 89 2b or r24, r25 - 1e3e: 01 f5 brne .+64 ; 0x1e80 + 1e90: 80 91 9c 23 lds r24, 0x239C ; 0x80239c + 1e94: 90 91 9d 23 lds r25, 0x239D ; 0x80239d + 1e98: 89 2b or r24, r25 + 1e9a: 01 f5 brne .+64 ; 0x1edc return udd_ep_clear_halt(udd_g_ctrlreq.req.wIndex & 0xFF); - 1e40: 80 91 9e 23 lds r24, 0x239E ; 0x80239e - 1e44: 27 d5 rcall .+2638 ; 0x2894 - 1e46: 1a c0 rjmp .+52 ; 0x1e7c + 1e9c: 80 91 9e 23 lds r24, 0x239E ; 0x80239e + 1ea0: 27 d5 rcall .+2638 ; 0x28f0 + 1ea2: 1a c0 rjmp .+52 ; 0x1ed8 * \return true if success */ #if (0!=USB_DEVICE_MAX_EP) static bool udc_req_std_ep_set_feature(void) { if (udd_g_ctrlreq.req.wLength) { - 1e48: 80 91 a0 23 lds r24, 0x23A0 ; 0x8023a0 - 1e4c: 90 91 a1 23 lds r25, 0x23A1 ; 0x8023a1 - 1e50: 89 2b or r24, r25 - 1e52: b1 f4 brne .+44 ; 0x1e80 + 1ea4: 80 91 a0 23 lds r24, 0x23A0 ; 0x8023a0 + 1ea8: 90 91 a1 23 lds r25, 0x23A1 ; 0x8023a1 + 1eac: 89 2b or r24, r25 + 1eae: b1 f4 brne .+44 ; 0x1edc return false; } if (udd_g_ctrlreq.req.wValue == USB_EP_FEATURE_HALT) { - 1e54: 80 91 9c 23 lds r24, 0x239C ; 0x80239c - 1e58: 90 91 9d 23 lds r25, 0x239D ; 0x80239d - 1e5c: 89 2b or r24, r25 - 1e5e: 81 f4 brne .+32 ; 0x1e80 + 1eb0: 80 91 9c 23 lds r24, 0x239C ; 0x80239c + 1eb4: 90 91 9d 23 lds r25, 0x239D ; 0x80239d + 1eb8: 89 2b or r24, r25 + 1eba: 81 f4 brne .+32 ; 0x1edc udd_ep_abort(udd_g_ctrlreq.req.wIndex & 0xFF); - 1e60: ca e9 ldi r28, 0x9A ; 154 - 1e62: d3 e2 ldi r29, 0x23 ; 35 - 1e64: 8c 81 ldd r24, Y+4 ; 0x04 - 1e66: 05 d6 rcall .+3082 ; 0x2a72 + 1ebc: ca e9 ldi r28, 0x9A ; 154 + 1ebe: d3 e2 ldi r29, 0x23 ; 35 + 1ec0: 8c 81 ldd r24, Y+4 ; 0x04 + 1ec2: 05 d6 rcall .+3082 ; 0x2ace return udd_ep_set_halt(udd_g_ctrlreq.req.wIndex & 0xFF); - 1e68: 8c 81 ldd r24, Y+4 ; 0x04 - 1e6a: 68 d6 rcall .+3280 ; 0x2b3c - 1e6c: 07 c0 rjmp .+14 ; 0x1e7c + 1ec4: 8c 81 ldd r24, Y+4 ; 0x04 + 1ec6: 68 d6 rcall .+3280 ; 0x2b98 + 1ec8: 07 c0 rjmp .+14 ; 0x1ed8 } break; default: // Unknown descriptor requested return false; - 1e6e: 80 e0 ldi r24, 0x00 ; 0 - 1e70: 05 c0 rjmp .+10 ; 0x1e7c + 1eca: 80 e0 ldi r24, 0x00 ; 0 + 1ecc: 05 c0 rjmp .+10 ; 0x1ed8 break; } } #endif } return false; - 1e72: 80 e0 ldi r24, 0x00 ; 0 - 1e74: 03 c0 rjmp .+6 ; 0x1e7c + 1ece: 80 e0 ldi r24, 0x00 ; 0 + 1ed0: 03 c0 rjmp .+6 ; 0x1ed8 case USB_REQ_SET_ADDRESS: return udc_req_std_dev_set_address(); case USB_REQ_CLEAR_FEATURE: return udc_req_std_dev_clear_feature(); case USB_REQ_SET_FEATURE: return udc_req_std_dev_set_feature(); - 1e76: 80 e0 ldi r24, 0x00 ; 0 - 1e78: 01 c0 rjmp .+2 ; 0x1e7c + 1ed2: 80 e0 ldi r24, 0x00 ; 0 + 1ed4: 01 c0 rjmp .+2 ; 0x1ed8 break; } } #endif } return false; - 1e7a: 80 e0 ldi r24, 0x00 ; 0 + 1ed6: 80 e0 ldi r24, 0x00 ; 0 } } // If standard request then try to decode it in UDC if (Udd_setup_type() == USB_REQ_TYPE_STANDARD) { if (udc_reqstd()) { - 1e7c: 81 11 cpse r24, r1 - 1e7e: 7e c0 rjmp .+252 ; 0x1f7c + 1ed8: 81 11 cpse r24, r1 + 1eda: 7e c0 rjmp .+252 ; 0x1fd8 return true; } } // If interface request then try to decode it in UDI if (Udd_setup_recipient() == USB_REQ_RECIP_INTERFACE) { - 1e80: 80 91 9a 23 lds r24, 0x239A ; 0x80239a - 1e84: 8f 71 andi r24, 0x1F ; 31 - 1e86: 81 30 cpi r24, 0x01 ; 1 - 1e88: 71 f5 brne .+92 ; 0x1ee6 + 1edc: 80 91 9a 23 lds r24, 0x239A ; 0x80239a + 1ee0: 8f 71 andi r24, 0x1F ; 31 + 1ee2: 81 30 cpi r24, 0x01 ; 1 + 1ee4: 71 f5 brne .+92 ; 0x1f42 static bool udc_req_iface(void) { uint8_t iface_num; udi_api_t UDC_DESC_STORAGE *udi_api; if (0 == udc_num_configuration) { - 1e8a: 80 91 a2 20 lds r24, 0x20A2 ; 0x8020a2 - 1e8e: 88 23 and r24, r24 - 1e90: 51 f1 breq .+84 ; 0x1ee6 + 1ee6: 80 91 a2 20 lds r24, 0x20A2 ; 0x8020a2 + 1eea: 88 23 and r24, r24 + 1eec: 51 f1 breq .+84 ; 0x1f42 return false; // The device is not is configured state yet } // Check interface number iface_num = udd_g_ctrlreq.req.wIndex & 0xFF; - 1e92: 00 91 9e 23 lds r16, 0x239E ; 0x80239e - 1e96: 10 91 9f 23 lds r17, 0x239F ; 0x80239f + 1eee: 00 91 9e 23 lds r16, 0x239E ; 0x80239e + 1ef2: 10 91 9f 23 lds r17, 0x239F ; 0x80239f if (iface_num >= udc_ptr_conf->desc->bNumInterfaces) { - 1e9a: c0 91 9f 20 lds r28, 0x209F ; 0x80209f - 1e9e: d0 91 a0 20 lds r29, 0x20A0 ; 0x8020a0 - 1ea2: e8 81 ld r30, Y - 1ea4: f9 81 ldd r31, Y+1 ; 0x01 - 1ea6: 84 81 ldd r24, Z+4 ; 0x04 - 1ea8: 08 17 cp r16, r24 - 1eaa: e8 f4 brcc .+58 ; 0x1ee6 + 1ef6: c0 91 9f 20 lds r28, 0x209F ; 0x80209f + 1efa: d0 91 a0 20 lds r29, 0x20A0 ; 0x8020a0 + 1efe: e8 81 ld r30, Y + 1f00: f9 81 ldd r31, Y+1 ; 0x01 + 1f02: 84 81 ldd r24, Z+4 ; 0x04 + 1f04: 08 17 cp r16, r24 + 1f06: e8 f4 brcc .+58 ; 0x1f42 } //* To update udc_ptr_iface with the selected interface in request // Select first alternate setting of interface to update udc_ptr_iface // before calling udi_api->getsetting() if (!udc_update_iface_desc(iface_num, 0)) { - 1eac: 60 e0 ldi r22, 0x00 ; 0 - 1eae: 80 2f mov r24, r16 - 1eb0: d4 db rcall .-2136 ; 0x165a - 1eb2: 88 23 and r24, r24 - 1eb4: c1 f0 breq .+48 ; 0x1ee6 + 1f08: 60 e0 ldi r22, 0x00 ; 0 + 1f0a: 80 2f mov r24, r16 + 1f0c: d1 db rcall .-2142 ; 0x16b0 + 1f0e: 88 23 and r24, r24 + 1f10: c1 f0 breq .+48 ; 0x1f42 return false; } // Select the interface with the current alternate setting udi_api = udc_ptr_conf->udi_apis[iface_num]; - 1eb6: f8 01 movw r30, r16 - 1eb8: ff 27 eor r31, r31 - 1eba: cf 01 movw r24, r30 - 1ebc: 88 0f add r24, r24 - 1ebe: 99 1f adc r25, r25 - 1ec0: ea 81 ldd r30, Y+2 ; 0x02 - 1ec2: fb 81 ldd r31, Y+3 ; 0x03 - 1ec4: e8 0f add r30, r24 - 1ec6: f9 1f adc r31, r25 - 1ec8: c0 81 ld r28, Z - 1eca: d1 81 ldd r29, Z+1 ; 0x01 + 1f12: f8 01 movw r30, r16 + 1f14: ff 27 eor r31, r31 + 1f16: cf 01 movw r24, r30 + 1f18: 88 0f add r24, r24 + 1f1a: 99 1f adc r25, r25 + 1f1c: ea 81 ldd r30, Y+2 ; 0x02 + 1f1e: fb 81 ldd r31, Y+3 ; 0x03 + 1f20: e8 0f add r30, r24 + 1f22: f9 1f adc r31, r25 + 1f24: c0 81 ld r28, Z + 1f26: d1 81 ldd r29, Z+1 ; 0x01 if (!udc_update_iface_desc(iface_num, udi_api->getsetting())) { - 1ecc: ee 81 ldd r30, Y+6 ; 0x06 - 1ece: ff 81 ldd r31, Y+7 ; 0x07 - 1ed0: 09 95 icall - 1ed2: 68 2f mov r22, r24 - 1ed4: 80 2f mov r24, r16 - 1ed6: c1 db rcall .-2174 ; 0x165a - 1ed8: 88 23 and r24, r24 - 1eda: 29 f0 breq .+10 ; 0x1ee6 + 1f28: ee 81 ldd r30, Y+6 ; 0x06 + 1f2a: ff 81 ldd r31, Y+7 ; 0x07 + 1f2c: 09 95 icall + 1f2e: 68 2f mov r22, r24 + 1f30: 80 2f mov r24, r16 + 1f32: be db rcall .-2180 ; 0x16b0 + 1f34: 88 23 and r24, r24 + 1f36: 29 f0 breq .+10 ; 0x1f42 return false; } // Send the SETUP request to the UDI corresponding to the interface number return udi_api->setup(); - 1edc: ec 81 ldd r30, Y+4 ; 0x04 - 1ede: fd 81 ldd r31, Y+5 ; 0x05 - 1ee0: 09 95 icall + 1f38: ec 81 ldd r30, Y+4 ; 0x04 + 1f3a: fd 81 ldd r31, Y+5 ; 0x05 + 1f3c: 09 95 icall } } // If interface request then try to decode it in UDI if (Udd_setup_recipient() == USB_REQ_RECIP_INTERFACE) { if (udc_req_iface()) { - 1ee2: 81 11 cpse r24, r1 - 1ee4: 4b c0 rjmp .+150 ; 0x1f7c + 1f3e: 81 11 cpse r24, r1 + 1f40: 4b c0 rjmp .+150 ; 0x1fd8 return true; } } // If endpoint request then try to decode it in UDI if (Udd_setup_recipient() == USB_REQ_RECIP_ENDPOINT) { - 1ee6: 80 91 9a 23 lds r24, 0x239A ; 0x80239a - 1eea: 8f 71 andi r24, 0x1F ; 31 - 1eec: 82 30 cpi r24, 0x02 ; 2 - 1eee: 09 f0 breq .+2 ; 0x1ef2 - 1ef0: 40 c0 rjmp .+128 ; 0x1f72 + 1f42: 80 91 9a 23 lds r24, 0x239A ; 0x80239a + 1f46: 8f 71 andi r24, 0x1F ; 31 + 1f48: 82 30 cpi r24, 0x02 ; 2 + 1f4a: 09 f0 breq .+2 ; 0x1f4e + 1f4c: 40 c0 rjmp .+128 ; 0x1fce static bool udc_req_ep(void) { uint8_t iface_num; udi_api_t UDC_DESC_STORAGE *udi_api; if (0 == udc_num_configuration) { - 1ef2: 80 91 a2 20 lds r24, 0x20A2 ; 0x8020a2 - 1ef6: 88 23 and r24, r24 - 1ef8: b1 f1 breq .+108 ; 0x1f66 + 1f4e: 80 91 a2 20 lds r24, 0x20A2 ; 0x8020a2 + 1f52: 88 23 and r24, r24 + 1f54: b1 f1 breq .+108 ; 0x1fc2 return false; // The device is not is configured state yet } // Send this request on all enabled interfaces iface_num = udd_g_ctrlreq.req.wIndex & 0xFF; for (iface_num = 0; iface_num < udc_ptr_conf->desc->bNumInterfaces; - 1efa: a0 91 9f 20 lds r26, 0x209F ; 0x80209f - 1efe: b0 91 a0 20 lds r27, 0x20A0 ; 0x8020a0 - 1f02: ed 91 ld r30, X+ - 1f04: fc 91 ld r31, X - 1f06: 11 97 sbiw r26, 0x01 ; 1 - 1f08: 84 81 ldd r24, Z+4 ; 0x04 - 1f0a: 88 23 and r24, r24 - 1f0c: 71 f1 breq .+92 ; 0x1f6a - 1f0e: c0 e0 ldi r28, 0x00 ; 0 + 1f56: a0 91 9f 20 lds r26, 0x209F ; 0x80209f + 1f5a: b0 91 a0 20 lds r27, 0x20A0 ; 0x8020a0 + 1f5e: ed 91 ld r30, X+ + 1f60: fc 91 ld r31, X + 1f62: 11 97 sbiw r26, 0x01 ; 1 + 1f64: 84 81 ldd r24, Z+4 ; 0x04 + 1f66: 88 23 and r24, r24 + 1f68: 71 f1 breq .+92 ; 0x1fc6 + 1f6a: c0 e0 ldi r28, 0x00 ; 0 iface_num++) { // Select the interface with the current alternate setting udi_api = udc_ptr_conf->udi_apis[iface_num]; - 1f10: ec 2f mov r30, r28 - 1f12: f0 e0 ldi r31, 0x00 ; 0 - 1f14: ee 0f add r30, r30 - 1f16: ff 1f adc r31, r31 - 1f18: 12 96 adiw r26, 0x02 ; 2 - 1f1a: 8d 91 ld r24, X+ - 1f1c: 9c 91 ld r25, X - 1f1e: 13 97 sbiw r26, 0x03 ; 3 - 1f20: e8 0f add r30, r24 - 1f22: f9 1f adc r31, r25 - 1f24: 00 81 ld r16, Z - 1f26: 11 81 ldd r17, Z+1 ; 0x01 + 1f6c: ec 2f mov r30, r28 + 1f6e: f0 e0 ldi r31, 0x00 ; 0 + 1f70: ee 0f add r30, r30 + 1f72: ff 1f adc r31, r31 + 1f74: 12 96 adiw r26, 0x02 ; 2 + 1f76: 8d 91 ld r24, X+ + 1f78: 9c 91 ld r25, X + 1f7a: 13 97 sbiw r26, 0x03 ; 3 + 1f7c: e8 0f add r30, r24 + 1f7e: f9 1f adc r31, r25 + 1f80: 00 81 ld r16, Z + 1f82: 11 81 ldd r17, Z+1 ; 0x01 if (!udc_update_iface_desc(iface_num, udi_api->getsetting())) { - 1f28: d8 01 movw r26, r16 - 1f2a: 16 96 adiw r26, 0x06 ; 6 - 1f2c: ed 91 ld r30, X+ - 1f2e: fc 91 ld r31, X - 1f30: 17 97 sbiw r26, 0x07 ; 7 - 1f32: 09 95 icall - 1f34: 68 2f mov r22, r24 - 1f36: 8c 2f mov r24, r28 - 1f38: 90 db rcall .-2272 ; 0x165a - 1f3a: 88 23 and r24, r24 - 1f3c: f9 f0 breq .+62 ; 0x1f7c + 1f84: d8 01 movw r26, r16 + 1f86: 16 96 adiw r26, 0x06 ; 6 + 1f88: ed 91 ld r30, X+ + 1f8a: fc 91 ld r31, X + 1f8c: 17 97 sbiw r26, 0x07 ; 7 + 1f8e: 09 95 icall + 1f90: 68 2f mov r22, r24 + 1f92: 8c 2f mov r24, r28 + 1f94: 8d db rcall .-2278 ; 0x16b0 + 1f96: 88 23 and r24, r24 + 1f98: f9 f0 breq .+62 ; 0x1fd8 return false; } // Send the SETUP request to the UDI if (udi_api->setup()) { - 1f3e: d8 01 movw r26, r16 - 1f40: 14 96 adiw r26, 0x04 ; 4 - 1f42: ed 91 ld r30, X+ - 1f44: fc 91 ld r31, X - 1f46: 15 97 sbiw r26, 0x05 ; 5 - 1f48: 09 95 icall - 1f4a: 81 11 cpse r24, r1 - 1f4c: 17 c0 rjmp .+46 ; 0x1f7c + 1f9a: d8 01 movw r26, r16 + 1f9c: 14 96 adiw r26, 0x04 ; 4 + 1f9e: ed 91 ld r30, X+ + 1fa0: fc 91 ld r31, X + 1fa2: 15 97 sbiw r26, 0x05 ; 5 + 1fa4: 09 95 icall + 1fa6: 81 11 cpse r24, r1 + 1fa8: 17 c0 rjmp .+46 ; 0x1fd8 return false; // The device is not is configured state yet } // Send this request on all enabled interfaces iface_num = udd_g_ctrlreq.req.wIndex & 0xFF; for (iface_num = 0; iface_num < udc_ptr_conf->desc->bNumInterfaces; iface_num++) { - 1f4e: cf 5f subi r28, 0xFF ; 255 + 1faa: cf 5f subi r28, 0xFF ; 255 if (0 == udc_num_configuration) { return false; // The device is not is configured state yet } // Send this request on all enabled interfaces iface_num = udd_g_ctrlreq.req.wIndex & 0xFF; for (iface_num = 0; iface_num < udc_ptr_conf->desc->bNumInterfaces; - 1f50: a0 91 9f 20 lds r26, 0x209F ; 0x80209f - 1f54: b0 91 a0 20 lds r27, 0x20A0 ; 0x8020a0 - 1f58: ed 91 ld r30, X+ - 1f5a: fc 91 ld r31, X - 1f5c: 11 97 sbiw r26, 0x01 ; 1 - 1f5e: 94 81 ldd r25, Z+4 ; 0x04 - 1f60: c9 17 cp r28, r25 - 1f62: b0 f2 brcs .-84 ; 0x1f10 - 1f64: 0b c0 rjmp .+22 ; 0x1f7c + 1fac: a0 91 9f 20 lds r26, 0x209F ; 0x80209f + 1fb0: b0 91 a0 20 lds r27, 0x20A0 ; 0x8020a0 + 1fb4: ed 91 ld r30, X+ + 1fb6: fc 91 ld r31, X + 1fb8: 11 97 sbiw r26, 0x01 ; 1 + 1fba: 94 81 ldd r25, Z+4 ; 0x04 + 1fbc: c9 17 cp r28, r25 + 1fbe: b0 f2 brcs .-84 ; 0x1f6c + 1fc0: 0b c0 rjmp .+22 ; 0x1fd8 { uint8_t iface_num; udi_api_t UDC_DESC_STORAGE *udi_api; if (0 == udc_num_configuration) { return false; // The device is not is configured state yet - 1f66: 80 e0 ldi r24, 0x00 ; 0 - 1f68: 09 c0 rjmp .+18 ; 0x1f7c + 1fc2: 80 e0 ldi r24, 0x00 ; 0 + 1fc4: 09 c0 rjmp .+18 ; 0x1fd8 // Send the SETUP request to the UDI if (udi_api->setup()) { return true; } } return false; - 1f6a: 80 e0 ldi r24, 0x00 ; 0 - 1f6c: 07 c0 rjmp .+14 ; 0x1f7c + 1fc6: 80 e0 ldi r24, 0x00 ; 0 + 1fc8: 07 c0 rjmp .+14 ; 0x1fd8 udd_g_ctrlreq.callback = NULL; udd_g_ctrlreq.over_under_run = NULL; if (Udd_setup_is_in()) { if (udd_g_ctrlreq.req.wLength == 0) { return false; // Error from USB host - 1f6e: 80 e0 ldi r24, 0x00 ; 0 - 1f70: 05 c0 rjmp .+10 ; 0x1f7c + 1fca: 80 e0 ldi r24, 0x00 ; 0 + 1fcc: 05 c0 rjmp .+10 ; 0x1fd8 // Here SETUP request unknown by UDC and UDIs #ifdef USB_DEVICE_SPECIFIC_REQUEST // Try to decode it in specific callback return USB_DEVICE_SPECIFIC_REQUEST(); // Ex: Vendor request,... #else return false; - 1f72: 80 e0 ldi r24, 0x00 ; 0 - 1f74: 03 c0 rjmp .+6 ; 0x1f7c + 1fce: 80 e0 ldi r24, 0x00 ; 0 + 1fd0: 03 c0 rjmp .+6 ; 0x1fd8 } } if (Udd_setup_type() == USB_REQ_TYPE_VENDOR){ if (udc_reqvend()) { return true; - 1f76: 81 e0 ldi r24, 0x01 ; 1 - 1f78: 01 c0 rjmp .+2 ; 0x1f7c + 1fd2: 81 e0 ldi r24, 0x01 ; 1 + 1fd4: 01 c0 rjmp .+2 ; 0x1fd8 } // If standard request then try to decode it in UDC if (Udd_setup_type() == USB_REQ_TYPE_STANDARD) { if (udc_reqstd()) { return true; - 1f7a: 81 e0 ldi r24, 0x01 ; 1 + 1fd6: 81 e0 ldi r24, 0x01 ; 1 // Try to decode it in specific callback return USB_DEVICE_SPECIFIC_REQUEST(); // Ex: Vendor request,... #else return false; #endif } - 1f7c: df 91 pop r29 - 1f7e: cf 91 pop r28 - 1f80: 1f 91 pop r17 - 1f82: 0f 91 pop r16 - 1f84: 08 95 ret + 1fd8: df 91 pop r29 + 1fda: cf 91 pop r28 + 1fdc: 1f 91 pop r17 + 1fde: 0f 91 pop r16 + 1fe0: 08 95 ret -00001f86 : +00001fe2 : PUBLIC_FUNCTION(ccp_write_io) #if defined(__GNUC__) out RAMPZ, r1 // Reset bits 23:16 of Z - 1f86: 1b be out 0x3b, r1 ; 59 + 1fe2: 1b be out 0x3b, r1 ; 59 movw r30, r24 // Load addr into Z - 1f88: fc 01 movw r30, r24 + 1fe4: fc 01 movw r30, r24 ldi r18, CCP_IOREG // Load magic CCP value - 1f8a: 28 ed ldi r18, 0xD8 ; 216 + 1fe6: 28 ed ldi r18, 0xD8 ; 216 out CCP, r18 // Start CCP handshake - 1f8c: 24 bf out 0x34, r18 ; 52 + 1fe8: 24 bf out 0x34, r18 ; 52 st Z, r22 // Write value to I/O register - 1f8e: 60 83 st Z, r22 + 1fea: 60 83 st Z, r22 ret // Return to caller - 1f90: 08 95 ret + 1fec: 08 95 ret -00001f92 : +00001fee : * the protection signature and execute command. */ NVM.CMD = NVM_CMD_ERASE_WRITE_EEPROM_PAGE_gc; nvm_exec(); NVM.CMD = old_cmd; } - 1f92: cf 93 push r28 - 1f94: df 93 push r29 - 1f96: 9c 01 movw r18, r24 - 1f98: db 01 movw r26, r22 - 1f9a: e0 ec ldi r30, 0xC0 ; 192 - 1f9c: f1 e0 ldi r31, 0x01 ; 1 - 1f9e: 97 85 ldd r25, Z+15 ; 0x0f - 1fa0: 99 23 and r25, r25 - 1fa2: ec f3 brlt .-6 ; 0x1f9e - 1fa4: cc ec ldi r28, 0xCC ; 204 - 1fa6: d1 e0 ldi r29, 0x01 ; 1 - 1fa8: 98 81 ld r25, Y - 1faa: 98 60 ori r25, 0x08 ; 8 - 1fac: 98 83 st Y, r25 - 1fae: b9 01 movw r22, r18 - 1fb0: 70 5f subi r23, 0xF0 ; 240 - 1fb2: cd 01 movw r24, r26 - 1fb4: b9 d7 rcall .+3954 ; 0x2f28 - 1fb6: 88 81 ld r24, Y - 1fb8: 87 7f andi r24, 0xF7 ; 247 - 1fba: 88 83 st Y, r24 - 1fbc: df 91 pop r29 - 1fbe: cf 91 pop r28 - 1fc0: 08 95 ret + 1fee: cf 93 push r28 + 1ff0: df 93 push r29 + 1ff2: 9c 01 movw r18, r24 + 1ff4: db 01 movw r26, r22 + 1ff6: e0 ec ldi r30, 0xC0 ; 192 + 1ff8: f1 e0 ldi r31, 0x01 ; 1 + 1ffa: 97 85 ldd r25, Z+15 ; 0x0f + 1ffc: 99 23 and r25, r25 + 1ffe: ec f3 brlt .-6 ; 0x1ffa + 2000: cc ec ldi r28, 0xCC ; 204 + 2002: d1 e0 ldi r29, 0x01 ; 1 + 2004: 98 81 ld r25, Y + 2006: 98 60 ori r25, 0x08 ; 8 + 2008: 98 83 st Y, r25 + 200a: b9 01 movw r22, r18 + 200c: 70 5f subi r23, 0xF0 ; 240 + 200e: cd 01 movw r24, r26 + 2010: b9 d7 rcall .+3954 ; 0x2f84 + 2012: 88 81 ld r24, Y + 2014: 87 7f andi r24, 0xF7 ; 247 + 2016: 88 83 st Y, r24 + 2018: df 91 pop r29 + 201a: cf 91 pop r28 + 201c: 08 95 ret -00001fc2 : - 1fc2: e0 ec ldi r30, 0xC0 ; 192 - 1fc4: f1 e0 ldi r31, 0x01 ; 1 - 1fc6: 97 85 ldd r25, Z+15 ; 0x0f - 1fc8: 99 23 and r25, r25 - 1fca: ec f3 brlt .-6 ; 0x1fc6 - 1fcc: ac ec ldi r26, 0xCC ; 204 - 1fce: b1 e0 ldi r27, 0x01 ; 1 - 1fd0: 9c 91 ld r25, X - 1fd2: 98 60 ori r25, 0x08 ; 8 - 1fd4: 9c 93 st X, r25 - 1fd6: e8 2f mov r30, r24 - 1fd8: f0 e0 ldi r31, 0x00 ; 0 - 1fda: f0 5f subi r31, 0xF0 ; 240 - 1fdc: 60 83 st Z, r22 - 1fde: 8c 91 ld r24, X - 1fe0: 87 7f andi r24, 0xF7 ; 247 - 1fe2: 8c 93 st X, r24 - 1fe4: 08 95 ret +0000201e : + 201e: e0 ec ldi r30, 0xC0 ; 192 + 2020: f1 e0 ldi r31, 0x01 ; 1 + 2022: 97 85 ldd r25, Z+15 ; 0x0f + 2024: 99 23 and r25, r25 + 2026: ec f3 brlt .-6 ; 0x2022 + 2028: ac ec ldi r26, 0xCC ; 204 + 202a: b1 e0 ldi r27, 0x01 ; 1 + 202c: 9c 91 ld r25, X + 202e: 98 60 ori r25, 0x08 ; 8 + 2030: 9c 93 st X, r25 + 2032: e8 2f mov r30, r24 + 2034: f0 e0 ldi r31, 0x00 ; 0 + 2036: f0 5f subi r31, 0xF0 ; 240 + 2038: 60 83 st Z, r22 + 203a: 8c 91 ld r24, X + 203c: 87 7f andi r24, 0xF7 ; 247 + 203e: 8c 93 st X, r24 + 2040: 08 95 ret -00001fe6 : +00002042 : * EEPROM write page operation. * * \param values Pointer to SRAM buffer containing an entire page. */ void nvm_eeprom_load_page_to_buffer(const uint8_t *values) { - 1fe6: ef 92 push r14 - 1fe8: ff 92 push r15 - 1fea: 0f 93 push r16 - 1fec: 1f 93 push r17 - 1fee: cf 93 push r28 - 1ff0: df 93 push r29 - 1ff2: 8c 01 movw r16, r24 + 2042: ef 92 push r14 + 2044: ff 92 push r15 + 2046: 0f 93 push r16 + 2048: 1f 93 push r17 + 204a: cf 93 push r28 + 204c: df 93 push r29 + 204e: 8c 01 movw r16, r24 */ static inline void nvm_wait_until_ready( void ) { do { // Block execution while waiting for the NVM to be ready } while ((NVM.STATUS & NVM_NVMBUSY_bm) == NVM_NVMBUSY_bm); - 1ff4: e0 ec ldi r30, 0xC0 ; 192 - 1ff6: f1 e0 ldi r31, 0x01 ; 1 - 1ff8: 87 85 ldd r24, Z+15 ; 0x0f - 1ffa: 88 23 and r24, r24 - 1ffc: ec f3 brlt .-6 ; 0x1ff8 - 1ffe: 78 01 movw r14, r16 - 2000: 80 e2 ldi r24, 0x20 ; 32 - 2002: e8 0e add r14, r24 - 2004: f1 1c adc r15, r1 - 2006: e8 01 movw r28, r16 - 2008: 8c 2f mov r24, r28 - 200a: 80 1b sub r24, r16 + 2050: e0 ec ldi r30, 0xC0 ; 192 + 2052: f1 e0 ldi r31, 0x01 ; 1 + 2054: 87 85 ldd r24, Z+15 ; 0x0f + 2056: 88 23 and r24, r24 + 2058: ec f3 brlt .-6 ; 0x2054 + 205a: 78 01 movw r14, r16 + 205c: 80 e2 ldi r24, 0x20 ; 32 + 205e: e8 0e add r14, r24 + 2060: f1 1c adc r15, r1 + 2062: e8 01 movw r28, r16 + 2064: 8c 2f mov r24, r28 + 2066: 80 1b sub r24, r16 nvm_wait_until_ready(); // Load multiple bytes into page buffer uint8_t i; for (i = 0; i < EEPROM_PAGE_SIZE; ++i) { nvm_eeprom_load_byte_to_buffer(i, *values); - 200c: 69 91 ld r22, Y+ - 200e: d9 df rcall .-78 ; 0x1fc2 + 2068: 69 91 ld r22, Y+ + 206a: d9 df rcall .-78 ; 0x201e // Wait until NVM is ready nvm_wait_until_ready(); // Load multiple bytes into page buffer uint8_t i; for (i = 0; i < EEPROM_PAGE_SIZE; ++i) { - 2010: ce 15 cp r28, r14 - 2012: df 05 cpc r29, r15 - 2014: c9 f7 brne .-14 ; 0x2008 + 206c: ce 15 cp r28, r14 + 206e: df 05 cpc r29, r15 + 2070: c9 f7 brne .-14 ; 0x2064 nvm_eeprom_load_byte_to_buffer(i, *values); ++values; } } - 2016: df 91 pop r29 - 2018: cf 91 pop r28 - 201a: 1f 91 pop r17 - 201c: 0f 91 pop r16 - 201e: ff 90 pop r15 - 2020: ef 90 pop r14 - 2022: 08 95 ret + 2072: df 91 pop r29 + 2074: cf 91 pop r28 + 2076: 1f 91 pop r17 + 2078: 0f 91 pop r16 + 207a: ff 90 pop r15 + 207c: ef 90 pop r14 + 207e: 08 95 ret -00002024 : +00002080 : * locations that have not been loaded will be left untouched in EEPROM. * * \param page_addr EEPROM Page address, between 0 and EEPROM_SIZE/EEPROM_PAGE_SIZE */ void nvm_eeprom_atomic_write_page(uint8_t page_addr) { - 2024: 1f 93 push r17 - 2026: cf 93 push r28 - 2028: df 93 push r29 - 202a: e0 ec ldi r30, 0xC0 ; 192 - 202c: f1 e0 ldi r31, 0x01 ; 1 - 202e: 97 85 ldd r25, Z+15 ; 0x0f - 2030: 99 23 and r25, r25 - 2032: ec f3 brlt .-6 ; 0x202e + 2080: 1f 93 push r17 + 2082: cf 93 push r28 + 2084: df 93 push r29 + 2086: e0 ec ldi r30, 0xC0 ; 192 + 2088: f1 e0 ldi r31, 0x01 ; 1 + 208a: 97 85 ldd r25, Z+15 ; 0x0f + 208c: 99 23 and r25, r25 + 208e: ec f3 brlt .-6 ; 0x208a // Wait until NVM is ready nvm_wait_until_ready(); // Calculate page address uint16_t address = (uint16_t)(page_addr * EEPROM_PAGE_SIZE); - 2034: 20 e2 ldi r18, 0x20 ; 32 - 2036: 82 9f mul r24, r18 - 2038: c0 01 movw r24, r0 - 203a: 11 24 eor r1, r1 + 2090: 20 e2 ldi r18, 0x20 ; 32 + 2092: 82 9f mul r24, r18 + 2094: c0 01 movw r24, r0 + 2096: 11 24 eor r1, r1 Assert(address <= EEPROM_SIZE); // Set address NVM.ADDR2 = 0x00; - 203c: c0 ec ldi r28, 0xC0 ; 192 - 203e: d1 e0 ldi r29, 0x01 ; 1 - 2040: 1a 82 std Y+2, r1 ; 0x02 + 2098: c0 ec ldi r28, 0xC0 ; 192 + 209a: d1 e0 ldi r29, 0x01 ; 1 + 209c: 1a 82 std Y+2, r1 ; 0x02 NVM.ADDR1 = (address >> 8) & 0xFF; - 2042: 99 83 std Y+1, r25 ; 0x01 + 209e: 99 83 std Y+1, r25 ; 0x01 NVM.ADDR0 = address & 0xFF; - 2044: 88 83 st Y, r24 + 20a0: 88 83 st Y, r24 */ static inline void nvm_issue_command(NVM_CMD_t nvm_command) { uint8_t old_cmd; old_cmd = NVM.CMD; - 2046: 1a 85 ldd r17, Y+10 ; 0x0a + 20a2: 1a 85 ldd r17, Y+10 ; 0x0a NVM.CMD = nvm_command; - 2048: 85 e3 ldi r24, 0x35 ; 53 - 204a: 8a 87 std Y+10, r24 ; 0x0a + 20a4: 85 e3 ldi r24, 0x35 ; 53 + 20a6: 8a 87 std Y+10, r24 ; 0x0a ccp_write_io((uint8_t *)&NVM.CTRLA, NVM_CMDEX_bm); - 204c: 61 e0 ldi r22, 0x01 ; 1 - 204e: 8b ec ldi r24, 0xCB ; 203 - 2050: 91 e0 ldi r25, 0x01 ; 1 - 2052: 99 df rcall .-206 ; 0x1f86 + 20a8: 61 e0 ldi r22, 0x01 ; 1 + 20aa: 8b ec ldi r24, 0xCB ; 203 + 20ac: 91 e0 ldi r25, 0x01 ; 1 + 20ae: 99 df rcall .-206 ; 0x1fe2 NVM.CMD = old_cmd; - 2054: 1a 87 std Y+10, r17 ; 0x0a + 20b0: 1a 87 std Y+10, r17 ; 0x0a // Issue EEPROM Atomic Write (Erase&Write) command nvm_issue_command(NVM_CMD_ERASE_WRITE_EEPROM_PAGE_gc); } - 2056: df 91 pop r29 - 2058: cf 91 pop r28 - 205a: 1f 91 pop r17 - 205c: 08 95 ret + 20b2: df 91 pop r29 + 20b4: cf 91 pop r28 + 20b6: 1f 91 pop r17 + 20b8: 08 95 ret -0000205e : +000020ba : #endif #ifndef __DOXYGEN__ PUBLIC_FUNCTION(nvm_read_byte) #if defined(__GNUC__) lds r20, NVM_CMD ; Store NVM command register - 205e: 40 91 ca 01 lds r20, 0x01CA ; 0x8001ca <__TEXT_REGION_LENGTH__+0x7001ca> + 20ba: 40 91 ca 01 lds r20, 0x01CA ; 0x8001ca <__TEXT_REGION_LENGTH__+0x7001ca> mov ZL, r22 ; Load byte index into low byte of Z. - 2062: e6 2f mov r30, r22 + 20be: e6 2f mov r30, r22 mov ZH, r23 ; Load high byte into Z. - 2064: f7 2f mov r31, r23 + 20c0: f7 2f mov r31, r23 sts NVM_CMD, r24 ; Load prepared command into NVM Command register. - 2066: 80 93 ca 01 sts 0x01CA, r24 ; 0x8001ca <__TEXT_REGION_LENGTH__+0x7001ca> + 20c2: 80 93 ca 01 sts 0x01CA, r24 ; 0x8001ca <__TEXT_REGION_LENGTH__+0x7001ca> lpm r24, Z ; Perform an LPM to read out byte - 206a: 84 91 lpm r24, Z + 20c6: 84 91 lpm r24, Z sts NVM_CMD, r20 ; Restore NVM command register - 206c: 40 93 ca 01 sts 0x01CA, r20 ; 0x8001ca <__TEXT_REGION_LENGTH__+0x7001ca> + 20c8: 40 93 ca 01 sts 0x01CA, r20 ; 0x8001ca <__TEXT_REGION_LENGTH__+0x7001ca> sts NVM_CMD, r16 ; Load prepared command into NVM Command register. lpm r16, Z ; Perform an LPM to read out byte sts NVM_CMD, r20 ; Restore NVM command register #endif ret - 2070: 08 95 ret + 20cc: 08 95 ret -00002072 : +000020ce : } else { // endpoint not halted then call directly callback callback(); } return true; } - 2072: 81 11 cpse r24, r1 - 2074: 22 c0 rjmp .+68 ; 0x20ba - 2076: 90 91 6c 21 lds r25, 0x216C ; 0x80216c - 207a: 99 23 and r25, r25 - 207c: d9 f0 breq .+54 ; 0x20b4 - 207e: 90 91 cb 2b lds r25, 0x2BCB ; 0x802bcb - 2082: 91 11 cpse r25, r1 - 2084: 01 c0 rjmp .+2 ; 0x2088 - 2086: ff cf rjmp .-2 ; 0x2086 - 2088: 2f b7 in r18, 0x3f ; 63 - 208a: f8 94 cli - 208c: ea ec ldi r30, 0xCA ; 202 - 208e: fb e2 ldi r31, 0x2B ; 43 - 2090: 91 81 ldd r25, Z+1 ; 0x01 - 2092: 91 50 subi r25, 0x01 ; 1 - 2094: 91 83 std Z+1, r25 ; 0x01 - 2096: 2f bf out 0x3f, r18 ; 63 - 2098: 0d c0 rjmp .+26 ; 0x20b4 - 209a: 90 91 cb 2b lds r25, 0x2BCB ; 0x802bcb - 209e: 9f 3f cpi r25, 0xFF ; 255 - 20a0: 09 f4 brne .+2 ; 0x20a4 - 20a2: ff cf rjmp .-2 ; 0x20a2 - 20a4: 2f b7 in r18, 0x3f ; 63 - 20a6: f8 94 cli - 20a8: ea ec ldi r30, 0xCA ; 202 - 20aa: fb e2 ldi r31, 0x2B ; 43 - 20ac: 91 81 ldd r25, Z+1 ; 0x01 - 20ae: 9f 5f subi r25, 0xFF ; 255 - 20b0: 91 83 std Z+1, r25 ; 0x01 - 20b2: 2f bf out 0x3f, r18 ; 63 - 20b4: 80 93 6c 21 sts 0x216C, r24 ; 0x80216c - 20b8: 08 95 ret - 20ba: 90 91 6c 21 lds r25, 0x216C ; 0x80216c - 20be: 99 23 and r25, r25 - 20c0: 61 f3 breq .-40 ; 0x209a - 20c2: f8 cf rjmp .-16 ; 0x20b4 + 20ce: 81 11 cpse r24, r1 + 20d0: 22 c0 rjmp .+68 ; 0x2116 + 20d2: 90 91 6c 21 lds r25, 0x216C ; 0x80216c + 20d6: 99 23 and r25, r25 + 20d8: d9 f0 breq .+54 ; 0x2110 + 20da: 90 91 cb 2b lds r25, 0x2BCB ; 0x802bcb + 20de: 91 11 cpse r25, r1 + 20e0: 01 c0 rjmp .+2 ; 0x20e4 + 20e2: ff cf rjmp .-2 ; 0x20e2 + 20e4: 2f b7 in r18, 0x3f ; 63 + 20e6: f8 94 cli + 20e8: ea ec ldi r30, 0xCA ; 202 + 20ea: fb e2 ldi r31, 0x2B ; 43 + 20ec: 91 81 ldd r25, Z+1 ; 0x01 + 20ee: 91 50 subi r25, 0x01 ; 1 + 20f0: 91 83 std Z+1, r25 ; 0x01 + 20f2: 2f bf out 0x3f, r18 ; 63 + 20f4: 0d c0 rjmp .+26 ; 0x2110 + 20f6: 90 91 cb 2b lds r25, 0x2BCB ; 0x802bcb + 20fa: 9f 3f cpi r25, 0xFF ; 255 + 20fc: 09 f4 brne .+2 ; 0x2100 + 20fe: ff cf rjmp .-2 ; 0x20fe + 2100: 2f b7 in r18, 0x3f ; 63 + 2102: f8 94 cli + 2104: ea ec ldi r30, 0xCA ; 202 + 2106: fb e2 ldi r31, 0x2B ; 43 + 2108: 91 81 ldd r25, Z+1 ; 0x01 + 210a: 9f 5f subi r25, 0xFF ; 255 + 210c: 91 83 std Z+1, r25 ; 0x01 + 210e: 2f bf out 0x3f, r18 ; 63 + 2110: 80 93 6c 21 sts 0x216C, r24 ; 0x80216c + 2114: 08 95 ret + 2116: 90 91 6c 21 lds r25, 0x216C ; 0x80216c + 211a: 99 23 and r25, r25 + 211c: 61 f3 breq .-40 ; 0x20f6 + 211e: f8 cf rjmp .-16 ; 0x2110 -000020c4 : - 20c4: 0f 93 push r16 - 20c6: e8 ec ldi r30, 0xC8 ; 200 - 20c8: f4 e0 ldi r31, 0x04 ; 4 - 20ca: 80 81 ld r24, Z - 20cc: 8f 7d andi r24, 0xDF ; 223 - 20ce: 80 83 st Z, r24 - 20d0: 80 81 ld r24, Z - 20d2: 8f 7d andi r24, 0xDF ; 223 - 20d4: 80 83 st Z, r24 - 20d6: e0 e5 ldi r30, 0x50 ; 80 - 20d8: f1 e2 ldi r31, 0x21 ; 33 - 20da: 02 e0 ldi r16, 0x02 ; 2 - 20dc: 05 93 las Z, r16 - 20de: 10 92 52 21 sts 0x2152, r1 ; 0x802152 - 20e2: 10 92 53 21 sts 0x2153, r1 ; 0x802153 - 20e6: 00 e2 ldi r16, 0x20 ; 32 - 20e8: 06 93 lac Z, r16 - 20ea: 00 e4 ldi r16, 0x40 ; 64 - 20ec: 06 93 lac Z, r16 - 20ee: e8 e4 ldi r30, 0x48 ; 72 - 20f0: f1 e2 ldi r31, 0x21 ; 33 - 20f2: 00 e2 ldi r16, 0x20 ; 32 - 20f4: 06 93 lac Z, r16 - 20f6: 00 e4 ldi r16, 0x40 ; 64 - 20f8: 06 93 lac Z, r16 - 20fa: ea e9 ldi r30, 0x9A ; 154 - 20fc: f3 e2 ldi r31, 0x23 ; 35 - 20fe: 14 86 std Z+12, r1 ; 0x0c - 2100: 15 86 std Z+13, r1 ; 0x0d - 2102: 16 86 std Z+14, r1 ; 0x0e - 2104: 17 86 std Z+15, r1 ; 0x0f - 2106: 12 86 std Z+10, r1 ; 0x0a - 2108: 13 86 std Z+11, r1 ; 0x0b - 210a: 10 92 3f 21 sts 0x213F, r1 ; 0x80213f - 210e: 0f 91 pop r16 - 2110: 08 95 ret - -00002112 : - 2112: 0f 93 push r16 - 2114: 85 e0 ldi r24, 0x05 ; 5 - 2116: 80 93 3f 21 sts 0x213F, r24 ; 0x80213f - 211a: e1 e5 ldi r30, 0x51 ; 81 - 211c: f1 e2 ldi r31, 0x21 ; 33 - 211e: 04 e0 ldi r16, 0x04 ; 4 - 2120: 05 93 las Z, r16 - 2122: e9 e4 ldi r30, 0x49 ; 73 - 2124: f1 e2 ldi r31, 0x21 ; 33 - 2126: 04 e0 ldi r16, 0x04 ; 4 - 2128: 05 93 las Z, r16 - 212a: 0f 91 pop r16 - 212c: 08 95 ret - -0000212e : - 212e: 0f 93 push r16 - 2130: 83 e0 ldi r24, 0x03 ; 3 - 2132: 80 93 3f 21 sts 0x213F, r24 ; 0x80213f - 2136: 10 92 52 21 sts 0x2152, r1 ; 0x802152 - 213a: 10 92 53 21 sts 0x2153, r1 ; 0x802153 - 213e: e0 e5 ldi r30, 0x50 ; 80 - 2140: f1 e2 ldi r31, 0x21 ; 33 - 2142: 02 e0 ldi r16, 0x02 ; 2 +00002120 : + 2120: 0f 93 push r16 + 2122: e8 ec ldi r30, 0xC8 ; 200 + 2124: f4 e0 ldi r31, 0x04 ; 4 + 2126: 80 81 ld r24, Z + 2128: 8f 7d andi r24, 0xDF ; 223 + 212a: 80 83 st Z, r24 + 212c: 80 81 ld r24, Z + 212e: 8f 7d andi r24, 0xDF ; 223 + 2130: 80 83 st Z, r24 + 2132: e0 e5 ldi r30, 0x50 ; 80 + 2134: f1 e2 ldi r31, 0x21 ; 33 + 2136: 02 e0 ldi r16, 0x02 ; 2 + 2138: 05 93 las Z, r16 + 213a: 10 92 52 21 sts 0x2152, r1 ; 0x802152 + 213e: 10 92 53 21 sts 0x2153, r1 ; 0x802153 + 2142: 00 e2 ldi r16, 0x20 ; 32 2144: 06 93 lac Z, r16 - 2146: 0f 91 pop r16 - 2148: 08 95 ret + 2146: 00 e4 ldi r16, 0x40 ; 64 + 2148: 06 93 lac Z, r16 + 214a: e8 e4 ldi r30, 0x48 ; 72 + 214c: f1 e2 ldi r31, 0x21 ; 33 + 214e: 00 e2 ldi r16, 0x20 ; 32 + 2150: 06 93 lac Z, r16 + 2152: 00 e4 ldi r16, 0x40 ; 64 + 2154: 06 93 lac Z, r16 + 2156: ea e9 ldi r30, 0x9A ; 154 + 2158: f3 e2 ldi r31, 0x23 ; 35 + 215a: 14 86 std Z+12, r1 ; 0x0c + 215c: 15 86 std Z+13, r1 ; 0x0d + 215e: 16 86 std Z+14, r1 ; 0x0e + 2160: 17 86 std Z+15, r1 ; 0x0f + 2162: 12 86 std Z+10, r1 ; 0x0a + 2164: 13 86 std Z+11, r1 ; 0x0b + 2166: 10 92 3f 21 sts 0x213F, r1 ; 0x80213f + 216a: 0f 91 pop r16 + 216c: 08 95 ret -0000214a : - 214a: e0 91 a6 23 lds r30, 0x23A6 ; 0x8023a6 - 214e: f0 91 a7 23 lds r31, 0x23A7 ; 0x8023a7 - 2152: 30 97 sbiw r30, 0x00 ; 0 - 2154: 09 f0 breq .+2 ; 0x2158 - 2156: 09 95 icall - 2158: 08 95 ret +0000216e : + 216e: 0f 93 push r16 + 2170: 85 e0 ldi r24, 0x05 ; 5 + 2172: 80 93 3f 21 sts 0x213F, r24 ; 0x80213f + 2176: e1 e5 ldi r30, 0x51 ; 81 + 2178: f1 e2 ldi r31, 0x21 ; 33 + 217a: 04 e0 ldi r16, 0x04 ; 4 + 217c: 05 93 las Z, r16 + 217e: e9 e4 ldi r30, 0x49 ; 73 + 2180: f1 e2 ldi r31, 0x21 ; 33 + 2182: 04 e0 ldi r16, 0x04 ; 4 + 2184: 05 93 las Z, r16 + 2186: 0f 91 pop r16 + 2188: 08 95 ret -0000215a : - 215a: 0f 93 push r16 - 215c: cf 93 push r28 - 215e: df 93 push r29 - 2160: 80 91 3f 21 lds r24, 0x213F ; 0x80213f - 2164: 83 30 cpi r24, 0x03 ; 3 - 2166: 19 f4 brne .+6 ; 0x216e - 2168: f0 df rcall .-32 ; 0x214a - 216a: ac df rcall .-168 ; 0x20c4 - 216c: 5e c0 rjmp .+188 ; 0x222a - 216e: 80 91 3b 21 lds r24, 0x213B ; 0x80213b - 2172: 90 91 3c 21 lds r25, 0x213C ; 0x80213c - 2176: c0 91 a4 23 lds r28, 0x23A4 ; 0x8023a4 - 217a: d0 91 a5 23 lds r29, 0x23A5 ; 0x8023a5 - 217e: c8 1b sub r28, r24 - 2180: d9 0b sbc r29, r25 - 2182: 71 f5 brne .+92 ; 0x21e0 - 2184: 20 91 3d 21 lds r18, 0x213D ; 0x80213d - 2188: 30 91 3e 21 lds r19, 0x213E ; 0x80213e - 218c: 82 0f add r24, r18 - 218e: 93 1f adc r25, r19 - 2190: 80 93 3d 21 sts 0x213D, r24 ; 0x80213d - 2194: 90 93 3e 21 sts 0x213E, r25 ; 0x80213e - 2198: 20 91 a0 23 lds r18, 0x23A0 ; 0x8023a0 - 219c: 30 91 a1 23 lds r19, 0x23A1 ; 0x8023a1 - 21a0: 82 17 cp r24, r18 - 21a2: 93 07 cpc r25, r19 - 21a4: 21 f0 breq .+8 ; 0x21ae - 21a6: 80 91 a8 20 lds r24, 0x20A8 ; 0x8020a8 - 21aa: 88 23 and r24, r24 - 21ac: 41 f0 breq .+16 ; 0x21be - 21ae: 84 e0 ldi r24, 0x04 ; 4 - 21b0: 80 93 3f 21 sts 0x213F, r24 ; 0x80213f - 21b4: e8 e4 ldi r30, 0x48 ; 72 - 21b6: f1 e2 ldi r31, 0x21 ; 33 - 21b8: 02 e0 ldi r16, 0x02 ; 2 - 21ba: 06 93 lac Z, r16 - 21bc: 36 c0 rjmp .+108 ; 0x222a - 21be: e0 91 a8 23 lds r30, 0x23A8 ; 0x8023a8 - 21c2: f0 91 a9 23 lds r31, 0x23A9 ; 0x8023a9 - 21c6: 30 97 sbiw r30, 0x00 ; 0 - 21c8: 99 f0 breq .+38 ; 0x21f0 - 21ca: 09 95 icall - 21cc: 88 23 and r24, r24 - 21ce: 81 f0 breq .+32 ; 0x21f0 - 21d0: 10 92 3b 21 sts 0x213B, r1 ; 0x80213b - 21d4: 10 92 3c 21 sts 0x213C, r1 ; 0x80213c - 21d8: c0 91 a4 23 lds r28, 0x23A4 ; 0x8023a4 - 21dc: d0 91 a5 23 lds r29, 0x23A5 ; 0x8023a5 - 21e0: c0 34 cpi r28, 0x40 ; 64 - 21e2: d1 05 cpc r29, r1 - 21e4: 28 f0 brcs .+10 ; 0x21f0 - 21e6: 10 92 a8 20 sts 0x20A8, r1 ; 0x8020a8 - 21ea: c0 e4 ldi r28, 0x40 ; 64 - 21ec: d0 e0 ldi r29, 0x00 ; 0 - 21ee: 03 c0 rjmp .+6 ; 0x21f6 - 21f0: 81 e0 ldi r24, 0x01 ; 1 - 21f2: 80 93 a8 20 sts 0x20A8, r24 ; 0x8020a8 - 21f6: e0 e4 ldi r30, 0x40 ; 64 - 21f8: f1 e2 ldi r31, 0x21 ; 33 - 21fa: c2 8b std Z+18, r28 ; 0x12 - 21fc: d3 8b std Z+19, r29 ; 0x13 - 21fe: 80 91 3b 21 lds r24, 0x213B ; 0x80213b - 2202: 90 91 3c 21 lds r25, 0x213C ; 0x80213c - 2206: 20 91 a2 23 lds r18, 0x23A2 ; 0x8023a2 - 220a: 30 91 a3 23 lds r19, 0x23A3 ; 0x8023a3 - 220e: 28 0f add r18, r24 - 2210: 39 1f adc r19, r25 - 2212: 24 8b std Z+20, r18 ; 0x14 - 2214: 35 8b std Z+21, r19 ; 0x15 - 2216: c8 0f add r28, r24 - 2218: d9 1f adc r29, r25 - 221a: c0 93 3b 21 sts 0x213B, r28 ; 0x80213b - 221e: d0 93 3c 21 sts 0x213C, r29 ; 0x80213c - 2222: e0 e5 ldi r30, 0x50 ; 80 - 2224: f1 e2 ldi r31, 0x21 ; 33 - 2226: 02 e0 ldi r16, 0x02 ; 2 - 2228: 06 93 lac Z, r16 - 222a: df 91 pop r29 - 222c: cf 91 pop r28 - 222e: 0f 91 pop r16 - 2230: 08 95 ret +0000218a : + 218a: 0f 93 push r16 + 218c: 83 e0 ldi r24, 0x03 ; 3 + 218e: 80 93 3f 21 sts 0x213F, r24 ; 0x80213f + 2192: 10 92 52 21 sts 0x2152, r1 ; 0x802152 + 2196: 10 92 53 21 sts 0x2153, r1 ; 0x802153 + 219a: e0 e5 ldi r30, 0x50 ; 80 + 219c: f1 e2 ldi r31, 0x21 ; 33 + 219e: 02 e0 ldi r16, 0x02 ; 2 + 21a0: 06 93 lac Z, r16 + 21a2: 0f 91 pop r16 + 21a4: 08 95 ret -00002232 : - 2232: fc 01 movw r30, r24 - 2234: 81 81 ldd r24, Z+1 ; 0x01 - 2236: e8 2f mov r30, r24 - 2238: e7 70 andi r30, 0x07 ; 7 - 223a: 8e 2f mov r24, r30 - 223c: 90 e0 ldi r25, 0x00 ; 0 - 223e: fc 01 movw r30, r24 - 2240: 31 97 sbiw r30, 0x01 ; 1 - 2242: e7 30 cpi r30, 0x07 ; 7 - 2244: f1 05 cpc r31, r1 - 2246: c0 f4 brcc .+48 ; 0x2278 - 2248: e9 5e subi r30, 0xE9 ; 233 - 224a: fe 4f sbci r31, 0xFE ; 254 - 224c: 67 c6 rjmp .+3278 ; 0x2f1c <__tablejump2__> - 224e: 80 e1 ldi r24, 0x10 ; 16 - 2250: 90 e0 ldi r25, 0x00 ; 0 - 2252: 08 95 ret - 2254: 80 e2 ldi r24, 0x20 ; 32 - 2256: 90 e0 ldi r25, 0x00 ; 0 - 2258: 08 95 ret - 225a: 80 e4 ldi r24, 0x40 ; 64 - 225c: 90 e0 ldi r25, 0x00 ; 0 - 225e: 08 95 ret - 2260: 80 e8 ldi r24, 0x80 ; 128 - 2262: 90 e0 ldi r25, 0x00 ; 0 - 2264: 08 95 ret - 2266: 80 e0 ldi r24, 0x00 ; 0 - 2268: 91 e0 ldi r25, 0x01 ; 1 - 226a: 08 95 ret - 226c: 80 e0 ldi r24, 0x00 ; 0 - 226e: 92 e0 ldi r25, 0x02 ; 2 - 2270: 08 95 ret - 2272: 8f ef ldi r24, 0xFF ; 255 - 2274: 93 e0 ldi r25, 0x03 ; 3 - 2276: 08 95 ret - 2278: 88 e0 ldi r24, 0x08 ; 8 - 227a: 90 e0 ldi r25, 0x00 ; 0 - 227c: 08 95 ret +000021a6 : + 21a6: e0 91 a6 23 lds r30, 0x23A6 ; 0x8023a6 + 21aa: f0 91 a7 23 lds r31, 0x23A7 ; 0x8023a7 + 21ae: 30 97 sbiw r30, 0x00 ; 0 + 21b0: 09 f0 breq .+2 ; 0x21b4 + 21b2: 09 95 icall + 21b4: 08 95 ret -0000227e : - 227e: 28 2f mov r18, r24 - 2280: 2f 70 andi r18, 0x0F ; 15 - 2282: 30 e0 ldi r19, 0x00 ; 0 - 2284: 22 0f add r18, r18 - 2286: 33 1f adc r19, r19 - 2288: 08 2e mov r0, r24 - 228a: 00 0c add r0, r0 - 228c: 99 0b sbc r25, r25 - 228e: 88 27 eor r24, r24 - 2290: 99 0f add r25, r25 - 2292: 88 1f adc r24, r24 - 2294: 99 27 eor r25, r25 - 2296: 82 0f add r24, r18 - 2298: 93 1f adc r25, r19 - 229a: 02 97 sbiw r24, 0x02 ; 2 - 229c: 9c 01 movw r18, r24 - 229e: 22 0f add r18, r18 - 22a0: 33 1f adc r19, r19 - 22a2: 22 0f add r18, r18 - 22a4: 33 1f adc r19, r19 - 22a6: 22 0f add r18, r18 - 22a8: 33 1f adc r19, r19 - 22aa: 82 0f add r24, r18 - 22ac: 93 1f adc r25, r19 - 22ae: 87 51 subi r24, 0x17 ; 23 - 22b0: 9f 4d sbci r25, 0xDF ; 223 - 22b2: 08 95 ret +000021b6 : + 21b6: 0f 93 push r16 + 21b8: cf 93 push r28 + 21ba: df 93 push r29 + 21bc: 80 91 3f 21 lds r24, 0x213F ; 0x80213f + 21c0: 83 30 cpi r24, 0x03 ; 3 + 21c2: 19 f4 brne .+6 ; 0x21ca + 21c4: f0 df rcall .-32 ; 0x21a6 + 21c6: ac df rcall .-168 ; 0x2120 + 21c8: 5e c0 rjmp .+188 ; 0x2286 + 21ca: 80 91 3b 21 lds r24, 0x213B ; 0x80213b + 21ce: 90 91 3c 21 lds r25, 0x213C ; 0x80213c + 21d2: c0 91 a4 23 lds r28, 0x23A4 ; 0x8023a4 + 21d6: d0 91 a5 23 lds r29, 0x23A5 ; 0x8023a5 + 21da: c8 1b sub r28, r24 + 21dc: d9 0b sbc r29, r25 + 21de: 71 f5 brne .+92 ; 0x223c + 21e0: 20 91 3d 21 lds r18, 0x213D ; 0x80213d + 21e4: 30 91 3e 21 lds r19, 0x213E ; 0x80213e + 21e8: 82 0f add r24, r18 + 21ea: 93 1f adc r25, r19 + 21ec: 80 93 3d 21 sts 0x213D, r24 ; 0x80213d + 21f0: 90 93 3e 21 sts 0x213E, r25 ; 0x80213e + 21f4: 20 91 a0 23 lds r18, 0x23A0 ; 0x8023a0 + 21f8: 30 91 a1 23 lds r19, 0x23A1 ; 0x8023a1 + 21fc: 82 17 cp r24, r18 + 21fe: 93 07 cpc r25, r19 + 2200: 21 f0 breq .+8 ; 0x220a + 2202: 80 91 a8 20 lds r24, 0x20A8 ; 0x8020a8 + 2206: 88 23 and r24, r24 + 2208: 41 f0 breq .+16 ; 0x221a + 220a: 84 e0 ldi r24, 0x04 ; 4 + 220c: 80 93 3f 21 sts 0x213F, r24 ; 0x80213f + 2210: e8 e4 ldi r30, 0x48 ; 72 + 2212: f1 e2 ldi r31, 0x21 ; 33 + 2214: 02 e0 ldi r16, 0x02 ; 2 + 2216: 06 93 lac Z, r16 + 2218: 36 c0 rjmp .+108 ; 0x2286 + 221a: e0 91 a8 23 lds r30, 0x23A8 ; 0x8023a8 + 221e: f0 91 a9 23 lds r31, 0x23A9 ; 0x8023a9 + 2222: 30 97 sbiw r30, 0x00 ; 0 + 2224: 99 f0 breq .+38 ; 0x224c + 2226: 09 95 icall + 2228: 88 23 and r24, r24 + 222a: 81 f0 breq .+32 ; 0x224c + 222c: 10 92 3b 21 sts 0x213B, r1 ; 0x80213b + 2230: 10 92 3c 21 sts 0x213C, r1 ; 0x80213c + 2234: c0 91 a4 23 lds r28, 0x23A4 ; 0x8023a4 + 2238: d0 91 a5 23 lds r29, 0x23A5 ; 0x8023a5 + 223c: c0 34 cpi r28, 0x40 ; 64 + 223e: d1 05 cpc r29, r1 + 2240: 28 f0 brcs .+10 ; 0x224c + 2242: 10 92 a8 20 sts 0x20A8, r1 ; 0x8020a8 + 2246: c0 e4 ldi r28, 0x40 ; 64 + 2248: d0 e0 ldi r29, 0x00 ; 0 + 224a: 03 c0 rjmp .+6 ; 0x2252 + 224c: 81 e0 ldi r24, 0x01 ; 1 + 224e: 80 93 a8 20 sts 0x20A8, r24 ; 0x8020a8 + 2252: e0 e4 ldi r30, 0x40 ; 64 + 2254: f1 e2 ldi r31, 0x21 ; 33 + 2256: c2 8b std Z+18, r28 ; 0x12 + 2258: d3 8b std Z+19, r29 ; 0x13 + 225a: 80 91 3b 21 lds r24, 0x213B ; 0x80213b + 225e: 90 91 3c 21 lds r25, 0x213C ; 0x80213c + 2262: 20 91 a2 23 lds r18, 0x23A2 ; 0x8023a2 + 2266: 30 91 a3 23 lds r19, 0x23A3 ; 0x8023a3 + 226a: 28 0f add r18, r24 + 226c: 39 1f adc r19, r25 + 226e: 24 8b std Z+20, r18 ; 0x14 + 2270: 35 8b std Z+21, r19 ; 0x15 + 2272: c8 0f add r28, r24 + 2274: d9 1f adc r29, r25 + 2276: c0 93 3b 21 sts 0x213B, r28 ; 0x80213b + 227a: d0 93 3c 21 sts 0x213C, r29 ; 0x80213c + 227e: e0 e5 ldi r30, 0x50 ; 80 + 2280: f1 e2 ldi r31, 0x21 ; 33 + 2282: 02 e0 ldi r16, 0x02 ; 2 + 2284: 06 93 lac Z, r16 + 2286: df 91 pop r29 + 2288: cf 91 pop r28 + 228a: 0f 91 pop r16 + 228c: 08 95 ret -000022b4 : - 22b4: 0f 93 push r16 - 22b6: cf 93 push r28 - 22b8: 80 91 cc 04 lds r24, 0x04CC ; 0x8004cc <__TEXT_REGION_LENGTH__+0x7004cc> - 22bc: 80 ff sbrs r24, 0 - 22be: 62 c0 rjmp .+196 ; 0x2384 - 22c0: 81 e0 ldi r24, 0x01 ; 1 - 22c2: 80 93 cc 04 sts 0x04CC, r24 ; 0x8004cc <__TEXT_REGION_LENGTH__+0x7004cc> - 22c6: e8 e4 ldi r30, 0x48 ; 72 - 22c8: f1 e2 ldi r31, 0x21 ; 33 - 22ca: 00 e8 ldi r16, 0x80 ; 128 - 22cc: 06 93 lac Z, r16 - 22ce: e0 e5 ldi r30, 0x50 ; 80 - 22d0: f1 e2 ldi r31, 0x21 ; 33 - 22d2: 00 e8 ldi r16, 0x80 ; 128 - 22d4: 06 93 lac Z, r16 - 22d6: 80 93 ca 04 sts 0x04CA, r24 ; 0x8004ca <__TEXT_REGION_LENGTH__+0x7004ca> - 22da: e8 e4 ldi r30, 0x48 ; 72 - 22dc: f1 e2 ldi r31, 0x21 ; 33 - 22de: 00 e1 ldi r16, 0x10 ; 16 - 22e0: 06 93 lac Z, r16 - 22e2: 80 91 3f 21 lds r24, 0x213F ; 0x80213f - 22e6: 88 23 and r24, r24 - 22e8: 29 f0 breq .+10 ; 0x22f4 - 22ea: 83 50 subi r24, 0x03 ; 3 - 22ec: 82 30 cpi r24, 0x02 ; 2 - 22ee: 08 f4 brcc .+2 ; 0x22f2 - 22f0: 2c df rcall .-424 ; 0x214a - 22f2: e8 de rcall .-560 ; 0x20c4 - 22f4: 80 91 4a 21 lds r24, 0x214A ; 0x80214a - 22f8: 90 91 4b 21 lds r25, 0x214B ; 0x80214b - 22fc: 08 97 sbiw r24, 0x08 ; 8 - 22fe: 09 f0 breq .+2 ; 0x2302 - 2300: 43 c0 rjmp .+134 ; 0x2388 - 2302: 88 e0 ldi r24, 0x08 ; 8 - 2304: eb ef ldi r30, 0xFB ; 251 - 2306: f0 e2 ldi r31, 0x20 ; 32 - 2308: aa e9 ldi r26, 0x9A ; 154 - 230a: b3 e2 ldi r27, 0x23 ; 35 - 230c: 01 90 ld r0, Z+ - 230e: 0d 92 st X+, r0 - 2310: 8a 95 dec r24 - 2312: e1 f7 brne .-8 ; 0x230c - 2314: e8 ec ldi r30, 0xC8 ; 200 - 2316: f4 e0 ldi r31, 0x04 ; 4 - 2318: 80 81 ld r24, Z - 231a: 80 62 ori r24, 0x20 ; 32 - 231c: 80 83 st Z, r24 - 231e: 80 81 ld r24, Z - 2320: 80 62 ori r24, 0x20 ; 32 - 2322: 80 83 st Z, r24 - 2324: a4 da rcall .-2744 ; 0x186e - 2326: c8 2f mov r28, r24 - 2328: 81 11 cpse r24, r1 - 232a: 03 c0 rjmp .+6 ; 0x2332 - 232c: f2 de rcall .-540 ; 0x2112 - 232e: c1 e0 ldi r28, 0x01 ; 1 - 2330: 2c c0 rjmp .+88 ; 0x238a - 2332: 80 91 9a 23 lds r24, 0x239A ; 0x80239a - 2336: 88 23 and r24, r24 - 2338: 6c f4 brge .+26 ; 0x2354 - 233a: 10 92 3d 21 sts 0x213D, r1 ; 0x80213d - 233e: 10 92 3e 21 sts 0x213E, r1 ; 0x80213e - 2342: 10 92 3b 21 sts 0x213B, r1 ; 0x80213b - 2346: 10 92 3c 21 sts 0x213C, r1 ; 0x80213c - 234a: 82 e0 ldi r24, 0x02 ; 2 - 234c: 80 93 3f 21 sts 0x213F, r24 ; 0x80213f - 2350: 04 df rcall .-504 ; 0x215a - 2352: 1b c0 rjmp .+54 ; 0x238a - 2354: 80 91 a0 23 lds r24, 0x23A0 ; 0x8023a0 - 2358: 90 91 a1 23 lds r25, 0x23A1 ; 0x8023a1 - 235c: 89 2b or r24, r25 - 235e: 11 f4 brne .+4 ; 0x2364 - 2360: e6 de rcall .-564 ; 0x212e - 2362: 13 c0 rjmp .+38 ; 0x238a - 2364: 10 92 3d 21 sts 0x213D, r1 ; 0x80213d - 2368: 10 92 3e 21 sts 0x213E, r1 ; 0x80213e - 236c: 10 92 3b 21 sts 0x213B, r1 ; 0x80213b - 2370: 10 92 3c 21 sts 0x213C, r1 ; 0x80213c - 2374: 81 e0 ldi r24, 0x01 ; 1 - 2376: 80 93 3f 21 sts 0x213F, r24 ; 0x80213f - 237a: e8 e4 ldi r30, 0x48 ; 72 - 237c: f1 e2 ldi r31, 0x21 ; 33 - 237e: 02 e0 ldi r16, 0x02 ; 2 - 2380: 06 93 lac Z, r16 - 2382: 03 c0 rjmp .+6 ; 0x238a - 2384: c0 e0 ldi r28, 0x00 ; 0 - 2386: 01 c0 rjmp .+2 ; 0x238a - 2388: c1 e0 ldi r28, 0x01 ; 1 - 238a: 8c 2f mov r24, r28 - 238c: cf 91 pop r28 - 238e: 0f 91 pop r16 - 2390: 08 95 ret +0000228e : + 228e: fc 01 movw r30, r24 + 2290: 81 81 ldd r24, Z+1 ; 0x01 + 2292: e8 2f mov r30, r24 + 2294: e7 70 andi r30, 0x07 ; 7 + 2296: 8e 2f mov r24, r30 + 2298: 90 e0 ldi r25, 0x00 ; 0 + 229a: fc 01 movw r30, r24 + 229c: 31 97 sbiw r30, 0x01 ; 1 + 229e: e7 30 cpi r30, 0x07 ; 7 + 22a0: f1 05 cpc r31, r1 + 22a2: c0 f4 brcc .+48 ; 0x22d4 + 22a4: e1 5e subi r30, 0xE1 ; 225 + 22a6: fe 4f sbci r31, 0xFE ; 254 + 22a8: 67 c6 rjmp .+3278 ; 0x2f78 <__tablejump2__> + 22aa: 80 e1 ldi r24, 0x10 ; 16 + 22ac: 90 e0 ldi r25, 0x00 ; 0 + 22ae: 08 95 ret + 22b0: 80 e2 ldi r24, 0x20 ; 32 + 22b2: 90 e0 ldi r25, 0x00 ; 0 + 22b4: 08 95 ret + 22b6: 80 e4 ldi r24, 0x40 ; 64 + 22b8: 90 e0 ldi r25, 0x00 ; 0 + 22ba: 08 95 ret + 22bc: 80 e8 ldi r24, 0x80 ; 128 + 22be: 90 e0 ldi r25, 0x00 ; 0 + 22c0: 08 95 ret + 22c2: 80 e0 ldi r24, 0x00 ; 0 + 22c4: 91 e0 ldi r25, 0x01 ; 1 + 22c6: 08 95 ret + 22c8: 80 e0 ldi r24, 0x00 ; 0 + 22ca: 92 e0 ldi r25, 0x02 ; 2 + 22cc: 08 95 ret + 22ce: 8f ef ldi r24, 0xFF ; 255 + 22d0: 93 e0 ldi r25, 0x03 ; 3 + 22d2: 08 95 ret + 22d4: 88 e0 ldi r24, 0x08 ; 8 + 22d6: 90 e0 ldi r25, 0x00 ; 0 + 22d8: 08 95 ret -00002392 : - 2392: 8f 92 push r8 - 2394: 9f 92 push r9 - 2396: af 92 push r10 - 2398: bf 92 push r11 - 239a: df 92 push r13 - 239c: ef 92 push r14 - 239e: ff 92 push r15 - 23a0: 0f 93 push r16 - 23a2: 1f 93 push r17 - 23a4: cf 93 push r28 - 23a6: df 93 push r29 - 23a8: d8 2e mov r13, r24 - 23aa: 69 df rcall .-302 ; 0x227e - 23ac: 8c 01 movw r16, r24 - 23ae: bd 2c mov r11, r13 - 23b0: bb 1c adc r11, r11 - 23b2: bb 24 eor r11, r11 - 23b4: bb 1c adc r11, r11 - 23b6: cd 2d mov r28, r13 - 23b8: cf 70 andi r28, 0x0F ; 15 - 23ba: d0 e0 ldi r29, 0x00 ; 0 - 23bc: cc 0f add r28, r28 - 23be: dd 1f adc r29, r29 - 23c0: cb 0d add r28, r11 - 23c2: d1 1d adc r29, r1 - 23c4: ce 01 movw r24, r28 - 23c6: 88 0f add r24, r24 - 23c8: 99 1f adc r25, r25 - 23ca: 88 0f add r24, r24 - 23cc: 99 1f adc r25, r25 - 23ce: 88 0f add r24, r24 - 23d0: 99 1f adc r25, r25 - 23d2: 9c 01 movw r18, r24 - 23d4: 28 5b subi r18, 0xB8 ; 184 - 23d6: 3e 4d sbci r19, 0xDE ; 222 - 23d8: 79 01 movw r14, r18 - 23da: c9 01 movw r24, r18 - 23dc: 2a df rcall .-428 ; 0x2232 - 23de: 4c 01 movw r8, r24 - 23e0: bb 20 and r11, r11 - 23e2: 09 f4 brne .+2 ; 0x23e6 - 23e4: 70 c0 rjmp .+224 ; 0x24c6 - 23e6: fe 01 movw r30, r28 - 23e8: ee 0f add r30, r30 - 23ea: ff 1f adc r31, r31 - 23ec: ee 0f add r30, r30 - 23ee: ff 1f adc r31, r31 - 23f0: ee 0f add r30, r30 - 23f2: ff 1f adc r31, r31 - 23f4: e0 5c subi r30, 0xC0 ; 192 - 23f6: fe 4d sbci r31, 0xDE ; 222 - 23f8: 26 85 ldd r18, Z+14 ; 0x0e - 23fa: 37 85 ldd r19, Z+15 ; 0x0f - 23fc: d8 01 movw r26, r16 - 23fe: 15 96 adiw r26, 0x05 ; 5 - 2400: 8d 91 ld r24, X+ - 2402: 9c 91 ld r25, X - 2404: 16 97 sbiw r26, 0x06 ; 6 - 2406: 82 0f add r24, r18 - 2408: 93 1f adc r25, r19 - 240a: 15 96 adiw r26, 0x05 ; 5 - 240c: 8d 93 st X+, r24 - 240e: 9c 93 st X, r25 - 2410: 16 97 sbiw r26, 0x06 ; 6 - 2412: 13 96 adiw r26, 0x03 ; 3 - 2414: 2d 91 ld r18, X+ - 2416: 3c 91 ld r19, X - 2418: 14 97 sbiw r26, 0x04 ; 4 - 241a: 82 17 cp r24, r18 - 241c: 93 07 cpc r25, r19 - 241e: 09 f4 brne .+2 ; 0x2422 - 2420: 3c c0 rjmp .+120 ; 0x249a - 2422: 28 1b sub r18, r24 - 2424: 39 0b sbc r19, r25 - 2426: 21 15 cp r18, r1 - 2428: b4 e0 ldi r27, 0x04 ; 4 - 242a: 3b 07 cpc r19, r27 - 242c: 38 f0 brcs .+14 ; 0x243c - 242e: 2f ef ldi r18, 0xFF ; 255 - 2430: 33 e0 ldi r19, 0x03 ; 3 - 2432: c9 01 movw r24, r18 - 2434: b4 01 movw r22, r8 - 2436: 4b d5 rcall .+2710 ; 0x2ece <__udivmodhi4> - 2438: 28 1b sub r18, r24 - 243a: 39 0b sbc r19, r25 - 243c: f8 01 movw r30, r16 - 243e: 80 81 ld r24, Z - 2440: 81 ff sbrs r24, 1 - 2442: 09 c0 rjmp .+18 ; 0x2456 - 2444: c9 01 movw r24, r18 - 2446: b4 01 movw r22, r8 - 2448: 42 d5 rcall .+2692 ; 0x2ece <__udivmodhi4> - 244a: 41 e0 ldi r20, 0x01 ; 1 - 244c: 89 2b or r24, r25 - 244e: 09 f0 breq .+2 ; 0x2452 - 2450: 40 e0 ldi r20, 0x00 ; 0 - 2452: 84 2f mov r24, r20 - 2454: 01 c0 rjmp .+2 ; 0x2458 - 2456: 80 e0 ldi r24, 0x00 ; 0 +000022da : + 22da: 28 2f mov r18, r24 + 22dc: 2f 70 andi r18, 0x0F ; 15 + 22de: 30 e0 ldi r19, 0x00 ; 0 + 22e0: 22 0f add r18, r18 + 22e2: 33 1f adc r19, r19 + 22e4: 08 2e mov r0, r24 + 22e6: 00 0c add r0, r0 + 22e8: 99 0b sbc r25, r25 + 22ea: 88 27 eor r24, r24 + 22ec: 99 0f add r25, r25 + 22ee: 88 1f adc r24, r24 + 22f0: 99 27 eor r25, r25 + 22f2: 82 0f add r24, r18 + 22f4: 93 1f adc r25, r19 + 22f6: 02 97 sbiw r24, 0x02 ; 2 + 22f8: 9c 01 movw r18, r24 + 22fa: 22 0f add r18, r18 + 22fc: 33 1f adc r19, r19 + 22fe: 22 0f add r18, r18 + 2300: 33 1f adc r19, r19 + 2302: 22 0f add r18, r18 + 2304: 33 1f adc r19, r19 + 2306: 82 0f add r24, r18 + 2308: 93 1f adc r25, r19 + 230a: 87 51 subi r24, 0x17 ; 23 + 230c: 9f 4d sbci r25, 0xDF ; 223 + 230e: 08 95 ret + +00002310 : + 2310: 0f 93 push r16 + 2312: cf 93 push r28 + 2314: 80 91 cc 04 lds r24, 0x04CC ; 0x8004cc <__TEXT_REGION_LENGTH__+0x7004cc> + 2318: 80 ff sbrs r24, 0 + 231a: 62 c0 rjmp .+196 ; 0x23e0 + 231c: 81 e0 ldi r24, 0x01 ; 1 + 231e: 80 93 cc 04 sts 0x04CC, r24 ; 0x8004cc <__TEXT_REGION_LENGTH__+0x7004cc> + 2322: e8 e4 ldi r30, 0x48 ; 72 + 2324: f1 e2 ldi r31, 0x21 ; 33 + 2326: 00 e8 ldi r16, 0x80 ; 128 + 2328: 06 93 lac Z, r16 + 232a: e0 e5 ldi r30, 0x50 ; 80 + 232c: f1 e2 ldi r31, 0x21 ; 33 + 232e: 00 e8 ldi r16, 0x80 ; 128 + 2330: 06 93 lac Z, r16 + 2332: 80 93 ca 04 sts 0x04CA, r24 ; 0x8004ca <__TEXT_REGION_LENGTH__+0x7004ca> + 2336: e8 e4 ldi r30, 0x48 ; 72 + 2338: f1 e2 ldi r31, 0x21 ; 33 + 233a: 00 e1 ldi r16, 0x10 ; 16 + 233c: 06 93 lac Z, r16 + 233e: 80 91 3f 21 lds r24, 0x213F ; 0x80213f + 2342: 88 23 and r24, r24 + 2344: 29 f0 breq .+10 ; 0x2350 + 2346: 83 50 subi r24, 0x03 ; 3 + 2348: 82 30 cpi r24, 0x02 ; 2 + 234a: 08 f4 brcc .+2 ; 0x234e + 234c: 2c df rcall .-424 ; 0x21a6 + 234e: e8 de rcall .-560 ; 0x2120 + 2350: 80 91 4a 21 lds r24, 0x214A ; 0x80214a + 2354: 90 91 4b 21 lds r25, 0x214B ; 0x80214b + 2358: 08 97 sbiw r24, 0x08 ; 8 + 235a: 09 f0 breq .+2 ; 0x235e + 235c: 43 c0 rjmp .+134 ; 0x23e4 + 235e: 88 e0 ldi r24, 0x08 ; 8 + 2360: eb ef ldi r30, 0xFB ; 251 + 2362: f0 e2 ldi r31, 0x20 ; 32 + 2364: aa e9 ldi r26, 0x9A ; 154 + 2366: b3 e2 ldi r27, 0x23 ; 35 + 2368: 01 90 ld r0, Z+ + 236a: 0d 92 st X+, r0 + 236c: 8a 95 dec r24 + 236e: e1 f7 brne .-8 ; 0x2368 + 2370: e8 ec ldi r30, 0xC8 ; 200 + 2372: f4 e0 ldi r31, 0x04 ; 4 + 2374: 80 81 ld r24, Z + 2376: 80 62 ori r24, 0x20 ; 32 + 2378: 80 83 st Z, r24 + 237a: 80 81 ld r24, Z + 237c: 80 62 ori r24, 0x20 ; 32 + 237e: 80 83 st Z, r24 + 2380: a1 da rcall .-2750 ; 0x18c4 + 2382: c8 2f mov r28, r24 + 2384: 81 11 cpse r24, r1 + 2386: 03 c0 rjmp .+6 ; 0x238e + 2388: f2 de rcall .-540 ; 0x216e + 238a: c1 e0 ldi r28, 0x01 ; 1 + 238c: 2c c0 rjmp .+88 ; 0x23e6 + 238e: 80 91 9a 23 lds r24, 0x239A ; 0x80239a + 2392: 88 23 and r24, r24 + 2394: 6c f4 brge .+26 ; 0x23b0 + 2396: 10 92 3d 21 sts 0x213D, r1 ; 0x80213d + 239a: 10 92 3e 21 sts 0x213E, r1 ; 0x80213e + 239e: 10 92 3b 21 sts 0x213B, r1 ; 0x80213b + 23a2: 10 92 3c 21 sts 0x213C, r1 ; 0x80213c + 23a6: 82 e0 ldi r24, 0x02 ; 2 + 23a8: 80 93 3f 21 sts 0x213F, r24 ; 0x80213f + 23ac: 04 df rcall .-504 ; 0x21b6 + 23ae: 1b c0 rjmp .+54 ; 0x23e6 + 23b0: 80 91 a0 23 lds r24, 0x23A0 ; 0x8023a0 + 23b4: 90 91 a1 23 lds r25, 0x23A1 ; 0x8023a1 + 23b8: 89 2b or r24, r25 + 23ba: 11 f4 brne .+4 ; 0x23c0 + 23bc: e6 de rcall .-564 ; 0x218a + 23be: 13 c0 rjmp .+38 ; 0x23e6 + 23c0: 10 92 3d 21 sts 0x213D, r1 ; 0x80213d + 23c4: 10 92 3e 21 sts 0x213E, r1 ; 0x80213e + 23c8: 10 92 3b 21 sts 0x213B, r1 ; 0x80213b + 23cc: 10 92 3c 21 sts 0x213C, r1 ; 0x80213c + 23d0: 81 e0 ldi r24, 0x01 ; 1 + 23d2: 80 93 3f 21 sts 0x213F, r24 ; 0x80213f + 23d6: e8 e4 ldi r30, 0x48 ; 72 + 23d8: f1 e2 ldi r31, 0x21 ; 33 + 23da: 02 e0 ldi r16, 0x02 ; 2 + 23dc: 06 93 lac Z, r16 + 23de: 03 c0 rjmp .+6 ; 0x23e6 + 23e0: c0 e0 ldi r28, 0x00 ; 0 + 23e2: 01 c0 rjmp .+2 ; 0x23e6 + 23e4: c1 e0 ldi r28, 0x01 ; 1 + 23e6: 8c 2f mov r24, r28 + 23e8: cf 91 pop r28 + 23ea: 0f 91 pop r16 + 23ec: 08 95 ret + +000023ee : + 23ee: 8f 92 push r8 + 23f0: 9f 92 push r9 + 23f2: af 92 push r10 + 23f4: bf 92 push r11 + 23f6: df 92 push r13 + 23f8: ef 92 push r14 + 23fa: ff 92 push r15 + 23fc: 0f 93 push r16 + 23fe: 1f 93 push r17 + 2400: cf 93 push r28 + 2402: df 93 push r29 + 2404: d8 2e mov r13, r24 + 2406: 69 df rcall .-302 ; 0x22da + 2408: 8c 01 movw r16, r24 + 240a: bd 2c mov r11, r13 + 240c: bb 1c adc r11, r11 + 240e: bb 24 eor r11, r11 + 2410: bb 1c adc r11, r11 + 2412: cd 2d mov r28, r13 + 2414: cf 70 andi r28, 0x0F ; 15 + 2416: d0 e0 ldi r29, 0x00 ; 0 + 2418: cc 0f add r28, r28 + 241a: dd 1f adc r29, r29 + 241c: cb 0d add r28, r11 + 241e: d1 1d adc r29, r1 + 2420: ce 01 movw r24, r28 + 2422: 88 0f add r24, r24 + 2424: 99 1f adc r25, r25 + 2426: 88 0f add r24, r24 + 2428: 99 1f adc r25, r25 + 242a: 88 0f add r24, r24 + 242c: 99 1f adc r25, r25 + 242e: 9c 01 movw r18, r24 + 2430: 28 5b subi r18, 0xB8 ; 184 + 2432: 3e 4d sbci r19, 0xDE ; 222 + 2434: 79 01 movw r14, r18 + 2436: c9 01 movw r24, r18 + 2438: 2a df rcall .-428 ; 0x228e + 243a: 4c 01 movw r8, r24 + 243c: bb 20 and r11, r11 + 243e: 09 f4 brne .+2 ; 0x2442 + 2440: 70 c0 rjmp .+224 ; 0x2522 + 2442: fe 01 movw r30, r28 + 2444: ee 0f add r30, r30 + 2446: ff 1f adc r31, r31 + 2448: ee 0f add r30, r30 + 244a: ff 1f adc r31, r31 + 244c: ee 0f add r30, r30 + 244e: ff 1f adc r31, r31 + 2450: e0 5c subi r30, 0xC0 ; 192 + 2452: fe 4d sbci r31, 0xDE ; 222 + 2454: 26 85 ldd r18, Z+14 ; 0x0e + 2456: 37 85 ldd r19, Z+15 ; 0x0f 2458: d8 01 movw r26, r16 - 245a: 9c 91 ld r25, X - 245c: 80 fb bst r24, 0 - 245e: 91 f9 bld r25, 1 - 2460: 9c 93 st X, r25 - 2462: cc 0f add r28, r28 - 2464: dd 1f adc r29, r29 - 2466: cc 0f add r28, r28 - 2468: dd 1f adc r29, r29 - 246a: cc 0f add r28, r28 - 246c: dd 1f adc r29, r29 - 246e: c0 5c subi r28, 0xC0 ; 192 - 2470: de 4d sbci r29, 0xDE ; 222 - 2472: 1e 86 std Y+14, r1 ; 0x0e - 2474: 1f 86 std Y+15, r1 ; 0x0f - 2476: 2a 87 std Y+10, r18 ; 0x0a - 2478: 3b 87 std Y+11, r19 ; 0x0b - 247a: 11 96 adiw r26, 0x01 ; 1 - 247c: 2d 91 ld r18, X+ - 247e: 3c 91 ld r19, X - 2480: 12 97 sbiw r26, 0x02 ; 2 - 2482: 15 96 adiw r26, 0x05 ; 5 - 2484: 8d 91 ld r24, X+ - 2486: 9c 91 ld r25, X - 2488: 16 97 sbiw r26, 0x06 ; 6 - 248a: 82 0f add r24, r18 - 248c: 93 1f adc r25, r19 - 248e: 8c 87 std Y+12, r24 ; 0x0c - 2490: 9d 87 std Y+13, r25 ; 0x0d - 2492: f7 01 movw r30, r14 - 2494: 02 e0 ldi r16, 0x02 ; 2 - 2496: 06 93 lac Z, r16 - 2498: ca c0 rjmp .+404 ; 0x262e - 249a: d8 01 movw r26, r16 - 249c: 8c 91 ld r24, X - 249e: 81 ff sbrs r24, 1 - 24a0: b3 c0 rjmp .+358 ; 0x2608 - 24a2: 8d 7f andi r24, 0xFD ; 253 - 24a4: 8c 93 st X, r24 - 24a6: cc 0f add r28, r28 - 24a8: dd 1f adc r29, r29 - 24aa: cc 0f add r28, r28 - 24ac: dd 1f adc r29, r29 - 24ae: cc 0f add r28, r28 - 24b0: dd 1f adc r29, r29 - 24b2: c0 5c subi r28, 0xC0 ; 192 - 24b4: de 4d sbci r29, 0xDE ; 222 - 24b6: 1e 86 std Y+14, r1 ; 0x0e - 24b8: 1f 86 std Y+15, r1 ; 0x0f - 24ba: 1a 86 std Y+10, r1 ; 0x0a - 24bc: 1b 86 std Y+11, r1 ; 0x0b - 24be: f7 01 movw r30, r14 - 24c0: 02 e0 ldi r16, 0x02 ; 2 - 24c2: 06 93 lac Z, r16 - 24c4: b4 c0 rjmp .+360 ; 0x262e - 24c6: fe 01 movw r30, r28 - 24c8: ee 0f add r30, r30 - 24ca: ff 1f adc r31, r31 - 24cc: ee 0f add r30, r30 - 24ce: ff 1f adc r31, r31 - 24d0: ee 0f add r30, r30 - 24d2: ff 1f adc r31, r31 - 24d4: e0 5c subi r30, 0xC0 ; 192 - 24d6: fe 4d sbci r31, 0xDE ; 222 - 24d8: a2 84 ldd r10, Z+10 ; 0x0a - 24da: b3 84 ldd r11, Z+11 ; 0x0b - 24dc: d8 01 movw r26, r16 - 24de: 8c 91 ld r24, X - 24e0: 82 ff sbrs r24, 2 - 24e2: 19 c0 rjmp .+50 ; 0x2516 - 24e4: 11 96 adiw r26, 0x01 ; 1 - 24e6: ed 91 ld r30, X+ - 24e8: fc 91 ld r31, X - 24ea: 12 97 sbiw r26, 0x02 ; 2 - 24ec: 15 96 adiw r26, 0x05 ; 5 - 24ee: 2d 91 ld r18, X+ - 24f0: 3c 91 ld r19, X - 24f2: 16 97 sbiw r26, 0x06 ; 6 - 24f4: 13 96 adiw r26, 0x03 ; 3 - 24f6: 8d 91 ld r24, X+ - 24f8: 9c 91 ld r25, X - 24fa: 14 97 sbiw r26, 0x04 ; 4 - 24fc: b4 01 movw r22, r8 - 24fe: e7 d4 rcall .+2510 ; 0x2ece <__udivmodhi4> - 2500: b0 e4 ldi r27, 0x40 ; 64 - 2502: db 9e mul r13, r27 - 2504: b0 01 movw r22, r0 - 2506: 11 24 eor r1, r1 - 2508: 67 59 subi r22, 0x97 ; 151 - 250a: 7f 4d sbci r23, 0xDF ; 223 - 250c: ac 01 movw r20, r24 - 250e: cf 01 movw r24, r30 - 2510: 82 0f add r24, r18 - 2512: 93 1f adc r25, r19 - 2514: 09 d5 rcall .+2578 ; 0x2f28 - 2516: f8 01 movw r30, r16 - 2518: 25 81 ldd r18, Z+5 ; 0x05 - 251a: 36 81 ldd r19, Z+6 ; 0x06 - 251c: 2a 0d add r18, r10 - 251e: 3b 1d adc r19, r11 - 2520: 25 83 std Z+5, r18 ; 0x05 - 2522: 36 83 std Z+6, r19 ; 0x06 - 2524: 83 81 ldd r24, Z+3 ; 0x03 - 2526: 94 81 ldd r25, Z+4 ; 0x04 - 2528: 82 17 cp r24, r18 - 252a: 93 07 cpc r25, r19 - 252c: 68 f4 brcc .+26 ; 0x2548 - 252e: 85 83 std Z+5, r24 ; 0x05 - 2530: 96 83 std Z+6, r25 ; 0x06 - 2532: cc 0f add r28, r28 - 2534: dd 1f adc r29, r29 - 2536: cc 0f add r28, r28 - 2538: dd 1f adc r29, r29 - 253a: cc 0f add r28, r28 - 253c: dd 1f adc r29, r29 - 253e: c0 5c subi r28, 0xC0 ; 192 - 2540: de 4d sbci r29, 0xDE ; 222 - 2542: 8e 85 ldd r24, Y+14 ; 0x0e - 2544: 9f 85 ldd r25, Y+15 ; 0x0f - 2546: 60 c0 rjmp .+192 ; 0x2608 - 2548: fe 01 movw r30, r28 - 254a: ee 0f add r30, r30 - 254c: ff 1f adc r31, r31 - 254e: ee 0f add r30, r30 - 2550: ff 1f adc r31, r31 - 2552: ee 0f add r30, r30 - 2554: ff 1f adc r31, r31 - 2556: e0 5c subi r30, 0xC0 ; 192 - 2558: fe 4d sbci r31, 0xDE ; 222 - 255a: 46 85 ldd r20, Z+14 ; 0x0e - 255c: 57 85 ldd r21, Z+15 ; 0x0f - 255e: 4a 15 cp r20, r10 - 2560: 5b 05 cpc r21, r11 - 2562: 09 f0 breq .+2 ; 0x2566 - 2564: 51 c0 rjmp .+162 ; 0x2608 - 2566: 28 17 cp r18, r24 - 2568: 39 07 cpc r19, r25 - 256a: 09 f4 brne .+2 ; 0x256e - 256c: 4d c0 rjmp .+154 ; 0x2608 - 256e: ac 01 movw r20, r24 - 2570: 42 1b sub r20, r18 - 2572: 53 0b sbc r21, r19 - 2574: 9a 01 movw r18, r20 - 2576: 21 15 cp r18, r1 - 2578: 54 e0 ldi r21, 0x04 ; 4 - 257a: 35 07 cpc r19, r21 - 257c: 50 f0 brcs .+20 ; 0x2592 - 257e: 2f ef ldi r18, 0xFF ; 255 - 2580: 33 e0 ldi r19, 0x03 ; 3 - 2582: c9 01 movw r24, r18 - 2584: b4 01 movw r22, r8 - 2586: a3 d4 rcall .+2374 ; 0x2ece <__udivmodhi4> - 2588: d9 01 movw r26, r18 - 258a: a8 1b sub r26, r24 - 258c: b9 0b sbc r27, r25 - 258e: cd 01 movw r24, r26 - 2590: 07 c0 rjmp .+14 ; 0x25a0 - 2592: c9 01 movw r24, r18 - 2594: b4 01 movw r22, r8 - 2596: 9b d4 rcall .+2358 ; 0x2ece <__udivmodhi4> - 2598: f9 01 movw r30, r18 - 259a: e8 1b sub r30, r24 - 259c: f9 0b sbc r31, r25 - 259e: cf 01 movw r24, r30 - 25a0: fe 01 movw r30, r28 - 25a2: ee 0f add r30, r30 - 25a4: ff 1f adc r31, r31 + 245a: 15 96 adiw r26, 0x05 ; 5 + 245c: 8d 91 ld r24, X+ + 245e: 9c 91 ld r25, X + 2460: 16 97 sbiw r26, 0x06 ; 6 + 2462: 82 0f add r24, r18 + 2464: 93 1f adc r25, r19 + 2466: 15 96 adiw r26, 0x05 ; 5 + 2468: 8d 93 st X+, r24 + 246a: 9c 93 st X, r25 + 246c: 16 97 sbiw r26, 0x06 ; 6 + 246e: 13 96 adiw r26, 0x03 ; 3 + 2470: 2d 91 ld r18, X+ + 2472: 3c 91 ld r19, X + 2474: 14 97 sbiw r26, 0x04 ; 4 + 2476: 82 17 cp r24, r18 + 2478: 93 07 cpc r25, r19 + 247a: 09 f4 brne .+2 ; 0x247e + 247c: 3c c0 rjmp .+120 ; 0x24f6 + 247e: 28 1b sub r18, r24 + 2480: 39 0b sbc r19, r25 + 2482: 21 15 cp r18, r1 + 2484: b4 e0 ldi r27, 0x04 ; 4 + 2486: 3b 07 cpc r19, r27 + 2488: 38 f0 brcs .+14 ; 0x2498 + 248a: 2f ef ldi r18, 0xFF ; 255 + 248c: 33 e0 ldi r19, 0x03 ; 3 + 248e: c9 01 movw r24, r18 + 2490: b4 01 movw r22, r8 + 2492: 4b d5 rcall .+2710 ; 0x2f2a <__udivmodhi4> + 2494: 28 1b sub r18, r24 + 2496: 39 0b sbc r19, r25 + 2498: f8 01 movw r30, r16 + 249a: 80 81 ld r24, Z + 249c: 81 ff sbrs r24, 1 + 249e: 09 c0 rjmp .+18 ; 0x24b2 + 24a0: c9 01 movw r24, r18 + 24a2: b4 01 movw r22, r8 + 24a4: 42 d5 rcall .+2692 ; 0x2f2a <__udivmodhi4> + 24a6: 41 e0 ldi r20, 0x01 ; 1 + 24a8: 89 2b or r24, r25 + 24aa: 09 f0 breq .+2 ; 0x24ae + 24ac: 40 e0 ldi r20, 0x00 ; 0 + 24ae: 84 2f mov r24, r20 + 24b0: 01 c0 rjmp .+2 ; 0x24b4 + 24b2: 80 e0 ldi r24, 0x00 ; 0 + 24b4: d8 01 movw r26, r16 + 24b6: 9c 91 ld r25, X + 24b8: 80 fb bst r24, 0 + 24ba: 91 f9 bld r25, 1 + 24bc: 9c 93 st X, r25 + 24be: cc 0f add r28, r28 + 24c0: dd 1f adc r29, r29 + 24c2: cc 0f add r28, r28 + 24c4: dd 1f adc r29, r29 + 24c6: cc 0f add r28, r28 + 24c8: dd 1f adc r29, r29 + 24ca: c0 5c subi r28, 0xC0 ; 192 + 24cc: de 4d sbci r29, 0xDE ; 222 + 24ce: 1e 86 std Y+14, r1 ; 0x0e + 24d0: 1f 86 std Y+15, r1 ; 0x0f + 24d2: 2a 87 std Y+10, r18 ; 0x0a + 24d4: 3b 87 std Y+11, r19 ; 0x0b + 24d6: 11 96 adiw r26, 0x01 ; 1 + 24d8: 2d 91 ld r18, X+ + 24da: 3c 91 ld r19, X + 24dc: 12 97 sbiw r26, 0x02 ; 2 + 24de: 15 96 adiw r26, 0x05 ; 5 + 24e0: 8d 91 ld r24, X+ + 24e2: 9c 91 ld r25, X + 24e4: 16 97 sbiw r26, 0x06 ; 6 + 24e6: 82 0f add r24, r18 + 24e8: 93 1f adc r25, r19 + 24ea: 8c 87 std Y+12, r24 ; 0x0c + 24ec: 9d 87 std Y+13, r25 ; 0x0d + 24ee: f7 01 movw r30, r14 + 24f0: 02 e0 ldi r16, 0x02 ; 2 + 24f2: 06 93 lac Z, r16 + 24f4: ca c0 rjmp .+404 ; 0x268a + 24f6: d8 01 movw r26, r16 + 24f8: 8c 91 ld r24, X + 24fa: 81 ff sbrs r24, 1 + 24fc: b3 c0 rjmp .+358 ; 0x2664 + 24fe: 8d 7f andi r24, 0xFD ; 253 + 2500: 8c 93 st X, r24 + 2502: cc 0f add r28, r28 + 2504: dd 1f adc r29, r29 + 2506: cc 0f add r28, r28 + 2508: dd 1f adc r29, r29 + 250a: cc 0f add r28, r28 + 250c: dd 1f adc r29, r29 + 250e: c0 5c subi r28, 0xC0 ; 192 + 2510: de 4d sbci r29, 0xDE ; 222 + 2512: 1e 86 std Y+14, r1 ; 0x0e + 2514: 1f 86 std Y+15, r1 ; 0x0f + 2516: 1a 86 std Y+10, r1 ; 0x0a + 2518: 1b 86 std Y+11, r1 ; 0x0b + 251a: f7 01 movw r30, r14 + 251c: 02 e0 ldi r16, 0x02 ; 2 + 251e: 06 93 lac Z, r16 + 2520: b4 c0 rjmp .+360 ; 0x268a + 2522: fe 01 movw r30, r28 + 2524: ee 0f add r30, r30 + 2526: ff 1f adc r31, r31 + 2528: ee 0f add r30, r30 + 252a: ff 1f adc r31, r31 + 252c: ee 0f add r30, r30 + 252e: ff 1f adc r31, r31 + 2530: e0 5c subi r30, 0xC0 ; 192 + 2532: fe 4d sbci r31, 0xDE ; 222 + 2534: a2 84 ldd r10, Z+10 ; 0x0a + 2536: b3 84 ldd r11, Z+11 ; 0x0b + 2538: d8 01 movw r26, r16 + 253a: 8c 91 ld r24, X + 253c: 82 ff sbrs r24, 2 + 253e: 19 c0 rjmp .+50 ; 0x2572 + 2540: 11 96 adiw r26, 0x01 ; 1 + 2542: ed 91 ld r30, X+ + 2544: fc 91 ld r31, X + 2546: 12 97 sbiw r26, 0x02 ; 2 + 2548: 15 96 adiw r26, 0x05 ; 5 + 254a: 2d 91 ld r18, X+ + 254c: 3c 91 ld r19, X + 254e: 16 97 sbiw r26, 0x06 ; 6 + 2550: 13 96 adiw r26, 0x03 ; 3 + 2552: 8d 91 ld r24, X+ + 2554: 9c 91 ld r25, X + 2556: 14 97 sbiw r26, 0x04 ; 4 + 2558: b4 01 movw r22, r8 + 255a: e7 d4 rcall .+2510 ; 0x2f2a <__udivmodhi4> + 255c: b0 e4 ldi r27, 0x40 ; 64 + 255e: db 9e mul r13, r27 + 2560: b0 01 movw r22, r0 + 2562: 11 24 eor r1, r1 + 2564: 67 59 subi r22, 0x97 ; 151 + 2566: 7f 4d sbci r23, 0xDF ; 223 + 2568: ac 01 movw r20, r24 + 256a: cf 01 movw r24, r30 + 256c: 82 0f add r24, r18 + 256e: 93 1f adc r25, r19 + 2570: 09 d5 rcall .+2578 ; 0x2f84 + 2572: f8 01 movw r30, r16 + 2574: 25 81 ldd r18, Z+5 ; 0x05 + 2576: 36 81 ldd r19, Z+6 ; 0x06 + 2578: 2a 0d add r18, r10 + 257a: 3b 1d adc r19, r11 + 257c: 25 83 std Z+5, r18 ; 0x05 + 257e: 36 83 std Z+6, r19 ; 0x06 + 2580: 83 81 ldd r24, Z+3 ; 0x03 + 2582: 94 81 ldd r25, Z+4 ; 0x04 + 2584: 82 17 cp r24, r18 + 2586: 93 07 cpc r25, r19 + 2588: 68 f4 brcc .+26 ; 0x25a4 + 258a: 85 83 std Z+5, r24 ; 0x05 + 258c: 96 83 std Z+6, r25 ; 0x06 + 258e: cc 0f add r28, r28 + 2590: dd 1f adc r29, r29 + 2592: cc 0f add r28, r28 + 2594: dd 1f adc r29, r29 + 2596: cc 0f add r28, r28 + 2598: dd 1f adc r29, r29 + 259a: c0 5c subi r28, 0xC0 ; 192 + 259c: de 4d sbci r29, 0xDE ; 222 + 259e: 8e 85 ldd r24, Y+14 ; 0x0e + 25a0: 9f 85 ldd r25, Y+15 ; 0x0f + 25a2: 60 c0 rjmp .+192 ; 0x2664 + 25a4: fe 01 movw r30, r28 25a6: ee 0f add r30, r30 25a8: ff 1f adc r31, r31 25aa: ee 0f add r30, r30 25ac: ff 1f adc r31, r31 - 25ae: e0 5c subi r30, 0xC0 ; 192 - 25b0: fe 4d sbci r31, 0xDE ; 222 - 25b2: 12 86 std Z+10, r1 ; 0x0a - 25b4: 13 86 std Z+11, r1 ; 0x0b - 25b6: 88 15 cp r24, r8 - 25b8: 99 05 cpc r25, r9 - 25ba: 78 f4 brcc .+30 ; 0x25da - 25bc: d8 01 movw r26, r16 - 25be: 8c 91 ld r24, X - 25c0: 84 60 ori r24, 0x04 ; 4 - 25c2: 8c 93 st X, r24 - 25c4: b0 e4 ldi r27, 0x40 ; 64 - 25c6: db 9e mul r13, r27 - 25c8: c0 01 movw r24, r0 - 25ca: 11 24 eor r1, r1 - 25cc: 87 59 subi r24, 0x97 ; 151 - 25ce: 9f 4d sbci r25, 0xDF ; 223 - 25d0: 84 87 std Z+12, r24 ; 0x0c - 25d2: 95 87 std Z+13, r25 ; 0x0d - 25d4: 86 86 std Z+14, r8 ; 0x0e - 25d6: 97 86 std Z+15, r9 ; 0x0f - 25d8: 13 c0 rjmp .+38 ; 0x2600 - 25da: f8 01 movw r30, r16 - 25dc: 41 81 ldd r20, Z+1 ; 0x01 - 25de: 52 81 ldd r21, Z+2 ; 0x02 - 25e0: 25 81 ldd r18, Z+5 ; 0x05 - 25e2: 36 81 ldd r19, Z+6 ; 0x06 - 25e4: 24 0f add r18, r20 - 25e6: 35 1f adc r19, r21 - 25e8: cc 0f add r28, r28 - 25ea: dd 1f adc r29, r29 - 25ec: cc 0f add r28, r28 - 25ee: dd 1f adc r29, r29 - 25f0: cc 0f add r28, r28 - 25f2: dd 1f adc r29, r29 - 25f4: c0 5c subi r28, 0xC0 ; 192 - 25f6: de 4d sbci r29, 0xDE ; 222 - 25f8: 2c 87 std Y+12, r18 ; 0x0c - 25fa: 3d 87 std Y+13, r19 ; 0x0d - 25fc: 8e 87 std Y+14, r24 ; 0x0e - 25fe: 9f 87 std Y+15, r25 ; 0x0f - 2600: f7 01 movw r30, r14 - 2602: 02 e0 ldi r16, 0x02 ; 2 - 2604: 06 93 lac Z, r16 - 2606: 13 c0 rjmp .+38 ; 0x262e - 2608: d8 01 movw r26, r16 - 260a: 8c 91 ld r24, X - 260c: 80 ff sbrs r24, 0 - 260e: 0f c0 rjmp .+30 ; 0x262e - 2610: 8e 7f andi r24, 0xFE ; 254 - 2612: 8c 93 st X, r24 - 2614: 17 96 adiw r26, 0x07 ; 7 - 2616: ed 91 ld r30, X+ - 2618: fc 91 ld r31, X - 261a: 18 97 sbiw r26, 0x08 ; 8 - 261c: 30 97 sbiw r30, 0x00 ; 0 - 261e: 39 f0 breq .+14 ; 0x262e - 2620: 15 96 adiw r26, 0x05 ; 5 - 2622: 6d 91 ld r22, X+ - 2624: 7c 91 ld r23, X - 2626: 16 97 sbiw r26, 0x06 ; 6 - 2628: 4d 2d mov r20, r13 - 262a: 80 e0 ldi r24, 0x00 ; 0 - 262c: 09 95 icall - 262e: df 91 pop r29 - 2630: cf 91 pop r28 - 2632: 1f 91 pop r17 - 2634: 0f 91 pop r16 - 2636: ff 90 pop r15 - 2638: ef 90 pop r14 - 263a: df 90 pop r13 - 263c: bf 90 pop r11 - 263e: af 90 pop r10 - 2640: 9f 90 pop r9 - 2642: 8f 90 pop r8 - 2644: 08 95 ret - -00002646 : - 2646: cf 93 push r28 - 2648: cf b7 in r28, 0x3f ; 63 - 264a: f8 94 cli - 264c: 81 e0 ldi r24, 0x01 ; 1 - 264e: 11 dd rcall .-1502 ; 0x2072 - 2650: ea ec ldi r30, 0xCA ; 202 - 2652: f4 e0 ldi r31, 0x04 ; 4 - 2654: 80 e4 ldi r24, 0x40 ; 64 - 2656: 80 83 st Z, r24 - 2658: 80 e2 ldi r24, 0x20 ; 32 - 265a: 80 83 st Z, r24 - 265c: e1 ec ldi r30, 0xC1 ; 193 - 265e: f4 e0 ldi r31, 0x04 ; 4 - 2660: 80 81 ld r24, Z - 2662: 81 60 ori r24, 0x01 ; 1 - 2664: 80 83 st Z, r24 - 2666: a9 ec ldi r26, 0xC9 ; 201 - 2668: b4 e0 ldi r27, 0x04 ; 4 - 266a: 8c 91 ld r24, X - 266c: 82 60 ori r24, 0x02 ; 2 + 25ae: ee 0f add r30, r30 + 25b0: ff 1f adc r31, r31 + 25b2: e0 5c subi r30, 0xC0 ; 192 + 25b4: fe 4d sbci r31, 0xDE ; 222 + 25b6: 46 85 ldd r20, Z+14 ; 0x0e + 25b8: 57 85 ldd r21, Z+15 ; 0x0f + 25ba: 4a 15 cp r20, r10 + 25bc: 5b 05 cpc r21, r11 + 25be: 09 f0 breq .+2 ; 0x25c2 + 25c0: 51 c0 rjmp .+162 ; 0x2664 + 25c2: 28 17 cp r18, r24 + 25c4: 39 07 cpc r19, r25 + 25c6: 09 f4 brne .+2 ; 0x25ca + 25c8: 4d c0 rjmp .+154 ; 0x2664 + 25ca: ac 01 movw r20, r24 + 25cc: 42 1b sub r20, r18 + 25ce: 53 0b sbc r21, r19 + 25d0: 9a 01 movw r18, r20 + 25d2: 21 15 cp r18, r1 + 25d4: 54 e0 ldi r21, 0x04 ; 4 + 25d6: 35 07 cpc r19, r21 + 25d8: 50 f0 brcs .+20 ; 0x25ee + 25da: 2f ef ldi r18, 0xFF ; 255 + 25dc: 33 e0 ldi r19, 0x03 ; 3 + 25de: c9 01 movw r24, r18 + 25e0: b4 01 movw r22, r8 + 25e2: a3 d4 rcall .+2374 ; 0x2f2a <__udivmodhi4> + 25e4: d9 01 movw r26, r18 + 25e6: a8 1b sub r26, r24 + 25e8: b9 0b sbc r27, r25 + 25ea: cd 01 movw r24, r26 + 25ec: 07 c0 rjmp .+14 ; 0x25fc + 25ee: c9 01 movw r24, r18 + 25f0: b4 01 movw r22, r8 + 25f2: 9b d4 rcall .+2358 ; 0x2f2a <__udivmodhi4> + 25f4: f9 01 movw r30, r18 + 25f6: e8 1b sub r30, r24 + 25f8: f9 0b sbc r31, r25 + 25fa: cf 01 movw r24, r30 + 25fc: fe 01 movw r30, r28 + 25fe: ee 0f add r30, r30 + 2600: ff 1f adc r31, r31 + 2602: ee 0f add r30, r30 + 2604: ff 1f adc r31, r31 + 2606: ee 0f add r30, r30 + 2608: ff 1f adc r31, r31 + 260a: e0 5c subi r30, 0xC0 ; 192 + 260c: fe 4d sbci r31, 0xDE ; 222 + 260e: 12 86 std Z+10, r1 ; 0x0a + 2610: 13 86 std Z+11, r1 ; 0x0b + 2612: 88 15 cp r24, r8 + 2614: 99 05 cpc r25, r9 + 2616: 78 f4 brcc .+30 ; 0x2636 + 2618: d8 01 movw r26, r16 + 261a: 8c 91 ld r24, X + 261c: 84 60 ori r24, 0x04 ; 4 + 261e: 8c 93 st X, r24 + 2620: b0 e4 ldi r27, 0x40 ; 64 + 2622: db 9e mul r13, r27 + 2624: c0 01 movw r24, r0 + 2626: 11 24 eor r1, r1 + 2628: 87 59 subi r24, 0x97 ; 151 + 262a: 9f 4d sbci r25, 0xDF ; 223 + 262c: 84 87 std Z+12, r24 ; 0x0c + 262e: 95 87 std Z+13, r25 ; 0x0d + 2630: 86 86 std Z+14, r8 ; 0x0e + 2632: 97 86 std Z+15, r9 ; 0x0f + 2634: 13 c0 rjmp .+38 ; 0x265c + 2636: f8 01 movw r30, r16 + 2638: 41 81 ldd r20, Z+1 ; 0x01 + 263a: 52 81 ldd r21, Z+2 ; 0x02 + 263c: 25 81 ldd r18, Z+5 ; 0x05 + 263e: 36 81 ldd r19, Z+6 ; 0x06 + 2640: 24 0f add r18, r20 + 2642: 35 1f adc r19, r21 + 2644: cc 0f add r28, r28 + 2646: dd 1f adc r29, r29 + 2648: cc 0f add r28, r28 + 264a: dd 1f adc r29, r29 + 264c: cc 0f add r28, r28 + 264e: dd 1f adc r29, r29 + 2650: c0 5c subi r28, 0xC0 ; 192 + 2652: de 4d sbci r29, 0xDE ; 222 + 2654: 2c 87 std Y+12, r18 ; 0x0c + 2656: 3d 87 std Y+13, r19 ; 0x0d + 2658: 8e 87 std Y+14, r24 ; 0x0e + 265a: 9f 87 std Y+15, r25 ; 0x0f + 265c: f7 01 movw r30, r14 + 265e: 02 e0 ldi r16, 0x02 ; 2 + 2660: 06 93 lac Z, r16 + 2662: 13 c0 rjmp .+38 ; 0x268a + 2664: d8 01 movw r26, r16 + 2666: 8c 91 ld r24, X + 2668: 80 ff sbrs r24, 0 + 266a: 0f c0 rjmp .+30 ; 0x268a + 266c: 8e 7f andi r24, 0xFE ; 254 266e: 8c 93 st X, r24 - 2670: e8 ec ldi r30, 0xC8 ; 200 - 2672: f4 e0 ldi r31, 0x04 ; 4 - 2674: 80 81 ld r24, Z - 2676: 80 64 ori r24, 0x40 ; 64 - 2678: 80 83 st Z, r24 - 267a: 8c 91 ld r24, X - 267c: 81 60 ori r24, 0x01 ; 1 - 267e: 8c 93 st X, r24 - 2680: 80 81 ld r24, Z - 2682: 80 68 ori r24, 0x80 ; 128 - 2684: 80 83 st Z, r24 - 2686: cf bf out 0x3f, r28 ; 63 - 2688: cf 91 pop r28 - 268a: 08 95 ret + 2670: 17 96 adiw r26, 0x07 ; 7 + 2672: ed 91 ld r30, X+ + 2674: fc 91 ld r31, X + 2676: 18 97 sbiw r26, 0x08 ; 8 + 2678: 30 97 sbiw r30, 0x00 ; 0 + 267a: 39 f0 breq .+14 ; 0x268a + 267c: 15 96 adiw r26, 0x05 ; 5 + 267e: 6d 91 ld r22, X+ + 2680: 7c 91 ld r23, X + 2682: 16 97 sbiw r26, 0x06 ; 6 + 2684: 4d 2d mov r20, r13 + 2686: 80 e0 ldi r24, 0x00 ; 0 + 2688: 09 95 icall + 268a: df 91 pop r29 + 268c: cf 91 pop r28 + 268e: 1f 91 pop r17 + 2690: 0f 91 pop r16 + 2692: ff 90 pop r15 + 2694: ef 90 pop r14 + 2696: df 90 pop r13 + 2698: bf 90 pop r11 + 269a: af 90 pop r10 + 269c: 9f 90 pop r9 + 269e: 8f 90 pop r8 + 26a0: 08 95 ret -0000268c : - 268c: cf 93 push r28 - 268e: df 93 push r29 - 2690: c0 e6 ldi r28, 0x60 ; 96 - 2692: d0 e0 ldi r29, 0x00 ; 0 - 2694: 18 82 st Y, r1 - 2696: 80 e3 ldi r24, 0x30 ; 48 - 2698: 0e 94 84 0a call 0x1508 ; 0x1508 - 269c: e0 ec ldi r30, 0xC0 ; 192 - 269e: f4 e0 ldi r31, 0x04 ; 4 - 26a0: 80 81 ld r24, Z - 26a2: 80 64 ori r24, 0x40 ; 64 - 26a4: 80 83 st Z, r24 - 26a6: 81 e0 ldi r24, 0x01 ; 1 - 26a8: 88 83 st Y, r24 - 26aa: cf b7 in r28, 0x3f ; 63 - 26ac: f8 94 cli - 26ae: e0 e4 ldi r30, 0x40 ; 64 - 26b0: f1 e2 ldi r31, 0x21 ; 33 - 26b2: 11 86 std Z+9, r1 ; 0x09 - 26b4: 11 8a std Z+17, r1 ; 0x11 - 26b6: 11 8e std Z+25, r1 ; 0x19 - 26b8: 11 a2 std Z+33, r1 ; 0x21 - 26ba: e9 ee ldi r30, 0xE9 ; 233 - 26bc: f0 e2 ldi r31, 0x20 ; 32 - 26be: 80 81 ld r24, Z - 26c0: 8e 7f andi r24, 0xFE ; 254 - 26c2: 80 83 st Z, r24 - 26c4: e2 ef ldi r30, 0xF2 ; 242 - 26c6: f0 e2 ldi r31, 0x20 ; 32 - 26c8: 80 81 ld r24, Z - 26ca: 8e 7f andi r24, 0xFE ; 254 - 26cc: 80 83 st Z, r24 - 26ce: 6a e1 ldi r22, 0x1A ; 26 - 26d0: 70 e0 ldi r23, 0x00 ; 0 - 26d2: 82 e0 ldi r24, 0x02 ; 2 - 26d4: c4 dc rcall .-1656 ; 0x205e - 26d6: 8f 3f cpi r24, 0xFF ; 255 - 26d8: 19 f0 breq .+6 ; 0x26e0 - 26da: 80 93 fa 04 sts 0x04FA, r24 ; 0x8004fa <__TEXT_REGION_LENGTH__+0x7004fa> - 26de: 03 c0 rjmp .+6 ; 0x26e6 - 26e0: 8f e1 ldi r24, 0x1F ; 31 - 26e2: 80 93 fa 04 sts 0x04FA, r24 ; 0x8004fa <__TEXT_REGION_LENGTH__+0x7004fa> - 26e6: 6b e1 ldi r22, 0x1B ; 27 - 26e8: 70 e0 ldi r23, 0x00 ; 0 - 26ea: 82 e0 ldi r24, 0x02 ; 2 - 26ec: b8 dc rcall .-1680 ; 0x205e - 26ee: 8f 3f cpi r24, 0xFF ; 255 - 26f0: 19 f0 breq .+6 ; 0x26f8 - 26f2: 80 93 fb 04 sts 0x04FB, r24 ; 0x8004fb <__TEXT_REGION_LENGTH__+0x7004fb> - 26f6: 03 c0 rjmp .+6 ; 0x26fe - 26f8: 8f e1 ldi r24, 0x1F ; 31 - 26fa: 80 93 fb 04 sts 0x04FB, r24 ; 0x8004fb <__TEXT_REGION_LENGTH__+0x7004fb> - 26fe: e0 ec ldi r30, 0xC0 ; 192 - 2700: f4 e0 ldi r31, 0x04 ; 4 - 2702: 80 81 ld r24, Z - 2704: 81 60 ori r24, 0x01 ; 1 - 2706: 80 83 st Z, r24 - 2708: 80 81 ld r24, Z - 270a: 80 68 ori r24, 0x80 ; 128 - 270c: 80 83 st Z, r24 - 270e: 80 81 ld r24, Z - 2710: 80 61 ori r24, 0x10 ; 16 - 2712: 80 83 st Z, r24 - 2714: 88 e4 ldi r24, 0x48 ; 72 - 2716: 91 e2 ldi r25, 0x21 ; 33 - 2718: 86 83 std Z+6, r24 ; 0x06 - 271a: 97 83 std Z+7, r25 ; 0x07 - 271c: 80 81 ld r24, Z - 271e: 80 62 ori r24, 0x20 ; 32 - 2720: 80 83 st Z, r24 - 2722: 8f ef ldi r24, 0xFF ; 255 - 2724: 80 93 c5 04 sts 0x04C5, r24 ; 0x8004c5 <__TEXT_REGION_LENGTH__+0x7004c5> - 2728: e8 ec ldi r30, 0xC8 ; 200 - 272a: f4 e0 ldi r31, 0x04 ; 4 - 272c: 80 81 ld r24, Z - 272e: 82 60 ori r24, 0x02 ; 2 - 2730: 80 83 st Z, r24 - 2732: 10 92 6c 21 sts 0x216C, r1 ; 0x80216c - 2736: 80 91 cf 2b lds r24, 0x2BCF ; 0x802bcf - 273a: 8f 3f cpi r24, 0xFF ; 255 - 273c: 09 f4 brne .+2 ; 0x2740 - 273e: ff cf rjmp .-2 ; 0x273e - 2740: 9f b7 in r25, 0x3f ; 63 - 2742: f8 94 cli - 2744: ea ec ldi r30, 0xCA ; 202 - 2746: fb e2 ldi r31, 0x2B ; 43 - 2748: 85 81 ldd r24, Z+5 ; 0x05 - 274a: 8f 5f subi r24, 0xFF ; 255 - 274c: 85 83 std Z+5, r24 ; 0x05 - 274e: 9f bf out 0x3f, r25 ; 63 - 2750: 7a df rcall .-268 ; 0x2646 - 2752: cf bf out 0x3f, r28 ; 63 - 2754: df 91 pop r29 - 2756: cf 91 pop r28 - 2758: 08 95 ret +000026a2 : + 26a2: cf 93 push r28 + 26a4: cf b7 in r28, 0x3f ; 63 + 26a6: f8 94 cli + 26a8: 81 e0 ldi r24, 0x01 ; 1 + 26aa: 11 dd rcall .-1502 ; 0x20ce + 26ac: ea ec ldi r30, 0xCA ; 202 + 26ae: f4 e0 ldi r31, 0x04 ; 4 + 26b0: 80 e4 ldi r24, 0x40 ; 64 + 26b2: 80 83 st Z, r24 + 26b4: 80 e2 ldi r24, 0x20 ; 32 + 26b6: 80 83 st Z, r24 + 26b8: e1 ec ldi r30, 0xC1 ; 193 + 26ba: f4 e0 ldi r31, 0x04 ; 4 + 26bc: 80 81 ld r24, Z + 26be: 81 60 ori r24, 0x01 ; 1 + 26c0: 80 83 st Z, r24 + 26c2: a9 ec ldi r26, 0xC9 ; 201 + 26c4: b4 e0 ldi r27, 0x04 ; 4 + 26c6: 8c 91 ld r24, X + 26c8: 82 60 ori r24, 0x02 ; 2 + 26ca: 8c 93 st X, r24 + 26cc: e8 ec ldi r30, 0xC8 ; 200 + 26ce: f4 e0 ldi r31, 0x04 ; 4 + 26d0: 80 81 ld r24, Z + 26d2: 80 64 ori r24, 0x40 ; 64 + 26d4: 80 83 st Z, r24 + 26d6: 8c 91 ld r24, X + 26d8: 81 60 ori r24, 0x01 ; 1 + 26da: 8c 93 st X, r24 + 26dc: 80 81 ld r24, Z + 26de: 80 68 ori r24, 0x80 ; 128 + 26e0: 80 83 st Z, r24 + 26e2: cf bf out 0x3f, r28 ; 63 + 26e4: cf 91 pop r28 + 26e6: 08 95 ret -0000275a : - 275a: 80 93 c3 04 sts 0x04C3, r24 ; 0x8004c3 <__TEXT_REGION_LENGTH__+0x7004c3> - 275e: 08 95 ret +000026e8 : + 26e8: cf 93 push r28 + 26ea: df 93 push r29 + 26ec: c0 e6 ldi r28, 0x60 ; 96 + 26ee: d0 e0 ldi r29, 0x00 ; 0 + 26f0: 18 82 st Y, r1 + 26f2: 80 e3 ldi r24, 0x30 ; 48 + 26f4: 0e 94 af 0a call 0x155e ; 0x155e + 26f8: e0 ec ldi r30, 0xC0 ; 192 + 26fa: f4 e0 ldi r31, 0x04 ; 4 + 26fc: 80 81 ld r24, Z + 26fe: 80 64 ori r24, 0x40 ; 64 + 2700: 80 83 st Z, r24 + 2702: 81 e0 ldi r24, 0x01 ; 1 + 2704: 88 83 st Y, r24 + 2706: cf b7 in r28, 0x3f ; 63 + 2708: f8 94 cli + 270a: e0 e4 ldi r30, 0x40 ; 64 + 270c: f1 e2 ldi r31, 0x21 ; 33 + 270e: 11 86 std Z+9, r1 ; 0x09 + 2710: 11 8a std Z+17, r1 ; 0x11 + 2712: 11 8e std Z+25, r1 ; 0x19 + 2714: 11 a2 std Z+33, r1 ; 0x21 + 2716: e9 ee ldi r30, 0xE9 ; 233 + 2718: f0 e2 ldi r31, 0x20 ; 32 + 271a: 80 81 ld r24, Z + 271c: 8e 7f andi r24, 0xFE ; 254 + 271e: 80 83 st Z, r24 + 2720: e2 ef ldi r30, 0xF2 ; 242 + 2722: f0 e2 ldi r31, 0x20 ; 32 + 2724: 80 81 ld r24, Z + 2726: 8e 7f andi r24, 0xFE ; 254 + 2728: 80 83 st Z, r24 + 272a: 6a e1 ldi r22, 0x1A ; 26 + 272c: 70 e0 ldi r23, 0x00 ; 0 + 272e: 82 e0 ldi r24, 0x02 ; 2 + 2730: c4 dc rcall .-1656 ; 0x20ba + 2732: 8f 3f cpi r24, 0xFF ; 255 + 2734: 19 f0 breq .+6 ; 0x273c + 2736: 80 93 fa 04 sts 0x04FA, r24 ; 0x8004fa <__TEXT_REGION_LENGTH__+0x7004fa> + 273a: 03 c0 rjmp .+6 ; 0x2742 + 273c: 8f e1 ldi r24, 0x1F ; 31 + 273e: 80 93 fa 04 sts 0x04FA, r24 ; 0x8004fa <__TEXT_REGION_LENGTH__+0x7004fa> + 2742: 6b e1 ldi r22, 0x1B ; 27 + 2744: 70 e0 ldi r23, 0x00 ; 0 + 2746: 82 e0 ldi r24, 0x02 ; 2 + 2748: b8 dc rcall .-1680 ; 0x20ba + 274a: 8f 3f cpi r24, 0xFF ; 255 + 274c: 19 f0 breq .+6 ; 0x2754 + 274e: 80 93 fb 04 sts 0x04FB, r24 ; 0x8004fb <__TEXT_REGION_LENGTH__+0x7004fb> + 2752: 03 c0 rjmp .+6 ; 0x275a + 2754: 8f e1 ldi r24, 0x1F ; 31 + 2756: 80 93 fb 04 sts 0x04FB, r24 ; 0x8004fb <__TEXT_REGION_LENGTH__+0x7004fb> + 275a: e0 ec ldi r30, 0xC0 ; 192 + 275c: f4 e0 ldi r31, 0x04 ; 4 + 275e: 80 81 ld r24, Z + 2760: 81 60 ori r24, 0x01 ; 1 + 2762: 80 83 st Z, r24 + 2764: 80 81 ld r24, Z + 2766: 80 68 ori r24, 0x80 ; 128 + 2768: 80 83 st Z, r24 + 276a: 80 81 ld r24, Z + 276c: 80 61 ori r24, 0x10 ; 16 + 276e: 80 83 st Z, r24 + 2770: 88 e4 ldi r24, 0x48 ; 72 + 2772: 91 e2 ldi r25, 0x21 ; 33 + 2774: 86 83 std Z+6, r24 ; 0x06 + 2776: 97 83 std Z+7, r25 ; 0x07 + 2778: 80 81 ld r24, Z + 277a: 80 62 ori r24, 0x20 ; 32 + 277c: 80 83 st Z, r24 + 277e: 8f ef ldi r24, 0xFF ; 255 + 2780: 80 93 c5 04 sts 0x04C5, r24 ; 0x8004c5 <__TEXT_REGION_LENGTH__+0x7004c5> + 2784: e8 ec ldi r30, 0xC8 ; 200 + 2786: f4 e0 ldi r31, 0x04 ; 4 + 2788: 80 81 ld r24, Z + 278a: 82 60 ori r24, 0x02 ; 2 + 278c: 80 83 st Z, r24 + 278e: 10 92 6c 21 sts 0x216C, r1 ; 0x80216c + 2792: 80 91 cf 2b lds r24, 0x2BCF ; 0x802bcf + 2796: 8f 3f cpi r24, 0xFF ; 255 + 2798: 09 f4 brne .+2 ; 0x279c + 279a: ff cf rjmp .-2 ; 0x279a + 279c: 9f b7 in r25, 0x3f ; 63 + 279e: f8 94 cli + 27a0: ea ec ldi r30, 0xCA ; 202 + 27a2: fb e2 ldi r31, 0x2B ; 43 + 27a4: 85 81 ldd r24, Z+5 ; 0x05 + 27a6: 8f 5f subi r24, 0xFF ; 255 + 27a8: 85 83 std Z+5, r24 ; 0x05 + 27aa: 9f bf out 0x3f, r25 ; 63 + 27ac: 7a df rcall .-268 ; 0x26a2 + 27ae: cf bf out 0x3f, r28 ; 63 + 27b0: df 91 pop r29 + 27b2: cf 91 pop r28 + 27b4: 08 95 ret -00002760 : - 2760: 80 91 c3 04 lds r24, 0x04C3 ; 0x8004c3 <__TEXT_REGION_LENGTH__+0x7004c3> - 2764: 08 95 ret +000027b6 : + 27b6: 80 93 c3 04 sts 0x04C3, r24 ; 0x8004c3 <__TEXT_REGION_LENGTH__+0x7004c3> + 27ba: 08 95 ret -00002766 : - 2766: ea e9 ldi r30, 0x9A ; 154 - 2768: f3 e2 ldi r31, 0x23 ; 35 - 276a: 80 87 std Z+8, r24 ; 0x08 - 276c: 91 87 std Z+9, r25 ; 0x09 - 276e: 62 87 std Z+10, r22 ; 0x0a - 2770: 73 87 std Z+11, r23 ; 0x0b - 2772: 08 95 ret +000027bc : + 27bc: 80 91 c3 04 lds r24, 0x04C3 ; 0x8004c3 <__TEXT_REGION_LENGTH__+0x7004c3> + 27c0: 08 95 ret -00002774 : - 2774: 28 2f mov r18, r24 - 2776: 2f 70 andi r18, 0x0F ; 15 - 2778: 30 e0 ldi r19, 0x00 ; 0 - 277a: 22 0f add r18, r18 - 277c: 33 1f adc r19, r19 - 277e: 08 2e mov r0, r24 - 2780: 00 0c add r0, r0 - 2782: 99 0b sbc r25, r25 - 2784: 88 27 eor r24, r24 - 2786: 99 0f add r25, r25 - 2788: 88 1f adc r24, r24 - 278a: 99 27 eor r25, r25 - 278c: 82 0f add r24, r18 - 278e: 93 1f adc r25, r19 - 2790: fc 01 movw r30, r24 - 2792: ee 0f add r30, r30 - 2794: ff 1f adc r31, r31 - 2796: ee 0f add r30, r30 - 2798: ff 1f adc r31, r31 - 279a: ee 0f add r30, r30 - 279c: ff 1f adc r31, r31 - 279e: e0 5c subi r30, 0xC0 ; 192 - 27a0: fe 4d sbci r31, 0xDE ; 222 - 27a2: 21 85 ldd r18, Z+9 ; 0x09 - 27a4: 20 7c andi r18, 0xC0 ; 192 - 27a6: 09 f0 breq .+2 ; 0x27aa - 27a8: 58 c0 rjmp .+176 ; 0x285a - 27aa: 63 70 andi r22, 0x03 ; 3 - 27ac: 61 30 cpi r22, 0x01 ; 1 - 27ae: 11 f0 breq .+4 ; 0x27b4 - 27b0: 18 f4 brcc .+6 ; 0x27b8 - 27b2: 04 c0 rjmp .+8 ; 0x27bc - 27b4: 20 ec ldi r18, 0xC0 ; 192 - 27b6: 03 c0 rjmp .+6 ; 0x27be - 27b8: 20 e8 ldi r18, 0x80 ; 128 - 27ba: 01 c0 rjmp .+2 ; 0x27be - 27bc: 20 e4 ldi r18, 0x40 ; 64 - 27be: 40 38 cpi r20, 0x80 ; 128 - 27c0: 51 05 cpc r21, r1 - 27c2: e9 f0 breq .+58 ; 0x27fe - 27c4: 50 f4 brcc .+20 ; 0x27da - 27c6: 40 32 cpi r20, 0x20 ; 32 - 27c8: 51 05 cpc r21, r1 - 27ca: a9 f0 breq .+42 ; 0x27f6 - 27cc: 40 34 cpi r20, 0x40 ; 64 - 27ce: 51 05 cpc r21, r1 - 27d0: a1 f0 breq .+40 ; 0x27fa - 27d2: 40 31 cpi r20, 0x10 ; 16 - 27d4: 51 05 cpc r21, r1 - 27d6: d9 f4 brne .+54 ; 0x280e - 27d8: 0c c0 rjmp .+24 ; 0x27f2 - 27da: 41 15 cp r20, r1 - 27dc: 32 e0 ldi r19, 0x02 ; 2 - 27de: 53 07 cpc r21, r19 - 27e0: 91 f0 breq .+36 ; 0x2806 - 27e2: 4f 3f cpi r20, 0xFF ; 255 - 27e4: 33 e0 ldi r19, 0x03 ; 3 - 27e6: 53 07 cpc r21, r19 - 27e8: 81 f0 breq .+32 ; 0x280a - 27ea: 41 15 cp r20, r1 - 27ec: 51 40 sbci r21, 0x01 ; 1 - 27ee: 79 f4 brne .+30 ; 0x280e - 27f0: 08 c0 rjmp .+16 ; 0x2802 - 27f2: 41 e0 ldi r20, 0x01 ; 1 - 27f4: 0d c0 rjmp .+26 ; 0x2810 - 27f6: 42 e0 ldi r20, 0x02 ; 2 - 27f8: 0b c0 rjmp .+22 ; 0x2810 - 27fa: 43 e0 ldi r20, 0x03 ; 3 - 27fc: 09 c0 rjmp .+18 ; 0x2810 - 27fe: 44 e0 ldi r20, 0x04 ; 4 - 2800: 07 c0 rjmp .+14 ; 0x2810 - 2802: 45 e0 ldi r20, 0x05 ; 5 - 2804: 05 c0 rjmp .+10 ; 0x2810 - 2806: 46 e0 ldi r20, 0x06 ; 6 - 2808: 03 c0 rjmp .+6 ; 0x2810 - 280a: 47 e0 ldi r20, 0x07 ; 7 - 280c: 01 c0 rjmp .+2 ; 0x2810 - 280e: 40 e0 ldi r20, 0x00 ; 0 - 2810: fc 01 movw r30, r24 - 2812: ee 0f add r30, r30 - 2814: ff 1f adc r31, r31 - 2816: ee 0f add r30, r30 - 2818: ff 1f adc r31, r31 - 281a: ee 0f add r30, r30 - 281c: ff 1f adc r31, r31 - 281e: e0 5c subi r30, 0xC0 ; 192 - 2820: fe 4d sbci r31, 0xDE ; 222 - 2822: 11 86 std Z+9, r1 ; 0x09 - 2824: dc 01 movw r26, r24 - 2826: aa 0f add r26, r26 - 2828: bb 1f adc r27, r27 - 282a: aa 0f add r26, r26 - 282c: bb 1f adc r27, r27 - 282e: aa 0f add r26, r26 - 2830: bb 1f adc r27, r27 - 2832: a8 5b subi r26, 0xB8 ; 184 - 2834: be 4d sbci r27, 0xDE ; 222 - 2836: 36 e0 ldi r19, 0x06 ; 6 - 2838: 3c 93 st X, r19 - 283a: 24 2b or r18, r20 - 283c: 21 87 std Z+9, r18 ; 0x09 - 283e: 88 0f add r24, r24 - 2840: 99 1f adc r25, r25 - 2842: 88 0f add r24, r24 - 2844: 99 1f adc r25, r25 - 2846: 88 0f add r24, r24 - 2848: 99 1f adc r25, r25 - 284a: fc 01 movw r30, r24 - 284c: e0 5c subi r30, 0xC0 ; 192 - 284e: fe 4d sbci r31, 0xDE ; 222 - 2850: 81 85 ldd r24, Z+9 ; 0x09 - 2852: 80 62 ori r24, 0x20 ; 32 - 2854: 81 87 std Z+9, r24 ; 0x09 - 2856: 81 e0 ldi r24, 0x01 ; 1 - 2858: 08 95 ret - 285a: 80 e0 ldi r24, 0x00 ; 0 - 285c: 08 95 ret +000027c2 : + 27c2: ea e9 ldi r30, 0x9A ; 154 + 27c4: f3 e2 ldi r31, 0x23 ; 35 + 27c6: 80 87 std Z+8, r24 ; 0x08 + 27c8: 91 87 std Z+9, r25 ; 0x09 + 27ca: 62 87 std Z+10, r22 ; 0x0a + 27cc: 73 87 std Z+11, r23 ; 0x0b + 27ce: 08 95 ret -0000285e : - 285e: e8 2f mov r30, r24 - 2860: ef 70 andi r30, 0x0F ; 15 - 2862: f0 e0 ldi r31, 0x00 ; 0 - 2864: ee 0f add r30, r30 - 2866: ff 1f adc r31, r31 - 2868: 08 2e mov r0, r24 - 286a: 00 0c add r0, r0 - 286c: 99 0b sbc r25, r25 - 286e: 88 27 eor r24, r24 - 2870: 99 0f add r25, r25 - 2872: 88 1f adc r24, r24 - 2874: 99 27 eor r25, r25 - 2876: e8 0f add r30, r24 - 2878: f9 1f adc r31, r25 - 287a: ee 0f add r30, r30 - 287c: ff 1f adc r31, r31 - 287e: ee 0f add r30, r30 - 2880: ff 1f adc r31, r31 - 2882: ee 0f add r30, r30 - 2884: ff 1f adc r31, r31 - 2886: e0 5c subi r30, 0xC0 ; 192 - 2888: fe 4d sbci r31, 0xDE ; 222 - 288a: 81 85 ldd r24, Z+9 ; 0x09 - 288c: 82 fb bst r24, 2 - 288e: 88 27 eor r24, r24 - 2890: 80 f9 bld r24, 0 - 2892: 08 95 ret +000027d0 : + 27d0: 28 2f mov r18, r24 + 27d2: 2f 70 andi r18, 0x0F ; 15 + 27d4: 30 e0 ldi r19, 0x00 ; 0 + 27d6: 22 0f add r18, r18 + 27d8: 33 1f adc r19, r19 + 27da: 08 2e mov r0, r24 + 27dc: 00 0c add r0, r0 + 27de: 99 0b sbc r25, r25 + 27e0: 88 27 eor r24, r24 + 27e2: 99 0f add r25, r25 + 27e4: 88 1f adc r24, r24 + 27e6: 99 27 eor r25, r25 + 27e8: 82 0f add r24, r18 + 27ea: 93 1f adc r25, r19 + 27ec: fc 01 movw r30, r24 + 27ee: ee 0f add r30, r30 + 27f0: ff 1f adc r31, r31 + 27f2: ee 0f add r30, r30 + 27f4: ff 1f adc r31, r31 + 27f6: ee 0f add r30, r30 + 27f8: ff 1f adc r31, r31 + 27fa: e0 5c subi r30, 0xC0 ; 192 + 27fc: fe 4d sbci r31, 0xDE ; 222 + 27fe: 21 85 ldd r18, Z+9 ; 0x09 + 2800: 20 7c andi r18, 0xC0 ; 192 + 2802: 09 f0 breq .+2 ; 0x2806 + 2804: 58 c0 rjmp .+176 ; 0x28b6 + 2806: 63 70 andi r22, 0x03 ; 3 + 2808: 61 30 cpi r22, 0x01 ; 1 + 280a: 11 f0 breq .+4 ; 0x2810 + 280c: 18 f4 brcc .+6 ; 0x2814 + 280e: 04 c0 rjmp .+8 ; 0x2818 + 2810: 20 ec ldi r18, 0xC0 ; 192 + 2812: 03 c0 rjmp .+6 ; 0x281a + 2814: 20 e8 ldi r18, 0x80 ; 128 + 2816: 01 c0 rjmp .+2 ; 0x281a + 2818: 20 e4 ldi r18, 0x40 ; 64 + 281a: 40 38 cpi r20, 0x80 ; 128 + 281c: 51 05 cpc r21, r1 + 281e: e9 f0 breq .+58 ; 0x285a + 2820: 50 f4 brcc .+20 ; 0x2836 + 2822: 40 32 cpi r20, 0x20 ; 32 + 2824: 51 05 cpc r21, r1 + 2826: a9 f0 breq .+42 ; 0x2852 + 2828: 40 34 cpi r20, 0x40 ; 64 + 282a: 51 05 cpc r21, r1 + 282c: a1 f0 breq .+40 ; 0x2856 + 282e: 40 31 cpi r20, 0x10 ; 16 + 2830: 51 05 cpc r21, r1 + 2832: d9 f4 brne .+54 ; 0x286a + 2834: 0c c0 rjmp .+24 ; 0x284e + 2836: 41 15 cp r20, r1 + 2838: 32 e0 ldi r19, 0x02 ; 2 + 283a: 53 07 cpc r21, r19 + 283c: 91 f0 breq .+36 ; 0x2862 + 283e: 4f 3f cpi r20, 0xFF ; 255 + 2840: 33 e0 ldi r19, 0x03 ; 3 + 2842: 53 07 cpc r21, r19 + 2844: 81 f0 breq .+32 ; 0x2866 + 2846: 41 15 cp r20, r1 + 2848: 51 40 sbci r21, 0x01 ; 1 + 284a: 79 f4 brne .+30 ; 0x286a + 284c: 08 c0 rjmp .+16 ; 0x285e + 284e: 41 e0 ldi r20, 0x01 ; 1 + 2850: 0d c0 rjmp .+26 ; 0x286c + 2852: 42 e0 ldi r20, 0x02 ; 2 + 2854: 0b c0 rjmp .+22 ; 0x286c + 2856: 43 e0 ldi r20, 0x03 ; 3 + 2858: 09 c0 rjmp .+18 ; 0x286c + 285a: 44 e0 ldi r20, 0x04 ; 4 + 285c: 07 c0 rjmp .+14 ; 0x286c + 285e: 45 e0 ldi r20, 0x05 ; 5 + 2860: 05 c0 rjmp .+10 ; 0x286c + 2862: 46 e0 ldi r20, 0x06 ; 6 + 2864: 03 c0 rjmp .+6 ; 0x286c + 2866: 47 e0 ldi r20, 0x07 ; 7 + 2868: 01 c0 rjmp .+2 ; 0x286c + 286a: 40 e0 ldi r20, 0x00 ; 0 + 286c: fc 01 movw r30, r24 + 286e: ee 0f add r30, r30 + 2870: ff 1f adc r31, r31 + 2872: ee 0f add r30, r30 + 2874: ff 1f adc r31, r31 + 2876: ee 0f add r30, r30 + 2878: ff 1f adc r31, r31 + 287a: e0 5c subi r30, 0xC0 ; 192 + 287c: fe 4d sbci r31, 0xDE ; 222 + 287e: 11 86 std Z+9, r1 ; 0x09 + 2880: dc 01 movw r26, r24 + 2882: aa 0f add r26, r26 + 2884: bb 1f adc r27, r27 + 2886: aa 0f add r26, r26 + 2888: bb 1f adc r27, r27 + 288a: aa 0f add r26, r26 + 288c: bb 1f adc r27, r27 + 288e: a8 5b subi r26, 0xB8 ; 184 + 2890: be 4d sbci r27, 0xDE ; 222 + 2892: 36 e0 ldi r19, 0x06 ; 6 + 2894: 3c 93 st X, r19 + 2896: 24 2b or r18, r20 + 2898: 21 87 std Z+9, r18 ; 0x09 + 289a: 88 0f add r24, r24 + 289c: 99 1f adc r25, r25 + 289e: 88 0f add r24, r24 + 28a0: 99 1f adc r25, r25 + 28a2: 88 0f add r24, r24 + 28a4: 99 1f adc r25, r25 + 28a6: fc 01 movw r30, r24 + 28a8: e0 5c subi r30, 0xC0 ; 192 + 28aa: fe 4d sbci r31, 0xDE ; 222 + 28ac: 81 85 ldd r24, Z+9 ; 0x09 + 28ae: 80 62 ori r24, 0x20 ; 32 + 28b0: 81 87 std Z+9, r24 ; 0x09 + 28b2: 81 e0 ldi r24, 0x01 ; 1 + 28b4: 08 95 ret + 28b6: 80 e0 ldi r24, 0x00 ; 0 + 28b8: 08 95 ret -00002894 : - 2894: 28 2f mov r18, r24 - 2896: 2f 70 andi r18, 0x0F ; 15 - 2898: 30 e0 ldi r19, 0x00 ; 0 - 289a: a9 01 movw r20, r18 - 289c: 44 0f add r20, r20 - 289e: 55 1f adc r21, r21 - 28a0: 28 2f mov r18, r24 - 28a2: 08 2e mov r0, r24 - 28a4: 00 0c add r0, r0 - 28a6: 33 0b sbc r19, r19 - 28a8: 22 27 eor r18, r18 - 28aa: 33 0f add r19, r19 - 28ac: 22 1f adc r18, r18 - 28ae: 33 27 eor r19, r19 - 28b0: 24 0f add r18, r20 - 28b2: 35 1f adc r19, r21 - 28b4: f9 01 movw r30, r18 - 28b6: ee 0f add r30, r30 - 28b8: ff 1f adc r31, r31 - 28ba: ee 0f add r30, r30 - 28bc: ff 1f adc r31, r31 - 28be: ee 0f add r30, r30 - 28c0: ff 1f adc r31, r31 - 28c2: e0 5c subi r30, 0xC0 ; 192 - 28c4: fe 4d sbci r31, 0xDE ; 222 - 28c6: 91 85 ldd r25, Z+9 ; 0x09 - 28c8: 92 ff sbrs r25, 2 - 28ca: 17 c0 rjmp .+46 ; 0x28fa - 28cc: 22 0f add r18, r18 - 28ce: 33 1f adc r19, r19 - 28d0: 22 0f add r18, r18 - 28d2: 33 1f adc r19, r19 - 28d4: 22 0f add r18, r18 - 28d6: 33 1f adc r19, r19 - 28d8: f9 01 movw r30, r18 - 28da: e0 5c subi r30, 0xC0 ; 192 - 28dc: fe 4d sbci r31, 0xDE ; 222 - 28de: 91 85 ldd r25, Z+9 ; 0x09 - 28e0: 9b 7f andi r25, 0xFB ; 251 - 28e2: 91 87 std Z+9, r25 ; 0x09 - 28e4: cc dc rcall .-1640 ; 0x227e - 28e6: fc 01 movw r30, r24 - 28e8: 80 81 ld r24, Z - 28ea: 80 ff sbrs r24, 0 - 28ec: 06 c0 rjmp .+12 ; 0x28fa - 28ee: 8e 7f andi r24, 0xFE ; 254 - 28f0: 80 83 st Z, r24 - 28f2: 07 80 ldd r0, Z+7 ; 0x07 - 28f4: f0 85 ldd r31, Z+8 ; 0x08 - 28f6: e0 2d mov r30, r0 - 28f8: 09 95 icall - 28fa: 81 e0 ldi r24, 0x01 ; 1 - 28fc: 08 95 ret +000028ba : + 28ba: e8 2f mov r30, r24 + 28bc: ef 70 andi r30, 0x0F ; 15 + 28be: f0 e0 ldi r31, 0x00 ; 0 + 28c0: ee 0f add r30, r30 + 28c2: ff 1f adc r31, r31 + 28c4: 08 2e mov r0, r24 + 28c6: 00 0c add r0, r0 + 28c8: 99 0b sbc r25, r25 + 28ca: 88 27 eor r24, r24 + 28cc: 99 0f add r25, r25 + 28ce: 88 1f adc r24, r24 + 28d0: 99 27 eor r25, r25 + 28d2: e8 0f add r30, r24 + 28d4: f9 1f adc r31, r25 + 28d6: ee 0f add r30, r30 + 28d8: ff 1f adc r31, r31 + 28da: ee 0f add r30, r30 + 28dc: ff 1f adc r31, r31 + 28de: ee 0f add r30, r30 + 28e0: ff 1f adc r31, r31 + 28e2: e0 5c subi r30, 0xC0 ; 192 + 28e4: fe 4d sbci r31, 0xDE ; 222 + 28e6: 81 85 ldd r24, Z+9 ; 0x09 + 28e8: 82 fb bst r24, 2 + 28ea: 88 27 eor r24, r24 + 28ec: 80 f9 bld r24, 0 + 28ee: 08 95 ret -000028fe : - 28fe: 7f 92 push r7 - 2900: 8f 92 push r8 - 2902: 9f 92 push r9 - 2904: af 92 push r10 - 2906: bf 92 push r11 - 2908: cf 92 push r12 - 290a: df 92 push r13 - 290c: ef 92 push r14 - 290e: ff 92 push r15 - 2910: 0f 93 push r16 - 2912: 1f 93 push r17 - 2914: cf 93 push r28 - 2916: df 93 push r29 - 2918: 98 2e mov r9, r24 - 291a: 86 2e mov r8, r22 - 291c: 6a 01 movw r12, r20 - 291e: 79 01 movw r14, r18 - 2920: ae dc rcall .-1700 ; 0x227e - 2922: 5c 01 movw r10, r24 - 2924: 79 2c mov r7, r9 - 2926: 77 1c adc r7, r7 - 2928: 77 24 eor r7, r7 - 292a: 77 1c adc r7, r7 - 292c: c9 2d mov r28, r9 - 292e: cf 70 andi r28, 0x0F ; 15 - 2930: d0 e0 ldi r29, 0x00 ; 0 - 2932: cc 0f add r28, r28 - 2934: dd 1f adc r29, r29 - 2936: c7 0d add r28, r7 - 2938: d1 1d adc r29, r1 - 293a: fe 01 movw r30, r28 - 293c: ee 0f add r30, r30 - 293e: ff 1f adc r31, r31 - 2940: ee 0f add r30, r30 - 2942: ff 1f adc r31, r31 - 2944: ee 0f add r30, r30 - 2946: ff 1f adc r31, r31 - 2948: e0 5c subi r30, 0xC0 ; 192 - 294a: fe 4d sbci r31, 0xDE ; 222 - 294c: 81 85 ldd r24, Z+9 ; 0x09 - 294e: 80 7c andi r24, 0xC0 ; 192 - 2950: 09 f4 brne .+2 ; 0x2954 - 2952: 7d c0 rjmp .+250 ; 0x2a4e - 2954: fe 01 movw r30, r28 - 2956: ee 0f add r30, r30 - 2958: ff 1f adc r31, r31 - 295a: ee 0f add r30, r30 - 295c: ff 1f adc r31, r31 - 295e: ee 0f add r30, r30 - 2960: ff 1f adc r31, r31 - 2962: e0 5c subi r30, 0xC0 ; 192 - 2964: fe 4d sbci r31, 0xDE ; 222 - 2966: 81 85 ldd r24, Z+9 ; 0x09 - 2968: 80 7c andi r24, 0xC0 ; 192 - 296a: 80 3c cpi r24, 0xC0 ; 192 - 296c: 61 f0 breq .+24 ; 0x2986 - 296e: fe 01 movw r30, r28 - 2970: ee 0f add r30, r30 - 2972: ff 1f adc r31, r31 - 2974: ee 0f add r30, r30 - 2976: ff 1f adc r31, r31 - 2978: ee 0f add r30, r30 - 297a: ff 1f adc r31, r31 - 297c: e0 5c subi r30, 0xC0 ; 192 - 297e: fe 4d sbci r31, 0xDE ; 222 - 2980: 81 85 ldd r24, Z+9 ; 0x09 - 2982: 82 fd sbrc r24, 2 - 2984: 66 c0 rjmp .+204 ; 0x2a52 - 2986: 8f b7 in r24, 0x3f ; 63 - 2988: f8 94 cli - 298a: f5 01 movw r30, r10 - 298c: 90 81 ld r25, Z - 298e: 90 ff sbrs r25, 0 - 2990: 03 c0 rjmp .+6 ; 0x2998 - 2992: 8f bf out 0x3f, r24 ; 63 - 2994: 71 2c mov r7, r1 - 2996: 5e c0 rjmp .+188 ; 0x2a54 - 2998: f5 01 movw r30, r10 - 299a: 90 81 ld r25, Z - 299c: 91 60 ori r25, 0x01 ; 1 - 299e: 90 83 st Z, r25 - 29a0: 8f bf out 0x3f, r24 ; 63 - 29a2: c1 82 std Z+1, r12 ; 0x01 - 29a4: d2 82 std Z+2, r13 ; 0x02 - 29a6: e3 82 std Z+3, r14 ; 0x03 - 29a8: f4 82 std Z+4, r15 ; 0x04 - 29aa: 15 82 std Z+5, r1 ; 0x05 - 29ac: 16 82 std Z+6, r1 ; 0x06 - 29ae: 07 83 std Z+7, r16 ; 0x07 - 29b0: 10 87 std Z+8, r17 ; 0x08 - 29b2: 81 10 cpse r8, r1 - 29b4: 06 c0 rjmp .+12 ; 0x29c2 - 29b6: 91 e0 ldi r25, 0x01 ; 1 - 29b8: e1 14 cp r14, r1 - 29ba: f1 04 cpc r15, r1 - 29bc: 19 f0 breq .+6 ; 0x29c4 - 29be: 90 e0 ldi r25, 0x00 ; 0 - 29c0: 01 c0 rjmp .+2 ; 0x29c4 - 29c2: 91 e0 ldi r25, 0x01 ; 1 - 29c4: f5 01 movw r30, r10 - 29c6: 80 81 ld r24, Z - 29c8: 90 fb bst r25, 0 - 29ca: 81 f9 bld r24, 1 - 29cc: 8b 7f andi r24, 0xFB ; 251 - 29ce: 80 83 st Z, r24 - 29d0: 77 20 and r7, r7 - 29d2: 59 f0 breq .+22 ; 0x29ea - 29d4: cc 0f add r28, r28 - 29d6: dd 1f adc r29, r29 - 29d8: cc 0f add r28, r28 - 29da: dd 1f adc r29, r29 - 29dc: cc 0f add r28, r28 - 29de: dd 1f adc r29, r29 - 29e0: c0 5c subi r28, 0xC0 ; 192 - 29e2: de 4d sbci r29, 0xDE ; 222 - 29e4: 1e 86 std Y+14, r1 ; 0x0e - 29e6: 1f 86 std Y+15, r1 ; 0x0f - 29e8: 2d c0 rjmp .+90 ; 0x2a44 - 29ea: fe 01 movw r30, r28 - 29ec: ee 0f add r30, r30 - 29ee: ff 1f adc r31, r31 - 29f0: ee 0f add r30, r30 - 29f2: ff 1f adc r31, r31 - 29f4: ee 0f add r30, r30 - 29f6: ff 1f adc r31, r31 - 29f8: e0 5c subi r30, 0xC0 ; 192 - 29fa: fe 4d sbci r31, 0xDE ; 222 - 29fc: 81 85 ldd r24, Z+9 ; 0x09 - 29fe: 80 7c andi r24, 0xC0 ; 192 - 2a00: 80 3c cpi r24, 0xC0 ; 192 - 2a02: a1 f4 brne .+40 ; 0x2a2c - 2a04: ce 01 movw r24, r28 - 2a06: 88 0f add r24, r24 - 2a08: 99 1f adc r25, r25 - 2a0a: 88 0f add r24, r24 - 2a0c: 99 1f adc r25, r25 - 2a0e: 88 0f add r24, r24 - 2a10: 99 1f adc r25, r25 - 2a12: 88 5b subi r24, 0xB8 ; 184 - 2a14: 9e 4d sbci r25, 0xDE ; 222 - 2a16: 0d dc rcall .-2022 ; 0x2232 - 2a18: bc 01 movw r22, r24 - 2a1a: c7 01 movw r24, r14 - 2a1c: 58 d2 rcall .+1200 ; 0x2ece <__udivmodhi4> - 2a1e: 89 2b or r24, r25 - 2a20: 29 f0 breq .+10 ; 0x2a2c - 2a22: f5 01 movw r30, r10 - 2a24: 80 81 ld r24, Z - 2a26: 8e 7f andi r24, 0xFE ; 254 - 2a28: 80 83 st Z, r24 - 2a2a: 14 c0 rjmp .+40 ; 0x2a54 - 2a2c: cc 0f add r28, r28 - 2a2e: dd 1f adc r29, r29 +000028f0 : + 28f0: 28 2f mov r18, r24 + 28f2: 2f 70 andi r18, 0x0F ; 15 + 28f4: 30 e0 ldi r19, 0x00 ; 0 + 28f6: a9 01 movw r20, r18 + 28f8: 44 0f add r20, r20 + 28fa: 55 1f adc r21, r21 + 28fc: 28 2f mov r18, r24 + 28fe: 08 2e mov r0, r24 + 2900: 00 0c add r0, r0 + 2902: 33 0b sbc r19, r19 + 2904: 22 27 eor r18, r18 + 2906: 33 0f add r19, r19 + 2908: 22 1f adc r18, r18 + 290a: 33 27 eor r19, r19 + 290c: 24 0f add r18, r20 + 290e: 35 1f adc r19, r21 + 2910: f9 01 movw r30, r18 + 2912: ee 0f add r30, r30 + 2914: ff 1f adc r31, r31 + 2916: ee 0f add r30, r30 + 2918: ff 1f adc r31, r31 + 291a: ee 0f add r30, r30 + 291c: ff 1f adc r31, r31 + 291e: e0 5c subi r30, 0xC0 ; 192 + 2920: fe 4d sbci r31, 0xDE ; 222 + 2922: 91 85 ldd r25, Z+9 ; 0x09 + 2924: 92 ff sbrs r25, 2 + 2926: 17 c0 rjmp .+46 ; 0x2956 + 2928: 22 0f add r18, r18 + 292a: 33 1f adc r19, r19 + 292c: 22 0f add r18, r18 + 292e: 33 1f adc r19, r19 + 2930: 22 0f add r18, r18 + 2932: 33 1f adc r19, r19 + 2934: f9 01 movw r30, r18 + 2936: e0 5c subi r30, 0xC0 ; 192 + 2938: fe 4d sbci r31, 0xDE ; 222 + 293a: 91 85 ldd r25, Z+9 ; 0x09 + 293c: 9b 7f andi r25, 0xFB ; 251 + 293e: 91 87 std Z+9, r25 ; 0x09 + 2940: cc dc rcall .-1640 ; 0x22da + 2942: fc 01 movw r30, r24 + 2944: 80 81 ld r24, Z + 2946: 80 ff sbrs r24, 0 + 2948: 06 c0 rjmp .+12 ; 0x2956 + 294a: 8e 7f andi r24, 0xFE ; 254 + 294c: 80 83 st Z, r24 + 294e: 07 80 ldd r0, Z+7 ; 0x07 + 2950: f0 85 ldd r31, Z+8 ; 0x08 + 2952: e0 2d mov r30, r0 + 2954: 09 95 icall + 2956: 81 e0 ldi r24, 0x01 ; 1 + 2958: 08 95 ret + +0000295a : + 295a: 7f 92 push r7 + 295c: 8f 92 push r8 + 295e: 9f 92 push r9 + 2960: af 92 push r10 + 2962: bf 92 push r11 + 2964: cf 92 push r12 + 2966: df 92 push r13 + 2968: ef 92 push r14 + 296a: ff 92 push r15 + 296c: 0f 93 push r16 + 296e: 1f 93 push r17 + 2970: cf 93 push r28 + 2972: df 93 push r29 + 2974: 98 2e mov r9, r24 + 2976: 86 2e mov r8, r22 + 2978: 6a 01 movw r12, r20 + 297a: 79 01 movw r14, r18 + 297c: ae dc rcall .-1700 ; 0x22da + 297e: 5c 01 movw r10, r24 + 2980: 79 2c mov r7, r9 + 2982: 77 1c adc r7, r7 + 2984: 77 24 eor r7, r7 + 2986: 77 1c adc r7, r7 + 2988: c9 2d mov r28, r9 + 298a: cf 70 andi r28, 0x0F ; 15 + 298c: d0 e0 ldi r29, 0x00 ; 0 + 298e: cc 0f add r28, r28 + 2990: dd 1f adc r29, r29 + 2992: c7 0d add r28, r7 + 2994: d1 1d adc r29, r1 + 2996: fe 01 movw r30, r28 + 2998: ee 0f add r30, r30 + 299a: ff 1f adc r31, r31 + 299c: ee 0f add r30, r30 + 299e: ff 1f adc r31, r31 + 29a0: ee 0f add r30, r30 + 29a2: ff 1f adc r31, r31 + 29a4: e0 5c subi r30, 0xC0 ; 192 + 29a6: fe 4d sbci r31, 0xDE ; 222 + 29a8: 81 85 ldd r24, Z+9 ; 0x09 + 29aa: 80 7c andi r24, 0xC0 ; 192 + 29ac: 09 f4 brne .+2 ; 0x29b0 + 29ae: 7d c0 rjmp .+250 ; 0x2aaa + 29b0: fe 01 movw r30, r28 + 29b2: ee 0f add r30, r30 + 29b4: ff 1f adc r31, r31 + 29b6: ee 0f add r30, r30 + 29b8: ff 1f adc r31, r31 + 29ba: ee 0f add r30, r30 + 29bc: ff 1f adc r31, r31 + 29be: e0 5c subi r30, 0xC0 ; 192 + 29c0: fe 4d sbci r31, 0xDE ; 222 + 29c2: 81 85 ldd r24, Z+9 ; 0x09 + 29c4: 80 7c andi r24, 0xC0 ; 192 + 29c6: 80 3c cpi r24, 0xC0 ; 192 + 29c8: 61 f0 breq .+24 ; 0x29e2 + 29ca: fe 01 movw r30, r28 + 29cc: ee 0f add r30, r30 + 29ce: ff 1f adc r31, r31 + 29d0: ee 0f add r30, r30 + 29d2: ff 1f adc r31, r31 + 29d4: ee 0f add r30, r30 + 29d6: ff 1f adc r31, r31 + 29d8: e0 5c subi r30, 0xC0 ; 192 + 29da: fe 4d sbci r31, 0xDE ; 222 + 29dc: 81 85 ldd r24, Z+9 ; 0x09 + 29de: 82 fd sbrc r24, 2 + 29e0: 66 c0 rjmp .+204 ; 0x2aae + 29e2: 8f b7 in r24, 0x3f ; 63 + 29e4: f8 94 cli + 29e6: f5 01 movw r30, r10 + 29e8: 90 81 ld r25, Z + 29ea: 90 ff sbrs r25, 0 + 29ec: 03 c0 rjmp .+6 ; 0x29f4 + 29ee: 8f bf out 0x3f, r24 ; 63 + 29f0: 71 2c mov r7, r1 + 29f2: 5e c0 rjmp .+188 ; 0x2ab0 + 29f4: f5 01 movw r30, r10 + 29f6: 90 81 ld r25, Z + 29f8: 91 60 ori r25, 0x01 ; 1 + 29fa: 90 83 st Z, r25 + 29fc: 8f bf out 0x3f, r24 ; 63 + 29fe: c1 82 std Z+1, r12 ; 0x01 + 2a00: d2 82 std Z+2, r13 ; 0x02 + 2a02: e3 82 std Z+3, r14 ; 0x03 + 2a04: f4 82 std Z+4, r15 ; 0x04 + 2a06: 15 82 std Z+5, r1 ; 0x05 + 2a08: 16 82 std Z+6, r1 ; 0x06 + 2a0a: 07 83 std Z+7, r16 ; 0x07 + 2a0c: 10 87 std Z+8, r17 ; 0x08 + 2a0e: 81 10 cpse r8, r1 + 2a10: 06 c0 rjmp .+12 ; 0x2a1e + 2a12: 91 e0 ldi r25, 0x01 ; 1 + 2a14: e1 14 cp r14, r1 + 2a16: f1 04 cpc r15, r1 + 2a18: 19 f0 breq .+6 ; 0x2a20 + 2a1a: 90 e0 ldi r25, 0x00 ; 0 + 2a1c: 01 c0 rjmp .+2 ; 0x2a20 + 2a1e: 91 e0 ldi r25, 0x01 ; 1 + 2a20: f5 01 movw r30, r10 + 2a22: 80 81 ld r24, Z + 2a24: 90 fb bst r25, 0 + 2a26: 81 f9 bld r24, 1 + 2a28: 8b 7f andi r24, 0xFB ; 251 + 2a2a: 80 83 st Z, r24 + 2a2c: 77 20 and r7, r7 + 2a2e: 59 f0 breq .+22 ; 0x2a46 2a30: cc 0f add r28, r28 2a32: dd 1f adc r29, r29 2a34: cc 0f add r28, r28 2a36: dd 1f adc r29, r29 - 2a38: c0 5c subi r28, 0xC0 ; 192 - 2a3a: de 4d sbci r29, 0xDE ; 222 - 2a3c: 1a 86 std Y+10, r1 ; 0x0a - 2a3e: 1b 86 std Y+11, r1 ; 0x0b + 2a38: cc 0f add r28, r28 + 2a3a: dd 1f adc r29, r29 + 2a3c: c0 5c subi r28, 0xC0 ; 192 + 2a3e: de 4d sbci r29, 0xDE ; 222 2a40: 1e 86 std Y+14, r1 ; 0x0e 2a42: 1f 86 std Y+15, r1 ; 0x0f - 2a44: 89 2d mov r24, r9 - 2a46: a5 dc rcall .-1718 ; 0x2392 - 2a48: 77 24 eor r7, r7 - 2a4a: 73 94 inc r7 - 2a4c: 03 c0 rjmp .+6 ; 0x2a54 - 2a4e: 71 2c mov r7, r1 - 2a50: 01 c0 rjmp .+2 ; 0x2a54 - 2a52: 71 2c mov r7, r1 - 2a54: 87 2d mov r24, r7 - 2a56: df 91 pop r29 - 2a58: cf 91 pop r28 - 2a5a: 1f 91 pop r17 - 2a5c: 0f 91 pop r16 - 2a5e: ff 90 pop r15 - 2a60: ef 90 pop r14 - 2a62: df 90 pop r13 - 2a64: cf 90 pop r12 - 2a66: bf 90 pop r11 - 2a68: af 90 pop r10 - 2a6a: 9f 90 pop r9 - 2a6c: 8f 90 pop r8 - 2a6e: 7f 90 pop r7 - 2a70: 08 95 ret - -00002a72 : - 2a72: ff 92 push r15 - 2a74: 0f 93 push r16 - 2a76: 1f 93 push r17 - 2a78: cf 93 push r28 - 2a7a: df 93 push r29 - 2a7c: 18 2f mov r17, r24 - 2a7e: f8 2e mov r15, r24 - 2a80: ff 1c adc r15, r15 - 2a82: ff 24 eor r15, r15 - 2a84: ff 1c adc r15, r15 - 2a86: c8 2f mov r28, r24 - 2a88: cf 70 andi r28, 0x0F ; 15 - 2a8a: d0 e0 ldi r29, 0x00 ; 0 + 2a44: 2d c0 rjmp .+90 ; 0x2aa0 + 2a46: fe 01 movw r30, r28 + 2a48: ee 0f add r30, r30 + 2a4a: ff 1f adc r31, r31 + 2a4c: ee 0f add r30, r30 + 2a4e: ff 1f adc r31, r31 + 2a50: ee 0f add r30, r30 + 2a52: ff 1f adc r31, r31 + 2a54: e0 5c subi r30, 0xC0 ; 192 + 2a56: fe 4d sbci r31, 0xDE ; 222 + 2a58: 81 85 ldd r24, Z+9 ; 0x09 + 2a5a: 80 7c andi r24, 0xC0 ; 192 + 2a5c: 80 3c cpi r24, 0xC0 ; 192 + 2a5e: a1 f4 brne .+40 ; 0x2a88 + 2a60: ce 01 movw r24, r28 + 2a62: 88 0f add r24, r24 + 2a64: 99 1f adc r25, r25 + 2a66: 88 0f add r24, r24 + 2a68: 99 1f adc r25, r25 + 2a6a: 88 0f add r24, r24 + 2a6c: 99 1f adc r25, r25 + 2a6e: 88 5b subi r24, 0xB8 ; 184 + 2a70: 9e 4d sbci r25, 0xDE ; 222 + 2a72: 0d dc rcall .-2022 ; 0x228e + 2a74: bc 01 movw r22, r24 + 2a76: c7 01 movw r24, r14 + 2a78: 58 d2 rcall .+1200 ; 0x2f2a <__udivmodhi4> + 2a7a: 89 2b or r24, r25 + 2a7c: 29 f0 breq .+10 ; 0x2a88 + 2a7e: f5 01 movw r30, r10 + 2a80: 80 81 ld r24, Z + 2a82: 8e 7f andi r24, 0xFE ; 254 + 2a84: 80 83 st Z, r24 + 2a86: 14 c0 rjmp .+40 ; 0x2ab0 + 2a88: cc 0f add r28, r28 + 2a8a: dd 1f adc r29, r29 2a8c: cc 0f add r28, r28 2a8e: dd 1f adc r29, r29 - 2a90: cf 0d add r28, r15 - 2a92: d1 1d adc r29, r1 - 2a94: f4 db rcall .-2072 ; 0x227e - 2a96: dc 01 movw r26, r24 - 2a98: fe 01 movw r30, r28 - 2a9a: ee 0f add r30, r30 - 2a9c: ff 1f adc r31, r31 - 2a9e: ee 0f add r30, r30 - 2aa0: ff 1f adc r31, r31 - 2aa2: ee 0f add r30, r30 - 2aa4: ff 1f adc r31, r31 - 2aa6: e8 5b subi r30, 0xB8 ; 184 - 2aa8: fe 4d sbci r31, 0xDE ; 222 - 2aaa: 02 e0 ldi r16, 0x02 ; 2 - 2aac: 05 93 las Z, r16 - 2aae: 8c 91 ld r24, X - 2ab0: 80 ff sbrs r24, 0 - 2ab2: 22 c0 rjmp .+68 ; 0x2af8 - 2ab4: 8e 7f andi r24, 0xFE ; 254 - 2ab6: 8c 93 st X, r24 - 2ab8: 17 96 adiw r26, 0x07 ; 7 - 2aba: ed 91 ld r30, X+ - 2abc: fc 91 ld r31, X - 2abe: 18 97 sbiw r26, 0x08 ; 8 - 2ac0: 30 97 sbiw r30, 0x00 ; 0 - 2ac2: d1 f0 breq .+52 ; 0x2af8 - 2ac4: ff 20 and r15, r15 - 2ac6: 59 f0 breq .+22 ; 0x2ade - 2ac8: cc 0f add r28, r28 - 2aca: dd 1f adc r29, r29 - 2acc: cc 0f add r28, r28 - 2ace: dd 1f adc r29, r29 - 2ad0: cc 0f add r28, r28 - 2ad2: dd 1f adc r29, r29 - 2ad4: c0 5c subi r28, 0xC0 ; 192 - 2ad6: de 4d sbci r29, 0xDE ; 222 - 2ad8: 6e 85 ldd r22, Y+14 ; 0x0e - 2ada: 7f 85 ldd r23, Y+15 ; 0x0f - 2adc: 0a c0 rjmp .+20 ; 0x2af2 - 2ade: cc 0f add r28, r28 - 2ae0: dd 1f adc r29, r29 - 2ae2: cc 0f add r28, r28 - 2ae4: dd 1f adc r29, r29 - 2ae6: cc 0f add r28, r28 - 2ae8: dd 1f adc r29, r29 - 2aea: c0 5c subi r28, 0xC0 ; 192 - 2aec: de 4d sbci r29, 0xDE ; 222 - 2aee: 6a 85 ldd r22, Y+10 ; 0x0a - 2af0: 7b 85 ldd r23, Y+11 ; 0x0b - 2af2: 41 2f mov r20, r17 - 2af4: 81 e0 ldi r24, 0x01 ; 1 - 2af6: 09 95 icall - 2af8: df 91 pop r29 - 2afa: cf 91 pop r28 - 2afc: 1f 91 pop r17 - 2afe: 0f 91 pop r16 - 2b00: ff 90 pop r15 - 2b02: 08 95 ret + 2a90: cc 0f add r28, r28 + 2a92: dd 1f adc r29, r29 + 2a94: c0 5c subi r28, 0xC0 ; 192 + 2a96: de 4d sbci r29, 0xDE ; 222 + 2a98: 1a 86 std Y+10, r1 ; 0x0a + 2a9a: 1b 86 std Y+11, r1 ; 0x0b + 2a9c: 1e 86 std Y+14, r1 ; 0x0e + 2a9e: 1f 86 std Y+15, r1 ; 0x0f + 2aa0: 89 2d mov r24, r9 + 2aa2: a5 dc rcall .-1718 ; 0x23ee + 2aa4: 77 24 eor r7, r7 + 2aa6: 73 94 inc r7 + 2aa8: 03 c0 rjmp .+6 ; 0x2ab0 + 2aaa: 71 2c mov r7, r1 + 2aac: 01 c0 rjmp .+2 ; 0x2ab0 + 2aae: 71 2c mov r7, r1 + 2ab0: 87 2d mov r24, r7 + 2ab2: df 91 pop r29 + 2ab4: cf 91 pop r28 + 2ab6: 1f 91 pop r17 + 2ab8: 0f 91 pop r16 + 2aba: ff 90 pop r15 + 2abc: ef 90 pop r14 + 2abe: df 90 pop r13 + 2ac0: cf 90 pop r12 + 2ac2: bf 90 pop r11 + 2ac4: af 90 pop r10 + 2ac6: 9f 90 pop r9 + 2ac8: 8f 90 pop r8 + 2aca: 7f 90 pop r7 + 2acc: 08 95 ret -00002b04 : - 2b04: cf 93 push r28 - 2b06: c8 2f mov r28, r24 - 2b08: b4 df rcall .-152 ; 0x2a72 - 2b0a: ec 2f mov r30, r28 - 2b0c: ef 70 andi r30, 0x0F ; 15 - 2b0e: f0 e0 ldi r31, 0x00 ; 0 - 2b10: ee 0f add r30, r30 - 2b12: ff 1f adc r31, r31 - 2b14: 8c 2f mov r24, r28 - 2b16: cc 0f add r28, r28 - 2b18: 99 0b sbc r25, r25 - 2b1a: 88 27 eor r24, r24 - 2b1c: 99 0f add r25, r25 - 2b1e: 88 1f adc r24, r24 - 2b20: 99 27 eor r25, r25 - 2b22: e8 0f add r30, r24 - 2b24: f9 1f adc r31, r25 - 2b26: ee 0f add r30, r30 - 2b28: ff 1f adc r31, r31 - 2b2a: ee 0f add r30, r30 - 2b2c: ff 1f adc r31, r31 - 2b2e: ee 0f add r30, r30 - 2b30: ff 1f adc r31, r31 - 2b32: e0 5c subi r30, 0xC0 ; 192 - 2b34: fe 4d sbci r31, 0xDE ; 222 - 2b36: 11 86 std Z+9, r1 ; 0x09 - 2b38: cf 91 pop r28 - 2b3a: 08 95 ret +00002ace : + 2ace: ff 92 push r15 + 2ad0: 0f 93 push r16 + 2ad2: 1f 93 push r17 + 2ad4: cf 93 push r28 + 2ad6: df 93 push r29 + 2ad8: 18 2f mov r17, r24 + 2ada: f8 2e mov r15, r24 + 2adc: ff 1c adc r15, r15 + 2ade: ff 24 eor r15, r15 + 2ae0: ff 1c adc r15, r15 + 2ae2: c8 2f mov r28, r24 + 2ae4: cf 70 andi r28, 0x0F ; 15 + 2ae6: d0 e0 ldi r29, 0x00 ; 0 + 2ae8: cc 0f add r28, r28 + 2aea: dd 1f adc r29, r29 + 2aec: cf 0d add r28, r15 + 2aee: d1 1d adc r29, r1 + 2af0: f4 db rcall .-2072 ; 0x22da + 2af2: dc 01 movw r26, r24 + 2af4: fe 01 movw r30, r28 + 2af6: ee 0f add r30, r30 + 2af8: ff 1f adc r31, r31 + 2afa: ee 0f add r30, r30 + 2afc: ff 1f adc r31, r31 + 2afe: ee 0f add r30, r30 + 2b00: ff 1f adc r31, r31 + 2b02: e8 5b subi r30, 0xB8 ; 184 + 2b04: fe 4d sbci r31, 0xDE ; 222 + 2b06: 02 e0 ldi r16, 0x02 ; 2 + 2b08: 05 93 las Z, r16 + 2b0a: 8c 91 ld r24, X + 2b0c: 80 ff sbrs r24, 0 + 2b0e: 22 c0 rjmp .+68 ; 0x2b54 + 2b10: 8e 7f andi r24, 0xFE ; 254 + 2b12: 8c 93 st X, r24 + 2b14: 17 96 adiw r26, 0x07 ; 7 + 2b16: ed 91 ld r30, X+ + 2b18: fc 91 ld r31, X + 2b1a: 18 97 sbiw r26, 0x08 ; 8 + 2b1c: 30 97 sbiw r30, 0x00 ; 0 + 2b1e: d1 f0 breq .+52 ; 0x2b54 + 2b20: ff 20 and r15, r15 + 2b22: 59 f0 breq .+22 ; 0x2b3a + 2b24: cc 0f add r28, r28 + 2b26: dd 1f adc r29, r29 + 2b28: cc 0f add r28, r28 + 2b2a: dd 1f adc r29, r29 + 2b2c: cc 0f add r28, r28 + 2b2e: dd 1f adc r29, r29 + 2b30: c0 5c subi r28, 0xC0 ; 192 + 2b32: de 4d sbci r29, 0xDE ; 222 + 2b34: 6e 85 ldd r22, Y+14 ; 0x0e + 2b36: 7f 85 ldd r23, Y+15 ; 0x0f + 2b38: 0a c0 rjmp .+20 ; 0x2b4e + 2b3a: cc 0f add r28, r28 + 2b3c: dd 1f adc r29, r29 + 2b3e: cc 0f add r28, r28 + 2b40: dd 1f adc r29, r29 + 2b42: cc 0f add r28, r28 + 2b44: dd 1f adc r29, r29 + 2b46: c0 5c subi r28, 0xC0 ; 192 + 2b48: de 4d sbci r29, 0xDE ; 222 + 2b4a: 6a 85 ldd r22, Y+10 ; 0x0a + 2b4c: 7b 85 ldd r23, Y+11 ; 0x0b + 2b4e: 41 2f mov r20, r17 + 2b50: 81 e0 ldi r24, 0x01 ; 1 + 2b52: 09 95 icall + 2b54: df 91 pop r29 + 2b56: cf 91 pop r28 + 2b58: 1f 91 pop r17 + 2b5a: 0f 91 pop r16 + 2b5c: ff 90 pop r15 + 2b5e: 08 95 ret -00002b3c : - 2b3c: 0f 93 push r16 - 2b3e: e8 2f mov r30, r24 - 2b40: ef 70 andi r30, 0x0F ; 15 - 2b42: f0 e0 ldi r31, 0x00 ; 0 - 2b44: ee 0f add r30, r30 - 2b46: ff 1f adc r31, r31 - 2b48: 28 2f mov r18, r24 - 2b4a: 08 2e mov r0, r24 - 2b4c: 00 0c add r0, r0 - 2b4e: 33 0b sbc r19, r19 - 2b50: 22 27 eor r18, r18 - 2b52: 33 0f add r19, r19 - 2b54: 22 1f adc r18, r18 - 2b56: 33 27 eor r19, r19 - 2b58: e2 0f add r30, r18 - 2b5a: f3 1f adc r31, r19 - 2b5c: df 01 movw r26, r30 - 2b5e: aa 0f add r26, r26 - 2b60: bb 1f adc r27, r27 - 2b62: aa 0f add r26, r26 - 2b64: bb 1f adc r27, r27 - 2b66: aa 0f add r26, r26 - 2b68: bb 1f adc r27, r27 - 2b6a: a0 5c subi r26, 0xC0 ; 192 - 2b6c: be 4d sbci r27, 0xDE ; 222 - 2b6e: 19 96 adiw r26, 0x09 ; 9 - 2b70: 9c 91 ld r25, X - 2b72: 19 97 sbiw r26, 0x09 ; 9 - 2b74: 94 60 ori r25, 0x04 ; 4 - 2b76: 19 96 adiw r26, 0x09 ; 9 - 2b78: 9c 93 st X, r25 - 2b7a: ee 0f add r30, r30 - 2b7c: ff 1f adc r31, r31 - 2b7e: ee 0f add r30, r30 - 2b80: ff 1f adc r31, r31 +00002b60 : + 2b60: cf 93 push r28 + 2b62: c8 2f mov r28, r24 + 2b64: b4 df rcall .-152 ; 0x2ace + 2b66: ec 2f mov r30, r28 + 2b68: ef 70 andi r30, 0x0F ; 15 + 2b6a: f0 e0 ldi r31, 0x00 ; 0 + 2b6c: ee 0f add r30, r30 + 2b6e: ff 1f adc r31, r31 + 2b70: 8c 2f mov r24, r28 + 2b72: cc 0f add r28, r28 + 2b74: 99 0b sbc r25, r25 + 2b76: 88 27 eor r24, r24 + 2b78: 99 0f add r25, r25 + 2b7a: 88 1f adc r24, r24 + 2b7c: 99 27 eor r25, r25 + 2b7e: e8 0f add r30, r24 + 2b80: f9 1f adc r31, r25 2b82: ee 0f add r30, r30 2b84: ff 1f adc r31, r31 - 2b86: e8 5b subi r30, 0xB8 ; 184 - 2b88: fe 4d sbci r31, 0xDE ; 222 - 2b8a: 01 e0 ldi r16, 0x01 ; 1 - 2b8c: 06 93 lac Z, r16 - 2b8e: 71 df rcall .-286 ; 0x2a72 - 2b90: 81 e0 ldi r24, 0x01 ; 1 - 2b92: 0f 91 pop r16 - 2b94: 08 95 ret + 2b86: ee 0f add r30, r30 + 2b88: ff 1f adc r31, r31 + 2b8a: ee 0f add r30, r30 + 2b8c: ff 1f adc r31, r31 + 2b8e: e0 5c subi r30, 0xC0 ; 192 + 2b90: fe 4d sbci r31, 0xDE ; 222 + 2b92: 11 86 std Z+9, r1 ; 0x09 + 2b94: cf 91 pop r28 + 2b96: 08 95 ret -00002b96 <__vector_125>: +00002b98 : + 2b98: 0f 93 push r16 + 2b9a: e8 2f mov r30, r24 + 2b9c: ef 70 andi r30, 0x0F ; 15 + 2b9e: f0 e0 ldi r31, 0x00 ; 0 + 2ba0: ee 0f add r30, r30 + 2ba2: ff 1f adc r31, r31 + 2ba4: 28 2f mov r18, r24 + 2ba6: 08 2e mov r0, r24 + 2ba8: 00 0c add r0, r0 + 2baa: 33 0b sbc r19, r19 + 2bac: 22 27 eor r18, r18 + 2bae: 33 0f add r19, r19 + 2bb0: 22 1f adc r18, r18 + 2bb2: 33 27 eor r19, r19 + 2bb4: e2 0f add r30, r18 + 2bb6: f3 1f adc r31, r19 + 2bb8: df 01 movw r26, r30 + 2bba: aa 0f add r26, r26 + 2bbc: bb 1f adc r27, r27 + 2bbe: aa 0f add r26, r26 + 2bc0: bb 1f adc r27, r27 + 2bc2: aa 0f add r26, r26 + 2bc4: bb 1f adc r27, r27 + 2bc6: a0 5c subi r26, 0xC0 ; 192 + 2bc8: be 4d sbci r27, 0xDE ; 222 + 2bca: 19 96 adiw r26, 0x09 ; 9 + 2bcc: 9c 91 ld r25, X + 2bce: 19 97 sbiw r26, 0x09 ; 9 + 2bd0: 94 60 ori r25, 0x04 ; 4 + 2bd2: 19 96 adiw r26, 0x09 ; 9 + 2bd4: 9c 93 st X, r25 + 2bd6: ee 0f add r30, r30 + 2bd8: ff 1f adc r31, r31 + 2bda: ee 0f add r30, r30 + 2bdc: ff 1f adc r31, r31 + 2bde: ee 0f add r30, r30 + 2be0: ff 1f adc r31, r31 + 2be2: e8 5b subi r30, 0xB8 ; 184 + 2be4: fe 4d sbci r31, 0xDE ; 222 + 2be6: 01 e0 ldi r16, 0x01 ; 1 + 2be8: 06 93 lac Z, r16 + 2bea: 71 df rcall .-286 ; 0x2ace + 2bec: 81 e0 ldi r24, 0x01 ; 1 + 2bee: 0f 91 pop r16 + 2bf0: 08 95 ret + +00002bf2 <__vector_125>: * USB bus event interrupt includes : * - USB line events SOF, reset, suspend, resume, wakeup * - endpoint control errors underflow, overflow, stall */ ISR(USB_BUSEVENT_vect) { - 2b96: 1f 92 push r1 - 2b98: 0f 92 push r0 - 2b9a: 0f b6 in r0, 0x3f ; 63 - 2b9c: 0f 92 push r0 - 2b9e: 11 24 eor r1, r1 - 2ba0: 0f 93 push r16 - 2ba2: 2f 93 push r18 - 2ba4: 3f 93 push r19 - 2ba6: 4f 93 push r20 - 2ba8: 5f 93 push r21 - 2baa: 6f 93 push r22 - 2bac: 7f 93 push r23 - 2bae: 8f 93 push r24 - 2bb0: 9f 93 push r25 - 2bb2: af 93 push r26 - 2bb4: bf 93 push r27 - 2bb6: ef 93 push r30 - 2bb8: ff 93 push r31 + 2bf2: 1f 92 push r1 + 2bf4: 0f 92 push r0 + 2bf6: 0f b6 in r0, 0x3f ; 63 + 2bf8: 0f 92 push r0 + 2bfa: 11 24 eor r1, r1 + 2bfc: 0f 93 push r16 + 2bfe: 2f 93 push r18 + 2c00: 3f 93 push r19 + 2c02: 4f 93 push r20 + 2c04: 5f 93 push r21 + 2c06: 6f 93 push r22 + 2c08: 7f 93 push r23 + 2c0a: 8f 93 push r24 + 2c0c: 9f 93 push r25 + 2c0e: af 93 push r26 + 2c10: bf 93 push r27 + 2c12: ef 93 push r30 + 2c14: ff 93 push r31 if (udd_is_start_of_frame_event()) { - 2bba: 80 91 cb 04 lds r24, 0x04CB ; 0x8004cb <__TEXT_REGION_LENGTH__+0x7004cb> - 2bbe: 88 23 and r24, r24 - 2bc0: 44 f4 brge .+16 ; 0x2bd2 <__vector_125+0x3c> + 2c16: 80 91 cb 04 lds r24, 0x04CB ; 0x8004cb <__TEXT_REGION_LENGTH__+0x7004cb> + 2c1a: 88 23 and r24, r24 + 2c1c: 44 f4 brge .+16 ; 0x2c2e <__vector_125+0x3c> udd_ack_start_of_frame_event(); - 2bc2: 80 e8 ldi r24, 0x80 ; 128 - 2bc4: 80 93 ca 04 sts 0x04CA, r24 ; 0x8004ca <__TEXT_REGION_LENGTH__+0x7004ca> + 2c1e: 80 e8 ldi r24, 0x80 ; 128 + 2c20: 80 93 ca 04 sts 0x04CA, r24 ; 0x8004ca <__TEXT_REGION_LENGTH__+0x7004ca> udc_sof_notify(); - 2bc8: 0e 94 07 0c call 0x180e ; 0x180e + 2c24: 0e 94 32 0c call 0x1864 ; 0x1864 #ifdef UDC_SOF_EVENT UDC_SOF_EVENT(); - 2bcc: 0e 94 44 04 call 0x888 ; 0x888 + 2c28: 0e 94 35 04 call 0x86a ; 0x86a #endif goto udd_interrupt_bus_event_end; - 2bd0: 82 c0 rjmp .+260 ; 0x2cd6 <__vector_125+0x140> + 2c2c: 82 c0 rjmp .+260 ; 0x2d32 <__vector_125+0x140> } static bool udd_ctrl_interrupt_error(void) { // Underflow only managed for control endpoint if (udd_is_underflow_event()) { - 2bd2: 80 91 cb 04 lds r24, 0x04CB ; 0x8004cb <__TEXT_REGION_LENGTH__+0x7004cb> - 2bd6: 82 ff sbrs r24, 2 - 2bd8: 20 c0 rjmp .+64 ; 0x2c1a <__vector_125+0x84> + 2c2e: 80 91 cb 04 lds r24, 0x04CB ; 0x8004cb <__TEXT_REGION_LENGTH__+0x7004cb> + 2c32: 82 ff sbrs r24, 2 + 2c34: 20 c0 rjmp .+64 ; 0x2c76 <__vector_125+0x84> udd_ack_underflow_event(); - 2bda: 84 e0 ldi r24, 0x04 ; 4 - 2bdc: 80 93 ca 04 sts 0x04CA, r24 ; 0x8004ca <__TEXT_REGION_LENGTH__+0x7004ca> + 2c36: 84 e0 ldi r24, 0x04 ; 4 + 2c38: 80 93 ca 04 sts 0x04CA, r24 ; 0x8004ca <__TEXT_REGION_LENGTH__+0x7004ca> if (udd_control_in_underflow()) { - 2be0: 80 91 50 21 lds r24, 0x2150 ; 0x802150 - 2be4: 86 ff sbrs r24, 6 - 2be6: 77 c0 rjmp .+238 ; 0x2cd6 <__vector_125+0x140> + 2c3c: 80 91 50 21 lds r24, 0x2150 ; 0x802150 + 2c40: 86 ff sbrs r24, 6 + 2c42: 77 c0 rjmp .+238 ; 0x2d32 <__vector_125+0x140> udd_control_out_clear_NACK0(); } static void udd_ctrl_underflow(void) { if (udd_is_tc_event() || udd_ctrl_interrupt_tc_setup()) { - 2be8: 80 91 cc 04 lds r24, 0x04CC ; 0x8004cc <__TEXT_REGION_LENGTH__+0x7004cc> - 2bec: 81 fd sbrc r24, 1 - 2bee: 73 c0 rjmp .+230 ; 0x2cd6 <__vector_125+0x140> - 2bf0: 61 db rcall .-2366 ; 0x22b4 - 2bf2: 81 11 cpse r24, r1 - 2bf4: 70 c0 rjmp .+224 ; 0x2cd6 <__vector_125+0x140> + 2c44: 80 91 cc 04 lds r24, 0x04CC ; 0x8004cc <__TEXT_REGION_LENGTH__+0x7004cc> + 2c48: 81 fd sbrc r24, 1 + 2c4a: 73 c0 rjmp .+230 ; 0x2d32 <__vector_125+0x140> + 2c4c: 61 db rcall .-2366 ; 0x2310 + 2c4e: 81 11 cpse r24, r1 + 2c50: 70 c0 rjmp .+224 ; 0x2d32 <__vector_125+0x140> return; // underflow ignored if a transfer complete has been no processed } if (UDD_EPCTRL_DATA_OUT == udd_ep_control_state) { - 2bf6: 80 91 3f 21 lds r24, 0x213F ; 0x80213f - 2bfa: 81 30 cpi r24, 0x01 ; 1 - 2bfc: 11 f4 brne .+4 ; 0x2c02 <__vector_125+0x6c> + 2c52: 80 91 3f 21 lds r24, 0x213F ; 0x80213f + 2c56: 81 30 cpi r24, 0x01 ; 1 + 2c58: 11 f4 brne .+4 ; 0x2c5e <__vector_125+0x6c> // Host want to stop OUT transaction // then stop to wait OUT data phase and wait IN ZLP handshake udd_ctrl_send_zlp_in(); - 2bfe: 97 da rcall .-2770 ; 0x212e - 2c00: 6a c0 rjmp .+212 ; 0x2cd6 <__vector_125+0x140> + 2c5a: 97 da rcall .-2770 ; 0x218a + 2c5c: 6a c0 rjmp .+212 ; 0x2d32 <__vector_125+0x140> } else if (UDD_EPCTRL_HANDSHAKE_WAIT_OUT_ZLP == udd_ep_control_state) { - 2c02: 84 30 cpi r24, 0x04 ; 4 - 2c04: 09 f0 breq .+2 ; 0x2c08 <__vector_125+0x72> - 2c06: 67 c0 rjmp .+206 ; 0x2cd6 <__vector_125+0x140> + 2c5e: 84 30 cpi r24, 0x04 ; 4 + 2c60: 09 f0 breq .+2 ; 0x2c64 <__vector_125+0x72> + 2c62: 67 c0 rjmp .+206 ; 0x2d32 <__vector_125+0x140> // A OUT handshake is waiting by device, // but host want extra IN data then stall extra IN data and following status stage udd_control_in_enable_stall(); - 2c08: e1 e5 ldi r30, 0x51 ; 81 - 2c0a: f1 e2 ldi r31, 0x21 ; 33 - 2c0c: 04 e0 ldi r16, 0x04 ; 4 - 2c0e: 05 93 las Z, r16 + 2c64: e1 e5 ldi r30, 0x51 ; 81 + 2c66: f1 e2 ldi r31, 0x21 ; 33 + 2c68: 04 e0 ldi r16, 0x04 ; 4 + 2c6a: 05 93 las Z, r16 udd_control_out_enable_stall(); - 2c10: e9 e4 ldi r30, 0x49 ; 73 - 2c12: f1 e2 ldi r31, 0x21 ; 33 - 2c14: 04 e0 ldi r16, 0x04 ; 4 - 2c16: 05 93 las Z, r16 - 2c18: 5e c0 rjmp .+188 ; 0x2cd6 <__vector_125+0x140> + 2c6c: e9 e4 ldi r30, 0x49 ; 73 + 2c6e: f1 e2 ldi r31, 0x21 ; 33 + 2c70: 04 e0 ldi r16, 0x04 ; 4 + 2c72: 05 93 las Z, r16 + 2c74: 5e c0 rjmp .+188 ; 0x2d32 <__vector_125+0x140> udd_ctrl_underflow(); } return true; } // Overflow only managed for control endpoint if (udd_is_overflow_event()) { - 2c1a: 80 91 cb 04 lds r24, 0x04CB ; 0x8004cb <__TEXT_REGION_LENGTH__+0x7004cb> - 2c1e: 81 ff sbrs r24, 1 - 2c20: 55 c0 rjmp .+170 ; 0x2ccc <__vector_125+0x136> + 2c76: 80 91 cb 04 lds r24, 0x04CB ; 0x8004cb <__TEXT_REGION_LENGTH__+0x7004cb> + 2c7a: 81 ff sbrs r24, 1 + 2c7c: 55 c0 rjmp .+170 ; 0x2d28 <__vector_125+0x136> udd_ack_overflow_event(); - 2c22: 82 e0 ldi r24, 0x02 ; 2 - 2c24: 80 93 ca 04 sts 0x04CA, r24 ; 0x8004ca <__TEXT_REGION_LENGTH__+0x7004ca> + 2c7e: 82 e0 ldi r24, 0x02 ; 2 + 2c80: 80 93 ca 04 sts 0x04CA, r24 ; 0x8004ca <__TEXT_REGION_LENGTH__+0x7004ca> if (udd_control_out_overflow()) { - 2c28: 80 91 48 21 lds r24, 0x2148 ; 0x802148 - 2c2c: 86 ff sbrs r24, 6 - 2c2e: 53 c0 rjmp .+166 ; 0x2cd6 <__vector_125+0x140> + 2c84: 80 91 48 21 lds r24, 0x2148 ; 0x802148 + 2c88: 86 ff sbrs r24, 6 + 2c8a: 53 c0 rjmp .+166 ; 0x2d32 <__vector_125+0x140> } } static void udd_ctrl_overflow(void) { if (udd_is_tc_event() || udd_ctrl_interrupt_tc_setup()) { - 2c30: 80 91 cc 04 lds r24, 0x04CC ; 0x8004cc <__TEXT_REGION_LENGTH__+0x7004cc> - 2c34: 81 fd sbrc r24, 1 - 2c36: 4f c0 rjmp .+158 ; 0x2cd6 <__vector_125+0x140> - 2c38: 3d db rcall .-2438 ; 0x22b4 - 2c3a: 81 11 cpse r24, r1 - 2c3c: 4c c0 rjmp .+152 ; 0x2cd6 <__vector_125+0x140> + 2c8c: 80 91 cc 04 lds r24, 0x04CC ; 0x8004cc <__TEXT_REGION_LENGTH__+0x7004cc> + 2c90: 81 fd sbrc r24, 1 + 2c92: 4f c0 rjmp .+158 ; 0x2d32 <__vector_125+0x140> + 2c94: 3d db rcall .-2438 ; 0x2310 + 2c96: 81 11 cpse r24, r1 + 2c98: 4c c0 rjmp .+152 ; 0x2d32 <__vector_125+0x140> return; // overflow ignored if a transfer complete has been no processed } if (UDD_EPCTRL_DATA_IN == udd_ep_control_state) { - 2c3e: 80 91 3f 21 lds r24, 0x213F ; 0x80213f - 2c42: 82 30 cpi r24, 0x02 ; 2 - 2c44: 41 f4 brne .+16 ; 0x2c56 <__vector_125+0xc0> + 2c9a: 80 91 3f 21 lds r24, 0x213F ; 0x80213f + 2c9e: 82 30 cpi r24, 0x02 ; 2 + 2ca0: 41 f4 brne .+16 ; 0x2cb2 <__vector_125+0xc0> udd_control_in_clear_NACK0(); } static void udd_ctrl_send_zlp_out(void) { udd_ep_control_state = UDD_EPCTRL_HANDSHAKE_WAIT_OUT_ZLP; - 2c46: 84 e0 ldi r24, 0x04 ; 4 - 2c48: 80 93 3f 21 sts 0x213F, r24 ; 0x80213f + 2ca2: 84 e0 ldi r24, 0x04 ; 4 + 2ca4: 80 93 3f 21 sts 0x213F, r24 ; 0x80213f // Valid reception of OUT packet on control endpoint udd_control_out_clear_NACK0(); - 2c4c: e8 e4 ldi r30, 0x48 ; 72 - 2c4e: f1 e2 ldi r31, 0x21 ; 33 - 2c50: 02 e0 ldi r16, 0x02 ; 2 - 2c52: 06 93 lac Z, r16 - 2c54: 40 c0 rjmp .+128 ; 0x2cd6 <__vector_125+0x140> + 2ca8: e8 e4 ldi r30, 0x48 ; 72 + 2caa: f1 e2 ldi r31, 0x21 ; 33 + 2cac: 02 e0 ldi r16, 0x02 ; 2 + 2cae: 06 93 lac Z, r16 + 2cb0: 40 c0 rjmp .+128 ; 0x2d32 <__vector_125+0x140> } if (UDD_EPCTRL_DATA_IN == udd_ep_control_state) { // Host want to stop IN transaction // then stop to wait IN data phase and wait OUT ZLP handshake udd_ctrl_send_zlp_out(); } else if (UDD_EPCTRL_HANDSHAKE_WAIT_IN_ZLP == udd_ep_control_state) { - 2c56: 83 30 cpi r24, 0x03 ; 3 - 2c58: 09 f0 breq .+2 ; 0x2c5c <__vector_125+0xc6> - 2c5a: 3d c0 rjmp .+122 ; 0x2cd6 <__vector_125+0x140> + 2cb2: 83 30 cpi r24, 0x03 ; 3 + 2cb4: 09 f0 breq .+2 ; 0x2cb8 <__vector_125+0xc6> + 2cb6: 3d c0 rjmp .+122 ; 0x2d32 <__vector_125+0x140> // A IN handshake is waiting by device, // but host want extra OUT data then stall extra OUT data and following status stage udd_control_in_enable_stall(); - 2c5c: e1 e5 ldi r30, 0x51 ; 81 - 2c5e: f1 e2 ldi r31, 0x21 ; 33 - 2c60: 04 e0 ldi r16, 0x04 ; 4 - 2c62: 05 93 las Z, r16 + 2cb8: e1 e5 ldi r30, 0x51 ; 81 + 2cba: f1 e2 ldi r31, 0x21 ; 33 + 2cbc: 04 e0 ldi r16, 0x04 ; 4 + 2cbe: 05 93 las Z, r16 udd_control_out_enable_stall(); - 2c64: e9 e4 ldi r30, 0x49 ; 73 - 2c66: f1 e2 ldi r31, 0x21 ; 33 - 2c68: 04 e0 ldi r16, 0x04 ; 4 - 2c6a: 05 93 las Z, r16 - 2c6c: 34 c0 rjmp .+104 ; 0x2cd6 <__vector_125+0x140> + 2cc0: e9 e4 ldi r30, 0x49 ; 73 + 2cc2: f1 e2 ldi r31, 0x21 ; 33 + 2cc4: 04 e0 ldi r16, 0x04 ; 4 + 2cc6: 05 93 las Z, r16 + 2cc8: 34 c0 rjmp .+104 ; 0x2d32 <__vector_125+0x140> if (udd_ctrl_interrupt_error()) { goto udd_interrupt_bus_event_end; } if (udd_is_reset_event()) { udd_ack_reset_event(); - 2c6e: 80 e1 ldi r24, 0x10 ; 16 - 2c70: 80 93 ca 04 sts 0x04CA, r24 ; 0x8004ca <__TEXT_REGION_LENGTH__+0x7004ca> + 2cca: 80 e1 ldi r24, 0x10 ; 16 + 2ccc: 80 93 ca 04 sts 0x04CA, r24 ; 0x8004ca <__TEXT_REGION_LENGTH__+0x7004ca> for (i = 1; i < USB_DEVICE_MAX_EP; i++) { udd_ep_abort(i); udd_ep_abort(i | USB_EP_DIR_IN); } #endif udc_reset(); - 2c74: 0e 94 e2 0b call 0x17c4 ; 0x17c4 + 2cd0: 0e 94 0d 0c call 0x181a ; 0x181a // Reset USB address to 0 udd_set_device_address(0); - 2c78: 10 92 c3 04 sts 0x04C3, r1 ; 0x8004c3 <__TEXT_REGION_LENGTH__+0x7004c3> + 2cd4: 10 92 c3 04 sts 0x04C3, r1 ; 0x8004c3 <__TEXT_REGION_LENGTH__+0x7004c3> #endif } // Enable endpoint ep_ctrl = udd_ep_get_ctrl(ep); udd_endpoint_disable(ep_ctrl); - 2c7c: e0 e4 ldi r30, 0x40 ; 64 - 2c7e: f1 e2 ldi r31, 0x21 ; 33 - 2c80: 11 86 std Z+9, r1 ; 0x09 + 2cd8: e0 e4 ldi r30, 0x40 ; 64 + 2cda: f1 e2 ldi r31, 0x21 ; 33 + 2cdc: 11 86 std Z+9, r1 ; 0x09 udd_endpoint_clear_status(ep_ctrl); - 2c82: 96 e0 ldi r25, 0x06 ; 6 - 2c84: 90 87 std Z+8, r25 ; 0x08 + 2cde: 96 e0 ldi r25, 0x06 ; 6 + 2ce0: 90 87 std Z+8, r25 ; 0x08 udd_endpoint_set_control(ep_ctrl, (uint8_t) type | (uint8_t) size); - 2c86: 83 e4 ldi r24, 0x43 ; 67 - 2c88: 81 87 std Z+9, r24 ; 0x09 + 2ce2: 83 e4 ldi r24, 0x43 ; 67 + 2ce4: 81 87 std Z+9, r24 ; 0x09 #endif } // Enable endpoint ep_ctrl = udd_ep_get_ctrl(ep); udd_endpoint_disable(ep_ctrl); - 2c8a: 11 8a std Z+17, r1 ; 0x11 + 2ce6: 11 8a std Z+17, r1 ; 0x11 udd_endpoint_clear_status(ep_ctrl); - 2c8c: 90 8b std Z+16, r25 ; 0x10 + 2ce8: 90 8b std Z+16, r25 ; 0x10 udd_endpoint_set_control(ep_ctrl, (uint8_t) type | (uint8_t) size); - 2c8e: 81 8b std Z+17, r24 ; 0x11 + 2cea: 81 8b std Z+17, r24 ; 0x11 udd_set_device_address(0); // Alloc and configure control endpoint udd_ep_init(0, USB_EP_TYPE_CONTROL, USB_DEVICE_EP_CTRL_SIZE); udd_ep_init(0 | USB_EP_DIR_IN, USB_EP_TYPE_CONTROL, USB_DEVICE_EP_CTRL_SIZE); udd_control_out_set_buf(&udd_ctrl_buffer); - 2c90: 8b ef ldi r24, 0xFB ; 251 - 2c92: 90 e2 ldi r25, 0x20 ; 32 - 2c94: 84 87 std Z+12, r24 ; 0x0c - 2c96: 95 87 std Z+13, r25 ; 0x0d + 2cec: 8b ef ldi r24, 0xFB ; 251 + 2cee: 90 e2 ldi r25, 0x20 ; 32 + 2cf0: 84 87 std Z+12, r24 ; 0x0c + 2cf2: 95 87 std Z+13, r25 ; 0x0d // Reset endpoint control management udd_ctrl_init(); - 2c98: 15 da rcall .-3030 ; 0x20c4 + 2cf4: 15 da rcall .-3030 ; 0x2120 goto udd_interrupt_bus_event_end; - 2c9a: 1d c0 rjmp .+58 ; 0x2cd6 <__vector_125+0x140> + 2cf6: 1d c0 rjmp .+58 ; 0x2d32 <__vector_125+0x140> } if (udd_is_suspend_event()) { - 2c9c: 80 91 cb 04 lds r24, 0x04CB ; 0x8004cb <__TEXT_REGION_LENGTH__+0x7004cb> - 2ca0: 86 ff sbrs r24, 6 - 2ca2: 08 c0 rjmp .+16 ; 0x2cb4 <__vector_125+0x11e> + 2cf8: 80 91 cb 04 lds r24, 0x04CB ; 0x8004cb <__TEXT_REGION_LENGTH__+0x7004cb> + 2cfc: 86 ff sbrs r24, 6 + 2cfe: 08 c0 rjmp .+16 ; 0x2d10 <__vector_125+0x11e> udd_ack_suspend_event(); - 2ca4: 80 e4 ldi r24, 0x40 ; 64 - 2ca6: 80 93 ca 04 sts 0x04CA, r24 ; 0x8004ca <__TEXT_REGION_LENGTH__+0x7004ca> + 2d00: 80 e4 ldi r24, 0x40 ; 64 + 2d02: 80 93 ca 04 sts 0x04CA, r24 ; 0x8004ca <__TEXT_REGION_LENGTH__+0x7004ca> udd_sleep_mode(false); // Enter in SUSPEND mode - 2caa: 80 e0 ldi r24, 0x00 ; 0 - 2cac: e2 d9 rcall .-3132 ; 0x2072 + 2d06: 80 e0 ldi r24, 0x00 ; 0 + 2d08: e2 d9 rcall .-3132 ; 0x20ce #ifdef UDC_SUSPEND_EVENT UDC_SUSPEND_EVENT(); - 2cae: 0e 94 42 04 call 0x884 ; 0x884 + 2d0a: 0e 94 33 04 call 0x866 ; 0x866 #endif goto udd_interrupt_bus_event_end; - 2cb2: 11 c0 rjmp .+34 ; 0x2cd6 <__vector_125+0x140> + 2d0e: 11 c0 rjmp .+34 ; 0x2d32 <__vector_125+0x140> } if (udd_is_resume_event()) { - 2cb4: 80 91 cb 04 lds r24, 0x04CB ; 0x8004cb <__TEXT_REGION_LENGTH__+0x7004cb> - 2cb8: 85 ff sbrs r24, 5 - 2cba: 0d c0 rjmp .+26 ; 0x2cd6 <__vector_125+0x140> + 2d10: 80 91 cb 04 lds r24, 0x04CB ; 0x8004cb <__TEXT_REGION_LENGTH__+0x7004cb> + 2d14: 85 ff sbrs r24, 5 + 2d16: 0d c0 rjmp .+26 ; 0x2d32 <__vector_125+0x140> udd_ack_resume_event(); - 2cbc: 80 e2 ldi r24, 0x20 ; 32 - 2cbe: 80 93 ca 04 sts 0x04CA, r24 ; 0x8004ca <__TEXT_REGION_LENGTH__+0x7004ca> + 2d18: 80 e2 ldi r24, 0x20 ; 32 + 2d1a: 80 93 ca 04 sts 0x04CA, r24 ; 0x8004ca <__TEXT_REGION_LENGTH__+0x7004ca> udd_sleep_mode(true); // Enter in power reduction mode - 2cc2: 81 e0 ldi r24, 0x01 ; 1 - 2cc4: d6 d9 rcall .-3156 ; 0x2072 + 2d1e: 81 e0 ldi r24, 0x01 ; 1 + 2d20: d6 d9 rcall .-3156 ; 0x20ce #ifdef UDC_RESUME_EVENT UDC_RESUME_EVENT(); - 2cc6: 0e 94 43 04 call 0x886 ; 0x886 + 2d22: 0e 94 34 04 call 0x868 ; 0x868 #endif goto udd_interrupt_bus_event_end; - 2cca: 05 c0 rjmp .+10 ; 0x2cd6 <__vector_125+0x140> + 2d26: 05 c0 rjmp .+10 ; 0x2d32 <__vector_125+0x140> } if (udd_ctrl_interrupt_error()) { goto udd_interrupt_bus_event_end; } if (udd_is_reset_event()) { - 2ccc: 80 91 cb 04 lds r24, 0x04CB ; 0x8004cb <__TEXT_REGION_LENGTH__+0x7004cb> - 2cd0: 84 ff sbrs r24, 4 - 2cd2: e4 cf rjmp .-56 ; 0x2c9c <__vector_125+0x106> - 2cd4: cc cf rjmp .-104 ; 0x2c6e <__vector_125+0xd8> + 2d28: 80 91 cb 04 lds r24, 0x04CB ; 0x8004cb <__TEXT_REGION_LENGTH__+0x7004cb> + 2d2c: 84 ff sbrs r24, 4 + 2d2e: e4 cf rjmp .-56 ; 0x2cf8 <__vector_125+0x106> + 2d30: cc cf rjmp .-104 ; 0x2cca <__vector_125+0xd8> goto udd_interrupt_bus_event_end; } udd_interrupt_bus_event_end: return; } - 2cd6: ff 91 pop r31 - 2cd8: ef 91 pop r30 - 2cda: bf 91 pop r27 - 2cdc: af 91 pop r26 - 2cde: 9f 91 pop r25 - 2ce0: 8f 91 pop r24 - 2ce2: 7f 91 pop r23 - 2ce4: 6f 91 pop r22 - 2ce6: 5f 91 pop r21 - 2ce8: 4f 91 pop r20 - 2cea: 3f 91 pop r19 - 2cec: 2f 91 pop r18 - 2cee: 0f 91 pop r16 - 2cf0: 0f 90 pop r0 - 2cf2: 0f be out 0x3f, r0 ; 63 - 2cf4: 0f 90 pop r0 - 2cf6: 1f 90 pop r1 - 2cf8: 18 95 reti + 2d32: ff 91 pop r31 + 2d34: ef 91 pop r30 + 2d36: bf 91 pop r27 + 2d38: af 91 pop r26 + 2d3a: 9f 91 pop r25 + 2d3c: 8f 91 pop r24 + 2d3e: 7f 91 pop r23 + 2d40: 6f 91 pop r22 + 2d42: 5f 91 pop r21 + 2d44: 4f 91 pop r20 + 2d46: 3f 91 pop r19 + 2d48: 2f 91 pop r18 + 2d4a: 0f 91 pop r16 + 2d4c: 0f 90 pop r0 + 2d4e: 0f be out 0x3f, r0 ; 63 + 2d50: 0f 90 pop r0 + 2d52: 1f 90 pop r1 + 2d54: 18 95 reti -00002cfa <__vector_126>: +00002d56 <__vector_126>: * \brief Function called by USB transfer complete interrupt * * USB transfer complete interrupt includes events about endpoint transfer on all endpoints. */ ISR(USB_TRNCOMPL_vect) { - 2cfa: 1f 92 push r1 - 2cfc: 0f 92 push r0 - 2cfe: 0f b6 in r0, 0x3f ; 63 - 2d00: 0f 92 push r0 - 2d02: 11 24 eor r1, r1 - 2d04: 0f 93 push r16 - 2d06: 1f 93 push r17 - 2d08: 2f 93 push r18 - 2d0a: 3f 93 push r19 - 2d0c: 4f 93 push r20 - 2d0e: 5f 93 push r21 - 2d10: 6f 93 push r22 - 2d12: 7f 93 push r23 - 2d14: 8f 93 push r24 - 2d16: 9f 93 push r25 - 2d18: af 93 push r26 - 2d1a: bf 93 push r27 - 2d1c: cf 93 push r28 - 2d1e: df 93 push r29 - 2d20: ef 93 push r30 - 2d22: ff 93 push r31 + 2d56: 1f 92 push r1 + 2d58: 0f 92 push r0 + 2d5a: 0f b6 in r0, 0x3f ; 63 + 2d5c: 0f 92 push r0 + 2d5e: 11 24 eor r1, r1 + 2d60: 0f 93 push r16 + 2d62: 1f 93 push r17 + 2d64: 2f 93 push r18 + 2d66: 3f 93 push r19 + 2d68: 4f 93 push r20 + 2d6a: 5f 93 push r21 + 2d6c: 6f 93 push r22 + 2d6e: 7f 93 push r23 + 2d70: 8f 93 push r24 + 2d72: 9f 93 push r25 + 2d74: af 93 push r26 + 2d76: bf 93 push r27 + 2d78: cf 93 push r28 + 2d7a: df 93 push r29 + 2d7c: ef 93 push r30 + 2d7e: ff 93 push r31 int8_t rp; UDD_EP_t *ep_ctrl; udd_ep_id_t ep; #endif if (!udd_is_tc_event()) { - 2d24: 80 91 cc 04 lds r24, 0x04CC ; 0x8004cc <__TEXT_REGION_LENGTH__+0x7004cc> - 2d28: 81 fd sbrc r24, 1 - 2d2a: 03 c0 rjmp .+6 ; 0x2d32 <__vector_126+0x38> + 2d80: 80 91 cc 04 lds r24, 0x04CC ; 0x8004cc <__TEXT_REGION_LENGTH__+0x7004cc> + 2d84: 81 fd sbrc r24, 1 + 2d86: 03 c0 rjmp .+6 ; 0x2d8e <__vector_126+0x38> // If no other transfer complete // then check reception of SETUP packet on control endpoint if (udd_ctrl_interrupt_tc_setup()) { - 2d2c: c3 da rcall .-2682 ; 0x22b4 - 2d2e: 81 11 cpse r24, r1 - 2d30: b9 c0 rjmp .+370 ; 0x2ea4 <__vector_126+0x1aa> + 2d88: c3 da rcall .-2682 ; 0x2310 + 2d8a: 81 11 cpse r24, r1 + 2d8c: b9 c0 rjmp .+370 ; 0x2f00 <__vector_126+0x1aa> goto udd_interrupt_tc_end; } Assert(false); } // Check IN/OUT transfer complete on all endpoints udd_ack_tc_event(); - 2d32: 82 e0 ldi r24, 0x02 ; 2 - 2d34: 80 93 cc 04 sts 0x04CC, r24 ; 0x8004cc <__TEXT_REGION_LENGTH__+0x7004cc> + 2d8e: 82 e0 ldi r24, 0x02 ; 2 + 2d90: 80 93 cc 04 sts 0x04CC, r24 ; 0x8004cc <__TEXT_REGION_LENGTH__+0x7004cc> #if (0!=USB_DEVICE_MAX_EP) //** Decode TC FIFO // Compute ep addr rp = udd_get_fifo_rp(); - 2d38: 80 91 c5 04 lds r24, 0x04C5 ; 0x8004c5 <__TEXT_REGION_LENGTH__+0x7004c5> + 2d94: 80 91 c5 04 lds r24, 0x04C5 ; 0x8004c5 <__TEXT_REGION_LENGTH__+0x7004c5> i_fifo = 2 * (1 + ~rp); - 2d3c: 81 95 neg r24 - 2d3e: 88 0f add r24, r24 + 2d98: 81 95 neg r24 + 2d9a: 88 0f add r24, r24 ad = ((uint16_t) udd_sram.ep_ctrl) - i_fifo; - 2d40: e8 e4 ldi r30, 0x48 ; 72 - 2d42: f1 e2 ldi r31, 0x21 ; 33 - 2d44: e8 1b sub r30, r24 - 2d46: f1 09 sbc r31, r1 + 2d9c: e8 e4 ldi r30, 0x48 ; 72 + 2d9e: f1 e2 ldi r31, 0x21 ; 33 + 2da0: e8 1b sub r30, r24 + 2da2: f1 09 sbc r31, r1 p_ad = (uint16_t *) ad; // Compute ep ep_index = (((uint16_t) * p_ad - ((uint16_t) udd_sram.ep_ctrl)) >> 3); - 2d48: 20 81 ld r18, Z - 2d4a: 31 81 ldd r19, Z+1 ; 0x01 - 2d4c: 28 54 subi r18, 0x48 ; 72 - 2d4e: 31 42 sbci r19, 0x21 ; 33 - 2d50: 36 95 lsr r19 - 2d52: 27 95 ror r18 - 2d54: 36 95 lsr r19 - 2d56: 27 95 ror r18 - 2d58: 36 95 lsr r19 - 2d5a: 27 95 ror r18 + 2da4: 20 81 ld r18, Z + 2da6: 31 81 ldd r19, Z+1 ; 0x01 + 2da8: 28 54 subi r18, 0x48 ; 72 + 2daa: 31 42 sbci r19, 0x21 ; 33 + 2dac: 36 95 lsr r19 + 2dae: 27 95 ror r18 + 2db0: 36 95 lsr r19 + 2db2: 27 95 ror r18 + 2db4: 36 95 lsr r19 + 2db6: 27 95 ror r18 ep = (ep_index / 2) + ((ep_index & 1) ? USB_EP_DIR_IN : 0); - 2d5c: 82 2f mov r24, r18 - 2d5e: 86 95 lsr r24 - 2d60: 20 fd sbrc r18, 0 - 2d62: 02 c0 rjmp .+4 ; 0x2d68 <__vector_126+0x6e> - 2d64: 90 e0 ldi r25, 0x00 ; 0 - 2d66: 01 c0 rjmp .+2 ; 0x2d6a <__vector_126+0x70> - 2d68: 90 e8 ldi r25, 0x80 ; 128 - 2d6a: 89 0f add r24, r25 + 2db8: 82 2f mov r24, r18 + 2dba: 86 95 lsr r24 + 2dbc: 20 fd sbrc r18, 0 + 2dbe: 02 c0 rjmp .+4 ; 0x2dc4 <__vector_126+0x6e> + 2dc0: 90 e0 ldi r25, 0x00 ; 0 + 2dc2: 01 c0 rjmp .+2 ; 0x2dc6 <__vector_126+0x70> + 2dc4: 90 e8 ldi r25, 0x80 ; 128 + 2dc6: 89 0f add r24, r25 udd_endpoint_set_control(ep_ctrl, (uint8_t) type | (uint8_t) size); } static UDD_EP_t *udd_ep_get_ctrl(udd_ep_id_t ep) { return &udd_sram.ep_ctrl[(2 * (ep & USB_EP_ADDR_MASK) + - 2d6c: e8 2f mov r30, r24 - 2d6e: ef 70 andi r30, 0x0F ; 15 - 2d70: f0 e0 ldi r31, 0x00 ; 0 - 2d72: ee 0f add r30, r30 - 2d74: ff 1f adc r31, r31 + 2dc8: e8 2f mov r30, r24 + 2dca: ef 70 andi r30, 0x0F ; 15 + 2dcc: f0 e0 ldi r31, 0x00 ; 0 + 2dce: ee 0f add r30, r30 + 2dd0: ff 1f adc r31, r31 ((ep & USB_EP_DIR_IN) ? 1 : 0))]; - 2d76: 28 2f mov r18, r24 - 2d78: 08 2e mov r0, r24 - 2d7a: 00 0c add r0, r0 - 2d7c: 33 0b sbc r19, r19 - 2d7e: 22 27 eor r18, r18 - 2d80: 33 0f add r19, r19 - 2d82: 22 1f adc r18, r18 - 2d84: 33 27 eor r19, r19 + 2dd2: 28 2f mov r18, r24 + 2dd4: 08 2e mov r0, r24 + 2dd6: 00 0c add r0, r0 + 2dd8: 33 0b sbc r19, r19 + 2dda: 22 27 eor r18, r18 + 2ddc: 33 0f add r19, r19 + 2dde: 22 1f adc r18, r18 + 2de0: 33 27 eor r19, r19 udd_endpoint_set_control(ep_ctrl, (uint8_t) type | (uint8_t) size); } static UDD_EP_t *udd_ep_get_ctrl(udd_ep_id_t ep) { return &udd_sram.ep_ctrl[(2 * (ep & USB_EP_ADDR_MASK) + - 2d86: e2 0f add r30, r18 - 2d88: f3 1f adc r31, r19 + 2de2: e2 0f add r30, r18 + 2de4: f3 1f adc r31, r19 ep = (ep_index / 2) + ((ep_index & 1) ? USB_EP_DIR_IN : 0); Assert(USB_DEVICE_MAX_EP >= (ep & USB_EP_ADDR_MASK)); // Ack IT TC of endpoint ep_ctrl = udd_ep_get_ctrl(ep); if (!udd_endpoint_transfer_complete(ep_ctrl)) { - 2d8a: df 01 movw r26, r30 - 2d8c: aa 0f add r26, r26 - 2d8e: bb 1f adc r27, r27 - 2d90: aa 0f add r26, r26 - 2d92: bb 1f adc r27, r27 - 2d94: aa 0f add r26, r26 - 2d96: bb 1f adc r27, r27 - 2d98: a8 5b subi r26, 0xB8 ; 184 - 2d9a: be 4d sbci r27, 0xDE ; 222 - 2d9c: 9c 91 ld r25, X - 2d9e: 95 ff sbrs r25, 5 - 2da0: 81 c0 rjmp .+258 ; 0x2ea4 <__vector_126+0x1aa> + 2de6: df 01 movw r26, r30 + 2de8: aa 0f add r26, r26 + 2dea: bb 1f adc r27, r27 + 2dec: aa 0f add r26, r26 + 2dee: bb 1f adc r27, r27 + 2df0: aa 0f add r26, r26 + 2df2: bb 1f adc r27, r27 + 2df4: a8 5b subi r26, 0xB8 ; 184 + 2df6: be 4d sbci r27, 0xDE ; 222 + 2df8: 9c 91 ld r25, X + 2dfa: 95 ff sbrs r25, 5 + 2dfc: 81 c0 rjmp .+258 ; 0x2f00 <__vector_126+0x1aa> return; // Error, TC is generated by Multipacket transfer } udd_endpoint_ack_transfer_complete(ep_ctrl); - 2da2: fd 01 movw r30, r26 - 2da4: 00 e2 ldi r16, 0x20 ; 32 - 2da6: 06 93 lac Z, r16 + 2dfe: fd 01 movw r30, r26 + 2e00: 00 e2 ldi r16, 0x20 ; 32 + 2e02: 06 93 lac Z, r16 // Check status on control endpoint if (ep == 0) { - 2da8: 81 11 cpse r24, r1 - 2daa: 77 c0 rjmp .+238 ; 0x2e9a <__vector_126+0x1a0> + 2e04: 81 11 cpse r24, r1 + 2e06: 77 c0 rjmp .+238 ; 0x2ef6 <__vector_126+0x1a0> static void udd_ctrl_out_received(void) { uint16_t nb_data; if (UDD_EPCTRL_HANDSHAKE_WAIT_OUT_ZLP == udd_ep_control_state) { - 2dac: 80 91 3f 21 lds r24, 0x213F ; 0x80213f - 2db0: 84 30 cpi r24, 0x04 ; 4 - 2db2: 19 f4 brne .+6 ; 0x2dba <__vector_126+0xc0> + 2e08: 80 91 3f 21 lds r24, 0x213F ; 0x80213f + 2e0c: 84 30 cpi r24, 0x04 ; 4 + 2e0e: 19 f4 brne .+6 ; 0x2e16 <__vector_126+0xc0> // Valid end of setup request udd_ctrl_endofrequest(); - 2db4: ca d9 rcall .-3180 ; 0x214a + 2e10: ca d9 rcall .-3180 ; 0x21a6 // Reinitializes control endpoint management udd_ctrl_init(); - 2db6: 86 d9 rcall .-3316 ; 0x20c4 - 2db8: 75 c0 rjmp .+234 ; 0x2ea4 <__vector_126+0x1aa> + 2e12: 86 d9 rcall .-3316 ; 0x2120 + 2e14: 75 c0 rjmp .+234 ; 0x2f00 <__vector_126+0x1aa> return; } Assert(udd_ep_control_state == UDD_EPCTRL_DATA_OUT); // Read data received during OUT phase nb_data = udd_control_out_get_bytecnt(); - 2dba: 00 91 4a 21 lds r16, 0x214A ; 0x80214a - 2dbe: 10 91 4b 21 lds r17, 0x214B ; 0x80214b + 2e16: 00 91 4a 21 lds r16, 0x214A ; 0x80214a + 2e1a: 10 91 4b 21 lds r17, 0x214B ; 0x80214b if (udd_g_ctrlreq.payload_size < (udd_ctrl_payload_nb_trans + nb_data)) { - 2dc2: 80 91 a4 23 lds r24, 0x23A4 ; 0x8023a4 - 2dc6: 90 91 a5 23 lds r25, 0x23A5 ; 0x8023a5 - 2dca: c0 91 3b 21 lds r28, 0x213B ; 0x80213b - 2dce: d0 91 3c 21 lds r29, 0x213C ; 0x80213c - 2dd2: 9e 01 movw r18, r28 - 2dd4: 20 0f add r18, r16 - 2dd6: 31 1f adc r19, r17 - 2dd8: 82 17 cp r24, r18 - 2dda: 93 07 cpc r25, r19 - 2ddc: 18 f4 brcc .+6 ; 0x2de4 <__vector_126+0xea> + 2e1e: 80 91 a4 23 lds r24, 0x23A4 ; 0x8023a4 + 2e22: 90 91 a5 23 lds r25, 0x23A5 ; 0x8023a5 + 2e26: c0 91 3b 21 lds r28, 0x213B ; 0x80213b + 2e2a: d0 91 3c 21 lds r29, 0x213C ; 0x80213c + 2e2e: 9e 01 movw r18, r28 + 2e30: 20 0f add r18, r16 + 2e32: 31 1f adc r19, r17 + 2e34: 82 17 cp r24, r18 + 2e36: 93 07 cpc r25, r19 + 2e38: 18 f4 brcc .+6 ; 0x2e40 <__vector_126+0xea> // Payload buffer too small, ignore data remaining nb_data = udd_g_ctrlreq.payload_size - udd_ctrl_payload_nb_trans; - 2dde: 8c 01 movw r16, r24 - 2de0: 0c 1b sub r16, r28 - 2de2: 1d 0b sbc r17, r29 + 2e3a: 8c 01 movw r16, r24 + 2e3c: 0c 1b sub r16, r28 + 2e3e: 1d 0b sbc r17, r29 } memcpy((uint8_t *) (udd_g_ctrlreq.payload + udd_ctrl_payload_nb_trans), - 2de4: 80 91 a2 23 lds r24, 0x23A2 ; 0x8023a2 - 2de8: 90 91 a3 23 lds r25, 0x23A3 ; 0x8023a3 - 2dec: a8 01 movw r20, r16 - 2dee: 6b ef ldi r22, 0xFB ; 251 - 2df0: 70 e2 ldi r23, 0x20 ; 32 - 2df2: 8c 0f add r24, r28 - 2df4: 9d 1f adc r25, r29 - 2df6: 98 d0 rcall .+304 ; 0x2f28 + 2e40: 80 91 a2 23 lds r24, 0x23A2 ; 0x8023a2 + 2e44: 90 91 a3 23 lds r25, 0x23A3 ; 0x8023a3 + 2e48: a8 01 movw r20, r16 + 2e4a: 6b ef ldi r22, 0xFB ; 251 + 2e4c: 70 e2 ldi r23, 0x20 ; 32 + 2e4e: 8c 0f add r24, r28 + 2e50: 9d 1f adc r25, r29 + 2e52: 98 d0 rcall .+304 ; 0x2f84 udd_ctrl_buffer, nb_data); udd_ctrl_payload_nb_trans += nb_data; - 2df8: c0 0f add r28, r16 - 2dfa: d1 1f adc r29, r17 - 2dfc: c0 93 3b 21 sts 0x213B, r28 ; 0x80213b - 2e00: d0 93 3c 21 sts 0x213C, r29 ; 0x80213c + 2e54: c0 0f add r28, r16 + 2e56: d1 1f adc r29, r17 + 2e58: c0 93 3b 21 sts 0x213B, r28 ; 0x80213b + 2e5c: d0 93 3c 21 sts 0x213C, r29 ; 0x80213c if ((USB_DEVICE_EP_CTRL_SIZE != nb_data) || (udd_g_ctrlreq.req.wLength - 2e04: 00 34 cpi r16, 0x40 ; 64 - 2e06: 11 05 cpc r17, r1 - 2e08: 69 f4 brne .+26 ; 0x2e24 <__vector_126+0x12a> + 2e60: 00 34 cpi r16, 0x40 ; 64 + 2e62: 11 05 cpc r17, r1 + 2e64: 69 f4 brne .+26 ; 0x2e80 <__vector_126+0x12a> <= (udd_ctrl_prev_payload_nb_trans + udd_ctrl_payload_nb_trans))) { - 2e0a: 80 91 3d 21 lds r24, 0x213D ; 0x80213d - 2e0e: 90 91 3e 21 lds r25, 0x213E ; 0x80213e - 2e12: 8c 0f add r24, r28 - 2e14: 9d 1f adc r25, r29 + 2e66: 80 91 3d 21 lds r24, 0x213D ; 0x80213d + 2e6a: 90 91 3e 21 lds r25, 0x213E ; 0x80213e + 2e6e: 8c 0f add r24, r28 + 2e70: 9d 1f adc r25, r29 memcpy((uint8_t *) (udd_g_ctrlreq.payload + udd_ctrl_payload_nb_trans), udd_ctrl_buffer, nb_data); udd_ctrl_payload_nb_trans += nb_data; if ((USB_DEVICE_EP_CTRL_SIZE != nb_data) || (udd_g_ctrlreq.req.wLength - 2e16: 20 91 a0 23 lds r18, 0x23A0 ; 0x8023a0 - 2e1a: 30 91 a1 23 lds r19, 0x23A1 ; 0x8023a1 - 2e1e: 82 17 cp r24, r18 - 2e20: 93 07 cpc r25, r19 - 2e22: 80 f0 brcs .+32 ; 0x2e44 <__vector_126+0x14a> + 2e72: 20 91 a0 23 lds r18, 0x23A0 ; 0x8023a0 + 2e76: 30 91 a1 23 lds r19, 0x23A1 ; 0x8023a1 + 2e7a: 82 17 cp r24, r18 + 2e7c: 93 07 cpc r25, r19 + 2e7e: 80 f0 brcs .+32 ; 0x2ea0 <__vector_126+0x14a> // End of reception because it is a short packet // or all data are transfered // Before send ZLP, call intermediate callback // in case of data receive generate a stall udd_g_ctrlreq.payload_size = udd_ctrl_payload_nb_trans; - 2e24: ea e9 ldi r30, 0x9A ; 154 - 2e26: f3 e2 ldi r31, 0x23 ; 35 - 2e28: c2 87 std Z+10, r28 ; 0x0a - 2e2a: d3 87 std Z+11, r29 ; 0x0b + 2e80: ea e9 ldi r30, 0x9A ; 154 + 2e82: f3 e2 ldi r31, 0x23 ; 35 + 2e84: c2 87 std Z+10, r28 ; 0x0a + 2e86: d3 87 std Z+11, r29 ; 0x0b if (NULL != udd_g_ctrlreq.over_under_run) { - 2e2c: 06 84 ldd r0, Z+14 ; 0x0e - 2e2e: f7 85 ldd r31, Z+15 ; 0x0f - 2e30: e0 2d mov r30, r0 - 2e32: 30 97 sbiw r30, 0x00 ; 0 - 2e34: 29 f0 breq .+10 ; 0x2e40 <__vector_126+0x146> + 2e88: 06 84 ldd r0, Z+14 ; 0x0e + 2e8a: f7 85 ldd r31, Z+15 ; 0x0f + 2e8c: e0 2d mov r30, r0 + 2e8e: 30 97 sbiw r30, 0x00 ; 0 + 2e90: 29 f0 breq .+10 ; 0x2e9c <__vector_126+0x146> if (!udd_g_ctrlreq.over_under_run()) { - 2e36: 09 95 icall - 2e38: 81 11 cpse r24, r1 - 2e3a: 02 c0 rjmp .+4 ; 0x2e40 <__vector_126+0x146> + 2e92: 09 95 icall + 2e94: 81 11 cpse r24, r1 + 2e96: 02 c0 rjmp .+4 ; 0x2e9c <__vector_126+0x146> // Stall ZLP udd_ctrl_stall_data(); - 2e3c: 6a d9 rcall .-3372 ; 0x2112 - 2e3e: 32 c0 rjmp .+100 ; 0x2ea4 <__vector_126+0x1aa> + 2e98: 6a d9 rcall .-3372 ; 0x216e + 2e9a: 32 c0 rjmp .+100 ; 0x2f00 <__vector_126+0x1aa> return; } } // Send IN ZLP to ACK setup request udd_ctrl_send_zlp_in(); - 2e40: 76 d9 rcall .-3348 ; 0x212e - 2e42: 30 c0 rjmp .+96 ; 0x2ea4 <__vector_126+0x1aa> + 2e9c: 76 d9 rcall .-3348 ; 0x218a + 2e9e: 30 c0 rjmp .+96 ; 0x2f00 <__vector_126+0x1aa> return; } if (udd_g_ctrlreq.payload_size == udd_ctrl_payload_nb_trans) { - 2e44: 80 91 a4 23 lds r24, 0x23A4 ; 0x8023a4 - 2e48: 90 91 a5 23 lds r25, 0x23A5 ; 0x8023a5 - 2e4c: c8 17 cp r28, r24 - 2e4e: d9 07 cpc r29, r25 - 2e50: f9 f4 brne .+62 ; 0x2e90 <__vector_126+0x196> + 2ea0: 80 91 a4 23 lds r24, 0x23A4 ; 0x8023a4 + 2ea4: 90 91 a5 23 lds r25, 0x23A5 ; 0x8023a5 + 2ea8: c8 17 cp r28, r24 + 2eaa: d9 07 cpc r29, r25 + 2eac: f9 f4 brne .+62 ; 0x2eec <__vector_126+0x196> // Overrun then request a new payload buffer if (!udd_g_ctrlreq.over_under_run) { - 2e52: e0 91 a8 23 lds r30, 0x23A8 ; 0x8023a8 - 2e56: f0 91 a9 23 lds r31, 0x23A9 ; 0x8023a9 - 2e5a: 30 97 sbiw r30, 0x00 ; 0 - 2e5c: 11 f4 brne .+4 ; 0x2e62 <__vector_126+0x168> + 2eae: e0 91 a8 23 lds r30, 0x23A8 ; 0x8023a8 + 2eb2: f0 91 a9 23 lds r31, 0x23A9 ; 0x8023a9 + 2eb6: 30 97 sbiw r30, 0x00 ; 0 + 2eb8: 11 f4 brne .+4 ; 0x2ebe <__vector_126+0x168> // No callback available to request a new payload buffer udd_ctrl_stall_data(); - 2e5e: 59 d9 rcall .-3406 ; 0x2112 - 2e60: 21 c0 rjmp .+66 ; 0x2ea4 <__vector_126+0x1aa> + 2eba: 59 d9 rcall .-3406 ; 0x216e + 2ebc: 21 c0 rjmp .+66 ; 0x2f00 <__vector_126+0x1aa> return; } if (!udd_g_ctrlreq.over_under_run()) { - 2e62: 09 95 icall - 2e64: 81 11 cpse r24, r1 - 2e66: 02 c0 rjmp .+4 ; 0x2e6c <__vector_126+0x172> + 2ebe: 09 95 icall + 2ec0: 81 11 cpse r24, r1 + 2ec2: 02 c0 rjmp .+4 ; 0x2ec8 <__vector_126+0x172> // No new payload buffer delivered udd_ctrl_stall_data(); - 2e68: 54 d9 rcall .-3416 ; 0x2112 - 2e6a: 1c c0 rjmp .+56 ; 0x2ea4 <__vector_126+0x1aa> + 2ec4: 54 d9 rcall .-3416 ; 0x216e + 2ec6: 1c c0 rjmp .+56 ; 0x2f00 <__vector_126+0x1aa> return; } // New payload buffer available // Update number of total data received udd_ctrl_prev_payload_nb_trans += udd_ctrl_payload_nb_trans; - 2e6c: 20 91 3d 21 lds r18, 0x213D ; 0x80213d - 2e70: 30 91 3e 21 lds r19, 0x213E ; 0x80213e - 2e74: 80 91 3b 21 lds r24, 0x213B ; 0x80213b - 2e78: 90 91 3c 21 lds r25, 0x213C ; 0x80213c - 2e7c: 82 0f add r24, r18 - 2e7e: 93 1f adc r25, r19 - 2e80: 80 93 3d 21 sts 0x213D, r24 ; 0x80213d - 2e84: 90 93 3e 21 sts 0x213E, r25 ; 0x80213e + 2ec8: 20 91 3d 21 lds r18, 0x213D ; 0x80213d + 2ecc: 30 91 3e 21 lds r19, 0x213E ; 0x80213e + 2ed0: 80 91 3b 21 lds r24, 0x213B ; 0x80213b + 2ed4: 90 91 3c 21 lds r25, 0x213C ; 0x80213c + 2ed8: 82 0f add r24, r18 + 2eda: 93 1f adc r25, r19 + 2edc: 80 93 3d 21 sts 0x213D, r24 ; 0x80213d + 2ee0: 90 93 3e 21 sts 0x213E, r25 ; 0x80213e // Reinit reception on payload buffer udd_ctrl_payload_nb_trans = 0; - 2e88: 10 92 3b 21 sts 0x213B, r1 ; 0x80213b - 2e8c: 10 92 3c 21 sts 0x213C, r1 ; 0x80213c + 2ee4: 10 92 3b 21 sts 0x213B, r1 ; 0x80213b + 2ee8: 10 92 3c 21 sts 0x213C, r1 ; 0x80213c } // Free buffer of OUT control endpoint to authorize next reception udd_control_out_clear_NACK0(); - 2e90: e8 e4 ldi r30, 0x48 ; 72 - 2e92: f1 e2 ldi r31, 0x21 ; 33 - 2e94: 02 e0 ldi r16, 0x02 ; 2 - 2e96: 06 93 lac Z, r16 - 2e98: 05 c0 rjmp .+10 ; 0x2ea4 <__vector_126+0x1aa> + 2eec: e8 e4 ldi r30, 0x48 ; 72 + 2eee: f1 e2 ldi r31, 0x21 ; 33 + 2ef0: 02 e0 ldi r16, 0x02 ; 2 + 2ef2: 06 93 lac Z, r16 + 2ef4: 05 c0 rjmp .+10 ; 0x2f00 <__vector_126+0x1aa> // Check status on control endpoint if (ep == 0) { udd_ctrl_out_received(); goto udd_interrupt_tc_end; // Interrupt acked by control endpoint managed } if (ep == (0 | USB_EP_DIR_IN)) { - 2e9a: 80 38 cpi r24, 0x80 ; 128 - 2e9c: 11 f4 brne .+4 ; 0x2ea2 <__vector_126+0x1a8> + 2ef6: 80 38 cpi r24, 0x80 ; 128 + 2ef8: 11 f4 brne .+4 ; 0x2efe <__vector_126+0x1a8> udd_ctrl_in_sent(); - 2e9e: 5d d9 rcall .-3398 ; 0x215a + 2efa: 5d d9 rcall .-3398 ; 0x21b6 goto udd_interrupt_tc_end; // Interrupt acked by control endpoint managed - 2ea0: 01 c0 rjmp .+2 ; 0x2ea4 <__vector_126+0x1aa> + 2efc: 01 c0 rjmp .+2 ; 0x2f00 <__vector_126+0x1aa> } Assert(udd_ep_is_valid(ep)); // Manage end of transfer on endpoint bulk/interrupt/isochronous udd_ep_trans_complet(ep); - 2ea2: 77 da rcall .-2834 ; 0x2392 + 2efe: 77 da rcall .-2834 ; 0x23ee } #endif udd_interrupt_tc_end: return; } - 2ea4: ff 91 pop r31 - 2ea6: ef 91 pop r30 - 2ea8: df 91 pop r29 - 2eaa: cf 91 pop r28 - 2eac: bf 91 pop r27 - 2eae: af 91 pop r26 - 2eb0: 9f 91 pop r25 - 2eb2: 8f 91 pop r24 - 2eb4: 7f 91 pop r23 - 2eb6: 6f 91 pop r22 - 2eb8: 5f 91 pop r21 - 2eba: 4f 91 pop r20 - 2ebc: 3f 91 pop r19 - 2ebe: 2f 91 pop r18 - 2ec0: 1f 91 pop r17 - 2ec2: 0f 91 pop r16 - 2ec4: 0f 90 pop r0 - 2ec6: 0f be out 0x3f, r0 ; 63 - 2ec8: 0f 90 pop r0 - 2eca: 1f 90 pop r1 - 2ecc: 18 95 reti + 2f00: ff 91 pop r31 + 2f02: ef 91 pop r30 + 2f04: df 91 pop r29 + 2f06: cf 91 pop r28 + 2f08: bf 91 pop r27 + 2f0a: af 91 pop r26 + 2f0c: 9f 91 pop r25 + 2f0e: 8f 91 pop r24 + 2f10: 7f 91 pop r23 + 2f12: 6f 91 pop r22 + 2f14: 5f 91 pop r21 + 2f16: 4f 91 pop r20 + 2f18: 3f 91 pop r19 + 2f1a: 2f 91 pop r18 + 2f1c: 1f 91 pop r17 + 2f1e: 0f 91 pop r16 + 2f20: 0f 90 pop r0 + 2f22: 0f be out 0x3f, r0 ; 63 + 2f24: 0f 90 pop r0 + 2f26: 1f 90 pop r1 + 2f28: 18 95 reti -00002ece <__udivmodhi4>: - 2ece: aa 1b sub r26, r26 - 2ed0: bb 1b sub r27, r27 - 2ed2: 51 e1 ldi r21, 0x11 ; 17 - 2ed4: 07 c0 rjmp .+14 ; 0x2ee4 <__udivmodhi4_ep> +00002f2a <__udivmodhi4>: + 2f2a: aa 1b sub r26, r26 + 2f2c: bb 1b sub r27, r27 + 2f2e: 51 e1 ldi r21, 0x11 ; 17 + 2f30: 07 c0 rjmp .+14 ; 0x2f40 <__udivmodhi4_ep> -00002ed6 <__udivmodhi4_loop>: - 2ed6: aa 1f adc r26, r26 - 2ed8: bb 1f adc r27, r27 - 2eda: a6 17 cp r26, r22 - 2edc: b7 07 cpc r27, r23 - 2ede: 10 f0 brcs .+4 ; 0x2ee4 <__udivmodhi4_ep> - 2ee0: a6 1b sub r26, r22 - 2ee2: b7 0b sbc r27, r23 +00002f32 <__udivmodhi4_loop>: + 2f32: aa 1f adc r26, r26 + 2f34: bb 1f adc r27, r27 + 2f36: a6 17 cp r26, r22 + 2f38: b7 07 cpc r27, r23 + 2f3a: 10 f0 brcs .+4 ; 0x2f40 <__udivmodhi4_ep> + 2f3c: a6 1b sub r26, r22 + 2f3e: b7 0b sbc r27, r23 -00002ee4 <__udivmodhi4_ep>: - 2ee4: 88 1f adc r24, r24 - 2ee6: 99 1f adc r25, r25 - 2ee8: 5a 95 dec r21 - 2eea: a9 f7 brne .-22 ; 0x2ed6 <__udivmodhi4_loop> - 2eec: 80 95 com r24 - 2eee: 90 95 com r25 - 2ef0: bc 01 movw r22, r24 - 2ef2: cd 01 movw r24, r26 - 2ef4: 08 95 ret +00002f40 <__udivmodhi4_ep>: + 2f40: 88 1f adc r24, r24 + 2f42: 99 1f adc r25, r25 + 2f44: 5a 95 dec r21 + 2f46: a9 f7 brne .-22 ; 0x2f32 <__udivmodhi4_loop> + 2f48: 80 95 com r24 + 2f4a: 90 95 com r25 + 2f4c: bc 01 movw r22, r24 + 2f4e: cd 01 movw r24, r26 + 2f50: 08 95 ret -00002ef6 <__divmodhi4>: - 2ef6: 97 fb bst r25, 7 - 2ef8: 07 2e mov r0, r23 - 2efa: 16 f4 brtc .+4 ; 0x2f00 <__divmodhi4+0xa> - 2efc: 00 94 com r0 - 2efe: 06 d0 rcall .+12 ; 0x2f0c <__divmodhi4_neg1> - 2f00: 77 fd sbrc r23, 7 - 2f02: 08 d0 rcall .+16 ; 0x2f14 <__divmodhi4_neg2> - 2f04: e4 df rcall .-56 ; 0x2ece <__udivmodhi4> - 2f06: 07 fc sbrc r0, 7 - 2f08: 05 d0 rcall .+10 ; 0x2f14 <__divmodhi4_neg2> - 2f0a: 3e f4 brtc .+14 ; 0x2f1a <__divmodhi4_exit> +00002f52 <__divmodhi4>: + 2f52: 97 fb bst r25, 7 + 2f54: 07 2e mov r0, r23 + 2f56: 16 f4 brtc .+4 ; 0x2f5c <__divmodhi4+0xa> + 2f58: 00 94 com r0 + 2f5a: 06 d0 rcall .+12 ; 0x2f68 <__divmodhi4_neg1> + 2f5c: 77 fd sbrc r23, 7 + 2f5e: 08 d0 rcall .+16 ; 0x2f70 <__divmodhi4_neg2> + 2f60: e4 df rcall .-56 ; 0x2f2a <__udivmodhi4> + 2f62: 07 fc sbrc r0, 7 + 2f64: 05 d0 rcall .+10 ; 0x2f70 <__divmodhi4_neg2> + 2f66: 3e f4 brtc .+14 ; 0x2f76 <__divmodhi4_exit> -00002f0c <__divmodhi4_neg1>: - 2f0c: 90 95 com r25 - 2f0e: 81 95 neg r24 - 2f10: 9f 4f sbci r25, 0xFF ; 255 - 2f12: 08 95 ret +00002f68 <__divmodhi4_neg1>: + 2f68: 90 95 com r25 + 2f6a: 81 95 neg r24 + 2f6c: 9f 4f sbci r25, 0xFF ; 255 + 2f6e: 08 95 ret -00002f14 <__divmodhi4_neg2>: - 2f14: 70 95 com r23 - 2f16: 61 95 neg r22 - 2f18: 7f 4f sbci r23, 0xFF ; 255 +00002f70 <__divmodhi4_neg2>: + 2f70: 70 95 com r23 + 2f72: 61 95 neg r22 + 2f74: 7f 4f sbci r23, 0xFF ; 255 -00002f1a <__divmodhi4_exit>: - 2f1a: 08 95 ret +00002f76 <__divmodhi4_exit>: + 2f76: 08 95 ret -00002f1c <__tablejump2__>: - 2f1c: ee 0f add r30, r30 - 2f1e: ff 1f adc r31, r31 - 2f20: 05 90 lpm r0, Z+ - 2f22: f4 91 lpm r31, Z - 2f24: e0 2d mov r30, r0 - 2f26: 09 94 ijmp +00002f78 <__tablejump2__>: + 2f78: ee 0f add r30, r30 + 2f7a: ff 1f adc r31, r31 + 2f7c: 05 90 lpm r0, Z+ + 2f7e: f4 91 lpm r31, Z + 2f80: e0 2d mov r30, r0 + 2f82: 09 94 ijmp -00002f28 : - 2f28: fb 01 movw r30, r22 - 2f2a: dc 01 movw r26, r24 - 2f2c: 02 c0 rjmp .+4 ; 0x2f32 - 2f2e: 01 90 ld r0, Z+ - 2f30: 0d 92 st X+, r0 - 2f32: 41 50 subi r20, 0x01 ; 1 - 2f34: 50 40 sbci r21, 0x00 ; 0 - 2f36: d8 f7 brcc .-10 ; 0x2f2e - 2f38: 08 95 ret +00002f84 : + 2f84: fb 01 movw r30, r22 + 2f86: dc 01 movw r26, r24 + 2f88: 02 c0 rjmp .+4 ; 0x2f8e + 2f8a: 01 90 ld r0, Z+ + 2f8c: 0d 92 st X+, r0 + 2f8e: 41 50 subi r20, 0x01 ; 1 + 2f90: 50 40 sbci r21, 0x00 ; 0 + 2f92: d8 f7 brcc .-10 ; 0x2f8a + 2f94: 08 95 ret -00002f3a <_exit>: - 2f3a: f8 94 cli +00002f96 <_exit>: + 2f96: f8 94 cli -00002f3c <__stop_program>: - 2f3c: ff cf rjmp .-2 ; 0x2f3c <__stop_program> +00002f98 <__stop_program>: + 2f98: ff cf rjmp .-2 ; 0x2f98 <__stop_program> diff --git a/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.map b/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.map index 847e1408..bbb5b895 100644 --- a/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.map +++ b/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.map @@ -882,20 +882,6 @@ Discarded input sections .text 0x00000000 0x0 src/tiny_dma.o .data 0x00000000 0x0 src/tiny_dma.o .bss 0x00000000 0x0 src/tiny_dma.o - .text.tiny_dma_loop_mode_0 - 0x00000000 0x2 src/tiny_dma.o - .text.tiny_dma_loop_mode_1 - 0x00000000 0x2 src/tiny_dma.o - .text.tiny_dma_loop_mode_2 - 0x00000000 0x2 src/tiny_dma.o - .text.tiny_dma_loop_mode_3 - 0x00000000 0x2 src/tiny_dma.o - .text.tiny_dma_loop_mode_4 - 0x00000000 0x2 src/tiny_dma.o - .text.tiny_dma_loop_mode_6 - 0x00000000 0x2 src/tiny_dma.o - .text.tiny_dma_loop_mode_7 - 0x00000000 0x2 src/tiny_dma.o .debug_macro 0x00000000 0xa5a src/tiny_dma.o .debug_macro 0x00000000 0x1c9 src/tiny_dma.o .debug_macro 0x00000000 0x2fc src/tiny_dma.o @@ -2200,7 +2186,7 @@ END GROUP .rela.plt *(.rela.plt) -.text 0x00000000 0x2f3e +.text 0x00000000 0x2f9a *(.vectors) .vectors 0x00000000 0x1fc C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/XMEGAA_DFP/1.0.39/gcc/dev/atxmega32a4u/avrxmega2/crtatxmega32a4u.o 0x00000000 __vector_default @@ -2209,48 +2195,50 @@ END GROUP *(.progmem.gcc*) .progmem.gcc_sw_table.main 0x000001fc 0x10 src/main.o + .progmem.gcc_sw_table.main_sof_action + 0x0000020c 0x10 src/main.o .progmem.gcc_sw_table.udc_process_setup - 0x0000020c 0x22 src/ASF/common/services/usb/udc/udc.o + 0x0000021c 0x22 src/ASF/common/services/usb/udc/udc.o .progmem.gcc_sw_table.udd_ep_get_size - 0x0000022e 0xe src/ASF/xmega/drivers/usb/usb_device.o - 0x0000023c . = ALIGN (0x2) - 0x0000023c __trampolines_start = . + 0x0000023e 0xe src/ASF/xmega/drivers/usb/usb_device.o + 0x0000024c . = ALIGN (0x2) + 0x0000024c __trampolines_start = . *(.trampolines) - .trampolines 0x0000023c 0x0 linker stubs + .trampolines 0x0000024c 0x0 linker stubs *(.trampolines*) - 0x0000023c __trampolines_end = . + 0x0000024c __trampolines_end = . *libprintf_flt.a:*(.progmem.data) *libc.a:*(.progmem.data) *(.progmem*) - 0x0000023c . = ALIGN (0x2) + 0x0000024c . = ALIGN (0x2) *(.jumptables) *(.jumptables*) *(.lowtext) *(.lowtext*) - 0x0000023c __ctors_start = . + 0x0000024c __ctors_start = . *(.ctors) - 0x0000023c __ctors_end = . - 0x0000023c __dtors_start = . + 0x0000024c __ctors_end = . + 0x0000024c __dtors_start = . *(.dtors) - 0x0000023c __dtors_end = . + 0x0000024c __dtors_end = . SORT(*)(.ctors) SORT(*)(.dtors) *(.init0) - .init0 0x0000023c 0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/XMEGAA_DFP/1.0.39/gcc/dev/atxmega32a4u/avrxmega2/crtatxmega32a4u.o - 0x0000023c __init + .init0 0x0000024c 0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/XMEGAA_DFP/1.0.39/gcc/dev/atxmega32a4u/avrxmega2/crtatxmega32a4u.o + 0x0000024c __init *(.init0) *(.init1) *(.init1) *(.init2) - .init2 0x0000023c 0xc C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/XMEGAA_DFP/1.0.39/gcc/dev/atxmega32a4u/avrxmega2/crtatxmega32a4u.o + .init2 0x0000024c 0xc C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/XMEGAA_DFP/1.0.39/gcc/dev/atxmega32a4u/avrxmega2/crtatxmega32a4u.o *(.init2) *(.init3) *(.init3) *(.init4) - .init4 0x00000248 0x16 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_copy_data.o) - 0x00000248 __do_copy_data - .init4 0x0000025e 0x10 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_clear_bss.o) - 0x0000025e __do_clear_bss + .init4 0x00000258 0x16 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_copy_data.o) + 0x00000258 __do_copy_data + .init4 0x0000026e 0x10 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_clear_bss.o) + 0x0000026e __do_clear_bss *(.init4) *(.init5) *(.init5) @@ -2261,414 +2249,435 @@ END GROUP *(.init8) *(.init8) *(.init9) - .init9 0x0000026e 0x6 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/XMEGAA_DFP/1.0.39/gcc/dev/atxmega32a4u/avrxmega2/crtatxmega32a4u.o + .init9 0x0000027e 0x6 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/XMEGAA_DFP/1.0.39/gcc/dev/atxmega32a4u/avrxmega2/crtatxmega32a4u.o *(.init9) *(.text) - .text 0x00000274 0x2 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/XMEGAA_DFP/1.0.39/gcc/dev/atxmega32a4u/avrxmega2/crtatxmega32a4u.o - 0x00000274 __vector_38 - 0x00000274 __vector_104 - 0x00000274 __vector_22 - 0x00000274 __vector_63 - 0x00000274 __vector_28 - 0x00000274 __vector_67 - 0x00000274 __vector_1 - 0x00000274 __vector_119 - 0x00000274 __vector_32 - 0x00000274 __vector_75 - 0x00000274 __vector_91 - 0x00000274 __vector_34 - 0x00000274 __vector_62 - 0x00000274 __vector_77 - 0x00000274 __vector_102 - 0x00000274 __vector_12 - 0x00000274 __vector_55 - 0x00000274 __vector_69 - 0x00000274 __vector_81 - 0x00000274 __vector_90 - 0x00000274 __vector_46 - 0x00000274 __bad_interrupt - 0x00000274 __vector_122 - 0x00000274 __vector_72 - 0x00000274 __vector_114 - 0x00000274 __vector_110 - 0x00000274 __vector_31 - 0x00000274 __vector_92 - 0x00000274 __vector_35 - 0x00000274 __vector_78 - 0x00000274 __vector_74 - 0x00000274 __vector_117 - 0x00000274 __vector_39 - 0x00000274 __vector_107 - 0x00000274 __vector_3 - 0x00000274 __vector_105 - 0x00000274 __vector_98 - 0x00000274 __vector_23 - 0x00000274 __vector_68 - 0x00000274 __vector_30 - 0x00000274 __vector_73 - 0x00000274 __vector_45 - 0x00000274 __vector_93 - 0x00000274 __vector_61 - 0x00000274 __vector_11 - 0x00000274 __vector_54 - 0x00000274 __vector_99 - 0x00000274 __vector_13 - 0x00000274 __vector_17 - 0x00000274 __vector_19 - 0x00000274 __vector_56 - 0x00000274 __vector_49 - 0x00000274 __vector_123 - 0x00000274 __vector_41 - 0x00000274 __vector_86 - 0x00000274 __vector_100 - 0x00000274 __vector_101 - 0x00000274 __vector_64 - 0x00000274 __vector_88 - 0x00000274 __vector_109 - 0x00000274 __vector_43 - 0x00000274 __vector_27 - 0x00000274 __vector_5 - 0x00000274 __vector_113 - 0x00000274 __vector_33 - 0x00000274 __vector_76 - 0x00000274 __vector_115 - 0x00000274 __vector_47 - 0x00000274 __vector_52 - 0x00000274 __vector_37 - 0x00000274 __vector_95 - 0x00000274 __vector_103 - 0x00000274 __vector_96 - 0x00000274 __vector_89 - 0x00000274 __vector_108 - 0x00000274 __vector_4 - 0x00000274 __vector_44 - 0x00000274 __vector_82 - 0x00000274 __vector_106 - 0x00000274 __vector_118 - 0x00000274 __vector_51 - 0x00000274 __vector_9 - 0x00000274 __vector_2 - 0x00000274 __vector_21 - 0x00000274 __vector_15 - 0x00000274 __vector_66 - 0x00000274 __vector_36 - 0x00000274 __vector_79 - 0x00000274 __vector_58 - 0x00000274 __vector_70 - 0x00000274 __vector_29 - 0x00000274 __vector_60 - 0x00000274 __vector_121 - 0x00000274 __vector_40 - 0x00000274 __vector_85 - 0x00000274 __vector_94 - 0x00000274 __vector_8 - 0x00000274 __vector_26 - 0x00000274 __vector_48 - 0x00000274 __vector_124 - 0x00000274 __vector_116 - 0x00000274 __vector_112 - 0x00000274 __vector_111 - 0x00000274 __vector_80 - 0x00000274 __vector_14 - 0x00000274 __vector_84 - 0x00000274 __vector_57 - 0x00000274 __vector_53 - 0x00000274 __vector_10 - 0x00000274 __vector_50 - 0x00000274 __vector_16 - 0x00000274 __vector_59 - 0x00000274 __vector_18 - 0x00000274 __vector_97 - 0x00000274 __vector_20 - 0x00000274 __vector_42 - 0x00000274 __vector_87 - 0x00000274 __vector_65 - 0x00000274 __vector_120 - 0x00000276 . = ALIGN (0x2) + .text 0x00000284 0x2 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/XMEGAA_DFP/1.0.39/gcc/dev/atxmega32a4u/avrxmega2/crtatxmega32a4u.o + 0x00000284 __vector_38 + 0x00000284 __vector_104 + 0x00000284 __vector_22 + 0x00000284 __vector_63 + 0x00000284 __vector_28 + 0x00000284 __vector_67 + 0x00000284 __vector_1 + 0x00000284 __vector_119 + 0x00000284 __vector_32 + 0x00000284 __vector_75 + 0x00000284 __vector_91 + 0x00000284 __vector_34 + 0x00000284 __vector_62 + 0x00000284 __vector_77 + 0x00000284 __vector_102 + 0x00000284 __vector_12 + 0x00000284 __vector_55 + 0x00000284 __vector_69 + 0x00000284 __vector_81 + 0x00000284 __vector_90 + 0x00000284 __vector_46 + 0x00000284 __bad_interrupt + 0x00000284 __vector_122 + 0x00000284 __vector_72 + 0x00000284 __vector_114 + 0x00000284 __vector_110 + 0x00000284 __vector_31 + 0x00000284 __vector_92 + 0x00000284 __vector_35 + 0x00000284 __vector_78 + 0x00000284 __vector_74 + 0x00000284 __vector_117 + 0x00000284 __vector_39 + 0x00000284 __vector_107 + 0x00000284 __vector_3 + 0x00000284 __vector_105 + 0x00000284 __vector_98 + 0x00000284 __vector_23 + 0x00000284 __vector_68 + 0x00000284 __vector_30 + 0x00000284 __vector_73 + 0x00000284 __vector_45 + 0x00000284 __vector_93 + 0x00000284 __vector_61 + 0x00000284 __vector_11 + 0x00000284 __vector_54 + 0x00000284 __vector_99 + 0x00000284 __vector_13 + 0x00000284 __vector_17 + 0x00000284 __vector_19 + 0x00000284 __vector_56 + 0x00000284 __vector_49 + 0x00000284 __vector_123 + 0x00000284 __vector_41 + 0x00000284 __vector_86 + 0x00000284 __vector_100 + 0x00000284 __vector_101 + 0x00000284 __vector_64 + 0x00000284 __vector_88 + 0x00000284 __vector_109 + 0x00000284 __vector_43 + 0x00000284 __vector_27 + 0x00000284 __vector_5 + 0x00000284 __vector_113 + 0x00000284 __vector_33 + 0x00000284 __vector_76 + 0x00000284 __vector_115 + 0x00000284 __vector_47 + 0x00000284 __vector_52 + 0x00000284 __vector_37 + 0x00000284 __vector_95 + 0x00000284 __vector_103 + 0x00000284 __vector_96 + 0x00000284 __vector_89 + 0x00000284 __vector_108 + 0x00000284 __vector_4 + 0x00000284 __vector_44 + 0x00000284 __vector_82 + 0x00000284 __vector_106 + 0x00000284 __vector_118 + 0x00000284 __vector_51 + 0x00000284 __vector_9 + 0x00000284 __vector_2 + 0x00000284 __vector_21 + 0x00000284 __vector_15 + 0x00000284 __vector_66 + 0x00000284 __vector_36 + 0x00000284 __vector_79 + 0x00000284 __vector_58 + 0x00000284 __vector_70 + 0x00000284 __vector_29 + 0x00000284 __vector_60 + 0x00000284 __vector_121 + 0x00000284 __vector_40 + 0x00000284 __vector_85 + 0x00000284 __vector_94 + 0x00000284 __vector_8 + 0x00000284 __vector_26 + 0x00000284 __vector_48 + 0x00000284 __vector_124 + 0x00000284 __vector_116 + 0x00000284 __vector_112 + 0x00000284 __vector_111 + 0x00000284 __vector_80 + 0x00000284 __vector_14 + 0x00000284 __vector_84 + 0x00000284 __vector_57 + 0x00000284 __vector_53 + 0x00000284 __vector_10 + 0x00000284 __vector_50 + 0x00000284 __vector_16 + 0x00000284 __vector_59 + 0x00000284 __vector_18 + 0x00000284 __vector_97 + 0x00000284 __vector_20 + 0x00000284 __vector_42 + 0x00000284 __vector_87 + 0x00000284 __vector_65 + 0x00000284 __vector_120 + 0x00000286 . = ALIGN (0x2) *(.text.*) .text.tiny_calibration_init - 0x00000276 0x6c src/tiny_calibration.o - 0x00000276 tiny_calibration_init + 0x00000286 0x6c src/tiny_calibration.o + 0x00000286 tiny_calibration_init .text.tiny_calibration_first_sof - 0x000002e2 0x24 src/tiny_calibration.o - 0x000002e2 tiny_calibration_first_sof + 0x000002f2 0x24 src/tiny_calibration.o + 0x000002f2 tiny_calibration_first_sof .text.tiny_calibration_maintain - 0x00000306 0xe0 src/tiny_calibration.o - 0x00000306 tiny_calibration_maintain + 0x00000316 0xe0 src/tiny_calibration.o + 0x00000316 tiny_calibration_maintain .text.tiny_calibration_safe_add - 0x000003e6 0xd4 src/tiny_calibration.o - 0x000003e6 tiny_calibration_safe_add + 0x000003f6 0xd4 src/tiny_calibration.o + 0x000003f6 tiny_calibration_safe_add .text.tiny_calibration_find_values - 0x000004ba 0x124 src/tiny_calibration.o - 0x000004ba tiny_calibration_find_values + 0x000004ca 0x124 src/tiny_calibration.o + 0x000004ca tiny_calibration_find_values .text.magnitude_difference - 0x000005de 0x2e src/tiny_calibration.o - 0x000005de magnitude_difference + 0x000005ee 0x2e src/tiny_calibration.o + 0x000005ee magnitude_difference .text.tiny_calibration_layer2 - 0x0000060c 0xcc src/tiny_calibration.o - 0x0000060c tiny_calibration_layer2 + 0x0000061c 0xcc src/tiny_calibration.o + 0x0000061c tiny_calibration_layer2 .text.tiny_calibration_synchronise_phase - 0x000006d8 0x24 src/tiny_calibration.o - 0x000006d8 tiny_calibration_synchronise_phase + 0x000006e8 0x24 src/tiny_calibration.o + 0x000006e8 tiny_calibration_synchronise_phase .text.tiny_dig_setup - 0x000006fc 0xe src/tiny_dig.o - 0x000006fc tiny_dig_setup + 0x0000070c 0xe src/tiny_dig.o + 0x0000070c tiny_dig_setup .text.eeprom_safe_read - 0x0000070a 0x2a src/tiny_eeprom.o - 0x0000070a eeprom_safe_read + 0x0000071a 0x2a src/tiny_eeprom.o + 0x0000071a eeprom_safe_read .text.eeprom_safe_write - 0x00000734 0x28 src/tiny_eeprom.o - 0x00000734 eeprom_safe_write + 0x00000744 0x28 src/tiny_eeprom.o + 0x00000744 eeprom_safe_write .text.board_init - 0x0000075c 0x2 src/ASF/common/boards/user_board/init.o - 0x0000075c board_init + 0x0000076c 0x2 src/ASF/common/boards/user_board/init.o + 0x0000076c board_init .text.iso_callback - 0x0000075e 0x60 src/main.o - 0x0000075e iso_callback + 0x0000076e 0x30 src/main.o + 0x0000076e iso_callback .text.jump_to_bootloader - 0x000007be 0xa src/main.o - 0x000007be jump_to_bootloader - .text.main 0x000007c8 0xbc src/main.o - 0x000007c8 main + 0x0000079e 0xa src/main.o + 0x0000079e jump_to_bootloader + .text.main 0x000007a8 0xbe src/main.o + 0x000007a8 main .text.main_suspend_action - 0x00000884 0x2 src/main.o - 0x00000884 main_suspend_action + 0x00000866 0x2 src/main.o + 0x00000866 main_suspend_action .text.main_resume_action - 0x00000886 0x2 src/main.o - 0x00000886 main_resume_action + 0x00000868 0x2 src/main.o + 0x00000868 main_resume_action .text.main_sof_action - 0x00000888 0xec src/main.o - 0x00000888 main_sof_action + 0x0000086a 0xf6 src/main.o + 0x0000086a main_sof_action .text.main_vendor_enable - 0x00000974 0x2a src/main.o - 0x00000974 main_vendor_enable + 0x00000960 0x2a src/main.o + 0x00000960 main_vendor_enable .text.main_vendor_disable - 0x0000099e 0x6 src/main.o - 0x0000099e main_vendor_disable + 0x0000098a 0x6 src/main.o + 0x0000098a main_vendor_disable .text.main_setup_out_received - 0x000009a4 0x4 src/main.o - 0x000009a4 main_setup_out_received + 0x00000990 0x4 src/main.o + 0x00000990 main_setup_out_received .text.main_setup_in_received - 0x000009a8 0x4 src/main.o - 0x000009a8 main_setup_in_received + 0x00000994 0x4 src/main.o + 0x00000994 main_setup_in_received .text.tiny_adc_ch0setup - 0x000009ac 0x1e src/tiny_adc.o - 0x000009ac tiny_adc_ch0setup + 0x00000998 0x1e src/tiny_adc.o + 0x00000998 tiny_adc_ch0setup .text.tiny_adc_ch1setup - 0x000009ca 0x14 src/tiny_adc.o - 0x000009ca tiny_adc_ch1setup + 0x000009b6 0x14 src/tiny_adc.o + 0x000009b6 tiny_adc_ch1setup .text.tiny_adc_pid_setup - 0x000009de 0x14 src/tiny_adc.o - 0x000009de tiny_adc_pid_setup + 0x000009ca 0x14 src/tiny_adc.o + 0x000009ca tiny_adc_pid_setup .text.ReadCalibrationByte - 0x000009f2 0x12 src/tiny_adc.o - 0x000009f2 ReadCalibrationByte + 0x000009de 0x12 src/tiny_adc.o + 0x000009de ReadCalibrationByte .text.tiny_adc_setup - 0x00000a04 0x7a src/tiny_adc.o - 0x00000a04 tiny_adc_setup + 0x000009f0 0x7a src/tiny_adc.o + 0x000009f0 tiny_adc_setup .text.__vector_71 - 0x00000a7e 0x26 src/tiny_adc.o - 0x00000a7e __vector_71 + 0x00000a6a 0x26 src/tiny_adc.o + 0x00000a6a __vector_71 .text.tiny_dac_setup - 0x00000aa4 0x48 src/tiny_dac.o - 0x00000aa4 tiny_dac_setup + 0x00000a90 0x48 src/tiny_dac.o + 0x00000a90 tiny_dac_setup .text.tiny_dma_setup - 0x00000aec 0x12 src/tiny_dma.o - 0x00000aec tiny_dma_setup + 0x00000ad8 0x12 src/tiny_dma.o + 0x00000ad8 tiny_dma_setup .text.tiny_dma_flush - 0x00000afe 0x3a src/tiny_dma.o - 0x00000afe tiny_dma_flush + 0x00000aea 0x3a src/tiny_dma.o + 0x00000aea tiny_dma_flush .text.tiny_dma_delayed_set - 0x00000b38 0xc src/tiny_dma.o - 0x00000b38 tiny_dma_delayed_set + 0x00000b24 0xc src/tiny_dma.o + 0x00000b24 tiny_dma_delayed_set .text.tiny_dma_set_mode_0 - 0x00000b44 0xe4 src/tiny_dma.o - 0x00000b44 tiny_dma_set_mode_0 + 0x00000b30 0xe6 src/tiny_dma.o + 0x00000b30 tiny_dma_set_mode_0 + .text.tiny_dma_loop_mode_0 + 0x00000c16 0x2 src/tiny_dma.o + 0x00000c16 tiny_dma_loop_mode_0 .text.tiny_dma_set_mode_1 - 0x00000c28 0x112 src/tiny_dma.o - 0x00000c28 tiny_dma_set_mode_1 + 0x00000c18 0x112 src/tiny_dma.o + 0x00000c18 tiny_dma_set_mode_1 + .text.tiny_dma_loop_mode_1 + 0x00000d2a 0x2 src/tiny_dma.o + 0x00000d2a tiny_dma_loop_mode_1 .text.tiny_dma_set_mode_2 - 0x00000d3a 0x10c src/tiny_dma.o - 0x00000d3a tiny_dma_set_mode_2 + 0x00000d2c 0x10c src/tiny_dma.o + 0x00000d2c tiny_dma_set_mode_2 + .text.tiny_dma_loop_mode_2 + 0x00000e38 0x2 src/tiny_dma.o + 0x00000e38 tiny_dma_loop_mode_2 .text.tiny_dma_set_mode_3 - 0x00000e46 0x11c src/tiny_dma.o - 0x00000e46 tiny_dma_set_mode_3 + 0x00000e3a 0x11c src/tiny_dma.o + 0x00000e3a tiny_dma_set_mode_3 + .text.tiny_dma_loop_mode_3 + 0x00000f56 0x2 src/tiny_dma.o + 0x00000f56 tiny_dma_loop_mode_3 .text.tiny_dma_set_mode_4 - 0x00000f62 0x110 src/tiny_dma.o - 0x00000f62 tiny_dma_set_mode_4 + 0x00000f58 0x110 src/tiny_dma.o + 0x00000f58 tiny_dma_set_mode_4 + .text.tiny_dma_loop_mode_4 + 0x00001068 0x2 src/tiny_dma.o + 0x00001068 tiny_dma_loop_mode_4 .text.tiny_dma_set_mode_5 - 0x00001072 0x2 src/tiny_dma.o - 0x00001072 tiny_dma_set_mode_5 + 0x0000106a 0x2 src/tiny_dma.o + 0x0000106a tiny_dma_set_mode_5 .text.tiny_dma_set_mode_6 - 0x00001074 0xe6 src/tiny_dma.o - 0x00001074 tiny_dma_set_mode_6 + 0x0000106c 0xe6 src/tiny_dma.o + 0x0000106c tiny_dma_set_mode_6 + .text.tiny_dma_loop_mode_6 + 0x00001152 0x2 src/tiny_dma.o + 0x00001152 tiny_dma_loop_mode_6 .text.tiny_dma_set_mode_7 - 0x0000115a 0xe8 src/tiny_dma.o - 0x0000115a tiny_dma_set_mode_7 + 0x00001154 0xe8 src/tiny_dma.o + 0x00001154 tiny_dma_set_mode_7 + .text.tiny_dma_loop_mode_7 + 0x0000123c 0x2 src/tiny_dma.o + 0x0000123c tiny_dma_loop_mode_7 .text.__vector_6 - 0x00001242 0x54 src/tiny_dma.o - 0x00001242 __vector_6 + 0x0000123e 0xae src/tiny_dma.o + 0x0000123e __vector_6 .text.__vector_7 - 0x00001296 0x54 src/tiny_dma.o - 0x00001296 __vector_7 + 0x000012ec 0x54 src/tiny_dma.o + 0x000012ec __vector_7 .text.tiny_timer_setup - 0x000012ea 0x84 src/tiny_timer.o - 0x000012ea tiny_timer_setup + 0x00001340 0x84 src/tiny_timer.o + 0x00001340 tiny_timer_setup .text.__vector_83 - 0x0000136e 0xf4 src/tiny_timer.o - 0x0000136e __vector_83 + 0x000013c4 0xf4 src/tiny_timer.o + 0x000013c4 __vector_83 .text.tiny_uart_setup - 0x00001462 0x34 src/tiny_uart.o - 0x00001462 tiny_uart_setup + 0x000014b8 0x34 src/tiny_uart.o + 0x000014b8 tiny_uart_setup .text.tiny_spi_setup - 0x00001496 0x1c src/tiny_uart.o - 0x00001496 tiny_spi_setup + 0x000014ec 0x1c src/tiny_uart.o + 0x000014ec tiny_spi_setup .text.__vector_24 - 0x000014b2 0x16 src/tiny_uart.o - 0x000014b2 __vector_24 + 0x00001508 0x16 src/tiny_uart.o + 0x00001508 __vector_24 .text.__vector_25 - 0x000014c8 0x28 src/tiny_uart.o - 0x000014c8 __vector_25 + 0x0000151e 0x28 src/tiny_uart.o + 0x0000151e __vector_25 .text.sysclk_enable_module - 0x000014f0 0x18 src/ASF/common/services/clock/xmega/sysclk.o - 0x000014f0 sysclk_enable_module + 0x00001546 0x18 src/ASF/common/services/clock/xmega/sysclk.o + 0x00001546 sysclk_enable_module .text.sysclk_enable_usb - 0x00001508 0x6e src/ASF/common/services/clock/xmega/sysclk.o - 0x00001508 sysclk_enable_usb + 0x0000155e 0x6e src/ASF/common/services/clock/xmega/sysclk.o + 0x0000155e sysclk_enable_usb .text.udi_vendor_getsetting - 0x00001576 0x6 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o - 0x00001576 udi_vendor_getsetting + 0x000015cc 0x6 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + 0x000015cc udi_vendor_getsetting .text.udi_vendor_enable - 0x0000157c 0x16 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o - 0x0000157c udi_vendor_enable + 0x000015d2 0x16 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + 0x000015d2 udi_vendor_enable .text.udi_vendor_disable - 0x00001592 0xc src/ASF/common/services/usb/class/vendor/device/udi_vendor.o - 0x00001592 udi_vendor_disable + 0x000015e8 0xc src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + 0x000015e8 udi_vendor_disable .text.udi_vendor_setup - 0x0000159e 0x4c src/ASF/common/services/usb/class/vendor/device/udi_vendor.o - 0x0000159e udi_vendor_setup + 0x000015f4 0x4c src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + 0x000015f4 udi_vendor_setup .text.udc_next_desc_in_iface - 0x000015ea 0x64 src/ASF/common/services/usb/udc/udc.o + 0x00001640 0x64 src/ASF/common/services/usb/udc/udc.o .text.udc_valid_address - 0x0000164e 0xc src/ASF/common/services/usb/udc/udc.o + 0x000016a4 0xc src/ASF/common/services/usb/udc/udc.o .text.udc_update_iface_desc - 0x0000165a 0x74 src/ASF/common/services/usb/udc/udc.o + 0x000016b0 0x74 src/ASF/common/services/usb/udc/udc.o .text.udc_iface_disable - 0x000016ce 0x84 src/ASF/common/services/usb/udc/udc.o + 0x00001724 0x84 src/ASF/common/services/usb/udc/udc.o .text.udc_iface_enable - 0x00001752 0x64 src/ASF/common/services/usb/udc/udc.o + 0x000017a8 0x64 src/ASF/common/services/usb/udc/udc.o .text.udc_get_interface_desc - 0x000017b6 0xa src/ASF/common/services/usb/udc/udc.o - 0x000017b6 udc_get_interface_desc + 0x0000180c 0xa src/ASF/common/services/usb/udc/udc.o + 0x0000180c udc_get_interface_desc .text.udc_start - 0x000017c0 0x4 src/ASF/common/services/usb/udc/udc.o - 0x000017c0 udc_start + 0x00001816 0x4 src/ASF/common/services/usb/udc/udc.o + 0x00001816 udc_start .text.udc_reset - 0x000017c4 0x4a src/ASF/common/services/usb/udc/udc.o - 0x000017c4 udc_reset + 0x0000181a 0x4a src/ASF/common/services/usb/udc/udc.o + 0x0000181a udc_reset .text.udc_sof_notify - 0x0000180e 0x60 src/ASF/common/services/usb/udc/udc.o - 0x0000180e udc_sof_notify + 0x00001864 0x60 src/ASF/common/services/usb/udc/udc.o + 0x00001864 udc_sof_notify .text.udc_process_setup - 0x0000186e 0x718 src/ASF/common/services/usb/udc/udc.o - 0x0000186e udc_process_setup + 0x000018c4 0x71e src/ASF/common/services/usb/udc/udc.o + 0x000018c4 udc_process_setup .text.ccp_write_io - 0x00001f86 0xc src/ASF/xmega/drivers/cpu/ccp.o - 0x00001f86 ccp_write_io + 0x00001fe2 0xc src/ASF/xmega/drivers/cpu/ccp.o + 0x00001fe2 ccp_write_io .text.nvm_eeprom_read_buffer - 0x00001f92 0x30 src/ASF/xmega/drivers/nvm/nvm.o - 0x00001f92 nvm_eeprom_read_buffer + 0x00001fee 0x30 src/ASF/xmega/drivers/nvm/nvm.o + 0x00001fee nvm_eeprom_read_buffer .text.nvm_eeprom_load_byte_to_buffer - 0x00001fc2 0x24 src/ASF/xmega/drivers/nvm/nvm.o - 0x00001fc2 nvm_eeprom_load_byte_to_buffer + 0x0000201e 0x24 src/ASF/xmega/drivers/nvm/nvm.o + 0x0000201e nvm_eeprom_load_byte_to_buffer .text.nvm_eeprom_load_page_to_buffer - 0x00001fe6 0x3e src/ASF/xmega/drivers/nvm/nvm.o - 0x00001fe6 nvm_eeprom_load_page_to_buffer + 0x00002042 0x3e src/ASF/xmega/drivers/nvm/nvm.o + 0x00002042 nvm_eeprom_load_page_to_buffer .text.nvm_eeprom_atomic_write_page - 0x00002024 0x3a src/ASF/xmega/drivers/nvm/nvm.o - 0x00002024 nvm_eeprom_atomic_write_page + 0x00002080 0x3a src/ASF/xmega/drivers/nvm/nvm.o + 0x00002080 nvm_eeprom_atomic_write_page .text.nvm_read_byte - 0x0000205e 0x14 src/ASF/xmega/drivers/nvm/nvm_asm.o - 0x0000205e nvm_read_byte + 0x000020ba 0x14 src/ASF/xmega/drivers/nvm/nvm_asm.o + 0x000020ba nvm_read_byte .text.udd_sleep_mode - 0x00002072 0x52 src/ASF/xmega/drivers/usb/usb_device.o + 0x000020ce 0x52 src/ASF/xmega/drivers/usb/usb_device.o .text.udd_ctrl_init - 0x000020c4 0x4e src/ASF/xmega/drivers/usb/usb_device.o + 0x00002120 0x4e src/ASF/xmega/drivers/usb/usb_device.o .text.udd_ctrl_stall_data - 0x00002112 0x1c src/ASF/xmega/drivers/usb/usb_device.o + 0x0000216e 0x1c src/ASF/xmega/drivers/usb/usb_device.o .text.udd_ctrl_send_zlp_in - 0x0000212e 0x1c src/ASF/xmega/drivers/usb/usb_device.o + 0x0000218a 0x1c src/ASF/xmega/drivers/usb/usb_device.o .text.udd_ctrl_endofrequest - 0x0000214a 0x10 src/ASF/xmega/drivers/usb/usb_device.o + 0x000021a6 0x10 src/ASF/xmega/drivers/usb/usb_device.o .text.udd_ctrl_in_sent - 0x0000215a 0xd8 src/ASF/xmega/drivers/usb/usb_device.o + 0x000021b6 0xd8 src/ASF/xmega/drivers/usb/usb_device.o .text.udd_ep_get_size - 0x00002232 0x4c src/ASF/xmega/drivers/usb/usb_device.o + 0x0000228e 0x4c src/ASF/xmega/drivers/usb/usb_device.o .text.udd_ep_get_job - 0x0000227e 0x36 src/ASF/xmega/drivers/usb/usb_device.o + 0x000022da 0x36 src/ASF/xmega/drivers/usb/usb_device.o .text.udd_ctrl_interrupt_tc_setup - 0x000022b4 0xde src/ASF/xmega/drivers/usb/usb_device.o + 0x00002310 0xde src/ASF/xmega/drivers/usb/usb_device.o .text.udd_ep_trans_complet - 0x00002392 0x2b4 src/ASF/xmega/drivers/usb/usb_device.o + 0x000023ee 0x2b4 src/ASF/xmega/drivers/usb/usb_device.o .text.udd_attach - 0x00002646 0x46 src/ASF/xmega/drivers/usb/usb_device.o - 0x00002646 udd_attach + 0x000026a2 0x46 src/ASF/xmega/drivers/usb/usb_device.o + 0x000026a2 udd_attach .text.udd_enable - 0x0000268c 0xce src/ASF/xmega/drivers/usb/usb_device.o - 0x0000268c udd_enable + 0x000026e8 0xce src/ASF/xmega/drivers/usb/usb_device.o + 0x000026e8 udd_enable .text.udd_set_address - 0x0000275a 0x6 src/ASF/xmega/drivers/usb/usb_device.o - 0x0000275a udd_set_address + 0x000027b6 0x6 src/ASF/xmega/drivers/usb/usb_device.o + 0x000027b6 udd_set_address .text.udd_getaddress - 0x00002760 0x6 src/ASF/xmega/drivers/usb/usb_device.o - 0x00002760 udd_getaddress + 0x000027bc 0x6 src/ASF/xmega/drivers/usb/usb_device.o + 0x000027bc udd_getaddress .text.udd_set_setup_payload - 0x00002766 0xe src/ASF/xmega/drivers/usb/usb_device.o - 0x00002766 udd_set_setup_payload + 0x000027c2 0xe src/ASF/xmega/drivers/usb/usb_device.o + 0x000027c2 udd_set_setup_payload .text.udd_ep_alloc - 0x00002774 0xea src/ASF/xmega/drivers/usb/usb_device.o - 0x00002774 udd_ep_alloc + 0x000027d0 0xea src/ASF/xmega/drivers/usb/usb_device.o + 0x000027d0 udd_ep_alloc .text.udd_ep_is_halted - 0x0000285e 0x36 src/ASF/xmega/drivers/usb/usb_device.o - 0x0000285e udd_ep_is_halted + 0x000028ba 0x36 src/ASF/xmega/drivers/usb/usb_device.o + 0x000028ba udd_ep_is_halted .text.udd_ep_clear_halt - 0x00002894 0x6a src/ASF/xmega/drivers/usb/usb_device.o - 0x00002894 udd_ep_clear_halt + 0x000028f0 0x6a src/ASF/xmega/drivers/usb/usb_device.o + 0x000028f0 udd_ep_clear_halt .text.udd_ep_run - 0x000028fe 0x174 src/ASF/xmega/drivers/usb/usb_device.o - 0x000028fe udd_ep_run + 0x0000295a 0x174 src/ASF/xmega/drivers/usb/usb_device.o + 0x0000295a udd_ep_run .text.udd_ep_abort - 0x00002a72 0x92 src/ASF/xmega/drivers/usb/usb_device.o - 0x00002a72 udd_ep_abort + 0x00002ace 0x92 src/ASF/xmega/drivers/usb/usb_device.o + 0x00002ace udd_ep_abort .text.udd_ep_free - 0x00002b04 0x38 src/ASF/xmega/drivers/usb/usb_device.o - 0x00002b04 udd_ep_free + 0x00002b60 0x38 src/ASF/xmega/drivers/usb/usb_device.o + 0x00002b60 udd_ep_free .text.udd_ep_set_halt - 0x00002b3c 0x5a src/ASF/xmega/drivers/usb/usb_device.o - 0x00002b3c udd_ep_set_halt + 0x00002b98 0x5a src/ASF/xmega/drivers/usb/usb_device.o + 0x00002b98 udd_ep_set_halt .text.__vector_125 - 0x00002b96 0x164 src/ASF/xmega/drivers/usb/usb_device.o - 0x00002b96 __vector_125 + 0x00002bf2 0x164 src/ASF/xmega/drivers/usb/usb_device.o + 0x00002bf2 __vector_125 .text.__vector_126 - 0x00002cfa 0x1d4 src/ASF/xmega/drivers/usb/usb_device.o - 0x00002cfa __vector_126 + 0x00002d56 0x1d4 src/ASF/xmega/drivers/usb/usb_device.o + 0x00002d56 __vector_126 .text.libgcc.div - 0x00002ece 0x28 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_udivmodhi4.o) - 0x00002ece __udivmodhi4 + 0x00002f2a 0x28 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_udivmodhi4.o) + 0x00002f2a __udivmodhi4 .text.libgcc.div - 0x00002ef6 0x26 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_divmodhi4.o) - 0x00002ef6 _div - 0x00002ef6 __divmodhi4 - .text.libgcc 0x00002f1c 0xc c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_tablejump2.o) - 0x00002f1c __tablejump2__ + 0x00002f52 0x26 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_divmodhi4.o) + 0x00002f52 _div + 0x00002f52 __divmodhi4 + .text.libgcc 0x00002f78 0xc c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_tablejump2.o) + 0x00002f78 __tablejump2__ .text.avr-libc - 0x00002f28 0x12 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/../../../../avr/lib/avrxmega2\libc.a(memcpy.o) - 0x00002f28 memcpy - 0x00002f3a . = ALIGN (0x2) + 0x00002f84 0x12 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/../../../../avr/lib/avrxmega2\libc.a(memcpy.o) + 0x00002f84 memcpy + 0x00002f96 . = ALIGN (0x2) *(.fini9) - .fini9 0x00002f3a 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_exit.o) - 0x00002f3a _exit - 0x00002f3a exit + .fini9 0x00002f96 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_exit.o) + 0x00002f96 _exit + 0x00002f96 exit *(.fini9) *(.fini8) *(.fini8) @@ -2687,11 +2696,11 @@ END GROUP *(.fini1) *(.fini1) *(.fini0) - .fini0 0x00002f3a 0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_exit.o) + .fini0 0x00002f96 0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_exit.o) *(.fini0) - 0x00002f3e _etext = . + 0x00002f9a _etext = . -.data 0x00802000 0x8c load address 0x00002f3e +.data 0x00802000 0x8c load address 0x00002f9a 0x00802000 PROVIDE (__data_start, .) *(.data) *(.data*) @@ -2853,8 +2862,8 @@ END GROUP COMMON 0x00802bca 0x6 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o 0x00802bca sleepmgr_locks 0x00802bd0 PROVIDE (__bss_end, .) - 0x00002f3e __data_load_start = LOADADDR (.data) - 0x00002fca __data_load_end = (__data_load_start + SIZEOF (.data)) + 0x00002f9a __data_load_start = LOADADDR (.data) + 0x00003026 __data_load_end = (__data_load_start + SIZEOF (.data)) .noinit 0x00802bd0 0x0 [!provide] PROVIDE (__noinit_start, .) @@ -2985,73 +2994,73 @@ END GROUP .debug_pubnames *(.debug_pubnames) -.debug_info 0x00000000 0xdb18 +.debug_info 0x00000000 0xdb75 *(.debug_info .gnu.linkonce.wi.*) .debug_info 0x00000000 0x114b src/tiny_calibration.o .debug_info 0x0000114b 0x297 src/tiny_dig.o .debug_info 0x000013e2 0x285 src/tiny_eeprom.o .debug_info 0x00001667 0x106 src/ASF/common/boards/user_board/init.o - .debug_info 0x0000176d 0x145c src/main.o - .debug_info 0x00002bc9 0x9cc src/tiny_adc.o - .debug_info 0x00003595 0x5f0 src/tiny_dac.o - .debug_info 0x00003b85 0x1412 src/tiny_dma.o - .debug_info 0x00004f97 0x17b4 src/tiny_timer.o - .debug_info 0x0000674b 0x502 src/tiny_uart.o - .debug_info 0x00006c4d 0xc3d src/ASF/common/services/clock/xmega/sysclk.o - .debug_info 0x0000788a 0x121 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o - .debug_info 0x000079ab 0x52f src/ASF/common/services/usb/class/vendor/device/udi_vendor.o - .debug_info 0x00007eda 0x5e9 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o - .debug_info 0x000084c3 0x2395 src/ASF/common/services/usb/udc/udc.o - .debug_info 0x0000a858 0x91 src/ASF/xmega/drivers/cpu/ccp.o - .debug_info 0x0000a8e9 0x13a6 src/ASF/xmega/drivers/nvm/nvm.o - .debug_info 0x0000bc8f 0x91 src/ASF/xmega/drivers/nvm/nvm_asm.o - .debug_info 0x0000bd20 0x1df8 src/ASF/xmega/drivers/usb/usb_device.o + .debug_info 0x0000176d 0x14b9 src/main.o + .debug_info 0x00002c26 0x9cc src/tiny_adc.o + .debug_info 0x000035f2 0x5f0 src/tiny_dac.o + .debug_info 0x00003be2 0x1412 src/tiny_dma.o + .debug_info 0x00004ff4 0x17b4 src/tiny_timer.o + .debug_info 0x000067a8 0x502 src/tiny_uart.o + .debug_info 0x00006caa 0xc3d src/ASF/common/services/clock/xmega/sysclk.o + .debug_info 0x000078e7 0x121 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_info 0x00007a08 0x52f src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_info 0x00007f37 0x5e9 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_info 0x00008520 0x2395 src/ASF/common/services/usb/udc/udc.o + .debug_info 0x0000a8b5 0x91 src/ASF/xmega/drivers/cpu/ccp.o + .debug_info 0x0000a946 0x13a6 src/ASF/xmega/drivers/nvm/nvm.o + .debug_info 0x0000bcec 0x91 src/ASF/xmega/drivers/nvm/nvm_asm.o + .debug_info 0x0000bd7d 0x1df8 src/ASF/xmega/drivers/usb/usb_device.o -.debug_abbrev 0x00000000 0x24be +.debug_abbrev 0x00000000 0x24f0 *(.debug_abbrev) .debug_abbrev 0x00000000 0x271 src/tiny_calibration.o .debug_abbrev 0x00000271 0xcc src/tiny_dig.o .debug_abbrev 0x0000033d 0x139 src/tiny_eeprom.o .debug_abbrev 0x00000476 0x8b src/ASF/common/boards/user_board/init.o - .debug_abbrev 0x00000501 0x316 src/main.o - .debug_abbrev 0x00000817 0x1f0 src/tiny_adc.o - .debug_abbrev 0x00000a07 0x161 src/tiny_dac.o - .debug_abbrev 0x00000b68 0x238 src/tiny_dma.o - .debug_abbrev 0x00000da0 0x175 src/tiny_timer.o - .debug_abbrev 0x00000f15 0x12b src/tiny_uart.o - .debug_abbrev 0x00001040 0x2cd src/ASF/common/services/clock/xmega/sysclk.o - .debug_abbrev 0x0000130d 0x80 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o - .debug_abbrev 0x0000138d 0x1e3 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o - .debug_abbrev 0x00001570 0xef src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o - .debug_abbrev 0x0000165f 0x471 src/ASF/common/services/usb/udc/udc.o - .debug_abbrev 0x00001ad0 0x14 src/ASF/xmega/drivers/cpu/ccp.o - .debug_abbrev 0x00001ae4 0x3f4 src/ASF/xmega/drivers/nvm/nvm.o - .debug_abbrev 0x00001ed8 0x12 src/ASF/xmega/drivers/nvm/nvm_asm.o - .debug_abbrev 0x00001eea 0x5d4 src/ASF/xmega/drivers/usb/usb_device.o + .debug_abbrev 0x00000501 0x348 src/main.o + .debug_abbrev 0x00000849 0x1f0 src/tiny_adc.o + .debug_abbrev 0x00000a39 0x161 src/tiny_dac.o + .debug_abbrev 0x00000b9a 0x238 src/tiny_dma.o + .debug_abbrev 0x00000dd2 0x175 src/tiny_timer.o + .debug_abbrev 0x00000f47 0x12b src/tiny_uart.o + .debug_abbrev 0x00001072 0x2cd src/ASF/common/services/clock/xmega/sysclk.o + .debug_abbrev 0x0000133f 0x80 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_abbrev 0x000013bf 0x1e3 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_abbrev 0x000015a2 0xef src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_abbrev 0x00001691 0x471 src/ASF/common/services/usb/udc/udc.o + .debug_abbrev 0x00001b02 0x14 src/ASF/xmega/drivers/cpu/ccp.o + .debug_abbrev 0x00001b16 0x3f4 src/ASF/xmega/drivers/nvm/nvm.o + .debug_abbrev 0x00001f0a 0x12 src/ASF/xmega/drivers/nvm/nvm_asm.o + .debug_abbrev 0x00001f1c 0x5d4 src/ASF/xmega/drivers/usb/usb_device.o -.debug_line 0x00000000 0xac63 +.debug_line 0x00000000 0xaced *(.debug_line .debug_line.* .debug_line_end) .debug_line 0x00000000 0xb9d src/tiny_calibration.o .debug_line 0x00000b9d 0x7d5 src/tiny_dig.o .debug_line 0x00001372 0x821 src/tiny_eeprom.o .debug_line 0x00001b93 0x7b7 src/ASF/common/boards/user_board/init.o - .debug_line 0x0000234a 0xb2c src/main.o - .debug_line 0x00002e76 0x994 src/tiny_adc.o - .debug_line 0x0000380a 0x830 src/tiny_dac.o - .debug_line 0x0000403a 0x137a src/tiny_dma.o - .debug_line 0x000053b4 0x8de src/tiny_timer.o - .debug_line 0x00005c92 0x87e src/tiny_uart.o - .debug_line 0x00006510 0x738 src/ASF/common/services/clock/xmega/sysclk.o - .debug_line 0x00006c48 0x455 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o - .debug_line 0x0000709d 0x615 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o - .debug_line 0x000076b2 0x51b src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o - .debug_line 0x00007bcd 0xecd src/ASF/common/services/usb/udc/udc.o - .debug_line 0x00008a9a 0x6e src/ASF/xmega/drivers/cpu/ccp.o - .debug_line 0x00008b08 0xb42 src/ASF/xmega/drivers/nvm/nvm.o - .debug_line 0x0000964a 0x11f src/ASF/xmega/drivers/nvm/nvm_asm.o - .debug_line 0x00009769 0x14fa src/ASF/xmega/drivers/usb/usb_device.o + .debug_line 0x0000234a 0xb68 src/main.o + .debug_line 0x00002eb2 0x994 src/tiny_adc.o + .debug_line 0x00003846 0x830 src/tiny_dac.o + .debug_line 0x00004076 0x13c8 src/tiny_dma.o + .debug_line 0x0000543e 0x8de src/tiny_timer.o + .debug_line 0x00005d1c 0x87e src/tiny_uart.o + .debug_line 0x0000659a 0x738 src/ASF/common/services/clock/xmega/sysclk.o + .debug_line 0x00006cd2 0x455 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_line 0x00007127 0x615 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_line 0x0000773c 0x51b src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_line 0x00007c57 0xecd src/ASF/common/services/usb/udc/udc.o + .debug_line 0x00008b24 0x6e src/ASF/xmega/drivers/cpu/ccp.o + .debug_line 0x00008b92 0xb42 src/ASF/xmega/drivers/nvm/nvm.o + .debug_line 0x000096d4 0x11f src/ASF/xmega/drivers/nvm/nvm_asm.o + .debug_line 0x000097f3 0x14fa src/ASF/xmega/drivers/usb/usb_device.o -.debug_frame 0x00000000 0xf28 +.debug_frame 0x00000000 0xf30 *(.debug_frame) .debug_frame 0x00000000 0xd0 src/tiny_calibration.o .debug_frame 0x000000d0 0x24 src/tiny_dig.o @@ -3060,14 +3069,14 @@ END GROUP .debug_frame 0x0000016c 0xd8 src/main.o .debug_frame 0x00000244 0x90 src/tiny_adc.o .debug_frame 0x000002d4 0x30 src/tiny_dac.o - .debug_frame 0x00000304 0x1f8 src/tiny_dma.o - .debug_frame 0x000004fc 0x78 src/tiny_timer.o - .debug_frame 0x00000574 0x7c src/tiny_uart.o - .debug_frame 0x000005f0 0x80 src/ASF/common/services/clock/xmega/sysclk.o - .debug_frame 0x00000670 0x8c src/ASF/common/services/usb/class/vendor/device/udi_vendor.o - .debug_frame 0x000006fc 0x114 src/ASF/common/services/usb/udc/udc.o - .debug_frame 0x00000810 0x340 src/ASF/xmega/drivers/nvm/nvm.o - .debug_frame 0x00000b50 0x3d8 src/ASF/xmega/drivers/usb/usb_device.o + .debug_frame 0x00000304 0x200 src/tiny_dma.o + .debug_frame 0x00000504 0x78 src/tiny_timer.o + .debug_frame 0x0000057c 0x7c src/tiny_uart.o + .debug_frame 0x000005f8 0x80 src/ASF/common/services/clock/xmega/sysclk.o + .debug_frame 0x00000678 0x8c src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_frame 0x00000704 0x114 src/ASF/common/services/usb/udc/udc.o + .debug_frame 0x00000818 0x340 src/ASF/xmega/drivers/nvm/nvm.o + .debug_frame 0x00000b58 0x3d8 src/ASF/xmega/drivers/usb/usb_device.o .debug_str 0x00000000 0x30168 *(.debug_str) @@ -3079,13 +3088,13 @@ END GROUP 0x27aa5 (size before relaxing) .debug_str 0x00028383 0x36 src/ASF/common/boards/user_board/init.o 0x27998 (size before relaxing) - .debug_str 0x000283b9 0x617 src/main.o - 0x28b2e (size before relaxing) - .debug_str 0x000289d0 0xaf0 src/tiny_adc.o + .debug_str 0x000283b9 0x6aa src/main.o + 0x28bc1 (size before relaxing) + .debug_str 0x00028a63 0xaf0 src/tiny_adc.o 0x28c48 (size before relaxing) - .debug_str 0x000294c0 0x130 src/tiny_dac.o + .debug_str 0x00029553 0x130 src/tiny_dac.o 0x28190 (size before relaxing) - .debug_str 0x000295f0 0xfce src/tiny_dma.o + .debug_str 0x00029683 0xf3b src/tiny_dma.o 0x2951b (size before relaxing) .debug_str 0x0002a5be 0xe8a src/tiny_timer.o 0x29333 (size before relaxing) @@ -3106,21 +3115,21 @@ END GROUP .debug_str 0x0002cc0c 0x355c src/ASF/xmega/drivers/usb/usb_device.o 0x2b6d6 (size before relaxing) -.debug_loc 0x00000000 0x37be +.debug_loc 0x00000000 0x37a1 *(.debug_loc) .debug_loc 0x00000000 0x2dc src/tiny_calibration.o .debug_loc 0x000002dc 0xb6 src/tiny_eeprom.o - .debug_loc 0x00000392 0x12c src/main.o - .debug_loc 0x000004be 0x199 src/tiny_adc.o - .debug_loc 0x00000657 0x2f src/tiny_dac.o - .debug_loc 0x00000686 0x264 src/tiny_dma.o - .debug_loc 0x000008ea 0x11c src/tiny_timer.o - .debug_loc 0x00000a06 0xa5 src/tiny_uart.o - .debug_loc 0x00000aab 0x320 src/ASF/common/services/clock/xmega/sysclk.o - .debug_loc 0x00000dcb 0x1a2 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o - .debug_loc 0x00000f6d 0x4d3 src/ASF/common/services/usb/udc/udc.o - .debug_loc 0x00001440 0x11f9 src/ASF/xmega/drivers/nvm/nvm.o - .debug_loc 0x00002639 0x1185 src/ASF/xmega/drivers/usb/usb_device.o + .debug_loc 0x00000392 0xf5 src/main.o + .debug_loc 0x00000487 0x199 src/tiny_adc.o + .debug_loc 0x00000620 0x2f src/tiny_dac.o + .debug_loc 0x0000064f 0x27e src/tiny_dma.o + .debug_loc 0x000008cd 0x11c src/tiny_timer.o + .debug_loc 0x000009e9 0xa5 src/tiny_uart.o + .debug_loc 0x00000a8e 0x320 src/ASF/common/services/clock/xmega/sysclk.o + .debug_loc 0x00000dae 0x1a2 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_loc 0x00000f50 0x4d3 src/ASF/common/services/usb/udc/udc.o + .debug_loc 0x00001423 0x11f9 src/ASF/xmega/drivers/nvm/nvm.o + .debug_loc 0x0000261c 0x1185 src/ASF/xmega/drivers/usb/usb_device.o .debug_macinfo *(.debug_macinfo) diff --git a/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.srec b/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.srec index d0c93195..a38ccc24 100644 --- a/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.srec +++ b/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.srec @@ -1,767 +1,773 @@ S01500005553425F42554C4B5F544553542E73726563F9 -S11300001DC1000037C1000035C1000033C100002C -S113001031C100002FC100000C9421090C944B093C -S113002029C1000027C1000025C1000023C1000030 -S113003021C100001FC100001DC100001BC1000040 -S113004019C1000017C1000015C1000013C1000050 -S113005011C100000FC100000DC100000BC1000060 -S11300600C94590A0C94640A05C1000003C10000F1 -S113007001C10000FFC00000FDC00000FBC0000083 -S1130080F9C00000F7C00000F5C00000F3C0000094 -S1130090F1C00000EFC00000EDC00000EBC00000A4 -S11300A0E9C00000E7C00000E5C00000E3C00000B4 -S11300B0E1C00000DFC00000DDC00000DBC00000C4 -S11300C0D9C00000D7C00000D5C00000D3C00000D4 -S11300D0D1C00000CFC00000CDC00000CBC00000E4 -S11300E0C9C00000C7C00000C5C00000C3C00000F4 -S11300F0C1C00000BFC00000BDC00000BBC0000004 -S1130100B9C00000B7C00000B5C00000B3C0000013 -S1130110B1C00000AFC00000ADC00000B0C400001A -S1130120A9C00000A7C00000A5C00000A3C0000033 -S1130130A1C000009FC000009DC000009BC0000043 -S113014099C0000097C0000095C000000C94B70946 -S113015091C000008FC000008DC000008BC0000063 -S113016089C0000087C0000085C0000083C0000073 -S113017081C000007FC000007DC000007BC0000083 -S113018079C0000077C0000075C0000073C0000093 -S113019071C000006FC000006DC000006BC00000A3 -S11301A069C0000067C0000065C0000063C00000B3 -S11301B061C000005FC000005DC000005BC00000C3 -S11301C059C0000057C0000055C0000053C00000D3 -S11301D051C000004FC000004DC000004BC00000E3 -S11301E049C0000047C0000045C0000043C00000F3 -S11301F041C000000C94CB150C947D1630043204DD -S11302003404360438043A043C043E04620C870C7B -S1130210AA0CCD0CD60CDB0C310D360D550DE70CAC -S1130220F10CFB0C090D0C0D0F0D1A0D250D2711EA -S11302302A112D11301133113611391111241FBE19 -S1130240CFEFCDBFDFE2DEBF10E2A0E0B0E2EEE32D -S1130250FFE202C005900D92AC38B107D9F72BE24A -S1130260ACE8B0E201C01D92A03DB207E1F7ACD208 -S11302700C949D17C5CECF93DF93C0E5D0E084E006 -S11302808E838CE1B6D3E0E6F0E083838BEB868348 -S113029080E8858381E0808388ED84BF10924100EB -S11302A083E08883E0E5F0E081818330E9F7E0E5ED -S11302B0F0E080818160808388E18583818180FF93 -S11302C0FDCFE0E5F0E0808180618083818184FF5F -S11302D0FDCF88ED84BF84E080934000DF91CF910F -S11302E00895E0E7F0E085818E7F8583E0E0FAE021 -S11302F08FEB9DE586A397A380EE9EE280A391A356 -S113030082E0808308958091200A9091210A813EA1 -S11303102EE2920720F02091722120936A00803E01 -S11303202EE2920720F420916F2120936A002091FD -S11303300520222331F080910520815080930520EF -S113034035C0885F9A42813D974080F110928C209D -S113035080918D2090918E20A0918F20B09190203B -S11303600196A11DB11D80938D2090938E20A093A2 -S11303708F20B093902080918D2090918E20A09119 -S11303808F20B0919020892F9A2FAB2FBB27EEE7B7 -S1130390F1E2848B80918D2090918E20A0918F200A -S11303A0B0919020838B86E0809305208091072074 -S11303B0909108200196B1F4809109208F3F91F02B -S11303C080910620811106C080910620815080937F -S11303D006200895809114019091150180930720BF -S11303E0909308200895009709F466C00CF09C01CE -S11303F0992334F422273327281B390B51E001C0F9 -S113040050E0E8E6F0E0838190E0809370219093DF -S1130410712180917021909171219695982F882750 -S11304209795879580937021909371214281809153 -S1130430702190917121840F911D8093702190936C -S1130440712100008091702190917121821793078E -S113045028F41092702110927121089580917021D6 -S113046090917121820F931F8115904238F08FEF84 -S11304709FE180937021909371210895552359F041 -S11304808091702190917121821B930B8093702134 -S1130490909371210AC08091702190917121280F4D -S11304A0391F209370213093712180917021909194 -S11304B071218F7780936A000895CF93DF93C09161 -S11304C0200AD091210A80910320909104209E015A -S11304D0281B390B209373213093742180918C2035 -S11304E081114DC080917321909174218E3C9F4F56 -S11304F0E4F480917321909174218B369F4FACF07A -S113050080910220882331F08091022081508093D1 -S1130510022035C080916A008093722181E080932B -S11305208C208CE0809302202AC08CE080930220EF -S113053080917321909174218A369F4F1CF08FEF24 -S11305409FEF02C081E090E080936D2190936E2133 -S1130550809173219091742120916D2130916E21AD -S113056060E370E00E947B17261B370B20936D21FC -S113057030936E2180916D2190916E2134DF8091B2 -S11305808C20813029F58091732190917421C39737 -S113059094F080910220882331F0809102208150D0 -S11305A08093022015C080916A0080936F2183E0BC -S11305B080938C200DC08091732190917421873990 -S11305C091051CF481E090E002C08FEF9FEF0BDFF8 -S11305D0C0930320D0930420DF91CF910895861710 -S11305E0970779F06817790728F49C01261B370BC5 -S11305F0B90109C08617970718F4681B790B03C063 -S1130600089560E070E0862F972F08950F931F934D -S1130610CF93DF938091002090910120892B51F09A -S11306208091002090910120019780930020909365 -S113063001204DC080E490E080930020909301203D -S11306408091072090910820019609F440C0809180 -S113065014019091150120910920263018F467E7C0 -S113066071E002C06EEE72E00E946717082F192F26 -S1130670C82FD12F80910720909108208C179D07B7 -S113068080F46091072070910820802F912FA7DFBC -S1130690029738F080EC9DE58093360A9093370AF0 -S11306A016C08091072090910820C817D90778F4C4 -S11306B06091072070910820802F912F90DF02977E -S11306C030F08FEB9DE58093360A9093370ADF91E3 -S11306D0CF911F910F910895AC01460F571F861BB0 -S11306E0970BE0E0FAE020A131A124173507D8F7F1 -S11306F020A131A182179307B0F70895E0E8F6E04E -S11307008FE0808385E0848308951F93CF93DF93E4 -S1130710C0E4D0E0198180E4898340E250E068EAD3 -S11307207BE280E290E00E94C90F1983DF91CF91B0 -S11307301F9108951F93CF93DF93C0E4D0E01981F4 -S113074080E489838BEA95E20E94F30F81E00E94A2 -S113075012101983DF91CF911F91089508950F937B -S11307601F9380910920811114C02091962087E75E -S113077091E0289FA001299F500D112444535A4D04 -S11307800FEA13E02EEE32E060E081E80E947F146D -S113079013C0209196208EEE92E0289FA001299FFD -S11307A0500D112444535A4D0FEA13E02EEE32E05B -S11307B060E081E80E947F141F910F9108951CBE90 -S11307C0EEEFF0E409950895A0DF8091A82B88232B -S11307D069F080E2E8EAFBE2ABEAB5E201900D924F -S11307E08A95E1F71092AB25A5DFE9DF87E08093D6 -S11307F0A200789440DDB2DFE3D754D177D160E032 -S113080080E000D1ECD08CE0E0D06FD52AD643D67E -S113081075DF89E0E0E8F0E2AEE7B1E201900D9225 -S11308208A95E1F7000000000000000000000000CD -S113083000000000000000000000000000000000B4 -S113084080919120882371F3E091AA238E2F90E068 -S113085088309105A0F4FC01E250FF4F0C948E17F0 -S113086071D10DC0E1D10BC068D209C0ECD207C070 -S113087078D305C0FED303C0FDD301C06ED410925B -S11308809120D0CF08950895CF93DF93A0E0B1E0F5 -S113089054968C915497EEE7F1E2818755968C91AA -S11308A05597828794968C919497838795968C918B -S11308B095978487C0E0DAE088A1858B89A1868B2F -S11308C054968D919C9155978634914080F08091F7 -S11308D0140190911501893A914048F480911401D2 -S11308E0909115018093C82B9093C92B000080919F -S11308F09420882339F0F5DC1092942081E08093D1 -S1130900932035C080919320882341F080918C20DE -S1130910833019F4F8DC7ADE01C0CFDD80919220B7 -S1130920882351F080911401909115018093C82B74 -S11309309093C92B1092922080910920853060F405 -S1130940209114013091150181E02737314008F0DE -S113095080E0809396200BC0209114013091150102 -S113096081E02E3E324008F080E080939620DF91B3 -S1130970CF9108950F931F9381E0809399208093E2 -S113098094200FEA13E02DE730E04CEC55E260E0F0 -S113099081E80E947F1481E01F910F9108951092C5 -S11309A09920089581E0089581E00895E0E0F2E05F -S11309B010A2982F9C71936890A3881F8827881F82 -S11309C0880F81A312A216A20895E0E0F2E010AA13 -S11309D0836880AB80E181AB12AA16AA0895E0E097 -S11309E0F2E010A683E880A78FE281A712A616A6DC -S11309F00895AAECB1E092E09C93E82FF0E0849192 -S1130A001C920895CF93DF93E0E7F0E091819D7FFE -S1130A10918310920002623031F1E0E0F2E09CE157 -S1130A20918390E49283811102C080E401C080EC40 -S1130A3080930302613011F084E001C083E0C0E0E0 -S1130A40D2E08C8380E2D5DF8C8781E2D2DF8D8790 -S1130A50188E198E81E08883C2DF0EC080EC8093EB -S1130A60030284E0ECCFE0E0F2E09EE1918390E4C5 -S1130A7092838111F3CFD9CFDF91CF9108951F9243 -S1130A800F920FB60F9211248F9300000000000004 -S1130A90000081E0809323028F910F900FBE0F908E -S1130AA01F901895CF93DF93E0E7F0E082818B7F6E -S1130AB08283C0E2D3E08DE0888380E4898389E087 -S1130AC08A8383E396DF888782E393DF898787E3DA -S1130AD090DF8A8786E38DDF8B87E0E2F6E0808112 -S1130AE0836080831482DF91CF910895E0E7F0E082 -S1130AF080818E7F808383E8809300010895E0E005 -S1130B00F1E0108A80E4808B10A280A310AA80AB4D -S1130B10E0E4F1E0108280831092982010929720F4 -S1130B2081E08093962010927C2110927D21109276 -S1130B307A2110927B2108958093AA2381E08093E7 -S1130B4091200895CF93DF9310920920D8DFC0E05D -S1130B50D1E01EAA84E288AB19AA49E54AAB32E087 -S1130B603BAB60910B2070910C206CAB7DAB6BEABE -S1130B7073E268AF79AF1AAE9BE39CAF93E09093B6 -S1130B803D0110923E0128A9206828AB109246012D -S1130B90E0E4F1E08083109241014093420190939C -S1130BA0430140910D2050910E20409344015093F5 -S1130BB045014AE951E2409348015093490110929A -S1130BC04A0129E320934C0190934D0110924E0168 -S1130BD0908190689083188A90E4988B888B198A06 -S1130BE095E99A8B90E19B8B4EEE52E04C8B5D8B9A -S1130BF0888F398F1A8E8CEC95E28C8F9D8F1E8E88 -S1130C0068EC70E084EF91E067DD88EC90E080931D -S1130C1007209093082081E08093062088898068CB -S1130C20888BDF91CF9108951F93CF93DF9311E0C9 -S1130C301093092064DFC0E0D1E018AA80E488ABF7 -S1130C4084E088AB19AA1AAA4BE44BAB1CAA1DAAD0 -S1130C501EAA8AE090E288AF99AF1AAE70EA7CAF20 -S1130C6068E060933D0110923E0188A9806A88ABD8 -S1130C70E0EAF8E085E58083808310924601E0E4B1 -S1130C80F1E084E280831092410199E5909342015E -S1130C9032E030934301A0910B20B0910C20A0933B -S1130CA04401B0934501ABEAB3E2A0934801B09389 -S1130CB0490110924A019BE390934C0193E0909375 -S1130CC04D0110924E0120812068208388A399A3AE -S1130CD025E92AA34BA34EEE52E04CA35DA378A7CB -S1130CE069A71AA66AEB78E26CA77DA71EA6888B73 -S1130CF0998B2A8B90E19B8B4C8B5D8B888F398FE2 -S1130D001A8E8CEC95E28C8F9D8F1E8E68EC70E0B1 -S1130D1084EF91E0E1DC88EC90E0809307209093ED -S1130D2008201093062088A1806888A38889806899 -S1130D30888BDF91CF911F9108951F93CF93DF93F9 -S1130D4012E010930920DBDEC0E0D1E01EAA84E2A9 -S1130D5088AB19AA39E53AAB1BAB40910B205091F3 -S1130D600C204CAB5DAB4BEA53E248AF59AF1AAE23 -S1130D709BE39CAF93E090933D0110923E0128A920 -S1130D80206828AB10924601E0E4F1E080831092E1 -S1130D904101309342019093430120910D20309101 -S1130DA00E2020934401309345012AE931E2209337 -S1130DB048013093490110924A0129E320934C01E0 -S1130DC090934D0110924E01908190689083188AFF -S1130DD090E4988B888B198A45E94A8B90E19B8B28 -S1130DE02EEE32E02C8B3D8B888F198F1A8E6CEC93 -S1130DF075E26C8F7D8F1E8E88A319A24AA39BA3D4 -S1130E002CA33DA384E388A719A71AA68AEB98E22A -S1130E108CA79DA71EA668EC70E084EF91E05CDCD3 -S1130E2088EC90E0809307209093082081E08093E1 -S1130E30062088898068888B88A1806888A3DF91D0 -S1130E40CF911F9108951F93CF93DF9313E01093D5 -S1130E50092055DEC0E0D1E018A250E458A384E094 -S1130E6088A319A21AA24BE44BA31CA21DA21EA282 -S1130E708AE090E288A799A71AA630EA3CA728E05E -S1130E802DA71EA688A1806A88A385E58093A00863 -S1130E901EAA84E288AB19AA69E56AAB1BABE09190 -S1130EA00D20F0910E20ECABFDABEAE9F1E2E8AFE6 -S1130EB0F9AF1AAE99E39CAF10933D0110923E0135 -S1130EC098A9906898AB10924601E0E4F1E0808321 -S1130ED0109241016093420192E09093430160912A -S1130EE00B2070910C2060934401709345016BEAD0 -S1130EF073E2609348017093490110924A019BE3A5 -S1130F0090934C0110934D0110924E019081906882 -S1130F109083188A588B888B198A85E98A8B4B8B26 -S1130F208EEE92E08C8B9D8B388F298F1A8E8CECF1 -S1130F3095E28C8F9D8F1E8E68EC70E084EF91E0BB -S1130F40CBDB88EC90E0809307209093082081E02D -S1130F508093062088898068888BDF91CF911F91C8 -S1130F6008951F93CF93DF9314E010930920C7DDF6 -S1130F70C0E0D1E018AA80E488AB18AB19AA1AAA79 -S1130F803BE43BAB1CAA1DAA1EAA8AE090E288AFF0 -S1130F9099AF1AAE50EA5CAF88E080933D0110929D -S1130FA03E0198A9906A98AB95E59093A008109299 -S1130FB04601E0E4F1E094E290831092410129E5D6 -S1130FC02093420122E02093430160910B20709111 -S1130FD00C2060934401709345016BEA73E26093C3 -S1130FE048017093490110924A012BE320934C016C -S1130FF023E020934D0110924E012081206820832C -S1131000988B198A45E94A8B3B8B2EEE32E02C8B68 -S11310103D8B588F898F1A8E6CEC75E26C8F7D8FA7 -S11310201E8E98A319A24AA39AE49BA32CA33DA3C2 -S113103093EC98A789A71AA68AEB98E28CA79DA798 -S11310401EA668EC70E084EF91E046DB88EC90E04B -S1131050809307209093082081E08093062088895C -S11310608068888B88A1806888A3DF91CF911F91C5 -S11310700895FFCFCF93DF9386E0809309203FDD6F -S1131080C0E0D1E01EAA84E288AB19AA39E53AABE4 -S113109093E09BAB40910D2050910E204CAB5DAB87 -S11310A04AE951E248AF59AF1AAE29E32CAF909305 -S11310B03D0110923E0128A9206828AB10924601F8 -S11310C0E0E4F1E08083109241013093420132E088 -S11310D03093430140910B2050910C2040934401E4 -S11310E0509345014BEA53E2409348015093490120 -S11310F010924A012BE320934C0190934D011092DE -S11311004E01208120682083188A20E4288B888B54 -S1131110998B95E99A8B90E19B8B4CED55E04C8B28 -S11311205D8B888F398F1A8E8CEC95E28C8F9D8F16 -S11311301E8E68EC70E084EF91E0CEDA80E991E0F5 -S1131140809307209093082081E08093062088896B -S11311508068888BDF91CF910895CF93DF9387E0E8 -S113116080930920CCDCC0E0D1E01EAA94E298ABC5 -S113117019AA39E53AAB83E08BAB40910D2050912D -S11311800E204CAB5DAB4AE951E248AF59AF1AAE01 -S113119029E32CAF80933D0110923E0128A92068D9 -S11311A028AB10924601E0E4F1E0908310924101F3 -S11311B03093420132E03093430140910B2050912F -S11311C00C2040934401509345014BEA53E2409371 -S11311D048015093490110924A012BE320934C019A -S11311E080934D0110924E01208120682083188A3B -S11311F020E4288B25E2288B898B85E98A8B80E182 -S11312008B8B4CED55E04C8B5D8B988F398F1A8E00 -S11312108CEC95E28C8F9D8F1E8E68EC70E084EFD1 -S113122091E05ADA80E991E08093072090930820B6 -S113123081E08093062088898068888BDF91CF9134 -S113124008951F920F920FB60F9211248F939F93BC -S1131250EF93FF9381E08093030180917C2190912F -S11312607D21019680937C2190937D2180917C2126 -S113127090917D21EEE7F1E2878B80917C21909122 -S11312807D21908FFF91EF919F918F910F900FBED1 -S11312900F901F9018951F920F920FB60F92112462 -S11312A08F939F93EF93FF9382E080930301809148 -S11312B07A2190917B21019680937A2190937B21CE -S11312C080917A2190917B21EEE7F1E2818F8091E8 -S11312D07A2190917B21928FFF91EF919F918F9131 -S11312E00F900FBE0F901F901895E0E7F0E08381F8 -S11312F08C7F838384818C7F848380818D7F8083B2 -S1131300E0E8F1E080EC8283128688EC8183118628 -S1131310A0E0B8E034E03C9323E011962C931197BD -S113132014961C92149785ED91E096968D939C9358 -S1131330979716961C921697E0E4F8E03083218381 -S1131340148286A397A31682E0E6F6E0808180618A -S11313508083E0E4F9E083E18183148282E0868380 -S1131360A6A3B7A310A611A681E0808308951F92B7 -S11313700F920FB60F9211242F933F934F935F93C5 -S11313808F939F93EF93FF93CF93DF931F92CDB7E8 -S1131390DEB78FEF80934C0980910920873031F4B8 -S11313A0E0E0F2E084A5898395A502C090912C0227 -S11313B080919520891B209168093091690991E0F9 -S11313C082300CF490E09923C9F091E02A3F374031 -S11313D008F090E0992391F020916809309169090F -S11313E089301CF481E090E002C086E090E0820F36 -S11313F0931F809378099093790923C020916809F9 -S11314003091690991E08F3F0CF090E09923C9F085 -S113141091E02730310508F490E0992391F0209170 -S1131420680930916909883F1CF081E090E002C0AE -S113143086E090E0A901481B590B4093780950932A -S113144079090F90DF91CF91FF91EF919F918F9147 -S11314505F914F913F912F910F900FBE0F901F906E -S11314601895E0E7F0E083818F7E8383E0E4F6E083 -S113147080818A6A80838FEF848388E5828BE0EAA7 -S1131480F8E080E3838384EC858387E08683178296 -S113149088E184830895E0E7F0E08381877F838394 -S11314A0E0ECF8E080E48083118288E580935506BF -S11314B008951F920F920FB60F92112400000F90FF -S11314C00FBE0F901F9018951F920F920FB60F9298 -S11314D011248F93EF93FF93E0EAF8E080818083F7 -S11314E0FF91EF918F910F900FBE0F901F90189561 -S11314F09FB7F894E82FF0E0E059FF4F60958081A2 -S1131500682360839FBF0895863011F060E001C0B6 -S113151068E18091510081FD26C09FB7F894E0E511 -S1131520F0E08081826080839FBF818181FFFDCF55 -S11315309FB7F894A0E5B0E016968C911697897F32 -S113154016968C931697E0E6F0E080E885838BEBA3 -S1131550868316968C911697846016968C93808158 -S1131560816080839FBF636084E490E00CD560E475 -S113157080E0BECF089580919A2008951CD1FC018B -S1131580838180939A20811102C0F4C9089581E077 -S1131590089580919A20813009F401CA08958091B8 -S11315A09A2388234CF480768034A9F480919B2379 -S11315B0811113C0F9C908958076803481F4809133 -S11315C09B2381110EC08091A0239091A123892B8C -S11315D051F0E8C9089580E0089580E0089580E01E -S11315E0089580E0089580E00895E0919F20F091AF -S11315F0A0200190F081E02D228133812E0F3F1F26 -S1131600FC014081E40FF11DE217F307B8F4818176 -S11316108430B9F0861309C005C081818430A1F0FB -S1131620861303C08E2F9F2F08958081E80FF11D2C -S1131630E217F30790F380E090E0089580E090E0F3 -S1131640089580E090E0089580E090E0089580910E -S11316509C238F770C94AD1308959091A220992325 -S113166081F1E0919F20F091A0200190F081E02D84 -S11316709481891740F5E0939D20F0939E20228168 -S113168033812E0F3F1FE217F307F8F49181943052 -S113169061F49281981309C09381961306C0E09374 -S11316A09D20F0939E2081E008959081E90FF11D23 -S11316B0E217F30758F3E0939D20F0939E2080E017 -S11316C0089580E0089580E0089580E00895EF9201 -S11316D0FF921F93CF93DF93C82F60E0BEDF182FD4 -S11316E0882381F1A0919F20B091A020EC2FF0E0FD -S11316F0EE0FFF1F12968D919C911397E80FF91F1F -S1131700E080F180D7011696ED91FC911797099529 -S1131710682F8C2FA2DF182F8823A1F0C0919D2061 -S1131720D0919E2065E0CE0160DFEC01892B21F091 -S11317308A810E948215F6CFD7011296ED91FC9111 -S113174013970995812FDF91CF911F91FF90EF900F -S113175008951F93CF93DF93182F7FDF882339F1E8 -S1131760C0919D20D0919E2065E0CE013EDFEC012A -S1131770892B41F04C815D816B818A81FBD781117A -S1131780F3CF15C0A0919F20B091A020E12FF0E0ED -S1131790EE0FFF1F12968D919C911397E80FF91F7E -S11317A00190F081E02D0190F081E02D0995DF9109 -S11317B0CF911F91089580919D2090919E2008952E -S11317C065C70895CF938091A2208823C1F0E0914A -S11317D09F20F091A0200190F081E02D8481882346 -S11317E071F0C0E08C2F73DFCF5FE0919F20F09108 -S11317F0A0200190F081E02D8481C81798F3109205 -S1131800A2201092A6201092A720CF910895CF93E2 -S11318108091A220882349F1A0919F20B091A0201B -S1131820ED91FC91119784818823F9F0C0E0EC2FAD -S1131830F0E0EE0FFF1F12968D919C911397E80F25 -S1131840F91F0190F081E02D0084F185E02D30979F -S113185009F00995CF5FA0919F20B091A020ED9150 -S1131860FC9111978481C81710F3CF9108950F93B9 -S11318701F93CF93DF93EAE9F3E21286138614866B -S11318801586168617868081282F88233CF440917C -S1131890A0235091A123452B09F469C3982F907676 -S11318A0903409F00AC1E0919B234E2F50E0FA01D5 -S11318B0E05AF109E930F10508F0FFC0EA5FFE4F94 -S11318C00C948E1781E08093922080910720909150 -S11318D00820EEE7F1E285878091072090910820A7 -S11318E0968780917221878780916F21808BA8E6EB -S11318F0B0E012968C911297818B13968C91828B07 -S11319006091A0237091A123CF012DD734C3E0E0CF -S1131910F8E01082CAE9D3E28A819B8186AB97AB57 -S11319208C818F7080836E817F818AE991E21BD7DD -S11319308E819F8120910D2030910E208217930774 -S113194009F419C380930D2090930E2080910920EF -S1131950F3D811C3E0E4F8E01082CAE9D3E28A8143 -S11319609B8186AB97AB8C818F7080836E817F81E6 -S11319708BEA93E2F8D68E819F8120910B203091DF -S11319800C208217930709F4F6C280930B209093DE -S11319900C2080910920D0D8EEC2109268091092D0 -S11319A0690980919C2380939520E5C280919C23B2 -S11319B080932406E0C2E0919C23F0919D23E830BB -S11319C0F10508F07AC0E15FFE4F0C948E1760E0D9 -S11319D080E018D880919E230E94D60480E0ACD881 -S11319E0CAC260E080E00ED880919E230E94D60493 -S11319F081E0A2D8C0C261E081E004D8CAE9D3E2A0 -S1131A008C810E94D6048D810E94E50482E094D8E2 -S1131A10B2C283E091D8AFC284E08ED8ACC260E099 -S1131A2080E00E94020580919E230E94D60485E0F6 -S1131A3083D8A1C261E080E00E94020580919E23C8 -S1131A400E94D60486E078D896C262E080E00E94C4 -S1131A50020580919E2380680E94D60487E06CD89A -S1131A608AC280919C238093840685C280919C23A2 -S1131A7090919D23892B91F00E94850380E2E8EAEE -S1131A80FBE2ABEAB5E201900D928A95E1F781E0C1 -S1131A908093AB250E949A030E948503E9E7F0E056 -S1131AA091E088EDF89484BF90836091A0237091B5 -S1131AB0A1238AE890E257D65EC29111E1C12223A4 -S1131AC00CF005C12091A0233091A12321153105EB -S1131AD009F4D6C18F7109F0A3C090919B2396306D -S1131AE079F0983009F492C091119AC022303105EE -S1131AF009F0C6C162E070E086EA90E234D63DC2E5 -S1131B0080919C2390919D23292F332722303105E6 -S1131B10A9F024F42130310541F0A9C12330310565 -S1131B20D9F12F30310551F1A2C180911920909142 -S1131B301A20DC016C9170E016D659C0E09119208E -S1131B40F0911A202189821708F09AC19927880FE9 -S1131B50991F880F991FE0911B20F0911C20E80F1A -S1131B60F91F80819181FC0162817381FCD5E09130 -S1131B70A223F091A32382E0818339C080911D20A8 -S1131B8090911E20009709F47BC1DC0112966D919F -S1131B907C911397E8D52BC099278130910571F07A -S1131BA038F0029709F06CC12AE630E288E009C0F7 -S1131BB064E070E08CE790E2D6D519C023E730E208 -S1131BC087E0422FAAE5B0E2E22FF32F219130E023 -S1131BD02D933D939E2F941B9817C0F3682F660F87 -S1131BE06E5F6093582070E088E590E2BCD5EAE926 -S1131BF0F3E286819781228533858217930708F063 -S1131C00BCC18093A4239093A523B7C1213031058F -S1131C1009F036C161E070E082EA90E2A4D5ADC17A -S1131C208130E1F590919B239A30C1F52130310543 -S1131C3009F026C18091A220882309F421C1C09112 -S1131C409E23D0919F2300919F201091A020D80122 -S1131C50ED91FC918481C81708F012C160E08C2FCB -S1131C60FCDC882309F40CC1CE019927880F991F45 -S1131C70D8011296ED91FC911397E80FF91F01908A -S1131C80F081E02D86819781FC0109958093A42041 -S1131C9061E070E084EA90E266D56FC1823009F0B9 -S1131CA0EFC080919B238111E4C02230310509F0FB -S1131CB0E7C080919E23D3D590E080939B2090939E -S1131CC09C2062E070E08BE990E24DD556C18F71A3 -S1131CD009F083C090919B23933009F4CCC018F48D -S1131CE09130A1F07AC0953019F0993039F175C06E -S1131CF08091A0239091A123892B09F0C1C087E290 -S1131D009BE08093A6239093A72337C18091A023BF -S1131D109091A123892B09F0B3C080919C239091C9 -S1131D209D23019709F0ACC08091A6209091A72033 -S1131D308D7F8093A6209093A7201FC18091A0231C -S1131D409091A123892B09F09BC00AD5882309F41B -S1131D5097C020919C2330919D233327E091192033 -S1131D60F0911A20818990E08217930708F488C0C3 -S1131D7029DD80919C2390919D238093A220882328 -S1131D8009F4FBC099278150904C880F991F880F44 -S1131D90991FE0911B20F0911C20E80FF91FE0939C -S1131DA09F20F093A0200190F081E02D848188236E -S1131DB009F4E3C0C0E060E08C2FCBDC882309F495 -S1131DC05FC0CF5FE0919F20F091A0200190F0814F -S1131DD0E02D8481C81778F3D0C08130E1F490916C -S1131DE09B239B30C1F48091A0239091A123892B44 -S1131DF009F046C08091A220882309F441C0EAE991 -S1131E00F3E2C481D2818C2F62DC8823C9F16D2F67 -S1131E108C2F9FDC33C0823099F580919B238130D5 -S1131E2019F0833089F029C08091A0239091A123D7 -S1131E30892B31F580919C2390919D23892B01F569 -S1131E4080919E2327D51AC08091A0239091A1232D -S1131E50892BB1F480919C2390919D23892B81F44B -S1131E60CAE9D3E28C8105D68C8168D607C080E0AC -S1131E7005C080E003C080E001C080E081117EC025 -S1131E8080919A238F71813071F58091A2208823EB -S1131E9051F100919E2310919F23C0919F20D091D6 -S1131EA0A020E881F98184810817E8F460E0802F9C -S1131EB0D4DB8823C1F0F801FF27CF01880F991FD5 -S1131EC0EA81FB81E80FF91FC081D181EE81FF8196 -S1131ED00995682F802FC1DB882329F0EC81FD81CF -S1131EE0099581114BC080919A238F71823009F03A -S1131EF040C08091A2208823B1F1A0919F20B0918D -S1131F00A020ED91FC9111978481882371F1C0E0A8 -S1131F10EC2FF0E0EE0FFF1F12968D919C9113971A -S1131F20E80FF91F00811181D8011696ED91FC91FB -S1131F3017970995682F8C2F90DB8823F9F0D80127 -S1131F401496ED91FC9115970995811117C0CF5FF7 -S1131F50A0919F20B091A020ED91FC9111979481C4 -S1131F60C917B0F20BC080E009C080E007C080E070 -S1131F7005C080E003C081E001C081E0DF91CF9122 -S1131F801F910F9108951BBEFC0128ED24BF6083AF -S1131F900895CF93DF939C01DB01E0ECF1E097859A -S1131FA09923ECF3CCECD1E0988198609883B90143 -S1131FB0705FCD01B9D78881877F8883DF91CF9106 -S1131FC00895E0ECF1E097859923ECF3ACECB1E0F3 -S1131FD09C9198609C93E82FF0E0F05F60838C9173 -S1131FE0877F8C930895EF92FF920F931F93CF9363 -S1131FF0DF938C01E0ECF1E087858823ECF3780132 -S113200080E2E80EF11CE8018C2F801B6991D9DF76 -S1132010CE15DF05C9F7DF91CF911F910F91FF9086 -S1132020EF9008951F93CF93DF93E0ECF1E0978551 -S11320309923ECF320E2829FC0011124C0ECD1E08B -S11320401A82998388831A8585E38A8761E08BECF9 -S113205091E099DF1A87DF91CF911F910895409104 -S1132060CA01E62FF72F8093CA0184914093CA01D5 -S11320700895811122C090916C219923D9F09091F7 -S1132080CB2B911101C0FFCF2FB7F894EAECFBE200 -S11320909181915091832FBF0DC09091CB2B9F3F85 -S11320A009F4FFCF2FB7F894EAECFBE291819F5F2C -S11320B091832FBF80936C21089590916C21992373 -S11320C061F3F8CF0F93E8ECF4E080818F7D808397 -S11320D080818F7D8083E0E5F1E202E00593109238 -S11320E052211092532100E2069300E40693E8E49F -S11320F0F1E200E2069300E40693EAE9F3E21486CF -S11321001586168617861286138610923F210F9124 -S113211008950F9385E080933F21E1E5F1E204E027 -S11321200593E9E4F1E204E005930F9108950F9318 -S113213083E080933F211092522110925321E0E5D5 -S1132140F1E202E006930F910895E091A623F09145 -S1132150A723309709F0099508950F93CF93DF9340 -S113216080913F21833019F4F0DFACDF5EC08091B1 -S11321703B2190913C21C091A423D091A523C81B5D -S1132180D90B71F520913D2130913E21820F931F8F -S113219080933D2190933E212091A0233091A1234F -S11321A08217930721F08091A820882341F084E0CE -S11321B080933F21E8E4F1E202E0069336C0E09127 -S11321C0A823F091A923309799F00995882381F0E9 -S11321D010923B2110923C21C091A423D091A523BD -S11321E0C034D10528F01092A820C0E4D0E003C088 -S11321F081E08093A820E0E4F1E2C28BD38B80914C -S11322003B2190913C212091A2233091A323280FBC -S1132210391F248B358BC80FD91FC0933B21D09312 -S11322203C21E0E5F1E202E00693DF91CF910F91CA -S11322300895FC018181E82FE7708E2F90E0FC0166 -S11322403197E730F105C0F4E95EFE4F67C680E1DF -S113225090E0089580E290E0089580E490E008958D -S113226080E890E0089580E091E0089580E092E0B5 -S113227008958FEF93E0089588E090E00895282F63 -S11322802F7030E0220F331F082E000C990B882783 -S1132290990F881F9927820F931F02979C01220F81 -S11322A0331F220F331F220F331F820F931F8751B7 -S11322B09F4D08950F93CF938091CC0480FF62C00B -S11322C081E08093CC04E8E4F1E200E80693E0E5E1 -S11322D0F1E200E806938093CA04E8E4F1E200E145 -S11322E0069380913F21882329F08350823008F49B -S11322F02CDFE8DE80914A2190914B21089709F068 -S113230043C088E0EBEFF0E2AAE9B3E201900D925A -S11323108A95E1F7E8ECF4E0808180628083808133 -S113232080628083A4DAC82F811103C0F2DEC1E089 -S11323302CC080919A2388236CF410923D21109232 -S11323403E2110923B2110923C2182E080933F2158 -S113235004DF1BC08091A0239091A123892B11F449 -S1132360E6DE13C010923D2110923E2110923B21D3 -S113237010923C2181E080933F21E8E4F1E202E005 -S1132380069303C0C0E001C0C1E08C2FCF910F9130 -S113239008958F929F92AF92BF92DF92EF92FF9235 -S11323A00F931F93CF93DF93D82E69DF8C01BD2C3D -S11323B0BB1CBB24BB1CCD2DCF70D0E0CC0FDD1FCC -S11323C0CB0DD11DCE01880F991F880F991F880F3F -S11323D0991F9C01285B3E4D7901C9012ADF4C01FC -S11323E0BB2009F470C0FE01EE0FFF1FEE0FFF1FAC -S11323F0EE0FFF1FE05CFE4D26853785D80115964C -S11324008D919C911697820F931F15968D939C9393 -S1132410169713962D913C9114978217930709F4FC -S11324203CC0281B390B2115B4E03B0738F02FEFD3 -S113243033E0C901B4014BD5281B390BF801808165 -S113244081FF09C0C901B40142D541E0892B09F0DB -S113245040E0842F01C080E0D8019C9180FB91F979 -S11324609C93CC0FDD1FCC0FDD1FCC0FDD1FC05C98 -S1132470DE4D1E861F862A873B8711962D913C913F -S1132480129715968D919C911697820F931F8C87A6 -S11324909D87F70102E00693CAC0D8018C9181FFA1 -S11324A0B3C08D7F8C93CC0FDD1FCC0FDD1FCC0F01 -S11324B0DD1FC05CDE4D1E861F861A861B86F70153 -S11324C002E00693B4C0FE01EE0FFF1FEE0FFF1FE4 -S11324D0EE0FFF1FE05CFE4DA284B384D8018C9103 -S11324E082FF19C01196ED91FC91129715962D91CA -S11324F03C91169713968D919C911497B401E7D44F -S1132500B0E4DB9EB001112467597F4DAC01CF01CB -S1132510820F931F09D5F801258136812A0D3B1DB1 -S113252025833683838194818217930768F4858396 -S11325309683CC0FDD1FCC0FDD1FCC0FDD1FC05CDD -S1132540DE4D8E859F8560C0FE01EE0FFF1FEE0FEE -S1132550FF1FEE0FFF1FE05CFE4D468557854A15B1 -S11325605B0509F051C02817390709F44DC0AC01C7 -S1132570421B530B9A01211554E0350750F02FEFFD -S113258033E0C901B401A3D4D901A81BB90BCD010F -S113259007C0C901B4019BD4F901E81BF90BCF01B1 -S11325A0FE01EE0FFF1FEE0FFF1FEE0FFF1FE05C9B -S11325B0FE4D128613868815990578F4D8018C91FE -S11325C084608C93B0E4DB9EC001112487599F4D35 -S11325D0848795878686978613C0F8014181528146 -S11325E025813681240F351FCC0FDD1FCC0FDD1F55 -S11325F0CC0FDD1FC05CDE4D2C873D878E879F8707 -S1132600F70102E0069313C0D8018C9180FF0FC03C -S11326108E7F8C931796ED91FC911897309739F033 -S113262015966D917C9116974D2D80E00995DF915B -S1132630CF911F910F91FF90EF90DF90BF90AF90DB -S11326409F908F900895CF93CFB7F89481E011DDD8 -S1132650EAECF4E080E4808380E28083E1ECF4E05F -S1132660808181608083A9ECB4E08C9182608C933A -S1132670E8ECF4E08081806480838C9181608C93A9 -S1132680808180688083CFBFCF910895CF93DF93FB -S1132690C0E6D0E0188280E30E94840AE0ECF4E013 -S11326A080818064808381E08883CFB7F894E0E4FC -S11326B0F1E21186118A118E11A2E9EEF0E2808115 -S11326C08E7F8083E2EFF0E280818E7F80836AE1F7 -S11326D070E082E0C4DC8F3F19F08093FA0403C0F9 -S11326E08FE18093FA046BE170E082E0B8DC8F3F05 -S11326F019F08093FB0403C08FE18093FB04E0ECAA -S1132700F4E080818160808380818068808380811F -S11327108061808388E491E28683978380818062EC -S113272080838FEF8093C504E8ECF4E080818260BD -S1132730808310926C218091CF2B8F3F09F4FFCFBF -S11327409FB7F894EAECFBE285818F5F85839FBF96 -S11327507ADFCFBFDF91CF9108958093C3040895AA -S11327608091C3040895EAE9F3E280879187628740 -S113277073870895282F2F7030E0220F331F082EFF -S1132780000C990B8827990F881F9927820F931F94 -S1132790FC01EE0FFF1FEE0FFF1FEE0FFF1FE05CAB -S11327A0FE4D2185207C09F058C06370613011F022 -S11327B018F404C020EC03C020E801C020E4403831 -S11327C05105E9F050F440325105A9F04034510567 -S11327D0A1F040315105D9F40CC0411532E0530742 -S11327E091F04F3F33E0530781F04115514079F4A4 -S11327F008C041E00DC042E00BC043E009C044E022 -S113280007C045E005C046E003C047E001C040E022 -S1132810FC01EE0FFF1FEE0FFF1FEE0FFF1FE05C2A -S1132820FE4D1186DC01AA0FBB1FAA0FBB1FAA0F06 -S1132830BB1FA85BBE4D36E03C93242B2187880F39 -S1132840991F880F991F880F991FFC01E05CFE4DAA -S113285081858062818781E0089580E00895E82F72 -S1132860EF70F0E0EE0FFF1F082E000C990B882785 -S1132870990F881F9927E80FF91FEE0FFF1FEE0F1E -S1132880FF1FEE0FFF1FE05CFE4D818582FB882752 -S113289080F90895282F2F7030E0A901440F551FA7 -S11328A0282F082E000C330B2227330F221F332727 -S11328B0240F351FF901EE0FFF1FEE0FFF1FEE0F60 -S11328C0FF1FE05CFE4D918592FF17C0220F331F5E -S11328D0220F331F220F331FF901E05CFE4D918557 -S11328E09B7F9187CCDCFC01808180FF06C08E7FBA -S11328F080830780F085E02D099581E008957F921B -S11329008F929F92AF92BF92CF92DF92EF92FF92FB -S11329100F931F93CF93DF93982E862E6A0179012C -S1132920AEDC5C01792C771C7724771CC92DCF7021 -S1132930D0E0CC0FDD1FC70DD11DFE01EE0FFF1F30 -S1132940EE0FFF1FEE0FFF1FE05CFE4D8185807CC4 -S113295009F47DC0FE01EE0FFF1FEE0FFF1FEE0F07 -S1132960FF1FE05CFE4D8185807C803C61F0FE01B0 -S1132970EE0FFF1FEE0FFF1FEE0FFF1FE05CFE4D7B -S1132980818582FD66C08FB7F894F501908190FF30 -S113299003C08FBF712C5EC0F5019081916090835C -S11329A08FBFC182D282E382F482158216820783AA -S11329B01087811006C091E0E114F10419F090E051 -S11329C001C091E0F501808190FB81F98B7F8083C8 -S11329D0772059F0CC0FDD1FCC0FDD1FCC0FDD1F8E -S11329E0C05CDE4D1E861F862DC0FE01EE0FFF1F4C -S11329F0EE0FFF1FEE0FFF1FE05CFE4D8185807C14 -S1132A00803CA1F4CE01880F991F880F991F880F6D -S1132A10991F885B9E4D0DDCBC01C70158D2892BE0 -S1132A2029F0F50180818E7F808314C0CC0FDD1FD7 -S1132A30CC0FDD1FCC0FDD1FC05CDE4D1A861B865C -S1132A401E861F86892DA5DC7724739403C0712C00 -S1132A5001C0712C872DDF91CF911F910F91FF90B1 -S1132A60EF90DF90CF90BF90AF909F908F907F902A -S1132A700895FF920F931F93CF93DF93182FF82E8F -S1132A80FF1CFF24FF1CC82FCF70D0E0CC0FDD1F2C -S1132A90CF0DD11DF4DBDC01FE01EE0FFF1FEE0FA5 -S1132AA0FF1FEE0FFF1FE85BFE4D02E005938C91C4 -S1132AB080FF22C08E7F8C931796ED91FC9118971E -S1132AC03097D1F0FF2059F0CC0FDD1FCC0FDD1F64 -S1132AD0CC0FDD1FC05CDE4D6E857F850AC0CC0F38 -S1132AE0DD1FCC0FDD1FCC0FDD1FC05CDE4D6A8502 -S1132AF07B85412F81E00995DF91CF911F910F9143 -S1132B00FF900895CF93C82FB4DFEC2FEF70F0E05F -S1132B10EE0FFF1F8C2FCC0F990B8827990F881F5E -S1132B209927E80FF91FEE0FFF1FEE0FFF1FEE0F9F -S1132B30FF1FE05CFE4D1186CF9108950F93E82F9F -S1132B40EF70F0E0EE0FFF1F282F082E000C330B60 -S1132B502227330F221F3327E20FF31FDF01AA0FAF -S1132B60BB1FAA0FBB1FAA0FBB1FA05CBE4D1996AB -S1132B709C911997946019969C93EE0FFF1FEE0F8A -S1132B80FF1FEE0FFF1FE85BFE4D01E0069371DFB0 -S1132B9081E00F9108951F920F920FB60F921124A6 -S1132BA00F932F933F934F935F936F937F938F93E1 -S1132BB09F93AF93BF93EF93FF938091CB048823AC -S1132BC044F480E88093CA040E94070C0E944404E1 -S1132BD082C08091CB0482FF20C084E08093CA0429 -S1132BE08091502186FF77C08091CC0481FD73C011 -S1132BF061DB811170C080913F21813011F497DA3B -S1132C006AC0843009F067C0E1E5F1E204E00593AD -S1132C10E9E4F1E204E005935EC08091CB0481FF16 -S1132C2055C082E08093CA048091482186FF53C036 -S1132C308091CC0481FD4FC03DDB81114CC080915B -S1132C403F21823041F484E080933F21E8E4F1E2C3 -S1132C5002E0069340C0833009F03DC0E1E5F1E2B3 -S1132C6004E00593E9E4F1E204E0059334C080E173 -S1132C708093CA040E94E20B1092C304E0E4F1E2E0 -S1132C80118696E0908783E48187118A908B818BEB -S1132C908BEF90E28487958715DA1DC08091CB0471 -S1132CA086FF08C080E48093CA0480E0E2D90E94D1 -S1132CB0420411C08091CB0485FF0DC080E2809353 -S1132CC0CA0481E0D6D90E94430405C08091CB0494 -S1132CD084FFE4CFCCCFFF91EF91BF91AF919F914F -S1132CE08F917F916F915F914F913F912F910F91B0 -S1132CF00F900FBE0F901F9018951F920F920FB652 -S1132D000F9211240F931F932F933F934F935F932D -S1132D106F937F938F939F93AF93BF93CF93DF93DF -S1132D20EF93FF938091CC0481FD03C0C3DA81113A -S1132D30B9C082E08093CC048091C5048195880F4A -S1132D40E8E4F1E2E81BF1092081318128543142A1 -S1132D50369527953695279536952795822F86950E -S1132D6020FD02C090E001C090E8890FE82FEF70C9 -S1132D70F0E0EE0FFF1F282F082E000C330B222744 -S1132D80330F221F3327E20FF31FDF01AA0FBB1FEC -S1132D90AA0FBB1FAA0FBB1FA85BBE4D9C9195FF3A -S1132DA081C0FD0100E20693811177C080913F212B -S1132DB0843019F4CAD986D975C000914A2110917A -S1132DC04B218091A4239091A523C0913B21D091C4 -S1132DD03C219E01200F311F8217930718F48C01A8 -S1132DE00C1B1D0B8091A2239091A323A8016BEFD0 -S1132DF070E28C0F9D1F98D0C00FD11FC0933B2150 -S1132E00D0933C210034110569F480913D219091C7 -S1132E103E218C0F9D1F2091A0233091A123821766 -S1132E20930780F0EAE9F3E2C287D3870684F78543 -S1132E30E02D309729F00995811102C06AD932C07A -S1132E4076D930C08091A4239091A523C817D907BF -S1132E50F9F4E091A823F091A923309711F459D9FA -S1132E6021C00995811102C054D91CC020913D2173 -S1132E7030913E2180913B2190913C21820F931F00 -S1132E8080933D2190933E2110923B2110923C214E -S1132E90E8E4F1E202E0069305C0803811F45DD95C -S1132EA001C077DAFF91EF91DF91CF91BF91AF919C -S1132EB09F918F917F916F915F914F913F912F914E -S1132EC01F910F910F900FBE0F901F901895AA1B82 -S1132ED0BB1B51E107C0AA1FBB1FA617B70710F001 -S1132EE0A61BB70B881F991F5A95A9F78095909533 -S1132EF0BC01CD01089597FB072E16F4009406D06B -S1132F0077FD08D0E4DF07FC05D03EF49095819569 -S1132F109F4F0895709561957F4F0895EE0FFF1FA1 -S1132F200590F491E02D0994FB01DC0102C00190AD -S1112F300D9241505040D8F70895F894FFCF09 -S1132F3E40000CE02E0AFFFFFFFF5580008000BE0C -S1132F4E0AC90ACF0ABB0A000044201F2000002829 -S1132F5E2023200F20000000090219000101008027 -S1132F6EFA0904000001FFFFFF0007058101FF03BA -S1132F7E010000001201000200000040EB0394BAAD -S1132F8E0002010200010000000300000000000026 -S1132F9E000000000000000000004C6162726164D9 -S1132FAE6F72004573706F54656B0000040309045F -S10F2FBE64656275673132330000020064 +S113000025C100003FC100003DC100003BC100000C +S113001039C1000037C100000C941F090C94760903 +S113002031C100002FC100002DC100002BC1000010 +S113003029C1000027C1000025C1000023C1000020 +S113004021C100001FC100001DC100001BC1000030 +S113005019C1000017C1000015C1000013C1000040 +S11300600C94840A0C948F0A0DC100000BC100008B +S113007009C1000007C1000005C1000003C1000060 +S113008001C10000FFC00000FDC00000FBC0000073 +S1130090F9C00000F7C00000F5C00000F3C0000084 +S11300A0F1C00000EFC00000EDC00000EBC0000094 +S11300B0E9C00000E7C00000E5C00000E3C00000A4 +S11300C0E1C00000DFC00000DDC00000DBC00000B4 +S11300D0D9C00000D7C00000D5C00000D3C00000C4 +S11300E0D1C00000CFC00000CDC00000CBC00000D4 +S11300F0C9C00000C7C00000C5C00000C3C00000E4 +S1130100C1C00000BFC00000BDC00000BBC00000F3 +S1130110B9C00000B7C00000B5C00000A6C400000C +S1130120B1C00000AFC00000ADC00000ABC0000013 +S1130130A9C00000A7C00000A5C00000A3C0000023 +S1130140A1C000009FC000009DC000000C94E20903 +S113015099C0000097C0000095C0000093C0000043 +S113016091C000008FC000008DC000008BC0000053 +S113017089C0000087C0000085C0000083C0000063 +S113018081C000007FC000007DC000007BC0000073 +S113019079C0000077C0000075C0000073C0000083 +S11301A071C000006FC000006DC000006BC0000093 +S11301B069C0000067C0000065C0000063C00000A3 +S11301C061C000005FC000005DC000005BC00000B3 +S11301D059C0000057C0000055C0000053C00000C3 +S11301E051C000004FC000004DC000004BC00000D3 +S11301F049C000000C94F9150C94AB162104230497 +S11302002504270429042B042D042F044304450446 +S1130210470449044B0450044D044F048D0CB20CA4 +S1130220D50CF80C010D060D5F0D640D830D120D38 +S11302301D0D280D370D3A0D3D0D480D530D55116B +S113024058115B115E1161116411671111241FBEF5 +S1130250CFEFCDBFDFE2DEBF10E2A0E0B0E2EAE91B +S1130260FFE202C005900D92AC38B107D9F72BE23A +S1130270ACE8B0E201C01D92A03DB207E1F794D210 +S11302800C94CB17BDCECF93DF93C0E5D0E084E0D0 +S11302908E838CE1A4D3E0E6F0E083838BEB86834A +S11302A080E8858381E0808388ED84BF10924100DB +S11302B083E08883E0E5F0E081818330E9F7E0E5DD +S11302C0F0E080818160808388E18583818180FF83 +S11302D0FDCFE0E5F0E0808180618083818184FF4F +S11302E0FDCF88ED84BF84E080934000DF91CF91FF +S11302F00895E0E7F0E085818E7F8583E0E0FAE011 +S11303008FEB9DE586A397A380EE9EE280A391A345 +S113031082E0808308958091200A9091210A813E91 +S11303202EE2920720F02091722120936A00803EF1 +S11303302EE2920720F420916F2120936A002091ED +S11303400520222331F080910520815080930520DF +S113035035C0885F9A42813D974080F110928C208D +S113036080918D2090918E20A0918F20B09190202B +S11303700196A11DB11D80938D2090938E20A09392 +S11303808F20B093902080918D2090918E20A09109 +S11303908F20B0919020892F9A2FAB2FBB27EEE7A7 +S11303A0F1E2848B80918D2090918E20A0918F20FA +S11303B0B0919020838B86E0809305208091072064 +S11303C0909108200196B1F4809109208F3F91F01B +S11303D080910620811106C080910620815080936F +S11303E006200895809114019091150180930720AF +S11303F0909308200895009709F466C00CF09C01BE +S1130400992334F422273327281B390B51E001C0E8 +S113041050E0E8E6F0E0838190E0809370219093CF +S1130420712180917021909171219695982F882740 +S11304309795879580937021909371214281809143 +S1130440702190917121840F911D8093702190935C +S1130450712100008091702190917121821793077E +S113046028F41092702110927121089580917021C6 +S113047090917121820F931F8115904238F08FEF74 +S11304809FE180937021909371210895552359F031 +S11304908091702190917121821B930B8093702124 +S11304A0909371210AC08091702190917121280F3D +S11304B0391F209370213093712180917021909184 +S11304C071218F7780936A000895CF93DF93C09151 +S11304D0200AD091210A80910320909104209E014A +S11304E0281B390B209373213093742180918C2025 +S11304F081114DC080917321909174218E3C9F4F46 +S1130500E4F480917321909174218B369F4FACF069 +S113051080910220882331F08091022081508093C1 +S1130520022035C080916A008093722181E080931B +S11305308C208CE0809302202AC08CE080930220DF +S113054080917321909174218A369F4F1CF08FEF14 +S11305509FEF02C081E090E080936D2190936E2123 +S1130560809173219091742120916D2130916E219D +S113057060E370E00E94A917261B370B20936D21BE +S113058030936E2180916D2190916E2134DF8091A2 +S11305908C20813029F58091732190917421C39727 +S11305A094F080910220882331F0809102208150C0 +S11305B08093022015C080916A0080936F2183E0AC +S11305C080938C200DC08091732190917421873980 +S11305D091051CF481E090E002C08FEF9FEF0BDFE8 +S11305E0C0930320D0930420DF91CF910895861700 +S11305F0970779F06817790728F49C01261B370BB5 +S1130600B90109C08617970718F4681B790B03C052 +S1130610089560E070E0862F972F08950F931F933D +S1130620CF93DF938091002090910120892B51F08A +S11306308091002090910120019780930020909355 +S113064001204DC080E490E080930020909301202D +S11306508091072090910820019609F440C0809170 +S113066014019091150120910920263018F467E7B0 +S113067071E002C06EEE72E00E949517082F192FE8 +S1130680C82FD12F80910720909108208C179D07A7 +S113069080F46091072070910820802F912FA7DFAC +S11306A0029738F080EC9DE58093360A9093370AE0 +S11306B016C08091072090910820C817D90778F4B4 +S11306C06091072070910820802F912F90DF02976E +S11306D030F08FEB9DE58093360A9093370ADF91D3 +S11306E0CF911F910F910895AC01460F571F861BA0 +S11306F0970BE0E0FAE020A131A124173507D8F7E1 +S113070020A131A182179307B0F70895E0E8F6E03D +S11307108FE0808385E0848308951F93CF93DF93D4 +S1130720C0E4D0E0198180E4898340E250E068EAC3 +S11307307BE280E290E00E94F70F1983DF91CF9172 +S11307401F9108951F93CF93DF93C0E4D0E01981E4 +S113075080E489838BEA95E20E94211081E00E9463 +S113076040101983DF91CF911F91089508950F933D +S11307701F93209196208EEE92E0289FA001299F3E +S1130780500D112444535A4D07EB13E02EEE32E082 +S113079060E081E80E94AD141F910F9108951CBE82 +S11307A0EEEFF0E409950895B8DF8091A82B882333 +S11307B069F080E2E8EAFBE2ABEAB5E201900D926F +S11307C08A95E1F71092AB25BDDFE9DF87E08093DE +S11307D0A200789458DDCADF0E940B0C59D17CD159 +S11307E060E080E005D1F1D08CE0E5D0A9D564D6F5 +S11307F07DD68CDF89E0E0E8F0E2AEE7B1E201907B +S11308000D928A95E1F7000000000000000000004E +S113081000000000000000000000000000000000D4 +S1130820000080919120882371F3E091AA238E2FF8 +S113083090E088309105A0F4FC01E250FF4F0C9445 +S1130840BC1776D10DC0E8D10BC070D209C0F5D267 +S113085007C082D305C009D403C008D401C07AD428 +S113086010929120D0CF08950895CF93DF93E09113 +S113087009208E2F90E08830910590F4FC01EA5F06 +S1130880FE4F0C94BC17C7D10BC04FD209C0D4D2B1 +S113089007C061D305C0E8D303C05BD401C0CED484 +S11308A0A0E0B1E054968C915497EEE7F1E2818791 +S11308B055968C915597828794968C9194978387BB +S11308C095968C9195978487C0E0DAE088A1858B12 +S11308D089A1868B54968D919C915597863491402D +S11308E080F08091140190911501893A914048F467 +S11308F080911401909115018093C82B9093C92B7A +S1130900000080919420882339F0F3DC1092942025 +S113091081E08093932021C080919320882341F02B +S113092080918C20833019F4F6DC78DE01C0CDDDB3 +S113093080919220882351F08091140190911501A7 +S11309408093C82B9093C92B10929220909196205B +S113095081E0911180E080939620DF91CF910895FA +S11309600F931F9381E0809399208093942007EB49 +S113097013E02DE730E04CEC55E260E081E80E94A2 +S1130980AD1481E01F910F9108951092992008955C +S113099081E0089581E00895E0E0F2E010A2982F4C +S11309A09C71936890A3881F8827881F880F81A350 +S11309B012A216A20895E0E0F2E010AA836880ABC8 +S11309C080E181AB12AA16AA0895E0E0F2E010A635 +S11309D083E880A78FE281A712A616A60895AAEC41 +S11309E0B1E092E09C93E82FF0E084911C9208958A +S11309F0CF93DF93E0E7F0E091819D7F91831092A4 +S1130A000002623031F1E0E0F2E09CE1918390E495 +S1130A109283811102C080E401C080EC80930302C0 +S1130A20613011F084E001C083E0C0E0D2E08C8347 +S1130A3080E2D5DF8C8781E2D2DF8D87188E198E14 +S1130A4081E08883C2DF0EC080EC8093030284E0DF +S1130A50ECCFE0E0F2E09EE1918390E49283811197 +S1130A60F3CFD9CFDF91CF9108951F920F920FB694 +S1130A700F9211248F93000000000000000081E019 +S1130A80809323028F910F900FBE0F901F901895A3 +S1130A90CF93DF93E0E7F0E082818B7F8283C0E233 +S1130AA0D3E08DE0888380E4898389E08A8383E3CB +S1130AB096DF888782E393DF898787E390DF8A87DD +S1130AC086E38DDF8B87E0E2F6E0808183608083BC +S1130AD01482DF91CF910895E0E7F0E080818E7F6A +S1130AE0808383E8809300010895E0E0F1E0108AB8 +S1130AF080E4808B10A280A310AA80ABE0E4F1E034 +S1130B0010828083109298201092972081E0809325 +S1130B10962010927C2110927D2110927A211092BD +S1130B207B2108958093AA2381E0809391200895E6 +S1130B30CF93DF9310920920D8DFC0E0D1E01EAA42 +S1130B4094E298AB19AA49E54AAB32E03BAB609119 +S1130B500B2070910C206CAB7DAB6BEA73E268AF39 +S1130B6079AF1AAE8BE38CAF83E080933D01109292 +S1130B703E0128A9206828AB10924601E0E4F1E088 +S1130B80908310924101409342018093430140912C +S1130B900D2050910E2040934401509345014AE9A1 +S1130BA051E2409348015093490110924A0129E3CC +S1130BB020934C0180934D0110924E0120812068B6 +S1130BC02083188A20E4288B24E0288B898B85E9EC +S1130BD08A8B80E18B8B47E751E04C8B5D8B988F40 +S1130BE0398F1A8E8CEC95E28C8F9D8F1E8E68EC5B +S1130BF070E084EF91E078DD88EC90E0809307204A +S1130C009093082081E08093062088898068888BEF +S1130C10DF91CF91089508951F93CF93DF9311E04F +S1130C201093092062DFC0E0D1E018AA80E488AB09 +S1130C3084E088AB19AA1AAA4BE44BAB1CAA1DAAE0 +S1130C401EAA8AE090E288AF99AF1AAE70EA7CAF30 +S1130C5068E060933D0110923E0188A9806A88ABE8 +S1130C60E0EAF8E085E58083808310924601E0E4C1 +S1130C70F1E084E280831092410199E5909342016E +S1130C8032E030934301A0910B20B0910C20A0934B +S1130C904401B0934501ABEAB3E2A0934801B09399 +S1130CA0490110924A019BE390934C0193E0909385 +S1130CB04D0110924E0120812068208388A399A3BE +S1130CC025E92AA34BA34EEE52E04CA35DA378A7DB +S1130CD069A71AA66AEB78E26CA77DA71EA6888B83 +S1130CE0998B2A8B90E19B8B4C8B5D8B888F398FF2 +S1130CF01A8E8CEC95E28C8F9D8F1E8E68EC70E0C2 +S1130D0084EF91E0F1DC88EC90E0809307209093ED +S1130D1008201093062088A1806888A388898068A9 +S1130D20888BDF91CF911F91089508951F93CF93DE +S1130D30DF9312E010930920D8DEC0E0D1E01EAAB0 +S1130D4084E288AB19AA39E53AAB1BAB40910B207E +S1130D5050910C204CAB5DAB4BEA53E248AF59AF1A +S1130D601AAE9BE39CAF93E090933D0110923E0139 +S1130D7028A9206828AB10924601E0E4F1E08083C2 +S1130D8010924101309342019093430120910D2030 +S1130D9030910E2020934401309345012AE931E239 +S1130DA0209348013093490110924A0129E320938A +S1130DB04C0190934D0110924E0190819068908364 +S1130DC0188A90E4988B888B198A45E94A8B90E1BC +S1130DD09B8B2EEE32E02C8B3D8B888F198F1A8ED5 +S1130DE06CEC75E26C8F7D8F1E8E88A319A24AA3CA +S1130DF09BA32CA33DA384E388A719A71AA68AEB77 +S1130E0098E28CA79DA71EA668EC70E084EF91E0A1 +S1130E106BDC88EC90E0809307209093082081E0BD +S1130E208093062088898068888B88A1806888A33D +S1130E30DF91CF911F91089508951F93CF93DF936E +S1130E4013E01093092051DEC0E0D1E018A250E471 +S1130E5058A384E088A319A21AA24BE44BA31CA2B2 +S1130E601DA21EA28AE090E288A799A71AA630EADA +S1130E703CA728E02DA71EA688A1806A88A385E543 +S1130E808093A0081EAA84E288AB19AA69E56AAB1C +S1130E901BABE0910D20F0910E20ECABFDABEAE929 +S1130EA0F1E2E8AFF9AF1AAE99E39CAF10933D01BC +S1130EB010923E0198A9906898AB10924601E0E424 +S1130EC0F1E08083109241016093420192E090939B +S1130ED0430160910B2070910C2060934401709346 +S1130EE045016BEA73E260934801709349011092E3 +S1130EF04A019BE390934C0110934D0110924E01D3 +S1130F00908190689083188A588B888B198A85E918 +S1130F108A8B4B8B8EEE92E08C8B9D8B388F298F36 +S1130F201A8E8CEC95E28C8F9D8F1E8E68EC70E08F +S1130F3084EF91E0D9DB88EC90E0809307209093D4 +S1130F40082081E08093062088898068888BDF915F +S1130F50CF911F91089508951F93CF93DF9314E0C9 +S1130F6010930920C2DDC0E0D1E018AA80E488AB68 +S1130F7018AB19AA1AAA3BE43BAB1CAA1DAA1EAAC9 +S1130F808AE090E288AF99AF1AAE50EA5CAF88E08D +S1130F9080933D0110923E0198A9906A98AB95E523 +S1130FA09093A00810924601E0E4F1E094E290836B +S1130FB01092410129E52093420122E0209343014C +S1130FC060910B2070910C20609344017093450153 +S1130FD06BEA73E2609348017093490110924A01ED +S1130FE02BE320934C0123E020934D0110924E01FA +S1130FF0208120682083988B198A45E94A8B3B8B92 +S11310002EEE32E02C8B3D8B588F898F1A8E6CEC30 +S113101075E26C8F7D8F1E8E98A319A24AA39AE461 +S11310209BA32CA33DA393EC98A789A71AA68AEBAC +S113103098E28CA79DA71EA668EC70E084EF91E06F +S113104053DB88EC90E0809307209093082081E0A4 +S11310508093062088898068888B88A1806888A30B +S1131060DF91CF911F9108950895FFCFCF93DF9320 +S113107086E08093092039DDC0E0D1E01EAA84E235 +S113108088AB19AA39E53AAB93E09BAB40910D20AC +S113109050910E204CAB5DAB4AE951E248AF59AFD9 +S11310A01AAE29E32CAF90933D0110923E0128A97A +S11310B0206828AB10924601E0E4F1E080831092AE +S11310C041013093420132E03093430140910B20BF +S11310D050910C2040934401509345014BEA53E254 +S11310E0409348015093490110924A012BE3209305 +S11310F04C0190934D0110924E0120812068208371 +S1131100188A20E4288B888B998B95E99A8B90E137 +S11311109B8B4CED55E04C8B5D8B888F398F1A8EF1 +S11311208CEC95E28C8F9D8F1E8E68EC70E084EFC2 +S113113091E0DADA80E991E0809307209093082027 +S113114081E08093062088898068888BDF91CF9125 +S113115008950895CF93DF9387E080930920C5DC39 +S1131160C0E0D1E01EAA94E298AB19AA39E53AABE3 +S113117083E08BAB40910D2050910E204CAB5DABC6 +S11311804AE951E248AF59AF1AAE29E32CAF809334 +S11311903D0110923E0128A9206828AB1092460117 +S11311A0E0E4F1E09083109241013093420132E097 +S11311B03093430140910B2050910C204093440103 +S11311C0509345014BEA53E240934801509349013F +S11311D010924A012BE320934C0180934D0110920D +S11311E04E01208120682083188A20E4288B25E280 +S11311F0288B898B85E98A8B80E18B8B4CED55E0BC +S11312004C8B5D8B988F398F1A8E8CEC95E28C8F7A +S11312109D8F1E8E68EC70E084EF91E065DA80E9C2 +S113122091E0809307209093082081E0809306202A +S113123088898068888BDF91CF91089508951F92E3 +S11312400F920FB60F9211248F939F93AF93BF9376 +S1131250EF93FF93E0E0F1E081E0838380917C21D0 +S113126090917D21019680937C2190937D218091A2 +S11312707C2190917D21AEE7B1E257968C935797EC +S113128080917C2190917D2158969C93108A84E0D2 +S1131290808B87E791E0848B958B809196208823BF +S11312A019F080E090E002C08EEE92E084539A4DF3 +S11312B080931C0180919620882319F080E090E0AF +S11312C002C08EEE92E084539A4DE0E0F1E0958FF7 +S11312D080898068808BFF91EF91BF91AF919F913E +S11312E08F910F900FBE0F901F9018951F920F9221 +S11312F00FB60F9211248F939F93EF93FF9382E085 +S11313008093030180917A2190917B2101968093AF +S11313107A2190937B2180917A2190917B21EEE731 +S1131320F1E2818F80917A2190917B21928FFF91BC +S1131330EF919F918F910F900FBE0F901F90189572 +S1131340E0E7F0E083818C7F838384818C7F8483D6 +S113135080818D7F8083E0E8F1E080EC82831286D7 +S113136088EC81831186A0E0B8E034E03C9323E06C +S113137011962C93119714961C92149785ED91E075 +S113138096968D939C93979716961C921697E0E4E5 +S1131390F8E030832183148286A397A31682E0E6C3 +S11313A0F6E0808180618083E0E4F9E083E1818379 +S11313B0148282E08683A6A3B7A310A611A681E0B7 +S11313C0808308951F920F920FB60F9211242F93CA +S11313D03F934F935F938F939F93EF93FF93CF9399 +S11313E0DF931F92CDB7DEB78FEF80934C098091C6 +S11313F00920873031F4E0E0F2E084A5898395A5E3 +S113140002C090912C0280919520891B209168093B +S11314103091690991E082300CF490E09923C9F08D +S113142091E02A3F374008F090E0992391F0209111 +S113143068093091690989301CF481E090E002C0A8 +S113144086E090E0820F931F809378099093790946 +S113145023C0209168093091690991E08F3F0CF015 +S113146090E09923C9F091E02730310508F490E029 +S1131470992391F02091680930916909883F1CF003 +S113148081E090E002C086E090E0A901481B590B7E +S113149040937809509379090F90DF91CF91FF9190 +S11314A0EF919F918F915F914F913F912F910F9069 +S11314B00FBE0F901F901895E0E7F0E083818F7EB8 +S11314C08383E0E4F6E080818A6A80838FEF8483FB +S11314D088E5828BE0EAF8E080E3838384EC85830B +S11314E087E08683178288E184830895E0E7F0E04B +S11314F08381877F8383E0ECF8E080E4808311823A +S113150088E58093550608951F920F920FB60F92A7 +S1131510112400000F900FBE0F901F9018951F927A +S11315200F920FB60F9211248F93EF93FF93E0EA7B +S1131530F8E080818083FF91EF918F910F900FBE2F +S11315400F901F9018959FB7F894E82FF0E0E0599A +S1131550FF4F60958081682360839FBF0895863024 +S113156011F060E001C068E18091510081FD26C066 +S11315709FB7F894E0E5F0E08081826080839FBFAC +S1131580818181FFFDCF9FB7F894A0E5B0E0169666 +S11315908C911697897F16968C931697E0E6F0E067 +S11315A080E885838BEB868316968C9116978460EE +S11315B016968C938081816080839FBF636084E4EE +S11315C090E00FD560E480E0BECF089580919A202A +S11315D008951CD1FC01838180939A20811102C05B +S11315E0BFC9089581E0089580919A20813009F45B +S11315F0CCC9089580919A2388234CF48076803452 +S1131600A9F480919B23811113C0C4C908958076E5 +S1131610803481F480919B2381110EC08091A0239A +S11316209091A123892B51F0B3C9089580E00895C6 +S113163080E0089580E0089580E0089580E00895B2 +S1131640E0919F20F091A0200190F081E02D228173 +S113165033812E0F3F1FFC014081E40FF11DE2177F +S1131660F307B8F481818430B9F0861309C005C04A +S113167081818430A1F0861303C08E2F9F2F08959B +S11316808081E80FF11DE217F30790F380E090E00A +S1131690089580E090E0089580E090E0089580E06F +S11316A090E0089580919C238F770C94DB13089528 +S11316B09091A220992381F1E0919F20F091A020A4 +S11316C00190F081E02D9481891740F5E0939D20ED +S11316D0F0939E20228133812E0F3F1FE217F307E0 +S11316E0F8F49181943061F49281981309C0938144 +S11316F0961306C0E0939D20F0939E2081E0089508 +S11317009081E90FF11DE217F30758F3E0939D2050 +S1131710F0939E2080E0089580E0089580E008958D +S113172080E00895EF92FF921F93CF93DF93C82F29 +S113173060E0BEDF182F882381F1A0919F20B09133 +S1131740A020EC2FF0E0EE0FFF1F12968D919C91DC +S11317501397E80FF91FE080F180D7011696ED91F9 +S1131760FC9117970995682F8C2FA2DF182F8823D7 +S1131770A1F0C0919D20D0919E2065E0CE0160DF54 +S1131780EC01892B21F08A810E94B015F6CFD70194 +S11317901296ED91FC9113970995812FDF91CF91CA +S11317A01F91FF90EF9008951F93CF93DF93182F0D +S11317B07FDF882339F1C0919D20D0919E2065E080 +S11317C0CE013EDFEC01892B41F04C815D816B81C0 +S11317D08A81FED78111F3CF15C0A0919F20B091CB +S11317E0A020E12FF0E0EE0FFF1F12968D919C9147 +S11317F01397E80FF91F0190F081E02D0190F0811B +S1131800E02D0995DF91CF911F91089580919D203E +S113181090919E20089568C70895CF938091A22047 +S11318208823C1F0E0919F20F091A0200190F081E5 +S1131830E02D8481882371F0C0E08C2F73DFCF5FAB +S1131840E0919F20F091A0200190F081E02D84810F +S1131850C81798F31092A2201092A6201092A720E5 +S1131860CF910895CF938091A220882349F1A0912C +S11318709F20B091A020ED91FC9111978481882341 +S1131880F9F0C0E0EC2FF0E0EE0FFF1F12968D91FF +S11318909C911397E80FF91F0190F081E02D0084CB +S11318A0F185E02D309709F00995CF5FA0919F2035 +S11318B0B091A020ED91FC9111978481C81710F389 +S11318C0CF9108950F931F93CF93DF93EAE9F3E247 +S11318D01286138614861586168617868081282F0D +S11318E088233CF44091A0235091A123452B09F473 +S11318F06CC3982F9076903409F00DC1E0919B232E +S11319004E2F50E0FA01E05AF109E930F10508F0F0 +S113191002C1E25FFE4F0C94BC1781E080939220D9 +S11319208091072090910820EEE7F1E2858780916D +S11319300720909108209687809172218787809153 +S11319406F21808BA8E6B0E012968C911297818B60 +S113195013968C91828B6091A0237091A123CF0167 +S113196030D737C3E0E0F8E01082CAE9D3E28A81D5 +S11319709B8186AB97AB8C818F7080836E817F81D6 +S11319808AE991E21ED78E819F8120910D203091AA +S11319900E208217930709F41CC380930D209093A3 +S11319A00E2080910920BED814C3E0E4F8E0108230 +S11319B0CAE9D3E28A819B8186AB97AB8C818F7015 +S11319C080836E817F818BEA93E2FBD68E819F8137 +S11319D020910B2030910C208217930709F4F9C24F +S11319E080930B2090930C20809109209BD8F1C206 +S11319F0109268091092690980919C238093952024 +S1131A00E8C280919C2380932406E3C2E0919C2346 +S1131A10F0919D23E830F10508F07DC0E95EFE4FAA +S1131A200C94BC1760E080E00E94F80480919E232F +S1131A300E94CC0480E076D8CCC260E080E00E94B2 +S1131A40F80480919E230E94CC0481E06BD8C1C22B +S1131A5061E081E00E94F804CAE9D3E28C810E942B +S1131A60CC048D810E94DB0482E05CD8B2C283E0A6 +S1131A7059D8AFC284E056D8ACC260E080E00E947E +S1131A80F80480919E230E94CC0485E04BD8A1C227 +S1131A9061E080E00E94F80480919E230E94CC04BF +S1131AA086E040D896C262E080E00E94F80480910B +S1131AB09E2380680E94CC0487E034D88AC2809137 +S1131AC09C238093840685C280919C2390919D23BE +S1131AD0892B91F00E948D0380E2E8EAFBE2ABEAF5 +S1131AE0B5E201900D928A95E1F781E08093AB25F0 +S1131AF00E94A2030E948D03E9E7F0E091E088EDE3 +S1131B00F89484BF90836091A0237091A1238AE804 +S1131B1090E257D65EC29111E1C122230CF005C1B7 +S1131B202091A0233091A1232115310509F4D6C1B8 +S1131B308F7109F0A3C090919B23963079F098306F +S1131B4009F492C091119AC02230310509F0C6C13E +S1131B5062E070E086EA90E234D63DC280919C2334 +S1131B6090919D23292F332722303105A9F024F4A5 +S1131B702130310541F0A9C123303105D9F12F308D +S1131B80310551F1A2C18091192090911A20DC01F4 +S1131B906C9170E016D659C0E0911920F0911A208A +S1131BA02189821708F09AC19927880F991F880FF5 +S1131BB0991FE0911B20F0911C20E80FF91F8081F0 +S1131BC09181FC0162817381FCD5E091A223F091A3 +S1131BD0A32382E0818339C080911D2090911E202F +S1131BE0009709F47BC1DC0112966D917C911397E7 +S1131BF0E8D52BC099278130910571F038F0029710 +S1131C0009F06CC12AE630E288E009C064E070E0C3 +S1131C108CE790E2D6D519C023E730E287E0422F63 +S1131C20AAE5B0E2E22FF32F219130E02D933D930A +S1131C309E2F941B9817C0F3682F660F6E5F6093F6 +S1131C40582070E088E590E2BCD5EAE9F3E28681A9 +S1131C509781228533858217930708F0BCC180934E +S1131C60A4239093A523B7C12130310509F036C1CF +S1131C7061E070E082EA90E2A4D5ADC18130E1F583 +S1131C8090919B239A30C1F52130310509F026C18A +S1131C908091A220882309F421C1C0919E23D09170 +S1131CA09F2300919F201091A020D801ED91FC91D9 +S1131CB08481C81708F012C160E08C2FF9DC8823F6 +S1131CC009F40CC1CE019927880F991FD8011296E7 +S1131CD0ED91FC911397E80FF91F0190F081E02D2D +S1131CE086819781FC0109958093A42061E070E0CE +S1131CF084EA90E266D56FC1823009F0EFC080912A +S1131D009B238111E4C02230310509F0E7C08091A2 +S1131D109E23D3D590E080939B2090939C2062E0F7 +S1131D2070E08BE990E24DD556C18F7109F083C004 +S1131D3090919B23933009F4CCC018F49130A1F016 +S1131D407AC0953019F0993039F175C08091A0238B +S1131D509091A123892B09F0C1C082E59BE0809377 +S1131D60A6239093A72337C18091A0239091A12308 +S1131D70892B09F0B3C080919C2390919D230197F6 +S1131D8009F0ACC08091A6209091A7208D7F80930C +S1131D90A6209093A7201FC18091A0239091A123F6 +S1131DA0892B09F09BC00AD5882309F497C0209198 +S1131DB09C2330919D233327E0911920F0911A2020 +S1131DC0818990E08217930708F488C026DD80910A +S1131DD09C2390919D238093A220882309F4FBC027 +S1131DE099278150904C880F991F880F991FE09173 +S1131DF01B20F0911C20E80FF91FE0939F20F09323 +S1131E00A0200190F081E02D8481882309F4E3C0AF +S1131E10C0E060E08C2FC8DC882309F45FC0CF5F8A +S1131E20E0919F20F091A0200190F081E02D848129 +S1131E30C81778F3D0C08130E1F490919B239B3094 +S1131E40C1F48091A0239091A123892B09F046C06D +S1131E508091A220882309F441C0EAE9F3E2C48115 +S1131E60D2818C2F5FDC8823C9F16D2F8C2F9CDCF1 +S1131E7033C0823099F580919B23813019F08330EF +S1131E8089F029C08091A0239091A123892B31F559 +S1131E9080919C2390919D23892B01F580919E2311 +S1131EA027D51AC08091A0239091A123892BB1F446 +S1131EB080919C2390919D23892B81F4CAE9D3E2DC +S1131EC08C8105D68C8168D607C080E005C080E08F +S1131ED003C080E001C080E081117EC080919A231C +S1131EE08F71813071F58091A220882351F1009186 +S1131EF09E2310919F23C0919F20D091A020E88120 +S1131F00F98184810817E8F460E0802FD1DB88230D +S1131F10C1F0F801FF27CF01880F991FEA81FB81E7 +S1131F20E80FF91FC081D181EE81FF810995682FE7 +S1131F30802FBEDB882329F0EC81FD810995811176 +S1131F404BC080919A238F71823009F040C08091F8 +S1131F50A2208823B1F1A0919F20B091A020ED91FF +S1131F60FC9111978481882371F1C0E0EC2FF0E09B +S1131F70EE0FFF1F12968D919C911397E80FF91F96 +S1131F8000811181D8011696ED91FC91179709955E +S1131F90682F8C2F8DDB8823F9F0D8011496ED91EE +S1131FA0FC9115970995811117C0CF5FA0919F20CF +S1131FB0B091A020ED91FC9111979481C917B0F2D2 +S1131FC00BC080E009C080E007C080E005C080E06D +S1131FD003C081E001C081E0DF91CF911F910F9197 +S1131FE008951BBEFC0128ED24BF60830895CF93A0 +S1131FF0DF939C01DB01E0ECF1E097859923ECF39E +S1132000CCECD1E0988198609883B901705FCD01E0 +S1132010B9D78881877F8883DF91CF910895E0ECD9 +S1132020F1E097859923ECF3ACECB1E09C919860D6 +S11320309C93E82FF0E0F05F60838C91877F8C9312 +S11320400895EF92FF920F931F93CF93DF938C0128 +S1132050E0ECF1E087858823ECF3780180E2E80E78 +S1132060F11CE8018C2F801B6991D9DFCE15DF05A7 +S1132070C9F7DF91CF911F910F91FF90EF900895D1 +S11320801F93CF93DF93E0ECF1E097859923ECF372 +S113209020E2829FC0011124C0ECD1E01A8299830E +S11320A088831A8585E38A8761E08BEC91E099DF68 +S11320B01A87DF91CF911F9108954091CA01E62FAD +S11320C0F72F8093CA0184914093CA010895811126 +S11320D022C090916C219923D9F09091CB2B91112E +S11320E001C0FFCF2FB7F894EAECFBE29181915045 +S11320F091832FBF0DC09091CB2B9F3F09F4FFCF4D +S11321002FB7F894EAECFBE291819F5F91832FBF94 +S113211080936C21089590916C21992361F3F8CFF9 +S11321200F93E8ECF4E080818F7D808380818F7D44 +S11321308083E0E5F1E202E00593109252211092CF +S1132140532100E2069300E40693E8E4F1E200E29E +S1132150069300E40693EAE9F3E2148615861686EC +S113216017861286138610923F210F9108950F93BC +S113217085E080933F21E1E5F1E204E00593E9E4A1 +S1132180F1E204E005930F9108950F9383E08093A7 +S11321903F211092522110925321E0E5F1E202E036 +S11321A006930F910895E091A623F091A723309709 +S11321B009F0099508950F93CF93DF9380913F2100 +S11321C0833019F4F0DFACDF5EC080913B21909145 +S11321D03C21C091A423D091A523C81BD90B71F530 +S11321E020913D2130913E21820F931F80933D2108 +S11321F090933E212091A0233091A123821793072D +S113220021F08091A820882341F084E080933F212D +S1132210E8E4F1E202E0069336C0E091A823F091ED +S1132220A923309799F00995882381F010923B21D6 +S113223010923C21C091A423D091A523C034D10590 +S113224028F01092A820C0E4D0E003C081E080937D +S1132250A820E0E4F1E2C28BD38B80913B219091E2 +S11322603C212091A2233091A323280F391F248BD2 +S1132270358BC80FD91FC0933B21D0933C21E0E597 +S1132280F1E202E00693DF91CF910F910895FC01F2 +S11322908181E82FE7708E2F90E0FC013197E730C1 +S11322A0F105C0F4E15EFE4F67C680E190E0089559 +S11322B080E290E0089580E490E0089580E890E062 +S11322C0089580E091E0089580E092E008958FEF12 +S11322D093E0089588E090E00895282F2F7030E06F +S11322E0220F331F082E000C990B8827990F881F83 +S11322F09927820F931F02979C01220F331F220FED +S1132300331F220F331F820F931F87519F4D089550 +S11323100F93CF938091CC0480FF62C081E08093BF +S1132320CC04E8E4F1E200E80693E0E5F1E200E839 +S113233006938093CA04E8E4F1E200E106938091F5 +S11323403F21882329F08350823008F42CDFE8DE13 +S113235080914A2190914B21089709F043C088E06D +S1132360EBEFF0E2AAE9B3E201900D928A95E1F76E +S1132370E8ECF4E0808180628083808180628083E5 +S1132380A1DAC82F811103C0F2DEC1E02CC0809114 +S11323909A2388236CF410923D2110923E211092CE +S11323A03B2110923C2182E080933F2104DF1BC03B +S11323B08091A0239091A123892B11F4E6DE13C010 +S11323C010923D2110923E2110923B2110923C210B +S11323D081E080933F21E8E4F1E202E0069303C048 +S11323E0C0E001C0C1E08C2FCF910F9108958F926E +S11323F09F92AF92BF92DF92EF92FF920F931F933F +S1132400CF93DF93D82E69DF8C01BD2CBB1CBB247A +S1132410BB1CCD2DCF70D0E0CC0FDD1FCB0DD11D5B +S1132420CE01880F991F880F991F880F991F9C014F +S1132430285B3E4D7901C9012ADF4C01BB2009F418 +S113244070C0FE01EE0FFF1FEE0FFF1FEE0FFF1F08 +S1132450E05CFE4D26853785D80115968D919C91BB +S11324601697820F931F15968D939C931697139628 +S11324702D913C9114978217930709F43CC0281BB3 +S1132480390B2115B4E03B0738F02FEF33E0C901D5 +S1132490B4014BD5281B390BF801808181FF09C099 +S11324A0C901B40142D541E0892B09F040E0842FF1 +S11324B001C080E0D8019C9180FB91F99C93CC0FE2 +S11324C0DD1FCC0FDD1FCC0FDD1FC05CDE4D1E8673 +S11324D01F862A873B8711962D913C91129715965A +S11324E08D919C911697820F931F8C879D87F7017E +S11324F002E00693CAC0D8018C9181FFB3C08D7FDE +S11325008C93CC0FDD1FCC0FDD1FCC0FDD1FC05C07 +S1132510DE4D1E861F861A861B86F70102E006938F +S1132520B4C0FE01EE0FFF1FEE0FFF1FEE0FFF1FE3 +S1132530E05CFE4DA284B384D8018C9182FF19C063 +S11325401196ED91FC91129715962D913C91169749 +S113255013968D919C911497B401E7D4B0E4DB9E5B +S1132560B001112467597F4DAC01CF01820F931F35 +S113257009D5F801258136812A0D3B1D2583368333 +S1132580838194818217930768F485839683CC0FA3 +S1132590DD1FCC0FDD1FCC0FDD1FC05CDE4D8E8533 +S11325A09F8560C0FE01EE0FFF1FEE0FFF1FEE0FB1 +S11325B0FF1FE05CFE4D468557854A155B0509F013 +S11325C051C02817390709F44DC0AC01421B530B05 +S11325D09A01211554E0350750F02FEF33E0C9017B +S11325E0B401A3D4D901A81BB90BCD0107C0C901FB +S11325F0B4019BD4F901E81BF90BCF01FE01EE0FE6 +S1132600FF1FEE0FFF1FEE0FFF1FE05CFE4D128653 +S113261013868815990578F4D8018C9184608C937D +S1132620B0E4DB9EC001112487599F4D84879587B0 +S11326308686978613C0F8014181528125813681AF +S1132640240F351FCC0FDD1FCC0FDD1FCC0FDD1F7A +S1132650C05CDE4D2C873D878E879F87F70102E0A3 +S1132660069313C0D8018C9180FF0FC08E7F8C938A +S11326701796ED91FC911897309739F015966D9156 +S11326807C9116974D2D80E00995DF91CF911F9194 +S11326900F91FF90EF90DF90BF90AF909F908F903D +S11326A00895CF93CFB7F89481E011DDEAECF4E01C +S11326B080E4808380E28083E1ECF4E080818160C7 +S11326C08083A9ECB4E08C9182608C93E8ECF4E014 +S11326D08081806480838C9181608C938081806808 +S11326E08083CFBFCF910895CF93DF93C0E6D0E02E +S11326F0188280E30E94AF0AE0ECF4E080818064F9 +S1132700808381E08883CFB7F894E0E4F1E2118616 +S1132710118A118E11A2E9EEF0E280818E7F80830E +S1132720E2EFF0E280818E7F80836AE170E082E0F4 +S1132730C4DC8F3F19F08093FA0403C08FE18093C7 +S1132740FA046BE170E082E0B8DC8F3F19F080930B +S1132750FB0403C08FE18093FB04E0ECF4E0808190 +S113276081608083808180688083808180618083B0 +S113277088E491E2868397838081806280838FEFEF +S11327808093C504E8ECF4E0808182608083109239 +S11327906C218091CF2B8F3F09F4FFCF9FB7F89422 +S11327A0EAECFBE285818F5F85839FBF7ADFCFBF31 +S11327B0DF91CF9108958093C30408958091C30459 +S11327C00895EAE9F3E28087918762877387089521 +S11327D0282F2F7030E0220F331F082E000C990B86 +S11327E08827990F881F9927820F931FFC01EE0FEA +S11327F0FF1FEE0FFF1FEE0FFF1FE05CFE4D218554 +S1132800207C09F058C06370613011F018F404C0E2 +S113281020EC03C020E801C020E440385105E9F071 +S113282050F440325105A9F040345105A1F0403133 +S11328305105D9F40CC0411532E0530791F04F3FD4 +S113284033E0530781F04115514079F408C041E069 +S11328500DC042E00BC043E009C044E007C045E0BE +S113286005C046E003C047E001C040E0FC01EE0FB4 +S1132870FF1FEE0FFF1FEE0FFF1FE05CFE4D1186E2 +S1132880DC01AA0FBB1FAA0FBB1FAA0FBB1FA85BAB +S1132890BE4D36E03C93242B2187880F991F880F67 +S11328A0991F880F991FFC01E05CFE4D81858062B1 +S11328B0818781E0089580E00895E82FEF70F0E0CB +S11328C0EE0FFF1F082E000C990B8827990F881F05 +S11328D09927E80FF91FEE0FFF1FEE0FFF1FEE0FF2 +S11328E0FF1FE05CFE4D818582FB882780F90895F7 +S11328F0282F2F7030E0A901440F551F282F082ED0 +S1132900000C330B2227330F221F3327240F351FCC +S1132910F901EE0FFF1FEE0FFF1FEE0FFF1FE05C2C +S1132920FE4D918592FF17C0220F331F220F331FD4 +S1132930220F331FF901E05CFE4D91859B7F918747 +S1132940CCDCFC01808180FF06C08E7F8083078001 +S1132950F085E02D099581E008957F928F929F92F2 +S1132960AF92BF92CF92DF92EF92FF920F931F9399 +S1132970CF93DF93982E862E6A017901AEDC5C0139 +S1132980792C771C7724771CC92DCF70D0E0CC0F1D +S1132990DD1FC70DD11DFE01EE0FFF1FEE0FFF1F40 +S11329A0EE0FFF1FE05CFE4D8185807C09F47DC045 +S11329B0FE01EE0FFF1FEE0FFF1FEE0FFF1FE05C87 +S11329C0FE4D8185807C803C61F0FE01EE0FFF1F8F +S11329D0EE0FFF1FEE0FFF1FE05CFE4D818582FDB1 +S11329E066C08FB7F894F501908190FF03C08FBF44 +S11329F0712C5EC0F5019081916090838FBFC1827C +S1132A00D282E382F48215821682078310878110B2 +S1132A1006C091E0E114F10419F090E001C091E0E6 +S1132A20F501808190FB81F98B7F8083772059F0B9 +S1132A30CC0FDD1FCC0FDD1FCC0FDD1FC05CDE4DC6 +S1132A401E861F862DC0FE01EE0FFF1FEE0FFF1F17 +S1132A50EE0FFF1FE05CFE4D8185807C803CA1F47D +S1132A60CE01880F991F880F991F880F991F885BC3 +S1132A709E4D0DDCBC01C70158D2892B29F0F5010C +S1132A8080818E7F808314C0CC0FDD1FCC0FDD1FAF +S1132A90CC0FDD1FC05CDE4D1A861B861E861F868A +S1132AA0892DA5DC7724739403C0712C01C0712C8B +S1132AB0872DDF91CF911F910F91FF90EF90DF90C1 +S1132AC0CF90BF90AF909F908F907F900895FF928A +S1132AD00F931F93CF93DF93182FF82EFF1CFF241F +S1132AE0FF1CC82FCF70D0E0CC0FDD1FCF0DD11D40 +S1132AF0F4DBDC01FE01EE0FFF1FEE0FFF1FEE0FF4 +S1132B00FF1FE85BFE4D02E005938C9180FF22C01D +S1132B108E7F8C931796ED91FC9118973097D1F096 +S1132B20FF2059F0CC0FDD1FCC0FDD1FCC0FDD1FB4 +S1132B30C05CDE4D6E857F850AC0CC0FDD1FCC0FD7 +S1132B40DD1FCC0FDD1FC05CDE4D6A857B85412F08 +S1132B5081E00995DF91CF911F910F91FF90089526 +S1132B60CF93C82FB4DFEC2FEF70F0E0EE0FFF1F10 +S1132B708C2FCC0F990B8827990F881F9927E80F62 +S1132B80F91FEE0FFF1FEE0FFF1FEE0FFF1FE05C9C +S1132B90FE4D1186CF9108950F93E82FEF70F0E06A +S1132BA0EE0FFF1F282F082E000C330B2227330FA4 +S1132BB0221F3327E20FF31FDF01AA0FBB1FAA0F47 +S1132BC0BB1FAA0FBB1FA05CBE4D19969C91199701 +S1132BD0946019969C93EE0FFF1FEE0FFF1FEE0FEC +S1132BE0FF1FE85BFE4D01E0069371DF81E00F916A +S1132BF008951F920F920FB60F9211240F932F93E3 +S1132C003F934F935F936F937F938F939F93AF9370 +S1132C10BF93EF93FF938091CB04882344F480E81F +S1132C208093CA040E94320C0E94350482C08091B1 +S1132C30CB0482FF20C084E08093CA048091502199 +S1132C4086FF77C08091CC0481FD73C061DB811164 +S1132C5070C080913F21813011F497DA6AC08430CA +S1132C6009F067C0E1E5F1E204E00593E9E4F1E28B +S1132C7004E005935EC08091CB0481FF55C082E0DF +S1132C808093CA048091482186FF53C08091CC046C +S1132C9081FD4FC03DDB81114CC080913F218230CA +S1132CA041F484E080933F21E8E4F1E202E00693FA +S1132CB040C0833009F03DC0E1E5F1E204E0059352 +S1132CC0E9E4F1E204E0059334C080E18093CA04AE +S1132CD00E940D0C1092C304E0E4F1E2118696E028 +S1132CE0908783E48187118A908B818B8BEF90E2AC +S1132CF08487958715DA1DC08091CB0486FF08C0B0 +S1132D0080E48093CA0480E0E2D90E94330411C0B5 +S1132D108091CB0485FF0DC080E28093CA0481E0DA +S1132D20D6D90E94340405C08091CB0484FFE4CF3B +S1132D30CCCFFF91EF91BF91AF919F918F917F91F4 +S1132D406F915F914F913F912F910F910F900FBE13 +S1132D500F901F9018951F920F920FB60F92112487 +S1132D600F931F932F933F934F935F936F937F938F +S1132D708F939F93AF93BF93CF93DF93EF93FF937F +S1132D808091CC0481FD03C0C3DA8111B9C082E013 +S1132D908093CC048091C5048195880FE8E4F1E226 +S1132DA0E81BF10920813181285431423695279559 +S1132DB03695279536952795822F869520FD02C056 +S1132DC090E001C090E8890FE82FEF70F0E0EE0F7B +S1132DD0FF1F282F082E000C330B2227330F221F2E +S1132DE03327E20FF31FDF01AA0FBB1FAA0FBB1F7C +S1132DF0AA0FBB1FA85BBE4D9C9195FF81C0FD012E +S1132E0000E20693811177C080913F21843019F448 +S1132E10CAD986D975C000914A2110914B2180915D +S1132E20A4239091A523C0913B21D0913C219E01E4 +S1132E30200F311F8217930718F48C010C1B1D0BF4 +S1132E408091A2239091A323A8016BEF70E28C0FD1 +S1132E509D1F98D0C00FD11FC0933B21D0933C211C +S1132E600034110569F480913D2190913E218C0F2D +S1132E709D1F2091A0233091A1238217930780F0F6 +S1132E80EAE9F3E2C287D3870684F785E02D309719 +S1132E9029F00995811102C06AD932C076D930C0AF +S1132EA08091A4239091A523C817D907F9F4E09140 +S1132EB0A823F091A923309711F459D921C0099579 +S1132EC0811102C054D91CC020913D2130913E2172 +S1132ED080913B2190913C21820F931F80933D214F +S1132EE090933E2110923B2110923C21E8E4F1E2C0 +S1132EF002E0069305C0803811F45DD901C077DA89 +S1132F00FF91EF91DF91CF91BF91AF919F918F91FD +S1132F107F916F915F914F913F912F911F910F91ED +S1132F200F900FBE0F901F901895AA1BBB1B51E169 +S1132F3007C0AA1FBB1FA617B70710F0A61BB70B25 +S1132F40881F991F5A95A9F780959095BC01CD01CA +S1132F50089597FB072E16F4009406D077FD08D049 +S1132F60E4DF07FC05D03EF4909581959F4F0895CA +S1132F70709561957F4F0895EE0FFF1F0590F491B2 +S1132F80E02D0994FB01DC0102C001900D92415037 +S10D2F905040D8F70895F894FFCFDD +S1132F9A40000CE02E0AFFFFFFFF5580008000E985 +S1132FAA0AF40AFA0AE60A000044201F200000284C +S1132FBA2023200F200000000902190001010080CB +S1132FCAFA0904000001FFFFFF0007058101FF035E +S1132FDA010000001201000200000040EB0394BA51 +S1132FEA00020102000100000003000000000000CA +S1132FFA000000000000000000004C61627261647D +S113300A6F72004573706F54656B00000403090402 +S10F301A64656275673132330000020007 S9030000FC diff --git a/AVR Code/USB_BULK_TEST/Debug/src/main.o b/AVR Code/USB_BULK_TEST/Debug/src/main.o index e6d63942..c0543b58 100644 Binary files a/AVR Code/USB_BULK_TEST/Debug/src/main.o and b/AVR Code/USB_BULK_TEST/Debug/src/main.o differ diff --git a/AVR Code/USB_BULK_TEST/Debug/src/tiny_dma.o b/AVR Code/USB_BULK_TEST/Debug/src/tiny_dma.o index 46f51517..e422f882 100644 Binary files a/AVR Code/USB_BULK_TEST/Debug/src/tiny_dma.o and b/AVR Code/USB_BULK_TEST/Debug/src/tiny_dma.o differ diff --git a/AVR Code/USB_BULK_TEST/src/main.c b/AVR Code/USB_BULK_TEST/src/main.c index b579dc88..a660dca2 100644 --- a/AVR Code/USB_BULK_TEST/src/main.c +++ b/AVR Code/USB_BULK_TEST/src/main.c @@ -173,6 +173,34 @@ void main_resume_action(void) void main_sof_action(void) { + #ifdef SINGLE_ENDPOINT_INTERFACE + switch(global_mode){ + case 0: + tiny_dma_loop_mode_0(); + break; + case 1: + tiny_dma_loop_mode_1(); + break; + case 2: + tiny_dma_loop_mode_2(); + break; + case 3: + tiny_dma_loop_mode_3(); + break; + case 4: + tiny_dma_loop_mode_4(); + break; + case 6: + tiny_dma_loop_mode_6(); + break; + case 7: + tiny_dma_loop_mode_7(); + break; + default: + break; + } + #endif + uds.trfcntL0 = DMA.CH0.TRFCNTL; uds.trfcntH0 = DMA.CH0.TRFCNTH; uds.trfcntL1 = DMA.CH1.TRFCNTL; @@ -211,12 +239,17 @@ void main_sof_action(void) currentTrfcnt = DMA.CH0.TRFCNT; debugOnNextEnd = 0; } - if(global_mode < 5){ - usb_state = (DMA.CH0.TRFCNT < 375) ? 1 : 0; - } - else{ - usb_state = (DMA.CH0.TRFCNT < 750) ? 1 : 0; - } + #ifndef SINGLE_ENDPOINT_INTERFACE + if(global_mode < 5){ + usb_state = (DMA.CH0.TRFCNT < 375) ? 1 : 0; + } + else{ + usb_state = (DMA.CH0.TRFCNT < 750) ? 1 : 0; + } + #else + usb_state = !usb_state; + #endif + return; } @@ -262,12 +295,6 @@ void iso_callback(udd_ep_status_t status, iram_size_t nb_transfered, udd_ep_id_t } return; #else - if (global_mode < 1){ - udd_ep_run(0x81, false, (uint8_t *)&isoBuf[usb_state * HALFPACKET_SIZE], PACKET_SIZE, iso_callback); - } - else{ udd_ep_run(0x81, false, (uint8_t *)&isoBuf[usb_state * PACKET_SIZE], PACKET_SIZE, iso_callback); - } - #endif } diff --git a/AVR Code/USB_BULK_TEST/src/tiny_dma.c b/AVR Code/USB_BULK_TEST/src/tiny_dma.c index 57c73e0e..5afab2b1 100644 --- a/AVR Code/USB_BULK_TEST/src/tiny_dma.c +++ b/AVR Code/USB_BULK_TEST/src/tiny_dma.c @@ -87,11 +87,11 @@ void tiny_dma_set_mode_0(void){ DMA.CH0.CTRLA = 0x00; DMA.CH0.CTRLA = DMA_CH_RESET_bm; - DMA.CH0.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; //Do not repeat! - DMA.CH0.CTRLB = 0x00; //No interrupt! + DMA.CH0.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + DMA.CH0.CTRLB = 0x03; //No interrupt! DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_DESTRELOAD_BLOCK_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_ADCA_CH0_gc; //Triggered from ADCA channel 0 - DMA.CH0.TRFCNT = PACKET_SIZE; + DMA.CH0.TRFCNT = HALFPACKET_SIZE; DMA.CH0.SRCADDR0 = (( (uint16_t) &ADCA.CH0.RESL) >> 0) & 0xFF; //Source address is ADC DMA.CH0.SRCADDR1 = (( (uint16_t) &ADCA.CH0.RESL) >> 8) & 0xFF; @@ -632,6 +632,15 @@ ISR(DMA_CH0_vect){ dma_ch0_ran++; uds.dma_ch0_cntL = dma_ch0_ran & 0xff; uds.dma_ch0_cntH = (dma_ch0_ran >> 8) & 0xff; + + DMA.CH0.CTRLA = 0x00; + DMA.CH0.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + DMA.CH0.TRFCNT = HALFPACKET_SIZE; + + DMA.CH0.DESTADDR0 = (( (uint16_t) &isoBuf[!usb_state * PACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + DMA.CH0.DESTADDR1 = (( (uint16_t) &isoBuf[!usb_state * PACKET_SIZE]) >> 8) & 0xFF; + + DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm; } ISR(DMA_CH1_vect){