From d2fe7895013e7dec89db750d5dff2c927f815cbb Mon Sep 17 00:00:00 2001 From: BlubbFish Date: Sun, 6 Oct 2013 16:10:06 +0000 Subject: [PATCH] 20131006-181003 --- Test.atsuo | Bin 9728 -> 11776 bytes Test/Debug/Makefile | 31 +- Test/Debug/Test.d | 40 +- Test/Debug/Test.elf | Bin 5419 -> 50020 bytes Test/Debug/Test.hex | 410 +++- Test/Debug/Test.lss | 3933 +++++++++++++++++++++++++++++++++++++- Test/Debug/Test.map | 631 +++++- Test/Debug/Test.srec | 410 +++- Test/Debug/led.d | 34 + Test/Debug/makedep.mk | 6 + Test/Debug/rs232.d | 48 + Test/Debug/usb_serial.d | 57 + Test/Test.c | 162 +- Test/Test.cproj | 24 + Test/config.h | 17 + Test/led.c | 23 + Test/led.h | 26 + Test/rs232.c | 32 + Test/rs232.h | 17 + Test/usb_serial.c | 763 ++++++++ Test/usb_serial.h | 273 +++ Test/usb_serial_config.h | 322 ++++ 22 files changed, 7064 insertions(+), 195 deletions(-) create mode 100644 Test/Debug/led.d create mode 100644 Test/Debug/rs232.d create mode 100644 Test/Debug/usb_serial.d create mode 100644 Test/config.h create mode 100644 Test/led.c create mode 100644 Test/led.h create mode 100644 Test/rs232.c create mode 100644 Test/rs232.h create mode 100644 Test/usb_serial.c create mode 100644 Test/usb_serial.h create mode 100644 Test/usb_serial_config.h diff --git a/Test.atsuo b/Test.atsuo index 6339a9074ed18f4e291e17cebff38c1251baeb31..c95925ad5c4578e56b9f70ff11c725c61d7334b6 100644 GIT binary patch delta 1076 zcmaJNa}79S3*BtRA@goq6n(@e12OW5gmBH_q@+}&h!3!C)f~d z9;ucnvk*d=VA)_fkxEGf4>2c{r!#Kfd^C-v07f&(8Rm%+Yhh30U$97=v5=sgA$>Bp zTpwG_!_}G1z#t47kRbj`Ka6>A&(g=2`CzsSOZ5o zuypRE!p*J~fD{-BWX!TG?L#f51~ec*yUZ1%NsXJ$13)4M16q$hB(CpK zVwrI8CtaQ!lUUYPlFawW8PPQoFwCshZgi6v0|etG+(6E8c9R1+Q71Z%+L09%As_k} zjk*@DSB;;&a<}gM+c6I&3C=ufs==%Z1UZo?YlEO0jIJRwhixRJIl%6KsGrAH(PCoK z7O?q%7{OAtvUUgtM6?omS+*09e)7Fw0DEY4n|jeHUFak_0vbno1=}I^!znOh#|GwdC?+34bUYUy5CMsr2>-o%1npsDu*v6}07;sr_;fY{z#SJ`5LS8b@ zZGflB)AT8t4;9VjhPH(7FX7e|SNXH{mr_~;@LW{R&;xDTP%#*7S@HDZ#7tsR-g&R7 z{);u#4U+3IPm}_Y&VL&}X#i|T2QpO9I04)GZ3+#cQ z3ydx*u$`yTV+$ZD+QwQ4QnYm4KJ?(-aEW44rC#UH$R3}}nW8;fRv#bt_fM%FTuR2U le|q_H;X+>TViO%(k(k+ze*?IMVH5xW delta 353 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

e%SF-BS3?Z{PLj`7t=dO!PV2?Eim9x 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 diff --git a/Test/Debug/Test.hex b/Test/Debug/Test.hex index ae2700a..bee4e6c 100644 --- a/Test/Debug/Test.hex +++ b/Test/Debug/Test.hex @@ -1,11 +1,401 @@ -:100000000C943A000C9444000C9444000C9444006A -:100010000C9444000C9444000C9444000C94440050 -:100020000C9444000C9444000C9444000C94440040 -:100030000C9444000C9444000C9444000C94440030 -:100040000C9444000C9444000C9444000C94440020 -:100050000C9444000C9444000C9444000C94440010 -:100060000C9444000C9444000C9444000C94440000 -:100070000C94440011241FBECFEFD4E0DEBFCDBFEF -:100080000E9446000C944E000C94000084B1806ED7 -:1000900084B990E485B1892785B9FCCFF894FFCF66 +:100000000C9469000C9486000C9486000C94860075 +:100010000C9486000C9486000C9486000C94860048 +:100020000C9486000C9486000C9486000C94E103DA +:100030000C9409040C9486000C9486000C948600A1 +:100040000C9486000C9486000C9486000C94860018 +:100050000C9486000C9486000C9486000C94860008 +:100060000C9486000C9486000C9486000C948600F8 +:100070000C9486001201000202000010010003002F +:1000800000010102030104030904140342006C008F +:10009000750062006200460069007300680000009D +:1000A00020034800610063006B00650072002D00B2 +:1000B0004A0065006F007000610072006400790002 +:1000C00000000E03300030003000300030003000FF +:1000D000000011241FBECFEFD4E0DEBFCDBF11E082 +:1000E000A0E0B1E0E6EFF7E102C005900D92A23F7B +:1000F000B107D9F722E0A2EFB1E001C01D92A6300E +:10010000B207E1F70E9444020C94F90B0C94000032 +:1001100095B19F7195B995B18295880F807E982B86 +:1001200095B9089584B1806E84B90895CF93C82F8E +:100130008A3019F48DE00E949600E8ECF0E090819E +:1001400095FFFDCFC093CE0080E090E0CF91089561 +:1001500086E08093CA00E9ECF0E0808188608083CB +:1001600087E68093CC0080E091E090930302809337 +:10017000020208950E94920086E090E00E948800AA +:1001800087E090E00E9488000E94A80086E090E04E +:100190000E9488000E949F0278942EE031E049E09E +:1001A00050E061E070E08FE691E00E94A0080895C1 +:1001B0000895089508950F931F93CF93DF93CDB7BC +:1001C000DEB7C854D1090FB6F894DEBF0FBECDBF5D +:1001D000833009F04DC140E2BE016F5F7F4F0E9446 +:1001E0009C0319A28981883669F030F48F3351F06D +:1001F000833609F01BC11AC0893671F0803709F0C7 +:1002000015C11EC08AE1E9E7F1E0DE019196019097 +:100210000D928A95E1F713C184E1E3E9F1E0DE0193 +:10022000919601900D928A95E1F709C18BE1E7EA79 +:10023000F1E0DE01919601900D928A95E1F7FFC001 +:100240008E010F5D1F4F80E790E7A0E7B0E089A324 +:100250009AA3ABA3BCA36091F5017091F6018091C4 +:10026000F7019091F8012AE030E0A8010E945A08B5 +:10027000F80101900020E9F731978AE390E091833B +:1002800080834AE050E0BE016F5B7F4F8091FB01AD +:1002900090E00E943908BE016F5B7F4FC8010E9449 +:1002A0002E088091FA01823009F128F4882341F068 +:1002B0008130E9F510C0833021F18430C1F52CC0C4 +:1002C000FE01B19601900020E9F731978EE490E0AD +:1002D0009183808336C0FE01B19601900020E9F73A +:1002E00031978FE490E0918380832BC0FE01B1961B +:1002F00001900020E9F7319785E490E091838083B5 +:1003000020C0FE01B19601900020E9F731978DE4FD +:1003100090E09183808315C0FE01B196019000208A +:10032000E9F7319783E590E0918380830AC0FE016D +:10033000B19601900020E9F731978FE390E0918327 +:1003400080838091F901813079F018F0823031F5A5 +:100350001AC0FE01B19601900020E9F7319781E3C0 +:1003600090E09183808324C0FE01B196019000202B +:10037000E9F7319781E39EE2A5E3B0E080839183C2 +:10038000A283B38315C0FE01B19601900020E9F766 +:10039000319782E390E0918380830AC0FE01B19699 +:1003A00001900020E9F731978FE390E091838083FB +:1003B0008E010F5D1F4FD8010D900020E9F71197B6 +:1003C00086E0E2ECF1E001900D928A95E1F78091F0 +:1003D000F4014AE050E0BE016F5B7F4F869590E0EC +:1003E0000E943908BE016F5B7F4FC8010E942E0832 +:1003F000D8010D900020E9F7119786E0E8ECF1E0D4 +:1004000001900D928A95E1F78091F4014AE050E065 +:10041000BE016F5B7F4F817090E00E943908BE0182 +:100420006F5B7F4FC8010E942E0809C080E1EEEC8F +:10043000F1E0DE01919601900D928A95E1F7BE01FF +:100440006F5D7F4FFB0101900020E9F731978DE050 +:100450009AE0A0E080839183A283FB0101900020B9 +:10046000E9F73197AF01461B570B84E00E94B203B6 +:10047000C85BDF4F0FB6F894DEBF0FBECDBFDF9174 +:10048000CF911F910F910895CF93DF93CDB7DEB732 +:10049000A0970FB6F894DEBF0FBECDBF0E94BA0082 +:1004A00082E090E00E948800912C0F2EFEEDAF2E8E +:1004B000F1E0BF2EF02D0F2EFEE0CF2EF1E0DF2E6B +:1004C000F02D0F2EF7EEEF2EF1E0FF2EF02D8E0126 +:1004D0000F5F1F4F86E090E00E94880093941F9268 +:1004E0009F92BF92AF92DF92CF920E948E081982A4 +:1004F0001F929F92FF92EF921F930F930E94D10839 +:10050000F80101900020E9F73197AF01401B510B32 +:10051000B80184E00E94B20382E090E00E9488006B +:100520002FEF81EE94E0215080409040E1F700C031 +:1005300000000FB6F894DEBF0FBECDBFCBCF80EA70 +:100540008093D80086E089BD09B400FEFDCF80E825 +:100550008093D8001092E0001092F2018FEF809308 +:1005600025013C9888E08093E20008952F923F9205 +:100570004F925F927F928F929F92AF92CF92DF9233 +:10058000EF92FF920F931F93CF93DF93ECE2F1E092 +:100590008EE291E041E00F2EF9EECF2ED12CF02D1E +:1005A0000F2EFBEEEF2EF12CF02DAA24A3940CEECF +:1005B00010E06DEE70E00F2EF0EF4F2E512CF02D6D +:1005C0006894992492F8812C6894772474F8DF0158 +:1005D00020812F3F59F1E6014883E701A88220815D +:1005E000E80128831C019C0121503109E90128817F +:1005F000203841F0203441F0203241F0203141F4E4 +:10060000372D07C030E405C030E303C030E201C03D +:10061000382DE1012881232BEB0128832C9120FF29 +:1006200003C0D2011C9202C0E20198824F5F34964F +:100630000496453061F6EAEEF0E08EE180831082A8 +:10064000DF91CF911F910F91FF90EF90DF90CF90AE +:10065000AF909F908F907F905F904F903F902F90A2 +:100660000895E8EEF0E080818570E9F30895E8EE02 +:10067000F0E0808182FFFDCF08958F929F92AF922C +:10068000BF92CF92DF92EF92FF920F931F93CF937F +:10069000DF93D82EE42FF0E02E173F0710F4C22E80 +:1006A00001C0C42E062F172F6894992494F80F2E9A +:1006B000F8EEEF2EF12CF02D0F2EFEEFBF2EF02DC9 +:1006C000C1EFD0E0A12C01C08A2C0E94310382FC32 +:1006D00026C02C2D80E18C1508F4292D2223D9F079 +:1006E000F801922FDD2011F0808101C08491888370 +:1006F000915031969111F6CF622F615070E06F5F8B +:100700007F4F060F171FC21AF701B082C110DCCF4E +:100710002031D1F204C0F701B082C110D5CFDF91F2 +:10072000CF911F910F91FF90EF90DF90CF90BF90EE +:10073000AF909F908F9008958093E9009091F20080 +:10074000842F941708F4892F882359F0262FE62F39 +:10075000F72FA1EFB0E09C9191939E2F921B9817D9 +:10076000D0F30895CF93DF93442329F18093E900D8 +:10077000E8EEF0E0808180FFFDCF8091F2008111F2 +:100780001CC0962FE62FF72FA8EEB0E0C1EFD0E007 +:100790008C9185FF02C08081888331968E2F891BC2 +:1007A0008417B0F3E8EEF0E080818E7F80838FE7DE +:1007B000808381E003C080E001C080E0DF91CF91C1 +:1007C00008951F920F920FB60F9211248F93EF93FB +:1007D000FF93E1EEF0E08081108283FF12C010925F +:1007E000E90081E08093EB001092EC0082E18093BD +:1007F000ED0088E08093F0001092F2018FEF80937B +:100800002501FF91EF918F910F900FBE0F901F90D8 +:1008100018951F920F920FB60F9211242F923F92AC +:100820004F925F926F927F928F929F92AF92BF9200 +:10083000CF92DF92EF92FF920F931F932F933F93EC +:100840004F935F936F937F938F939F93AF93BF93D8 +:10085000EF93FF93CF93DF93CDB7DEB72997DEBF3A +:10086000CDBF8091F40080FF8FC21092E90080918B +:10087000E80083FF58C2E1EFF0E050814081208121 +:100880003081932F80E0822B608170813081E08104 +:1008900022EF2093E800463009F05AC11E2F00E0F5 +:1008A000032B811523E0920709F42AC148F481152E +:1008B00041E09407F9F08115924009F045C10CC060 +:1008C0008230A3E09A0709F42DC108F422C18330D5 +:1008D000934009F039C12FC12CE331E03D832C83D3 +:1008E0006CE571E0A0E040E050E0FF24F394E12CDF +:1008F00069011BC0E4E7F0E044919801BF0180E08A +:100900000E943D034AC2F901E80FF91FBF2DE081A3 +:10091000EF3F09F4BE2DAB0F04968031910599F796 +:10092000205F3F4F2617370711F0CA01ECCFDD8259 +:10093000CC828A2F880F880F880F8A1B825D89835B +:1009400090E00E94F606E82EF92E89E0D7018C93FC +:1009500082E011968C931197E9811296EC9312978D +:1009600013961C92139714968C93149781E0159606 +:100970008C93159716961C92169780E817968C9371 +:1009800017978AEF18968C93189719960F2EF2E204 +:10099000AF2EF1E0BF2EF02D0F2EFFE18F2EF1E0F4 +:1009A0009F2EF02D0F2EFCE16F2EF1E07F2EF02D0B +:1009B00040E050E0412C512C312CDD24D394232CE9 +:1009C0008FE691E01B830A83FD0188C0D801A20F46 +:1009D000B31F6D2DAC91AF3F09F4622DC60E2C5F95 +:1009E0003F4F2031310591F71D830C8319E01083AF +:1009F00024E0218372831382C4829A01D5016D9110 +:100A00005D016583D4016D914D016683D3016D91C4 +:100A10003D016783108671110CC0BF013996ACE5AA +:100A2000B1E01D911193A817B907D9F7FB017C9686 +:100A300001C03996CC2009F446C022953295307F0A +:100A40003227207F3227215C3E4F11E059874887AB +:100A50006C817D813F832E83A90143505109DA01C6 +:100A60000C910F3F39F1B7E0B08345E04183402F4F +:100A7000479544274795412B4283013441F0003488 +:100A800041F0013841F0003841F442E007C04D2DFB +:100A900005C04D2D03C042E001C043E04383AE8159 +:100AA000BF8112974C9144831582AE81BF814C91D6 +:100AB000468337961F5F2C5F3F4F153059F64885A8 +:100AC00059857D836C834F5F5F4F0C811D81005F73 +:100AD0001F4F1D830C834230510531F0742F92015A +:100AE000C32C0C811D8172CF0A811B819801498121 +:100AF000B70181E00E943D03C7010E9491074DC1EB +:100B0000E6E8F0E044919801BF0180E00E943D03D7 +:100B100044C1EAE8F0E044919801BF0180E00E94FE +:100B20003D033BC1E0EAF0E044919801BF0180E061 +:100B30000E943D0332C1E2ECF0E044919801BF0114 +:100B400080E00E943D0329C181E28093EB0025C132 +:100B5000453061F42EEF2093E800E8EEF0E02081CC +:100B600020FFFDCF80688093E30017C1372F20E07E +:100B7000262B493099F451113EC0019759F481E078 +:100B80008093F2018EEF8093E800109225010E947D +:100B9000B60203C181E28093EB00FFC0483081F4CC +:100BA000503809F043C0E8EEF0E0808180FFFDCFCF +:100BB0008091F2018093F1008EEF8093E800EDC008 +:100BC0004132C9F4513A09F043C0E8EEF0E08081C7 +:100BD00080FFFDCF0E94D800E5EFF1E08CEF91E0BF +:100BE000A1EFB0E021912C93E817F907D9F78EEF28 +:100BF0008093E800D2C04032C9F4513209F059C0A4 +:100C00000E943703E5EFF1E08CEF91E0A1EFB0E057 +:100C10002C912193E817F907D9F7E8EEF0E08BEF74 +:100C200080838EEF80830E94D900B7C0423281F466 +:100C3000513209F04FC08093F401E8EEF0E080817A +:100C400080FFFDCF8EEF8093E8000E94DA00A5C000 +:100C500041111AC0E8EEF0E0808180FFFDCF5238EC +:100C600051F4E9EEF0E020838091EB0085FB8827CA +:100C700080F9108201C080E0E1EFF0E08083108213 +:100C80008EEF8093E80089C04B3099F4503211F018 +:100C9000511149C02230310540F4209325018EEFD7 +:100CA0008093E8000E94B60278C081E28093EB0056 +:100CB00074C04A3079F45038B1F5E8EEF0E0808144 +:100CC00080FFFDCF809125018093F1008EEF80930E +:100CD000E80063C0413011F0433029F5523019F576 +:100CE000892B09F52F773327922F91509430D8F420 +:100CF0009EEF9093E8002093E900433021F481E2D5 +:100D00008093EB004AC089E18093EB0081E090E0A2 +:100D1000AC0102C0440F551F2A95E2F7EAEEF0E05D +:100D2000408310823AC081E28093EB002DC0122FE5 +:100D3000808190E0022E02C0959587950A94E2F793 +:100D400080FF19C0DA012C93DB018C9182FF13C064 +:100D50008091F200882341F06091F20070E0822FD0 +:100D60000E94DB001093E900E8EEF0E089EF808359 +:100D70008FE7808312C02F5F3F4F25303105B9F6D2 +:100D800081E28093EB0009C021E030E0E4EFF0E085 +:100D900049EE50E068EE70E0CACF29960FB6F8949D +:100DA000DEBF0FBECDBFDF91CF91FF91EF91BF911D +:100DB000AF919F918F917F916F915F914F913F91F3 +:100DC0002F911F910F91FF90EF90DF90CF90BF90E8 +:100DD000AF909F908F907F906F905F904F903F90DB +:100DE0002F900F900FBE0F901F9018950F931F9389 +:100DF000CF93DF938230910510F482E090E0E09190 +:100E0000FE01F091FF0120E030E0C0E0D0E023C01F +:100E10004081518148175907A8F04817590761F4D4 +:100E200082819381209719F09B838A832EC09093AF +:100E3000FF018093FE0129C02115310529F04217D9 +:100E4000530710F0A90102C0BE01DF010281138126 +:100E5000EF019A01F8013097D9F62115310509F112 +:100E6000281B390B2430310590F412968D919C91FA +:100E700013976115710521F0FB019383828304C0F0 +:100E80009093FF018093FE01FD01329644C0FD0165 +:100E9000E20FF31F81939193225031092D933C93DC +:100EA0003AC02091FC013091FD01232B41F42091A7 +:100EB0002801309129013093FD012093FC012091FC +:100EC0002601309127012115310541F42DB73EB798 +:100ED00040912A0150912B01241B350BE091FC011C +:100EE000F091FD01E217F307A0F42E1B3F0B28172A +:100EF000390778F0AC014E5F5F4F2417350748F093 +:100F00004E0F5F1F5093FD014093FC01819391931D +:100F100002C0E0E0F0E0CF01DF91CF911F910F918F +:100F20000895EF92FF920F931F93CF93DF93009753 +:100F300009F48FC0DC01129713961C921E9212972F +:100F4000E090FE01F090FF01E114F10489F42D918D +:100F50003C911197280F391F8091FC019091FD0160 +:100F60008217930789F5B093FD01A093FC0171C02E +:100F7000E70120E030E001C0EA01CA17DB0738F4DE +:100F80004A815B819E0141155105B1F722C0BC0128 +:100F900062507109FB01D383C28300811181AC01CE +:100FA000400F511F4C175D0761F448815981400F74 +:100FB000511F4E5F5F4F518340834A815B81538352 +:100FC00042832115310529F4B093FF01A093FE015E +:100FD00040C0F901B383A283E90169917991C60FF9 +:100FE000D71FAC17BD0779F4DC015E914E91460F17 +:100FF000571F4E5F5F4F5183408312968D919C9196 +:10100000139793838283A0E0B0E002C0D7017C01F4 +:10101000F701828193810097C9F7C7010296208169 +:101020003181820F931F2091FC013091FD0128171F +:10103000390779F4109729F41092FF011092FE01FC +:1010400004C013961C921E921297F092FD01E0923A +:10105000FC01CDB7DEB7E6E00C94EA0BFB01DC0146 +:101060000D900020E9F7119701900D920020E1F713 +:101070000895FB019F01E8944230C4F04532B4F476 +:101080004A3029F497FB1EF4909581959F4F642F69 +:1010900077270E948C0B805D8A330CF0895D8193E9 +:1010A000CB010097A1F716F45DE251931082C901BC +:1010B0000C94E70AFA01CF93FF93EF93223044F1A7 +:1010C000253234F5C22FE894CA3049F497FB3EF438 +:1010D00090958095709561957F4F8F4F9F4F2C2FE6 +:1010E000332744275527FF93EF930E94A00BEF91DE +:1010F000FF91605D6A330CF0695D6193B901CA01CB +:10110000605070408040904051F716F4CDE2C1939A +:1011100010828F919F91CF910C94E70AA0E0B0E0EC +:10112000E4E9F8E00C94D20BCE010996AC016F8192 +:1011300078858D819E810E94F308E2E00C94EE0B8D +:10114000A0E0B0E0E6EAF8E00C94C80B6B014A01BD +:101150007901D90113962C9121FF1BC08C01C0E0AD +:10116000D0E010C0D7011896ED91FC911997B70106 +:10117000D8018D918D010995892B69F40A151B05FC +:1011800089F72196C815D90531F05801AC0CBD1C62 +:10119000F5CFC0E0D0E0CE01CDB7DEB7ECE00C94E7 +:1011A000E40BAEE0B0E0E7EDF8E00C94D00B0D8975 +:1011B0001E8986E08C831A8309838FEF9FE79E83C5 +:1011C0008D83CE014996AC016F89788DCE01019651 +:1011D0000E94F308EF81F885E00FF11F10822E9630 +:1011E000E4E00C94EC0BACE0B0E0E9EFF8E00C9438 +:1011F000C20B7C016B018A01FC011782168283817C +:1012000081FFC8C188248394912C8C0E9D1EF70108 +:101210009381F60193FD859193FF81916F0188235E +:1012200009F4B4C1853239F493FD859193FF81911E +:101230006F01853229F4B70190E00E94F70AE7CFE9 +:10124000512C312C20E02032A8F48B3261F028F4AC +:10125000803251F0833271F40BC08D3239F080331B +:1012600049F421602AC02260246027C0286025C07C +:10127000206123C027FD29C0382F30533A3088F42D +:1012800026FF07C0852D6AE00E94830B582E530E5F +:1012900014C0832D6AE00E94830B382E330E206227 +:1012A0000CC08E3221F426FD71C1206406C08C363C +:1012B00011F4206802C0883641F4F60193FD85914F +:1012C00093FF81916F018111BECF982F9554933078 +:1012D00018F09052933028F40C5F1F4FFFE3F9830E +:1012E0000DC0833631F0833771F0833509F05EC06D +:1012F00023C0F801808189830E5F1F4F44244394EB +:10130000512C540115C03801F2E06F0E711CF80128 +:10131000A080B18026FF03C0652D70E002C06FEF92 +:101320007FEFC5012C870E94DC0A2C0183012C85EC +:101330006FE7262E222218C03801F2E06F0E711CD2 +:10134000F801A080B18026FF03C0652D70E002C0C7 +:101350006FEF7FEFC5012C870E94D10A2C012C85ED +:1013600050E8252E222A830123FC1CC006C0B701A9 +:1013700080E290E00E94F70A3A94832D90E04816AC +:101380005906A8F30FC0F50127FC859127FE81912E +:101390005F01B70190E00E94F70A31103A94F1E042 +:1013A0004F1A51084114510471F7EDC0843611F001 +:1013B000893641F5F80127FF07C06081718182817C +:1013C00093810C5F1F4F08C060817181882777FD72 +:1013D0008095982F0E5F1F4F4FE6B42EB22297FFD5 +:1013E00009C090958095709561957F4F8F4F9F4F65 +:1013F000F0E8BF2A2AE030E0A4010E94230BA82EC7 +:10140000A81843C0853731F43FEEB32EB2222AE04C +:1014100030E024C099EFB92EB2228F36B9F020F413 +:10142000883509F0B3C00DC0803721F0883709F046 +:10143000ADC002C020E1B22AB4FE0BC084E0B82ADD +:1014400008C024FF09C0E6E0BE2A06C028E030E05C +:1014500005C020E130E002C020E132E0F801B7FE33 +:1014600007C060817181828193810C5F1F4F06C02C +:101470006081718180E090E00E5F1F4FA4010E94A7 +:10148000230BA82EA818FFE7BF22B6FE0BC02B2DFA +:101490002E7FA51450F4B4FE0AC0B2FC08C02B2D58 +:1014A0002E7E05C07A2C2B2D03C07A2C01C0752C02 +:1014B00024FF0DC0FE01EA0DF11D8081803311F47F +:1014C000297E09C022FF06C07394739404C0822F42 +:1014D000867809F0739423FD14C020FF0FC05A2CA6 +:1014E000731460F4530C5718732C08C0B70180E2D2 +:1014F00090E02C870E94F70A73942C857314B0F344 +:1015000004C0731410F4371801C0312C24FF12C02A +:10151000B70180E390E02C870E94F70A2C8522FF18 +:101520001EC021FF03C088E590E002C088E790E07C +:10153000B7010CC0822F867891F021FD02C080E2B5 +:1015400001C08BE227FD8DE2B70190E00E94F70A0F +:1015500006C0B70180E390E00E94F70A5A94A514F0 +:10156000C0F3AA94F401EA0DF11DB701808190E067 +:101570000E94F70AA110F5CF06C0B70180E290E003 +:101580000E94F70A3A943110F8CF41CEF701268134 +:10159000378102C02FEF3FEFC9012C96E2E10C9496 +:1015A000DE0BFC010590615070400110D8F780956A +:1015B00090958E0F9F1F0895FC016150704001901F +:1015C0000110D8F7809590958E0F9F1F0895DC012C +:1015D000FC01672F71917723E1F7329704C07C916A +:1015E0006D9370836291AE17BF07C8F308950F9390 +:1015F0001F93CF93DF938C01EB018B8181FD03C09F +:101600000FEF1FEF1AC082FF0DC02E813F818C812A +:101610009D812817390764F4E881F9810193F983E2 +:10162000E88306C0E885F985802F0995892B41F765 +:101630008E819F8101969F838E83C801DF91CF9118 +:101640001F910F910895FA01AA27283061F12031E6 +:1016500091F1E8946F936E7F6E5F7F4F8F4F9F4F36 +:10166000AF4FB1E040D0B4E03ED0670F781F891F84 +:101670009A1FA11D680F791F8A1F911DA11D6A0F56 +:10168000711D811D911DA11D22D009F468943F9107 +:10169000062E000C3019000C000C3019305D31930F +:1016A000CEF6CF010895462F4770405D4193B3E0D9 +:1016B0000FD0C9F7F6CF462F4F70405D4A3318F070 +:1016C000495D31FD4052419302D0A9F7EACFB4E021 +:1016D000A6959795879577956795BA95C9F70097D9 +:1016E0006105710508959B01AC010A2E069457957A +:1016F000479537952795BA95C9F7620F731F841FD1 +:10170000951FA01D0895002480FD060E660F11F0A0 +:101710008695D1F7802D0895AA1BBB1B51E107C008 +:10172000AA1FBB1FA617B70710F0A61BB70B881F71 +:10173000991F5A95A9F780959095BC01CD01089500 +:10174000A1E21A2EAA1BBB1BFD010DC0AA1FBB1FC5 +:10175000EE1FFF1FA217B307E407F50720F0A21B37 +:10176000B30BE40BF50B661F771F881F991F1A94A4 +:1017700069F760957095809590959B01AC01BD01CE +:10178000CF0108952F923F924F925F926F927F9276 +:101790008F929F92AF92BF92CF92DF92EF92FF9281 +:1017A0000F931F93CF93DF93CDB7DEB7CA1BDB0B2D +:1017B0000FB6F894DEBF0FBECDBF09942A883988D2 +:1017C00048885F846E847D848C849B84AA84B984D9 +:1017D000C884DF80EE80FD800C811B81AA81B981E5 +:1017E000CE0FD11D0FB6F894DEBF0FBECDBFED01F9 +:0617F0000895F894FFCFFC +:1017F600000000020000000096000000000000004B +:101806000002000000009600000000000100FF0238 +:1018160000FF020AFFFF000006022000FF20020070 +:10182600C11002408020060081200600FF20020031 +:10183600C1100240FF200600FF200600FF20020024 +:10184600FF200200802006008120060005240010EB +:1018560001052401010104240206052406000149AC +:101866006E69742E2E2E2E0A0056616C69642063F2 +:101876006F6D6D616E64733A203F20682069206346 +:10188600207000557844494C204344432044656DFC +:101896006F2056312E300028632920323031312016 +:1018A60052657573636820456C656B74726F6E69FB +:1018B6006B00205254533D00204454523D00696E43 +:1018C60076616C696420636F6D6D616E640074652A +:1018D60073742025640A00746573742025640D0AE8 +:0218E600000000 :00000001FF diff --git a/Test/Debug/Test.lss b/Test/Debug/Test.lss index da678c1..4837a4d 100644 --- a/Test/Debug/Test.lss +++ b/Test/Debug/Test.lss @@ -3,101 +3,3892 @@ Test.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn - 0 .data 00000000 00800100 000000a0 00000114 2**0 + 0 .data 000000f2 00800100 000017f6 0000188a 2**0 CONTENTS, ALLOC, LOAD, DATA - 1 .text 000000a0 00000000 00000000 00000074 2**1 + 1 .text 000017f6 00000000 00000000 00000094 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE - 2 .stab 000006cc 00000000 00000000 00000114 2**2 + 2 .bss 00000014 008001f2 008001f2 0000197c 2**0 + ALLOC + 3 .stab 00001254 00000000 00000000 0000197c 2**2 CONTENTS, READONLY, DEBUGGING - 3 .stabstr 00000082 00000000 00000000 000007e0 2**0 + 4 .stabstr 0000032e 00000000 00000000 00002bd0 2**0 CONTENTS, READONLY, DEBUGGING - 4 .comment 0000002f 00000000 00000000 00000862 2**0 + 5 .comment 0000002f 00000000 00000000 00002efe 2**0 CONTENTS, READONLY - 5 .debug_aranges 00000020 00000000 00000000 00000891 2**0 + 6 .debug_aranges 00000208 00000000 00000000 00002f2d 2**0 CONTENTS, READONLY, DEBUGGING - 6 .debug_info 00000087 00000000 00000000 000008b1 2**0 + 7 .debug_info 000027cc 00000000 00000000 00003135 2**0 CONTENTS, READONLY, DEBUGGING - 7 .debug_abbrev 00000053 00000000 00000000 00000938 2**0 + 8 .debug_abbrev 00000fcb 00000000 00000000 00005901 2**0 CONTENTS, READONLY, DEBUGGING - 8 .debug_line 000000d7 00000000 00000000 0000098b 2**0 + 9 .debug_line 000013d8 00000000 00000000 000068cc 2**0 CONTENTS, READONLY, DEBUGGING - 9 .debug_frame 00000024 00000000 00000000 00000a64 2**2 + 10 .debug_frame 000004f8 00000000 00000000 00007ca4 2**2 CONTENTS, READONLY, DEBUGGING - 10 .debug_str 0000007c 00000000 00000000 00000a88 2**0 + 11 .debug_str 000008f9 00000000 00000000 0000819c 2**0 CONTENTS, READONLY, DEBUGGING - 11 .debug_ranges 00000010 00000000 00000000 00000b04 2**0 + 12 .debug_loc 0000202b 00000000 00000000 00008a95 2**0 + CONTENTS, READONLY, DEBUGGING + 13 .debug_ranges 00000150 00000000 00000000 0000aac0 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: 00000000 <__vectors>: - 0: 0c 94 3a 00 jmp 0x74 ; 0x74 <__ctors_end> - 4: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 8: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - c: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 10: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 14: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 18: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 1c: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 20: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 24: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 28: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 2c: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 30: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 34: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 38: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 3c: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 40: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 44: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 48: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 4c: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 50: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 54: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 58: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 5c: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 60: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 64: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 68: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 6c: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> - 70: 0c 94 44 00 jmp 0x88 ; 0x88 <__bad_interrupt> + 0: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__ctors_end> + 4: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + 8: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + c: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + 10: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + 14: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + 18: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + 1c: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + 20: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + 24: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + 28: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + 2c: 0c 94 e1 03 jmp 0x7c2 ; 0x7c2 <__vector_11> + 30: 0c 94 09 04 jmp 0x812 ; 0x812 <__vector_12> + 34: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + 38: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + 3c: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + 40: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + 44: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + 48: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + 4c: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + 50: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + 54: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + 58: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + 5c: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + 60: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + 64: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + 68: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + 6c: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> + 70: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt> -00000074 <__ctors_end>: - 74: 11 24 eor r1, r1 - 76: 1f be out 0x3f, r1 ; 63 - 78: cf ef ldi r28, 0xFF ; 255 - 7a: d4 e0 ldi r29, 0x04 ; 4 - 7c: de bf out 0x3e, r29 ; 62 - 7e: cd bf out 0x3d, r28 ; 61 - 80: 0e 94 46 00 call 0x8c ; 0x8c

- 84: 0c 94 4e 00 jmp 0x9c ; 0x9c <_exit> +00000074 : + 74: 12 01 00 02 02 00 00 10 01 00 03 00 00 01 01 02 ................ + 84: 03 01 .. -00000088 <__bad_interrupt>: - 88: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> +00000086 : + 86: 04 03 09 04 .... -0000008c
: +0000008a : + 8a: 14 03 42 00 6c 00 75 00 62 00 62 00 46 00 69 00 ..B.l.u.b.b.F.i. + 9a: 73 00 68 00 00 00 s.h... + +000000a0 : + a0: 20 03 48 00 61 00 63 00 6b 00 65 00 72 00 2d 00 .H.a.c.k.e.r.-. + b0: 4a 00 65 00 6f 00 70 00 61 00 72 00 64 00 79 00 J.e.o.p.a.r.d.y. + ... + +000000c2 : + c2: 0e 03 30 00 30 00 30 00 30 00 30 00 30 00 00 00 ..0.0.0.0.0.0... + +000000d2 <__ctors_end>: + d2: 11 24 eor r1, r1 + d4: 1f be out 0x3f, r1 ; 63 + d6: cf ef ldi r28, 0xFF ; 255 + d8: d4 e0 ldi r29, 0x04 ; 4 + da: de bf out 0x3e, r29 ; 62 + dc: cd bf out 0x3d, r28 ; 61 + +000000de <__do_copy_data>: + de: 11 e0 ldi r17, 0x01 ; 1 + e0: a0 e0 ldi r26, 0x00 ; 0 + e2: b1 e0 ldi r27, 0x01 ; 1 + e4: e6 ef ldi r30, 0xF6 ; 246 + e6: f7 e1 ldi r31, 0x17 ; 23 + e8: 02 c0 rjmp .+4 ; 0xee <__do_copy_data+0x10> + ea: 05 90 lpm r0, Z+ + ec: 0d 92 st X+, r0 + ee: a2 3f cpi r26, 0xF2 ; 242 + f0: b1 07 cpc r27, r17 + f2: d9 f7 brne .-10 ; 0xea <__do_copy_data+0xc> + +000000f4 <__do_clear_bss>: + f4: 22 e0 ldi r18, 0x02 ; 2 + f6: a2 ef ldi r26, 0xF2 ; 242 + f8: b1 e0 ldi r27, 0x01 ; 1 + fa: 01 c0 rjmp .+2 ; 0xfe <.do_clear_bss_start> + +000000fc <.do_clear_bss_loop>: + fc: 1d 92 st X+, r1 + +000000fe <.do_clear_bss_start>: + fe: a6 30 cpi r26, 0x06 ; 6 + 100: b2 07 cpc r27, r18 + 102: e1 f7 brne .-8 ; 0xfc <.do_clear_bss_loop> + 104: 0e 94 44 02 call 0x488 ; 0x488
+ 108: 0c 94 f9 0b jmp 0x17f2 ; 0x17f2 <_exit> + +0000010c <__bad_interrupt>: + 10c: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> + +00000110 : + int rgb = 0; + rgb |= (mask & (1<<0)) ? (1<<0) : (0<<0); + rgb |= (mask & (1<<1)) ? (1<<1) : (0<<1); + rgb |= (mask & (1<<2)) ? (1<<2) : (0<<2); + + PORTB &= ~((1<: +} + +void init_led() +{ + DDRB |= (1<: +#include "rs232.h" +int uart_putchar(char c, FILE *stream) +{ + 12c: cf 93 push r28 + 12e: c8 2f mov r28, r24 + if (c == '\n') { + 130: 8a 30 cpi r24, 0x0A ; 10 + 132: 19 f4 brne .+6 ; 0x13a + uart_putchar('\r', stream); //Warten solange bis Zeichen gesendet wurde + 134: 8d e0 ldi r24, 0x0D ; 13 + 136: 0e 94 96 00 call 0x12c ; 0x12c + } + loop_until_bit_is_set(UCSR1A, UDRE1); //Ausgabe des Zeichens + 13a: e8 ec ldi r30, 0xC8 ; 200 + 13c: f0 e0 ldi r31, 0x00 ; 0 + 13e: 90 81 ld r25, Z + 140: 95 ff sbrs r25, 5 + 142: fd cf rjmp .-6 ; 0x13e + UDR1 = c; + 144: c0 93 ce 00 sts 0x00CE, r28 + return (0); +} + 148: 80 e0 ldi r24, 0x00 ; 0 + 14a: 90 e0 ldi r25, 0x00 ; 0 + 14c: cf 91 pop r28 + 14e: 08 95 ret + +00000150 : + +void init_rs232() +{ + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + 150: 86 e0 ldi r24, 0x06 ; 6 + 152: 80 93 ca 00 sts 0x00CA, r24 + UCSR1B |= /*(1<: +#include "usb_serial_config.h" // USB configuration +#include "usb_serial.h" + +void init() +{ + init_led(); + 174: 0e 94 92 00 call 0x124 ; 0x124 + ledg(YELLOW); + 178: 86 e0 ldi r24, 0x06 ; 6 + 17a: 90 e0 ldi r25, 0x00 ; 0 + 17c: 0e 94 88 00 call 0x110 ; 0x110 + ledg(WHITE); + 180: 87 e0 ldi r24, 0x07 ; 7 + 182: 90 e0 ldi r25, 0x00 ; 0 + 184: 0e 94 88 00 call 0x110 ; 0x110 + init_rs232(); + 188: 0e 94 a8 00 call 0x150 ; 0x150 + ledg(YELLOW); + 18c: 86 e0 ldi r24, 0x06 ; 6 + 18e: 90 e0 ldi r25, 0x00 ; 0 + 190: 0e 94 88 00 call 0x110 ; 0x110 + usb_init(); // initialize USB + 194: 0e 94 9f 02 call 0x53e ; 0x53e + sei(); + 198: 78 94 sei + fprintf(&rs232, "Init....\n"); + 19a: 2e e0 ldi r18, 0x0E ; 14 + 19c: 31 e0 ldi r19, 0x01 ; 1 + 19e: 49 e0 ldi r20, 0x09 ; 9 + 1a0: 50 e0 ldi r21, 0x00 ; 0 + 1a2: 61 e0 ldi r22, 0x01 ; 1 + 1a4: 70 e0 ldi r23, 0x00 ; 0 + 1a6: 8f e6 ldi r24, 0x6F ; 111 + 1a8: 91 e0 ldi r25, 0x01 ; 1 + 1aa: 0e 94 a0 08 call 0x1140 ; 0x1140 + 1ae: 08 95 ret + +000001b0 : +//----------------------------------------------------------------------------- +// This routine is called, when baudrate and transmission parameters (see +// cdc_linecoding in usb_serial.h) are requested by the host. +// Parameters of this variable can be modified in this routine, before they +// will be sent to host. +{ + 1b0: 08 95 ret + +000001b2 : +void cdc_notify_setlinecoding(void) +//----------------------------------------------------------------------------- +// This routine is called, when baudrate and transmission parameters (see +// cdc_linecoding in usb_serial.h) are set by the host. +// New settings are available in this variable, when this routine is called. +{ + 1b2: 08 95 ret + +000001b4 : +//----------------------------------------------------------------------------- +// This routine is called, when host is changing handshake output lines RTS and +// DTR. +// New settings are available in the global variable cdc_rtsdtr (see +// usb_serial.h). +{ + 1b4: 08 95 ret + +000001b6 : +//----------------------------------------------------------------------------- +void usb_ep(uint8_t endpoint, uint16_t datasize) +//----------------------------------------------------------------------------- +// handle of endpoint interrupt for incoming data +// "datasize" contains the number od bytes in the USB FIFO buffer +{ + 1b6: 0f 93 push r16 + 1b8: 1f 93 push r17 + 1ba: cf 93 push r28 + 1bc: df 93 push r29 + 1be: cd b7 in r28, 0x3d ; 61 + 1c0: de b7 in r29, 0x3e ; 62 + 1c2: c8 54 subi r28, 0x48 ; 72 + 1c4: d1 09 sbc r29, r1 + 1c6: 0f b6 in r0, 0x3f ; 63 + 1c8: f8 94 cli + 1ca: de bf out 0x3e, r29 ; 62 + 1cc: 0f be out 0x3f, r0 ; 63 + 1ce: cd bf out 0x3d, r28 ; 61 + char r[32]; // use endpoint buffer size (= maximum length of one transfered string) + char t[32]; + char s[8]; + uint8_t n; + + if (endpoint==CDC_RX_ENDPOINT) { + 1d0: 83 30 cpi r24, 0x03 ; 3 + 1d2: 09 f0 breq .+2 ; 0x1d6 + 1d4: 4d c1 rjmp .+666 ; 0x470 + // serial data received + n=usb_rxdata(endpoint,(unsigned char *)r,sizeof(r)); // read data into buffer + 1d6: 40 e2 ldi r20, 0x20 ; 32 + 1d8: be 01 movw r22, r28 + 1da: 6f 5f subi r22, 0xFF ; 255 + 1dc: 7f 4f sbci r23, 0xFF ; 255 + 1de: 0e 94 9c 03 call 0x738 ; 0x738 + // parse command and prepare response + t[0]=0; // clear response string buffer + 1e2: 19 a2 std Y+33, r1 ; 0x21 + switch (r[0]) { // 1st byte is command + 1e4: 89 81 ldd r24, Y+1 ; 0x01 + 1e6: 88 36 cpi r24, 0x68 ; 104 + 1e8: 69 f0 breq .+26 ; 0x204 + 1ea: 30 f4 brcc .+12 ; 0x1f8 + 1ec: 8f 33 cpi r24, 0x3F ; 63 + 1ee: 51 f0 breq .+20 ; 0x204 + 1f0: 83 36 cpi r24, 0x63 ; 99 + 1f2: 09 f0 breq .+2 ; 0x1f6 + 1f4: 1b c1 rjmp .+566 ; 0x42c + 1f6: 1a c0 rjmp .+52 ; 0x22c + 1f8: 89 36 cpi r24, 0x69 ; 105 + 1fa: 71 f0 breq .+28 ; 0x218 + 1fc: 80 37 cpi r24, 0x70 ; 112 + 1fe: 09 f0 breq .+2 ; 0x202 + 200: 15 c1 rjmp .+554 ; 0x42c + 202: 1e c0 rjmp .+60 ; 0x240 + case '?': // help command + case 'h': + strcpy(t,"Valid commands: ? h i c p"); + 204: 8a e1 ldi r24, 0x1A ; 26 + 206: e9 e7 ldi r30, 0x79 ; 121 + 208: f1 e0 ldi r31, 0x01 ; 1 + 20a: de 01 movw r26, r28 + 20c: 91 96 adiw r26, 0x21 ; 33 + 20e: 01 90 ld r0, Z+ + 210: 0d 92 st X+, r0 + 212: 8a 95 dec r24 + 214: e1 f7 brne .-8 ; 0x20e + break; + 216: 13 c1 rjmp .+550 ; 0x43e + case 'i': // info command + strcpy(t,"UxDIL CDC Demo V1.0"); + 218: 84 e1 ldi r24, 0x14 ; 20 + 21a: e3 e9 ldi r30, 0x93 ; 147 + 21c: f1 e0 ldi r31, 0x01 ; 1 + 21e: de 01 movw r26, r28 + 220: 91 96 adiw r26, 0x21 ; 33 + 222: 01 90 ld r0, Z+ + 224: 0d 92 st X+, r0 + 226: 8a 95 dec r24 + 228: e1 f7 brne .-8 ; 0x222 + break; + 22a: 09 c1 rjmp .+530 ; 0x43e + case 'c': // copyright command + strcpy(t,"(c) 2011 Reusch Elektronik"); + 22c: 8b e1 ldi r24, 0x1B ; 27 + 22e: e7 ea ldi r30, 0xA7 ; 167 + 230: f1 e0 ldi r31, 0x01 ; 1 + 232: de 01 movw r26, r28 + 234: 91 96 adiw r26, 0x21 ; 33 + 236: 01 90 ld r0, Z+ + 238: 0d 92 st X+, r0 + 23a: 8a 95 dec r24 + 23c: e1 f7 brne .-8 ; 0x236 + break; + 23e: ff c0 rjmp .+510 ; 0x43e + case 'p': // parameter settings command + strcpy(t,"ppp"); + 240: 8e 01 movw r16, r28 + 242: 0f 5d subi r16, 0xDF ; 223 + 244: 1f 4f sbci r17, 0xFF ; 255 + 246: 80 e7 ldi r24, 0x70 ; 112 + 248: 90 e7 ldi r25, 0x70 ; 112 + 24a: a0 e7 ldi r26, 0x70 ; 112 + 24c: b0 e0 ldi r27, 0x00 ; 0 + 24e: 89 a3 std Y+33, r24 ; 0x21 + 250: 9a a3 std Y+34, r25 ; 0x22 + 252: ab a3 std Y+35, r26 ; 0x23 + 254: bc a3 std Y+36, r27 ; 0x24 + ltoa(cdc_linecoding.dwDTERate,t,10); + 256: 60 91 f5 01 lds r22, 0x01F5 + 25a: 70 91 f6 01 lds r23, 0x01F6 + 25e: 80 91 f7 01 lds r24, 0x01F7 + 262: 90 91 f8 01 lds r25, 0x01F8 + 266: 2a e0 ldi r18, 0x0A ; 10 + 268: 30 e0 ldi r19, 0x00 ; 0 + 26a: a8 01 movw r20, r16 + 26c: 0e 94 5a 08 call 0x10b4 ; 0x10b4 + strcat(t,":"); + 270: f8 01 movw r30, r16 + 272: 01 90 ld r0, Z+ + 274: 00 20 and r0, r0 + 276: e9 f7 brne .-6 ; 0x272 + 278: 31 97 sbiw r30, 0x01 ; 1 + 27a: 8a e3 ldi r24, 0x3A ; 58 + 27c: 90 e0 ldi r25, 0x00 ; 0 + 27e: 91 83 std Z+1, r25 ; 0x01 + 280: 80 83 st Z, r24 + itoa(cdc_linecoding.bDataBits,s,10); + 282: 4a e0 ldi r20, 0x0A ; 10 + 284: 50 e0 ldi r21, 0x00 ; 0 + 286: be 01 movw r22, r28 + 288: 6f 5b subi r22, 0xBF ; 191 + 28a: 7f 4f sbci r23, 0xFF ; 255 + 28c: 80 91 fb 01 lds r24, 0x01FB + 290: 90 e0 ldi r25, 0x00 ; 0 + 292: 0e 94 39 08 call 0x1072 ; 0x1072 + strcat(t,s); + 296: be 01 movw r22, r28 + 298: 6f 5b subi r22, 0xBF ; 191 + 29a: 7f 4f sbci r23, 0xFF ; 255 + 29c: c8 01 movw r24, r16 + 29e: 0e 94 2e 08 call 0x105c ; 0x105c + switch (cdc_linecoding.bParityType) { + 2a2: 80 91 fa 01 lds r24, 0x01FA + 2a6: 82 30 cpi r24, 0x02 ; 2 + 2a8: 09 f1 breq .+66 ; 0x2ec + 2aa: 28 f4 brcc .+10 ; 0x2b6 + 2ac: 88 23 and r24, r24 + 2ae: 41 f0 breq .+16 ; 0x2c0 + 2b0: 81 30 cpi r24, 0x01 ; 1 + 2b2: e9 f5 brne .+122 ; 0x32e + 2b4: 10 c0 rjmp .+32 ; 0x2d6 + 2b6: 83 30 cpi r24, 0x03 ; 3 + 2b8: 21 f1 breq .+72 ; 0x302 + 2ba: 84 30 cpi r24, 0x04 ; 4 + 2bc: c1 f5 brne .+112 ; 0x32e + 2be: 2c c0 rjmp .+88 ; 0x318 + case 0: strcat(t,"N"); + 2c0: fe 01 movw r30, r28 + 2c2: b1 96 adiw r30, 0x21 ; 33 + 2c4: 01 90 ld r0, Z+ + 2c6: 00 20 and r0, r0 + 2c8: e9 f7 brne .-6 ; 0x2c4 + 2ca: 31 97 sbiw r30, 0x01 ; 1 + 2cc: 8e e4 ldi r24, 0x4E ; 78 + 2ce: 90 e0 ldi r25, 0x00 ; 0 + 2d0: 91 83 std Z+1, r25 ; 0x01 + 2d2: 80 83 st Z, r24 + break; + 2d4: 36 c0 rjmp .+108 ; 0x342 + case 1: strcat(t,"O"); + 2d6: fe 01 movw r30, r28 + 2d8: b1 96 adiw r30, 0x21 ; 33 + 2da: 01 90 ld r0, Z+ + 2dc: 00 20 and r0, r0 + 2de: e9 f7 brne .-6 ; 0x2da + 2e0: 31 97 sbiw r30, 0x01 ; 1 + 2e2: 8f e4 ldi r24, 0x4F ; 79 + 2e4: 90 e0 ldi r25, 0x00 ; 0 + 2e6: 91 83 std Z+1, r25 ; 0x01 + 2e8: 80 83 st Z, r24 + break; + 2ea: 2b c0 rjmp .+86 ; 0x342 + case 2: strcat(t,"E"); + 2ec: fe 01 movw r30, r28 + 2ee: b1 96 adiw r30, 0x21 ; 33 + 2f0: 01 90 ld r0, Z+ + 2f2: 00 20 and r0, r0 + 2f4: e9 f7 brne .-6 ; 0x2f0 + 2f6: 31 97 sbiw r30, 0x01 ; 1 + 2f8: 85 e4 ldi r24, 0x45 ; 69 + 2fa: 90 e0 ldi r25, 0x00 ; 0 + 2fc: 91 83 std Z+1, r25 ; 0x01 + 2fe: 80 83 st Z, r24 + break; + 300: 20 c0 rjmp .+64 ; 0x342 + case 3: strcat(t,"M"); + 302: fe 01 movw r30, r28 + 304: b1 96 adiw r30, 0x21 ; 33 + 306: 01 90 ld r0, Z+ + 308: 00 20 and r0, r0 + 30a: e9 f7 brne .-6 ; 0x306 + 30c: 31 97 sbiw r30, 0x01 ; 1 + 30e: 8d e4 ldi r24, 0x4D ; 77 + 310: 90 e0 ldi r25, 0x00 ; 0 + 312: 91 83 std Z+1, r25 ; 0x01 + 314: 80 83 st Z, r24 + break; + 316: 15 c0 rjmp .+42 ; 0x342 + case 4: strcat(t,"S"); + 318: fe 01 movw r30, r28 + 31a: b1 96 adiw r30, 0x21 ; 33 + 31c: 01 90 ld r0, Z+ + 31e: 00 20 and r0, r0 + 320: e9 f7 brne .-6 ; 0x31c + 322: 31 97 sbiw r30, 0x01 ; 1 + 324: 83 e5 ldi r24, 0x53 ; 83 + 326: 90 e0 ldi r25, 0x00 ; 0 + 328: 91 83 std Z+1, r25 ; 0x01 + 32a: 80 83 st Z, r24 + break; + 32c: 0a c0 rjmp .+20 ; 0x342 + default: strcat(t,"?"); + 32e: fe 01 movw r30, r28 + 330: b1 96 adiw r30, 0x21 ; 33 + 332: 01 90 ld r0, Z+ + 334: 00 20 and r0, r0 + 336: e9 f7 brne .-6 ; 0x332 + 338: 31 97 sbiw r30, 0x01 ; 1 + 33a: 8f e3 ldi r24, 0x3F ; 63 + 33c: 90 e0 ldi r25, 0x00 ; 0 + 33e: 91 83 std Z+1, r25 ; 0x01 + 340: 80 83 st Z, r24 + }; + switch (cdc_linecoding.bCharFormat) { + 342: 80 91 f9 01 lds r24, 0x01F9 + 346: 81 30 cpi r24, 0x01 ; 1 + 348: 79 f0 breq .+30 ; 0x368 + 34a: 18 f0 brcs .+6 ; 0x352 + 34c: 82 30 cpi r24, 0x02 ; 2 + 34e: 31 f5 brne .+76 ; 0x39c + 350: 1a c0 rjmp .+52 ; 0x386 + case 0: strcat(t,"1"); + 352: fe 01 movw r30, r28 + 354: b1 96 adiw r30, 0x21 ; 33 + 356: 01 90 ld r0, Z+ + 358: 00 20 and r0, r0 + 35a: e9 f7 brne .-6 ; 0x356 + 35c: 31 97 sbiw r30, 0x01 ; 1 + 35e: 81 e3 ldi r24, 0x31 ; 49 + 360: 90 e0 ldi r25, 0x00 ; 0 + 362: 91 83 std Z+1, r25 ; 0x01 + 364: 80 83 st Z, r24 + break; + 366: 24 c0 rjmp .+72 ; 0x3b0 + case 1: strcat(t,"1.5"); + 368: fe 01 movw r30, r28 + 36a: b1 96 adiw r30, 0x21 ; 33 + 36c: 01 90 ld r0, Z+ + 36e: 00 20 and r0, r0 + 370: e9 f7 brne .-6 ; 0x36c + 372: 31 97 sbiw r30, 0x01 ; 1 + 374: 81 e3 ldi r24, 0x31 ; 49 + 376: 9e e2 ldi r25, 0x2E ; 46 + 378: a5 e3 ldi r26, 0x35 ; 53 + 37a: b0 e0 ldi r27, 0x00 ; 0 + 37c: 80 83 st Z, r24 + 37e: 91 83 std Z+1, r25 ; 0x01 + 380: a2 83 std Z+2, r26 ; 0x02 + 382: b3 83 std Z+3, r27 ; 0x03 + break; + 384: 15 c0 rjmp .+42 ; 0x3b0 + case 2: strcat(t,"2"); + 386: fe 01 movw r30, r28 + 388: b1 96 adiw r30, 0x21 ; 33 + 38a: 01 90 ld r0, Z+ + 38c: 00 20 and r0, r0 + 38e: e9 f7 brne .-6 ; 0x38a + 390: 31 97 sbiw r30, 0x01 ; 1 + 392: 82 e3 ldi r24, 0x32 ; 50 + 394: 90 e0 ldi r25, 0x00 ; 0 + 396: 91 83 std Z+1, r25 ; 0x01 + 398: 80 83 st Z, r24 + break; + 39a: 0a c0 rjmp .+20 ; 0x3b0 + default: strcat(t,"?"); + 39c: fe 01 movw r30, r28 + 39e: b1 96 adiw r30, 0x21 ; 33 + 3a0: 01 90 ld r0, Z+ + 3a2: 00 20 and r0, r0 + 3a4: e9 f7 brne .-6 ; 0x3a0 + 3a6: 31 97 sbiw r30, 0x01 ; 1 + 3a8: 8f e3 ldi r24, 0x3F ; 63 + 3aa: 90 e0 ldi r25, 0x00 ; 0 + 3ac: 91 83 std Z+1, r25 ; 0x01 + 3ae: 80 83 st Z, r24 + }; + strcat(t," RTS="); + 3b0: 8e 01 movw r16, r28 + 3b2: 0f 5d subi r16, 0xDF ; 223 + 3b4: 1f 4f sbci r17, 0xFF ; 255 + 3b6: d8 01 movw r26, r16 + 3b8: 0d 90 ld r0, X+ + 3ba: 00 20 and r0, r0 + 3bc: e9 f7 brne .-6 ; 0x3b8 + 3be: 11 97 sbiw r26, 0x01 ; 1 + 3c0: 86 e0 ldi r24, 0x06 ; 6 + 3c2: e2 ec ldi r30, 0xC2 ; 194 + 3c4: f1 e0 ldi r31, 0x01 ; 1 + 3c6: 01 90 ld r0, Z+ + 3c8: 0d 92 st X+, r0 + 3ca: 8a 95 dec r24 + 3cc: e1 f7 brne .-8 ; 0x3c6 + itoa(cdc_rtsdtr>>1,s,10); + 3ce: 80 91 f4 01 lds r24, 0x01F4 + 3d2: 4a e0 ldi r20, 0x0A ; 10 + 3d4: 50 e0 ldi r21, 0x00 ; 0 + 3d6: be 01 movw r22, r28 + 3d8: 6f 5b subi r22, 0xBF ; 191 + 3da: 7f 4f sbci r23, 0xFF ; 255 + 3dc: 86 95 lsr r24 + 3de: 90 e0 ldi r25, 0x00 ; 0 + 3e0: 0e 94 39 08 call 0x1072 ; 0x1072 + strcat(t,s); + 3e4: be 01 movw r22, r28 + 3e6: 6f 5b subi r22, 0xBF ; 191 + 3e8: 7f 4f sbci r23, 0xFF ; 255 + 3ea: c8 01 movw r24, r16 + 3ec: 0e 94 2e 08 call 0x105c ; 0x105c + strcat(t," DTR="); + 3f0: d8 01 movw r26, r16 + 3f2: 0d 90 ld r0, X+ + 3f4: 00 20 and r0, r0 + 3f6: e9 f7 brne .-6 ; 0x3f2 + 3f8: 11 97 sbiw r26, 0x01 ; 1 + 3fa: 86 e0 ldi r24, 0x06 ; 6 + 3fc: e8 ec ldi r30, 0xC8 ; 200 + 3fe: f1 e0 ldi r31, 0x01 ; 1 + 400: 01 90 ld r0, Z+ + 402: 0d 92 st X+, r0 + 404: 8a 95 dec r24 + 406: e1 f7 brne .-8 ; 0x400 + itoa(cdc_rtsdtr&0x01,s,10); + 408: 80 91 f4 01 lds r24, 0x01F4 + 40c: 4a e0 ldi r20, 0x0A ; 10 + 40e: 50 e0 ldi r21, 0x00 ; 0 + 410: be 01 movw r22, r28 + 412: 6f 5b subi r22, 0xBF ; 191 + 414: 7f 4f sbci r23, 0xFF ; 255 + 416: 81 70 andi r24, 0x01 ; 1 + 418: 90 e0 ldi r25, 0x00 ; 0 + 41a: 0e 94 39 08 call 0x1072 ; 0x1072 + strcat(t,s); + 41e: be 01 movw r22, r28 + 420: 6f 5b subi r22, 0xBF ; 191 + 422: 7f 4f sbci r23, 0xFF ; 255 + 424: c8 01 movw r24, r16 + 426: 0e 94 2e 08 call 0x105c ; 0x105c + break; + 42a: 09 c0 rjmp .+18 ; 0x43e + default: strcpy(t,"invalid command"); + 42c: 80 e1 ldi r24, 0x10 ; 16 + 42e: ee ec ldi r30, 0xCE ; 206 + 430: f1 e0 ldi r31, 0x01 ; 1 + 432: de 01 movw r26, r28 + 434: 91 96 adiw r26, 0x21 ; 33 + 436: 01 90 ld r0, Z+ + 438: 0d 92 st X+, r0 + 43a: 8a 95 dec r24 + 43c: e1 f7 brne .-8 ; 0x436 + } + strcat(t,"\r\n"); + 43e: be 01 movw r22, r28 + 440: 6f 5d subi r22, 0xDF ; 223 + 442: 7f 4f sbci r23, 0xFF ; 255 + 444: fb 01 movw r30, r22 + 446: 01 90 ld r0, Z+ + 448: 00 20 and r0, r0 + 44a: e9 f7 brne .-6 ; 0x446 + 44c: 31 97 sbiw r30, 0x01 ; 1 + 44e: 8d e0 ldi r24, 0x0D ; 13 + 450: 9a e0 ldi r25, 0x0A ; 10 + 452: a0 e0 ldi r26, 0x00 ; 0 + 454: 80 83 st Z, r24 + 456: 91 83 std Z+1, r25 ; 0x01 + 458: a2 83 std Z+2, r26 ; 0x02 + // response + usb_txdata(CDC_TX_ENDPOINT,(unsigned char *)t,strlen(t)); // return answer to host + 45a: fb 01 movw r30, r22 + 45c: 01 90 ld r0, Z+ + 45e: 00 20 and r0, r0 + 460: e9 f7 brne .-6 ; 0x45c + 462: 31 97 sbiw r30, 0x01 ; 1 + 464: af 01 movw r20, r30 + 466: 46 1b sub r20, r22 + 468: 57 0b sbc r21, r23 + 46a: 84 e0 ldi r24, 0x04 ; 4 + 46c: 0e 94 b2 03 call 0x764 ; 0x764 + } +} + 470: c8 5b subi r28, 0xB8 ; 184 + 472: df 4f sbci r29, 0xFF ; 255 + 474: 0f b6 in r0, 0x3f ; 63 + 476: f8 94 cli + 478: de bf out 0x3e, r29 ; 62 + 47a: 0f be out 0x3f, r0 ; 63 + 47c: cd bf out 0x3d, r28 ; 61 + 47e: df 91 pop r29 + 480: cf 91 pop r28 + 482: 1f 91 pop r17 + 484: 0f 91 pop r16 + 486: 08 95 ret + +00000488
: + int main(void) { - DDRB |= (1< + ledg(GREEN); + 4a0: 82 e0 ldi r24, 0x02 ; 2 + 4a2: 90 e0 ldi r25, 0x00 ; 0 + 4a4: 0e 94 88 00 call 0x110 ; 0x110 + char t[32]; + uint8_t i = 0; + 4a8: 91 2c mov r9, r1 + while(1) { - //PORTB ^= (1< + ledg(YELLOW); + fprintf(&rs232, "test %d\n",++i); + 4aa: 0f 2e mov r0, r31 + 4ac: fe ed ldi r31, 0xDE ; 222 + 4ae: af 2e mov r10, r31 + 4b0: f1 e0 ldi r31, 0x01 ; 1 + 4b2: bf 2e mov r11, r31 + 4b4: f0 2d mov r31, r0 + 4b6: 0f 2e mov r0, r31 + 4b8: fe e0 ldi r31, 0x0E ; 14 + 4ba: cf 2e mov r12, r31 + 4bc: f1 e0 ldi r31, 0x01 ; 1 + 4be: df 2e mov r13, r31 + 4c0: f0 2d mov r31, r0 + t[0]=0; // clear response string buffer + sprintf(t, "test %d\r\n",i); + 4c2: 0f 2e mov r0, r31 + 4c4: f7 ee ldi r31, 0xE7 ; 231 + 4c6: ef 2e mov r14, r31 + 4c8: f1 e0 ldi r31, 0x01 ; 1 + 4ca: ff 2e mov r15, r31 + 4cc: f0 2d mov r31, r0 + 4ce: 8e 01 movw r16, r28 + 4d0: 0f 5f subi r16, 0xFF ; 255 + 4d2: 1f 4f sbci r17, 0xFF ; 255 + ledg(GREEN); + char t[32]; + uint8_t i = 0; + while(1) + { + ledg(YELLOW); + 4d4: 86 e0 ldi r24, 0x06 ; 6 + 4d6: 90 e0 ldi r25, 0x00 ; 0 + 4d8: 0e 94 88 00 call 0x110 ; 0x110 + fprintf(&rs232, "test %d\n",++i); + 4dc: 93 94 inc r9 + 4de: 1f 92 push r1 + 4e0: 9f 92 push r9 + 4e2: bf 92 push r11 + 4e4: af 92 push r10 + 4e6: df 92 push r13 + 4e8: cf 92 push r12 + 4ea: 0e 94 8e 08 call 0x111c ; 0x111c + t[0]=0; // clear response string buffer + 4ee: 19 82 std Y+1, r1 ; 0x01 + sprintf(t, "test %d\r\n",i); + 4f0: 1f 92 push r1 + 4f2: 9f 92 push r9 + 4f4: ff 92 push r15 + 4f6: ef 92 push r14 + 4f8: 1f 93 push r17 + 4fa: 0f 93 push r16 + 4fc: 0e 94 d1 08 call 0x11a2 ; 0x11a2 + usb_txdata(CDC_TX_ENDPOINT,(unsigned char *)t,strlen(t)); + 500: f8 01 movw r30, r16 + 502: 01 90 ld r0, Z+ + 504: 00 20 and r0, r0 + 506: e9 f7 brne .-6 ; 0x502 <__stack+0x3> + 508: 31 97 sbiw r30, 0x01 ; 1 + 50a: af 01 movw r20, r30 + 50c: 40 1b sub r20, r16 + 50e: 51 0b sbc r21, r17 + 510: b8 01 movw r22, r16 + 512: 84 e0 ldi r24, 0x04 ; 4 + 514: 0e 94 b2 03 call 0x764 ; 0x764 + ledg(GREEN); + 518: 82 e0 ldi r24, 0x02 ; 2 + 51a: 90 e0 ldi r25, 0x00 ; 0 + 51c: 0e 94 88 00 call 0x110 ; 0x110 + #else + //round up by default + __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); + #endif -0000009c <_exit>: - 9c: f8 94 cli + __builtin_avr_delay_cycles(__ticks_dc); + 520: 2f ef ldi r18, 0xFF ; 255 + 522: 81 ee ldi r24, 0xE1 ; 225 + 524: 94 e0 ldi r25, 0x04 ; 4 + 526: 21 50 subi r18, 0x01 ; 1 + 528: 80 40 sbci r24, 0x00 ; 0 + 52a: 90 40 sbci r25, 0x00 ; 0 + 52c: e1 f7 brne .-8 ; 0x526 <__stack+0x27> + 52e: 00 c0 rjmp .+0 ; 0x530 <__stack+0x31> + 530: 00 00 nop + 532: 0f b6 in r0, 0x3f ; 63 + 534: f8 94 cli + 536: de bf out 0x3e, r29 ; 62 + 538: 0f be out 0x3f, r0 ; 63 + 53a: cd bf out 0x3d, r28 ; 61 + 53c: cb cf rjmp .-106 ; 0x4d4 -0000009e <__stop_program>: - 9e: ff cf rjmp .-2 ; 0x9e <__stop_program> +0000053e : + UHWCON = _BV(UVREGE); // enable PAD regulator + #endif + #ifdef MEGA6 + UHWCON = _BV(UIMOD)|_BV(UVREGE); // set device mode, enable PAD regulator + #endif + USBCON = _BV(USBE) | _BV(FRZCLK); // enable USB + 53e: 80 ea ldi r24, 0xA0 ; 160 + 540: 80 93 d8 00 sts 0x00D8, r24 + #if (F_CPU==16000000) + // 16MHz + #ifdef MEGA2 + PLLCSR = _BV(PLLE) | _BV(PLLP0); // config PLL, 16 MHz xtal + 544: 86 e0 ldi r24, 0x06 ; 6 + 546: 89 bd out 0x29, r24 ; 41 + PLLCSR = _BV(PLLE); // config PLL, 8 MHz xtal + #endif + + #endif + + while (!(PLLCSR & _BV(PLOCK))) ; // wait for PLL lock + 548: 09 b4 in r0, 0x29 ; 41 + 54a: 00 fe sbrs r0, 0 + 54c: fd cf rjmp .-6 ; 0x548 + #ifdef MEGA4_6 + USBCON = _BV(USBE)|_BV(OTGPADE); // start USB clock + #else + USBCON = _BV(USBE); // start USB clock + 54e: 80 e8 ldi r24, 0x80 ; 128 + 550: 80 93 d8 00 sts 0x00D8, r24 + #endif + UDCON = 0; // enable attach resistor + 554: 10 92 e0 00 sts 0x00E0, r1 + usb_conf = 0; + 558: 10 92 f2 01 sts 0x01F2, r1 + #if (NUMINTERFACES>1) + usb_if = 0xFF; + 55c: 8f ef ldi r24, 0xFF ; 255 + 55e: 80 93 25 01 sts 0x0125, r24 + #endif + #ifdef MEGA2 + // port for VBUS detection + VBUSDIR &= ~_BV(VBUSPIN); // port as input + 562: 3c 98 cbi 0x07, 4 ; 7 + #endif + UDIEN = _BV(EORSTE); // enable "end of reset" interrupt + 564: 88 e0 ldi r24, 0x08 ; 8 + 566: 80 93 e2 00 sts 0x00E2, r24 + 56a: 08 95 ret + +0000056c : +//----------------------------------------------------------------------------- + +#ifdef STATICENDPOINTS // physical endpoint configuration for all interfaces, may differ from descriptor defintions + +void usb_endpoints(void) +{ + 56c: 2f 92 push r2 + 56e: 3f 92 push r3 + 570: 4f 92 push r4 + 572: 5f 92 push r5 + 574: 7f 92 push r7 + 576: 8f 92 push r8 + 578: 9f 92 push r9 + 57a: af 92 push r10 + 57c: cf 92 push r12 + 57e: df 92 push r13 + 580: ef 92 push r14 + 582: ff 92 push r15 + 584: 0f 93 push r16 + 586: 1f 93 push r17 + 588: cf 93 push r28 + 58a: df 93 push r29 + 58c: ec e2 ldi r30, 0x2C ; 44 + 58e: f1 e0 ldi r31, 0x01 ; 1 + 590: 8e e2 ldi r24, 0x2E ; 46 + 592: 91 e0 ldi r25, 0x01 ; 1 + 594: 41 e0 ldi r20, 0x01 ; 1 + + uint8_t i; + + for (i=0; i + UENUM = i+1; // select endpoint + 5d6: e6 01 movw r28, r12 + 5d8: 48 83 st Y, r20 + UECONX = _BV(EPEN); // enable endpoint + 5da: e7 01 movw r28, r14 + 5dc: a8 82 st Y, r10 + UECFG0X = EPC.ep_type; // transfer type and direction + 5de: 20 81 ld r18, Z + 5e0: e8 01 movw r28, r16 + 5e2: 28 83 st Y, r18 +// Initializing Endpoints +//----------------------------------------------------------------------------- + +#ifdef STATICENDPOINTS // physical endpoint configuration for all interfaces, may differ from descriptor defintions + +void usb_endpoints(void) + 5e4: 1c 01 movw r2, r24 + 5e6: 9c 01 movw r18, r24 + 5e8: 21 50 subi r18, 0x01 ; 1 + 5ea: 31 09 sbc r19, r1 + for (i=0; i + 5f4: 20 34 cpi r18, 0x40 ; 64 + 5f6: 41 f0 breq .+16 ; 0x608 + 5f8: 20 32 cpi r18, 0x20 ; 32 + 5fa: 41 f0 breq .+16 ; 0x60c + 5fc: 20 31 cpi r18, 0x10 ; 16 + 5fe: 41 f4 brne .+16 ; 0x610 + 600: 37 2d mov r19, r7 + 602: 07 c0 rjmp .+14 ; 0x612 + 604: 30 e4 ldi r19, 0x40 ; 64 + 606: 05 c0 rjmp .+10 ; 0x612 + 608: 30 e3 ldi r19, 0x30 ; 48 + 60a: 03 c0 rjmp .+6 ; 0x612 + 60c: 30 e2 ldi r19, 0x20 ; 32 + 60e: 01 c0 rjmp .+2 ; 0x612 + 610: 38 2d mov r19, r8 + 612: e1 01 movw r28, r2 + 614: 28 81 ld r18, Y + 616: 23 2b or r18, r19 + 618: eb 01 movw r28, r22 + 61a: 28 83 st Y, r18 + (EPC.ep_buffer); // buffer size and bank + if (IN_TRANSFER) UEIENX = 0; // no interrupts handling for IN endpoints + 61c: 2c 91 ld r18, X + 61e: 20 ff sbrs r18, 0 + 620: 03 c0 rjmp .+6 ; 0x628 + 622: d2 01 movw r26, r4 + 624: 1c 92 st X, r1 + 626: 02 c0 rjmp .+4 ; 0x62c + else UEIENX = _BV(RXOUTE); // interrupt handling for incoming data (OUT endpoint) + 628: e2 01 movw r28, r4 + 62a: 98 82 st Y, r9 + 62c: 4f 5f subi r20, 0xFF ; 255 + 62e: 34 96 adiw r30, 0x04 ; 4 + 630: 04 96 adiw r24, 0x04 ; 4 + +#endif + + uint8_t i; + + for (i=0; i + } + } + #ifdef MEGA4_6 + UERST = 0x7E; // endpoint FIFO reset for endpoint 1, 2, 3, 4, 5 and 6 + #else + UERST = 0x1E; // endpoint FIFO reset for endpoint 1, 2, 3 and 4 + 636: ea ee ldi r30, 0xEA ; 234 + 638: f0 e0 ldi r31, 0x00 ; 0 + 63a: 8e e1 ldi r24, 0x1E ; 30 + 63c: 80 83 st Z, r24 + #endif + UERST = 0; + 63e: 10 82 st Z, r1 +} + 640: df 91 pop r29 + 642: cf 91 pop r28 + 644: 1f 91 pop r17 + 646: 0f 91 pop r16 + 648: ff 90 pop r15 + 64a: ef 90 pop r14 + 64c: df 90 pop r13 + 64e: cf 90 pop r12 + 650: af 90 pop r10 + 652: 9f 90 pop r9 + 654: 8f 90 pop r8 + 656: 7f 90 pop r7 + 658: 5f 90 pop r5 + 65a: 4f 90 pop r4 + 65c: 3f 90 pop r3 + 65e: 2f 90 pop r2 + 660: 08 95 ret + +00000662 : +void usb_wait_in(void) +// wait for host, until it's ready to receive IN package +{ + uint8_t i; + do { + i = UEINTX; + 662: e8 ee ldi r30, 0xE8 ; 232 + 664: f0 e0 ldi r31, 0x00 ; 0 + 666: 80 81 ld r24, Z + } while (!(i & (_BV(TXINI)|_BV(RXOUTI)))); + 668: 85 70 andi r24, 0x05 ; 5 + 66a: e9 f3 breq .-6 ; 0x666 +} + 66c: 08 95 ret + +0000066e : + +void usb_wait_receive_out(void) +{ + while (!(UEINTX & _BV(RXOUTI))) ; + 66e: e8 ee ldi r30, 0xE8 ; 232 + 670: f0 e0 ldi r31, 0x00 ; 0 + 672: 80 81 ld r24, Z + 674: 82 ff sbrs r24, 2 + 676: fd cf rjmp .-6 ; 0x672 +} + 678: 08 95 ret + +0000067a : + +void usb_desc_out(bool isRAM, const uint8_t *pgmaddr, uint8_t size, uint16_t maxsize) +// return descriptor over endpoint 0 to host from flash memory or RAM +{ + 67a: 8f 92 push r8 + 67c: 9f 92 push r9 + 67e: af 92 push r10 + 680: bf 92 push r11 + 682: cf 92 push r12 + 684: df 92 push r13 + 686: ef 92 push r14 + 688: ff 92 push r15 + 68a: 0f 93 push r16 + 68c: 1f 93 push r17 + 68e: cf 93 push r28 + 690: df 93 push r29 + 692: d8 2e mov r13, r24 + uint8_t i, len, n; + const uint8_t *addr; + + addr=pgmaddr; + len=size; + if (len>maxsize) len=maxsize; + 694: e4 2f mov r30, r20 + 696: f0 e0 ldi r31, 0x00 ; 0 + 698: 2e 17 cp r18, r30 + 69a: 3f 07 cpc r19, r31 + 69c: 10 f4 brcc .+4 ; 0x6a2 + 69e: c2 2e mov r12, r18 + 6a0: 01 c0 rjmp .+2 ; 0x6a4 +{ + uint8_t i, len, n; + const uint8_t *addr; + + addr=pgmaddr; + len=size; + 6a2: c4 2e mov r12, r20 + 6a4: 06 2f mov r16, r22 + 6a6: 17 2f mov r17, r23 + if (len>maxsize) len=maxsize; + do { + usb_wait_in(); + if (i & _BV(RXOUTI)) return; // cancel + // send IN package + n = (len < ENDPOINT0_SIZE) ? len : ENDPOINT0_SIZE; + 6a8: 68 94 set + 6aa: 99 24 eor r9, r9 + 6ac: 94 f8 bld r9, 4 + for (i = n; i; i--) + UEDATX = isRAM ? *addr++ : pgm_read_byte(addr++); + len -= n; + USB_SEND_IN; + 6ae: 0f 2e mov r0, r31 + 6b0: f8 ee ldi r31, 0xE8 ; 232 + 6b2: ef 2e mov r14, r31 + 6b4: f1 2c mov r15, r1 + 6b6: f0 2d mov r31, r0 + 6b8: 0f 2e mov r0, r31 + 6ba: fe ef ldi r31, 0xFE ; 254 + 6bc: bf 2e mov r11, r31 + 6be: f0 2d mov r31, r0 + usb_wait_in(); + if (i & _BV(RXOUTI)) return; // cancel + // send IN package + n = (len < ENDPOINT0_SIZE) ? len : ENDPOINT0_SIZE; + for (i = n; i; i--) + UEDATX = isRAM ? *addr++ : pgm_read_byte(addr++); + 6c0: c1 ef ldi r28, 0xF1 ; 241 + 6c2: d0 e0 ldi r29, 0x00 ; 0 + 6c4: a1 2c mov r10, r1 + 6c6: 01 c0 rjmp .+2 ; 0x6ca + 6c8: 8a 2c mov r8, r10 + + addr=pgmaddr; + len=size; + if (len>maxsize) len=maxsize; + do { + usb_wait_in(); + 6ca: 0e 94 31 03 call 0x662 ; 0x662 + if (i & _BV(RXOUTI)) return; // cancel + 6ce: 82 fc sbrc r8, 2 + 6d0: 26 c0 rjmp .+76 ; 0x71e + // send IN package + n = (len < ENDPOINT0_SIZE) ? len : ENDPOINT0_SIZE; + 6d2: 2c 2d mov r18, r12 + 6d4: 80 e1 ldi r24, 0x10 ; 16 + 6d6: 8c 15 cp r24, r12 + 6d8: 08 f4 brcc .+2 ; 0x6dc + 6da: 29 2d mov r18, r9 + for (i = n; i; i--) + 6dc: 22 23 and r18, r18 + 6de: d9 f0 breq .+54 ; 0x716 + 6e0: f8 01 movw r30, r16 + 6e2: 92 2f mov r25, r18 + UEDATX = isRAM ? *addr++ : pgm_read_byte(addr++); + 6e4: dd 20 and r13, r13 + 6e6: 11 f0 breq .+4 ; 0x6ec + 6e8: 80 81 ld r24, Z + 6ea: 01 c0 rjmp .+2 ; 0x6ee + 6ec: 84 91 lpm r24, Z + 6ee: 88 83 st Y, r24 + do { + usb_wait_in(); + if (i & _BV(RXOUTI)) return; // cancel + // send IN package + n = (len < ENDPOINT0_SIZE) ? len : ENDPOINT0_SIZE; + for (i = n; i; i--) + 6f0: 91 50 subi r25, 0x01 ; 1 + 6f2: 31 96 adiw r30, 0x01 ; 1 + 6f4: 91 11 cpse r25, r1 + 6f6: f6 cf rjmp .-20 ; 0x6e4 +void usb_wait_receive_out(void) +{ + while (!(UEINTX & _BV(RXOUTI))) ; +} + +void usb_desc_out(bool isRAM, const uint8_t *pgmaddr, uint8_t size, uint16_t maxsize) + 6f8: 62 2f mov r22, r18 + 6fa: 61 50 subi r22, 0x01 ; 1 + 6fc: 70 e0 ldi r23, 0x00 ; 0 + 6fe: 6f 5f subi r22, 0xFF ; 255 + 700: 7f 4f sbci r23, 0xFF ; 255 + 702: 06 0f add r16, r22 + 704: 17 1f adc r17, r23 + if (i & _BV(RXOUTI)) return; // cancel + // send IN package + n = (len < ENDPOINT0_SIZE) ? len : ENDPOINT0_SIZE; + for (i = n; i; i--) + UEDATX = isRAM ? *addr++ : pgm_read_byte(addr++); + len -= n; + 706: c2 1a sub r12, r18 + USB_SEND_IN; + 708: f7 01 movw r30, r14 + 70a: b0 82 st Z, r11 + } while (len || n == ENDPOINT0_SIZE); + 70c: c1 10 cpse r12, r1 + 70e: dc cf rjmp .-72 ; 0x6c8 + 710: 20 31 cpi r18, 0x10 ; 16 + 712: d1 f2 breq .-76 ; 0x6c8 + 714: 04 c0 rjmp .+8 ; 0x71e + // send IN package + n = (len < ENDPOINT0_SIZE) ? len : ENDPOINT0_SIZE; + for (i = n; i; i--) + UEDATX = isRAM ? *addr++ : pgm_read_byte(addr++); + len -= n; + USB_SEND_IN; + 716: f7 01 movw r30, r14 + 718: b0 82 st Z, r11 + } while (len || n == ENDPOINT0_SIZE); + 71a: c1 10 cpse r12, r1 + 71c: d5 cf rjmp .-86 ; 0x6c8 +} + 71e: df 91 pop r29 + 720: cf 91 pop r28 + 722: 1f 91 pop r17 + 724: 0f 91 pop r16 + 726: ff 90 pop r15 + 728: ef 90 pop r14 + 72a: df 90 pop r13 + 72c: cf 90 pop r12 + 72e: bf 90 pop r11 + 730: af 90 pop r10 + 732: 9f 90 pop r9 + 734: 8f 90 pop r8 + 736: 08 95 ret + +00000738 : + uint16_t r, i; + #else + uint8_t r, i; + #endif + + UENUM = endpoint; // select endpoint + 738: 80 93 e9 00 sts 0x00E9, r24 + #ifdef MEGA4_6 + r = ((uint16_t)(UEBCHX)<<8)+UEBCLX; + #else + r = UEBCLX; + 73c: 90 91 f2 00 lds r25, 0x00F2 + 740: 84 2f mov r24, r20 + 742: 94 17 cp r25, r20 + 744: 08 f4 brcc .+2 ; 0x748 + 746: 89 2f mov r24, r25 + #endif + if (r>maxdatasize) r = maxdatasize; + if (r) { // data available in input endpoint + 748: 88 23 and r24, r24 + 74a: 59 f0 breq .+22 ; 0x762 + 74c: 26 2f mov r18, r22 + 74e: e6 2f mov r30, r22 + 750: f7 2f mov r31, r23 + for (i=0; i + #endif + } +****/ + } + return r; +} + 762: 08 95 ret + +00000764 : +#ifdef MEGA4_6 +bool usb_txdata(uint8_t endpoint, uint8_t *buffer, uint16_t datasize) +#else +bool usb_txdata(uint8_t endpoint, uint8_t *buffer, uint8_t datasize) +#endif +{ + 764: cf 93 push r28 + 766: df 93 push r29 + uint16_t i; + #else + uint8_t i; + #endif + + if (datasize) { + 768: 44 23 and r20, r20 + 76a: 29 f1 breq .+74 ; 0x7b6 + UENUM = endpoint; + 76c: 80 93 e9 00 sts 0x00E9, r24 + +#define STALL UECONX = _BV(STALLRQ) | _BV(EPEN) + +static inline void usb_wait_in_ready(void) +{ + while (!(UEINTX & _BV(TXINI))); + 770: e8 ee ldi r30, 0xE8 ; 232 + 772: f0 e0 ldi r31, 0x00 ; 0 + 774: 80 81 ld r24, Z + 776: 80 ff sbrs r24, 0 + 778: fd cf rjmp .-6 ; 0x774 + UENUM = endpoint; + usb_wait_in_ready(); + #ifdef MEGA4_6 + if ((((uint16_t)(UEBCHX)<<8)+UEBCLX)==0) { // buffer is empty + #else + if (UEBCLX==0) { // buffer is empty + 77a: 80 91 f2 00 lds r24, 0x00F2 + 77e: 81 11 cpse r24, r1 + 780: 1c c0 rjmp .+56 ; 0x7ba + 782: 96 2f mov r25, r22 + 784: e6 2f mov r30, r22 + 786: f7 2f mov r31, r23 + #endif + for (i=0; i + 796: 80 81 ld r24, Z + 798: 88 83 st Y, r24 + 79a: 31 96 adiw r30, 0x01 ; 1 + #ifdef MEGA4_6 + if ((((uint16_t)(UEBCHX)<<8)+UEBCLX)==0) { // buffer is empty + #else + if (UEBCLX==0) { // buffer is empty + #endif + for (i=0; i + if (UEINTX & _BV(RWAL)) UEDATX = buffer[i]; + UEINTX&=~_BV(TXINI); // necessary (in this order) (changed V1.1.1) + 7a4: e8 ee ldi r30, 0xE8 ; 232 + 7a6: f0 e0 ldi r31, 0x00 ; 0 + 7a8: 80 81 ld r24, Z + 7aa: 8e 7f andi r24, 0xFE ; 254 + 7ac: 80 83 st Z, r24 + UEINTX=0x7F; // (uint8_t)~_BV(FIFOCON); + 7ae: 8f e7 ldi r24, 0x7F ; 127 + 7b0: 80 83 st Z, r24 + return true; + 7b2: 81 e0 ldi r24, 0x01 ; 1 + 7b4: 03 c0 rjmp .+6 ; 0x7bc + } + } + return false; + 7b6: 80 e0 ldi r24, 0x00 ; 0 + 7b8: 01 c0 rjmp .+2 ; 0x7bc + 7ba: 80 e0 ldi r24, 0x00 ; 0 +} + 7bc: df 91 pop r29 + 7be: cf 91 pop r28 + 7c0: 08 95 ret + +000007c2 <__vector_11>: +// USB Device Interrupt +//----------------------------------------------------------------------------- +// Hardware interrupts of the USB controller + +ISR(USB_GEN_vect) +{ + 7c2: 1f 92 push r1 + 7c4: 0f 92 push r0 + 7c6: 0f b6 in r0, 0x3f ; 63 + 7c8: 0f 92 push r0 + 7ca: 11 24 eor r1, r1 + 7cc: 8f 93 push r24 + 7ce: ef 93 push r30 + 7d0: ff 93 push r31 + uint8_t intbits; + + intbits = UDINT; // save flags + 7d2: e1 ee ldi r30, 0xE1 ; 225 + 7d4: f0 e0 ldi r31, 0x00 ; 0 + 7d6: 80 81 ld r24, Z + UDINT = 0; // reset flags + 7d8: 10 82 st Z, r1 + if (intbits & _BV(EORSTI)) { // End Of Reset Interrupt Flag + 7da: 83 ff sbrs r24, 3 + 7dc: 12 c0 rjmp .+36 ; 0x802 <__vector_11+0x40> + // initialize endpoint 0 for control transfers + UENUM = 0; + 7de: 10 92 e9 00 sts 0x00E9, r1 + UECONX = _BV(EPEN); + 7e2: 81 e0 ldi r24, 0x01 ; 1 + 7e4: 80 93 eb 00 sts 0x00EB, r24 + UECFG0X = EP_TYPE_CONTROL; + 7e8: 10 92 ec 00 sts 0x00EC, r1 + UECFG1X = EP_SIZE(ENDPOINT0_SIZE) | EP_SINGLE_BUFFER; + 7ec: 82 e1 ldi r24, 0x12 ; 18 + 7ee: 80 93 ed 00 sts 0x00ED, r24 + UEIENX = _BV(RXSTPE); // enable interrupt for incoming data + 7f2: 88 e0 ldi r24, 0x08 ; 8 + 7f4: 80 93 f0 00 sts 0x00F0, r24 + usb_conf = 0; + 7f8: 10 92 f2 01 sts 0x01F2, r1 + #if (NUMINTERFACES>1) + usb_if = 0xFF; + 7fc: 8f ef ldi r24, 0xFF ; 255 + 7fe: 80 93 25 01 sts 0x0125, r24 + #endif + } +} + 802: ff 91 pop r31 + 804: ef 91 pop r30 + 806: 8f 91 pop r24 + 808: 0f 90 pop r0 + 80a: 0f be out 0x3f, r0 ; 63 + 80c: 0f 90 pop r0 + 80e: 1f 90 pop r1 + 810: 18 95 reti + +00000812 <__vector_12>: +// Endpoint Interrupts +//----------------------------------------------------------------------------- +// Interrupts, triggered by incoming data in an endpoint, are handled here. + +ISR(USB_COM_vect) +{ + 812: 1f 92 push r1 + 814: 0f 92 push r0 + 816: 0f b6 in r0, 0x3f ; 63 + 818: 0f 92 push r0 + 81a: 11 24 eor r1, r1 + 81c: 2f 92 push r2 + 81e: 3f 92 push r3 + 820: 4f 92 push r4 + 822: 5f 92 push r5 + 824: 6f 92 push r6 + 826: 7f 92 push r7 + 828: 8f 92 push r8 + 82a: 9f 92 push r9 + 82c: af 92 push r10 + 82e: bf 92 push r11 + 830: cf 92 push r12 + 832: df 92 push r13 + 834: ef 92 push r14 + 836: ff 92 push r15 + 838: 0f 93 push r16 + 83a: 1f 93 push r17 + 83c: 2f 93 push r18 + 83e: 3f 93 push r19 + 840: 4f 93 push r20 + 842: 5f 93 push r21 + 844: 6f 93 push r22 + 846: 7f 93 push r23 + 848: 8f 93 push r24 + 84a: 9f 93 push r25 + 84c: af 93 push r26 + 84e: bf 93 push r27 + 850: ef 93 push r30 + 852: ff 93 push r31 + 854: cf 93 push r28 + 856: df 93 push r29 + 858: cd b7 in r28, 0x3d ; 61 + 85a: de b7 in r29, 0x3e ; 62 + 85c: 29 97 sbiw r28, 0x09 ; 9 + 85e: de bf out 0x3e, r29 ; 62 + 860: cd bf out 0x3d, r28 ; 61 + #if (USESN==2) // serial number in RAM + struct usb_string_descriptor_ram buf; + #endif + struct usb_control_request ucr; + + if (UEINT & 0x01) { + 862: 80 91 f4 00 lds r24, 0x00F4 + 866: 80 ff sbrs r24, 0 + 868: 8f c2 rjmp .+1310 ; 0xd88 <__vector_12+0x576> + // handle interrupts of endpoint 0 (control transfers) + UENUM = 0; + 86a: 10 92 e9 00 sts 0x00E9, r1 + intbits = UEINTX; // save interrupt flags of the endpoint + 86e: 80 91 e8 00 lds r24, 0x00E8 + if (intbits & _BV(RXSTPI)) { // control transfer, setup + 872: 83 ff sbrs r24, 3 + 874: 58 c2 rjmp .+1200 ; 0xd26 <__vector_12+0x514> + ucr.bmRequestType = UEDATX; + 876: e1 ef ldi r30, 0xF1 ; 241 + 878: f0 e0 ldi r31, 0x00 ; 0 + 87a: 50 81 ld r21, Z + ucr.bRequest = UEDATX; + 87c: 40 81 ld r20, Z + ucr.wValue = UEDATX; + 87e: 20 81 ld r18, Z + ucr.wValue |= (UEDATX << 8); + 880: 30 81 ld r19, Z + 882: 93 2f mov r25, r19 + 884: 80 e0 ldi r24, 0x00 ; 0 + 886: 82 2b or r24, r18 + ucr.wIndex = UEDATX; + 888: 60 81 ld r22, Z + ucr.wIndex |= (UEDATX << 8); + 88a: 70 81 ld r23, Z + ucr.wLength = UEDATX; + 88c: 30 81 ld r19, Z + ucr.wLength |= (UEDATX << 8); + 88e: e0 81 ld r30, Z + UEINTX = ~(_BV(RXSTPI) | _BV(RXOUTI) | _BV(TXINI)); + 890: 22 ef ldi r18, 0xF2 ; 242 + 892: 20 93 e8 00 sts 0x00E8, r18 + if (ucr.bRequest == GET_DESCRIPTOR) { + 896: 46 30 cpi r20, 0x06 ; 6 + 898: 09 f0 breq .+2 ; 0x89c <__vector_12+0x8a> + 89a: 5a c1 rjmp .+692 ; 0xb50 <__vector_12+0x33e> + ucr.wValue = UEDATX; + ucr.wValue |= (UEDATX << 8); + ucr.wIndex = UEDATX; + ucr.wIndex |= (UEDATX << 8); + ucr.wLength = UEDATX; + ucr.wLength |= (UEDATX << 8); + 89c: 1e 2f mov r17, r30 + 89e: 00 e0 ldi r16, 0x00 ; 0 + 8a0: 03 2b or r16, r19 + UEINTX = ~(_BV(RXSTPI) | _BV(RXOUTI) | _BV(TXINI)); + if (ucr.bRequest == GET_DESCRIPTOR) { + switch (ucr.wValue) { + 8a2: 81 15 cp r24, r1 + 8a4: 23 e0 ldi r18, 0x03 ; 3 + 8a6: 92 07 cpc r25, r18 + 8a8: 09 f4 brne .+2 ; 0x8ac <__vector_12+0x9a> + 8aa: 2a c1 rjmp .+596 ; 0xb00 <__vector_12+0x2ee> + 8ac: 48 f4 brcc .+18 ; 0x8c0 <__vector_12+0xae> + 8ae: 81 15 cp r24, r1 + 8b0: 41 e0 ldi r20, 0x01 ; 1 + 8b2: 94 07 cpc r25, r20 + 8b4: f9 f0 breq .+62 ; 0x8f4 <__vector_12+0xe2> + 8b6: 81 15 cp r24, r1 + 8b8: 92 40 sbci r25, 0x02 ; 2 + 8ba: 09 f0 breq .+2 ; 0x8be <__vector_12+0xac> + 8bc: 45 c1 rjmp .+650 ; 0xb48 <__vector_12+0x336> + 8be: 0c c0 rjmp .+24 ; 0x8d8 <__vector_12+0xc6> + 8c0: 82 30 cpi r24, 0x02 ; 2 + 8c2: a3 e0 ldi r26, 0x03 ; 3 + 8c4: 9a 07 cpc r25, r26 + 8c6: 09 f4 brne .+2 ; 0x8ca <__vector_12+0xb8> + 8c8: 2d c1 rjmp .+602 ; 0xb24 <__vector_12+0x312> + 8ca: 08 f4 brcc .+2 ; 0x8ce <__vector_12+0xbc> + 8cc: 22 c1 rjmp .+580 ; 0xb12 <__vector_12+0x300> + 8ce: 83 30 cpi r24, 0x03 ; 3 + 8d0: 93 40 sbci r25, 0x03 ; 3 + 8d2: 09 f0 breq .+2 ; 0x8d6 <__vector_12+0xc4> + 8d4: 39 c1 rjmp .+626 ; 0xb48 <__vector_12+0x336> + 8d6: 2f c1 rjmp .+606 ; 0xb36 <__vector_12+0x324> + 8d8: 2c e3 ldi r18, 0x3C ; 60 + 8da: 31 e0 ldi r19, 0x01 ; 1 + 8dc: 3d 83 std Y+5, r19 ; 0x05 + 8de: 2c 83 std Y+4, r18 ; 0x04 +//----------------------------------------------------------------------------- +// Endpoint Interrupts +//----------------------------------------------------------------------------- +// Interrupts, triggered by incoming data in an endpoint, are handled here. + +ISR(USB_COM_vect) + 8e0: 6c e5 ldi r22, 0x5C ; 92 + 8e2: 71 e0 ldi r23, 0x01 ; 1 + 8e4: a0 e0 ldi r26, 0x00 ; 0 +{ + 8e6: 40 e0 ldi r20, 0x00 ; 0 + 8e8: 50 e0 ldi r21, 0x00 ; 0 + case 0x0200: // configuration descriptor + // get number of activated endpoints + n=0; + #if (NUMINTERFACES>1) + for (j=0; j + ucr.wLength |= (UEDATX << 8); + UEINTX = ~(_BV(RXSTPI) | _BV(RXOUTI) | _BV(TXINI)); + if (ucr.bRequest == GET_DESCRIPTOR) { + switch (ucr.wValue) { + case 0x0100: // device descriptor + usb_desc_out(false,&device_descriptor[0],pgm_read_byte(&device_descriptor[0]),ucr.wLength); + 8f4: e4 e7 ldi r30, 0x74 ; 116 + 8f6: f0 e0 ldi r31, 0x00 ; 0 + 8f8: 44 91 lpm r20, Z + 8fa: 98 01 movw r18, r16 + 8fc: bf 01 movw r22, r30 + 8fe: 80 e0 ldi r24, 0x00 ; 0 + 900: 0e 94 3d 03 call 0x67a ; 0x67a + break; + 904: 4a c2 rjmp .+1172 ; 0xd9a <__vector_12+0x588> +//----------------------------------------------------------------------------- +// Endpoint Interrupts +//----------------------------------------------------------------------------- +// Interrupts, triggered by incoming data in an endpoint, are handled here. + +ISR(USB_COM_vect) + 906: f9 01 movw r30, r18 + 908: e8 0f add r30, r24 + 90a: f9 1f adc r31, r25 + case 0x0200: // configuration descriptor + // get number of activated endpoints + n=0; + #if (NUMINTERFACES>1) + for (j=0; j + 914: be 2d mov r27, r14 + 916: ab 0f add r26, r27 + 918: 04 96 adiw r24, 0x04 ; 4 + 91a: 80 31 cpi r24, 0x10 ; 16 + 91c: 91 05 cpc r25, r1 + 91e: 99 f7 brne .-26 ; 0x906 <__vector_12+0xf4> + 920: 20 5f subi r18, 0xF0 ; 240 + 922: 3f 4f sbci r19, 0xFF ; 255 + break; + case 0x0200: // configuration descriptor + // get number of activated endpoints + n=0; + #if (NUMINTERFACES>1) + for (j=0; j +// Endpoint Interrupts +//----------------------------------------------------------------------------- +// Interrupts, triggered by incoming data in an endpoint, are handled here. + +ISR(USB_COM_vect) +{ + 92a: ca 01 movw r24, r20 + 92c: ec cf rjmp .-40 ; 0x906 <__vector_12+0xf4> + 92e: dd 82 std Y+5, r13 ; 0x05 + 930: cc 82 std Y+4, r12 ; 0x04 + for (i=0; i + 946: e8 2e mov r14, r24 + 948: f9 2e mov r15, r25 + // initialize configuration descriptor + cfg->bLength = sizeof(cfg_desc); + 94a: 89 e0 ldi r24, 0x09 ; 9 + 94c: d7 01 movw r26, r14 + 94e: 8c 93 st X, r24 + cfg->bDescriptorType = 2; + 950: 82 e0 ldi r24, 0x02 ; 2 + 952: 11 96 adiw r26, 0x01 ; 1 + 954: 8c 93 st X, r24 + 956: 11 97 sbiw r26, 0x01 ; 1 + cfg->wTotalLength = s; + 958: e9 81 ldd r30, Y+1 ; 0x01 + 95a: 12 96 adiw r26, 0x02 ; 2 + 95c: ec 93 st X, r30 + 95e: 12 97 sbiw r26, 0x02 ; 2 + 960: 13 96 adiw r26, 0x03 ; 3 + 962: 1c 92 st X, r1 + 964: 13 97 sbiw r26, 0x03 ; 3 + cfg->bNumInterfaces = NUMINTERFACES; + 966: 14 96 adiw r26, 0x04 ; 4 + 968: 8c 93 st X, r24 + 96a: 14 97 sbiw r26, 0x04 ; 4 + cfg->bConfigurationValue = 1; + 96c: 81 e0 ldi r24, 0x01 ; 1 + 96e: 15 96 adiw r26, 0x05 ; 5 + 970: 8c 93 st X, r24 + 972: 15 97 sbiw r26, 0x05 ; 5 + cfg->iConfiguration = 0; + 974: 16 96 adiw r26, 0x06 ; 6 + 976: 1c 92 st X, r1 + 978: 16 97 sbiw r26, 0x06 ; 6 + cfg->bmAttributes = POWERING; + 97a: 80 e8 ldi r24, 0x80 ; 128 + 97c: 17 96 adiw r26, 0x07 ; 7 + 97e: 8c 93 st X, r24 + 980: 17 97 sbiw r26, 0x07 ; 7 + cfg->bMaxPower = MAXPOWER>>1; + 982: 8a ef ldi r24, 0xFA ; 250 + 984: 18 96 adiw r26, 0x08 ; 8 + 986: 8c 93 st X, r24 + 988: 18 97 sbiw r26, 0x08 ; 8 + // initialize interface descriptor + ifp = (if_desc *)((uint16_t)(cfg)+sizeof(cfg_desc)); + 98a: 19 96 adiw r26, 0x09 ; 9 + 98c: 0f 2e mov r0, r31 + 98e: f2 e2 ldi r31, 0x22 ; 34 + 990: af 2e mov r10, r31 + 992: f1 e0 ldi r31, 0x01 ; 1 + 994: bf 2e mov r11, r31 + 996: f0 2d mov r31, r0 + 998: 0f 2e mov r0, r31 + 99a: ff e1 ldi r31, 0x1F ; 31 + 99c: 8f 2e mov r8, r31 + 99e: f1 e0 ldi r31, 0x01 ; 1 + 9a0: 9f 2e mov r9, r31 + 9a2: f0 2d mov r31, r0 + 9a4: 0f 2e mov r0, r31 + 9a6: fc e1 ldi r31, 0x1C ; 28 + 9a8: 6f 2e mov r6, r31 + 9aa: f1 e0 ldi r31, 0x01 ; 1 + 9ac: 7f 2e mov r7, r31 + 9ae: f0 2d mov r31, r0 + 9b0: 40 e0 ldi r20, 0x00 ; 0 + 9b2: 50 e0 ldi r21, 0x00 ; 0 +//----------------------------------------------------------------------------- +// Endpoint Interrupts +//----------------------------------------------------------------------------- +// Interrupts, triggered by incoming data in an endpoint, are handled here. + +ISR(USB_COM_vect) + 9b4: 41 2c mov r4, r1 + 9b6: 51 2c mov r5, r1 + 9b8: 31 2c mov r3, r1 + // initialize interface descriptor + ifp = (if_desc *)((uint16_t)(cfg)+sizeof(cfg_desc)); + #if (NUMINTERFACES>1) + for (j=0; j + 9cc: d8 01 movw r26, r16 + 9ce: a2 0f add r26, r18 + 9d0: b3 1f adc r27, r19 + // initialize interface descriptor + ifp = (if_desc *)((uint16_t)(cfg)+sizeof(cfg_desc)); + #if (NUMINTERFACES>1) + for (j=0; j + 9da: 62 2d mov r22, r2 + 9dc: c6 0e add r12, r22 + 9de: 2c 5f subi r18, 0xFC ; 252 + 9e0: 3f 4f sbci r19, 0xFF ; 255 + 9e2: 20 31 cpi r18, 0x10 ; 16 + 9e4: 31 05 cpc r19, r1 + 9e6: 91 f7 brne .-28 ; 0x9cc <__vector_12+0x1ba> + 9e8: 1d 83 std Y+5, r17 ; 0x05 + 9ea: 0c 83 std Y+4, r16 ; 0x04 + #else + j = 0; + #endif + ifp->bLength = sizeof(if_desc); + 9ec: 19 e0 ldi r17, 0x09 ; 9 + 9ee: 10 83 st Z, r17 + ifp->bDescriptorType = 4; + 9f0: 24 e0 ldi r18, 0x04 ; 4 + 9f2: 21 83 std Z+1, r18 ; 0x01 + ifp->bInterfaceNumber = j; + 9f4: 72 83 std Z+2, r23 ; 0x02 + ifp->bAlternateSetting = 0; + 9f6: 13 82 std Z+3, r1 ; 0x03 + ifp->bNumEndpoints = n; + 9f8: c4 82 std Z+4, r12 ; 0x04 + ifp->bInterfaceClass = InterfaceClasses[j]; + 9fa: 9a 01 movw r18, r20 + 9fc: d5 01 movw r26, r10 + 9fe: 6d 91 ld r22, X+ + a00: 5d 01 movw r10, r26 + a02: 65 83 std Z+5, r22 ; 0x05 + ifp->bInterfaceSubClass = InterfaceSubClasses[j]; + a04: d4 01 movw r26, r8 + a06: 6d 91 ld r22, X+ + a08: 4d 01 movw r8, r26 + a0a: 66 83 std Z+6, r22 ; 0x06 + ifp->bInterfaceProtocol = InterfaceProtocols[j]; + a0c: d3 01 movw r26, r6 + a0e: 6d 91 ld r22, X+ + a10: 3d 01 movw r6, r26 + a12: 67 83 std Z+7, r22 ; 0x07 + ifp->iInterface = 0; + a14: 10 86 std Z+8, r1 ; 0x08 + #ifdef CDC + if (j==0) { + a16: 71 11 cpse r23, r1 + a18: 0c c0 rjmp .+24 ; 0xa32 <__vector_12+0x220> + cdc = (cdc_desc *)((uint16_t)(ifp)+sizeof(if_desc)); + a1a: bf 01 movw r22, r30 + a1c: 39 96 adiw r30, 0x09 ; 9 + a1e: ac e5 ldi r26, 0x5C ; 92 + a20: b1 e0 ldi r27, 0x01 ; 1 + for (i=0; i + epp = (ep_desc *)((uint16_t)(cdc)+sizeof(cdc_desc)); + a2c: fb 01 movw r30, r22 + a2e: 7c 96 adiw r30, 0x1c ; 28 + a30: 01 c0 rjmp .+2 ; 0xa34 <__vector_12+0x222> + } else epp = (ep_desc *)((uint16_t)(ifp)+sizeof(if_desc)); + a32: 39 96 adiw r30, 0x09 ; 9 + #else + epp = (ep_desc *)((uint16_t)(ifp)+sizeof(if_desc)); + #endif + if (n) { // endpoints + a34: cc 20 and r12, r12 + a36: 09 f4 brne .+2 ; 0xa3a <__vector_12+0x228> + a38: 46 c0 rjmp .+140 ; 0xac6 <__vector_12+0x2b4> +//----------------------------------------------------------------------------- +// Endpoint Interrupts +//----------------------------------------------------------------------------- +// Interrupts, triggered by incoming data in an endpoint, are handled here. + +ISR(USB_COM_vect) + a3a: 22 95 swap r18 + a3c: 32 95 swap r19 + a3e: 30 7f andi r19, 0xF0 ; 240 + a40: 32 27 eor r19, r18 + a42: 20 7f andi r18, 0xF0 ; 240 + a44: 32 27 eor r19, r18 + a46: 21 5c subi r18, 0xC1 ; 193 + a48: 3e 4f sbci r19, 0xFE ; 254 + a4a: 11 e0 ldi r17, 0x01 ; 1 + a4c: 59 87 std Y+9, r21 ; 0x09 + a4e: 48 87 std Y+8, r20 ; 0x08 + a50: 6c 81 ldd r22, Y+4 ; 0x04 + a52: 7d 81 ldd r23, Y+5 ; 0x05 + a54: 3f 83 std Y+7, r19 ; 0x07 + a56: 2e 83 std Y+6, r18 ; 0x06 + a58: a9 01 movw r20, r18 + a5a: 43 50 subi r20, 0x03 ; 3 + a5c: 51 09 sbc r21, r1 + #else + epp = (ep_desc *)((uint16_t)(ifp)+sizeof(if_desc)); + #endif + if (n) { // endpoints + for (i=0; i + epp->bLength = sizeof(ep_desc); + a66: b7 e0 ldi r27, 0x07 ; 7 + a68: b0 83 st Z, r27 + epp->bDescriptorType = 5; + a6a: 45 e0 ldi r20, 0x05 ; 5 + a6c: 41 83 std Z+1, r20 ; 0x01 + epp->bEndpointAddress = (i+1)|(EPCO.ep_type<<7); + a6e: 40 2f mov r20, r16 + a70: 47 95 ror r20 + a72: 44 27 eor r20, r20 + a74: 47 95 ror r20 + a76: 41 2b or r20, r17 + a78: 42 83 std Z+2, r20 ; 0x02 + epp->bmAttributes = EP_TRANSFER(EPCO.ep_type); + a7a: 01 34 cpi r16, 0x41 ; 65 + a7c: 41 f0 breq .+16 ; 0xa8e <__vector_12+0x27c> + a7e: 00 34 cpi r16, 0x40 ; 64 + a80: 41 f0 breq .+16 ; 0xa92 <__vector_12+0x280> + a82: 01 38 cpi r16, 0x81 ; 129 + a84: 41 f0 breq .+16 ; 0xa96 <__vector_12+0x284> + a86: 00 38 cpi r16, 0x80 ; 128 + a88: 41 f4 brne .+16 ; 0xa9a <__vector_12+0x288> + a8a: 42 e0 ldi r20, 0x02 ; 2 + a8c: 07 c0 rjmp .+14 ; 0xa9c <__vector_12+0x28a> + a8e: 4d 2d mov r20, r13 + a90: 05 c0 rjmp .+10 ; 0xa9c <__vector_12+0x28a> + a92: 4d 2d mov r20, r13 + a94: 03 c0 rjmp .+6 ; 0xa9c <__vector_12+0x28a> + a96: 42 e0 ldi r20, 0x02 ; 2 + a98: 01 c0 rjmp .+2 ; 0xa9c <__vector_12+0x28a> + a9a: 43 e0 ldi r20, 0x03 ; 3 + a9c: 43 83 std Z+3, r20 ; 0x03 +//----------------------------------------------------------------------------- +// Endpoint Interrupts +//----------------------------------------------------------------------------- +// Interrupts, triggered by incoming data in an endpoint, are handled here. + +ISR(USB_COM_vect) + a9e: ae 81 ldd r26, Y+6 ; 0x06 + aa0: bf 81 ldd r27, Y+7 ; 0x07 + aa2: 12 97 sbiw r26, 0x02 ; 2 + if (EPCO.ep_type!=EP_TYPE_DISABLED) { + epp->bLength = sizeof(ep_desc); + epp->bDescriptorType = 5; + epp->bEndpointAddress = (i+1)|(EPCO.ep_type<<7); + epp->bmAttributes = EP_TRANSFER(EPCO.ep_type); + epp->wMaxPacketSize = EPCO.ep_size; + aa4: 4c 91 ld r20, X + aa6: 44 83 std Z+4, r20 ; 0x04 + aa8: 15 82 std Z+5, r1 ; 0x05 + epp->bInterval = EPCO.ep_interval; + aaa: ae 81 ldd r26, Y+6 ; 0x06 + aac: bf 81 ldd r27, Y+7 ; 0x07 + aae: 4c 91 ld r20, X + ab0: 46 83 std Z+6, r20 ; 0x06 + epp = (ep_desc *)((uint16_t)(epp)+sizeof(ep_desc)); + ab2: 37 96 adiw r30, 0x07 ; 7 + ab4: 1f 5f subi r17, 0xFF ; 255 + ab6: 2c 5f subi r18, 0xFC ; 252 + ab8: 3f 4f sbci r19, 0xFF ; 255 + } else epp = (ep_desc *)((uint16_t)(ifp)+sizeof(if_desc)); + #else + epp = (ep_desc *)((uint16_t)(ifp)+sizeof(if_desc)); + #endif + if (n) { // endpoints + for (i=0; i + abe: 48 85 ldd r20, Y+8 ; 0x08 + ac0: 59 85 ldd r21, Y+9 ; 0x09 + ac2: 7d 83 std Y+5, r23 ; 0x05 + ac4: 6c 83 std Y+4, r22 ; 0x04 + ac6: 4f 5f subi r20, 0xFF ; 255 + ac8: 5f 4f sbci r21, 0xFF ; 255 + aca: 0c 81 ldd r16, Y+4 ; 0x04 + acc: 1d 81 ldd r17, Y+5 ; 0x05 + ace: 00 5f subi r16, 0xF0 ; 240 + ad0: 1f 4f sbci r17, 0xFF ; 255 + ad2: 1d 83 std Y+5, r17 ; 0x05 + ad4: 0c 83 std Y+4, r16 ; 0x04 + cfg->bmAttributes = POWERING; + cfg->bMaxPower = MAXPOWER>>1; + // initialize interface descriptor + ifp = (if_desc *)((uint16_t)(cfg)+sizeof(cfg_desc)); + #if (NUMINTERFACES>1) + for (j=0; j + adc: 74 2f mov r23, r20 +//----------------------------------------------------------------------------- +// Endpoint Interrupts +//----------------------------------------------------------------------------- +// Interrupts, triggered by incoming data in an endpoint, are handled here. + +ISR(USB_COM_vect) + ade: 92 01 movw r18, r4 + ae0: c3 2c mov r12, r3 + ae2: 0c 81 ldd r16, Y+4 ; 0x04 + ae4: 1d 81 ldd r17, Y+5 ; 0x05 + ae6: 72 cf rjmp .-284 ; 0x9cc <__vector_12+0x1ba> + ae8: 0a 81 ldd r16, Y+2 ; 0x02 + aea: 1b 81 ldd r17, Y+3 ; 0x03 + #if (NUMINTERFACES>1) + ifp = (if_desc *)epp; + } + #endif + // finally + usb_desc_out(true,(uint8_t *)cfg,s,ucr.wLength); + aec: 98 01 movw r18, r16 + aee: 49 81 ldd r20, Y+1 ; 0x01 + af0: b7 01 movw r22, r14 + af2: 81 e0 ldi r24, 0x01 ; 1 + af4: 0e 94 3d 03 call 0x67a ; 0x67a + free(cfg); + af8: c7 01 movw r24, r14 + afa: 0e 94 91 07 call 0xf22 ; 0xf22 + break; + afe: 4d c1 rjmp .+666 ; 0xd9a <__vector_12+0x588> + case 0x0300: // String 0 + usb_desc_out(false,(uint8_t *)&string0.bLength,pgm_read_byte(&string0.bLength),ucr.wLength); + b00: e6 e8 ldi r30, 0x86 ; 134 + b02: f0 e0 ldi r31, 0x00 ; 0 + b04: 44 91 lpm r20, Z + b06: 98 01 movw r18, r16 + b08: bf 01 movw r22, r30 + b0a: 80 e0 ldi r24, 0x00 ; 0 + b0c: 0e 94 3d 03 call 0x67a ; 0x67a + break; + b10: 44 c1 rjmp .+648 ; 0xd9a <__vector_12+0x588> + case 0x0301: // String 1 + usb_desc_out(false,(uint8_t *)&string1.bLength,pgm_read_byte(&string1.bLength),ucr.wLength); + b12: ea e8 ldi r30, 0x8A ; 138 + b14: f0 e0 ldi r31, 0x00 ; 0 + b16: 44 91 lpm r20, Z + b18: 98 01 movw r18, r16 + b1a: bf 01 movw r22, r30 + b1c: 80 e0 ldi r24, 0x00 ; 0 + b1e: 0e 94 3d 03 call 0x67a ; 0x67a + break; + b22: 3b c1 rjmp .+630 ; 0xd9a <__vector_12+0x588> + case 0x0302: // String 2 + usb_desc_out(false,(uint8_t *)&string2.bLength,pgm_read_byte(&string2.bLength),ucr.wLength); + b24: e0 ea ldi r30, 0xA0 ; 160 + b26: f0 e0 ldi r31, 0x00 ; 0 + b28: 44 91 lpm r20, Z + b2a: 98 01 movw r18, r16 + b2c: bf 01 movw r22, r30 + b2e: 80 e0 ldi r24, 0x00 ; 0 + b30: 0e 94 3d 03 call 0x67a ; 0x67a + break; + b34: 32 c1 rjmp .+612 ; 0xd9a <__vector_12+0x588> + #if (USESN>0) + case 0x0303: // String 3, serial number + #if (USESN==1) // serial number in the flash + usb_desc_out(false,(uint8_t *)&string3.bLength,pgm_read_byte(&string3.bLength),ucr.wLength); + b36: e2 ec ldi r30, 0xC2 ; 194 + b38: f0 e0 ldi r31, 0x00 ; 0 + b3a: 44 91 lpm r20, Z + b3c: 98 01 movw r18, r16 + b3e: bf 01 movw r22, r30 + b40: 80 e0 ldi r24, 0x00 ; 0 + b42: 0e 94 3d 03 call 0x67a ; 0x67a + i++; + } + buf.bLength=2*i+2; // total length of the data set + usb_desc_out(true,(uint8_t *)&buf,buf.bLength,ucr.wLength); + #endif + break; + b46: 29 c1 rjmp .+594 ; 0xd9a <__vector_12+0x588> + #endif + default: + STALL; // stall + b48: 81 e2 ldi r24, 0x21 ; 33 + b4a: 80 93 eb 00 sts 0x00EB, r24 + b4e: 25 c1 rjmp .+586 ; 0xd9a <__vector_12+0x588> + } + return; + } + if (ucr.bRequest == SET_ADDRESS) { + b50: 45 30 cpi r20, 0x05 ; 5 + b52: 61 f4 brne .+24 ; 0xb6c <__vector_12+0x35a> + USB_SEND_IN; + b54: 2e ef ldi r18, 0xFE ; 254 + b56: 20 93 e8 00 sts 0x00E8, r18 + +#define STALL UECONX = _BV(STALLRQ) | _BV(EPEN) + +static inline void usb_wait_in_ready(void) +{ + while (!(UEINTX & _BV(TXINI))); + b5a: e8 ee ldi r30, 0xE8 ; 232 + b5c: f0 e0 ldi r31, 0x00 ; 0 + b5e: 20 81 ld r18, Z + b60: 20 ff sbrs r18, 0 + b62: fd cf rjmp .-6 ; 0xb5e <__vector_12+0x34c> + return; + } + if (ucr.bRequest == SET_ADDRESS) { + USB_SEND_IN; + usb_wait_in_ready(); + UDADDR = ucr.wValue | _BV(ADDEN); + b64: 80 68 ori r24, 0x80 ; 128 + b66: 80 93 e3 00 sts 0x00E3, r24 + b6a: 17 c1 rjmp .+558 ; 0xd9a <__vector_12+0x588> + ucr.bmRequestType = UEDATX; + ucr.bRequest = UEDATX; + ucr.wValue = UEDATX; + ucr.wValue |= (UEDATX << 8); + ucr.wIndex = UEDATX; + ucr.wIndex |= (UEDATX << 8); + b6c: 37 2f mov r19, r23 + b6e: 20 e0 ldi r18, 0x00 ; 0 + b70: 26 2b or r18, r22 + USB_SEND_IN; + usb_wait_in_ready(); + UDADDR = ucr.wValue | _BV(ADDEN); + return; + } + if (ucr.bRequest == SET_CONFIGURATION && ucr.bmRequestType == 0) { // another configuration will be chosen + b72: 49 30 cpi r20, 0x09 ; 9 + b74: 99 f4 brne .+38 ; 0xb9c <__vector_12+0x38a> + b76: 51 11 cpse r21, r1 + b78: 3e c0 rjmp .+124 ; 0xbf6 <__vector_12+0x3e4> + if (ucr.wValue==1) { // configuration 1 will be chosen + b7a: 01 97 sbiw r24, 0x01 ; 1 + b7c: 59 f4 brne .+22 ; 0xb94 <__vector_12+0x382> + usb_conf = ucr.wValue; + b7e: 81 e0 ldi r24, 0x01 ; 1 + b80: 80 93 f2 01 sts 0x01F2, r24 + USB_SEND_IN; + b84: 8e ef ldi r24, 0xFE ; 254 + b86: 80 93 e8 00 sts 0x00E8, r24 + #ifdef STATICENDPOINTS + usb_if = 0; // select interface 0 + b8a: 10 92 25 01 sts 0x0125, r1 + usb_endpoints(); // initialize endpoints + b8e: 0e 94 b6 02 call 0x56c ; 0x56c + b92: 03 c1 rjmp .+518 ; 0xd9a <__vector_12+0x588> + usb_if = 0; // select interface 0 + usb_endpoints(usb_if); // initialize endpoints + #endif + #endif + } else { // other configurations are not supported in this version + STALL; // stall + b94: 81 e2 ldi r24, 0x21 ; 33 + b96: 80 93 eb 00 sts 0x00EB, r24 + b9a: ff c0 rjmp .+510 ; 0xd9a <__vector_12+0x588> + } + return; + } + if (ucr.bRequest == GET_CONFIGURATION && ucr.bmRequestType == 0x80) { + b9c: 48 30 cpi r20, 0x08 ; 8 + b9e: 81 f4 brne .+32 ; 0xbc0 <__vector_12+0x3ae> + ba0: 50 38 cpi r21, 0x80 ; 128 + ba2: 09 f0 breq .+2 ; 0xba6 <__vector_12+0x394> + ba4: 43 c0 rjmp .+134 ; 0xc2c <__vector_12+0x41a> + +#define STALL UECONX = _BV(STALLRQ) | _BV(EPEN) + +static inline void usb_wait_in_ready(void) +{ + while (!(UEINTX & _BV(TXINI))); + ba6: e8 ee ldi r30, 0xE8 ; 232 + ba8: f0 e0 ldi r31, 0x00 ; 0 + baa: 80 81 ld r24, Z + bac: 80 ff sbrs r24, 0 + bae: fd cf rjmp .-6 ; 0xbaa <__vector_12+0x398> + } + return; + } + if (ucr.bRequest == GET_CONFIGURATION && ucr.bmRequestType == 0x80) { + usb_wait_in_ready(); + UEDATX = usb_conf; + bb0: 80 91 f2 01 lds r24, 0x01F2 + bb4: 80 93 f1 00 sts 0x00F1, r24 + USB_SEND_IN; + bb8: 8e ef ldi r24, 0xFE ; 254 + bba: 80 93 e8 00 sts 0x00E8, r24 + bbe: ed c0 rjmp .+474 ; 0xd9a <__vector_12+0x588> + return; + } + if (ucr.bRequest == CDC_GET_LINE_CODING && ucr.bmRequestType == 0xA1) { + bc0: 41 32 cpi r20, 0x21 ; 33 + bc2: c9 f4 brne .+50 ; 0xbf6 <__vector_12+0x3e4> + bc4: 51 3a cpi r21, 0xA1 ; 161 + bc6: 09 f0 breq .+2 ; 0xbca <__vector_12+0x3b8> + bc8: 43 c0 rjmp .+134 ; 0xc50 <__vector_12+0x43e> + +#define STALL UECONX = _BV(STALLRQ) | _BV(EPEN) + +static inline void usb_wait_in_ready(void) +{ + while (!(UEINTX & _BV(TXINI))); + bca: e8 ee ldi r30, 0xE8 ; 232 + bcc: f0 e0 ldi r31, 0x00 ; 0 + bce: 80 81 ld r24, Z + bd0: 80 ff sbrs r24, 0 + bd2: fd cf rjmp .-6 ; 0xbce <__vector_12+0x3bc> + return; + } + if (ucr.bRequest == CDC_GET_LINE_CODING && ucr.bmRequestType == 0xA1) { + // request baudrate and transmission format + usb_wait_in_ready(); + cdc_notify_getlinecoding(); + bd4: 0e 94 d8 00 call 0x1b0 ; 0x1b0 + bd8: e5 ef ldi r30, 0xF5 ; 245 + bda: f1 e0 ldi r31, 0x01 ; 1 +//----------------------------------------------------------------------------- +// Endpoint Interrupts +//----------------------------------------------------------------------------- +// Interrupts, triggered by incoming data in an endpoint, are handled here. + +ISR(USB_COM_vect) + bdc: 8c ef ldi r24, 0xFC ; 252 + bde: 91 e0 ldi r25, 0x01 ; 1 + } + if (ucr.bRequest == CDC_GET_LINE_CODING && ucr.bmRequestType == 0xA1) { + // request baudrate and transmission format + usb_wait_in_ready(); + cdc_notify_getlinecoding(); + for (i=0; i<7; i++) UEDATX = cdc_linecoding.data[i]; + be0: a1 ef ldi r26, 0xF1 ; 241 + be2: b0 e0 ldi r27, 0x00 ; 0 + be4: 21 91 ld r18, Z+ + be6: 2c 93 st X, r18 + be8: e8 17 cp r30, r24 + bea: f9 07 cpc r31, r25 + bec: d9 f7 brne .-10 ; 0xbe4 <__vector_12+0x3d2> + USB_SEND_IN; + bee: 8e ef ldi r24, 0xFE ; 254 + bf0: 80 93 e8 00 sts 0x00E8, r24 + bf4: d2 c0 rjmp .+420 ; 0xd9a <__vector_12+0x588> + return; + } + if (ucr.bRequest == CDC_SET_LINE_CODING && ucr.bmRequestType == 0x21) { + bf6: 40 32 cpi r20, 0x20 ; 32 + bf8: c9 f4 brne .+50 ; 0xc2c <__vector_12+0x41a> + bfa: 51 32 cpi r21, 0x21 ; 33 + bfc: 09 f0 breq .+2 ; 0xc00 <__vector_12+0x3ee> + bfe: 59 c0 rjmp .+178 ; 0xcb2 <__vector_12+0x4a0> + // set baudrate and transmission format + usb_wait_receive_out(); + c00: 0e 94 37 03 call 0x66e ; 0x66e + c04: e5 ef ldi r30, 0xF5 ; 245 + c06: f1 e0 ldi r31, 0x01 ; 1 +//----------------------------------------------------------------------------- +// Endpoint Interrupts +//----------------------------------------------------------------------------- +// Interrupts, triggered by incoming data in an endpoint, are handled here. + +ISR(USB_COM_vect) + c08: 8c ef ldi r24, 0xFC ; 252 + c0a: 91 e0 ldi r25, 0x01 ; 1 + return; + } + if (ucr.bRequest == CDC_SET_LINE_CODING && ucr.bmRequestType == 0x21) { + // set baudrate and transmission format + usb_wait_receive_out(); + for (i=0; i<7; i++) cdc_linecoding.data[i] = UEDATX; + c0c: a1 ef ldi r26, 0xF1 ; 241 + c0e: b0 e0 ldi r27, 0x00 ; 0 + c10: 2c 91 ld r18, X + c12: 21 93 st Z+, r18 + c14: e8 17 cp r30, r24 + c16: f9 07 cpc r31, r25 + c18: d9 f7 brne .-10 ; 0xc10 <__vector_12+0x3fe> + USB_ACK; + c1a: e8 ee ldi r30, 0xE8 ; 232 + c1c: f0 e0 ldi r31, 0x00 ; 0 + c1e: 8b ef ldi r24, 0xFB ; 251 + c20: 80 83 st Z, r24 + USB_SEND_IN; + c22: 8e ef ldi r24, 0xFE ; 254 + c24: 80 83 st Z, r24 + cdc_notify_setlinecoding(); + c26: 0e 94 d9 00 call 0x1b2 ; 0x1b2 + c2a: b7 c0 rjmp .+366 ; 0xd9a <__vector_12+0x588> + return; + } + if (ucr.bRequest == CDC_SET_CONTROL_LINE_STATE && ucr.bmRequestType == 0x21) { + c2c: 42 32 cpi r20, 0x22 ; 34 + c2e: 81 f4 brne .+32 ; 0xc50 <__vector_12+0x43e> + c30: 51 32 cpi r21, 0x21 ; 33 + c32: 09 f0 breq .+2 ; 0xc36 <__vector_12+0x424> + c34: 4f c0 rjmp .+158 ; 0xcd4 <__vector_12+0x4c2> + // set handshake outputs RTS and DTR + cdc_rtsdtr = (uint8_t)ucr.wValue; + c36: 80 93 f4 01 sts 0x01F4, r24 + +#define STALL UECONX = _BV(STALLRQ) | _BV(EPEN) + +static inline void usb_wait_in_ready(void) +{ + while (!(UEINTX & _BV(TXINI))); + c3a: e8 ee ldi r30, 0xE8 ; 232 + c3c: f0 e0 ldi r31, 0x00 ; 0 + c3e: 80 81 ld r24, Z + c40: 80 ff sbrs r24, 0 + c42: fd cf rjmp .-6 ; 0xc3e <__vector_12+0x42c> + } + if (ucr.bRequest == CDC_SET_CONTROL_LINE_STATE && ucr.bmRequestType == 0x21) { + // set handshake outputs RTS and DTR + cdc_rtsdtr = (uint8_t)ucr.wValue; + usb_wait_in_ready(); + USB_SEND_IN; + c44: 8e ef ldi r24, 0xFE ; 254 + c46: 80 93 e8 00 sts 0x00E8, r24 + cdc_notify_setcontrollinestate(); + c4a: 0e 94 da 00 call 0x1b4 ; 0x1b4 + c4e: a5 c0 rjmp .+330 ; 0xd9a <__vector_12+0x588> + return; + } + if (ucr.bRequest == GET_STATUS) { + c50: 41 11 cpse r20, r1 + c52: 1a c0 rjmp .+52 ; 0xc88 <__vector_12+0x476> + +#define STALL UECONX = _BV(STALLRQ) | _BV(EPEN) + +static inline void usb_wait_in_ready(void) +{ + while (!(UEINTX & _BV(TXINI))); + c54: e8 ee ldi r30, 0xE8 ; 232 + c56: f0 e0 ldi r31, 0x00 ; 0 + c58: 80 81 ld r24, Z + c5a: 80 ff sbrs r24, 0 + c5c: fd cf rjmp .-6 ; 0xc58 <__vector_12+0x446> + } + if (ucr.bRequest == GET_STATUS) { + usb_wait_in_ready(); + i = 0; + #ifdef SUPPORT_ENDPOINT_HALT + if (ucr.bmRequestType == 0x82) { + c5e: 52 38 cpi r21, 0x82 ; 130 + c60: 51 f4 brne .+20 ; 0xc76 <__vector_12+0x464> + UENUM = ucr.wIndex; + c62: e9 ee ldi r30, 0xE9 ; 233 + c64: f0 e0 ldi r31, 0x00 ; 0 + c66: 20 83 st Z, r18 + if (UECONX & _BV(STALLRQ)) i = 1; + c68: 80 91 eb 00 lds r24, 0x00EB + c6c: 85 fb bst r24, 5 + c6e: 88 27 eor r24, r24 + c70: 80 f9 bld r24, 0 + UENUM = 0; + c72: 10 82 st Z, r1 + c74: 01 c0 rjmp .+2 ; 0xc78 <__vector_12+0x466> + cdc_notify_setcontrollinestate(); + return; + } + if (ucr.bRequest == GET_STATUS) { + usb_wait_in_ready(); + i = 0; + c76: 80 e0 ldi r24, 0x00 ; 0 + UENUM = ucr.wIndex; + if (UECONX & _BV(STALLRQ)) i = 1; + UENUM = 0; + } + #endif + UEDATX = i; + c78: e1 ef ldi r30, 0xF1 ; 241 + c7a: f0 e0 ldi r31, 0x00 ; 0 + c7c: 80 83 st Z, r24 + UEDATX = 0; + c7e: 10 82 st Z, r1 + USB_SEND_IN; + c80: 8e ef ldi r24, 0xFE ; 254 + c82: 80 93 e8 00 sts 0x00E8, r24 + c86: 89 c0 rjmp .+274 ; 0xd9a <__vector_12+0x588> + return; + } + #if (NUMINTERFACES>1) + if (ucr.bRequest == SET_INTERFACE && (ucr.bmRequestType == 0x20 || ucr.bmRequestType == 0)) { // another interface will be chosen + c88: 4b 30 cpi r20, 0x0B ; 11 + c8a: 99 f4 brne .+38 ; 0xcb2 <__vector_12+0x4a0> + c8c: 50 32 cpi r21, 0x20 ; 32 + c8e: 11 f0 breq .+4 ; 0xc94 <__vector_12+0x482> + c90: 51 11 cpse r21, r1 + c92: 49 c0 rjmp .+146 ; 0xd26 <__vector_12+0x514> + if (ucr.wIndex + usb_if = ucr.wIndex; + c9a: 20 93 25 01 sts 0x0125, r18 + USB_SEND_IN; + c9e: 8e ef ldi r24, 0xFE ; 254 + ca0: 80 93 e8 00 sts 0x00E8, r24 + #ifdef STATICENDPOINTS + usb_endpoints(); // initialize endpoints + ca4: 0e 94 b6 02 call 0x56c ; 0x56c + ca8: 78 c0 rjmp .+240 ; 0xd9a <__vector_12+0x588> + #else + usb_endpoints(usb_if); // initialize endpoints + #endif + } else { // other configurations are not supported in this version + STALL; // stall + caa: 81 e2 ldi r24, 0x21 ; 33 + cac: 80 93 eb 00 sts 0x00EB, r24 + cb0: 74 c0 rjmp .+232 ; 0xd9a <__vector_12+0x588> + } + return; + } + if (ucr.bRequest == GET_INTERFACE && ucr.bmRequestType == 0x80) { + cb2: 4a 30 cpi r20, 0x0A ; 10 + cb4: 79 f4 brne .+30 ; 0xcd4 <__vector_12+0x4c2> + cb6: 50 38 cpi r21, 0x80 ; 128 + cb8: b1 f5 brne .+108 ; 0xd26 <__vector_12+0x514> + +#define STALL UECONX = _BV(STALLRQ) | _BV(EPEN) + +static inline void usb_wait_in_ready(void) +{ + while (!(UEINTX & _BV(TXINI))); + cba: e8 ee ldi r30, 0xE8 ; 232 + cbc: f0 e0 ldi r31, 0x00 ; 0 + cbe: 80 81 ld r24, Z + cc0: 80 ff sbrs r24, 0 + cc2: fd cf rjmp .-6 ; 0xcbe <__vector_12+0x4ac> + } + return; + } + if (ucr.bRequest == GET_INTERFACE && ucr.bmRequestType == 0x80) { + usb_wait_in_ready(); + UEDATX = usb_if; + cc4: 80 91 25 01 lds r24, 0x0125 + cc8: 80 93 f1 00 sts 0x00F1, r24 + USB_SEND_IN; + ccc: 8e ef ldi r24, 0xFE ; 254 + cce: 80 93 e8 00 sts 0x00E8, r24 + cd2: 63 c0 rjmp .+198 ; 0xd9a <__vector_12+0x588> + return; + } + #endif + #ifdef SUPPORT_ENDPOINT_HALT + if ((ucr.bRequest == CLEAR_FEATURE || ucr.bRequest == SET_FEATURE) + cd4: 41 30 cpi r20, 0x01 ; 1 + cd6: 11 f0 breq .+4 ; 0xcdc <__vector_12+0x4ca> + cd8: 43 30 cpi r20, 0x03 ; 3 + cda: 29 f5 brne .+74 ; 0xd26 <__vector_12+0x514> + && ucr.bmRequestType == 0x02 && ucr.wValue == 0) { + cdc: 52 30 cpi r21, 0x02 ; 2 + cde: 19 f5 brne .+70 ; 0xd26 <__vector_12+0x514> + ce0: 89 2b or r24, r25 + ce2: 09 f5 brne .+66 ; 0xd26 <__vector_12+0x514> + i = ucr.wIndex & 0x7F; + ce4: 2f 77 andi r18, 0x7F ; 127 + ce6: 33 27 eor r19, r19 + if (i >= 1 && i <= MAX_ENDPOINT) { + ce8: 92 2f mov r25, r18 + cea: 91 50 subi r25, 0x01 ; 1 + cec: 94 30 cpi r25, 0x04 ; 4 + cee: d8 f4 brcc .+54 ; 0xd26 <__vector_12+0x514> + USB_SEND_IN; + cf0: 9e ef ldi r25, 0xFE ; 254 + cf2: 90 93 e8 00 sts 0x00E8, r25 + UENUM = i; + cf6: 20 93 e9 00 sts 0x00E9, r18 + if (ucr.bRequest == SET_FEATURE) { + cfa: 43 30 cpi r20, 0x03 ; 3 + cfc: 21 f4 brne .+8 ; 0xd06 <__vector_12+0x4f4> + UECONX = _BV(STALLRQ)|_BV(EPEN); + cfe: 81 e2 ldi r24, 0x21 ; 33 + d00: 80 93 eb 00 sts 0x00EB, r24 + d04: 4a c0 rjmp .+148 ; 0xd9a <__vector_12+0x588> + } else { + UECONX = _BV(STALLRQC)|_BV(RSTDT)|_BV(EPEN); + d06: 89 e1 ldi r24, 0x19 ; 25 + d08: 80 93 eb 00 sts 0x00EB, r24 + UERST = _BV(i); + d0c: 81 e0 ldi r24, 0x01 ; 1 + d0e: 90 e0 ldi r25, 0x00 ; 0 + d10: ac 01 movw r20, r24 + d12: 02 c0 rjmp .+4 ; 0xd18 <__vector_12+0x506> + d14: 44 0f add r20, r20 + d16: 55 1f adc r21, r21 + d18: 2a 95 dec r18 + d1a: e2 f7 brpl .-8 ; 0xd14 <__vector_12+0x502> + d1c: ea ee ldi r30, 0xEA ; 234 + d1e: f0 e0 ldi r31, 0x00 ; 0 + d20: 40 83 st Z, r20 + UERST = 0; + d22: 10 82 st Z, r1 + d24: 3a c0 rjmp .+116 ; 0xd9a <__vector_12+0x588> + if (!usb_controlrequest(&ucr)) + UECONX = _BV(STALLRQ) | _BV(EPEN); // stall + return; + #endif + } + UECONX = _BV(STALLRQ) | _BV(EPEN); // stall + d26: 81 e2 ldi r24, 0x21 ; 33 + d28: 80 93 eb 00 sts 0x00EB, r24 + d2c: 2d c0 rjmp .+90 ; 0xd88 <__vector_12+0x576> + d2e: 12 2f mov r17, r18 + } + + // handle pending interrupts for other endpoints + for (i=1; i<=MAX_ENDPOINT; i++) { + if (UEINT & _BV(i)) { + d30: 80 81 ld r24, Z + d32: 90 e0 ldi r25, 0x00 ; 0 + d34: 02 2e mov r0, r18 + d36: 02 c0 rjmp .+4 ; 0xd3c <__vector_12+0x52a> + d38: 95 95 asr r25 + d3a: 87 95 ror r24 + d3c: 0a 94 dec r0 + d3e: e2 f7 brpl .-8 ; 0xd38 <__vector_12+0x526> + d40: 80 ff sbrs r24, 0 + d42: 19 c0 rjmp .+50 ; 0xd76 <__vector_12+0x564> + UENUM=i; // select endpoint + d44: da 01 movw r26, r20 + d46: 2c 93 st X, r18 + intbits = UEINTX; // save interrupt bits of the endpoint + d48: db 01 movw r26, r22 + d4a: 8c 91 ld r24, X + if (intbits & _BV(RXOUTI)) { // interrupt occured by incoming data + d4c: 82 ff sbrs r24, 2 + d4e: 13 c0 rjmp .+38 ; 0xd76 <__vector_12+0x564> + #ifdef MEGA4_6 + if (((uint16_t)(UEBCHX)<<8)+UEBCLX) { // data available in input endpoint + usb_ep(i,((uint16_t)(UEBCHX)<<8)+UEBCLX); + #else + if (UEBCLX) { // data available in input endpoint + d50: 80 91 f2 00 lds r24, 0x00F2 + d54: 88 23 and r24, r24 + d56: 41 f0 breq .+16 ; 0xd68 <__vector_12+0x556> + usb_ep(i,UEBCLX); + d58: 60 91 f2 00 lds r22, 0x00F2 + d5c: 70 e0 ldi r23, 0x00 ; 0 + d5e: 82 2f mov r24, r18 + d60: 0e 94 db 00 call 0x1b6 ; 0x1b6 + #endif + UENUM=i; // reselect endpoint (if changed by handling routine) + d64: 10 93 e9 00 sts 0x00E9, r17 + } + UEINTX = ~(_BV(RXOUTI)|_BV(STALLEDI)); // clear interrupt flags + d68: e8 ee ldi r30, 0xE8 ; 232 + d6a: f0 e0 ldi r31, 0x00 ; 0 + d6c: 89 ef ldi r24, 0xF9 ; 249 + d6e: 80 83 st Z, r24 + UEINTX = 0x7F; // free bank (FIFOCON), has to be executed after RXOUTI! + d70: 8f e7 ldi r24, 0x7F ; 127 + d72: 80 83 st Z, r24 + d74: 12 c0 rjmp .+36 ; 0xd9a <__vector_12+0x588> + d76: 2f 5f subi r18, 0xFF ; 255 + d78: 3f 4f sbci r19, 0xFF ; 255 + } + UECONX = _BV(STALLRQ) | _BV(EPEN); // stall + } + + // handle pending interrupts for other endpoints + for (i=1; i<=MAX_ENDPOINT; i++) { + d7a: 25 30 cpi r18, 0x05 ; 5 + d7c: 31 05 cpc r19, r1 + d7e: b9 f6 brne .-82 ; 0xd2e <__vector_12+0x51c> + UEINTX = 0x7F; // free bank (FIFOCON), has to be executed after RXOUTI! + return; + } + } + } + STALL; // stall + d80: 81 e2 ldi r24, 0x21 ; 33 + d82: 80 93 eb 00 sts 0x00EB, r24 + d86: 09 c0 rjmp .+18 ; 0xd9a <__vector_12+0x588> + cdc_notify_setcontrollinestate(); + return; + } + if (ucr.bRequest == GET_STATUS) { + usb_wait_in_ready(); + i = 0; + d88: 21 e0 ldi r18, 0x01 ; 1 + d8a: 30 e0 ldi r19, 0x00 ; 0 + UECONX = _BV(STALLRQ) | _BV(EPEN); // stall + } + + // handle pending interrupts for other endpoints + for (i=1; i<=MAX_ENDPOINT; i++) { + if (UEINT & _BV(i)) { + d8c: e4 ef ldi r30, 0xF4 ; 244 + d8e: f0 e0 ldi r31, 0x00 ; 0 + UENUM=i; // select endpoint + d90: 49 ee ldi r20, 0xE9 ; 233 + d92: 50 e0 ldi r21, 0x00 ; 0 + intbits = UEINTX; // save interrupt bits of the endpoint + d94: 68 ee ldi r22, 0xE8 ; 232 + d96: 70 e0 ldi r23, 0x00 ; 0 + d98: ca cf rjmp .-108 ; 0xd2e <__vector_12+0x51c> + return; + } + } + } + STALL; // stall +} + d9a: 29 96 adiw r28, 0x09 ; 9 + d9c: 0f b6 in r0, 0x3f ; 63 + d9e: f8 94 cli + da0: de bf out 0x3e, r29 ; 62 + da2: 0f be out 0x3f, r0 ; 63 + da4: cd bf out 0x3d, r28 ; 61 + da6: df 91 pop r29 + da8: cf 91 pop r28 + daa: ff 91 pop r31 + dac: ef 91 pop r30 + dae: bf 91 pop r27 + db0: af 91 pop r26 + db2: 9f 91 pop r25 + db4: 8f 91 pop r24 + db6: 7f 91 pop r23 + db8: 6f 91 pop r22 + dba: 5f 91 pop r21 + dbc: 4f 91 pop r20 + dbe: 3f 91 pop r19 + dc0: 2f 91 pop r18 + dc2: 1f 91 pop r17 + dc4: 0f 91 pop r16 + dc6: ff 90 pop r15 + dc8: ef 90 pop r14 + dca: df 90 pop r13 + dcc: cf 90 pop r12 + dce: bf 90 pop r11 + dd0: af 90 pop r10 + dd2: 9f 90 pop r9 + dd4: 8f 90 pop r8 + dd6: 7f 90 pop r7 + dd8: 6f 90 pop r6 + dda: 5f 90 pop r5 + ddc: 4f 90 pop r4 + dde: 3f 90 pop r3 + de0: 2f 90 pop r2 + de2: 0f 90 pop r0 + de4: 0f be out 0x3f, r0 ; 63 + de6: 0f 90 pop r0 + de8: 1f 90 pop r1 + dea: 18 95 reti + +00000dec : + dec: 0f 93 push r16 + dee: 1f 93 push r17 + df0: cf 93 push r28 + df2: df 93 push r29 + df4: 82 30 cpi r24, 0x02 ; 2 + df6: 91 05 cpc r25, r1 + df8: 10 f4 brcc .+4 ; 0xdfe + dfa: 82 e0 ldi r24, 0x02 ; 2 + dfc: 90 e0 ldi r25, 0x00 ; 0 + dfe: e0 91 fe 01 lds r30, 0x01FE + e02: f0 91 ff 01 lds r31, 0x01FF + e06: 20 e0 ldi r18, 0x00 ; 0 + e08: 30 e0 ldi r19, 0x00 ; 0 + e0a: c0 e0 ldi r28, 0x00 ; 0 + e0c: d0 e0 ldi r29, 0x00 ; 0 + e0e: 23 c0 rjmp .+70 ; 0xe56 + e10: 40 81 ld r20, Z + e12: 51 81 ldd r21, Z+1 ; 0x01 + e14: 48 17 cp r20, r24 + e16: 59 07 cpc r21, r25 + e18: a8 f0 brcs .+42 ; 0xe44 + e1a: 48 17 cp r20, r24 + e1c: 59 07 cpc r21, r25 + e1e: 61 f4 brne .+24 ; 0xe38 + e20: 82 81 ldd r24, Z+2 ; 0x02 + e22: 93 81 ldd r25, Z+3 ; 0x03 + e24: 20 97 sbiw r28, 0x00 ; 0 + e26: 19 f0 breq .+6 ; 0xe2e + e28: 9b 83 std Y+3, r25 ; 0x03 + e2a: 8a 83 std Y+2, r24 ; 0x02 + e2c: 2e c0 rjmp .+92 ; 0xe8a + e2e: 90 93 ff 01 sts 0x01FF, r25 + e32: 80 93 fe 01 sts 0x01FE, r24 + e36: 29 c0 rjmp .+82 ; 0xe8a + e38: 21 15 cp r18, r1 + e3a: 31 05 cpc r19, r1 + e3c: 29 f0 breq .+10 ; 0xe48 + e3e: 42 17 cp r20, r18 + e40: 53 07 cpc r21, r19 + e42: 10 f0 brcs .+4 ; 0xe48 + e44: a9 01 movw r20, r18 + e46: 02 c0 rjmp .+4 ; 0xe4c + e48: be 01 movw r22, r28 + e4a: df 01 movw r26, r30 + e4c: 02 81 ldd r16, Z+2 ; 0x02 + e4e: 13 81 ldd r17, Z+3 ; 0x03 + e50: ef 01 movw r28, r30 + e52: 9a 01 movw r18, r20 + e54: f8 01 movw r30, r16 + e56: 30 97 sbiw r30, 0x00 ; 0 + e58: d9 f6 brne .-74 ; 0xe10 + e5a: 21 15 cp r18, r1 + e5c: 31 05 cpc r19, r1 + e5e: 09 f1 breq .+66 ; 0xea2 + e60: 28 1b sub r18, r24 + e62: 39 0b sbc r19, r25 + e64: 24 30 cpi r18, 0x04 ; 4 + e66: 31 05 cpc r19, r1 + e68: 90 f4 brcc .+36 ; 0xe8e + e6a: 12 96 adiw r26, 0x02 ; 2 + e6c: 8d 91 ld r24, X+ + e6e: 9c 91 ld r25, X + e70: 13 97 sbiw r26, 0x03 ; 3 + e72: 61 15 cp r22, r1 + e74: 71 05 cpc r23, r1 + e76: 21 f0 breq .+8 ; 0xe80 + e78: fb 01 movw r30, r22 + e7a: 93 83 std Z+3, r25 ; 0x03 + e7c: 82 83 std Z+2, r24 ; 0x02 + e7e: 04 c0 rjmp .+8 ; 0xe88 + e80: 90 93 ff 01 sts 0x01FF, r25 + e84: 80 93 fe 01 sts 0x01FE, r24 + e88: fd 01 movw r30, r26 + e8a: 32 96 adiw r30, 0x02 ; 2 + e8c: 44 c0 rjmp .+136 ; 0xf16 + e8e: fd 01 movw r30, r26 + e90: e2 0f add r30, r18 + e92: f3 1f adc r31, r19 + e94: 81 93 st Z+, r24 + e96: 91 93 st Z+, r25 + e98: 22 50 subi r18, 0x02 ; 2 + e9a: 31 09 sbc r19, r1 + e9c: 2d 93 st X+, r18 + e9e: 3c 93 st X, r19 + ea0: 3a c0 rjmp .+116 ; 0xf16 + ea2: 20 91 fc 01 lds r18, 0x01FC + ea6: 30 91 fd 01 lds r19, 0x01FD + eaa: 23 2b or r18, r19 + eac: 41 f4 brne .+16 ; 0xebe + eae: 20 91 28 01 lds r18, 0x0128 + eb2: 30 91 29 01 lds r19, 0x0129 + eb6: 30 93 fd 01 sts 0x01FD, r19 + eba: 20 93 fc 01 sts 0x01FC, r18 + ebe: 20 91 26 01 lds r18, 0x0126 + ec2: 30 91 27 01 lds r19, 0x0127 + ec6: 21 15 cp r18, r1 + ec8: 31 05 cpc r19, r1 + eca: 41 f4 brne .+16 ; 0xedc + ecc: 2d b7 in r18, 0x3d ; 61 + ece: 3e b7 in r19, 0x3e ; 62 + ed0: 40 91 2a 01 lds r20, 0x012A + ed4: 50 91 2b 01 lds r21, 0x012B + ed8: 24 1b sub r18, r20 + eda: 35 0b sbc r19, r21 + edc: e0 91 fc 01 lds r30, 0x01FC + ee0: f0 91 fd 01 lds r31, 0x01FD + ee4: e2 17 cp r30, r18 + ee6: f3 07 cpc r31, r19 + ee8: a0 f4 brcc .+40 ; 0xf12 + eea: 2e 1b sub r18, r30 + eec: 3f 0b sbc r19, r31 + eee: 28 17 cp r18, r24 + ef0: 39 07 cpc r19, r25 + ef2: 78 f0 brcs .+30 ; 0xf12 + ef4: ac 01 movw r20, r24 + ef6: 4e 5f subi r20, 0xFE ; 254 + ef8: 5f 4f sbci r21, 0xFF ; 255 + efa: 24 17 cp r18, r20 + efc: 35 07 cpc r19, r21 + efe: 48 f0 brcs .+18 ; 0xf12 + f00: 4e 0f add r20, r30 + f02: 5f 1f adc r21, r31 + f04: 50 93 fd 01 sts 0x01FD, r21 + f08: 40 93 fc 01 sts 0x01FC, r20 + f0c: 81 93 st Z+, r24 + f0e: 91 93 st Z+, r25 + f10: 02 c0 rjmp .+4 ; 0xf16 + f12: e0 e0 ldi r30, 0x00 ; 0 + f14: f0 e0 ldi r31, 0x00 ; 0 + f16: cf 01 movw r24, r30 + f18: df 91 pop r29 + f1a: cf 91 pop r28 + f1c: 1f 91 pop r17 + f1e: 0f 91 pop r16 + f20: 08 95 ret + +00000f22 : + f22: ef 92 push r14 + f24: ff 92 push r15 + f26: 0f 93 push r16 + f28: 1f 93 push r17 + f2a: cf 93 push r28 + f2c: df 93 push r29 + f2e: 00 97 sbiw r24, 0x00 ; 0 + f30: 09 f4 brne .+2 ; 0xf34 + f32: 8f c0 rjmp .+286 ; 0x1052 + f34: dc 01 movw r26, r24 + f36: 12 97 sbiw r26, 0x02 ; 2 + f38: 13 96 adiw r26, 0x03 ; 3 + f3a: 1c 92 st X, r1 + f3c: 1e 92 st -X, r1 + f3e: 12 97 sbiw r26, 0x02 ; 2 + f40: e0 90 fe 01 lds r14, 0x01FE + f44: f0 90 ff 01 lds r15, 0x01FF + f48: e1 14 cp r14, r1 + f4a: f1 04 cpc r15, r1 + f4c: 89 f4 brne .+34 ; 0xf70 + f4e: 2d 91 ld r18, X+ + f50: 3c 91 ld r19, X + f52: 11 97 sbiw r26, 0x01 ; 1 + f54: 28 0f add r18, r24 + f56: 39 1f adc r19, r25 + f58: 80 91 fc 01 lds r24, 0x01FC + f5c: 90 91 fd 01 lds r25, 0x01FD + f60: 82 17 cp r24, r18 + f62: 93 07 cpc r25, r19 + f64: 89 f5 brne .+98 ; 0xfc8 + f66: b0 93 fd 01 sts 0x01FD, r27 + f6a: a0 93 fc 01 sts 0x01FC, r26 + f6e: 71 c0 rjmp .+226 ; 0x1052 + f70: e7 01 movw r28, r14 + f72: 20 e0 ldi r18, 0x00 ; 0 + f74: 30 e0 ldi r19, 0x00 ; 0 + f76: 01 c0 rjmp .+2 ; 0xf7a + f78: ea 01 movw r28, r20 + f7a: ca 17 cp r28, r26 + f7c: db 07 cpc r29, r27 + f7e: 38 f4 brcc .+14 ; 0xf8e + f80: 4a 81 ldd r20, Y+2 ; 0x02 + f82: 5b 81 ldd r21, Y+3 ; 0x03 + f84: 9e 01 movw r18, r28 + f86: 41 15 cp r20, r1 + f88: 51 05 cpc r21, r1 + f8a: b1 f7 brne .-20 ; 0xf78 + f8c: 22 c0 rjmp .+68 ; 0xfd2 + f8e: bc 01 movw r22, r24 + f90: 62 50 subi r22, 0x02 ; 2 + f92: 71 09 sbc r23, r1 + f94: fb 01 movw r30, r22 + f96: d3 83 std Z+3, r29 ; 0x03 + f98: c2 83 std Z+2, r28 ; 0x02 + f9a: 00 81 ld r16, Z + f9c: 11 81 ldd r17, Z+1 ; 0x01 + f9e: ac 01 movw r20, r24 + fa0: 40 0f add r20, r16 + fa2: 51 1f adc r21, r17 + fa4: 4c 17 cp r20, r28 + fa6: 5d 07 cpc r21, r29 + fa8: 61 f4 brne .+24 ; 0xfc2 + faa: 48 81 ld r20, Y + fac: 59 81 ldd r21, Y+1 ; 0x01 + fae: 40 0f add r20, r16 + fb0: 51 1f adc r21, r17 + fb2: 4e 5f subi r20, 0xFE ; 254 + fb4: 5f 4f sbci r21, 0xFF ; 255 + fb6: 51 83 std Z+1, r21 ; 0x01 + fb8: 40 83 st Z, r20 + fba: 4a 81 ldd r20, Y+2 ; 0x02 + fbc: 5b 81 ldd r21, Y+3 ; 0x03 + fbe: 53 83 std Z+3, r21 ; 0x03 + fc0: 42 83 std Z+2, r20 ; 0x02 + fc2: 21 15 cp r18, r1 + fc4: 31 05 cpc r19, r1 + fc6: 29 f4 brne .+10 ; 0xfd2 + fc8: b0 93 ff 01 sts 0x01FF, r27 + fcc: a0 93 fe 01 sts 0x01FE, r26 + fd0: 40 c0 rjmp .+128 ; 0x1052 + fd2: f9 01 movw r30, r18 + fd4: b3 83 std Z+3, r27 ; 0x03 + fd6: a2 83 std Z+2, r26 ; 0x02 + fd8: e9 01 movw r28, r18 + fda: 69 91 ld r22, Y+ + fdc: 79 91 ld r23, Y+ + fde: c6 0f add r28, r22 + fe0: d7 1f adc r29, r23 + fe2: ac 17 cp r26, r28 + fe4: bd 07 cpc r27, r29 + fe6: 79 f4 brne .+30 ; 0x1006 + fe8: dc 01 movw r26, r24 + fea: 5e 91 ld r21, -X + fec: 4e 91 ld r20, -X + fee: 46 0f add r20, r22 + ff0: 57 1f adc r21, r23 + ff2: 4e 5f subi r20, 0xFE ; 254 + ff4: 5f 4f sbci r21, 0xFF ; 255 + ff6: 51 83 std Z+1, r21 ; 0x01 + ff8: 40 83 st Z, r20 + ffa: 12 96 adiw r26, 0x02 ; 2 + ffc: 8d 91 ld r24, X+ + ffe: 9c 91 ld r25, X + 1000: 13 97 sbiw r26, 0x03 ; 3 + 1002: 93 83 std Z+3, r25 ; 0x03 + 1004: 82 83 std Z+2, r24 ; 0x02 + 1006: a0 e0 ldi r26, 0x00 ; 0 + 1008: b0 e0 ldi r27, 0x00 ; 0 + 100a: 02 c0 rjmp .+4 ; 0x1010 + 100c: d7 01 movw r26, r14 + 100e: 7c 01 movw r14, r24 + 1010: f7 01 movw r30, r14 + 1012: 82 81 ldd r24, Z+2 ; 0x02 + 1014: 93 81 ldd r25, Z+3 ; 0x03 + 1016: 00 97 sbiw r24, 0x00 ; 0 + 1018: c9 f7 brne .-14 ; 0x100c + 101a: c7 01 movw r24, r14 + 101c: 02 96 adiw r24, 0x02 ; 2 + 101e: 20 81 ld r18, Z + 1020: 31 81 ldd r19, Z+1 ; 0x01 + 1022: 82 0f add r24, r18 + 1024: 93 1f adc r25, r19 + 1026: 20 91 fc 01 lds r18, 0x01FC + 102a: 30 91 fd 01 lds r19, 0x01FD + 102e: 28 17 cp r18, r24 + 1030: 39 07 cpc r19, r25 + 1032: 79 f4 brne .+30 ; 0x1052 + 1034: 10 97 sbiw r26, 0x00 ; 0 + 1036: 29 f4 brne .+10 ; 0x1042 + 1038: 10 92 ff 01 sts 0x01FF, r1 + 103c: 10 92 fe 01 sts 0x01FE, r1 + 1040: 04 c0 rjmp .+8 ; 0x104a + 1042: 13 96 adiw r26, 0x03 ; 3 + 1044: 1c 92 st X, r1 + 1046: 1e 92 st -X, r1 + 1048: 12 97 sbiw r26, 0x02 ; 2 + 104a: f0 92 fd 01 sts 0x01FD, r15 + 104e: e0 92 fc 01 sts 0x01FC, r14 + 1052: cd b7 in r28, 0x3d ; 61 + 1054: de b7 in r29, 0x3e ; 62 + 1056: e6 e0 ldi r30, 0x06 ; 6 + 1058: 0c 94 ea 0b jmp 0x17d4 ; 0x17d4 <__epilogue_restores__+0x18> + +0000105c : + 105c: fb 01 movw r30, r22 + 105e: dc 01 movw r26, r24 + 1060: 0d 90 ld r0, X+ + 1062: 00 20 and r0, r0 + 1064: e9 f7 brne .-6 ; 0x1060 + 1066: 11 97 sbiw r26, 0x01 ; 1 + 1068: 01 90 ld r0, Z+ + 106a: 0d 92 st X+, r0 + 106c: 00 20 and r0, r0 + 106e: e1 f7 brne .-8 ; 0x1068 + 1070: 08 95 ret + +00001072 : + 1072: fb 01 movw r30, r22 + 1074: 9f 01 movw r18, r30 + 1076: e8 94 clt + 1078: 42 30 cpi r20, 0x02 ; 2 + 107a: c4 f0 brlt .+48 ; 0x10ac + 107c: 45 32 cpi r20, 0x25 ; 37 + 107e: b4 f4 brge .+44 ; 0x10ac + 1080: 4a 30 cpi r20, 0x0A ; 10 + 1082: 29 f4 brne .+10 ; 0x108e + 1084: 97 fb bst r25, 7 + 1086: 1e f4 brtc .+6 ; 0x108e + 1088: 90 95 com r25 + 108a: 81 95 neg r24 + 108c: 9f 4f sbci r25, 0xFF ; 255 + 108e: 64 2f mov r22, r20 + 1090: 77 27 eor r23, r23 + 1092: 0e 94 8c 0b call 0x1718 ; 0x1718 <__udivmodhi4> + 1096: 80 5d subi r24, 0xD0 ; 208 + 1098: 8a 33 cpi r24, 0x3A ; 58 + 109a: 0c f0 brlt .+2 ; 0x109e + 109c: 89 5d subi r24, 0xD9 ; 217 + 109e: 81 93 st Z+, r24 + 10a0: cb 01 movw r24, r22 + 10a2: 00 97 sbiw r24, 0x00 ; 0 + 10a4: a1 f7 brne .-24 ; 0x108e + 10a6: 16 f4 brtc .+4 ; 0x10ac + 10a8: 5d e2 ldi r21, 0x2D ; 45 + 10aa: 51 93 st Z+, r21 + 10ac: 10 82 st Z, r1 + 10ae: c9 01 movw r24, r18 + 10b0: 0c 94 e7 0a jmp 0x15ce ; 0x15ce + +000010b4 : + 10b4: fa 01 movw r30, r20 + 10b6: cf 93 push r28 + 10b8: ff 93 push r31 + 10ba: ef 93 push r30 + 10bc: 22 30 cpi r18, 0x02 ; 2 + 10be: 44 f1 brlt .+80 ; 0x1110 + 10c0: 25 32 cpi r18, 0x25 ; 37 + 10c2: 34 f5 brge .+76 ; 0x1110 + 10c4: c2 2f mov r28, r18 + 10c6: e8 94 clt + 10c8: ca 30 cpi r28, 0x0A ; 10 + 10ca: 49 f4 brne .+18 ; 0x10de + 10cc: 97 fb bst r25, 7 + 10ce: 3e f4 brtc .+14 ; 0x10de + 10d0: 90 95 com r25 + 10d2: 80 95 com r24 + 10d4: 70 95 com r23 + 10d6: 61 95 neg r22 + 10d8: 7f 4f sbci r23, 0xFF ; 255 + 10da: 8f 4f sbci r24, 0xFF ; 255 + 10dc: 9f 4f sbci r25, 0xFF ; 255 + 10de: 2c 2f mov r18, r28 + 10e0: 33 27 eor r19, r19 + 10e2: 44 27 eor r20, r20 + 10e4: 55 27 eor r21, r21 + 10e6: ff 93 push r31 + 10e8: ef 93 push r30 + 10ea: 0e 94 a0 0b call 0x1740 ; 0x1740 <__udivmodsi4> + 10ee: ef 91 pop r30 + 10f0: ff 91 pop r31 + 10f2: 60 5d subi r22, 0xD0 ; 208 + 10f4: 6a 33 cpi r22, 0x3A ; 58 + 10f6: 0c f0 brlt .+2 ; 0x10fa + 10f8: 69 5d subi r22, 0xD9 ; 217 + 10fa: 61 93 st Z+, r22 + 10fc: b9 01 movw r22, r18 + 10fe: ca 01 movw r24, r20 + 1100: 60 50 subi r22, 0x00 ; 0 + 1102: 70 40 sbci r23, 0x00 ; 0 + 1104: 80 40 sbci r24, 0x00 ; 0 + 1106: 90 40 sbci r25, 0x00 ; 0 + 1108: 51 f7 brne .-44 ; 0x10de + 110a: 16 f4 brtc .+4 ; 0x1110 + 110c: cd e2 ldi r28, 0x2D ; 45 + 110e: c1 93 st Z+, r28 + 1110: 10 82 st Z, r1 + 1112: 8f 91 pop r24 + 1114: 9f 91 pop r25 + 1116: cf 91 pop r28 + 1118: 0c 94 e7 0a jmp 0x15ce ; 0x15ce + +0000111c : + 111c: a0 e0 ldi r26, 0x00 ; 0 + 111e: b0 e0 ldi r27, 0x00 ; 0 + 1120: e4 e9 ldi r30, 0x94 ; 148 + 1122: f8 e0 ldi r31, 0x08 ; 8 + 1124: 0c 94 d2 0b jmp 0x17a4 ; 0x17a4 <__prologue_saves__+0x20> + 1128: ce 01 movw r24, r28 + 112a: 09 96 adiw r24, 0x09 ; 9 + 112c: ac 01 movw r20, r24 + 112e: 6f 81 ldd r22, Y+7 ; 0x07 + 1130: 78 85 ldd r23, Y+8 ; 0x08 + 1132: 8d 81 ldd r24, Y+5 ; 0x05 + 1134: 9e 81 ldd r25, Y+6 ; 0x06 + 1136: 0e 94 f3 08 call 0x11e6 ; 0x11e6 + 113a: e2 e0 ldi r30, 0x02 ; 2 + 113c: 0c 94 ee 0b jmp 0x17dc ; 0x17dc <__epilogue_restores__+0x20> + +00001140 : + 1140: a0 e0 ldi r26, 0x00 ; 0 + 1142: b0 e0 ldi r27, 0x00 ; 0 + 1144: e6 ea ldi r30, 0xA6 ; 166 + 1146: f8 e0 ldi r31, 0x08 ; 8 + 1148: 0c 94 c8 0b jmp 0x1790 ; 0x1790 <__prologue_saves__+0xc> + 114c: 6b 01 movw r12, r22 + 114e: 4a 01 movw r8, r20 + 1150: 79 01 movw r14, r18 + 1152: d9 01 movw r26, r18 + 1154: 13 96 adiw r26, 0x03 ; 3 + 1156: 2c 91 ld r18, X + 1158: 21 ff sbrs r18, 1 + 115a: 1b c0 rjmp .+54 ; 0x1192 + 115c: 8c 01 movw r16, r24 + 115e: c0 e0 ldi r28, 0x00 ; 0 + 1160: d0 e0 ldi r29, 0x00 ; 0 + 1162: 10 c0 rjmp .+32 ; 0x1184 + 1164: d7 01 movw r26, r14 + 1166: 18 96 adiw r26, 0x08 ; 8 + 1168: ed 91 ld r30, X+ + 116a: fc 91 ld r31, X + 116c: 19 97 sbiw r26, 0x09 ; 9 + 116e: b7 01 movw r22, r14 + 1170: d8 01 movw r26, r16 + 1172: 8d 91 ld r24, X+ + 1174: 8d 01 movw r16, r26 + 1176: 09 95 icall + 1178: 89 2b or r24, r25 + 117a: 69 f4 brne .+26 ; 0x1196 + 117c: 0a 15 cp r16, r10 + 117e: 1b 05 cpc r17, r11 + 1180: 89 f7 brne .-30 ; 0x1164 + 1182: 21 96 adiw r28, 0x01 ; 1 + 1184: c8 15 cp r28, r8 + 1186: d9 05 cpc r29, r9 + 1188: 31 f0 breq .+12 ; 0x1196 + 118a: 58 01 movw r10, r16 + 118c: ac 0c add r10, r12 + 118e: bd 1c adc r11, r13 + 1190: f5 cf rjmp .-22 ; 0x117c + 1192: c0 e0 ldi r28, 0x00 ; 0 + 1194: d0 e0 ldi r29, 0x00 ; 0 + 1196: ce 01 movw r24, r28 + 1198: cd b7 in r28, 0x3d ; 61 + 119a: de b7 in r29, 0x3e ; 62 + 119c: ec e0 ldi r30, 0x0C ; 12 + 119e: 0c 94 e4 0b jmp 0x17c8 ; 0x17c8 <__epilogue_restores__+0xc> + +000011a2 : + 11a2: ae e0 ldi r26, 0x0E ; 14 + 11a4: b0 e0 ldi r27, 0x00 ; 0 + 11a6: e7 ed ldi r30, 0xD7 ; 215 + 11a8: f8 e0 ldi r31, 0x08 ; 8 + 11aa: 0c 94 d0 0b jmp 0x17a0 ; 0x17a0 <__prologue_saves__+0x1c> + 11ae: 0d 89 ldd r16, Y+21 ; 0x15 + 11b0: 1e 89 ldd r17, Y+22 ; 0x16 + 11b2: 86 e0 ldi r24, 0x06 ; 6 + 11b4: 8c 83 std Y+4, r24 ; 0x04 + 11b6: 1a 83 std Y+2, r17 ; 0x02 + 11b8: 09 83 std Y+1, r16 ; 0x01 + 11ba: 8f ef ldi r24, 0xFF ; 255 + 11bc: 9f e7 ldi r25, 0x7F ; 127 + 11be: 9e 83 std Y+6, r25 ; 0x06 + 11c0: 8d 83 std Y+5, r24 ; 0x05 + 11c2: ce 01 movw r24, r28 + 11c4: 49 96 adiw r24, 0x19 ; 25 + 11c6: ac 01 movw r20, r24 + 11c8: 6f 89 ldd r22, Y+23 ; 0x17 + 11ca: 78 8d ldd r23, Y+24 ; 0x18 + 11cc: ce 01 movw r24, r28 + 11ce: 01 96 adiw r24, 0x01 ; 1 + 11d0: 0e 94 f3 08 call 0x11e6 ; 0x11e6 + 11d4: ef 81 ldd r30, Y+7 ; 0x07 + 11d6: f8 85 ldd r31, Y+8 ; 0x08 + 11d8: e0 0f add r30, r16 + 11da: f1 1f adc r31, r17 + 11dc: 10 82 st Z, r1 + 11de: 2e 96 adiw r28, 0x0e ; 14 + 11e0: e4 e0 ldi r30, 0x04 ; 4 + 11e2: 0c 94 ec 0b jmp 0x17d8 ; 0x17d8 <__epilogue_restores__+0x1c> + +000011e6 : + 11e6: ac e0 ldi r26, 0x0C ; 12 + 11e8: b0 e0 ldi r27, 0x00 ; 0 + 11ea: e9 ef ldi r30, 0xF9 ; 249 + 11ec: f8 e0 ldi r31, 0x08 ; 8 + 11ee: 0c 94 c2 0b jmp 0x1784 ; 0x1784 <__prologue_saves__> + 11f2: 7c 01 movw r14, r24 + 11f4: 6b 01 movw r12, r22 + 11f6: 8a 01 movw r16, r20 + 11f8: fc 01 movw r30, r24 + 11fa: 17 82 std Z+7, r1 ; 0x07 + 11fc: 16 82 std Z+6, r1 ; 0x06 + 11fe: 83 81 ldd r24, Z+3 ; 0x03 + 1200: 81 ff sbrs r24, 1 + 1202: c8 c1 rjmp .+912 ; 0x1594 + 1204: 88 24 eor r8, r8 + 1206: 83 94 inc r8 + 1208: 91 2c mov r9, r1 + 120a: 8c 0e add r8, r28 + 120c: 9d 1e adc r9, r29 + 120e: f7 01 movw r30, r14 + 1210: 93 81 ldd r25, Z+3 ; 0x03 + 1212: f6 01 movw r30, r12 + 1214: 93 fd sbrc r25, 3 + 1216: 85 91 lpm r24, Z+ + 1218: 93 ff sbrs r25, 3 + 121a: 81 91 ld r24, Z+ + 121c: 6f 01 movw r12, r30 + 121e: 88 23 and r24, r24 + 1220: 09 f4 brne .+2 ; 0x1224 + 1222: b4 c1 rjmp .+872 ; 0x158c + 1224: 85 32 cpi r24, 0x25 ; 37 + 1226: 39 f4 brne .+14 ; 0x1236 + 1228: 93 fd sbrc r25, 3 + 122a: 85 91 lpm r24, Z+ + 122c: 93 ff sbrs r25, 3 + 122e: 81 91 ld r24, Z+ + 1230: 6f 01 movw r12, r30 + 1232: 85 32 cpi r24, 0x25 ; 37 + 1234: 29 f4 brne .+10 ; 0x1240 + 1236: b7 01 movw r22, r14 + 1238: 90 e0 ldi r25, 0x00 ; 0 + 123a: 0e 94 f7 0a call 0x15ee ; 0x15ee + 123e: e7 cf rjmp .-50 ; 0x120e + 1240: 51 2c mov r5, r1 + 1242: 31 2c mov r3, r1 + 1244: 20 e0 ldi r18, 0x00 ; 0 + 1246: 20 32 cpi r18, 0x20 ; 32 + 1248: a8 f4 brcc .+42 ; 0x1274 + 124a: 8b 32 cpi r24, 0x2B ; 43 + 124c: 61 f0 breq .+24 ; 0x1266 + 124e: 28 f4 brcc .+10 ; 0x125a + 1250: 80 32 cpi r24, 0x20 ; 32 + 1252: 51 f0 breq .+20 ; 0x1268 + 1254: 83 32 cpi r24, 0x23 ; 35 + 1256: 71 f4 brne .+28 ; 0x1274 + 1258: 0b c0 rjmp .+22 ; 0x1270 + 125a: 8d 32 cpi r24, 0x2D ; 45 + 125c: 39 f0 breq .+14 ; 0x126c + 125e: 80 33 cpi r24, 0x30 ; 48 + 1260: 49 f4 brne .+18 ; 0x1274 + 1262: 21 60 ori r18, 0x01 ; 1 + 1264: 2a c0 rjmp .+84 ; 0x12ba + 1266: 22 60 ori r18, 0x02 ; 2 + 1268: 24 60 ori r18, 0x04 ; 4 + 126a: 27 c0 rjmp .+78 ; 0x12ba + 126c: 28 60 ori r18, 0x08 ; 8 + 126e: 25 c0 rjmp .+74 ; 0x12ba + 1270: 20 61 ori r18, 0x10 ; 16 + 1272: 23 c0 rjmp .+70 ; 0x12ba + 1274: 27 fd sbrc r18, 7 + 1276: 29 c0 rjmp .+82 ; 0x12ca + 1278: 38 2f mov r19, r24 + 127a: 30 53 subi r19, 0x30 ; 48 + 127c: 3a 30 cpi r19, 0x0A ; 10 + 127e: 88 f4 brcc .+34 ; 0x12a2 + 1280: 26 ff sbrs r18, 6 + 1282: 07 c0 rjmp .+14 ; 0x1292 + 1284: 85 2d mov r24, r5 + 1286: 6a e0 ldi r22, 0x0A ; 10 + 1288: 0e 94 83 0b call 0x1706 ; 0x1706 <__mulqi3> + 128c: 58 2e mov r5, r24 + 128e: 53 0e add r5, r19 + 1290: 14 c0 rjmp .+40 ; 0x12ba + 1292: 83 2d mov r24, r3 + 1294: 6a e0 ldi r22, 0x0A ; 10 + 1296: 0e 94 83 0b call 0x1706 ; 0x1706 <__mulqi3> + 129a: 38 2e mov r3, r24 + 129c: 33 0e add r3, r19 + 129e: 20 62 ori r18, 0x20 ; 32 + 12a0: 0c c0 rjmp .+24 ; 0x12ba + 12a2: 8e 32 cpi r24, 0x2E ; 46 + 12a4: 21 f4 brne .+8 ; 0x12ae + 12a6: 26 fd sbrc r18, 6 + 12a8: 71 c1 rjmp .+738 ; 0x158c + 12aa: 20 64 ori r18, 0x40 ; 64 + 12ac: 06 c0 rjmp .+12 ; 0x12ba + 12ae: 8c 36 cpi r24, 0x6C ; 108 + 12b0: 11 f4 brne .+4 ; 0x12b6 + 12b2: 20 68 ori r18, 0x80 ; 128 + 12b4: 02 c0 rjmp .+4 ; 0x12ba + 12b6: 88 36 cpi r24, 0x68 ; 104 + 12b8: 41 f4 brne .+16 ; 0x12ca + 12ba: f6 01 movw r30, r12 + 12bc: 93 fd sbrc r25, 3 + 12be: 85 91 lpm r24, Z+ + 12c0: 93 ff sbrs r25, 3 + 12c2: 81 91 ld r24, Z+ + 12c4: 6f 01 movw r12, r30 + 12c6: 81 11 cpse r24, r1 + 12c8: be cf rjmp .-132 ; 0x1246 + 12ca: 98 2f mov r25, r24 + 12cc: 95 54 subi r25, 0x45 ; 69 + 12ce: 93 30 cpi r25, 0x03 ; 3 + 12d0: 18 f0 brcs .+6 ; 0x12d8 + 12d2: 90 52 subi r25, 0x20 ; 32 + 12d4: 93 30 cpi r25, 0x03 ; 3 + 12d6: 28 f4 brcc .+10 ; 0x12e2 + 12d8: 0c 5f subi r16, 0xFC ; 252 + 12da: 1f 4f sbci r17, 0xFF ; 255 + 12dc: ff e3 ldi r31, 0x3F ; 63 + 12de: f9 83 std Y+1, r31 ; 0x01 + 12e0: 0d c0 rjmp .+26 ; 0x12fc + 12e2: 83 36 cpi r24, 0x63 ; 99 + 12e4: 31 f0 breq .+12 ; 0x12f2 + 12e6: 83 37 cpi r24, 0x73 ; 115 + 12e8: 71 f0 breq .+28 ; 0x1306 + 12ea: 83 35 cpi r24, 0x53 ; 83 + 12ec: 09 f0 breq .+2 ; 0x12f0 + 12ee: 5e c0 rjmp .+188 ; 0x13ac + 12f0: 23 c0 rjmp .+70 ; 0x1338 + 12f2: f8 01 movw r30, r16 + 12f4: 80 81 ld r24, Z + 12f6: 89 83 std Y+1, r24 ; 0x01 + 12f8: 0e 5f subi r16, 0xFE ; 254 + 12fa: 1f 4f sbci r17, 0xFF ; 255 + 12fc: 44 24 eor r4, r4 + 12fe: 43 94 inc r4 + 1300: 51 2c mov r5, r1 + 1302: 54 01 movw r10, r8 + 1304: 15 c0 rjmp .+42 ; 0x1330 + 1306: 38 01 movw r6, r16 + 1308: f2 e0 ldi r31, 0x02 ; 2 + 130a: 6f 0e add r6, r31 + 130c: 71 1c adc r7, r1 + 130e: f8 01 movw r30, r16 + 1310: a0 80 ld r10, Z + 1312: b1 80 ldd r11, Z+1 ; 0x01 + 1314: 26 ff sbrs r18, 6 + 1316: 03 c0 rjmp .+6 ; 0x131e + 1318: 65 2d mov r22, r5 + 131a: 70 e0 ldi r23, 0x00 ; 0 + 131c: 02 c0 rjmp .+4 ; 0x1322 + 131e: 6f ef ldi r22, 0xFF ; 255 + 1320: 7f ef ldi r23, 0xFF ; 255 + 1322: c5 01 movw r24, r10 + 1324: 2c 87 std Y+12, r18 ; 0x0c + 1326: 0e 94 dc 0a call 0x15b8 ; 0x15b8 + 132a: 2c 01 movw r4, r24 + 132c: 83 01 movw r16, r6 + 132e: 2c 85 ldd r18, Y+12 ; 0x0c + 1330: 6f e7 ldi r22, 0x7F ; 127 + 1332: 26 2e mov r2, r22 + 1334: 22 22 and r2, r18 + 1336: 18 c0 rjmp .+48 ; 0x1368 + 1338: 38 01 movw r6, r16 + 133a: f2 e0 ldi r31, 0x02 ; 2 + 133c: 6f 0e add r6, r31 + 133e: 71 1c adc r7, r1 + 1340: f8 01 movw r30, r16 + 1342: a0 80 ld r10, Z + 1344: b1 80 ldd r11, Z+1 ; 0x01 + 1346: 26 ff sbrs r18, 6 + 1348: 03 c0 rjmp .+6 ; 0x1350 + 134a: 65 2d mov r22, r5 + 134c: 70 e0 ldi r23, 0x00 ; 0 + 134e: 02 c0 rjmp .+4 ; 0x1354 + 1350: 6f ef ldi r22, 0xFF ; 255 + 1352: 7f ef ldi r23, 0xFF ; 255 + 1354: c5 01 movw r24, r10 + 1356: 2c 87 std Y+12, r18 ; 0x0c + 1358: 0e 94 d1 0a call 0x15a2 ; 0x15a2 + 135c: 2c 01 movw r4, r24 + 135e: 2c 85 ldd r18, Y+12 ; 0x0c + 1360: 50 e8 ldi r21, 0x80 ; 128 + 1362: 25 2e mov r2, r21 + 1364: 22 2a or r2, r18 + 1366: 83 01 movw r16, r6 + 1368: 23 fc sbrc r2, 3 + 136a: 1c c0 rjmp .+56 ; 0x13a4 + 136c: 06 c0 rjmp .+12 ; 0x137a + 136e: b7 01 movw r22, r14 + 1370: 80 e2 ldi r24, 0x20 ; 32 + 1372: 90 e0 ldi r25, 0x00 ; 0 + 1374: 0e 94 f7 0a call 0x15ee ; 0x15ee + 1378: 3a 94 dec r3 + 137a: 83 2d mov r24, r3 + 137c: 90 e0 ldi r25, 0x00 ; 0 + 137e: 48 16 cp r4, r24 + 1380: 59 06 cpc r5, r25 + 1382: a8 f3 brcs .-22 ; 0x136e + 1384: 0f c0 rjmp .+30 ; 0x13a4 + 1386: f5 01 movw r30, r10 + 1388: 27 fc sbrc r2, 7 + 138a: 85 91 lpm r24, Z+ + 138c: 27 fe sbrs r2, 7 + 138e: 81 91 ld r24, Z+ + 1390: 5f 01 movw r10, r30 + 1392: b7 01 movw r22, r14 + 1394: 90 e0 ldi r25, 0x00 ; 0 + 1396: 0e 94 f7 0a call 0x15ee ; 0x15ee + 139a: 31 10 cpse r3, r1 + 139c: 3a 94 dec r3 + 139e: f1 e0 ldi r31, 0x01 ; 1 + 13a0: 4f 1a sub r4, r31 + 13a2: 51 08 sbc r5, r1 + 13a4: 41 14 cp r4, r1 + 13a6: 51 04 cpc r5, r1 + 13a8: 71 f7 brne .-36 ; 0x1386 + 13aa: ed c0 rjmp .+474 ; 0x1586 + 13ac: 84 36 cpi r24, 0x64 ; 100 + 13ae: 11 f0 breq .+4 ; 0x13b4 + 13b0: 89 36 cpi r24, 0x69 ; 105 + 13b2: 41 f5 brne .+80 ; 0x1404 + 13b4: f8 01 movw r30, r16 + 13b6: 27 ff sbrs r18, 7 + 13b8: 07 c0 rjmp .+14 ; 0x13c8 + 13ba: 60 81 ld r22, Z + 13bc: 71 81 ldd r23, Z+1 ; 0x01 + 13be: 82 81 ldd r24, Z+2 ; 0x02 + 13c0: 93 81 ldd r25, Z+3 ; 0x03 + 13c2: 0c 5f subi r16, 0xFC ; 252 + 13c4: 1f 4f sbci r17, 0xFF ; 255 + 13c6: 08 c0 rjmp .+16 ; 0x13d8 + 13c8: 60 81 ld r22, Z + 13ca: 71 81 ldd r23, Z+1 ; 0x01 + 13cc: 88 27 eor r24, r24 + 13ce: 77 fd sbrc r23, 7 + 13d0: 80 95 com r24 + 13d2: 98 2f mov r25, r24 + 13d4: 0e 5f subi r16, 0xFE ; 254 + 13d6: 1f 4f sbci r17, 0xFF ; 255 + 13d8: 4f e6 ldi r20, 0x6F ; 111 + 13da: b4 2e mov r11, r20 + 13dc: b2 22 and r11, r18 + 13de: 97 ff sbrs r25, 7 + 13e0: 09 c0 rjmp .+18 ; 0x13f4 + 13e2: 90 95 com r25 + 13e4: 80 95 com r24 + 13e6: 70 95 com r23 + 13e8: 61 95 neg r22 + 13ea: 7f 4f sbci r23, 0xFF ; 255 + 13ec: 8f 4f sbci r24, 0xFF ; 255 + 13ee: 9f 4f sbci r25, 0xFF ; 255 + 13f0: f0 e8 ldi r31, 0x80 ; 128 + 13f2: bf 2a or r11, r31 + 13f4: 2a e0 ldi r18, 0x0A ; 10 + 13f6: 30 e0 ldi r19, 0x00 ; 0 + 13f8: a4 01 movw r20, r8 + 13fa: 0e 94 23 0b call 0x1646 ; 0x1646 <__ultoa_invert> + 13fe: a8 2e mov r10, r24 + 1400: a8 18 sub r10, r8 + 1402: 43 c0 rjmp .+134 ; 0x148a + 1404: 85 37 cpi r24, 0x75 ; 117 + 1406: 31 f4 brne .+12 ; 0x1414 + 1408: 3f ee ldi r19, 0xEF ; 239 + 140a: b3 2e mov r11, r19 + 140c: b2 22 and r11, r18 + 140e: 2a e0 ldi r18, 0x0A ; 10 + 1410: 30 e0 ldi r19, 0x00 ; 0 + 1412: 24 c0 rjmp .+72 ; 0x145c + 1414: 99 ef ldi r25, 0xF9 ; 249 + 1416: b9 2e mov r11, r25 + 1418: b2 22 and r11, r18 + 141a: 8f 36 cpi r24, 0x6F ; 111 + 141c: b9 f0 breq .+46 ; 0x144c + 141e: 20 f4 brcc .+8 ; 0x1428 + 1420: 88 35 cpi r24, 0x58 ; 88 + 1422: 09 f0 breq .+2 ; 0x1426 + 1424: b3 c0 rjmp .+358 ; 0x158c + 1426: 0d c0 rjmp .+26 ; 0x1442 + 1428: 80 37 cpi r24, 0x70 ; 112 + 142a: 21 f0 breq .+8 ; 0x1434 + 142c: 88 37 cpi r24, 0x78 ; 120 + 142e: 09 f0 breq .+2 ; 0x1432 + 1430: ad c0 rjmp .+346 ; 0x158c + 1432: 02 c0 rjmp .+4 ; 0x1438 + 1434: 20 e1 ldi r18, 0x10 ; 16 + 1436: b2 2a or r11, r18 + 1438: b4 fe sbrs r11, 4 + 143a: 0b c0 rjmp .+22 ; 0x1452 + 143c: 84 e0 ldi r24, 0x04 ; 4 + 143e: b8 2a or r11, r24 + 1440: 08 c0 rjmp .+16 ; 0x1452 + 1442: 24 ff sbrs r18, 4 + 1444: 09 c0 rjmp .+18 ; 0x1458 + 1446: e6 e0 ldi r30, 0x06 ; 6 + 1448: be 2a or r11, r30 + 144a: 06 c0 rjmp .+12 ; 0x1458 + 144c: 28 e0 ldi r18, 0x08 ; 8 + 144e: 30 e0 ldi r19, 0x00 ; 0 + 1450: 05 c0 rjmp .+10 ; 0x145c + 1452: 20 e1 ldi r18, 0x10 ; 16 + 1454: 30 e0 ldi r19, 0x00 ; 0 + 1456: 02 c0 rjmp .+4 ; 0x145c + 1458: 20 e1 ldi r18, 0x10 ; 16 + 145a: 32 e0 ldi r19, 0x02 ; 2 + 145c: f8 01 movw r30, r16 + 145e: b7 fe sbrs r11, 7 + 1460: 07 c0 rjmp .+14 ; 0x1470 + 1462: 60 81 ld r22, Z + 1464: 71 81 ldd r23, Z+1 ; 0x01 + 1466: 82 81 ldd r24, Z+2 ; 0x02 + 1468: 93 81 ldd r25, Z+3 ; 0x03 + 146a: 0c 5f subi r16, 0xFC ; 252 + 146c: 1f 4f sbci r17, 0xFF ; 255 + 146e: 06 c0 rjmp .+12 ; 0x147c + 1470: 60 81 ld r22, Z + 1472: 71 81 ldd r23, Z+1 ; 0x01 + 1474: 80 e0 ldi r24, 0x00 ; 0 + 1476: 90 e0 ldi r25, 0x00 ; 0 + 1478: 0e 5f subi r16, 0xFE ; 254 + 147a: 1f 4f sbci r17, 0xFF ; 255 + 147c: a4 01 movw r20, r8 + 147e: 0e 94 23 0b call 0x1646 ; 0x1646 <__ultoa_invert> + 1482: a8 2e mov r10, r24 + 1484: a8 18 sub r10, r8 + 1486: ff e7 ldi r31, 0x7F ; 127 + 1488: bf 22 and r11, r31 + 148a: b6 fe sbrs r11, 6 + 148c: 0b c0 rjmp .+22 ; 0x14a4 + 148e: 2b 2d mov r18, r11 + 1490: 2e 7f andi r18, 0xFE ; 254 + 1492: a5 14 cp r10, r5 + 1494: 50 f4 brcc .+20 ; 0x14aa + 1496: b4 fe sbrs r11, 4 + 1498: 0a c0 rjmp .+20 ; 0x14ae + 149a: b2 fc sbrc r11, 2 + 149c: 08 c0 rjmp .+16 ; 0x14ae + 149e: 2b 2d mov r18, r11 + 14a0: 2e 7e andi r18, 0xEE ; 238 + 14a2: 05 c0 rjmp .+10 ; 0x14ae + 14a4: 7a 2c mov r7, r10 + 14a6: 2b 2d mov r18, r11 + 14a8: 03 c0 rjmp .+6 ; 0x14b0 + 14aa: 7a 2c mov r7, r10 + 14ac: 01 c0 rjmp .+2 ; 0x14b0 + 14ae: 75 2c mov r7, r5 + 14b0: 24 ff sbrs r18, 4 + 14b2: 0d c0 rjmp .+26 ; 0x14ce + 14b4: fe 01 movw r30, r28 + 14b6: ea 0d add r30, r10 + 14b8: f1 1d adc r31, r1 + 14ba: 80 81 ld r24, Z + 14bc: 80 33 cpi r24, 0x30 ; 48 + 14be: 11 f4 brne .+4 ; 0x14c4 + 14c0: 29 7e andi r18, 0xE9 ; 233 + 14c2: 09 c0 rjmp .+18 ; 0x14d6 + 14c4: 22 ff sbrs r18, 2 + 14c6: 06 c0 rjmp .+12 ; 0x14d4 + 14c8: 73 94 inc r7 + 14ca: 73 94 inc r7 + 14cc: 04 c0 rjmp .+8 ; 0x14d6 + 14ce: 82 2f mov r24, r18 + 14d0: 86 78 andi r24, 0x86 ; 134 + 14d2: 09 f0 breq .+2 ; 0x14d6 + 14d4: 73 94 inc r7 + 14d6: 23 fd sbrc r18, 3 + 14d8: 14 c0 rjmp .+40 ; 0x1502 + 14da: 20 ff sbrs r18, 0 + 14dc: 0f c0 rjmp .+30 ; 0x14fc + 14de: 5a 2c mov r5, r10 + 14e0: 73 14 cp r7, r3 + 14e2: 60 f4 brcc .+24 ; 0x14fc + 14e4: 53 0c add r5, r3 + 14e6: 57 18 sub r5, r7 + 14e8: 73 2c mov r7, r3 + 14ea: 08 c0 rjmp .+16 ; 0x14fc + 14ec: b7 01 movw r22, r14 + 14ee: 80 e2 ldi r24, 0x20 ; 32 + 14f0: 90 e0 ldi r25, 0x00 ; 0 + 14f2: 2c 87 std Y+12, r18 ; 0x0c + 14f4: 0e 94 f7 0a call 0x15ee ; 0x15ee + 14f8: 73 94 inc r7 + 14fa: 2c 85 ldd r18, Y+12 ; 0x0c + 14fc: 73 14 cp r7, r3 + 14fe: b0 f3 brcs .-20 ; 0x14ec + 1500: 04 c0 rjmp .+8 ; 0x150a + 1502: 73 14 cp r7, r3 + 1504: 10 f4 brcc .+4 ; 0x150a + 1506: 37 18 sub r3, r7 + 1508: 01 c0 rjmp .+2 ; 0x150c + 150a: 31 2c mov r3, r1 + 150c: 24 ff sbrs r18, 4 + 150e: 12 c0 rjmp .+36 ; 0x1534 + 1510: b7 01 movw r22, r14 + 1512: 80 e3 ldi r24, 0x30 ; 48 + 1514: 90 e0 ldi r25, 0x00 ; 0 + 1516: 2c 87 std Y+12, r18 ; 0x0c + 1518: 0e 94 f7 0a call 0x15ee ; 0x15ee + 151c: 2c 85 ldd r18, Y+12 ; 0x0c + 151e: 22 ff sbrs r18, 2 + 1520: 1e c0 rjmp .+60 ; 0x155e + 1522: 21 ff sbrs r18, 1 + 1524: 03 c0 rjmp .+6 ; 0x152c + 1526: 88 e5 ldi r24, 0x58 ; 88 + 1528: 90 e0 ldi r25, 0x00 ; 0 + 152a: 02 c0 rjmp .+4 ; 0x1530 + 152c: 88 e7 ldi r24, 0x78 ; 120 + 152e: 90 e0 ldi r25, 0x00 ; 0 + 1530: b7 01 movw r22, r14 + 1532: 0c c0 rjmp .+24 ; 0x154c + 1534: 82 2f mov r24, r18 + 1536: 86 78 andi r24, 0x86 ; 134 + 1538: 91 f0 breq .+36 ; 0x155e + 153a: 21 fd sbrc r18, 1 + 153c: 02 c0 rjmp .+4 ; 0x1542 + 153e: 80 e2 ldi r24, 0x20 ; 32 + 1540: 01 c0 rjmp .+2 ; 0x1544 + 1542: 8b e2 ldi r24, 0x2B ; 43 + 1544: 27 fd sbrc r18, 7 + 1546: 8d e2 ldi r24, 0x2D ; 45 + 1548: b7 01 movw r22, r14 + 154a: 90 e0 ldi r25, 0x00 ; 0 + 154c: 0e 94 f7 0a call 0x15ee ; 0x15ee + 1550: 06 c0 rjmp .+12 ; 0x155e + 1552: b7 01 movw r22, r14 + 1554: 80 e3 ldi r24, 0x30 ; 48 + 1556: 90 e0 ldi r25, 0x00 ; 0 + 1558: 0e 94 f7 0a call 0x15ee ; 0x15ee + 155c: 5a 94 dec r5 + 155e: a5 14 cp r10, r5 + 1560: c0 f3 brcs .-16 ; 0x1552 + 1562: aa 94 dec r10 + 1564: f4 01 movw r30, r8 + 1566: ea 0d add r30, r10 + 1568: f1 1d adc r31, r1 + 156a: b7 01 movw r22, r14 + 156c: 80 81 ld r24, Z + 156e: 90 e0 ldi r25, 0x00 ; 0 + 1570: 0e 94 f7 0a call 0x15ee ; 0x15ee + 1574: a1 10 cpse r10, r1 + 1576: f5 cf rjmp .-22 ; 0x1562 + 1578: 06 c0 rjmp .+12 ; 0x1586 + 157a: b7 01 movw r22, r14 + 157c: 80 e2 ldi r24, 0x20 ; 32 + 157e: 90 e0 ldi r25, 0x00 ; 0 + 1580: 0e 94 f7 0a call 0x15ee ; 0x15ee + 1584: 3a 94 dec r3 + 1586: 31 10 cpse r3, r1 + 1588: f8 cf rjmp .-16 ; 0x157a + 158a: 41 ce rjmp .-894 ; 0x120e + 158c: f7 01 movw r30, r14 + 158e: 26 81 ldd r18, Z+6 ; 0x06 + 1590: 37 81 ldd r19, Z+7 ; 0x07 + 1592: 02 c0 rjmp .+4 ; 0x1598 + 1594: 2f ef ldi r18, 0xFF ; 255 + 1596: 3f ef ldi r19, 0xFF ; 255 + 1598: c9 01 movw r24, r18 + 159a: 2c 96 adiw r28, 0x0c ; 12 + 159c: e2 e1 ldi r30, 0x12 ; 18 + 159e: 0c 94 de 0b jmp 0x17bc ; 0x17bc <__epilogue_restores__> + +000015a2 : + 15a2: fc 01 movw r30, r24 + 15a4: 05 90 lpm r0, Z+ + 15a6: 61 50 subi r22, 0x01 ; 1 + 15a8: 70 40 sbci r23, 0x00 ; 0 + 15aa: 01 10 cpse r0, r1 + 15ac: d8 f7 brcc .-10 ; 0x15a4 + 15ae: 80 95 com r24 + 15b0: 90 95 com r25 + 15b2: 8e 0f add r24, r30 + 15b4: 9f 1f adc r25, r31 + 15b6: 08 95 ret + +000015b8 : + 15b8: fc 01 movw r30, r24 + 15ba: 61 50 subi r22, 0x01 ; 1 + 15bc: 70 40 sbci r23, 0x00 ; 0 + 15be: 01 90 ld r0, Z+ + 15c0: 01 10 cpse r0, r1 + 15c2: d8 f7 brcc .-10 ; 0x15ba + 15c4: 80 95 com r24 + 15c6: 90 95 com r25 + 15c8: 8e 0f add r24, r30 + 15ca: 9f 1f adc r25, r31 + 15cc: 08 95 ret + +000015ce : + 15ce: dc 01 movw r26, r24 + 15d0: fc 01 movw r30, r24 + 15d2: 67 2f mov r22, r23 + 15d4: 71 91 ld r23, Z+ + 15d6: 77 23 and r23, r23 + 15d8: e1 f7 brne .-8 ; 0x15d2 + 15da: 32 97 sbiw r30, 0x02 ; 2 + 15dc: 04 c0 rjmp .+8 ; 0x15e6 + 15de: 7c 91 ld r23, X + 15e0: 6d 93 st X+, r22 + 15e2: 70 83 st Z, r23 + 15e4: 62 91 ld r22, -Z + 15e6: ae 17 cp r26, r30 + 15e8: bf 07 cpc r27, r31 + 15ea: c8 f3 brcs .-14 ; 0x15de + 15ec: 08 95 ret + +000015ee : + 15ee: 0f 93 push r16 + 15f0: 1f 93 push r17 + 15f2: cf 93 push r28 + 15f4: df 93 push r29 + 15f6: 8c 01 movw r16, r24 + 15f8: eb 01 movw r28, r22 + 15fa: 8b 81 ldd r24, Y+3 ; 0x03 + 15fc: 81 fd sbrc r24, 1 + 15fe: 03 c0 rjmp .+6 ; 0x1606 + 1600: 0f ef ldi r16, 0xFF ; 255 + 1602: 1f ef ldi r17, 0xFF ; 255 + 1604: 1a c0 rjmp .+52 ; 0x163a + 1606: 82 ff sbrs r24, 2 + 1608: 0d c0 rjmp .+26 ; 0x1624 + 160a: 2e 81 ldd r18, Y+6 ; 0x06 + 160c: 3f 81 ldd r19, Y+7 ; 0x07 + 160e: 8c 81 ldd r24, Y+4 ; 0x04 + 1610: 9d 81 ldd r25, Y+5 ; 0x05 + 1612: 28 17 cp r18, r24 + 1614: 39 07 cpc r19, r25 + 1616: 64 f4 brge .+24 ; 0x1630 + 1618: e8 81 ld r30, Y + 161a: f9 81 ldd r31, Y+1 ; 0x01 + 161c: 01 93 st Z+, r16 + 161e: f9 83 std Y+1, r31 ; 0x01 + 1620: e8 83 st Y, r30 + 1622: 06 c0 rjmp .+12 ; 0x1630 + 1624: e8 85 ldd r30, Y+8 ; 0x08 + 1626: f9 85 ldd r31, Y+9 ; 0x09 + 1628: 80 2f mov r24, r16 + 162a: 09 95 icall + 162c: 89 2b or r24, r25 + 162e: 41 f7 brne .-48 ; 0x1600 + 1630: 8e 81 ldd r24, Y+6 ; 0x06 + 1632: 9f 81 ldd r25, Y+7 ; 0x07 + 1634: 01 96 adiw r24, 0x01 ; 1 + 1636: 9f 83 std Y+7, r25 ; 0x07 + 1638: 8e 83 std Y+6, r24 ; 0x06 + 163a: c8 01 movw r24, r16 + 163c: df 91 pop r29 + 163e: cf 91 pop r28 + 1640: 1f 91 pop r17 + 1642: 0f 91 pop r16 + 1644: 08 95 ret + +00001646 <__ultoa_invert>: + 1646: fa 01 movw r30, r20 + 1648: aa 27 eor r26, r26 + 164a: 28 30 cpi r18, 0x08 ; 8 + 164c: 61 f1 breq .+88 ; 0x16a6 <__ultoa_invert+0x60> + 164e: 20 31 cpi r18, 0x10 ; 16 + 1650: 91 f1 breq .+100 ; 0x16b6 <__ultoa_invert+0x70> + 1652: e8 94 clt + 1654: 6f 93 push r22 + 1656: 6e 7f andi r22, 0xFE ; 254 + 1658: 6e 5f subi r22, 0xFE ; 254 + 165a: 7f 4f sbci r23, 0xFF ; 255 + 165c: 8f 4f sbci r24, 0xFF ; 255 + 165e: 9f 4f sbci r25, 0xFF ; 255 + 1660: af 4f sbci r26, 0xFF ; 255 + 1662: b1 e0 ldi r27, 0x01 ; 1 + 1664: 40 d0 rcall .+128 ; 0x16e6 <__ultoa_invert+0xa0> + 1666: b4 e0 ldi r27, 0x04 ; 4 + 1668: 3e d0 rcall .+124 ; 0x16e6 <__ultoa_invert+0xa0> + 166a: 67 0f add r22, r23 + 166c: 78 1f adc r23, r24 + 166e: 89 1f adc r24, r25 + 1670: 9a 1f adc r25, r26 + 1672: a1 1d adc r26, r1 + 1674: 68 0f add r22, r24 + 1676: 79 1f adc r23, r25 + 1678: 8a 1f adc r24, r26 + 167a: 91 1d adc r25, r1 + 167c: a1 1d adc r26, r1 + 167e: 6a 0f add r22, r26 + 1680: 71 1d adc r23, r1 + 1682: 81 1d adc r24, r1 + 1684: 91 1d adc r25, r1 + 1686: a1 1d adc r26, r1 + 1688: 22 d0 rcall .+68 ; 0x16ce <__ultoa_invert+0x88> + 168a: 09 f4 brne .+2 ; 0x168e <__ultoa_invert+0x48> + 168c: 68 94 set + 168e: 3f 91 pop r19 + 1690: 06 2e mov r0, r22 + 1692: 00 0c add r0, r0 + 1694: 30 19 sub r19, r0 + 1696: 00 0c add r0, r0 + 1698: 00 0c add r0, r0 + 169a: 30 19 sub r19, r0 + 169c: 30 5d subi r19, 0xD0 ; 208 + 169e: 31 93 st Z+, r19 + 16a0: ce f6 brtc .-78 ; 0x1654 <__ultoa_invert+0xe> + 16a2: cf 01 movw r24, r30 + 16a4: 08 95 ret + 16a6: 46 2f mov r20, r22 + 16a8: 47 70 andi r20, 0x07 ; 7 + 16aa: 40 5d subi r20, 0xD0 ; 208 + 16ac: 41 93 st Z+, r20 + 16ae: b3 e0 ldi r27, 0x03 ; 3 + 16b0: 0f d0 rcall .+30 ; 0x16d0 <__ultoa_invert+0x8a> + 16b2: c9 f7 brne .-14 ; 0x16a6 <__ultoa_invert+0x60> + 16b4: f6 cf rjmp .-20 ; 0x16a2 <__ultoa_invert+0x5c> + 16b6: 46 2f mov r20, r22 + 16b8: 4f 70 andi r20, 0x0F ; 15 + 16ba: 40 5d subi r20, 0xD0 ; 208 + 16bc: 4a 33 cpi r20, 0x3A ; 58 + 16be: 18 f0 brcs .+6 ; 0x16c6 <__ultoa_invert+0x80> + 16c0: 49 5d subi r20, 0xD9 ; 217 + 16c2: 31 fd sbrc r19, 1 + 16c4: 40 52 subi r20, 0x20 ; 32 + 16c6: 41 93 st Z+, r20 + 16c8: 02 d0 rcall .+4 ; 0x16ce <__ultoa_invert+0x88> + 16ca: a9 f7 brne .-22 ; 0x16b6 <__ultoa_invert+0x70> + 16cc: ea cf rjmp .-44 ; 0x16a2 <__ultoa_invert+0x5c> + 16ce: b4 e0 ldi r27, 0x04 ; 4 + 16d0: a6 95 lsr r26 + 16d2: 97 95 ror r25 + 16d4: 87 95 ror r24 + 16d6: 77 95 ror r23 + 16d8: 67 95 ror r22 + 16da: ba 95 dec r27 + 16dc: c9 f7 brne .-14 ; 0x16d0 <__ultoa_invert+0x8a> + 16de: 00 97 sbiw r24, 0x00 ; 0 + 16e0: 61 05 cpc r22, r1 + 16e2: 71 05 cpc r23, r1 + 16e4: 08 95 ret + 16e6: 9b 01 movw r18, r22 + 16e8: ac 01 movw r20, r24 + 16ea: 0a 2e mov r0, r26 + 16ec: 06 94 lsr r0 + 16ee: 57 95 ror r21 + 16f0: 47 95 ror r20 + 16f2: 37 95 ror r19 + 16f4: 27 95 ror r18 + 16f6: ba 95 dec r27 + 16f8: c9 f7 brne .-14 ; 0x16ec <__ultoa_invert+0xa6> + 16fa: 62 0f add r22, r18 + 16fc: 73 1f adc r23, r19 + 16fe: 84 1f adc r24, r20 + 1700: 95 1f adc r25, r21 + 1702: a0 1d adc r26, r0 + 1704: 08 95 ret + +00001706 <__mulqi3>: + 1706: 00 24 eor r0, r0 + +00001708 <__mulqi3_loop>: + 1708: 80 fd sbrc r24, 0 + 170a: 06 0e add r0, r22 + 170c: 66 0f add r22, r22 + 170e: 11 f0 breq .+4 ; 0x1714 <__mulqi3_exit> + 1710: 86 95 lsr r24 + 1712: d1 f7 brne .-12 ; 0x1708 <__mulqi3_loop> + +00001714 <__mulqi3_exit>: + 1714: 80 2d mov r24, r0 + 1716: 08 95 ret + +00001718 <__udivmodhi4>: + 1718: aa 1b sub r26, r26 + 171a: bb 1b sub r27, r27 + 171c: 51 e1 ldi r21, 0x11 ; 17 + 171e: 07 c0 rjmp .+14 ; 0x172e <__udivmodhi4_ep> + +00001720 <__udivmodhi4_loop>: + 1720: aa 1f adc r26, r26 + 1722: bb 1f adc r27, r27 + 1724: a6 17 cp r26, r22 + 1726: b7 07 cpc r27, r23 + 1728: 10 f0 brcs .+4 ; 0x172e <__udivmodhi4_ep> + 172a: a6 1b sub r26, r22 + 172c: b7 0b sbc r27, r23 + +0000172e <__udivmodhi4_ep>: + 172e: 88 1f adc r24, r24 + 1730: 99 1f adc r25, r25 + 1732: 5a 95 dec r21 + 1734: a9 f7 brne .-22 ; 0x1720 <__udivmodhi4_loop> + 1736: 80 95 com r24 + 1738: 90 95 com r25 + 173a: bc 01 movw r22, r24 + 173c: cd 01 movw r24, r26 + 173e: 08 95 ret + +00001740 <__udivmodsi4>: + 1740: a1 e2 ldi r26, 0x21 ; 33 + 1742: 1a 2e mov r1, r26 + 1744: aa 1b sub r26, r26 + 1746: bb 1b sub r27, r27 + 1748: fd 01 movw r30, r26 + 174a: 0d c0 rjmp .+26 ; 0x1766 <__udivmodsi4_ep> + +0000174c <__udivmodsi4_loop>: + 174c: aa 1f adc r26, r26 + 174e: bb 1f adc r27, r27 + 1750: ee 1f adc r30, r30 + 1752: ff 1f adc r31, r31 + 1754: a2 17 cp r26, r18 + 1756: b3 07 cpc r27, r19 + 1758: e4 07 cpc r30, r20 + 175a: f5 07 cpc r31, r21 + 175c: 20 f0 brcs .+8 ; 0x1766 <__udivmodsi4_ep> + 175e: a2 1b sub r26, r18 + 1760: b3 0b sbc r27, r19 + 1762: e4 0b sbc r30, r20 + 1764: f5 0b sbc r31, r21 + +00001766 <__udivmodsi4_ep>: + 1766: 66 1f adc r22, r22 + 1768: 77 1f adc r23, r23 + 176a: 88 1f adc r24, r24 + 176c: 99 1f adc r25, r25 + 176e: 1a 94 dec r1 + 1770: 69 f7 brne .-38 ; 0x174c <__udivmodsi4_loop> + 1772: 60 95 com r22 + 1774: 70 95 com r23 + 1776: 80 95 com r24 + 1778: 90 95 com r25 + 177a: 9b 01 movw r18, r22 + 177c: ac 01 movw r20, r24 + 177e: bd 01 movw r22, r26 + 1780: cf 01 movw r24, r30 + 1782: 08 95 ret + +00001784 <__prologue_saves__>: + 1784: 2f 92 push r2 + 1786: 3f 92 push r3 + 1788: 4f 92 push r4 + 178a: 5f 92 push r5 + 178c: 6f 92 push r6 + 178e: 7f 92 push r7 + 1790: 8f 92 push r8 + 1792: 9f 92 push r9 + 1794: af 92 push r10 + 1796: bf 92 push r11 + 1798: cf 92 push r12 + 179a: df 92 push r13 + 179c: ef 92 push r14 + 179e: ff 92 push r15 + 17a0: 0f 93 push r16 + 17a2: 1f 93 push r17 + 17a4: cf 93 push r28 + 17a6: df 93 push r29 + 17a8: cd b7 in r28, 0x3d ; 61 + 17aa: de b7 in r29, 0x3e ; 62 + 17ac: ca 1b sub r28, r26 + 17ae: db 0b sbc r29, r27 + 17b0: 0f b6 in r0, 0x3f ; 63 + 17b2: f8 94 cli + 17b4: de bf out 0x3e, r29 ; 62 + 17b6: 0f be out 0x3f, r0 ; 63 + 17b8: cd bf out 0x3d, r28 ; 61 + 17ba: 09 94 ijmp + +000017bc <__epilogue_restores__>: + 17bc: 2a 88 ldd r2, Y+18 ; 0x12 + 17be: 39 88 ldd r3, Y+17 ; 0x11 + 17c0: 48 88 ldd r4, Y+16 ; 0x10 + 17c2: 5f 84 ldd r5, Y+15 ; 0x0f + 17c4: 6e 84 ldd r6, Y+14 ; 0x0e + 17c6: 7d 84 ldd r7, Y+13 ; 0x0d + 17c8: 8c 84 ldd r8, Y+12 ; 0x0c + 17ca: 9b 84 ldd r9, Y+11 ; 0x0b + 17cc: aa 84 ldd r10, Y+10 ; 0x0a + 17ce: b9 84 ldd r11, Y+9 ; 0x09 + 17d0: c8 84 ldd r12, Y+8 ; 0x08 + 17d2: df 80 ldd r13, Y+7 ; 0x07 + 17d4: ee 80 ldd r14, Y+6 ; 0x06 + 17d6: fd 80 ldd r15, Y+5 ; 0x05 + 17d8: 0c 81 ldd r16, Y+4 ; 0x04 + 17da: 1b 81 ldd r17, Y+3 ; 0x03 + 17dc: aa 81 ldd r26, Y+2 ; 0x02 + 17de: b9 81 ldd r27, Y+1 ; 0x01 + 17e0: ce 0f add r28, r30 + 17e2: d1 1d adc r29, r1 + 17e4: 0f b6 in r0, 0x3f ; 63 + 17e6: f8 94 cli + 17e8: de bf out 0x3e, r29 ; 62 + 17ea: 0f be out 0x3f, r0 ; 63 + 17ec: cd bf out 0x3d, r28 ; 61 + 17ee: ed 01 movw r28, r26 + 17f0: 08 95 ret + +000017f2 <_exit>: + 17f2: f8 94 cli + +000017f4 <__stop_program>: + 17f4: ff cf rjmp .-2 ; 0x17f4 <__stop_program> diff --git a/Test/Debug/Test.map b/Test/Debug/Test.map index 4ed05bc..c40d222 100644 --- a/Test/Debug/Test.map +++ b/Test/Debug/Test.map @@ -2,12 +2,80 @@ Archive member included because of file (symbol) c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o (exit) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_copy_data.o) + rs232.o (__do_copy_data) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_clear_bss.o) + Test.o (__do_clear_bss) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + usb_serial.o (malloc) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strcat.o) + Test.o (strcat) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(itoa.o) + Test.o (itoa) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(ltoa.o) + Test.o (ltoa) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + Test.o (fprintf) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fwrite.o) + Test.o (fwrite) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(iob.o) + rs232.o (__iob) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(sprintf.o) + Test.o (sprintf) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) (vfprintf) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strnlen_P.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) (strnlen_P) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strnlen.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) (strnlen) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strrev.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(itoa.o) (strrev) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) (fputc) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(ultoa_invert.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) (__ultoa_invert) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulqi3.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) (__mulqi3) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_udivmodhi4.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(itoa.o) (__udivmodhi4) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_udivmodsi4.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(ltoa.o) (__udivmodsi4) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_prologue.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) (__prologue_saves__) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_epilogue.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) (__epilogue_restores__) + +Allocating common symbols +Common symbol size file + +cdc_rtsdtr 0x1 Test.o +__brkval 0x2 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) +cdc_linecoding 0x7 usb_serial.o +__flp 0x2 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) +__iob 0x6 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(iob.o) Discarded input sections .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o + .text 0x00000000 0x0 led.o + .bss 0x00000000 0x0 led.o + .text 0x00000000 0x0 rs232.o + .bss 0x00000000 0x0 rs232.o .text 0x00000000 0x0 Test.o .bss 0x00000000 0x0 Test.o + .text 0x00000000 0x0 usb_serial.o + .text.usb_status + 0x00000000 0x1c usb_serial.o + .text.usb_configuration + 0x00000000 0x6 usb_serial.o + .text.usb_interface + 0x00000000 0x6 usb_serial.o + .text.usb_freebuffer + 0x00000000 0x1e usb_serial.o + .text.usb_rxavail + 0x00000000 0xa usb_serial.o + .text.usb_txdata_control + 0x00000000 0x46 usb_serial.o .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) .text.libgcc.mul @@ -21,6 +89,115 @@ Discarded input sections 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) .text.libgcc.fmul 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_copy_data.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_copy_data.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_copy_data.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_copy_data.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_copy_data.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_copy_data.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_copy_data.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_copy_data.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_clear_bss.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_clear_bss.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_clear_bss.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_clear_bss.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_clear_bss.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_clear_bss.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_clear_bss.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_clear_bss.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strcat.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strcat.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(itoa.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(itoa.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(ltoa.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(ltoa.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fwrite.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fwrite.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(iob.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(iob.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(sprintf.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(sprintf.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strnlen_P.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strnlen_P.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strnlen.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strnlen.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strrev.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strrev.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(ultoa_invert.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(ultoa_invert.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulqi3.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulqi3.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulqi3.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulqi3.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulqi3.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulqi3.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulqi3.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_udivmodhi4.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_udivmodhi4.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_udivmodhi4.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_udivmodhi4.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_udivmodhi4.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_udivmodhi4.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_udivmodhi4.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_udivmodsi4.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_udivmodsi4.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_udivmodsi4.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_udivmodsi4.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_udivmodsi4.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_udivmodsi4.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_udivmodsi4.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_prologue.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_prologue.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_prologue.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_prologue.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_prologue.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_prologue.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_prologue.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_epilogue.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_epilogue.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_epilogue.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_epilogue.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_epilogue.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_epilogue.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_epilogue.o) Memory Configuration @@ -38,7 +215,10 @@ Linker script and memory map Address of section .data set to 0x800100 LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o +LOAD led.o +LOAD rs232.o LOAD Test.o +LOAD usb_serial.o START GROUP LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libm.a END GROUP @@ -136,7 +316,7 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .rela.plt *(.rela.plt) -.text 0x00000000 0xa0 +.text 0x00000000 0x17f6 *(.vectors) .vectors 0x00000000 0x74 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o 0x00000000 __vector_default @@ -144,36 +324,41 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 *(.vectors) *(.progmem.gcc*) *(.progmem*) - 0x00000074 . = ALIGN (0x2) - 0x00000074 __trampolines_start = . + .progmem.data 0x00000074 0x5e usb_serial.o + 0x000000d2 . = ALIGN (0x2) + 0x000000d2 __trampolines_start = . *(.trampolines) - .trampolines 0x00000074 0x0 linker stubs + .trampolines 0x000000d2 0x0 linker stubs *(.trampolines*) - 0x00000074 __trampolines_end = . + 0x000000d2 __trampolines_end = . *(.jumptables) *(.jumptables*) *(.lowtext) *(.lowtext*) - 0x00000074 __ctors_start = . + 0x000000d2 __ctors_start = . *(.ctors) - 0x00000074 __ctors_end = . - 0x00000074 __dtors_start = . + 0x000000d2 __ctors_end = . + 0x000000d2 __dtors_start = . *(.dtors) - 0x00000074 __dtors_end = . + 0x000000d2 __dtors_end = . SORT(*)(.ctors) SORT(*)(.dtors) *(.init0) - .init0 0x00000074 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o - 0x00000074 __init + .init0 0x000000d2 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o + 0x000000d2 __init *(.init0) *(.init1) *(.init1) *(.init2) - .init2 0x00000074 0xc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o + .init2 0x000000d2 0xc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o *(.init2) *(.init3) *(.init3) *(.init4) + .init4 0x000000de 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_copy_data.o) + 0x000000de __do_copy_data + .init4 0x000000f4 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_clear_bss.o) + 0x000000f4 __do_clear_bss *(.init4) *(.init5) *(.init5) @@ -184,48 +369,152 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 *(.init8) *(.init8) *(.init9) - .init9 0x00000080 0x8 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o + .init9 0x00000104 0x8 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o *(.init9) *(.text) - .text 0x00000088 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o - 0x00000088 __vector_22 - 0x00000088 __vector_28 - 0x00000088 __vector_1 - 0x00000088 __vector_24 - 0x00000088 __vector_12 - 0x00000088 __bad_interrupt - 0x00000088 __vector_6 - 0x00000088 __vector_3 - 0x00000088 __vector_23 - 0x00000088 __vector_25 - 0x00000088 __vector_11 - 0x00000088 __vector_13 - 0x00000088 __vector_17 - 0x00000088 __vector_19 - 0x00000088 __vector_7 - 0x00000088 __vector_27 - 0x00000088 __vector_5 - 0x00000088 __vector_4 - 0x00000088 __vector_9 - 0x00000088 __vector_2 - 0x00000088 __vector_21 - 0x00000088 __vector_15 - 0x00000088 __vector_8 - 0x00000088 __vector_26 - 0x00000088 __vector_14 - 0x00000088 __vector_10 - 0x00000088 __vector_16 - 0x00000088 __vector_18 - 0x00000088 __vector_20 - 0x0000008c . = ALIGN (0x2) + .text 0x0000010c 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o + 0x0000010c __vector_22 + 0x0000010c __vector_28 + 0x0000010c __vector_1 + 0x0000010c __vector_24 + 0x0000010c __bad_interrupt + 0x0000010c __vector_6 + 0x0000010c __vector_3 + 0x0000010c __vector_23 + 0x0000010c __vector_25 + 0x0000010c __vector_13 + 0x0000010c __vector_17 + 0x0000010c __vector_19 + 0x0000010c __vector_7 + 0x0000010c __vector_27 + 0x0000010c __vector_5 + 0x0000010c __vector_4 + 0x0000010c __vector_9 + 0x0000010c __vector_2 + 0x0000010c __vector_21 + 0x0000010c __vector_15 + 0x0000010c __vector_8 + 0x0000010c __vector_26 + 0x0000010c __vector_14 + 0x0000010c __vector_10 + 0x0000010c __vector_16 + 0x0000010c __vector_18 + 0x0000010c __vector_20 + 0x00000110 . = ALIGN (0x2) *(.text.*) - .text.main 0x0000008c 0x10 Test.o - 0x0000008c main - 0x0000009c . = ALIGN (0x2) + .text.ledg 0x00000110 0x14 led.o + 0x00000110 ledg + .text.init_led + 0x00000124 0x8 led.o + 0x00000124 init_led + .text.uart_putchar + 0x0000012c 0x24 rs232.o + 0x0000012c uart_putchar + .text.init_rs232 + 0x00000150 0x24 rs232.o + 0x00000150 init_rs232 + .text.init 0x00000174 0x3c Test.o + 0x00000174 init + .text.cdc_notify_getlinecoding + 0x000001b0 0x2 Test.o + 0x000001b0 cdc_notify_getlinecoding + .text.cdc_notify_setlinecoding + 0x000001b2 0x2 Test.o + 0x000001b2 cdc_notify_setlinecoding + .text.cdc_notify_setcontrollinestate + 0x000001b4 0x2 Test.o + 0x000001b4 cdc_notify_setcontrollinestate + .text.usb_ep 0x000001b6 0x2d2 Test.o + 0x000001b6 usb_ep + .text.main 0x00000488 0xb6 Test.o + 0x00000488 main + .text.usb_init + 0x0000053e 0x2e usb_serial.o + 0x0000053e usb_init + .text.usb_endpoints + 0x0000056c 0xf6 usb_serial.o + 0x0000056c usb_endpoints + .text.usb_wait_in + 0x00000662 0xc usb_serial.o + 0x00000662 usb_wait_in + .text.usb_wait_receive_out + 0x0000066e 0xc usb_serial.o + 0x0000066e usb_wait_receive_out + .text.usb_desc_out + 0x0000067a 0xbe usb_serial.o + 0x0000067a usb_desc_out + .text.usb_rxdata + 0x00000738 0x2c usb_serial.o + 0x00000738 usb_rxdata + .text.usb_txdata + 0x00000764 0x5e usb_serial.o + 0x00000764 usb_txdata + .text.__vector_11 + 0x000007c2 0x50 usb_serial.o + 0x000007c2 __vector_11 + .text.__vector_12 + 0x00000812 0x5da usb_serial.o + 0x00000812 __vector_12 + .text.avr-libc + 0x00000dec 0x270 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + 0x00000dec malloc + 0x00000f22 free + .text.avr-libc + 0x0000105c 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strcat.o) + 0x0000105c strcat + .text.avr-libc + 0x00001072 0x42 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(itoa.o) + 0x00001072 itoa + .text.avr-libc + 0x000010b4 0x68 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(ltoa.o) + 0x000010b4 ltoa + .text.avr-libc + 0x0000111c 0x24 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + 0x0000111c fprintf + .text.avr-libc + 0x00001140 0x62 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fwrite.o) + 0x00001140 fwrite + .text.avr-libc + 0x000011a2 0x44 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(sprintf.o) + 0x000011a2 sprintf + .text.avr-libc + 0x000011e6 0x3bc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + 0x000011e6 vfprintf + .text.avr-libc + 0x000015a2 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strnlen_P.o) + 0x000015a2 strnlen_P + .text.avr-libc + 0x000015b8 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strnlen.o) + 0x000015b8 strnlen + .text.avr-libc + 0x000015ce 0x20 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strrev.o) + 0x000015ce strrev + .text.avr-libc + 0x000015ee 0x58 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) + 0x000015ee fputc + .text.avr-libc + 0x00001646 0xc0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(ultoa_invert.o) + 0x00001646 __ultoa_invert + .text.libgcc.mul + 0x00001706 0x12 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulqi3.o) + 0x00001706 __mulqi3 + .text.libgcc.div + 0x00001718 0x28 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_udivmodhi4.o) + 0x00001718 __udivmodhi4 + .text.libgcc.div + 0x00001740 0x44 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_udivmodsi4.o) + 0x00001740 __udivmodsi4 + .text.libgcc.prologue + 0x00001784 0x38 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_prologue.o) + 0x00001784 __prologue_saves__ + .text.libgcc.prologue + 0x000017bc 0x36 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_epilogue.o) + 0x000017bc __epilogue_restores__ + 0x000017f2 . = ALIGN (0x2) *(.fini9) - .fini9 0x0000009c 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) - 0x0000009c _exit - 0x0000009c exit + .fini9 0x000017f2 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) + 0x000017f2 _exit + 0x000017f2 exit *(.fini9) *(.fini8) *(.fini8) @@ -244,39 +533,83 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 *(.fini1) *(.fini1) *(.fini0) - .fini0 0x0000009c 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) + .fini0 0x000017f2 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) *(.fini0) - 0x000000a0 _etext = . + 0x000017f6 _etext = . -.data 0x00800100 0x0 load address 0x000000a0 +.data 0x00800100 0xf2 load address 0x000017f6 0x00800100 PROVIDE (__data_start, .) *(.data) .data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o - .data 0x00800100 0x0 Test.o - .data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) + .data 0x00800100 0x0 led.o + .data 0x00800100 0xe rs232.o + .data 0x0080010e 0xe Test.o + .data 0x0080011c 0xa usb_serial.o + 0x0080011c InterfaceProtocols + 0x0080011f InterfaceSubClasses + 0x00800122 InterfaceClasses + .data 0x00800126 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) + .data 0x00800126 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_copy_data.o) + .data 0x00800126 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_clear_bss.o) + .data 0x00800126 0x6 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + 0x00800126 __malloc_heap_end + 0x00800128 __malloc_heap_start + 0x0080012a __malloc_margin + .data 0x0080012c 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strcat.o) + .data 0x0080012c 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(itoa.o) + .data 0x0080012c 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(ltoa.o) + .data 0x0080012c 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + .data 0x0080012c 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fwrite.o) + .data 0x0080012c 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(iob.o) + .data 0x0080012c 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(sprintf.o) + .data 0x0080012c 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + .data 0x0080012c 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strnlen_P.o) + .data 0x0080012c 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strnlen.o) + .data 0x0080012c 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strrev.o) + .data 0x0080012c 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) + .data 0x0080012c 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(ultoa_invert.o) + .data 0x0080012c 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulqi3.o) + .data 0x0080012c 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_udivmodhi4.o) + .data 0x0080012c 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_udivmodsi4.o) + .data 0x0080012c 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_prologue.o) + .data 0x0080012c 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_epilogue.o) *(.data*) *(.rodata) + .rodata 0x0080012c 0x43 usb_serial.o *(.rodata*) + .rodata.str1.1 + 0x0080016f 0x82 Test.o *(.gnu.linkonce.d*) - 0x00800100 . = ALIGN (0x2) - 0x00800100 _edata = . - 0x00800100 PROVIDE (__data_end, .) + 0x008001f2 . = ALIGN (0x2) + *fill* 0x008001f1 0x1 + 0x008001f2 _edata = . + 0x008001f2 PROVIDE (__data_end, .) -.bss 0x00800100 0x0 - 0x00800100 PROVIDE (__bss_start, .) +.bss 0x008001f2 0x14 + 0x008001f2 PROVIDE (__bss_start, .) *(.bss) + .bss 0x008001f2 0x2 usb_serial.o *(.bss*) *(COMMON) - 0x00800100 PROVIDE (__bss_end, .) - 0x000000a0 __data_load_start = LOADADDR (.data) - 0x000000a0 __data_load_end = (__data_load_start + SIZEOF (.data)) + COMMON 0x008001f4 0x1 Test.o + 0x008001f4 cdc_rtsdtr + COMMON 0x008001f5 0x7 usb_serial.o + 0x008001f5 cdc_linecoding + COMMON 0x008001fc 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + 0x008001fc __brkval + 0x008001fe __flp + COMMON 0x00800200 0x6 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(iob.o) + 0x00800200 __iob + 0x00800206 PROVIDE (__bss_end, .) + 0x000017f6 __data_load_start = LOADADDR (.data) + 0x000018e8 __data_load_end = (__data_load_start + SIZEOF (.data)) -.noinit 0x00800100 0x0 - 0x00800100 PROVIDE (__noinit_start, .) +.noinit 0x00800206 0x0 + 0x00800206 PROVIDE (__noinit_start, .) *(.noinit*) - 0x00800100 PROVIDE (__noinit_end, .) - 0x00800100 _end = . - 0x00800100 PROVIDE (__heap_start, .) + 0x00800206 PROVIDE (__noinit_end, .) + 0x00800206 _end = . + 0x00800206 PROVIDE (__heap_start, .) .eeprom 0x00810000 0x0 *(.eeprom*) @@ -297,13 +630,27 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .user_signatures *(.user_signatures*) -.stab 0x00000000 0x6cc +.stab 0x00000000 0x1254 *(.stab) .stab 0x00000000 0x6cc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o + .stab 0x000006cc 0x9c c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strcat.o) + 0xa8 (size before relaxing) + .stab 0x00000768 0x1b0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(itoa.o) + 0x1bc (size before relaxing) + .stab 0x00000918 0x294 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(ltoa.o) + 0x2a0 (size before relaxing) + .stab 0x00000bac 0x9c c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strnlen_P.o) + 0xa8 (size before relaxing) + .stab 0x00000c48 0x9c c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strnlen.o) + 0xa8 (size before relaxing) + .stab 0x00000ce4 0xd8 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strrev.o) + 0xe4 (size before relaxing) + .stab 0x00000dbc 0x498 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(ultoa_invert.o) + 0x4a4 (size before relaxing) -.stabstr 0x00000000 0x82 +.stabstr 0x00000000 0x32e *(.stabstr) - .stabstr 0x00000000 0x82 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o + .stabstr 0x00000000 0x32e c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o .stab.excl *(.stab.excl) @@ -319,8 +666,18 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .comment 0x00000000 0x2f *(.comment) - .comment 0x00000000 0x2f Test.o + .comment 0x00000000 0x2f led.o 0x30 (size before relaxing) + .comment 0x00000000 0x30 rs232.o + .comment 0x00000000 0x30 Test.o + .comment 0x00000000 0x30 usb_serial.o + .comment 0x00000000 0x30 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + .comment 0x00000000 0x30 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + .comment 0x00000000 0x30 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fwrite.o) + .comment 0x00000000 0x30 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(iob.o) + .comment 0x00000000 0x30 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(sprintf.o) + .comment 0x00000000 0x30 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + .comment 0x00000000 0x30 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) .debug *(.debug) @@ -334,38 +691,127 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .debug_sfnames *(.debug_sfnames) -.debug_aranges 0x00000000 0x20 +.debug_aranges 0x00000000 0x208 *(.debug_aranges) .debug_aranges - 0x00000000 0x20 Test.o + 0x00000000 0x28 led.o + .debug_aranges + 0x00000028 0x28 rs232.o + .debug_aranges + 0x00000050 0x48 Test.o + .debug_aranges + 0x00000098 0x90 usb_serial.o + .debug_aranges + 0x00000128 0x28 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + .debug_aranges + 0x00000150 0x20 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + .debug_aranges + 0x00000170 0x20 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fwrite.o) + .debug_aranges + 0x00000190 0x18 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(iob.o) + .debug_aranges + 0x000001a8 0x20 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(sprintf.o) + .debug_aranges + 0x000001c8 0x20 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + .debug_aranges + 0x000001e8 0x20 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) .debug_pubnames *(.debug_pubnames) -.debug_info 0x00000000 0x87 +.debug_info 0x00000000 0x27cc *(.debug_info) - .debug_info 0x00000000 0x87 Test.o + .debug_info 0x00000000 0xb7 led.o + .debug_info 0x000000b7 0x1d5 rs232.o + .debug_info 0x0000028c 0x8b3 Test.o + .debug_info 0x00000b3f 0xc67 usb_serial.o + .debug_info 0x000017a6 0x23d c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + .debug_info 0x000019e3 0x1fc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + .debug_info 0x00001bdf 0x1de c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fwrite.o) + .debug_info 0x00001dbd 0x14e c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(iob.o) + .debug_info 0x00001f0b 0x204 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(sprintf.o) + .debug_info 0x0000210f 0x549 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + .debug_info 0x00002658 0x174 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) *(.gnu.linkonce.wi.*) -.debug_abbrev 0x00000000 0x53 +.debug_abbrev 0x00000000 0xfcb *(.debug_abbrev) - .debug_abbrev 0x00000000 0x53 Test.o + .debug_abbrev 0x00000000 0x85 led.o + .debug_abbrev 0x00000085 0x13b rs232.o + .debug_abbrev 0x000001c0 0x30d Test.o + .debug_abbrev 0x000004cd 0x2ff usb_serial.o + .debug_abbrev 0x000007cc 0xf9 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + .debug_abbrev 0x000008c5 0x139 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + .debug_abbrev 0x000009fe 0x11b c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fwrite.o) + .debug_abbrev 0x00000b19 0xc1 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(iob.o) + .debug_abbrev 0x00000bda 0x12a c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(sprintf.o) + .debug_abbrev 0x00000d04 0x1d6 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + .debug_abbrev 0x00000eda 0xf1 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) -.debug_line 0x00000000 0xd7 +.debug_line 0x00000000 0x13d8 *(.debug_line) - .debug_line 0x00000000 0xd7 Test.o + .debug_line 0x00000000 0xe0 led.o + .debug_line 0x000000e0 0x102 rs232.o + .debug_line 0x000001e2 0x288 Test.o + .debug_line 0x0000046a 0x51b usb_serial.o + .debug_line 0x00000985 0x1c8 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + .debug_line 0x00000b4d 0x14a c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + .debug_line 0x00000c97 0x15a c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fwrite.o) + .debug_line 0x00000df1 0xc1 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(iob.o) + .debug_line 0x00000eb2 0x14e c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(sprintf.o) + .debug_line 0x00001000 0x2fe c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + .debug_line 0x000012fe 0xda c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) -.debug_frame 0x00000000 0x24 +.debug_frame 0x00000000 0x4f8 *(.debug_frame) - .debug_frame 0x00000000 0x24 Test.o + .debug_frame 0x00000000 0x34 led.o + .debug_frame 0x00000034 0x3c rs232.o + .debug_frame 0x00000070 0xa0 Test.o + .debug_frame 0x00000110 0x260 usb_serial.o + .debug_frame 0x00000370 0x68 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + .debug_frame 0x000003d8 0x2c c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + .debug_frame 0x00000404 0x40 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fwrite.o) + .debug_frame 0x00000444 0x30 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(sprintf.o) + .debug_frame 0x00000474 0x4c c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + .debug_frame 0x000004c0 0x38 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) -.debug_str 0x00000000 0x7c +.debug_str 0x00000000 0x8f9 *(.debug_str) - .debug_str 0x00000000 0x7c Test.o - 0xb0 (size before relaxing) + .debug_str 0x00000000 0x89 led.o + 0xbd (size before relaxing) + .debug_str 0x00000089 0x54 rs232.o + 0x103 (size before relaxing) + .debug_str 0x000000dd 0x224 Test.o + 0x34c (size before relaxing) + .debug_str 0x00000301 0x2c6 usb_serial.o + 0x548 (size before relaxing) + .debug_str 0x000005c7 0xcd c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + 0x167 (size before relaxing) + .debug_str 0x00000694 0x79 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + 0x12e (size before relaxing) + .debug_str 0x0000070d 0x54 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fwrite.o) + 0x107 (size before relaxing) + .debug_str 0x00000761 0x4b c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(iob.o) + 0xf8 (size before relaxing) + .debug_str 0x000007ac 0x4f c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(sprintf.o) + 0x127 (size before relaxing) + .debug_str 0x000007fb 0xb1 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + 0x198 (size before relaxing) + .debug_str 0x000008ac 0x4d c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) + 0xf8 (size before relaxing) -.debug_loc +.debug_loc 0x00000000 0x202b *(.debug_loc) + .debug_loc 0x00000000 0x26 led.o + .debug_loc 0x00000026 0x72 rs232.o + .debug_loc 0x00000098 0x10f Test.o + .debug_loc 0x000001a7 0x1211 usb_serial.o + .debug_loc 0x000013b8 0x4f8 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + .debug_loc 0x000018b0 0x21 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + .debug_loc 0x000018d1 0x12b c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fwrite.o) + .debug_loc 0x000019fc 0x21 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(sprintf.o) + .debug_loc 0x00001a1d 0x51b c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + .debug_loc 0x00001f38 0xf3 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) .debug_macinfo *(.debug_macinfo) @@ -373,9 +819,18 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .debug_pubtypes *(.debug_pubtypes) -.debug_ranges 0x00000000 0x10 +.debug_ranges 0x00000000 0x150 *(.debug_ranges) - .debug_ranges 0x00000000 0x10 Test.o + .debug_ranges 0x00000000 0x18 led.o + .debug_ranges 0x00000018 0x18 rs232.o + .debug_ranges 0x00000030 0x38 Test.o + .debug_ranges 0x00000068 0x80 usb_serial.o + .debug_ranges 0x000000e8 0x18 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + .debug_ranges 0x00000100 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + .debug_ranges 0x00000110 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fwrite.o) + .debug_ranges 0x00000120 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(sprintf.o) + .debug_ranges 0x00000130 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + .debug_ranges 0x00000140 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) .debug_macro *(.debug_macro) diff --git a/Test/Debug/Test.srec b/Test/Debug/Test.srec index 6f5b023..f026e4f 100644 --- a/Test/Debug/Test.srec +++ b/Test/Debug/Test.srec @@ -1,12 +1,402 @@ S00C0000546573742E7372656378 -S11300000C943A000C9444000C9444000C94440066 -S11300100C9444000C9444000C9444000C9444004C -S11300200C9444000C9444000C9444000C9444003C -S11300300C9444000C9444000C9444000C9444002C -S11300400C9444000C9444000C9444000C9444001C -S11300500C9444000C9444000C9444000C9444000C -S11300600C9444000C9444000C9444000C944400FC -S11300700C94440011241FBECFEFD4E0DEBFCDBFEB -S11300800E9446000C944E000C94000084B1806ED3 -S113009084B990E485B1892785B9FCCFF894FFCF62 +S11300000C9469000C9486000C9486000C94860071 +S11300100C9486000C9486000C9486000C94860044 +S11300200C9486000C9486000C9486000C94E103D6 +S11300300C9409040C9486000C9486000C9486009D +S11300400C9486000C9486000C9486000C94860014 +S11300500C9486000C9486000C9486000C94860004 +S11300600C9486000C9486000C9486000C948600F4 +S11300700C9486001201000202000010010003002B +S113008000010102030104030904140342006C008B +S11300907500620062004600690073006800000099 +S11300A020034800610063006B00650072002D00AE +S11300B04A0065006F0070006100720064007900FE +S11300C000000E03300030003000300030003000FB +S11300D0000011241FBECFEFD4E0DEBFCDBF11E07E +S11300E0A0E0B1E0E6EFF7E102C005900D92A23F77 +S11300F0B107D9F722E0A2EFB1E001C01D92A6300A +S1130100B207E1F70E9444020C94F90B0C9400002E +S113011095B19F7195B995B18295880F807E982B82 +S113012095B9089584B1806E84B90895CF93C82F8A +S11301308A3019F48DE00E949600E8ECF0E090819A +S113014095FFFDCFC093CE0080E090E0CF9108955D +S113015086E08093CA00E9ECF0E0808188608083C7 +S113016087E68093CC0080E091E090930302809333 +S1130170020208950E94920086E090E00E948800A6 +S113018087E090E00E9488000E94A80086E090E04A +S11301900E9488000E949F0278942EE031E049E09A +S11301A050E061E070E08FE691E00E94A0080895BD +S11301B00895089508950F931F93CF93DF93CDB7B8 +S11301C0DEB7C854D1090FB6F894DEBF0FBECDBF59 +S11301D0833009F04DC140E2BE016F5F7F4F0E9442 +S11301E09C0319A28981883669F030F48F3351F069 +S11301F0833609F01BC11AC0893671F0803709F0C3 +S113020015C11EC08AE1E9E7F1E0DE019196019093 +S11302100D928A95E1F713C184E1E3E9F1E0DE018F +S1130220919601900D928A95E1F709C18BE1E7EA75 +S1130230F1E0DE01919601900D928A95E1F7FFC0FD +S11302408E010F5D1F4F80E790E7A0E7B0E089A320 +S11302509AA3ABA3BCA36091F5017091F6018091C0 +S1130260F7019091F8012AE030E0A8010E945A08B1 +S1130270F80101900020E9F731978AE390E0918337 +S113028080834AE050E0BE016F5B7F4F8091FB01A9 +S113029090E00E943908BE016F5B7F4FC8010E9445 +S11302A02E088091FA01823009F128F4882341F064 +S11302B08130E9F510C0833021F18430C1F52CC0C0 +S11302C0FE01B19601900020E9F731978EE490E0A9 +S11302D09183808336C0FE01B19601900020E9F736 +S11302E031978FE490E0918380832BC0FE01B19617 +S11302F001900020E9F7319785E490E091838083B1 +S113030020C0FE01B19601900020E9F731978DE4F9 +S113031090E09183808315C0FE01B1960190002086 +S1130320E9F7319783E590E0918380830AC0FE0169 +S1130330B19601900020E9F731978FE390E0918323 +S113034080838091F901813079F018F0823031F5A1 +S11303501AC0FE01B19601900020E9F7319781E3BC +S113036090E09183808324C0FE01B1960190002027 +S1130370E9F7319781E39EE2A5E3B0E080839183BE +S1130380A283B38315C0FE01B19601900020E9F762 +S1130390319782E390E0918380830AC0FE01B19695 +S11303A001900020E9F731978FE390E091838083F7 +S11303B08E010F5D1F4FD8010D900020E9F71197B2 +S11303C086E0E2ECF1E001900D928A95E1F78091EC +S11303D0F4014AE050E0BE016F5B7F4F869590E0E8 +S11303E00E943908BE016F5B7F4FC8010E942E082E +S11303F0D8010D900020E9F7119786E0E8ECF1E0D0 +S113040001900D928A95E1F78091F4014AE050E061 +S1130410BE016F5B7F4F817090E00E943908BE017E +S11304206F5B7F4FC8010E942E0809C080E1EEEC8B +S1130430F1E0DE01919601900D928A95E1F7BE01FB +S11304406F5D7F4FFB0101900020E9F731978DE04C +S11304509AE0A0E080839183A283FB0101900020B5 +S1130460E9F73197AF01461B570B84E00E94B203B2 +S1130470C85BDF4F0FB6F894DEBF0FBECDBFDF9170 +S1130480CF911F910F910895CF93DF93CDB7DEB72E +S1130490A0970FB6F894DEBF0FBECDBF0E94BA007E +S11304A082E090E00E948800912C0F2EFEEDAF2E8A +S11304B0F1E0BF2EF02D0F2EFEE0CF2EF1E0DF2E67 +S11304C0F02D0F2EF7EEEF2EF1E0FF2EF02D8E0122 +S11304D00F5F1F4F86E090E00E94880093941F9264 +S11304E09F92BF92AF92DF92CF920E948E081982A0 +S11304F01F929F92FF92EF921F930F930E94D10835 +S1130500F80101900020E9F73197AF01401B510B2E +S1130510B80184E00E94B20382E090E00E94880067 +S11305202FEF81EE94E0215080409040E1F700C02D +S113053000000FB6F894DEBF0FBECDBFCBCF80EA6C +S11305408093D80086E089BD09B400FEFDCF80E821 +S11305508093D8001092E0001092F2018FEF809304 +S113056025013C9888E08093E20008952F923F9201 +S11305704F925F927F928F929F92AF92CF92DF922F +S1130580EF92FF920F931F93CF93DF93ECE2F1E08E +S11305908EE291E041E00F2EF9EECF2ED12CF02D1A +S11305A00F2EFBEEEF2EF12CF02DAA24A3940CEECB +S11305B010E06DEE70E00F2EF0EF4F2E512CF02D69 +S11305C06894992492F8812C6894772474F8DF0154 +S11305D020812F3F59F1E6014883E701A882208159 +S11305E0E80128831C019C0121503109E90128817B +S11305F0203841F0203441F0203241F0203141F4E0 +S1130600372D07C030E405C030E303C030E201C039 +S1130610382DE1012881232BEB0128832C9120FF25 +S113062003C0D2011C9202C0E20198824F5F34964B +S11306300496453061F6EAEEF0E08EE180831082A4 +S1130640DF91CF911F910F91FF90EF90DF90CF90AA +S1130650AF909F908F907F905F904F903F902F909E +S11306600895E8EEF0E080818570E9F30895E8EEFE +S1130670F0E0808182FFFDCF08958F929F92AF9228 +S1130680BF92CF92DF92EF92FF920F931F93CF937B +S1130690DF93D82EE42FF0E02E173F0710F4C22E7C +S11306A001C0C42E062F172F6894992494F80F2E96 +S11306B0F8EEEF2EF12CF02D0F2EFEEFBF2EF02DC5 +S11306C0C1EFD0E0A12C01C08A2C0E94310382FC2E +S11306D026C02C2D80E18C1508F4292D2223D9F075 +S11306E0F801922FDD2011F0808101C0849188836C +S11306F0915031969111F6CF622F615070E06F5F87 +S11307007F4F060F171FC21AF701B082C110DCCF4A +S11307102031D1F204C0F701B082C110D5CFDF91EE +S1130720CF911F910F91FF90EF90DF90CF90BF90EA +S1130730AF909F908F9008958093E9009091F2007C +S1130740842F941708F4892F882359F0262FE62F35 +S1130750F72FA1EFB0E09C9191939E2F921B9817D5 +S1130760D0F30895CF93DF93442329F18093E900D4 +S1130770E8EEF0E0808180FFFDCF8091F2008111EE +S11307801CC0962FE62FF72FA8EEB0E0C1EFD0E003 +S11307908C9185FF02C08081888331968E2F891BBE +S11307A08417B0F3E8EEF0E080818E7F80838FE7DA +S11307B0808381E003C080E001C080E0DF91CF91BD +S11307C008951F920F920FB60F9211248F93EF93F7 +S11307D0FF93E1EEF0E08081108283FF12C010925B +S11307E0E90081E08093EB001092EC0082E18093B9 +S11307F0ED0088E08093F0001092F2018FEF809377 +S11308002501FF91EF918F910F900FBE0F901F90D4 +S113081018951F920F920FB60F9211242F923F92A8 +S11308204F925F926F927F928F929F92AF92BF92FC +S1130830CF92DF92EF92FF920F931F932F933F93E8 +S11308404F935F936F937F938F939F93AF93BF93D4 +S1130850EF93FF93CF93DF93CDB7DEB72997DEBF36 +S1130860CDBF8091F40080FF8FC21092E900809187 +S1130870E80083FF58C2E1EFF0E05081408120811D +S11308803081932F80E0822B608170813081E08100 +S113089022EF2093E800463009F05AC11E2F00E0F1 +S11308A0032B811523E0920709F42AC148F481152A +S11308B041E09407F9F08115924009F045C10CC05C +S11308C08230A3E09A0709F42DC108F422C18330D1 +S11308D0934009F039C12FC12CE331E03D832C83CF +S11308E06CE571E0A0E040E050E0FF24F394E12CDB +S11308F069011BC0E4E7F0E044919801BF0180E086 +S11309000E943D034AC2F901E80FF91FBF2DE0819F +S1130910EF3F09F4BE2DAB0F04968031910599F792 +S1130920205F3F4F2617370711F0CA01ECCFDD8255 +S1130930CC828A2F880F880F880F8A1B825D898357 +S113094090E00E94F606E82EF92E89E0D7018C93F8 +S113095082E011968C931197E9811296EC93129789 +S113096013961C92139714968C93149781E0159602 +S11309708C93159716961C92169780E817968C936D +S113098017978AEF18968C93189719960F2EF2E200 +S1130990AF2EF1E0BF2EF02D0F2EFFE18F2EF1E0F0 +S11309A09F2EF02D0F2EFCE16F2EF1E07F2EF02D07 +S11309B040E050E0412C512C312CDD24D394232CE5 +S11309C08FE691E01B830A83FD0188C0D801A20F42 +S11309D0B31F6D2DAC91AF3F09F4622DC60E2C5F91 +S11309E03F4F2031310591F71D830C8319E01083AB +S11309F024E0218372831382C4829A01D5016D910C +S1130A005D016583D4016D914D016683D3016D91C0 +S1130A103D016783108671110CC0BF013996ACE5A6 +S1130A20B1E01D911193A817B907D9F7FB017C9682 +S1130A3001C03996CC2009F446C022953295307F06 +S1130A403227207F3227215C3E4F11E059874887A7 +S1130A506C817D813F832E83A90143505109DA01C2 +S1130A600C910F3F39F1B7E0B08345E04183402F4B +S1130A70479544274795412B4283013441F0003484 +S1130A8041F0013841F0003841F442E007C04D2DF7 +S1130A9005C04D2D03C042E001C043E04383AE8155 +S1130AA0BF8112974C9144831582AE81BF814C91D2 +S1130AB0468337961F5F2C5F3F4F153059F64885A4 +S1130AC059857D836C834F5F5F4F0C811D81005F6F +S1130AD01F4F1D830C834230510531F0742F920156 +S1130AE0C32C0C811D8172CF0A811B81980149811D +S1130AF0B70181E00E943D03C7010E9491074DC1E7 +S1130B00E6E8F0E044919801BF0180E00E943D03D3 +S1130B1044C1EAE8F0E044919801BF0180E00E94FA +S1130B203D033BC1E0EAF0E044919801BF0180E05D +S1130B300E943D0332C1E2ECF0E044919801BF0110 +S1130B4080E00E943D0329C181E28093EB0025C12E +S1130B50453061F42EEF2093E800E8EEF0E02081C8 +S1130B6020FFFDCF80688093E30017C1372F20E07A +S1130B70262B493099F451113EC0019759F481E074 +S1130B808093F2018EEF8093E800109225010E9479 +S1130B90B60203C181E28093EB00FFC0483081F4C8 +S1130BA0503809F043C0E8EEF0E0808180FFFDCFCB +S1130BB08091F2018093F1008EEF8093E800EDC004 +S1130BC04132C9F4513A09F043C0E8EEF0E08081C3 +S1130BD080FFFDCF0E94D800E5EFF1E08CEF91E0BB +S1130BE0A1EFB0E021912C93E817F907D9F78EEF24 +S1130BF08093E800D2C04032C9F4513209F059C0A0 +S1130C000E943703E5EFF1E08CEF91E0A1EFB0E053 +S1130C102C912193E817F907D9F7E8EEF0E08BEF70 +S1130C2080838EEF80830E94D900B7C0423281F462 +S1130C30513209F04FC08093F401E8EEF0E0808176 +S1130C4080FFFDCF8EEF8093E8000E94DA00A5C0FC +S1130C5041111AC0E8EEF0E0808180FFFDCF5238E8 +S1130C6051F4E9EEF0E020838091EB0085FB8827C6 +S1130C7080F9108201C080E0E1EFF0E0808310820F +S1130C808EEF8093E80089C04B3099F4503211F014 +S1130C90511149C02230310540F4209325018EEFD3 +S1130CA08093E8000E94B60278C081E28093EB0052 +S1130CB074C04A3079F45038B1F5E8EEF0E0808140 +S1130CC080FFFDCF809125018093F1008EEF80930A +S1130CD0E80063C0413011F0433029F5523019F572 +S1130CE0892B09F52F773327922F91509430D8F41C +S1130CF09EEF9093E8002093E900433021F481E2D1 +S1130D008093EB004AC089E18093EB0081E090E09E +S1130D10AC0102C0440F551F2A95E2F7EAEEF0E059 +S1130D20408310823AC081E28093EB002DC0122FE1 +S1130D30808190E0022E02C0959587950A94E2F78F +S1130D4080FF19C0DA012C93DB018C9182FF13C060 +S1130D508091F200882341F06091F20070E0822FCC +S1130D600E94DB001093E900E8EEF0E089EF808355 +S1130D708FE7808312C02F5F3F4F25303105B9F6CE +S1130D8081E28093EB0009C021E030E0E4EFF0E081 +S1130D9049EE50E068EE70E0CACF29960FB6F89499 +S1130DA0DEBF0FBECDBFDF91CF91FF91EF91BF9119 +S1130DB0AF919F918F917F916F915F914F913F91EF +S1130DC02F911F910F91FF90EF90DF90CF90BF90E4 +S1130DD0AF909F908F907F906F905F904F903F90D7 +S1130DE02F900F900FBE0F901F9018950F931F9385 +S1130DF0CF93DF938230910510F482E090E0E0918C +S1130E00FE01F091FF0120E030E0C0E0D0E023C01B +S1130E104081518148175907A8F04817590761F4D0 +S1130E2082819381209719F09B838A832EC09093AB +S1130E30FF018093FE0129C02115310529F04217D5 +S1130E40530710F0A90102C0BE01DF010281138122 +S1130E50EF019A01F8013097D9F62115310509F10E +S1130E60281B390B2430310590F412968D919C91F6 +S1130E7013976115710521F0FB019383828304C0EC +S1130E809093FF018093FE01FD01329644C0FD0161 +S1130E90E20FF31F81939193225031092D933C93D8 +S1130EA03AC02091FC013091FD01232B41F42091A3 +S1130EB02801309129013093FD012093FC012091F8 +S1130EC02601309127012115310541F42DB73EB794 +S1130ED040912A0150912B01241B350BE091FC0118 +S1130EE0F091FD01E217F307A0F42E1B3F0B281726 +S1130EF0390778F0AC014E5F5F4F2417350748F08F +S1130F004E0F5F1F5093FD014093FC018193919319 +S1130F1002C0E0E0F0E0CF01DF91CF911F910F918B +S1130F200895EF92FF920F931F93CF93DF9300974F +S1130F3009F48FC0DC01129713961C921E9212972B +S1130F40E090FE01F090FF01E114F10489F42D9189 +S1130F503C911197280F391F8091FC019091FD015C +S1130F608217930789F5B093FD01A093FC0171C02A +S1130F70E70120E030E001C0EA01CA17DB0738F4DA +S1130F804A815B819E0141155105B1F722C0BC0124 +S1130F9062507109FB01D383C28300811181AC01CA +S1130FA0400F511F4C175D0761F448815981400F70 +S1130FB0511F4E5F5F4F518340834A815B8153834E +S1130FC042832115310529F4B093FF01A093FE015A +S1130FD040C0F901B383A283E90169917991C60FF5 +S1130FE0D71FAC17BD0779F4DC015E914E91460F13 +S1130FF0571F4E5F5F4F5183408312968D919C9192 +S1131000139793838283A0E0B0E002C0D7017C01F0 +S1131010F701828193810097C9F7C7010296208165 +S11310203181820F931F2091FC013091FD0128171B +S1131030390779F4109729F41092FF011092FE01F8 +S113104004C013961C921E921297F092FD01E09236 +S1131050FC01CDB7DEB7E6E00C94EA0BFB01DC0142 +S11310600D900020E9F7119701900D920020E1F70F +S11310700895FB019F01E8944230C4F04532B4F472 +S11310804A3029F497FB1EF4909581959F4F642F65 +S113109077270E948C0B805D8A330CF0895D8193E5 +S11310A0CB010097A1F716F45DE251931082C901B8 +S11310B00C94E70AFA01CF93FF93EF93223044F1A3 +S11310C0253234F5C22FE894CA3049F497FB3EF434 +S11310D090958095709561957F4F8F4F9F4F2C2FE2 +S11310E0332744275527FF93EF930E94A00BEF91DA +S11310F0FF91605D6A330CF0695D6193B901CA01C7 +S1131100605070408040904051F716F4CDE2C19396 +S113111010828F919F91CF910C94E70AA0E0B0E0E8 +S1131120E4E9F8E00C94D20BCE010996AC016F818E +S113113078858D819E810E94F308E2E00C94EE0B89 +S1131140A0E0B0E0E6EAF8E00C94C80B6B014A01B9 +S11311507901D90113962C9121FF1BC08C01C0E0A9 +S1131160D0E010C0D7011896ED91FC911997B70102 +S1131170D8018D918D010995892B69F40A151B05F8 +S113118089F72196C815D90531F05801AC0CBD1C5E +S1131190F5CFC0E0D0E0CE01CDB7DEB7ECE00C94E3 +S11311A0E40BAEE0B0E0E7EDF8E00C94D00B0D8971 +S11311B01E8986E08C831A8309838FEF9FE79E83C1 +S11311C08D83CE014996AC016F89788DCE0101964D +S11311D00E94F308EF81F885E00FF11F10822E962C +S11311E0E4E00C94EC0BACE0B0E0E9EFF8E00C9434 +S11311F0C20B7C016B018A01FC0117821682838178 +S113120081FFC8C188248394912C8C0E9D1EF70104 +S11312109381F60193FD859193FF81916F0188235A +S113122009F4B4C1853239F493FD859193FF81911A +S11312306F01853229F4B70190E00E94F70AE7CFE5 +S1131240512C312C20E02032A8F48B3261F028F4A8 +S1131250803251F0833271F40BC08D3239F0803317 +S113126049F421602AC02260246027C0286025C078 +S1131270206123C027FD29C0382F30533A3088F429 +S113128026FF07C0852D6AE00E94830B582E530E5B +S113129014C0832D6AE00E94830B382E330E206223 +S11312A00CC08E3221F426FD71C1206406C08C3638 +S11312B011F4206802C0883641F4F60193FD85914B +S11312C093FF81916F018111BECF982F9554933074 +S11312D018F09052933028F40C5F1F4FFFE3F9830A +S11312E00DC0833631F0833771F0833509F05EC069 +S11312F023C0F801808189830E5F1F4F44244394E7 +S1131300512C540115C03801F2E06F0E711CF80124 +S1131310A080B18026FF03C0652D70E002C06FEF8E +S11313207FEFC5012C870E94DC0A2C0183012C85E8 +S11313306FE7262E222218C03801F2E06F0E711CCE +S1131340F801A080B18026FF03C0652D70E002C0C3 +S11313506FEF7FEFC5012C870E94D10A2C012C85E9 +S113136050E8252E222A830123FC1CC006C0B701A5 +S113137080E290E00E94F70A3A94832D90E04816A8 +S11313805906A8F30FC0F50127FC859127FE81912A +S11313905F01B70190E00E94F70A31103A94F1E03E +S11313A04F1A51084114510471F7EDC0843611F0FD +S11313B0893641F5F80127FF07C060817181828178 +S11313C093810C5F1F4F08C060817181882777FD6E +S11313D08095982F0E5F1F4F4FE6B42EB22297FFD1 +S11313E009C090958095709561957F4F8F4F9F4F61 +S11313F0F0E8BF2A2AE030E0A4010E94230BA82EC3 +S1131400A81843C0853731F43FEEB32EB2222AE048 +S113141030E024C099EFB92EB2228F36B9F020F40F +S1131420883509F0B3C00DC0803721F0883709F042 +S1131430ADC002C020E1B22AB4FE0BC084E0B82AD9 +S113144008C024FF09C0E6E0BE2A06C028E030E058 +S113145005C020E130E002C020E132E0F801B7FE2F +S113146007C060817181828193810C5F1F4F06C028 +S11314706081718180E090E00E5F1F4FA4010E94A3 +S1131480230BA82EA818FFE7BF22B6FE0BC02B2DF6 +S11314902E7FA51450F4B4FE0AC0B2FC08C02B2D54 +S11314A02E7E05C07A2C2B2D03C07A2C01C0752CFE +S11314B024FF0DC0FE01EA0DF11D8081803311F47B +S11314C0297E09C022FF06C07394739404C0822F3E +S11314D0867809F0739423FD14C020FF0FC05A2CA2 +S11314E0731460F4530C5718732C08C0B70180E2CE +S11314F090E02C870E94F70A73942C857314B0F340 +S113150004C0731410F4371801C0312C24FF12C026 +S1131510B70180E390E02C870E94F70A2C8522FF14 +S11315201EC021FF03C088E590E002C088E790E078 +S1131530B7010CC0822F867891F021FD02C080E2B1 +S113154001C08BE227FD8DE2B70190E00E94F70A0B +S113155006C0B70180E390E00E94F70A5A94A514EC +S1131560C0F3AA94F401EA0DF11DB701808190E063 +S11315700E94F70AA110F5CF06C0B70180E290E0FF +S11315800E94F70A3A943110F8CF41CEF701268130 +S1131590378102C02FEF3FEFC9012C96E2E10C9492 +S11315A0DE0BFC010590615070400110D8F7809566 +S11315B090958E0F9F1F0895FC016150704001901B +S11315C00110D8F7809590958E0F9F1F0895DC0128 +S11315D0FC01672F71917723E1F7329704C07C9166 +S11315E06D9370836291AE17BF07C8F308950F938C +S11315F01F93CF93DF938C01EB018B8181FD03C09B +S11316000FEF1FEF1AC082FF0DC02E813F818C8126 +S11316109D812817390764F4E881F9810193F983DE +S1131620E88306C0E885F985802F0995892B41F761 +S11316308E819F8101969F838E83C801DF91CF9114 +S11316401F910F910895FA01AA27283061F12031E2 +S113165091F1E8946F936E7F6E5F7F4F8F4F9F4F32 +S1131660AF4FB1E040D0B4E03ED0670F781F891F80 +S11316709A1FA11D680F791F8A1F911DA11D6A0F52 +S1131680711D811D911DA11D22D009F468943F9103 +S1131690062E000C3019000C000C3019305D31930B +S11316A0CEF6CF010895462F4770405D4193B3E0D5 +S11316B00FD0C9F7F6CF462F4F70405D4A3318F06C +S11316C0495D31FD4052419302D0A9F7EACFB4E01D +S11316D0A6959795879577956795BA95C9F70097D5 +S11316E06105710508959B01AC010A2E0694579576 +S11316F0479537952795BA95C9F7620F731F841FCD +S1131700951FA01D0895002480FD060E660F11F09C +S11317108695D1F7802D0895AA1BBB1B51E107C004 +S1131720AA1FBB1FA617B70710F0A61BB70B881F6D +S1131730991F5A95A9F780959095BC01CD010895FC +S1131740A1E21A2EAA1BBB1BFD010DC0AA1FBB1FC1 +S1131750EE1FFF1FA217B307E407F50720F0A21B33 +S1131760B30BE40BF50B661F771F881F991F1A94A0 +S113177069F760957095809590959B01AC01BD01CA +S1131780CF0108952F923F924F925F926F927F9272 +S11317908F929F92AF92BF92CF92DF92EF92FF927D +S11317A00F931F93CF93DF93CDB7DEB7CA1BDB0B29 +S11317B00FB6F894DEBF0FBECDBF09942A883988CE +S11317C048885F846E847D848C849B84AA84B984D5 +S11317D0C884DF80EE80FD800C811B81AA81B981E1 +S11317E0CE0FD11D0FB6F894DEBF0FBECDBFED01F5 +S10917F00895F894FFCFF8 +S11317F60000000200000000960000000000000047 +S11318060002000000009600000000000100FF0234 +S113181600FF020AFFFF000006022000FF2002006C +S1131826C11002408020060081200600FF2002002D +S1131836C1100240FF200600FF200600FF20020020 +S1131846FF200200802006008120060005240010E7 +S113185601052401010104240206052406000149A8 +S11318666E69742E2E2E2E0A0056616C69642063EE +S11318766F6D6D616E64733A203F20682069206342 +S1131886207000557844494C204344432044656DF8 +S11318966F2056312E300028632920323031312012 +S11318A652657573636820456C656B74726F6E69F7 +S11318B66B00205254533D00204454523D00696E3F +S11318C676616C696420636F6D6D616E6400746526 +S11318D673742025640A00746573742025640D0AE4 +S10518E60000FC S9030000FC diff --git a/Test/Debug/led.d b/Test/Debug/led.d new file mode 100644 index 0000000..babda42 --- /dev/null +++ b/Test/Debug/led.d @@ -0,0 +1,34 @@ +led.d led.o: .././led.c \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/iom32u2.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/lock.h + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/iom32u2.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/lock.h: diff --git a/Test/Debug/makedep.mk b/Test/Debug/makedep.mk index 9933501..61738fb 100644 --- a/Test/Debug/makedep.mk +++ b/Test/Debug/makedep.mk @@ -2,5 +2,11 @@ # Automatically-generated file. Do not edit or delete the file ################################################################################ +led.c + +rs232.c + Test.c +usb_serial.c + diff --git a/Test/Debug/rs232.d b/Test/Debug/rs232.d new file mode 100644 index 0000000..cdc1851 --- /dev/null +++ b/Test/Debug/rs232.d @@ -0,0 +1,48 @@ +rs232.d rs232.o: .././rs232.c .././config.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdio.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdarg.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/iom32u2.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/lock.h \ + .././rs232.h + +.././config.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdio.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdarg.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/iom32u2.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/lock.h: + +.././rs232.h: diff --git a/Test/Debug/usb_serial.d b/Test/Debug/usb_serial.d new file mode 100644 index 0000000..6df20a9 --- /dev/null +++ b/Test/Debug/usb_serial.d @@ -0,0 +1,57 @@ +usb_serial.d usb_serial.o: .././usb_serial.c \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdlib.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdbool.h \ + .././usb_serial_config.h .././config.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdint.h \ + .././usb_serial.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/pgmspace.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/iom32u2.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/interrupt.h + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdlib.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdbool.h: + +.././usb_serial_config.h: + +.././config.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdint.h: + +.././usb_serial.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/pgmspace.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/iom32u2.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/interrupt.h: diff --git a/Test/Test.c b/Test/Test.c index 859ff48..30c6720 100644 --- a/Test/Test.c +++ b/Test/Test.c @@ -5,23 +5,167 @@ * Author: netz */ -#define F_CPU 16000000 +#include "config.h" #include +#include +#include #include +#include "led.h" +#include "rs232.h" +#include +#include +#include +#include "usb_serial_config.h" // USB configuration +#include "usb_serial.h" +void init() +{ + init_led(); + ledg(YELLOW); + ledg(WHITE); + init_rs232(); + ledg(YELLOW); + usb_init(); // initialize USB + sei(); + fprintf(&rs232, "Init....\n"); +} +// the following routines are called by USB interface. Don't call them yourself! +// You can add own code for your application. + +#ifdef USERDEFCONTROLS // see usbconfig.h +//----------------------------------------------------------------------------- +bool usb_controlrequest(struct usb_control_request *ucr) +//----------------------------------------------------------------------------- +// Handle user defined control requests +// "ucr" contains the data of the control request +// function has to return "true", if request is handled (otherwise "false") +{ + // insert your own program code here + return true; // means request is handled +} +#endif + +//----------------------------------------------------------------------------- +void cdc_notify_getlinecoding(void) +//----------------------------------------------------------------------------- +// This routine is called, when baudrate and transmission parameters (see +// cdc_linecoding in usb_serial.h) are requested by the host. +// Parameters of this variable can be modified in this routine, before they +// will be sent to host. +{ + // your code here +} + +//----------------------------------------------------------------------------- +void cdc_notify_setlinecoding(void) +//----------------------------------------------------------------------------- +// This routine is called, when baudrate and transmission parameters (see +// cdc_linecoding in usb_serial.h) are set by the host. +// New settings are available in this variable, when this routine is called. +{ + // your code here +} + +//----------------------------------------------------------------------------- +void cdc_notify_setcontrollinestate(void) +//----------------------------------------------------------------------------- +// This routine is called, when host is changing handshake output lines RTS and +// DTR. +// New settings are available in the global variable cdc_rtsdtr (see +// usb_serial.h). +{ + // your code here +} + +//----------------------------------------------------------------------------- +void usb_ep(uint8_t endpoint, uint16_t datasize) +//----------------------------------------------------------------------------- +// handle of endpoint interrupt for incoming data +// "datasize" contains the number od bytes in the USB FIFO buffer +{ + // insert your own program code here (read of USB FIFO buffer UEDATX) + + // example code + char r[32]; // use endpoint buffer size (= maximum length of one transfered string) + char t[32]; + char s[8]; + uint8_t n; + + if (endpoint==CDC_RX_ENDPOINT) { + // serial data received + n=usb_rxdata(endpoint,(unsigned char *)r,sizeof(r)); // read data into buffer + // parse command and prepare response + t[0]=0; // clear response string buffer + switch (r[0]) { // 1st byte is command + case '?': // help command + case 'h': + strcpy(t,"Valid commands: ? h i c p"); + break; + case 'i': // info command + strcpy(t,"UxDIL CDC Demo V1.0"); + break; + case 'c': // copyright command + strcpy(t,"(c) 2011 Reusch Elektronik"); + break; + case 'p': // parameter settings command + strcpy(t,"ppp"); + ltoa(cdc_linecoding.dwDTERate,t,10); + strcat(t,":"); + itoa(cdc_linecoding.bDataBits,s,10); + strcat(t,s); + switch (cdc_linecoding.bParityType) { + case 0: strcat(t,"N"); + break; + case 1: strcat(t,"O"); + break; + case 2: strcat(t,"E"); + break; + case 3: strcat(t,"M"); + break; + case 4: strcat(t,"S"); + break; + default: strcat(t,"?"); + }; + switch (cdc_linecoding.bCharFormat) { + case 0: strcat(t,"1"); + break; + case 1: strcat(t,"1.5"); + break; + case 2: strcat(t,"2"); + break; + default: strcat(t,"?"); + }; + strcat(t," RTS="); + itoa(cdc_rtsdtr>>1,s,10); + strcat(t,s); + strcat(t," DTR="); + itoa(cdc_rtsdtr&0x01,s,10); + strcat(t,s); + break; + default: strcpy(t,"invalid command"); + } + strcat(t,"\r\n"); + // response + usb_txdata(CDC_TX_ENDPOINT,(unsigned char *)t,strlen(t)); // return answer to host + } +} int main(void) { - DDRB |= (1< + + compile + + + compile + + + compile + + + compile + + + compile + compile + + compile + + + compile + + + compile + \ No newline at end of file diff --git a/Test/config.h b/Test/config.h new file mode 100644 index 0000000..269311e --- /dev/null +++ b/Test/config.h @@ -0,0 +1,17 @@ +/* + * config.h + * + * Created: 06.10.2013 17:05:43 + * Author: netz + */ + + +#ifndef CONFIG_H_ +#define CONFIG_H_ + + +#define F_CPU 16000000 +#define BAUD_RATE 9600 + + +#endif /* CONFIG_H_ */ \ No newline at end of file diff --git a/Test/led.c b/Test/led.c new file mode 100644 index 0000000..6066a72 --- /dev/null +++ b/Test/led.c @@ -0,0 +1,23 @@ +/* + * led.c + * + * Created: 06.10.2013 16:32:15 + * Author: netz + */ + +#include + +void ledg(int mask) { + int rgb = 0; + rgb |= (mask & (1<<0)) ? (1<<0) : (0<<0); + rgb |= (mask & (1<<1)) ? (1<<1) : (0<<1); + rgb |= (mask & (1<<2)) ? (1<<2) : (0<<2); + + PORTB &= ~((1< +#include +#include "rs232.h" + + + +int uart_putchar(char c, FILE *stream) +{ + if (c == '\n') { + uart_putchar('\r', stream); //Warten solange bis Zeichen gesendet wurde + } + loop_until_bit_is_set(UCSR1A, UDRE1); //Ausgabe des Zeichens + UDR1 = c; + return (0); +} + +void init_rs232() +{ + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< +#include +#include "usb_serial_config.h" +#include "usb_serial.h" + +//----------------------------------------------------------------------------- +// Global Variables +//----------------------------------------------------------------------------- + +Tcdc_linecoding cdc_linecoding; + +//----------------------------------------------------------------------------- +// Internal Variables +//----------------------------------------------------------------------------- + +// USB State +static volatile uint8_t usb_stat = USB_STATUS_DISCONNECTED; + +// USB configuration, selected by host (0=none) +// In this version only 0 or 1 is possible (support of only one configuration) +static volatile uint8_t usb_conf = 0; + +// USB interface, selected by host +// In this version the value 0 and optional more cfgs are possible (see usbconfig.h) +#if (NUMINTERFACES>1) +static volatile uint8_t usb_if = 0xFF; // 0xFF: no interface selected +#endif + +//----------------------------------------------------------------------------- +// Descriptors +//----------------------------------------------------------------------------- + +// configuration descriptor +typedef struct { + uint8_t bLength; + uint8_t bDescriptorType; + uint16_t wTotalLength; + uint8_t bNumInterfaces; + uint8_t bConfigurationValue; + uint8_t iConfiguration; + uint8_t bmAttributes; + uint8_t bMaxPower; +} cfg_desc; + +// interface descriptor +uint8_t InterfaceClasses[3] = {INTERFACE_CLASS_0,INTERFACE_CLASS_1,INTERFACE_CLASS_2}; +uint8_t InterfaceSubClasses[3] = {INTERFACE_SUBCLASS_0,INTERFACE_SUBCLASS_1,INTERFACE_SUBCLASS_2}; +uint8_t InterfaceProtocols[3] = {INTERFACE_PROTOCOL_0,INTERFACE_PROTOCOL_1,INTERFACE_PROTOCOL_2}; +typedef struct { + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bInterfaceNumber; + uint8_t bAlternateSetting; + uint8_t bNumEndpoints; + uint8_t bInterfaceClass; + uint8_t bInterfaceSubClass; + uint8_t bInterfaceProtocol; + uint8_t iInterface; +} if_desc; + +// additional descriptors, required for CDC +// (contents see usb_serial_cfg.h CDCDescriptorData) +#ifdef CDC +typedef uint8_t cdc_desc[CDC_DESCRIPTORSIZE]; +#endif + +// endpoint descriptor +typedef struct { + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bEndpointAddress; + uint8_t bmAttributes; + uint16_t wMaxPacketSize; + uint8_t bInterval; +} ep_desc; + +//----------------------------------------------------------------------------- +// USB Initializing +//----------------------------------------------------------------------------- + +#if defined (__AVR_AT90USB1286__) || (__AVR_AT90USB1287__) +#define AT128X +#endif + +void usb_init(void) +{ + #ifdef MEGA4 + UHWCON = _BV(UVREGE); // enable PAD regulator + #endif + #ifdef MEGA6 + UHWCON = _BV(UIMOD)|_BV(UVREGE); // set device mode, enable PAD regulator + #endif + USBCON = _BV(USBE) | _BV(FRZCLK); // enable USB + #if (F_CPU==16000000) + // 16MHz + #ifdef MEGA2 + PLLCSR = _BV(PLLE) | _BV(PLLP0); // config PLL, 16 MHz xtal + #endif + #ifdef MEGA4 + PLLCSR = _BV(PINDIV) | _BV(PLLE); // config PLL, 16 MHz xtal + #endif + + #ifdef MEGA6 + #ifdef AT128X + PLLCSR = _BV(PLLP2) | _BV(PLLP0) | _BV(PLLE); // config PLL, 16 MHz xtal (AT90USB128x) + #else + PLLCSR = _BV(PLLP2) | _BV(PLLP1) | _BV(PLLE); // config PLL, 16 MHz xtal (AT90USB64x and ATMEGA32U6) + #endif + #endif + + #else + + // 8MHz + #ifdef MEGA6 + PLLCSR = _BV(PLLP1) | _BV(PLLP0) |_BV(PLLE); // config PLL, 8 MHz xtal + #else + PLLCSR = _BV(PLLE); // config PLL, 8 MHz xtal + #endif + + #endif + + while (!(PLLCSR & _BV(PLOCK))) ; // wait for PLL lock + #ifdef MEGA4_6 + USBCON = _BV(USBE)|_BV(OTGPADE); // start USB clock + #else + USBCON = _BV(USBE); // start USB clock + #endif + UDCON = 0; // enable attach resistor + usb_conf = 0; + #if (NUMINTERFACES>1) + usb_if = 0xFF; + #endif + #ifdef MEGA2 + // port for VBUS detection + VBUSDIR &= ~_BV(VBUSPIN); // port as input + #endif + UDIEN = _BV(EORSTE); // enable "end of reset" interrupt +} + +//----------------------------------------------------------------------------- +// Initializing Endpoints +//----------------------------------------------------------------------------- + +#ifdef STATICENDPOINTS // physical endpoint configuration for all interfaces, may differ from descriptor defintions + +void usb_endpoints(void) +{ + #define EPC EP_CONFIG_STATIC[i] + #define IN_TRANSFER EP_CONFIG_STATIC[i].ep_type & 0x01 + +#else // endpoint configuration corresponds with descriptor + +#if (NUMINTERFACES>1) +void usb_endpoints(uint8_t ifnumber) // with interface number +#else +void usb_endpoints(void) +#endif +{ + #if (NUMINTERFACES>1) + #define EPC EP_CONFIG[ifnumber][i] + #define IN_TRANSFER EP_CONFIG[ifnumber][i].ep_type & 0x01 + #else + #define EPC EP_CONFIG[i] + #define IN_TRANSFER EP_CONFIG[i].ep_type & 0x01 + #endif + +#endif + + uint8_t i; + + for (i=0; i1) +uint8_t usb_interface(void) +{ + return usb_if; +} +#endif + +//----------------------------------------------------------------------------- +// Internal used USB routines and macros +//----------------------------------------------------------------------------- + +#define USB_SEND_IN UEINTX = ~(1<maxsize) len=maxsize; + do { + usb_wait_in(); + if (i & _BV(RXOUTI)) return; // cancel + // send IN package + n = (len < ENDPOINT0_SIZE) ? len : ENDPOINT0_SIZE; + for (i = n; i; i--) + UEDATX = isRAM ? *addr++ : pgm_read_byte(addr++); + len -= n; + USB_SEND_IN; + } while (len || n == ENDPOINT0_SIZE); +} + +//----------------------------------------------------------------------------- +// Free FIFO Buffer +//----------------------------------------------------------------------------- + +void usb_freebuffer(uint8_t endpoint) +{ + UENUM = endpoint; // select endpoint + UERST = _BV(endpoint); // endpoint FIFO reset + UERST = 0; +} + +//----------------------------------------------------------------------------- +// Data Check (Host to Device) +//----------------------------------------------------------------------------- + +#ifdef MEGA4_6 +uint16_t usb_rxavail(uint8_t endpoint) +#else +uint8_t usb_rxavail(uint8_t endpoint) +#endif +{ + UENUM = endpoint; // select endpoint + #ifdef MEGA4_6 + return ((uint16_t)(UEBCHX)<<8)+UEBCLX; + #else + return UEBCLX; + #endif +} + +//----------------------------------------------------------------------------- +// Data Receive (Host to Device) +//----------------------------------------------------------------------------- + +#ifdef MEGA4_6 +uint16_t usb_rxdata(uint8_t endpoint, uint8_t *buffer, uint16_t maxdatasize) +#else +uint8_t usb_rxdata(uint8_t endpoint, uint8_t *buffer, uint8_t maxdatasize) +#endif +{ + #ifdef MEGA4_6 + uint16_t r, i; + #else + uint8_t r, i; + #endif + + UENUM = endpoint; // select endpoint + #ifdef MEGA4_6 + r = ((uint16_t)(UEBCHX)<<8)+UEBCLX; + #else + r = UEBCLX; + #endif + if (r>maxdatasize) r = maxdatasize; + if (r) { // data available in input endpoint + for (i=0; i1) + usb_if = 0xFF; + #endif + } +} + +//----------------------------------------------------------------------------- +// Endpoint Interrupts +//----------------------------------------------------------------------------- +// Interrupts, triggered by incoming data in an endpoint, are handled here. + +ISR(USB_COM_vect) +{ + #if (NUMINTERFACES>1) + #define EPCO EP_CONFIG[j][i] + #else + #define EPCO EP_CONFIG[i] + #endif + + uint8_t intbits; + uint8_t i, j, n, s; + cfg_desc *cfg; + if_desc *ifp; + #ifdef CDC + cdc_desc *cdc; + #endif + ep_desc *epp; + #if (USESN==2) // serial number in RAM + struct usb_string_descriptor_ram buf; + #endif + struct usb_control_request ucr; + + if (UEINT & 0x01) { + // handle interrupts of endpoint 0 (control transfers) + UENUM = 0; + intbits = UEINTX; // save interrupt flags of the endpoint + if (intbits & _BV(RXSTPI)) { // control transfer, setup + ucr.bmRequestType = UEDATX; + ucr.bRequest = UEDATX; + ucr.wValue = UEDATX; + ucr.wValue |= (UEDATX << 8); + ucr.wIndex = UEDATX; + ucr.wIndex |= (UEDATX << 8); + ucr.wLength = UEDATX; + ucr.wLength |= (UEDATX << 8); + UEINTX = ~(_BV(RXSTPI) | _BV(RXOUTI) | _BV(TXINI)); + if (ucr.bRequest == GET_DESCRIPTOR) { + switch (ucr.wValue) { + case 0x0100: // device descriptor + usb_desc_out(false,&device_descriptor[0],pgm_read_byte(&device_descriptor[0]),ucr.wLength); + break; + case 0x0200: // configuration descriptor + // get number of activated endpoints + n=0; + #if (NUMINTERFACES>1) + for (j=0; jbLength = sizeof(cfg_desc); + cfg->bDescriptorType = 2; + cfg->wTotalLength = s; + cfg->bNumInterfaces = NUMINTERFACES; + cfg->bConfigurationValue = 1; + cfg->iConfiguration = 0; + cfg->bmAttributes = POWERING; + cfg->bMaxPower = MAXPOWER>>1; + // initialize interface descriptor + ifp = (if_desc *)((uint16_t)(cfg)+sizeof(cfg_desc)); + #if (NUMINTERFACES>1) + for (j=0; jbLength = sizeof(if_desc); + ifp->bDescriptorType = 4; + ifp->bInterfaceNumber = j; + ifp->bAlternateSetting = 0; + ifp->bNumEndpoints = n; + ifp->bInterfaceClass = InterfaceClasses[j]; + ifp->bInterfaceSubClass = InterfaceSubClasses[j]; + ifp->bInterfaceProtocol = InterfaceProtocols[j]; + ifp->iInterface = 0; + #ifdef CDC + if (j==0) { + cdc = (cdc_desc *)((uint16_t)(ifp)+sizeof(if_desc)); + for (i=0; ibLength = sizeof(ep_desc); + epp->bDescriptorType = 5; + epp->bEndpointAddress = (i+1)|(EPCO.ep_type<<7); + epp->bmAttributes = EP_TRANSFER(EPCO.ep_type); + epp->wMaxPacketSize = EPCO.ep_size; + epp->bInterval = EPCO.ep_interval; + epp = (ep_desc *)((uint16_t)(epp)+sizeof(ep_desc)); + } + } + } + #if (NUMINTERFACES>1) + ifp = (if_desc *)epp; + } + #endif + // finally + usb_desc_out(true,(uint8_t *)cfg,s,ucr.wLength); + free(cfg); + break; + case 0x0300: // String 0 + usb_desc_out(false,(uint8_t *)&string0.bLength,pgm_read_byte(&string0.bLength),ucr.wLength); + break; + case 0x0301: // String 1 + usb_desc_out(false,(uint8_t *)&string1.bLength,pgm_read_byte(&string1.bLength),ucr.wLength); + break; + case 0x0302: // String 2 + usb_desc_out(false,(uint8_t *)&string2.bLength,pgm_read_byte(&string2.bLength),ucr.wLength); + break; + #if (USESN>0) + case 0x0303: // String 3, serial number + #if (USESN==1) // serial number in the flash + usb_desc_out(false,(uint8_t *)&string3.bLength,pgm_read_byte(&string3.bLength),ucr.wLength); + #endif + #if (USESN==2) // serial number in the RAM + buf.bDescriptorType=3; // has to be 3 always + i = 0; + while (RAMSN[i]) { + buf.wString[i] = RAMSN[i]; + i++; + } + buf.bLength=2*i+2; // total length of the data set + usb_desc_out(true,(uint8_t *)&buf,buf.bLength,ucr.wLength); + #endif + break; + #endif + default: + STALL; // stall + } + return; + } + if (ucr.bRequest == SET_ADDRESS) { + USB_SEND_IN; + usb_wait_in_ready(); + UDADDR = ucr.wValue | _BV(ADDEN); + return; + } + if (ucr.bRequest == SET_CONFIGURATION && ucr.bmRequestType == 0) { // another configuration will be chosen + if (ucr.wValue==1) { // configuration 1 will be chosen + usb_conf = ucr.wValue; + USB_SEND_IN; + #ifdef STATICENDPOINTS + usb_if = 0; // select interface 0 + usb_endpoints(); // initialize endpoints + #else + #if (NUMINTERFACES==1) + usb_endpoints(); // initialize endpoints + #else + usb_if = 0; // select interface 0 + usb_endpoints(usb_if); // initialize endpoints + #endif + #endif + } else { // other configurations are not supported in this version + STALL; // stall + } + return; + } + if (ucr.bRequest == GET_CONFIGURATION && ucr.bmRequestType == 0x80) { + usb_wait_in_ready(); + UEDATX = usb_conf; + USB_SEND_IN; + return; + } + if (ucr.bRequest == CDC_GET_LINE_CODING && ucr.bmRequestType == 0xA1) { + // request baudrate and transmission format + usb_wait_in_ready(); + cdc_notify_getlinecoding(); + for (i=0; i<7; i++) UEDATX = cdc_linecoding.data[i]; + USB_SEND_IN; + return; + } + if (ucr.bRequest == CDC_SET_LINE_CODING && ucr.bmRequestType == 0x21) { + // set baudrate and transmission format + usb_wait_receive_out(); + for (i=0; i<7; i++) cdc_linecoding.data[i] = UEDATX; + USB_ACK; + USB_SEND_IN; + cdc_notify_setlinecoding(); + return; + } + if (ucr.bRequest == CDC_SET_CONTROL_LINE_STATE && ucr.bmRequestType == 0x21) { + // set handshake outputs RTS and DTR + cdc_rtsdtr = (uint8_t)ucr.wValue; + usb_wait_in_ready(); + USB_SEND_IN; + cdc_notify_setcontrollinestate(); + return; + } + if (ucr.bRequest == GET_STATUS) { + usb_wait_in_ready(); + i = 0; + #ifdef SUPPORT_ENDPOINT_HALT + if (ucr.bmRequestType == 0x82) { + UENUM = ucr.wIndex; + if (UECONX & _BV(STALLRQ)) i = 1; + UENUM = 0; + } + #endif + UEDATX = i; + UEDATX = 0; + USB_SEND_IN; + return; + } + #if (NUMINTERFACES>1) + if (ucr.bRequest == SET_INTERFACE && (ucr.bmRequestType == 0x20 || ucr.bmRequestType == 0)) { // another interface will be chosen + if (ucr.wIndex= 1 && i <= MAX_ENDPOINT) { + USB_SEND_IN; + UENUM = i; + if (ucr.bRequest == SET_FEATURE) { + UECONX = _BV(STALLRQ)|_BV(EPEN); + } else { + UECONX = _BV(STALLRQC)|_BV(RSTDT)|_BV(EPEN); + UERST = _BV(i); + UERST = 0; + } + return; + } + } + #endif + #ifdef USERDEFCONTROLS + // handle user defined control requests + if (!usb_controlrequest(&ucr)) + UECONX = _BV(STALLRQ) | _BV(EPEN); // stall + return; + #endif + } + UECONX = _BV(STALLRQ) | _BV(EPEN); // stall + } + + // handle pending interrupts for other endpoints + for (i=1; i<=MAX_ENDPOINT; i++) { + if (UEINT & _BV(i)) { + UENUM=i; // select endpoint + intbits = UEINTX; // save interrupt bits of the endpoint + if (intbits & _BV(RXOUTI)) { // interrupt occured by incoming data + #ifdef MEGA4_6 + if (((uint16_t)(UEBCHX)<<8)+UEBCLX) { // data available in input endpoint + usb_ep(i,((uint16_t)(UEBCHX)<<8)+UEBCLX); + #else + if (UEBCLX) { // data available in input endpoint + usb_ep(i,UEBCLX); + #endif + UENUM=i; // reselect endpoint (if changed by handling routine) + } + UEINTX = ~(_BV(RXOUTI)|_BV(STALLEDI)); // clear interrupt flags + UEINTX = 0x7F; // free bank (FIFOCON), has to be executed after RXOUTI! + return; + } + } + } + STALL; // stall +} diff --git a/Test/usb_serial.h b/Test/usb_serial.h new file mode 100644 index 0000000..122aaa2 --- /dev/null +++ b/Test/usb_serial.h @@ -0,0 +1,273 @@ +/***************************************************************************** + +USB-Template: USB Serial Communication Device (CDC) +V1.1.0 + +(c) 2010-2011 Reusch Elektronik, Dipl.-Ing. (FH) Rainer Reusch +Homepage: http://products.reworld.eu/index.htm + +Supported devices: +- AT90USB82, AT90USB162 +- ATMEGA8U2, ATMEGA16U2, ATMEGA32U2 +- ATMEGA8U4, ATMEGA16U4, ATMEGA32U4 +- AT90USB646, AT90USB647, AT90USB1286, AT90USB1287 + +Supported modules: +- U2DIL-AT90USB162 +- U2DIL-ATMEGA32U2 +- U4DIL-ATMEGA32U4 +- U6DIL-AT90USB1286 + +Created: 2010-12-28 +Changed: 2011-03-12 + +*****************************************************************************/ + +// Usually no changes are necessary in this file! + +#ifndef usb_h__ +#define usb_h__ + +#include +#include +#include +#include "usb_serial_config.h" + +//----------------------------------------------------------------------------- +// USB Strings +//----------------------------------------------------------------------------- + +struct usb_string_descriptor { + uint8_t bLength; + uint8_t bDescriptorType; + int16_t wString[]; +}; + +static const struct usb_string_descriptor PROGMEM string0 = { + 4, + 3, + {0x0409} +}; + +static const struct usb_string_descriptor PROGMEM string1 = { + sizeof(STR_MANUFACTURER), + 3, + STR_MANUFACTURER +}; + +static const struct usb_string_descriptor PROGMEM string2 = { + sizeof(STR_PRODUCT), + 3, + STR_PRODUCT +}; + +#if (USESN==1) +static const struct usb_string_descriptor PROGMEM string3 = { + sizeof(STR_SERIAL_NUMBER), + 3, + STR_SERIAL_NUMBER +}; +#endif + +#if (USESN==2) +// Your USB serial numebr in RAM. Must be set into RAMSN before calling usb_init! +// Descriptor size, descriptor ID and conversion into widechars wil be done automatically. + +#define RAMSNLEN 16 // maximum length of the serial number + +struct usb_string_descriptor_ram { + uint8_t bLength; + uint8_t bDescriptorType; + int16_t wString[RAMSNLEN]; +}; + +char RAMSN[RAMSNLEN]; // save the S/N as string here (e.g. read from EEPROM) +#endif + +//----------------------------------------------------------------------------- +// Endpoints +//----------------------------------------------------------------------------- + +// buffer sizes of an endpoint +// Hint: For 64 byte and more only two endpoints must be activated! +#define EP_SIZE(s) ((s) == 512 ? 0x60 : \ + ((s) == 256 ? 0x50 : \ + ((s) == 128 ? 0x40 : \ + ((s) == 64 ? 0x30 : \ + ((s) == 32 ? 0x20 : \ + ((s) == 16 ? 0x10 : \ + 0x00)))))) + +// endpoint attributes +#define EP_TRANSFER(t) ((t) == EP_TYPE_ISOCHRONOUS_IN ? 1 : \ + ((t) == EP_TYPE_ISOCHRONOUS_OUT ? 1 : \ + ((t) == EP_TYPE_BULK_IN ? 2 : \ + ((t) == EP_TYPE_BULK_OUT ? 2 : \ + 3)))) + +//----------------------------------------------------------------------------- +// Device Descriptor +//----------------------------------------------------------------------------- + +#define LSB(n) (n & 255) +#define MSB(n) ((n >> 8) & 255) + +static const uint8_t PROGMEM device_descriptor[] = { + 18, // bLength + 1, // bDescriptorType + 0x00, 0x02, // bcdUSB + USBDEVICECLASS, // bDeviceClass + 0, // bDeviceSubClass + 0, // bDeviceProtocol + ENDPOINT0_SIZE, // bMaxPacketSize0 + LSB(VENDOR_ID), MSB(VENDOR_ID), // idVendor + LSB(PRODUCT_ID), MSB(PRODUCT_ID), // idProduct + 0x00, 0x01, // bcdDevice + 1, // iManufacturer + 2, // iProduct + 3, // iSerialNumber + 1 // bNumConfigurations +}; + +//----------------------------------------------------------------------------- +// Standard Commands for Control Transfers +//----------------------------------------------------------------------------- + +#define GET_STATUS 0 +#define CLEAR_FEATURE 1 +#define SET_FEATURE 3 +#define SET_ADDRESS 5 +#define GET_DESCRIPTOR 6 +#define GET_CONFIGURATION 8 +#define SET_CONFIGURATION 9 +#define GET_INTERFACE 10 +#define SET_INTERFACE 11 +// CDC specific commands +#define CDC_SET_LINE_CODING 0x20 +#define CDC_GET_LINE_CODING 0x21 +#define CDC_SET_CONTROL_LINE_STATE 0x22 + +//----------------------------------------------------------------------------- +// DCD Data Structures +//----------------------------------------------------------------------------- + +// Baudrate and Transmission format (read and write) +typedef union { + struct { + uint32_t dwDTERate; // baudrate + uint8_t bCharFormat; // stop bits: 0=1, 1=1.5, 2=2 stop bits + uint8_t bParityType; // parity: 0=none, 1=odd, 2=even, 3=mark, 4=space + uint8_t bDataBits; // number of data bits (5, 6, 7, 8 or 16) + }; + uint8_t data[7]; + } Tcdc_linecoding; +extern Tcdc_linecoding cdc_linecoding; // buffer for data + +// Handshake Lines +uint8_t cdc_rtsdtr; // Bit0=DTR, Bit1=RTS + +//============================================================================= +// USB Functions +//============================================================================= + +//----------------------------------------------------------------------------- +// USB Initializing +//----------------------------------------------------------------------------- +// Has to be called one time before any USB actions. +// Interrupts has to be enabled (call of sei macro) + +void usb_init(void); + +//----------------------------------------------------------------------------- +// USB State +//----------------------------------------------------------------------------- +// Request of the USB state. +// State is determined with function call. +// Hint: For AT90USB82/162 and ATMEGAxxU2 without VBUSDETECT option, state will +// not change, if USB connector will be unplugged! +// Possible return values: +#define USB_STATUS_DISCONNECTED 0 // not connected (for self powered devices) +#define USB_STATUS_CONNECTED 1 // connected (for AT90USB82/162 and ATMEGAxxU2 only with option VBUSDETECT) +#define USB_STATUS_ENUMERATED 2 // USB address assigned (USB connection established) +#define USB_STATUS_CONFIGURED 3 // a valid configuration were selected (USB device usable) + +uint8_t usb_status(void); + +//----------------------------------------------------------------------------- +// USB Configuration +//----------------------------------------------------------------------------- +// Returns the configuration number, set by the host +// If the value is 0, no configuration were selected by the host. No endpoint +// (except ep0 for control transfers) can be used in this case. + +uint8_t usb_configuration(void); + +//----------------------------------------------------------------------------- +// USB Interface +//----------------------------------------------------------------------------- +// Returns the number of the interface, selected by the host. + +uint8_t usb_interface(void); + +//----------------------------------------------------------------------------- +// Data Check (Host to Device) +//----------------------------------------------------------------------------- +// This function returns the number of data bytes, contained in the FIFO +// input buffer, for the specified endpoint. + +#ifdef MEGA4_6 +uint16_t usb_rxavail(uint8_t endpoint); +#else +uint8_t usb_rxavail(uint8_t endpoint); +#endif + +//----------------------------------------------------------------------------- +// Data Receive (Host to Device) +//----------------------------------------------------------------------------- +// "endpoint" has to specify an "OUT" endpoint (1..4 or 1..6)! +// Data will be stored into "buffer". +// Returns number of bytes, transfered into buffer +#ifdef MEGA4_6 +uint16_t usb_rxdata(uint8_t endpoint, uint8_t *buffer, uint16_t maxdatasize); +#else +uint8_t usb_rxdata(uint8_t endpoint, uint8_t *buffer, uint8_t maxdatasize); +#endif + +//----------------------------------------------------------------------------- +// Data Return (Device to Host), Control Transfer +//----------------------------------------------------------------------------- +// Data return for control transfers (endpoint 0) +// "datasize" not greater than size of FIFO buffer (no check!) +// Result is always "true", if no connection to host. +// When a connection is established, result is "false", if data block, +// stored before, is not read from the FIFO buffer. + +bool usb_txdata_control(uint8_t *buffer, uint8_t datasize); + +//----------------------------------------------------------------------------- +// Data Return (Device to Host) +//----------------------------------------------------------------------------- +// "endpoint" must specify a valid endpoint number (1..4 or 1..6)! +// "datasize" not greater than size of FIFO buffer (no check!) +// Result is always "true", if no connection to host. +// When a connection is established, result is "false", if data block, +// stored before, is not read from the FIFO buffer. + +#ifdef MEGA4_6 +bool usb_txdata(uint8_t endpoint, uint8_t *buffer, uint16_t datasize); +#else +bool usb_txdata(uint8_t endpoint, uint8_t *buffer, uint8_t datasize); +#endif + +//----------------------------------------------------------------------------- +// Free FIFO Buffer +//----------------------------------------------------------------------------- +// Free the FIFO buffer for one endpoint +// Data contained in the buffer will be lost. +// Endpoint usable for new data transfer. +// It is not necessary, to call this routine after read of buffer data with +// read routine. Routine can be used to clear buffer before writing new data. + +void usb_freebuffer(uint8_t endpoint); + +#endif diff --git a/Test/usb_serial_config.h b/Test/usb_serial_config.h new file mode 100644 index 0000000..605678a --- /dev/null +++ b/Test/usb_serial_config.h @@ -0,0 +1,322 @@ +/***************************************************************************** + +USB-Template: USB Serial Communication Device (CDC) +V1.1.0 + +(c) 2010-2011 Reusch Elektronik, Dipl.-Ing. (FH) Rainer Reusch +Homepage: http://products.reworld.eu/index.htm + +Supported devices: +- AT90USB82, AT90USB162 +- ATMEGA8U2, ATMEGA16U2, ATMEGA32U2 +- ATMEGA8U4, ATMEGA16U4, ATMEGA32U4 +- AT90USB646, AT90USB647, AT90USB1286, AT90USB1287 + +Supported modules: +- U2DIL-AT90USB162 +- U2DIL-ATMEGA32U2 +- U4DIL-ATMEGA32U4 +- U6DIL-AT90USB1286 + +Please note: +The USB Vendor and Product ID, used in this file, is NOT for official use! + +Created: 2010-12-28 +Changed: 2011-03-12 + +*****************************************************************************/ + +// in this file you will make changes for your purposes + +#include "config.h" + +#ifndef usbconfig_h__ +#define usbconfig_h__ + +#if defined (__AVR_AT90USB82__) || (__AVR_AT90USB162__) || (__AVR_ATmega8U2__) || (__AVR_ATmega32U2__) +#define MEGA2 // AT90USB82/162, ATMEGAxxU2 +#endif +#if defined (__AVR_ATmega16U4__) || (__AVR_ATmega32U4__) +#define MEGA4 // ATMEGAxxU4 +#define MEGA4_6 +#endif +#if defined (__AVR_AT90USB646__) || (__AVR_AT90USB647__) || (__AVR_AT90USB1286__) || (__AVR_AT90USB1287__) +#define MEGA6 // AT90USB646, -647, -1286, -1287 +#define MEGA4_6 +#endif + +#include +#include + +#if (F_CPU==8000000) +#define FREQ_OK +#endif +#if (F_CPU==16000000) +#define FREQ_OK +#endif +#ifndef FREQ_OK +#error "Invalid clock frequency (only 8 or 16MHz)!" +#endif + +//----------------------------------------------------------------------------- +// General USB commitments +//----------------------------------------------------------------------------- + +#define CDC // additional code for Communication Device Class + +// Vendor Name +// will be a part of the descriptor and can be requested by the host +#define STR_MANUFACTURER L"BlubbFish" + +// Product Name +// will be a part of the descriptor and can be requested by the host +#define STR_PRODUCT L"Hacker-Jeopardy" + +// USB Serial Number (optional) +// will be a part of the descriptor and can be requested by the host +#define USESN 1 // Options: 0= no S/N; 1= S/N inside the flash memory; 2= S/N inside RAM +#if (USESN==1) +#define STR_SERIAL_NUMBER L"000000" // your serial number, stored in flash memory +#endif + +// Vendor ID +// set your vendor ID here +#define VENDOR_ID 0x0001 // !!! THIS ID IS NOT FOR OFFICIAL USE, FOR YOUR PERSONAL TESTING PURPOSES ONLY !!! + +// Product ID +// set your product ID here +#define PRODUCT_ID 0x0003 // !!! THIS ID IS NOT FOR OFFICIAL USE, FOR YOUR PERSONAL TESTING PURPOSES ONLY !!! + +// USB device class +#define USBDEVICECLASS 0x02 // class for DCD devices + +// power supply +#define SELFPOWERED 0x40 +#define BUSPOWERED 0x80 +#define POWERING BUSPOWERED // Alternatives: SELFPOWERED or SELFPOWERED | BUSPOWERED + +// current consumption +// in mA (milliamperes), uses only even values between 2 and 500 +#define MAXPOWER 500 + +#ifdef MEGA2 +// The controllers AT90USB82/162 and ATMEGAxxU2 are not able, to detect a +// plugged USB connector (presence of VBUS voltage). As alternative an input +// port, which is connected with the 5V line of the USB connector, can be +// used. A pull down resistor at the input port is recommended. +// Uncomment the following line, if a port pin is used for this purpose. +//#define VBUSDETECT +#define VBUSDIR DDRC // Data Direction Register of the used port +#define VBUSPORT PINC // used port +#define VBUSPIN PC4 // used pin (PC4 as example) +#endif + +//----------------------------------------------------------------------------- +// Additional CDC Configuration Descriptor Parameters +//----------------------------------------------------------------------------- +#ifdef CDC +#define CDC_DESCRIPTORSIZE 19 // size of additional CDC descriptor +static const uint8_t CDCDescriptorData[CDC_DESCRIPTORSIZE] = { + 0x05, 0x24, 0x00, 0x10, 0x01, + 0x05, 0x24, 0x01, 0x01, 0x01, + 0x04, 0x24, 0x02, 0x06, + 0x05, 0x24, 0x06, 0x00, 0x01 +}; +#endif + +//----------------------------------------------------------------------------- +// Data Set for a USB Control Request +//----------------------------------------------------------------------------- + +// Nothing to change here! + +struct usb_control_request { + uint8_t bmRequestType; + uint8_t bRequest; + uint16_t wValue; + uint16_t wIndex; + uint16_t wLength; +}; + +//----------------------------------------------------------------------------- +// Interfaces +//----------------------------------------------------------------------------- +// Number of interfaces and interface descriptor topics for each interface + +#define NUMINTERFACES 2 // number of supported interfaces (1...3) (use 2 for CDC) +#if (NUMINTERFACES>3) +#error "Only up to 3 interfaces are supported!" +#endif + +// Interface classes for each interface +#define INTERFACE_CLASS_0 0x02 // Communication Interface Class +#define INTERFACE_CLASS_1 0x0A // Data Interface Class +#define INTERFACE_CLASS_2 0xFF // not used in CDC + +// Interface sub classes for each interface +#define INTERFACE_SUBCLASS_0 0x02 // Abstract Control Model +#define INTERFACE_SUBCLASS_1 0x00 // always 0 at CDC +#define INTERFACE_SUBCLASS_2 0xFF // not used in CDC + +// Interface protocols for each interface +#define INTERFACE_PROTOCOL_0 0x01 // AT commands V250, set to 0x00, if no protocol +#define INTERFACE_PROTOCOL_1 0x00 // always 0 at CDC +#define INTERFACE_PROTOCOL_2 0xFF // not used in CDC + +//----------------------------------------------------------------------------- +// Endpoints +//----------------------------------------------------------------------------- + +// maximum number of endpoints (don't change!) +#ifdef MEGA4_6 +#define MAX_ENDPOINT 6 +#else +#define MAX_ENDPOINT 4 +#endif + +// Constants for endpoint configuration (don't change!) +#define EP_TYPE_DISABLED 0xFF // endpoint not used +#define EP_TYPE_CONTROL 0x00 +#define EP_TYPE_BULK_IN 0x81 +#define EP_TYPE_BULK_OUT 0x80 +#define EP_TYPE_INTERRUPT_IN 0xC1 +#define EP_TYPE_INTERRUPT_OUT 0xC0 +#define EP_TYPE_ISOCHRONOUS_IN 0x41 +#define EP_TYPE_ISOCHRONOUS_OUT 0x40 +#define EP_SINGLE_BUFFER 0x02 +#define EP_DOUBLE_BUFFER 0x06 + +// Endpoint 0 +// (for Control Transfers, must be defined always) +#define ENDPOINT0_SIZE 16 // control endpoint +// uncomment the following line to handle user defined control request +// of endpoint 0 in the main program +//#define USERDEFCONTROLS +#ifdef USERDEFCONTROLS +// function prototype to handle user defined control requests. +// Function has to return "true", if request is handled. +// If result is "false", a "stall" will be returned to host. +bool usb_controlrequest(struct usb_control_request *ucr); +#endif + +typedef struct { + uint8_t ep_type; // transfer + uint8_t ep_size; // buffer size + uint8_t ep_buffer; // buffer configuration + uint8_t ep_interval; // interval +} ep_config; + +#ifdef CDC + #define STATICENDPOINTS // endpoint defintions in descriptors and physical (may differ) +#else +// #define STATICENDPOINTS // if comment: the following endpoint defintions are valid for descriptors and physical +#endif + +// configuration of the endpoints +// EP_TYPE constant, buffer size (8, 16, 32 or 64 byte), single or double buffer + +// Hint: Use only two endpoints, if buffer size is 64 byte! + +// Additional hints, if more than one USB interfaces are defined: +// - after configuration change (only configuration 1 is possible), +// interface 0 will be selected +// - to chose another interface, the control request command SET_INTERFACE +// with the request type 0x20 has to be executed + +// if STATICENDPOINTS is defined, the following agreements are only used in the descriptors. + +#if (NUMINTERFACES>1) +static const ep_config EP_CONFIG[NUMINTERFACES][MAX_ENDPOINT] = {{ +#else +static const ep_config EP_CONFIG[MAX_ENDPOINT] = { +#endif + // modify the following lines for your purposes + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER, 0x00}, + {EP_TYPE_INTERRUPT_IN, 16, EP_SINGLE_BUFFER, 0x40}, // interval for CDC + {EP_TYPE_DISABLED, 32, EP_DOUBLE_BUFFER, 0x00}, + {EP_TYPE_DISABLED, 32, EP_DOUBLE_BUFFER, 0x00} + #ifdef MEGA4_6 // the following endpoints are only available on ATMEGAxxU4 and AT90USB64x/128x controllers + , + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER, 0x00}, + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER, 0x00} + #endif + #if (NUMINTERFACES>1) + },{ + // modify the following lines for your purposes + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER, 0x00}, + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER, 0x00}, + {EP_TYPE_BULK_OUT, 32, EP_DOUBLE_BUFFER, 0x00}, + {EP_TYPE_BULK_IN, 32, EP_DOUBLE_BUFFER, 0x00} + #ifdef MEGA4_6 // the following endpoints are only available on ATMEGAxxU4 and AT90USB64x/128x controllers + , + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER, 0x00}, + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER, 0x00} + #endif + } + // more interfaces... + #if (NUMINTERFACES==3) + ,{ + // modify the following lines for your purposes + {EP_TYPE_BULK_IN, 32, EP_SINGLE_BUFFER, 0x00}, + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER, 0x00}, + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER, 0x00}, + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER, 0x00} + #ifdef MEGA4_6 // the following endpoints are only available on ATMEGAxxU4 and AT90USB64x/128x controllers + , + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER, 0x00}, + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER, 0x00} + #endif + } + #endif + #endif +}; + +#ifdef STATICENDPOINTS +// If defined, the physical endpoint configuration, valid for each interface, is defined here. +// It should correspond with the upper definitions! +static const ep_config EP_CONFIG_STATIC[MAX_ENDPOINT] = { + // modify the following lines for your purposes + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER, 0x00}, + {EP_TYPE_INTERRUPT_IN, 16, EP_SINGLE_BUFFER, 0x40}, // interval for CDC + {EP_TYPE_BULK_OUT, 32, EP_DOUBLE_BUFFER, 0x00}, + {EP_TYPE_BULK_IN, 32, EP_DOUBLE_BUFFER, 0x00} + #ifdef MEGA4_6 // the following endpoints are only available on ATMEGAxxU4 and AT90USB64x/128x controllers + , + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER, 0x00}, + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER, 0x00} + #endif +}; +#endif + +// the following defintions has to correspond with upper endpoint configuration!!! +#define CDC_ACM_ENDPOINT 2 // handshake line state request +#define CDC_RX_ENDPOINT 3 // data receive from host +#define CDC_TX_ENDPOINT 4 // data transmitt to host + +//----------------------------------------------------------------------------- +// Interface Routines +//----------------------------------------------------------------------------- +// Function prototypes to handle serial communication +// The routines will be a part of the main program + +void cdc_notify_setlinecoding(void); +void cdc_notify_getlinecoding(void); +void cdc_notify_setcontrollinestate(void); + +//----------------------------------------------------------------------------- +// Endpoint Interrupt +//----------------------------------------------------------------------------- +// Function prototype to handle endpoint interrupts for incoming data +// The routine will be a part of the main program + +void usb_ep(uint8_t endpoint, uint16_t datasize); + +//----------------------------------------------------------------------------- +// Functional Purposes +//----------------------------------------------------------------------------- + +// "Endpoint Halt" option +// Comment the following to save code memory. But USB conformity is lost. +#define SUPPORT_ENDPOINT_HALT + +#endif