From: Michael Wiebusch Date: Sat, 5 Oct 2013 21:43:43 +0000 (+0200) Subject: now everything works, just strange that the preprocessor ifs and stuff are not workin... X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=ea2323226038f27a8a11082dada41fcd6db6ce62;p=coral.git now everything works, just strange that the preprocessor ifs and stuff are not working with this makefiles --- diff --git a/firmware/USBtoSerial.c b/firmware/USBtoSerial.c index 486b688..fd03f4f 100644 --- a/firmware/USBtoSerial.c +++ b/firmware/USBtoSerial.c @@ -341,7 +341,7 @@ int main(void) // uncomment desired demo mode here! // #define DEMO_MODE KEYPAD_MODE -//#define DEMO_MODE ABSOLUTE_MODE +// #define DEMO_MODE ABSOLUTE_MODE // #define DEMO_MODE RELATIVE_MODE //###################################################################### @@ -359,7 +359,7 @@ int main(void) // uart_puts("you selected the keypad demo modus:\n\r"); touchpad_set_abs_mode(); // keypad functionality uses the "absolute mode" while (1) { - + break; // goto next mode Usb2SerialTask(); loopcounter++; @@ -403,9 +403,9 @@ int main(void) // #elif DEMO_MODE == ABSOLUTE_MODE // begin of keypad mode demo block // uart_puts("you selected the absolute position demo modus:\n\r"); -/* touchpad_set_abs_mode();// tell the touchpad you want to use it in the "absolute mode" + touchpad_set_abs_mode();// tell the touchpad you want to use it in the "absolute mode" while (1) { - + break; // goto next mode Usb2SerialTask(); loopcounter++; if(loopcounter< 2000) { @@ -426,57 +426,56 @@ int main(void) uart_puts("\r"); } - // end of absolute mode demo block */ + // end of absolute mode demo block // // #elif DEMO_MODE == RELATIVE_MODE - // begin of relative mode demo block -// uart_puts("you selected the relative position demo modus:\n\r"); -// touchpad_set_rel_mode_100dpi();// use touchpad in relative mode +// begin of relative mode demo block + uart_puts("you selected the relative position demo modus:\n\r"); + touchpad_set_rel_mode_100dpi();// use touchpad in relative mode // touchpad_set_rel_mode_200dpi(); // uncomment this line if you want double resolution -// touchpad_set_abs_mode(); -// uint8_t x, y = 0; -// int8_t dx, dy = 0; -// -// while (1) { -// -// Usb2SerialTask(); -// loopcounter++; -// if(loopcounter<2000) { -// continue; -// } -// loopcounter=0; -// -// touchpad_read(); // read data from touchpad -// -// dx = delta_x();// returns the amount your finger has moved in x direction since last readout -// dy = delta_y();// returns the amount your finger has moved in y direction since last readout -// -// // increment/decrement some dummy variables with the -// if (x + dx > 255) { -// x = 255; -// } else if (x + dx < 0) { -// x = 0; -// } else { -// x = (x + dx); -// } -// -// if (y + dy > 255) { -// y = 255; -// } else if (y + dy < 0) { -// y = 0; -// } else { -// y = (y + dy); -// } -// -// uart_puts("x_pos: "); -// my_uitoa(x, stringbuffer, 4); -// uart_puts(stringbuffer); -// uart_puts(" y_pos: "); -// my_uitoa(y, stringbuffer, 4); -// uart_puts(stringbuffer); -// uart_puts("\r"); -// -// } + uint8_t x, y = 0; + int8_t dx, dy = 0; + + while (1) { + + Usb2SerialTask(); + loopcounter++; + if(loopcounter<2000) { + continue; + } + loopcounter=0; + + touchpad_read(); // read data from touchpad + + dx = delta_x();// returns the amount your finger has moved in x direction since last readout + dy = delta_y();// returns the amount your finger has moved in y direction since last readout + + // increment/decrement some dummy variables with the + if (x + dx > 255) { + x = 255; + } else if (x + dx < 0) { + x = 0; + } else { + x = (x + dx); + } + + if (y + dy > 255) { + y = 255; + } else if (y + dy < 0) { + y = 0; + } else { + y = (y + dy); + } + + uart_puts("x_pos: "); + my_uitoa(x, stringbuffer, 4); + uart_puts(stringbuffer); + uart_puts(" y_pos: "); + my_uitoa(y, stringbuffer, 4); + uart_puts(stringbuffer); + uart_puts("\r"); + + } // end of relative mode demo block // #endif diff --git a/firmware/USBtoSerial.c~ b/firmware/USBtoSerial.c~ index f151993..135470e 100644 --- a/firmware/USBtoSerial.c~ +++ b/firmware/USBtoSerial.c~ @@ -341,11 +341,11 @@ int main(void) // uncomment desired demo mode here! // #define DEMO_MODE KEYPAD_MODE -//#define DEMO_MODE ABSOLUTE_MODE -#define DEMO_MODE RELATIVE_MODE +// #define DEMO_MODE ABSOLUTE_MODE +// #define DEMO_MODE RELATIVE_MODE //###################################################################### -#if DEMO_MODE == KEYPAD_MODE +// #if DEMO_MODE == KEYPAD_MODE // begin of keypad mode demo block // current configuration is: 3 colums, 2 rows => 6 touch buttons // this can be changed by the PAD_ROWS/PAD_COLS defines in the TM1001A.c file @@ -359,7 +359,7 @@ int main(void) // uart_puts("you selected the keypad demo modus:\n\r"); touchpad_set_abs_mode(); // keypad functionality uses the "absolute mode" while (1) { - + break; // goto next mode Usb2SerialTask(); loopcounter++; @@ -403,9 +403,9 @@ int main(void) // #elif DEMO_MODE == ABSOLUTE_MODE // begin of keypad mode demo block // uart_puts("you selected the absolute position demo modus:\n\r"); -/* touchpad_set_abs_mode();// tell the touchpad you want to use it in the "absolute mode" + touchpad_set_abs_mode();// tell the touchpad you want to use it in the "absolute mode" while (1) { - + break; // goto next mode Usb2SerialTask(); loopcounter++; if(loopcounter< 2000) { @@ -426,57 +426,57 @@ int main(void) uart_puts("\r"); } - // end of absolute mode demo block */ + // end of absolute mode demo block // // #elif DEMO_MODE == RELATIVE_MODE - // begin of relative mode demo block -// uart_puts("you selected the relative position demo modus:\n\r"); -// touchpad_set_rel_mode_100dpi();// use touchpad in relative mode -// touchpad_set_rel_mode_200dpi(); // uncomment this line if you want double resolution -// touchpad_set_abs_mode(); -// uint8_t x, y = 0; -// int8_t dx, dy = 0; -// -// while (1) { -// -// Usb2SerialTask(); -// loopcounter++; -// if(loopcounter<2000) { -// continue; -// } -// loopcounter=0; -// -// touchpad_read(); // read data from touchpad -// -// dx = delta_x();// returns the amount your finger has moved in x direction since last readout -// dy = delta_y();// returns the amount your finger has moved in y direction since last readout -// -// // increment/decrement some dummy variables with the -// if (x + dx > 255) { -// x = 255; -// } else if (x + dx < 0) { -// x = 0; -// } else { -// x = (x + dx); -// } -// -// if (y + dy > 255) { -// y = 255; -// } else if (y + dy < 0) { -// y = 0; -// } else { -// y = (y + dy); -// } -// -// uart_puts("x_pos: "); -// my_uitoa(x, stringbuffer, 4); -// uart_puts(stringbuffer); -// uart_puts(" y_pos: "); -// my_uitoa(y, stringbuffer, 4); -// uart_puts(stringbuffer); -// uart_puts("\r"); -// -// } +// begin of relative mode demo block + uart_puts("you selected the relative position demo modus:\n\r"); + touchpad_set_rel_mode_100dpi();// use touchpad in relative mode + touchpad_set_rel_mode_200dpi(); // uncomment this line if you want double resolution + touchpad_set_abs_mode(); + uint8_t x, y = 0; + int8_t dx, dy = 0; + + while (1) { + + Usb2SerialTask(); + loopcounter++; + if(loopcounter<2000) { + continue; + } + loopcounter=0; + + touchpad_read(); // read data from touchpad + + dx = delta_x();// returns the amount your finger has moved in x direction since last readout + dy = delta_y();// returns the amount your finger has moved in y direction since last readout + + // increment/decrement some dummy variables with the + if (x + dx > 255) { + x = 255; + } else if (x + dx < 0) { + x = 0; + } else { + x = (x + dx); + } + + if (y + dy > 255) { + y = 255; + } else if (y + dy < 0) { + y = 0; + } else { + y = (y + dy); + } + + uart_puts("x_pos: "); + my_uitoa(x, stringbuffer, 4); + uart_puts(stringbuffer); + uart_puts(" y_pos: "); + my_uitoa(y, stringbuffer, 4); + uart_puts(stringbuffer); + uart_puts("\r"); + + } // end of relative mode demo block // #endif diff --git a/firmware/USBtoSerial.elf b/firmware/USBtoSerial.elf index a85c518..ed987ed 100755 Binary files a/firmware/USBtoSerial.elf and b/firmware/USBtoSerial.elf differ diff --git a/firmware/USBtoSerial.hex b/firmware/USBtoSerial.hex index cc29328..862c8b3 100644 --- a/firmware/USBtoSerial.hex +++ b/firmware/USBtoSerial.hex @@ -1,9 +1,9 @@ :100000009AC00000B4C00000B2C00000B0C0000040 :10001000AEC00000ACC00000AAC00000A8C0000034 -:10002000A6C00000A4C00000A2C0000029C60000B5 -:10003000CBC600009CC000009AC0000098C0000021 +:10002000A6C00000A4C00000A2C0000073C600006B +:1000300015C700009CC000009AC0000098C00000D6 :1000400096C0000094C0000092C0000090C0000064 -:100050008EC00000D6C000008AC000002FC3000080 +:100050008EC00000D6C000008AC00000D8C20000D8 :1000600086C0000084C0000082C0000080C0000084 :100070007EC000007CC000007AC0000078C0000094 :1000800076C0000074C0000072C0000070C00000A4 @@ -18,9 +18,9 @@ :1001100020005500530042002D00520053003200D1 :100120003300320020004100640061007000740060 :1001300065007200000011241FBECFEFD4E0DEBFC7 -:10014000CDBF11E0A0E0B1E0E8EAF7E102C0059020 -:100150000D92A834B107D9F712E0A8E4B1E001C0CC -:100160001D92AC37B107E1F74ED30C94D20B48CFB8 +:10014000CDBF11E0A0E0B1E0E8E5F8E102C0059024 +:100150000D92A236B107D9F712E0A2E6B1E001C0D4 +:100160001D92A639B107E1F75FD30C942A0C48CF52 :10017000FC01A081B1816C93808191810196918372 :100180008083268137818217930721F484819581AA :10019000918380832FB7F894828593850196938706 @@ -31,355 +31,368 @@ :1001E0006083738362837583648360587F4F7783F2 :1001F000668380E890E091878087138612862FBF00 :1002000008951F920F920FB60F9211248F93809131 -:100210006E028F5F80936E028F910F900FBE0F90D2 -:100220001F90189586B530916E0220E0280F311D81 -:10023000C901089516BC10926E020895DF92EF92E4 +:1002100088028F5F809388028F910F900FBE0F909E +:100220001F90189586B53091880220E0280F311D67 +:10023000C901089516BC109288020895DF92EF92CA :10024000FF920F931F93CF93DF9383E085BDF2DF7F -:10025000509A5898E7DFBC0180E090E00E94080BBC -:1002600020E030E84EE053E40E94700A87FDF2CFB0 +:10025000509A5898E7DFBC0180E090E00E94520B72 +:1002600020E030E84EE053E40E94BA0A87FDF2CF66 :1002700082E085BDDD24D39410E0DCDF509A5898ED -:10028000D1DFBC0180E090E00E94080B20E030E06C -:100290004CE852E40E94700A87FDF2CF5098589AB9 -:1002A000C1DFBC0180E090E00E94080B20E030E05C -:1002B00048E453E40E94700A87FDF2CF41C0C8E0D1 -:1002C000D0E000E8E12EFF2485E692E0E80EF91E7A +:10028000D1DFBC0180E090E00E94520B20E030E022 +:100290004CE852E40E94BA0A87FDF2CF5098589A6F +:1002A000C1DFBC0180E090E00E94520B20E030E012 +:1002B00048E453E40E94BA0A87FDF2CF41C0C8E087 +:1002C000D0E000E8E12EFF248FE792E0E80EF91E6F :1002D000B1DF509A5898F7018081802379F0A2DF2E -:1002E000BC0180E090E00E94080B20E030E04CE888 -:1002F00052E40E94700A87FDF2CF0EC093DFBC016A -:1003000080E090E00E94080B20E030E042E053E4FF -:100310000E94700A87FDF2CF5098589A83DFBC0183 -:1003200080E090E00E94080B20E030E048E453E4D5 -:100330000E94700A87FDF2CF0695219749F61F5F4C +:1002E000BC0180E090E00E94520B20E030E04CE83E +:1002F00052E40E94BA0A87FDF2CF0EC093DFBC0120 +:1003000080E090E00E94520B20E030E042E053E4B5 +:100310000E94BA0A87FDF2CF5098589A83DFBC0139 +:1003200080E090E00E94520B20E030E048E453E48B +:100330000E94BA0A87FDF2CF0695219749F61F5F02 :100340001D1508F4BCCF76DF509A58986BDFBC01BE -:1003500080E090E00E94080B20E030E042E053E4AF -:100360000E94700A87FDF2CF5098589A5BDFBC015B -:1003700080E090E00E94080B20E030E048E453E485 -:100380000E94700A87FDF2CF809165028B3329F0BD +:1003500080E090E00E94520B20E030E042E053E465 +:100360000E94BA0A87FDF2CF5098589A5BDFBC0111 +:1003700080E090E00E94520B20E030E048E453E43B +:100380000E94BA0A87FDF2CF80917F028B3329F059 :10039000893341F429E0D22E02C093E0D92E1130E6 :1003A00009F46BCF47DF3EDFBC0180E090E00E94A4 -:1003B000080B20E030E04AEF53E40E94BA0B181615 -:1003C0000CF442C04899EFCF489BFECFC6E6D2E07E +:1003B000520B20E030E04AEF53E40E94040C181680 +:1003C0000CF442C04899EFCF489BFECFC0E8D2E082 :1003D00011E001C0182F188288E0E82EF12C00E807 -:1003E00029DF20DFBC0180E090E00E94080B20E0C4 -:1003F00030E048E453E40E94BA0B181614F411508C +:1003E00029DF20DFBC0180E090E00E94520B20E07A +:1003F00030E048E453E40E94040C181614F4115041 :1004000024C04899EECF16DF489BFECF0BDFBC011E -:1004100080E090E00E94080B20E030E048EC52E4DD -:100420000E94700A87FF03C08881800F8883069529 +:1004100080E090E00E94520B20E030E048EC52E493 +:100420000E94BA0A87FF03C08881800F88830695DF :100430000894E108F108E114F10491F6812F8F5F2F :100440002196893039F601C010E0812FDF91CF91DC :100450001F910F91FF90EF90DF9008955098589A58 :10046000EEE6F0E080818160808308958CE38093E4 -:100470006502E4DE80936F0280916F0208958BE342 -:100480008093650283E68093660284E0809367022E -:10049000D5DE8DE380936502D1DE89E3809365022A -:1004A00010926C02CBDE8FEF91EEA4E08150904071 -:1004B000A040E1F700C00000089580916A02282F53 -:1004C00030E020773070359527958770822B08951E -:1004D0002091690230E027703070322F2227330FCD -:1004E000330F8091680290E0877090709695982FF6 -:1004F000882797958795282B392B8091670290E064 -:100500008F779070282B392BC901089520916902AB -:1005100030E020773070E6E0220F331FEA95E1F7F4 -:100520008091680290E08077907073E0880F991F47 -:100530007A95E1F7282B392B8091660290E08F772E -:100540009070282B392BC90108951F93CF93DF9307 -:10055000B4DF182FBDDFEC01D9DF9C01209729F013 -:10056000D0936302C093620204C0C0916202D09132 -:1005700063022115310529F0309361022093600256 -:1005800004C020916002309161021123C9F480916E -:1005900064028823A9F0C659D040CE0161EB71E016 -:1005A0000E94BE0B462F4F5F225D3040C9016CECAC -:1005B00071E00E94BE0B862F880F860F480F01C086 -:1005C00040E010936402842FDF91CF911F91089532 -:1005D0001F938FB7F89420915201309153018FBF30 -:1005E00080915001909151012817390749F08AE212 -:1005F00091E0E3D6BC0197FD03C088E491E0B8DD4B -:100600002FB7F8948091DE019091DF012FBF009702 -:1006100001F120912B012F702093E9002091E80037 -:1006200020FF17C08031910510F08FE090E0182F67 -:100630000EC0E091D601F091D7018AE291E060818D -:100640004BD61150882329F484ED91E0ACDD1123C1 -:1006500081F72FB7F89480915201909153012FBFE9 -:10066000009749F088E491E09EDD9091C80095FFE5 -:10067000FCCF8093CE008AE291E088D642D51F91CC -:10068000089584B7877F84BF88E10FB6F89480937C -:100690006000109260000FBE90E080E80FB6F89402 -:1006A00080936100909361000FBEDBC208950895AE -:1006B0008AE291E0EDC58AE291E03EC51F920F9279 -:1006C0000FB60F9211242F933F934F935F936F9325 -:1006D0007F938F939F93AF93BF93EF93FF9360911B -:1006E000CE008EB3843019F484ED91E041DDFF91AA -:1006F000EF91BF91AF919F918F917F916F915F919A -:100700004F913F912F910F900FBE0F901F90189512 -:100710008F929F92AF92BF92CF92DF92EF92FF9211 -:100720001F93FC01A18DA150A23028F4B0E0AB5B77 -:10073000BE4F1C9101C010E0808D823009F418601A -:10074000828D873031F0883031F0863029F41260A4 -:1007500003C0146001C016601092C9001092C80056 -:100760001092CA00C488D588E688F788C701B60108 -:1007700096958795779567954BD720E034E244EFBF -:1007800059E44AD64B015C01C701B60141D79B0130 -:10079000AC01C501B401A8D620E030E040E85FE339 -:1007A0003AD60AD77093CD006093CC001093CA005C -:1007B00082E08093C80088E98093C9001F91FF9070 -:1007C000EF90DF90CF90BF90AF909F908F90089563 -:1007D000682F8EB3843019F484ED91E0C9CC08956C -:1007E000EF92FF92CF93DF93E82EE7017E01F92E7F -:1007F000E70101C0EDDF89918823E1F7DF91CF9117 -:10080000FF90EF900895CF93DF933BDF88E491E072 -:1008100064E571E0E1DC84ED91E060EE71E0DCDC48 -:1008200078941CDE8FEF99E6A8E181509040A040BB -:10083000E1F700C00000789422DEC0E0D0E0C8DE1E -:10084000219697E0C03DD907D1F710DE7EDE8330D8 -:10085000E9F0843028F48130B1F0823071F70DC0B6 -:10086000853071F0853018F0863039F703C080E0AC -:1008700091E00EC087E091E00BC08FE091E008C0EE -:1008800084E191E005C08BE191E002C082E291E059 -:10089000A7DFD3CF923029F0933041F09130E9F4C3 -:1008A00017C02EE330E0EAEAF0E01BC0813041F0EF -:1008B000813018F0823089F406C0E8EEF0E005C01F -:1008C000ECEEF0E002C0E6E0F1E0249130E009C097 -:1008D00022E130E0E8E9F0E004C020E030E0E0E0D0 -:1008E000F0E0DA011196FC93EE93C9010895282FE8 -:1008F000392FF90180917A0290917B028617970730 -:1009000018F4BC0120E034C061157105D9F780915D -:10091000E8008E778093E800F5CF8EB38823E9F165 -:100920008530B9F18091E80083FD35C08091E80001 -:1009300082FD29C08091E80080FF1AC08091F200FA -:1009400090E006C021912093F10061507040019623 -:100950006115710519F088309105A0F321E0883008 -:10096000910509F020E08091E8008E778093E800FF -:100970006115710591F6222381F605C08EB3882397 -:1009800061F0853061F08091E80082FFF7CF80E070 -:10099000089583E0089581E0089582E0089583E05A -:1009A0000895E82FF92F80917A0290917B028617A3 -:1009B000970718F4BC0120E036C061157105D9F71E -:1009C0008091E8008E778093E800F5CF8EB388237E -:1009D00009F43EC08530C1F18091E80083FD36C046 -:1009E0008091E80082FD2AC08091E80080FF1BC052 -:1009F0008091F20090E007C024912093F10031969D -:100A00006150704001966115710519F088309105AB -:100A100098F321E08830910509F020E08091E8000A -:100A20008E778093E8006115710581F6222371F6B7 -:100A300005C08EB3882361F0853061F08091E800B5 -:100A400082FFF7CF80E0089583E0089581E0089564 -:100A500082E0089583E00895982F2CC0292F2F70ED -:100A60002093E900981739F07091EC002091ED0087 -:100A70005091F00003C0242F762F50E021FF19C0C1 -:100A80003091EB003E7F3093EB003091ED003D7FE5 -:100A90003093ED003091EB0031603093EB007093B8 -:100AA000EC002093ED005093F0002091EE0027FF22 -:100AB00008C09F5F953090F28F708093E90081E0CD -:100AC000089580E00895EF92FF920F931F93CF93C4 -:100AD000DF93162FE82EE7017E01F92EE70100E0F3 -:100AE0002AC09881992329F16B81E981FA812C81AF -:100AF000892F8F70853018F56295660F660F607CC0 -:100B0000991F9927991F692B223010F096E001C098 -:100B100092E028E030E040E003C04F5F220F331F37 -:100B20002E173F07D0F34295407F492B95DF88234E -:100B300031F00F5F25960117A0F281E001C080E03F -:100B4000DF91CF911F910F91FF90EF9008958091C9 -:100B5000740287FF11C003C08EB38823B1F0809167 -:100B6000E80082FFF9CF8091E8008B778093E8005E -:100B700008958EB3882349F08091E80080FFF9CF73 -:100B80008091E8008E778093E80008958091E400DA -:100B90009091E50044E62091EC0020FF25C02091D3 -:100BA000E80020FD15C02EB32223A1F02530A1F0CE -:100BB0002091EB0025FD12C02091E4003091E5006A -:100BC0002817390741F3442359F04150C901E3CFB5 -:100BD00080E0089582E0089583E0089581E008951B -:100BE00084E0089580E008952091E80022FFDBCFA3 -:100BF000F9CF40D042D08091D8008F778093D80031 -:100C00008091D80080688093D8008091D8008F7D33 -:100C10008093D80084E089BD86E089BD09B400FED8 -:100C2000FDCF1EBA109270021092720210927102E1 -:100C300080E060E042E010DF8091E1008E7F8093F1 -:100C4000E1008091E20081608093E2008091E20007 -:100C500088608093E2008091E0008E7F8093E000C6 -:100C60000895E3E6F0E080818E7F808381E08093C9 -:100C70007302BFCF1092E20008951092E100089530 -:100C80001F920F920FB60F9211242F933F934F9301 -:100C90005F936F937F938F939F93AF93BF93EF93E4 -:100CA000FF938091E10082FF0AC08091E20082FF01 -:100CB00006C08091E1008B7F8093E10021D280917A -:100CC000E10080FF16C08091E20080FF12C0809199 -:100CD000E2008E7F8093E2008091E2008061809349 -:100CE000E2008091D80080628093D80019BC1EBABF -:100CF000DEDC8091E10084FF2CC08091E20084FF63 -:100D000028C084E089BD86E089BD09B400FEFDCF1E -:100D10008091D8008F7D8093D8008091E1008F7EF4 -:100D20008093E1008091E2008F7E8093E2008091C9 -:100D3000E20081608093E20080917002882321F4B8 -:100D40008091E30087FF02C084E001C081E08EBB98 -:100D5000ADDC8091E10083FF26C08091E20083FF3B -:100D600022C08091E100877F8093E10082E08EBB0A -:100D7000109270028091E1008E7F8093E10080915B -:100D8000E2008E7F8093E2008091E2008061809398 -:100D9000E20080E060E042E05FDE8091F000886089 -:100DA0008093F000ADD1FF91EF91BF91AF919F91F2 -:100DB0008F917F916F915F914F913F912F910F9004 -:100DC0000FBE0F901F9018951F920F920FB60F92A3 -:100DD00011241F932F933F934F935F936F937F93B0 -:100DE0008F939F93AF93BF93EF93FF931091E9007D -:100DF0001F708091EC001092E9008091F000877FD5 -:100E00008093F00078941BD01092E9008091F0005C -:100E100088608093F0001093E900FF91EF91BF91FB -:100E2000AF919F918F917F916F915F914F913F9182 -:100E30002F911F910F900FBE0F901F9018951F9329 -:100E4000DF93CF93CDB7DEB7AC970FB6F894DEBF84 -:100E50000FBECDBFE4E7F2E08091F100819322E084 -:100E6000EC37F207C9F727DC8091E80083FF30C137 -:100E70008091740220917502253009F484C02630D7 -:100E800040F42130A1F1213070F0233009F020C16D -:100E90002EC0283009F4EFC0293009F4FEC02630F6 -:100EA00009F016C192C0803821F0823809F010C1D3 -:100EB00008C08091710290917202992371F0826052 -:100EC0000CC0809178028F708093E9009091EB00C4 -:100ED00081E095FF80E01092E9009091E800977F13 -:100EE0009093E8008093F1001092F100CFC0882326 -:100EF00019F0823009F0ECC090E08F71907000978B -:100F000029F08230910509F0E3C00BC08091760290 -:100F1000813009F0DDC0233009F080E08093720257 -:100F20002CC080917602882341F5209178022F70A1 -:100F300009F4CEC02093E9008091EB0080FF1DC032 -:100F400080917502833021F48091EB00806213C0A0 -:100F50008091EB0080618093EB0081E090E002C023 -:100F6000880F991F2A95E2F78093EA001092EA0011 -:100F70008091EB0088608093EB001092E9008091F3 -:100F8000E800877F86C0882309F0A2C0109176020E -:100F90001F778091E3008078812B8093E30080911C -:100FA000E800877F8093E800D2DD8091E80080FF31 -:100FB000FCCF8091E30080688093E300112311F05F -:100FC00083E001C082E08EBB83C08058823008F08D -:100FD0007FC0809176029091770223E08C3D92074A -:100FE00091F583E08C838AE28B835FB7F894DE010E -:100FF000159680E090E04EE061E2E42FF0E060932F -:101000005700E49180FF03C0E295EF704F5FEF70EF -:101010002E2F30E0EA3018F0295C3F4F02C0205DEF -:101020003F4F2D933D9301968431910531F75FBF7A -:101030008091E800877F8093E800CE0103966AE202 -:1010400070E055DC12C060917802AE014F5F5F4FD7 -:1010500021DCBC01009709F43BC08091E800877F48 -:101060008093E80089819A819CDC8091E8008B77ED -:101070008093E8002DC0803859F58091E800877F83 -:101080008093E800809170028093F1008091E800E5 -:101090008E778093E8005BDD1BC08823C9F49091B4 -:1010A00076029230A8F48091E800877F8093E80070 -:1010B000909370024CDD80917002882321F480911E -:1010C000E30087FF02C084E001C081E08EBBF0DA5C -:1010D0008091E80083FF0AC08091E800877F8093B9 -:1010E000E8008091EB0080628093EB00AC960FB635 -:1010F000F894DEBF0FBECDBFCF91DF911F91089551 -:1011000008951F938EB38823A9F08091E9008F7012 -:101110009091EC0090FF02C010E801C010E0182B85 -:101120001092E9008091E80083FF01C088DE1F7003 -:101130001093E9001F910895CF93DF93EC01809104 -:10114000E80083FFA2C0888190E02091780230916E -:1011500079022817390709F098C080917502813209 -:1011600069F0823220F4803209F08FC03CC08232B4 -:1011700009F46AC0833209F088C079C08091740292 -:10118000813A09F082C08091E800877F8093E8006F -:101190008091E80080FFFCCF8C899D89AE89BF8952 -:1011A0008093F100292F3A2F4B2F55272093F100E0 -:1011B0009D01442755272093F1008B2F9927AA27BB -:1011C000BB278093F100888D8093F100898D8093F7 -:1011D000F1008A8D8093F1008091E8008E778093F2 -:1011E000E800B5DC52C080917402813209F04DC034 -:1011F0008091E800877F8093E80004C08EB3882345 -:1012000009F443C08091E80082FFF8CF3091F100EB -:101210002091F1009091F1008091F1003C8B2D8B99 -:101220009E8B8F8B8091F100888F8091F100898F48 -:101230008091F1008A8F8091E8008B778093E8009D -:1012400086DCCE0165DA21C0809174028132E9F436 -:101250008091E800877F8093E80079DC80917602B6 -:1012600090917702998B888BCE01D4D00EC080915B -:101270007402813251F48091E800877F8093E80006 -:1012800066DCCE0160917602C5D0DF91CF910895E2 -:10129000CF93DF93EC014096FC018BE0DF011D92C0 -:1012A0008A95E9F782E08C83898783E08E87CE0177 -:1012B000019661E008DC882359F0CE01069661E0D2 -:1012C00002DC882329F0CE010B9661E0FCDB01C033 -:1012D00080E0DF91CF910895DF93CF930F92CDB748 -:1012E000DEB7FC018EB38430F9F424893589468950 -:1012F00057892115310541055105B1F081818F7064 -:101300008093E9008091E80085FD0AC08091E800A3 -:101310008E778093E800698339DC6981882329F41A -:101320006093F10080E001C082E00F90CF91DF91E7 -:101330000895FC018EB3843019F5248935894689D6 -:1013400057892115310541055105D1F081818F70F3 -:101350008093E9008091F2008823A1F09091E80049 -:101360008091E8008E778093E80095FD0DC00EDC3B -:10137000882359F49091E8009E779093E8000895AF -:1013800082E0089580E0089580E008952EB324302F -:1013900099F4FC012489358946895789211531053D -:1013A0004105510549F021812F702093E9002091DA -:1013B000E80020FF01C0BDCF0895FC018EB384304A -:1013C00029F5248935894689578921153105410533 -:1013D0005105E1F086818F708093E9008091E800EB -:1013E00082FF14C08091F200882321F02091F10047 -:1013F00030E002C02FEF3FEF8091F200882341F4EC -:101400008091E8008B778093E80002C02FEF3FEFD8 -:10141000C901089508955058BB27AA270ED070C15E -:1014200061D130F066D120F031F49F3F11F41EF409 -:1014300056C10EF4E095E7FB4CC1E92F72D180F361 -:10144000BA17620773078407950718F071F49EF5C1 -:101450008AC10EF4E0950B2EBA2FA02D0B01B90115 -:1014600090010C01CA01A0011124FF27591B99F01A -:10147000593F50F4503E68F11A16F040A22F232F26 -:10148000342F4427585FF3CF469537952795A79576 -:10149000F0405395C9F77EF41F16BA0B620B730B1D -:1014A000840BBAF09150A1F0FF0FBB1F661F771F8E -:1014B000881FC2F70EC0BA0F621F731F841F48F443 -:1014C000879577956795B795F7959E3F08F0B3CFC9 -:1014D0009395880F08F09927EE0F979587950895B3 -:1014E000D4D008F481E008950CD00AC102D140F0B4 -:1014F000F9D030F021F45F3F19F0EBC0511134C145 -:10150000EEC00FD198F39923C9F35523B1F3951B7E -:10151000550BBB27AA2762177307840738F09F5F14 -:101520005F4F220F331F441FAA1FA9F333D00E2E83 -:101530003AF0E0E830D091505040E695001CCAF7F0 -:1015400029D0FE2F27D0660F771F881FBB1F2617B5 -:1015500037074807AB07B0E809F0BB0B802DBF0188 -:10156000FF2793585F4F2AF09E3F510568F0B1C0A6 -:10157000FBC05F3FECF3983EDCF38695779567956B -:10158000B795F7959F5FC9F7880F911D9695879539 -:1015900097F90895E1E0660F771F881FBB1F621758 -:1015A00073078407BA0720F0621B730B840BBA0B16 -:1015B000EE1F88F7E0950895BCD088F09F5790F013 -:1015C000B92F9927B751A0F0D1F0660F771F881F68 -:1015D000991F1AF0BA95C9F712C0B13081F0C3D083 -:1015E000B1E00895C0C0672F782F8827B85F39F021 -:1015F000B93FCCF3869577956795B395D9F73EF4C7 -:1016000090958095709561957F4F8F4F9F4F08956E -:10161000E89409C097FB3EF490958095709561958C -:101620007F4F8F4F9F4F9923A9F0F92F96E9BB2742 -:101630009395F695879577956795B795F111F8CFBE -:10164000FAF4BB0F11F460FF1BC06F5F7F4F8F4F29 -:101650009F4F16C0882311F096E911C0772321F01F -:101660009EE8872F762F05C0662371F096E8862FB7 -:1016700070E060E02AF09A95660F771F881FDAF70E -:10168000880F9695879597F90895990F0008550F3B -:10169000AA0BE0E8FEEF16161706E807F907C0F0F8 -:1016A00012161306E407F50798F0621B730B840B00 -:1016B000950B39F40A2661F0232B242B252B21F4DA -:1016C00008950A2609F4A140A6958FEF811D811D7A -:1016D000089597F99F6780E870E060E008959FEFB4 -:1016E00080EC089500240A941616170618060906B9 -:1016F000089500240A941216130614060506089588 -:10170000092E0394000C11F4882352F0BB0F40F40F -:10171000BF2B11F460FF04C06F5F7F4F8F4F9F4F4F -:10172000089557FD9058440F551F59F05F3F71F0D1 -:101730004795880F97FB991F61F09F3F79F0879538 -:101740000895121613061406551FF2CF4695F1DFC1 -:1017500008C0161617061806991FF1CF8695710551 -:10176000610508940895E894BB2766277727CB0185 -:1017700097F908958ADF08F48FEF0895AA1BBB1B21 -:1017800051E107C0AA1FBB1FA617B70710F0A61B81 -:10179000B70B881F991F5A95A9F780959095BC01A2 -:0817A000CD010895F894FFCF7C -:1017A8006C6566740A0D0072696768740A0D0075C5 -:1017B800700A0D00646F776E0A0D006261636B0A30 -:1017C8000D00656E7465720A0D000083100000013B -:1017D8000410000001820800000100000000000061 -:0817E8000000000000302000A9 +:100470007F02E4DE809389028091890208958BE3F4 +:1004800080937F0283E68093800284E080938102E0 +:10049000D5DE8DE380937F02D1DE89E380937F02F6 +:1004A00010928602CBDE8FEF91EEA4E08150904057 +:1004B000A040E1F700C0000008958BE380937F0225 +:1004C00083E68093800281E080938102B7DE8FEF24 +:1004D00091EEA4E081509040A040E1F700C0000000 +:1004E000089580918902882351F08091800286FFCF +:1004F00004C081958F73819508958F73089580E06E +:10050000089580918902882351F08091810286FFAD +:1005100004C081958F73819508958F73089580E04D +:1005200008951F938FB7F89420916C0130916D015D +:100530008FBF80916A0190916B012817390749F0AC +:1005400085E491E084D7BC0197FD03C082E691E089 +:100550000FDE2FB7F8948091F8019091F9012FBF29 +:10056000009701F1209146012F702093E90020911E +:10057000E80020FF17C08031910510F08FE090E077 +:10058000182F0EC0E091F001F091F10185E491E0A7 +:100590006081ECD61150882329F48EEE91E003DEC1 +:1005A000112381F72FB7F89480916C0190916D0120 +:1005B0002FBF009749F082E691E0F5DD9091C800E9 +:1005C00095FFFCCF8093CE0085E491E029D7E3D559 +:1005D0001F91089584B7877F84BF88E10FB6F89490 +:1005E00080936000109260000FBE90E080E80FB62C +:1005F000F89480936100909361000FBE7CC30895CE +:10060000089585E491E08EC685E491E0DFC51F92F0 +:100610000F920FB60F9211242F933F934F935F9336 +:100620006F937F938F939F93AF93BF93EF93FF93BA +:100630006091CE008EB3843019F48EEE91E098DD97 +:10064000FF91EF91BF91AF919F918F917F916F91AA +:100650005F914F913F912F910F900FBE0F901F9080 +:1006600018958F929F92AF92BF92CF92DF92EF92A6 +:10067000FF921F93FC01A18DA150A23028F4B0E09D +:10068000A05ABE4F1C9101C010E0808D823009F449 +:100690001860828D873031F0883031F0863029F44F +:1006A000126003C0146001C016601092C90010925D +:1006B000C8001092CA00C488D588E688F788C701A8 +:1006C000B6019695879577956795ECD720E034E24B +:1006D00044EF59E4EBD64B015C01C701B601E2D708 +:1006E0009B01AC01C501B40149D720E030E040E8EE +:1006F0005FE3DBD6ABD77093CD006093CC00109353 +:10070000CA0082E08093C80088E98093C9001F91E5 +:10071000FF90EF90DF90CF90BF90AF909F908F9021 +:100720000895682F8EB3843019F48EEE91E020CDB9 +:100730000895EF92FF92CF93DF93E82EE7017E01B9 +:10074000F92EE70101C0EDDF89918823E1F7DF9100 +:10075000CF91FF90EF9008952F923F924F925F922A +:100760006F927F928F929F92AF92BF92CF92DF92C1 +:10077000EF92FF920F931F93CF93DF937B018C0136 +:10078000822F90E0FA01E80FF91F1082D22EDA943E +:100790004D2C552447FC5094EA01C40DD51DAA24C4 +:1007A000BB24BAE06B2E712C812C912C1C01089477 +:1007B00021083108A0E2CA2E22C0E114F10401058B +:1007C000110541F4C501840D951D8215930514F49E +:1007D000C88208C0C801B701A40193010E94080C97 +:1007E000605D6883C801B701A40193010E94080CF1 +:1007F00079018A01DA9421970894A108B108D7FEFB +:10080000DCCFDF91CF911F910F91FF90EF90DF90A0 +:10081000CF90BF90AF909F908F907F906F905F90A0 +:100820004F903F902F900895CF92DF92EF92FF92DA +:100830000F931F93DF93CF93CDB7DEB760970FB6BB +:10084000F894DEBF0FBECDBFC5DE82E691E06EE656 +:1008500071E0C2DC8EEE91E06AEF71E0BDDC78946D +:10086000FDDD8FEF99E6A8E181509040A040E1F7CF +:1008700000C00000789403DE02DE80E091E059DFE2 +:100880001CDEDD248E010F5F1F4FEE24FF2449DEA6 +:100890000894E11CF11C90EDE91697E0F906B9F710 +:1008A000E5DD2FDEE82E1DDE2E2D332727FD3095CA +:1008B0002C0D311D2F3F310509F024F437FD05C003 +:1008C000CE0C04C0CC24CA9401C0CC24282F3327DA +:1008D00027FD30952D0D311D2F3F310509F024F4F2 +:1008E00037FD05C0D80E04C0DD24DA9401C0DD2434 +:1008F00081E391E01EDF6C2D70E080E090E0A801C4 +:1009000024E02ADFC80115DF89E391E012DF6D2DB5 +:1009100070E080E090E0A80124E01EDFC80109DF5C +:1009200083E491E006DFB1CF923029F0933041F0BB +:100930009130E9F417C02EE330E0EAEAF0E01BC0A2 +:10094000813041F0813018F0823089F406C0E8EE41 +:10095000F0E005C0ECEEF0E002C0E6E0F1E024914A +:1009600030E009C022E130E0E8E9F0E004C020E036 +:1009700030E0E0E0F0E0DA011196FC93EE93C9017B +:100980000895282F392FF9018091940290919502B2 +:100990008617970718F4BC0120E034C06115710573 +:1009A000D9F78091E8008E778093E800F5CF8EB379 +:1009B0008823E9F18530B9F18091E80083FD35C0E5 +:1009C0008091E80082FD29C08091E80080FF1AC074 +:1009D0008091F20090E006C021912093F1006150D7 +:1009E000704001966115710519F088309105A0F3EA +:1009F00021E08830910509F020E08091E8008E77B1 +:100A00008093E8006115710591F6222381F605C0F7 +:100A10008EB3882361F0853061F08091E80082FF19 +:100A2000F7CF80E0089583E0089581E0089582E0A3 +:100A3000089583E00895E82FF92F80919402909112 +:100A400095028617970718F4BC0120E036C061159F +:100A50007105D9F78091E8008E778093E800F5CF93 +:100A60008EB3882309F43EC08530C1F18091E8003F +:100A700083FD36C08091E80082FD2AC08091E800A5 +:100A800080FF1BC08091F20090E007C0249120936A +:100A9000F10031966150704001966115710519F0B1 +:100AA0008830910598F321E08830910509F020E025 +:100AB0008091E8008E778093E8006115710581F6DA +:100AC000222371F605C08EB3882361F0853061F072 +:100AD0008091E80082FFF7CF80E0089583E00895D9 +:100AE00081E0089582E0089583E00895982F2CC056 +:100AF000292F2F702093E900981739F07091EC009E +:100B00002091ED005091F00003C0242F762F50E08B +:100B100021FF19C03091EB003E7F3093EB00309104 +:100B2000ED003D7F3093ED003091EB00316030936C +:100B3000EB007093EC002093ED005093F0002091B7 +:100B4000EE0027FF08C09F5F953090F28F70809372 +:100B5000E90081E0089580E00895EF92FF920F93FD +:100B60001F93CF93DF93162FE82EE7017E01F92E16 +:100B7000E70100E02AC09881992329F16B81E9817E +:100B8000FA812C81892F8F70853018F56295660F58 +:100B9000660F607C991F9927991F692B223010F0EE +:100BA00096E001C092E028E030E040E003C04F5FF3 +:100BB000220F331F2E173F07D0F34295407F492B5A +:100BC00095DF882331F00F5F25960117A0F281E0B1 +:100BD00001C080E0DF91CF911F910F91FF90EF90C6 +:100BE000089580918E0287FF11C003C08EB38823C1 +:100BF000B1F08091E80082FFF9CF8091E8008B7717 +:100C00008093E80008958EB3882349F08091E8002E +:100C100080FFF9CF8091E8008E778093E8000895F7 +:100C20008091E4009091E50044E62091EC0020FFE3 +:100C300025C02091E80020FD15C02EB32223A1F08D +:100C40002530A1F02091EB0025FD12C02091E40099 +:100C50003091E5002817390741F3442359F04150FA +:100C6000C901E3CF80E0089582E0089583E008950C +:100C700081E0089584E0089580E008952091E800DF +:100C800022FFDBCFF9CF40D042D08091D8008F77C0 +:100C90008093D8008091D80080688093D80080919C +:100CA000D8008F7D8093D80084E089BD86E089BD1F +:100CB00009B400FEFDCF1EBA10928A0210928C0277 +:100CC00010928B0280E060E042E010DF8091E10052 +:100CD0008E7F8093E1008091E20081608093E2004A +:100CE0008091E20088608093E2008091E0008E7F36 +:100CF0008093E0000895E3E6F0E080818E7F8083BA +:100D000081E080938D02BFCF1092E200089510928F +:100D1000E10008951F920F920FB60F9211242F93A6 +:100D20003F934F935F936F937F938F939F93AF9373 +:100D3000BF93EF93FF938091E10082FF0AC08091FF +:100D4000E20082FF06C08091E1008B7F8093E1008A +:100D500021D28091E10080FF16C08091E20080FFE7 +:100D600012C08091E2008E7F8093E2008091E200C9 +:100D700080618093E2008091D80080628093D800E7 +:100D800019BC1EBA3DDC8091E10084FF2CC080912B +:100D9000E20084FF28C084E089BD86E089BD09B4F3 +:100DA00000FEFDCF8091D8008F7D8093D800809188 +:100DB000E1008F7E8093E1008091E2008F7E80933E +:100DC000E2008091E20081608093E20080918A02DB +:100DD000882321F48091E30087FF02C084E001C0F2 +:100DE00081E08EBB0CDC8091E10083FF26C0809106 +:100DF000E20083FF22C08091E100877F8093E100C1 +:100E000082E08EBB10928A028091E1008E7F8093F7 +:100E1000E1008091E2008E7F8093E2008091E20009 +:100E200080618093E20080E060E042E05FDE8091DC +:100E3000F00088608093F000ADD1FF91EF91BF91F9 +:100E4000AF919F918F917F916F915F914F913F9162 +:100E50002F910F900FBE0F901F9018951F920F9219 +:100E60000FB60F9211241F932F933F934F935F93CD +:100E70006F937F938F939F93AF93BF93EF93FF9362 +:100E80001091E9001F708091EC001092E9008091B0 +:100E9000F000877F8093F00078941BD01092E900D7 +:100EA0008091F00088608093F0001093E900FF913A +:100EB000EF91BF91AF919F918F917F916F915F91D2 +:100EC0004F913F912F911F910F900FBE0F901F9048 +:100ED00018951F93DF93CF93CDB7DEB7AC970FB6BE +:100EE000F894DEBF0FBECDBFEEE8F2E08091F100D6 +:100EF000819322E0E639F207C9F786DB8091E800AA +:100F000083FF30C180918E0220918F02253009F439 +:100F100084C0263040F42130A1F1213070F023301C +:100F200009F020C12EC0283009F4EFC0293009F49F +:100F3000FEC0263009F016C192C0803821F08238F8 +:100F400009F010C108C080918B0290918C02992306 +:100F500071F082600CC0809192028F708093E900E2 +:100F60009091EB0081E095FF80E01092E900909174 +:100F7000E800977F9093E8008093F1001092F100D1 +:100F8000CFC0882319F0823009F0ECC090E08F7157 +:100F90009070009729F08230910509F0E3C00BC0F2 +:100FA00080919002813009F0DDC0233009F080E0AB +:100FB00080938C022CC080919002882341F520916F +:100FC00092022F7009F4CEC02093E9008091EB00CB +:100FD00080FF1DC080918F02833021F48091EB004F +:100FE000806213C08091EB0080618093EB0081E010 +:100FF00090E002C0880F991F2A95E2F78093EA00DB +:101000001092EA008091EB0088608093EB001092D0 +:10101000E9008091E800877F86C0882309F0A2C09C +:10102000109190021F778091E3008078812B80934C +:10103000E3008091E800877F8093E800D2DD809113 +:10104000E80080FFFCCF8091E30080688093E3009C +:10105000112311F083E001C082E08EBB83C0805871 +:10106000823008F07FC0809190029091910223E03D +:101070008C3D920791F583E08C838AE28B835FB786 +:10108000F894DE01159680E090E04EE061E2E42FF6 +:10109000F0E060935700E49180FF03C0E295EF70A9 +:1010A0004F5FEF702E2F30E0EA3018F0295C3F4F91 +:1010B00002C0205D3F4F2D933D93019684319105F1 +:1010C00031F75FBF8091E800877F8093E800CE0111 +:1010D00003966AE270E055DC12C060919202AE01A4 +:1010E0004F5F5F4F21DCBC01009709F43BC080914A +:1010F000E800877F8093E80089819A819CDC809159 +:10110000E8008B778093E8002DC0803859F58091F6 +:10111000E800877F8093E80080918A028093F10045 +:101120008091E8008E778093E8005BDD1BC0882308 +:10113000C9F4909190029230A8F48091E800877FE2 +:101140008093E80090938A024CDD80918A02882384 +:1011500021F48091E30087FF02C084E001C081E0B8 +:101160008EBB4FDA8091E80083FF0AC08091E800CF +:10117000877F8093E8008091EB0080628093EB0092 +:10118000AC960FB6F894DEBF0FBECDBFCF91DF9106 +:101190001F91089508951F938EB38823A9F080911D +:1011A000E9008F709091EC0090FF02C010E801C040 +:1011B00010E0182B1092E9008091E80083FF01C035 +:1011C00088DE1F701093E9001F910895CF93DF937D +:1011D000EC018091E80083FFA2C0888190E020911B +:1011E0009202309193022817390709F098C0809134 +:1011F0008F02813269F0823220F4803209F08FC090 +:101200003CC0823209F46AC0833209F088C079C0D8 +:1012100080918E02813A09F082C08091E800877F38 +:101220008093E8008091E80080FFFCCF8C899D8945 +:10123000AE89BF898093F100292F3A2F4B2F552774 +:101240002093F1009D01442755272093F1008B2F17 +:101250009927AA27BB278093F100888D8093F100FE +:10126000898D8093F1008A8D8093F1008091E80050 +:101270008E778093E800B5DC52C080918E02813277 +:1012800009F04DC08091E800877F8093E80004C09A +:101290008EB3882309F443C08091E80082FFF8CF21 +:1012A0003091F1002091F1009091F1008091F100D6 +:1012B0003C8B2D8B9E8B8F8B8091F100888F809142 +:1012C000F100898F8091F1008A8F8091E8008B77FF +:1012D0008093E80086DCCE01C4D921C080918E02C3 +:1012E0008132E9F48091E800877F8093E80079DC1F +:1012F0008091900290919102998B888BCE01D4D0ED +:101300000EC080918E02813251F48091E800877F77 +:101310008093E80066DCCE0160919002C5D0DF9139 +:10132000CF910895CF93DF93EC014096FC018BE0C1 +:10133000DF011D928A95E9F782E08C83898783E03B +:101340008E87CE01019661E008DC882359F0CE013A +:10135000069661E002DC882329F0CE010B9661E05D +:10136000FCDB01C080E0DF91CF910895DF93CF9344 +:101370000F92CDB7DEB7FC018EB38430F9F4248927 +:101380003589468957892115310541055105B1F047 +:1013900081818F708093E9008091E80085FD0AC00B +:1013A0008091E8008E778093E800698339DC698159 +:1013B000882329F46093F10080E001C082E00F905F +:1013C000CF91DF910895FC018EB3843019F5248903 +:1013D0003589468957892115310541055105D1F0D7 +:1013E00081818F708093E9008091F2008823A1F0C1 +:1013F0009091E8008091E8008E778093E80095FD59 +:101400000DC00EDC882359F49091E8009E779093EC +:10141000E800089582E0089580E0089580E008954E +:101420002EB3243099F4FC012489358946895789E3 +:10143000211531054105510549F021812F70209377 +:10144000E9002091E80020FF01C0BDCF0895FC0114 +:101450008EB3843029F52489358946895789211529 +:10146000310541055105E1F086818F708093E900D7 +:101470008091E80082FF14C08091F200882321F05F +:101480002091F10030E002C02FEF3FEF8091F20099 +:10149000882341F48091E8008B778093E80002C0B4 +:1014A0002FEF3FEFC901089508955058BB27AA2791 +:1014B0000ED070C161D130F066D120F031F49F3F81 +:1014C00011F41EF456C10EF4E095E7FB4CC1E92F70 +:1014D00072D180F3BA17620773078407950718F073 +:1014E00071F49EF58AC10EF4E0950B2EBA2FA02D53 +:1014F0000B01B90190010C01CA01A0011124FF27C1 +:10150000591B99F0593F50F4503E68F11A16F040BB +:10151000A22F232F342F4427585FF3CF46953795BA +:101520002795A795F0405395C9F77EF41F16BA0B7F +:10153000620B730B840BBAF09150A1F0FF0FBB1F2D +:10154000661F771F881FC2F70EC0BA0F621F731F76 +:10155000841F48F4879577956795B795F7959E3FD3 +:1015600008F0B3CF9395880F08F09927EE0F979561 +:1015700087950895D4D008F481E008950CD00AC16D +:1015800002D140F0F9D030F021F45F3F19F0EBC008 +:10159000511134C1EEC00FD198F39923C9F35523EB +:1015A000B1F3951B550BBB27AA2762177307840756 +:1015B00038F09F5F5F4F220F331F441FAA1FA9F30C +:1015C00033D00E2E3AF0E0E830D091505040E695FE +:1015D000001CCAF729D0FE2F27D0660F771F881F5F +:1015E000BB1F261737074807AB07B0E809F0BB0B4E +:1015F000802DBF01FF2793585F4F2AF09E3F510572 +:1016000068F0B1C0FBC05F3FECF3983EDCF3869519 +:1016100077956795B795F7959F5FC9F7880F911DE7 +:101620009695879597F90895E1E0660F771F881FD3 +:10163000BB1F621773078407BA0720F0621B730B86 +:10164000840BBA0BEE1F88F7E0950895BCD088F0A4 +:101650009F5790F0B92F9927B751A0F0D1F0660F9E +:10166000771F881F991F1AF0BA95C9F712C0B130B9 +:1016700081F0C3D0B1E00895C0C0672F782F8827CC +:10168000B85F39F0B93FCCF3869577956795B395F8 +:10169000D9F73EF490958095709561957F4F8F4F67 +:1016A0009F4F0895E89409C097FB3EF4909580956C +:1016B000709561957F4F8F4F9F4F9923A9F0F92F18 +:1016C00096E9BB279395F695879577956795B79596 +:1016D000F111F8CFFAF4BB0F11F460FF1BC06F5F7C +:1016E0007F4F8F4F9F4F16C0882311F096E911C08E +:1016F000772321F09EE8872F762F05C0662371F0AF +:1017000096E8862F70E060E02AF09A95660F771FC2 +:10171000881FDAF7880F9695879597F90895990F9E +:101720000008550FAA0BE0E8FEEF16161706E807AB +:10173000F907C0F012161306E407F50798F0621BCC +:10174000730B840B950B39F40A2661F0232B242BA1 +:10175000252B21F408950A2609F4A140A6958FEFC0 +:10176000811D811D089597F99F6780E870E060E012 +:1017700008959FEF80EC089500240A94161617062A +:1017800018060906089500240A9412161306140672 +:1017900005060895092E0394000C11F4882352F0D5 +:1017A000BB0F40F4BF2B11F460FF04C06F5F7F4F8D +:1017B0008F4F9F4F089557FD9058440F551F59F074 +:1017C0005F3F71F04795880F97FB991F61F09F3F2E +:1017D00079F087950895121613061406551FF2CF57 +:1017E0004695F1DF08C0161617061806991FF1CFA7 +:1017F00086957105610508940895E894BB276627CE +:101800007727CB0197F908958ADF08F48FEF0895C1 +:10181000A1E21A2EAA1BBB1BFD010DC0AA1FBB1FF4 +:10182000EE1FFF1FA217B307E407F50720F0A21B66 +:10183000B30BE40BF50B661F771F881F991F1A94D3 +:1018400069F760957095809590959B01AC01BD01FD +:08185000CF010895F894FFCFC9 +:10185800796F752073656C65637465642074686559 +:101868002072656C617469766520706F736974693C +:101878006F6E2064656D6F206D6F6475733A0A0D25 +:1018880000785F706F733A20002020795F706F7363 +:101898003A20000D00008310000001041000000130 +:1018A80082080000010000000000000000000000A5 +:0218B8003020DE :00000001FF diff --git a/firmware/USBtoSerial.lss b/firmware/USBtoSerial.lss index 173245a..1db7b0d 100644 --- a/firmware/USBtoSerial.lss +++ b/firmware/USBtoSerial.lss @@ -3,35 +3,35 @@ USBtoSerial.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn - 0 .data 00000048 00800100 000017a8 0000183c 2**0 + 0 .data 00000062 00800100 00001858 000018ec 2**0 CONTENTS, ALLOC, LOAD, DATA - 1 .text 000017a8 00000000 00000000 00000094 2**1 + 1 .text 00001858 00000000 00000000 00000094 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE - 2 .bss 00000134 00800148 00800148 00001884 2**0 + 2 .bss 00000134 00800162 00800162 0000194e 2**0 ALLOC - 3 .stab 0000228c 00000000 00000000 00001884 2**2 + 3 .stab 0000228c 00000000 00000000 00001950 2**2 CONTENTS, READONLY, DEBUGGING - 4 .stabstr 0000044f 00000000 00000000 00003b10 2**0 + 4 .stabstr 0000044f 00000000 00000000 00003bdc 2**0 CONTENTS, READONLY, DEBUGGING - 5 .debug_aranges 00000538 00000000 00000000 00003f5f 2**0 + 5 .debug_aranges 00000538 00000000 00000000 0000402b 2**0 CONTENTS, READONLY, DEBUGGING - 6 .debug_pubnames 00000e11 00000000 00000000 00004497 2**0 + 6 .debug_pubnames 00000e11 00000000 00000000 00004563 2**0 CONTENTS, READONLY, DEBUGGING - 7 .debug_info 00008d35 00000000 00000000 000052a8 2**0 + 7 .debug_info 00008d6f 00000000 00000000 00005374 2**0 CONTENTS, READONLY, DEBUGGING - 8 .debug_abbrev 00002195 00000000 00000000 0000dfdd 2**0 + 8 .debug_abbrev 000021a4 00000000 00000000 0000e0e3 2**0 CONTENTS, READONLY, DEBUGGING - 9 .debug_line 00007586 00000000 00000000 00010172 2**0 + 9 .debug_line 00007605 00000000 00000000 00010287 2**0 CONTENTS, READONLY, DEBUGGING - 10 .debug_frame 00000830 00000000 00000000 000176f8 2**2 + 10 .debug_frame 00000830 00000000 00000000 0001788c 2**2 CONTENTS, READONLY, DEBUGGING - 11 .debug_str 00003bf7 00000000 00000000 00017f28 2**0 + 11 .debug_str 00003bf7 00000000 00000000 000180bc 2**0 CONTENTS, READONLY, DEBUGGING - 12 .debug_loc 000045ea 00000000 00000000 0001bb1f 2**0 + 12 .debug_loc 00004645 00000000 00000000 0001bcb3 2**0 CONTENTS, READONLY, DEBUGGING - 13 .debug_pubtypes 00001111 00000000 00000000 00020109 2**0 + 13 .debug_pubtypes 00001111 00000000 00000000 000202f8 2**0 CONTENTS, READONLY, DEBUGGING - 14 .debug_ranges 00000790 00000000 00000000 0002121a 2**0 + 14 .debug_ranges 00000790 00000000 00000000 00021409 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: @@ -71,9 +71,9 @@ Disassembly of section .text: 26: 00 00 nop 28: a2 c0 rjmp .+324 ; 0x16e <__bad_interrupt> 2a: 00 00 nop - 2c: 29 c6 rjmp .+3154 ; 0xc80 <__vector_11> + 2c: 73 c6 rjmp .+3302 ; 0xd14 <__vector_11> 2e: 00 00 nop - 30: cb c6 rjmp .+3478 ; 0xdc8 <__vector_12> + 30: 15 c7 rjmp .+3626 ; 0xe5c <__vector_12> 32: 00 00 nop 34: 9c c0 rjmp .+312 ; 0x16e <__bad_interrupt> 36: 00 00 nop @@ -95,7 +95,7 @@ Disassembly of section .text: 56: 00 00 nop 58: 8a c0 rjmp .+276 ; 0x16e <__bad_interrupt> 5a: 00 00 nop - 5c: 2f c3 rjmp .+1630 ; 0x6bc <__vector_23> + 5c: d8 c2 rjmp .+1456 ; 0x60e <__vector_23> 5e: 00 00 nop 60: 86 c0 rjmp .+268 ; 0x16e <__bad_interrupt> 62: 00 00 nop @@ -160,18 +160,18 @@ Disassembly of section .text: 142: 11 e0 ldi r17, 0x01 ; 1 144: a0 e0 ldi r26, 0x00 ; 0 146: b1 e0 ldi r27, 0x01 ; 1 - 148: e8 ea ldi r30, 0xA8 ; 168 - 14a: f7 e1 ldi r31, 0x17 ; 23 + 148: e8 e5 ldi r30, 0x58 ; 88 + 14a: f8 e1 ldi r31, 0x18 ; 24 14c: 02 c0 rjmp .+4 ; 0x152 <__do_copy_data+0x10> 14e: 05 90 lpm r0, Z+ 150: 0d 92 st X+, r0 - 152: a8 34 cpi r26, 0x48 ; 72 + 152: a2 36 cpi r26, 0x62 ; 98 154: b1 07 cpc r27, r17 156: d9 f7 brne .-10 ; 0x14e <__do_copy_data+0xc> 00000158 <__do_clear_bss>: 158: 12 e0 ldi r17, 0x02 ; 2 - 15a: a8 e4 ldi r26, 0x48 ; 72 + 15a: a2 e6 ldi r26, 0x62 ; 98 15c: b1 e0 ldi r27, 0x01 ; 1 15e: 01 c0 rjmp .+2 ; 0x162 <.do_clear_bss_start> @@ -179,11 +179,11 @@ Disassembly of section .text: 160: 1d 92 st X+, r1 00000162 <.do_clear_bss_start>: - 162: ac 37 cpi r26, 0x7C ; 124 + 162: a6 39 cpi r26, 0x96 ; 150 164: b1 07 cpc r27, r17 166: e1 f7 brne .-8 ; 0x160 <.do_clear_bss_loop> - 168: 4e d3 rcall .+1692 ; 0x806
- 16a: 0c 94 d2 0b jmp 0x17a4 ; 0x17a4 <_exit> + 168: 5f d3 rcall .+1726 ; 0x828
+ 16a: 0c 94 2a 0c jmp 0x1854 ; 0x1854 <_exit> 0000016e <__bad_interrupt>: 16e: 48 cf rjmp .-368 ; 0x0 <__vectors> @@ -394,9 +394,9 @@ ISR( TIMER0_OVF_vect) { 20a: 11 24 eor r1, r1 20c: 8f 93 push r24 t0ovfcount++; - 20e: 80 91 6e 02 lds r24, 0x026E + 20e: 80 91 88 02 lds r24, 0x0288 212: 8f 5f subi r24, 0xFF ; 255 - 214: 80 93 6e 02 sts 0x026E, r24 + 214: 80 93 88 02 sts 0x0288, r24 } 218: 8f 91 pop r24 21a: 0f 90 pop r0 @@ -410,7 +410,7 @@ ISR( TIMER0_OVF_vect) { uint16_t t0ext(void) { return (t0ovfcount * 256 + (u16) TCNT0); // return current counter value 224: 86 b5 in r24, 0x26 ; 38 - 226: 30 91 6e 02 lds r19, 0x026E + 226: 30 91 88 02 lds r19, 0x0288 22a: 20 e0 ldi r18, 0x00 ; 0 22c: 28 0f add r18, r24 22e: 31 1d adc r19, r1 @@ -425,7 +425,7 @@ void t0rst(void) { TCNT0 = 0; // set counter to zero 234: 16 bc out 0x26, r1 ; 38 t0ovfcount = 0; // set overflow counter to zero - 236: 10 92 6e 02 sts 0x026E, r1 + 236: 10 92 88 02 sts 0x0288, r1 } 23a: 08 95 ret @@ -463,12 +463,12 @@ u08 adb(void) { 256: bc 01 movw r22, r24 258: 80 e0 ldi r24, 0x00 ; 0 25a: 90 e0 ldi r25, 0x00 ; 0 - 25c: 0e 94 08 0b call 0x1610 ; 0x1610 <__floatunsisf> + 25c: 0e 94 52 0b call 0x16a4 ; 0x16a4 <__floatunsisf> 260: 20 e0 ldi r18, 0x00 ; 0 262: 30 e8 ldi r19, 0x80 ; 128 264: 4e e0 ldi r20, 0x0E ; 14 266: 53 e4 ldi r21, 0x43 ; 67 - 268: 0e 94 70 0a call 0x14e0 ; 0x14e0 <__cmpsf2> + 268: 0e 94 ba 0a call 0x1574 ; 0x1574 <__cmpsf2> 26c: 87 fd sbrc r24, 7 26e: f2 cf rjmp .-28 ; 0x254 ; // Warteschleife @@ -495,12 +495,12 @@ u08 adb(void) { 282: bc 01 movw r22, r24 284: 80 e0 ldi r24, 0x00 ; 0 286: 90 e0 ldi r25, 0x00 ; 0 - 288: 0e 94 08 0b call 0x1610 ; 0x1610 <__floatunsisf> + 288: 0e 94 52 0b call 0x16a4 ; 0x16a4 <__floatunsisf> 28c: 20 e0 ldi r18, 0x00 ; 0 28e: 30 e0 ldi r19, 0x00 ; 0 290: 4c e8 ldi r20, 0x8C ; 140 292: 52 e4 ldi r21, 0x42 ; 66 - 294: 0e 94 70 0a call 0x14e0 ; 0x14e0 <__cmpsf2> + 294: 0e 94 ba 0a call 0x1574 ; 0x1574 <__cmpsf2> 298: 87 fd sbrc r24, 7 29a: f2 cf rjmp .-28 ; 0x280 ; @@ -513,12 +513,12 @@ u08 adb(void) { 2a2: bc 01 movw r22, r24 2a4: 80 e0 ldi r24, 0x00 ; 0 2a6: 90 e0 ldi r25, 0x00 ; 0 - 2a8: 0e 94 08 0b call 0x1610 ; 0x1610 <__floatunsisf> + 2a8: 0e 94 52 0b call 0x16a4 ; 0x16a4 <__floatunsisf> 2ac: 20 e0 ldi r18, 0x00 ; 0 2ae: 30 e0 ldi r19, 0x00 ; 0 2b0: 48 e4 ldi r20, 0x48 ; 72 2b2: 53 e4 ldi r21, 0x43 ; 67 - 2b4: 0e 94 70 0a call 0x14e0 ; 0x14e0 <__cmpsf2> + 2b4: 0e 94 ba 0a call 0x1574 ; 0x1574 <__cmpsf2> 2b8: 87 fd sbrc r24, 7 2ba: f2 cf rjmp .-28 ; 0x2a0 2bc: 41 c0 rjmp .+130 ; 0x340 @@ -535,7 +535,7 @@ u08 adb(void) { if (adb_werte[z_byte] & bitpos) 2c4: e1 2e mov r14, r17 2c6: ff 24 eor r15, r15 - 2c8: 85 e6 ldi r24, 0x65 ; 101 + 2c8: 8f e7 ldi r24, 0x7F ; 127 2ca: 92 e0 ldi r25, 0x02 ; 2 2cc: e8 0e add r14, r24 2ce: f9 1e adc r15, r25 @@ -560,12 +560,12 @@ u08 adb(void) { 2e0: bc 01 movw r22, r24 2e2: 80 e0 ldi r24, 0x00 ; 0 2e4: 90 e0 ldi r25, 0x00 ; 0 - 2e6: 0e 94 08 0b call 0x1610 ; 0x1610 <__floatunsisf> + 2e6: 0e 94 52 0b call 0x16a4 ; 0x16a4 <__floatunsisf> 2ea: 20 e0 ldi r18, 0x00 ; 0 2ec: 30 e0 ldi r19, 0x00 ; 0 2ee: 4c e8 ldi r20, 0x8C ; 140 2f0: 52 e4 ldi r21, 0x42 ; 66 - 2f2: 0e 94 70 0a call 0x14e0 ; 0x14e0 <__cmpsf2> + 2f2: 0e 94 ba 0a call 0x1574 ; 0x1574 <__cmpsf2> 2f6: 87 fd sbrc r24, 7 2f8: f2 cf rjmp .-28 ; 0x2de 2fa: 0e c0 rjmp .+28 ; 0x318 @@ -576,12 +576,12 @@ u08 adb(void) { 2fe: bc 01 movw r22, r24 300: 80 e0 ldi r24, 0x00 ; 0 302: 90 e0 ldi r25, 0x00 ; 0 - 304: 0e 94 08 0b call 0x1610 ; 0x1610 <__floatunsisf> + 304: 0e 94 52 0b call 0x16a4 ; 0x16a4 <__floatunsisf> 308: 20 e0 ldi r18, 0x00 ; 0 30a: 30 e0 ldi r19, 0x00 ; 0 30c: 42 e0 ldi r20, 0x02 ; 2 30e: 53 e4 ldi r21, 0x43 ; 67 - 310: 0e 94 70 0a call 0x14e0 ; 0x14e0 <__cmpsf2> + 310: 0e 94 ba 0a call 0x1574 ; 0x1574 <__cmpsf2> 314: 87 fd sbrc r24, 7 316: f2 cf rjmp .-28 ; 0x2fc ; @@ -594,12 +594,12 @@ u08 adb(void) { 31e: bc 01 movw r22, r24 320: 80 e0 ldi r24, 0x00 ; 0 322: 90 e0 ldi r25, 0x00 ; 0 - 324: 0e 94 08 0b call 0x1610 ; 0x1610 <__floatunsisf> + 324: 0e 94 52 0b call 0x16a4 ; 0x16a4 <__floatunsisf> 328: 20 e0 ldi r18, 0x00 ; 0 32a: 30 e0 ldi r19, 0x00 ; 0 32c: 48 e4 ldi r20, 0x48 ; 72 32e: 53 e4 ldi r21, 0x43 ; 67 - 330: 0e 94 70 0a call 0x14e0 ; 0x14e0 <__cmpsf2> + 330: 0e 94 ba 0a call 0x1574 ; 0x1574 <__cmpsf2> 334: 87 fd sbrc r24, 7 336: f2 cf rjmp .-28 ; 0x31c ADB_POUT |= ADB_BIT; @@ -637,12 +637,12 @@ u08 adb(void) { 34e: bc 01 movw r22, r24 350: 80 e0 ldi r24, 0x00 ; 0 352: 90 e0 ldi r25, 0x00 ; 0 - 354: 0e 94 08 0b call 0x1610 ; 0x1610 <__floatunsisf> + 354: 0e 94 52 0b call 0x16a4 ; 0x16a4 <__floatunsisf> 358: 20 e0 ldi r18, 0x00 ; 0 35a: 30 e0 ldi r19, 0x00 ; 0 35c: 42 e0 ldi r20, 0x02 ; 2 35e: 53 e4 ldi r21, 0x43 ; 67 - 360: 0e 94 70 0a call 0x14e0 ; 0x14e0 <__cmpsf2> + 360: 0e 94 ba 0a call 0x1574 ; 0x1574 <__cmpsf2> 364: 87 fd sbrc r24, 7 366: f2 cf rjmp .-28 ; 0x34c ; @@ -655,19 +655,19 @@ u08 adb(void) { 36e: bc 01 movw r22, r24 370: 80 e0 ldi r24, 0x00 ; 0 372: 90 e0 ldi r25, 0x00 ; 0 - 374: 0e 94 08 0b call 0x1610 ; 0x1610 <__floatunsisf> + 374: 0e 94 52 0b call 0x16a4 ; 0x16a4 <__floatunsisf> 378: 20 e0 ldi r18, 0x00 ; 0 37a: 30 e0 ldi r19, 0x00 ; 0 37c: 48 e4 ldi r20, 0x48 ; 72 37e: 53 e4 ldi r21, 0x43 ; 67 - 380: 0e 94 70 0a call 0x14e0 ; 0x14e0 <__cmpsf2> + 380: 0e 94 ba 0a call 0x1574 ; 0x1574 <__cmpsf2> 384: 87 fd sbrc r24, 7 386: f2 cf rjmp .-28 ; 0x36c ; // Entscheidung, ob noch weitere Daten übertragen werden if (adb_werte[0] == COM_LISTEN3) - 388: 80 91 65 02 lds r24, 0x0265 + 388: 80 91 7f 02 lds r24, 0x027F 38c: 8b 33 cpi r24, 0x3B ; 59 38e: 29 f0 breq .+10 ; 0x39a anzahl_out = 2 + 1; @@ -706,12 +706,12 @@ u08 adb(void) { 3a8: bc 01 movw r22, r24 3aa: 80 e0 ldi r24, 0x00 ; 0 3ac: 90 e0 ldi r25, 0x00 ; 0 - 3ae: 0e 94 08 0b call 0x1610 ; 0x1610 <__floatunsisf> + 3ae: 0e 94 52 0b call 0x16a4 ; 0x16a4 <__floatunsisf> 3b2: 20 e0 ldi r18, 0x00 ; 0 3b4: 30 e0 ldi r19, 0x00 ; 0 3b6: 4a ef ldi r20, 0xFA ; 250 3b8: 53 e4 ldi r21, 0x43 ; 67 - 3ba: 0e 94 ba 0b call 0x1774 ; 0x1774 <__gesf2> + 3ba: 0e 94 04 0c call 0x1808 ; 0x1808 <__gesf2> 3be: 18 16 cp r1, r24 3c0: 0c f4 brge .+2 ; 0x3c4 3c2: 42 c0 rjmp .+132 ; 0x448 @@ -723,7 +723,7 @@ u08 adb(void) { while (!(ADB_PIN & ADB_BIT)) 3c8: 48 9b sbis 0x09, 0 ; 9 3ca: fe cf rjmp .-4 ; 0x3c8 - 3cc: c6 e6 ldi r28, 0x66 ; 102 + 3cc: c0 e8 ldi r28, 0x80 ; 128 3ce: d2 e0 ldi r29, 0x02 ; 2 3d0: 11 e0 ldi r17, 0x01 ; 1 3d2: 01 c0 rjmp .+2 ; 0x3d6 @@ -756,12 +756,12 @@ u08 adb(void) { 3e4: bc 01 movw r22, r24 3e6: 80 e0 ldi r24, 0x00 ; 0 3e8: 90 e0 ldi r25, 0x00 ; 0 - 3ea: 0e 94 08 0b call 0x1610 ; 0x1610 <__floatunsisf> + 3ea: 0e 94 52 0b call 0x16a4 ; 0x16a4 <__floatunsisf> 3ee: 20 e0 ldi r18, 0x00 ; 0 3f0: 30 e0 ldi r19, 0x00 ; 0 3f2: 48 e4 ldi r20, 0x48 ; 72 3f4: 53 e4 ldi r21, 0x43 ; 67 - 3f6: 0e 94 ba 0b call 0x1774 ; 0x1774 <__gesf2> + 3f6: 0e 94 04 0c call 0x1808 ; 0x1808 <__gesf2> 3fa: 18 16 cp r1, r24 3fc: 14 f4 brge .+4 ; 0x402 return (z_byte - 1); @@ -782,12 +782,12 @@ u08 adb(void) { 40e: bc 01 movw r22, r24 410: 80 e0 ldi r24, 0x00 ; 0 412: 90 e0 ldi r25, 0x00 ; 0 - 414: 0e 94 08 0b call 0x1610 ; 0x1610 <__floatunsisf> + 414: 0e 94 52 0b call 0x16a4 ; 0x16a4 <__floatunsisf> 418: 20 e0 ldi r18, 0x00 ; 0 41a: 30 e0 ldi r19, 0x00 ; 0 41c: 48 ec ldi r20, 0xC8 ; 200 41e: 52 e4 ldi r21, 0x42 ; 66 - 420: 0e 94 70 0a call 0x14e0 ; 0x14e0 <__cmpsf2> + 420: 0e 94 ba 0a call 0x1574 ; 0x1574 <__cmpsf2> 424: 87 ff sbrs r24, 7 426: 03 c0 rjmp .+6 ; 0x42e adb_werte[z_byte] += bitpos; @@ -874,12 +874,12 @@ void touchpad_init(void) { uint8_t touchpad_read(void) { adb_werte[0] = COM_TALK0; 46c: 8c e3 ldi r24, 0x3C ; 60 - 46e: 80 93 65 02 sts 0x0265, r24 + 46e: 80 93 7f 02 sts 0x027F, r24 adb_data_length = adb(); 472: e4 de rcall .-568 ; 0x23c - 474: 80 93 6f 02 sts 0x026F, r24 + 474: 80 93 89 02 sts 0x0289, r24 return adb_data_length; - 478: 80 91 6f 02 lds r24, 0x026F + 478: 80 91 89 02 lds r24, 0x0289 } 47c: 08 95 ret @@ -889,27 +889,27 @@ void touchpad_set_abs_mode(void) { // Auf Absolutmodus umschalten adb_werte[0] = COM_LISTEN3; 47e: 8b e3 ldi r24, 0x3B ; 59 - 480: 80 93 65 02 sts 0x0265, r24 + 480: 80 93 7f 02 sts 0x027F, r24 adb_werte[1] = BITS(0110,0011); 484: 83 e6 ldi r24, 0x63 ; 99 - 486: 80 93 66 02 sts 0x0266, r24 + 486: 80 93 80 02 sts 0x0280, r24 adb_werte[2] = 4; //CDM Modus 48a: 84 e0 ldi r24, 0x04 ; 4 - 48c: 80 93 67 02 sts 0x0267, r24 + 48c: 80 93 81 02 sts 0x0281, r24 adb(); 490: d5 de rcall .-598 ; 0x23c adb_werte[0] = COM_TALK1; 492: 8d e3 ldi r24, 0x3D ; 61 - 494: 80 93 65 02 sts 0x0265, r24 + 494: 80 93 7f 02 sts 0x027F, r24 adb(); // Werte holen 498: d1 de rcall .-606 ; 0x23c adb_werte[0] = COM_LISTEN1; 49a: 89 e3 ldi r24, 0x39 ; 57 - 49c: 80 93 65 02 sts 0x0265, r24 + 49c: 80 93 7f 02 sts 0x027F, r24 adb_werte[7] = 0x00; //Absolutmodus - 4a0: 10 92 6c 02 sts 0x026C, r1 + 4a0: 10 92 86 02 sts 0x0286, r1 adb(); 4a4: cb de rcall .-618 ; 0x23c #else @@ -931,4686 +931,4875 @@ void touchpad_set_abs_mode(void) { } 4b8: 08 95 ret -000004ba : - _delay_ms(100); +000004ba : -} +void touchpad_set_rel_mode_100dpi(void) { + // Auf Relativmodus umschalten + adb_werte[0] = COM_LISTEN3; + 4ba: 8b e3 ldi r24, 0x3B ; 59 + 4bc: 80 93 7f 02 sts 0x027F, r24 + adb_werte[1] = BITS(0110,0011); + 4c0: 83 e6 ldi r24, 0x63 ; 99 + 4c2: 80 93 80 02 sts 0x0280, r24 + adb_werte[2] = 1; //default modus: 100 dpi mouse + 4c6: 81 e0 ldi r24, 0x01 ; 1 + 4c8: 80 93 81 02 sts 0x0281, r24 + adb(); + 4cc: b7 de rcall .-658 ; 0x23c + 4ce: 8f ef ldi r24, 0xFF ; 255 + 4d0: 91 ee ldi r25, 0xE1 ; 225 + 4d2: a4 e0 ldi r26, 0x04 ; 4 + 4d4: 81 50 subi r24, 0x01 ; 1 + 4d6: 90 40 sbci r25, 0x00 ; 0 + 4d8: a0 40 sbci r26, 0x00 ; 0 + 4da: e1 f7 brne .-8 ; 0x4d4 + 4dc: 00 c0 rjmp .+0 ; 0x4de + 4de: 00 00 nop + _delay_ms(100); -uint8_t z_pressure(void) { - return ((adb_werte[5] & 0b01110000) >> 1) | (adb_werte[5] & 0b00000111); - 4ba: 80 91 6a 02 lds r24, 0x026A - 4be: 28 2f mov r18, r24 - 4c0: 30 e0 ldi r19, 0x00 ; 0 - 4c2: 20 77 andi r18, 0x70 ; 112 - 4c4: 30 70 andi r19, 0x00 ; 0 - 4c6: 35 95 asr r19 - 4c8: 27 95 ror r18 - 4ca: 87 70 andi r24, 0x07 ; 7 -} - 4cc: 82 2b or r24, r18 - 4ce: 08 95 ret - -000004d0 : - -uint16_t x_abs(void) { - return ((adb_werte[4] & 0b111) << 10) | ((adb_werte[3] & 0b111) << 7) - 4d0: 20 91 69 02 lds r18, 0x0269 - 4d4: 30 e0 ldi r19, 0x00 ; 0 - 4d6: 27 70 andi r18, 0x07 ; 7 - 4d8: 30 70 andi r19, 0x00 ; 0 - 4da: 32 2f mov r19, r18 - 4dc: 22 27 eor r18, r18 - 4de: 33 0f add r19, r19 - 4e0: 33 0f add r19, r19 - 4e2: 80 91 68 02 lds r24, 0x0268 - 4e6: 90 e0 ldi r25, 0x00 ; 0 - 4e8: 87 70 andi r24, 0x07 ; 7 - 4ea: 90 70 andi r25, 0x00 ; 0 - 4ec: 96 95 lsr r25 - 4ee: 98 2f mov r25, r24 - 4f0: 88 27 eor r24, r24 - 4f2: 97 95 ror r25 - 4f4: 87 95 ror r24 - 4f6: 28 2b or r18, r24 - 4f8: 39 2b or r19, r25 - | (adb_werte[2] & 0b01111111); - 4fa: 80 91 67 02 lds r24, 0x0267 - 4fe: 90 e0 ldi r25, 0x00 ; 0 - 500: 8f 77 andi r24, 0x7F ; 127 - 502: 90 70 andi r25, 0x00 ; 0 - 504: 28 2b or r18, r24 - 506: 39 2b or r19, r25 } - 508: c9 01 movw r24, r18 - 50a: 08 95 ret + 4e0: 08 95 ret -0000050c : - -uint16_t y_abs(void) { +000004e2 : return ((adb_werte[4] & 0b01110000) << 6) - 50c: 20 91 69 02 lds r18, 0x0269 - 510: 30 e0 ldi r19, 0x00 ; 0 - 512: 20 77 andi r18, 0x70 ; 112 - 514: 30 70 andi r19, 0x00 ; 0 - 516: e6 e0 ldi r30, 0x06 ; 6 - 518: 22 0f add r18, r18 - 51a: 33 1f adc r19, r19 - 51c: ea 95 dec r30 - 51e: e1 f7 brne .-8 ; 0x518 | ((adb_werte[3] & 0b01110000) << 3) | (adb_werte[1] & 0b01111111); - 520: 80 91 68 02 lds r24, 0x0268 - 524: 90 e0 ldi r25, 0x00 ; 0 - 526: 80 77 andi r24, 0x70 ; 112 - 528: 90 70 andi r25, 0x00 ; 0 - 52a: 73 e0 ldi r23, 0x03 ; 3 - 52c: 88 0f add r24, r24 - 52e: 99 1f adc r25, r25 - 530: 7a 95 dec r23 - 532: e1 f7 brne .-8 ; 0x52c - 534: 28 2b or r18, r24 - 536: 39 2b or r19, r25 - 538: 80 91 66 02 lds r24, 0x0266 - 53c: 90 e0 ldi r25, 0x00 ; 0 - 53e: 8f 77 andi r24, 0x7F ; 127 - 540: 90 70 andi r25, 0x00 ; 0 - 542: 28 2b or r18, r24 - 544: 39 2b or r19, r25 } - 546: c9 01 movw r24, r18 - 548: 08 95 ret -0000054a : +int8_t delta_y(void) { + if(adb_data_length ==0) { + 4e2: 80 91 89 02 lds r24, 0x0289 + 4e6: 88 23 and r24, r24 + 4e8: 51 f0 breq .+20 ; 0x4fe + return 0; } - + if (adb_werte[1] & 0b01000000) { + 4ea: 80 91 80 02 lds r24, 0x0280 + 4ee: 86 ff sbrs r24, 6 + 4f0: 04 c0 rjmp .+8 ; 0x4fa + return -((128 - adb_werte[1]) & 0b00111111); + 4f2: 81 95 neg r24 + 4f4: 8f 73 andi r24, 0x3F ; 63 + 4f6: 81 95 neg r24 + 4f8: 08 95 ret + } else { + return adb_werte[1] & 0b00111111; + 4fa: 8f 73 andi r24, 0x3F ; 63 + 4fc: 08 95 ret + | ((adb_werte[3] & 0b01110000) << 3) | (adb_werte[1] & 0b01111111); } -*/ -uint8_t decode_field(void) { - 54a: 1f 93 push r17 - 54c: cf 93 push r28 - 54e: df 93 push r29 - uint8_t pressure, i, j; - uint8_t return_val = 0; - static uint16_t x_mem, y_mem; - uint16_t x, y; - - pressure = z_pressure(); - 550: b4 df rcall .-152 ; 0x4ba - 552: 18 2f mov r17, r24 - x = x_abs(); - 554: bd df rcall .-134 ; 0x4d0 - 556: ec 01 movw r28, r24 - y = y_abs(); - 558: d9 df rcall .-78 ; 0x50c - 55a: 9c 01 movw r18, r24 - - if (x) { - 55c: 20 97 sbiw r28, 0x00 ; 0 - 55e: 29 f0 breq .+10 ; 0x56a - x_mem = x; - 560: d0 93 63 02 sts 0x0263, r29 - 564: c0 93 62 02 sts 0x0262, r28 - 568: 04 c0 rjmp .+8 ; 0x572 +int8_t delta_y(void) { + if(adb_data_length ==0) { + return 0; + 4fe: 80 e0 ldi r24, 0x00 ; 0 + if (adb_werte[1] & 0b01000000) { + return -((128 - adb_werte[1]) & 0b00111111); } else { - x = x_mem; - 56a: c0 91 62 02 lds r28, 0x0262 - 56e: d0 91 63 02 lds r29, 0x0263 + return adb_werte[1] & 0b00111111; } +} + 500: 08 95 ret - if (y) { - 572: 21 15 cp r18, r1 - 574: 31 05 cpc r19, r1 - 576: 29 f0 breq .+10 ; 0x582 - y_mem = y; - 578: 30 93 61 02 sts 0x0261, r19 - 57c: 20 93 60 02 sts 0x0260, r18 - 580: 04 c0 rjmp .+8 ; 0x58a - } else { - y = y_mem; - 582: 20 91 60 02 lds r18, 0x0260 - 586: 30 91 61 02 lds r19, 0x0261 - } +00000502 : - if ((pressure == 0) && (last_pressure > 0)) { - 58a: 11 23 and r17, r17 - 58c: c9 f4 brne .+50 ; 0x5c0 - 58e: 80 91 64 02 lds r24, 0x0264 - 592: 88 23 and r24, r24 - 594: a9 f0 breq .+42 ; 0x5c0 - - i = (y - MIN_ABS_Y) / PAD_ROW_HEIGHT; - j = (x - MIN_ABS_X) / PAD_COL_WIDTH; - 596: c6 59 subi r28, 0x96 ; 150 - 598: d0 40 sbci r29, 0x00 ; 0 - 59a: ce 01 movw r24, r28 - 59c: 61 eb ldi r22, 0xB1 ; 177 - 59e: 71 e0 ldi r23, 0x01 ; 1 - 5a0: 0e 94 be 0b call 0x177c ; 0x177c <__udivmodhi4> - - return_val = i * PAD_COLS + j + 1; - 5a4: 46 2f mov r20, r22 - 5a6: 4f 5f subi r20, 0xFF ; 255 - y = y_mem; +int8_t delta_x(void) { + if(adb_data_length ==0) { + 502: 80 91 89 02 lds r24, 0x0289 + 506: 88 23 and r24, r24 + 508: 51 f0 breq .+20 ; 0x51e + return 0; } - - if ((pressure == 0) && (last_pressure > 0)) { - - i = (y - MIN_ABS_Y) / PAD_ROW_HEIGHT; - 5a8: 22 5d subi r18, 0xD2 ; 210 - 5aa: 30 40 sbci r19, 0x00 ; 0 - 5ac: c9 01 movw r24, r18 - 5ae: 6c ec ldi r22, 0xCC ; 204 - 5b0: 71 e0 ldi r23, 0x01 ; 1 - 5b2: 0e 94 be 0b call 0x177c ; 0x177c <__udivmodhi4> - j = (x - MIN_ABS_X) / PAD_COL_WIDTH; - - return_val = i * PAD_COLS + j + 1; - 5b6: 86 2f mov r24, r22 - 5b8: 88 0f add r24, r24 - 5ba: 86 0f add r24, r22 - 5bc: 48 0f add r20, r24 - 5be: 01 c0 rjmp .+2 ; 0x5c2 -*/ - -uint8_t decode_field(void) { - static uint8_t last_pressure = 0; - uint8_t pressure, i, j; - uint8_t return_val = 0; - 5c0: 40 e0 ldi r20, 0x00 ; 0 - - return_val = i * PAD_COLS + j + 1; - + if (adb_werte[2] & 0b01000000) { + 50a: 80 91 81 02 lds r24, 0x0281 + 50e: 86 ff sbrs r24, 6 + 510: 04 c0 rjmp .+8 ; 0x51a + return -((128 - adb_werte[2]) & 0b00111111); + 512: 81 95 neg r24 + 514: 8f 73 andi r24, 0x3F ; 63 + 516: 81 95 neg r24 + 518: 08 95 ret + } else { + return adb_werte[2] & 0b00111111; + 51a: 8f 73 andi r24, 0x3F ; 63 + 51c: 08 95 ret } +} - last_pressure = pressure; - 5c2: 10 93 64 02 sts 0x0264, r17 - return return_val; +int8_t delta_x(void) { + if(adb_data_length ==0) { + return 0; + 51e: 80 e0 ldi r24, 0x00 ; 0 + if (adb_werte[2] & 0b01000000) { + return -((128 - adb_werte[2]) & 0b00111111); + } else { + return adb_werte[2] & 0b00111111; + } } - 5c6: 84 2f mov r24, r20 - 5c8: df 91 pop r29 - 5ca: cf 91 pop r28 - 5cc: 1f 91 pop r17 - 5ce: 08 95 ret + 520: 08 95 ret -000005d0 : +00000522 : void Usb2SerialTask(void) { - 5d0: 1f 93 push r17 + 522: 1f 93 push r17 static inline uint_reg_t GetGlobalInterruptMask(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) return SREG; - 5d2: 8f b7 in r24, 0x3f ; 63 + 524: 8f b7 in r24, 0x3f ; 63 static inline void GlobalInterruptDisable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) cli(); - 5d4: f8 94 cli + 526: f8 94 cli uint16_t Count; uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); GlobalInterruptDisable(); Count = Buffer->Count; - 5d6: 20 91 52 01 lds r18, 0x0152 - 5da: 30 91 53 01 lds r19, 0x0153 + 528: 20 91 6c 01 lds r18, 0x016C + 52c: 30 91 6d 01 lds r19, 0x016D static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) SREG = GlobalIntState; - 5de: 8f bf out 0x3f, r24 ; 63 + 530: 8f bf out 0x3f, r24 ; 63 /* Only try to read in bytes from the CDC interface if the transmit buffer is not full */ if (!(RingBuffer_IsFull(&USBtoUSART_Buffer))) - 5e0: 80 91 50 01 lds r24, 0x0150 - 5e4: 90 91 51 01 lds r25, 0x0151 - 5e8: 28 17 cp r18, r24 - 5ea: 39 07 cpc r19, r25 - 5ec: 49 f0 breq .+18 ; 0x600 + 532: 80 91 6a 01 lds r24, 0x016A + 536: 90 91 6b 01 lds r25, 0x016B + 53a: 28 17 cp r18, r24 + 53c: 39 07 cpc r19, r25 + 53e: 49 f0 breq .+18 ; 0x552 { int16_t ReceivedByte = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface); - 5ee: 8a e2 ldi r24, 0x2A ; 42 - 5f0: 91 e0 ldi r25, 0x01 ; 1 - 5f2: e3 d6 rcall .+3526 ; 0x13ba - 5f4: bc 01 movw r22, r24 + 540: 85 e4 ldi r24, 0x45 ; 69 + 542: 91 e0 ldi r25, 0x01 ; 1 + 544: 84 d7 rcall .+3848 ; 0x144e + 546: bc 01 movw r22, r24 /* Read bytes from the USB OUT endpoint into the USART transmit buffer */ if (!(ReceivedByte < 0)) - 5f6: 97 fd sbrc r25, 7 - 5f8: 03 c0 rjmp .+6 ; 0x600 + 548: 97 fd sbrc r25, 7 + 54a: 03 c0 rjmp .+6 ; 0x552 RingBuffer_Insert(&USBtoUSART_Buffer, ReceivedByte); - 5fa: 88 e4 ldi r24, 0x48 ; 72 - 5fc: 91 e0 ldi r25, 0x01 ; 1 - 5fe: b8 dd rcall .-1168 ; 0x170 + 54c: 82 e6 ldi r24, 0x62 ; 98 + 54e: 91 e0 ldi r25, 0x01 ; 1 + 550: 0f de rcall .-994 ; 0x170 static inline uint_reg_t GetGlobalInterruptMask(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) return SREG; - 600: 2f b7 in r18, 0x3f ; 63 + 552: 2f b7 in r18, 0x3f ; 63 static inline void GlobalInterruptDisable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) cli(); - 602: f8 94 cli - 604: 80 91 de 01 lds r24, 0x01DE - 608: 90 91 df 01 lds r25, 0x01DF + 554: f8 94 cli + 556: 80 91 f8 01 lds r24, 0x01F8 + 55a: 90 91 f9 01 lds r25, 0x01F9 static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) SREG = GlobalIntState; - 60c: 2f bf out 0x3f, r18 ; 63 + 55e: 2f bf out 0x3f, r18 ; 63 } /* Check if the UART receive buffer flush timer has expired or the buffer is nearly full */ uint16_t BufferCount = RingBuffer_GetCount(&USARTtoUSB_Buffer); if (BufferCount) - 60e: 00 97 sbiw r24, 0x00 ; 0 - 610: 01 f1 breq .+64 ; 0x652 + 560: 00 97 sbiw r24, 0x00 ; 0 + 562: 01 f1 breq .+64 ; 0x5a4 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 612: 20 91 2b 01 lds r18, 0x012B - 616: 2f 70 andi r18, 0x0F ; 15 - 618: 20 93 e9 00 sts 0x00E9, r18 + 564: 20 91 46 01 lds r18, 0x0146 + 568: 2f 70 andi r18, 0x0F ; 15 + 56a: 20 93 e9 00 sts 0x00E9, r18 * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - 61c: 20 91 e8 00 lds r18, 0x00E8 + 56e: 20 91 e8 00 lds r18, 0x00E8 { Endpoint_SelectEndpoint(VirtualSerial_CDC_Interface.Config.DataINEndpoint.Address); /* Check if a packet is already enqueued to the host - if so, we shouldn't try to send more data * until it completes as there is a chance nothing is listening and a lengthy timeout could occur */ if (Endpoint_IsINReady()) - 620: 20 ff sbrs r18, 0 - 622: 17 c0 rjmp .+46 ; 0x652 + 572: 20 ff sbrs r18, 0 + 574: 17 c0 rjmp .+46 ; 0x5a4 { /* Never send more than one bank size less one byte to the host at a time, so that we don't block * while a Zero Length Packet (ZLP) to terminate the transfer is sent if the host isn't listening */ uint8_t BytesToSend = MIN(BufferCount, (CDC_TXRX_EPSIZE - 1)); - 624: 80 31 cpi r24, 0x10 ; 16 - 626: 91 05 cpc r25, r1 - 628: 10 f0 brcs .+4 ; 0x62e - 62a: 8f e0 ldi r24, 0x0F ; 15 - 62c: 90 e0 ldi r25, 0x00 ; 0 - 62e: 18 2f mov r17, r24 + 576: 80 31 cpi r24, 0x10 ; 16 + 578: 91 05 cpc r25, r1 + 57a: 10 f0 brcs .+4 ; 0x580 + 57c: 8f e0 ldi r24, 0x0F ; 15 + 57e: 90 e0 ldi r25, 0x00 ; 0 + 580: 18 2f mov r17, r24 /* Read bytes from the USART receive buffer into the USB IN endpoint */ while (BytesToSend--) - 630: 0e c0 rjmp .+28 ; 0x64e + 582: 0e c0 rjmp .+28 ; 0x5a0 * \return Next data element stored in the buffer. */ static inline uint8_t RingBuffer_Peek(RingBuffer_t* const Buffer) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(1); static inline uint8_t RingBuffer_Peek(RingBuffer_t* const Buffer) { return *Buffer->Out; - 632: e0 91 d6 01 lds r30, 0x01D6 - 636: f0 91 d7 01 lds r31, 0x01D7 + 584: e0 91 f0 01 lds r30, 0x01F0 + 588: f0 91 f1 01 lds r31, 0x01F1 { /* Try to send the next byte of data to the host, abort if there is an error without dequeuing */ if (CDC_Device_SendByte(&VirtualSerial_CDC_Interface, - 63a: 8a e2 ldi r24, 0x2A ; 42 - 63c: 91 e0 ldi r25, 0x01 ; 1 - 63e: 60 81 ld r22, Z - 640: 4b d6 rcall .+3222 ; 0x12d8 - 642: 11 50 subi r17, 0x01 ; 1 - 644: 88 23 and r24, r24 - 646: 29 f4 brne .+10 ; 0x652 + 58c: 85 e4 ldi r24, 0x45 ; 69 + 58e: 91 e0 ldi r25, 0x01 ; 1 + 590: 60 81 ld r22, Z + 592: ec d6 rcall .+3544 ; 0x136c + 594: 11 50 subi r17, 0x01 ; 1 + 596: 88 23 and r24, r24 + 598: 29 f4 brne .+10 ; 0x5a4 { break; } /* Dequeue the already sent byte from the buffer now we have confirmed that no transmission error occurred */ RingBuffer_Remove(&USARTtoUSB_Buffer); - 648: 84 ed ldi r24, 0xD4 ; 212 - 64a: 91 e0 ldi r25, 0x01 ; 1 - 64c: ac dd rcall .-1192 ; 0x1a6 + 59a: 8e ee ldi r24, 0xEE ; 238 + 59c: 91 e0 ldi r25, 0x01 ; 1 + 59e: 03 de rcall .-1018 ; 0x1a6 /* Never send more than one bank size less one byte to the host at a time, so that we don't block * while a Zero Length Packet (ZLP) to terminate the transfer is sent if the host isn't listening */ uint8_t BytesToSend = MIN(BufferCount, (CDC_TXRX_EPSIZE - 1)); /* Read bytes from the USART receive buffer into the USB IN endpoint */ while (BytesToSend--) - 64e: 11 23 and r17, r17 - 650: 81 f7 brne .-32 ; 0x632 + 5a0: 11 23 and r17, r17 + 5a2: 81 f7 brne .-32 ; 0x584 static inline uint_reg_t GetGlobalInterruptMask(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) return SREG; - 652: 2f b7 in r18, 0x3f ; 63 + 5a4: 2f b7 in r18, 0x3f ; 63 static inline void GlobalInterruptDisable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) cli(); - 654: f8 94 cli + 5a6: f8 94 cli uint16_t Count; uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); GlobalInterruptDisable(); Count = Buffer->Count; - 656: 80 91 52 01 lds r24, 0x0152 - 65a: 90 91 53 01 lds r25, 0x0153 + 5a8: 80 91 6c 01 lds r24, 0x016C + 5ac: 90 91 6d 01 lds r25, 0x016D static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) SREG = GlobalIntState; - 65e: 2f bf out 0x3f, r18 ; 63 + 5b0: 2f bf out 0x3f, r18 ; 63 } } } /* Load the next byte from the USART transmit buffer into the USART */ if (!(RingBuffer_IsEmpty(&USBtoUSART_Buffer))) { - 660: 00 97 sbiw r24, 0x00 ; 0 - 662: 49 f0 breq .+18 ; 0x676 + 5b2: 00 97 sbiw r24, 0x00 ; 0 + 5b4: 49 f0 breq .+18 ; 0x5c8 Serial_SendByte(RingBuffer_Remove(&USBtoUSART_Buffer)); - 664: 88 e4 ldi r24, 0x48 ; 72 - 666: 91 e0 ldi r25, 0x01 ; 1 - 668: 9e dd rcall .-1220 ; 0x1a6 + 5b6: 82 e6 ldi r24, 0x62 ; 98 + 5b8: 91 e0 ldi r25, 0x01 ; 1 + 5ba: f5 dd rcall .-1046 ; 0x1a6 * \param[in] DataByte Byte to transmit through the USART. */ static inline void Serial_SendByte(const char DataByte) ATTR_ALWAYS_INLINE; static inline void Serial_SendByte(const char DataByte) { while (!(UCSR1A & (1 << UDRE1))); - 66a: 90 91 c8 00 lds r25, 0x00C8 - 66e: 95 ff sbrs r25, 5 - 670: fc cf rjmp .-8 ; 0x66a + 5bc: 90 91 c8 00 lds r25, 0x00C8 + 5c0: 95 ff sbrs r25, 5 + 5c2: fc cf rjmp .-8 ; 0x5bc UDR1 = DataByte; - 672: 80 93 ce 00 sts 0x00CE, r24 + 5c4: 80 93 ce 00 sts 0x00CE, r24 // dummy = RingBuffer_Remove(&USBtoUSART_Buffer); // sendPayload(&dummy,1,0); } CDC_Device_USBTask(&VirtualSerial_CDC_Interface); - 676: 8a e2 ldi r24, 0x2A ; 42 - 678: 91 e0 ldi r25, 0x01 ; 1 - 67a: 88 d6 rcall .+3344 ; 0x138c + 5c8: 85 e4 ldi r24, 0x45 ; 69 + 5ca: 91 e0 ldi r25, 0x01 ; 1 + 5cc: 29 d7 rcall .+3666 ; 0x1420 USB_USBTask(); - 67c: 42 d5 rcall .+2692 ; 0x1102 + 5ce: e3 d5 rcall .+3014 ; 0x1196 } - 67e: 1f 91 pop r17 - 680: 08 95 ret + 5d0: 1f 91 pop r17 + 5d2: 08 95 ret -00000682 : +000005d4 : /** Configures the board hardware and chip peripherals for the demo's functionality. */ void SetupHardware(void) { /* Disable watchdog if enabled by bootloader/fuses */ MCUSR &= ~(1 << WDRF); - 682: 84 b7 in r24, 0x34 ; 52 - 684: 87 7f andi r24, 0xF7 ; 247 - 686: 84 bf out 0x34, r24 ; 52 + 5d4: 84 b7 in r24, 0x34 ; 52 + 5d6: 87 7f andi r24, 0xF7 ; 247 + 5d8: 84 bf out 0x34, r24 ; 52 wdt_disable(); - 688: 88 e1 ldi r24, 0x18 ; 24 - 68a: 0f b6 in r0, 0x3f ; 63 - 68c: f8 94 cli - 68e: 80 93 60 00 sts 0x0060, r24 - 692: 10 92 60 00 sts 0x0060, r1 - 696: 0f be out 0x3f, r0 ; 63 + 5da: 88 e1 ldi r24, 0x18 ; 24 + 5dc: 0f b6 in r0, 0x3f ; 63 + 5de: f8 94 cli + 5e0: 80 93 60 00 sts 0x0060, r24 + 5e4: 10 92 60 00 sts 0x0060, r1 + 5e8: 0f be out 0x3f, r0 ; 63 The type of x is clock_div_t. */ void clock_prescale_set(clock_div_t __x) { uint8_t __tmp = _BV(CLKPCE); __asm__ __volatile__ ( - 698: 90 e0 ldi r25, 0x00 ; 0 - 69a: 80 e8 ldi r24, 0x80 ; 128 - 69c: 0f b6 in r0, 0x3f ; 63 - 69e: f8 94 cli - 6a0: 80 93 61 00 sts 0x0061, r24 - 6a4: 90 93 61 00 sts 0x0061, r25 - 6a8: 0f be out 0x3f, r0 ; 63 + 5ea: 90 e0 ldi r25, 0x00 ; 0 + 5ec: 80 e8 ldi r24, 0x80 ; 128 + 5ee: 0f b6 in r0, 0x3f ; 63 + 5f0: f8 94 cli + 5f2: 80 93 61 00 sts 0x0061, r24 + 5f6: 90 93 61 00 sts 0x0061, r25 + 5fa: 0f be out 0x3f, r0 ; 63 clock_prescale_set(clock_div_1); /* Hardware Initialization */ // LEDs_Init(); USB_Init(); } - 6aa: db c2 rjmp .+1462 ; 0xc62 + 5fc: 7c c3 rjmp .+1784 ; 0xcf6 -000006ac : +000005fe : /** Event handler for the library USB Connection event. */ void EVENT_USB_Device_Connect(void) { // LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); } - 6ac: 08 95 ret + 5fe: 08 95 ret -000006ae : +00000600 : /** Event handler for the library USB Disconnection event. */ void EVENT_USB_Device_Disconnect(void) { // LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); } - 6ae: 08 95 ret + 600: 08 95 ret -000006b0 : +00000602 : /** Event handler for the library USB Configuration Changed event. */ void EVENT_USB_Device_ConfigurationChanged(void) { bool ConfigSuccess = true; ConfigSuccess &= CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface); - 6b0: 8a e2 ldi r24, 0x2A ; 42 - 6b2: 91 e0 ldi r25, 0x01 ; 1 + 602: 85 e4 ldi r24, 0x45 ; 69 + 604: 91 e0 ldi r25, 0x01 ; 1 // LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); } - 6b4: ed c5 rjmp .+3034 ; 0x1290 + 606: 8e c6 rjmp .+3356 ; 0x1324 -000006b6 : +00000608 : /** Event handler for the library USB Control Request reception event. */ void EVENT_USB_Device_ControlRequest(void) { CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface); - 6b6: 8a e2 ldi r24, 0x2A ; 42 - 6b8: 91 e0 ldi r25, 0x01 ; 1 + 608: 85 e4 ldi r24, 0x45 ; 69 + 60a: 91 e0 ldi r25, 0x01 ; 1 } - 6ba: 3e c5 rjmp .+2684 ; 0x1138 + 60c: df c5 rjmp .+3006 ; 0x11cc -000006bc <__vector_23>: +0000060e <__vector_23>: /** ISR to manage the reception of data from the serial port, placing received bytes into a circular buffer * for later transmission to the host. */ ISR(USART1_RX_vect, ISR_BLOCK) { - 6bc: 1f 92 push r1 - 6be: 0f 92 push r0 - 6c0: 0f b6 in r0, 0x3f ; 63 - 6c2: 0f 92 push r0 - 6c4: 11 24 eor r1, r1 - 6c6: 2f 93 push r18 - 6c8: 3f 93 push r19 - 6ca: 4f 93 push r20 - 6cc: 5f 93 push r21 - 6ce: 6f 93 push r22 - 6d0: 7f 93 push r23 - 6d2: 8f 93 push r24 - 6d4: 9f 93 push r25 - 6d6: af 93 push r26 - 6d8: bf 93 push r27 - 6da: ef 93 push r30 - 6dc: ff 93 push r31 + 60e: 1f 92 push r1 + 610: 0f 92 push r0 + 612: 0f b6 in r0, 0x3f ; 63 + 614: 0f 92 push r0 + 616: 11 24 eor r1, r1 + 618: 2f 93 push r18 + 61a: 3f 93 push r19 + 61c: 4f 93 push r20 + 61e: 5f 93 push r21 + 620: 6f 93 push r22 + 622: 7f 93 push r23 + 624: 8f 93 push r24 + 626: 9f 93 push r25 + 628: af 93 push r26 + 62a: bf 93 push r27 + 62c: ef 93 push r30 + 62e: ff 93 push r31 uint8_t ReceivedByte = UDR1; - 6de: 60 91 ce 00 lds r22, 0x00CE + 630: 60 91 ce 00 lds r22, 0x00CE if (USB_DeviceState == DEVICE_STATE_Configured) - 6e2: 8e b3 in r24, 0x1e ; 30 - 6e4: 84 30 cpi r24, 0x04 ; 4 - 6e6: 19 f4 brne .+6 ; 0x6ee <__vector_23+0x32> + 634: 8e b3 in r24, 0x1e ; 30 + 636: 84 30 cpi r24, 0x04 ; 4 + 638: 19 f4 brne .+6 ; 0x640 <__vector_23+0x32> RingBuffer_Insert(&USARTtoUSB_Buffer, ReceivedByte); - 6e8: 84 ed ldi r24, 0xD4 ; 212 - 6ea: 91 e0 ldi r25, 0x01 ; 1 - 6ec: 41 dd rcall .-1406 ; 0x170 + 63a: 8e ee ldi r24, 0xEE ; 238 + 63c: 91 e0 ldi r25, 0x01 ; 1 + 63e: 98 dd rcall .-1232 ; 0x170 } - 6ee: ff 91 pop r31 - 6f0: ef 91 pop r30 - 6f2: bf 91 pop r27 - 6f4: af 91 pop r26 - 6f6: 9f 91 pop r25 - 6f8: 8f 91 pop r24 - 6fa: 7f 91 pop r23 - 6fc: 6f 91 pop r22 - 6fe: 5f 91 pop r21 - 700: 4f 91 pop r20 - 702: 3f 91 pop r19 - 704: 2f 91 pop r18 - 706: 0f 90 pop r0 - 708: 0f be out 0x3f, r0 ; 63 - 70a: 0f 90 pop r0 - 70c: 1f 90 pop r1 - 70e: 18 95 reti - -00000710 : + 640: ff 91 pop r31 + 642: ef 91 pop r30 + 644: bf 91 pop r27 + 646: af 91 pop r26 + 648: 9f 91 pop r25 + 64a: 8f 91 pop r24 + 64c: 7f 91 pop r23 + 64e: 6f 91 pop r22 + 650: 5f 91 pop r21 + 652: 4f 91 pop r20 + 654: 3f 91 pop r19 + 656: 2f 91 pop r18 + 658: 0f 90 pop r0 + 65a: 0f be out 0x3f, r0 ; 63 + 65c: 0f 90 pop r0 + 65e: 1f 90 pop r1 + 660: 18 95 reti + +00000662 : /** Event handler for the CDC Class driver Line Encoding Changed event. * * \param[in] CDCInterfaceInfo Pointer to the CDC class interface configuration structure being referenced */ void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { - 710: 8f 92 push r8 - 712: 9f 92 push r9 - 714: af 92 push r10 - 716: bf 92 push r11 - 718: cf 92 push r12 - 71a: df 92 push r13 - 71c: ef 92 push r14 - 71e: ff 92 push r15 - 720: 1f 93 push r17 - 722: fc 01 movw r30, r24 + 662: 8f 92 push r8 + 664: 9f 92 push r9 + 666: af 92 push r10 + 668: bf 92 push r11 + 66a: cf 92 push r12 + 66c: df 92 push r13 + 66e: ef 92 push r14 + 670: ff 92 push r15 + 672: 1f 93 push r17 + 674: fc 01 movw r30, r24 uint8_t ConfigMask = 0; switch (CDCInterfaceInfo->State.LineEncoding.ParityType) - 724: a1 8d ldd r26, Z+25 ; 0x19 - 726: a1 50 subi r26, 0x01 ; 1 - 728: a2 30 cpi r26, 0x02 ; 2 - 72a: 28 f4 brcc .+10 ; 0x736 - 72c: b0 e0 ldi r27, 0x00 ; 0 - 72e: ab 5b subi r26, 0xBB ; 187 - 730: be 4f sbci r27, 0xFE ; 254 - 732: 1c 91 ld r17, X - 734: 01 c0 rjmp .+2 ; 0x738 - 736: 10 e0 ldi r17, 0x00 ; 0 + 676: a1 8d ldd r26, Z+25 ; 0x19 + 678: a1 50 subi r26, 0x01 ; 1 + 67a: a2 30 cpi r26, 0x02 ; 2 + 67c: 28 f4 brcc .+10 ; 0x688 + 67e: b0 e0 ldi r27, 0x00 ; 0 + 680: a0 5a subi r26, 0xA0 ; 160 + 682: be 4f sbci r27, 0xFE ; 254 + 684: 1c 91 ld r17, X + 686: 01 c0 rjmp .+2 ; 0x68a + 688: 10 e0 ldi r17, 0x00 ; 0 case CDC_PARITY_Even: ConfigMask = (1 << UPM11); break; } if (CDCInterfaceInfo->State.LineEncoding.CharFormat == CDC_LINEENCODING_TwoStopBits) - 738: 80 8d ldd r24, Z+24 ; 0x18 - 73a: 82 30 cpi r24, 0x02 ; 2 - 73c: 09 f4 brne .+2 ; 0x740 + 68a: 80 8d ldd r24, Z+24 ; 0x18 + 68c: 82 30 cpi r24, 0x02 ; 2 + 68e: 09 f4 brne .+2 ; 0x692 ConfigMask |= (1 << USBS1); - 73e: 18 60 ori r17, 0x08 ; 8 + 690: 18 60 ori r17, 0x08 ; 8 switch (CDCInterfaceInfo->State.LineEncoding.DataBits) - 740: 82 8d ldd r24, Z+26 ; 0x1a - 742: 87 30 cpi r24, 0x07 ; 7 - 744: 31 f0 breq .+12 ; 0x752 - 746: 88 30 cpi r24, 0x08 ; 8 - 748: 31 f0 breq .+12 ; 0x756 - 74a: 86 30 cpi r24, 0x06 ; 6 - 74c: 29 f4 brne .+10 ; 0x758 + 692: 82 8d ldd r24, Z+26 ; 0x1a + 694: 87 30 cpi r24, 0x07 ; 7 + 696: 31 f0 breq .+12 ; 0x6a4 + 698: 88 30 cpi r24, 0x08 ; 8 + 69a: 31 f0 breq .+12 ; 0x6a8 + 69c: 86 30 cpi r24, 0x06 ; 6 + 69e: 29 f4 brne .+10 ; 0x6aa { case 6: ConfigMask |= (1 << UCSZ10); - 74e: 12 60 ori r17, 0x02 ; 2 + 6a0: 12 60 ori r17, 0x02 ; 2 break; - 750: 03 c0 rjmp .+6 ; 0x758 + 6a2: 03 c0 rjmp .+6 ; 0x6aa case 7: ConfigMask |= (1 << UCSZ11); - 752: 14 60 ori r17, 0x04 ; 4 + 6a4: 14 60 ori r17, 0x04 ; 4 break; - 754: 01 c0 rjmp .+2 ; 0x758 + 6a6: 01 c0 rjmp .+2 ; 0x6aa case 8: ConfigMask |= ((1 << UCSZ11) | (1 << UCSZ10)); - 756: 16 60 ori r17, 0x06 ; 6 + 6a8: 16 60 ori r17, 0x06 ; 6 break; } /* Must turn off USART before reconfiguring it, otherwise incorrect operation may occur */ UCSR1B = 0; - 758: 10 92 c9 00 sts 0x00C9, r1 + 6aa: 10 92 c9 00 sts 0x00C9, r1 UCSR1A = 0; - 75c: 10 92 c8 00 sts 0x00C8, r1 + 6ae: 10 92 c8 00 sts 0x00C8, r1 UCSR1C = 0; - 760: 10 92 ca 00 sts 0x00CA, r1 + 6b2: 10 92 ca 00 sts 0x00CA, r1 /* Set the new baud rate before configuring the USART */ UBRR1 = SERIAL_2X_UBBRVAL(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS); - 764: c4 88 ldd r12, Z+20 ; 0x14 - 766: d5 88 ldd r13, Z+21 ; 0x15 - 768: e6 88 ldd r14, Z+22 ; 0x16 - 76a: f7 88 ldd r15, Z+23 ; 0x17 - 76c: c7 01 movw r24, r14 - 76e: b6 01 movw r22, r12 - 770: 96 95 lsr r25 - 772: 87 95 ror r24 - 774: 77 95 ror r23 - 776: 67 95 ror r22 - 778: 4b d7 rcall .+3734 ; 0x1610 <__floatunsisf> - 77a: 20 e0 ldi r18, 0x00 ; 0 - 77c: 34 e2 ldi r19, 0x24 ; 36 - 77e: 44 ef ldi r20, 0xF4 ; 244 - 780: 59 e4 ldi r21, 0x49 ; 73 - 782: 4a d6 rcall .+3220 ; 0x1418 <__addsf3> - 784: 4b 01 movw r8, r22 - 786: 5c 01 movw r10, r24 - 788: c7 01 movw r24, r14 - 78a: b6 01 movw r22, r12 - 78c: 41 d7 rcall .+3714 ; 0x1610 <__floatunsisf> - 78e: 9b 01 movw r18, r22 - 790: ac 01 movw r20, r24 - 792: c5 01 movw r24, r10 - 794: b4 01 movw r22, r8 - 796: a8 d6 rcall .+3408 ; 0x14e8 <__divsf3> - 798: 20 e0 ldi r18, 0x00 ; 0 - 79a: 30 e0 ldi r19, 0x00 ; 0 - 79c: 40 e8 ldi r20, 0x80 ; 128 - 79e: 5f e3 ldi r21, 0x3F ; 63 - 7a0: 3a d6 rcall .+3188 ; 0x1416 <__subsf3> - 7a2: 0a d7 rcall .+3604 ; 0x15b8 <__fixunssfsi> - 7a4: 70 93 cd 00 sts 0x00CD, r23 - 7a8: 60 93 cc 00 sts 0x00CC, r22 + 6b6: c4 88 ldd r12, Z+20 ; 0x14 + 6b8: d5 88 ldd r13, Z+21 ; 0x15 + 6ba: e6 88 ldd r14, Z+22 ; 0x16 + 6bc: f7 88 ldd r15, Z+23 ; 0x17 + 6be: c7 01 movw r24, r14 + 6c0: b6 01 movw r22, r12 + 6c2: 96 95 lsr r25 + 6c4: 87 95 ror r24 + 6c6: 77 95 ror r23 + 6c8: 67 95 ror r22 + 6ca: ec d7 rcall .+4056 ; 0x16a4 <__floatunsisf> + 6cc: 20 e0 ldi r18, 0x00 ; 0 + 6ce: 34 e2 ldi r19, 0x24 ; 36 + 6d0: 44 ef ldi r20, 0xF4 ; 244 + 6d2: 59 e4 ldi r21, 0x49 ; 73 + 6d4: eb d6 rcall .+3542 ; 0x14ac <__addsf3> + 6d6: 4b 01 movw r8, r22 + 6d8: 5c 01 movw r10, r24 + 6da: c7 01 movw r24, r14 + 6dc: b6 01 movw r22, r12 + 6de: e2 d7 rcall .+4036 ; 0x16a4 <__floatunsisf> + 6e0: 9b 01 movw r18, r22 + 6e2: ac 01 movw r20, r24 + 6e4: c5 01 movw r24, r10 + 6e6: b4 01 movw r22, r8 + 6e8: 49 d7 rcall .+3730 ; 0x157c <__divsf3> + 6ea: 20 e0 ldi r18, 0x00 ; 0 + 6ec: 30 e0 ldi r19, 0x00 ; 0 + 6ee: 40 e8 ldi r20, 0x80 ; 128 + 6f0: 5f e3 ldi r21, 0x3F ; 63 + 6f2: db d6 rcall .+3510 ; 0x14aa <__subsf3> + 6f4: ab d7 rcall .+3926 ; 0x164c <__fixunssfsi> + 6f6: 70 93 cd 00 sts 0x00CD, r23 + 6fa: 60 93 cc 00 sts 0x00CC, r22 /* Reconfigure the USART in double speed mode for a wider baud rate range at the expense of accuracy */ UCSR1C = ConfigMask; - 7ac: 10 93 ca 00 sts 0x00CA, r17 + 6fe: 10 93 ca 00 sts 0x00CA, r17 UCSR1A = (1 << U2X1); - 7b0: 82 e0 ldi r24, 0x02 ; 2 - 7b2: 80 93 c8 00 sts 0x00C8, r24 + 702: 82 e0 ldi r24, 0x02 ; 2 + 704: 80 93 c8 00 sts 0x00C8, r24 UCSR1B = ((1 << RXCIE1) | (1 << TXEN1) | (1 << RXEN1)); - 7b6: 88 e9 ldi r24, 0x98 ; 152 - 7b8: 80 93 c9 00 sts 0x00C9, r24 + 708: 88 e9 ldi r24, 0x98 ; 152 + 70a: 80 93 c9 00 sts 0x00C9, r24 } - 7bc: 1f 91 pop r17 - 7be: ff 90 pop r15 - 7c0: ef 90 pop r14 - 7c2: df 90 pop r13 - 7c4: cf 90 pop r12 - 7c6: bf 90 pop r11 - 7c8: af 90 pop r10 - 7ca: 9f 90 pop r9 - 7cc: 8f 90 pop r8 - 7ce: 08 95 ret + 70e: 1f 91 pop r17 + 710: ff 90 pop r15 + 712: ef 90 pop r14 + 714: df 90 pop r13 + 716: cf 90 pop r12 + 718: bf 90 pop r11 + 71a: af 90 pop r10 + 71c: 9f 90 pop r9 + 71e: 8f 90 pop r8 + 720: 08 95 ret -000007d0 : +00000722 : void uart_putc(unsigned char data) { - 7d0: 68 2f mov r22, r24 + 722: 68 2f mov r22, r24 if (USB_DeviceState == DEVICE_STATE_Configured){ - 7d2: 8e b3 in r24, 0x1e ; 30 - 7d4: 84 30 cpi r24, 0x04 ; 4 - 7d6: 19 f4 brne .+6 ; 0x7de + 724: 8e b3 in r24, 0x1e ; 30 + 726: 84 30 cpi r24, 0x04 ; 4 + 728: 19 f4 brne .+6 ; 0x730 RingBuffer_Insert(&USARTtoUSB_Buffer, data); - 7d8: 84 ed ldi r24, 0xD4 ; 212 - 7da: 91 e0 ldi r25, 0x01 ; 1 - 7dc: c9 cc rjmp .-1646 ; 0x170 - 7de: 08 95 ret + 72a: 8e ee ldi r24, 0xEE ; 238 + 72c: 91 e0 ldi r25, 0x01 ; 1 + 72e: 20 cd rjmp .-1472 ; 0x170 + 730: 08 95 ret -000007e0 : +00000732 : } } void uart_puts(const char *s ) { - 7e0: ef 92 push r14 - 7e2: ff 92 push r15 - 7e4: cf 93 push r28 - 7e6: df 93 push r29 - 7e8: e8 2e mov r14, r24 - 7ea: e7 01 movw r28, r14 - 7ec: 7e 01 movw r14, r28 - 7ee: f9 2e mov r15, r25 - 7f0: e7 01 movw r28, r14 + 732: ef 92 push r14 + 734: ff 92 push r15 + 736: cf 93 push r28 + 738: df 93 push r29 + 73a: e8 2e mov r14, r24 + 73c: e7 01 movw r28, r14 + 73e: 7e 01 movw r14, r28 + 740: f9 2e mov r15, r25 + 742: e7 01 movw r28, r14 while (*s) - 7f2: 01 c0 rjmp .+2 ; 0x7f6 + 744: 01 c0 rjmp .+2 ; 0x748 uart_putc(*s++); - 7f4: ed df rcall .-38 ; 0x7d0 + 746: ed df rcall .-38 ; 0x722 } void uart_puts(const char *s ) { while (*s) - 7f6: 89 91 ld r24, Y+ - 7f8: 88 23 and r24, r24 - 7fa: e1 f7 brne .-8 ; 0x7f4 + 748: 89 91 ld r24, Y+ + 74a: 88 23 and r24, r24 + 74c: e1 f7 brne .-8 ; 0x746 uart_putc(*s++); }/* uart_puts */ - 7fc: df 91 pop r29 - 7fe: cf 91 pop r28 - 800: ff 90 pop r15 - 802: ef 90 pop r14 - 804: 08 95 ret + 74e: df 91 pop r29 + 750: cf 91 pop r28 + 752: ff 90 pop r15 + 754: ef 90 pop r14 + 756: 08 95 ret + +00000758 : + + +// convert an unsigned integer to string +void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { + 758: 2f 92 push r2 + 75a: 3f 92 push r3 + 75c: 4f 92 push r4 + 75e: 5f 92 push r5 + 760: 6f 92 push r6 + 762: 7f 92 push r7 + 764: 8f 92 push r8 + 766: 9f 92 push r9 + 768: af 92 push r10 + 76a: bf 92 push r11 + 76c: cf 92 push r12 + 76e: df 92 push r13 + 770: ef 92 push r14 + 772: ff 92 push r15 + 774: 0f 93 push r16 + 776: 1f 93 push r17 + 778: cf 93 push r28 + 77a: df 93 push r29 + 77c: 7b 01 movw r14, r22 + 77e: 8c 01 movw r16, r24 + int8_t i; // schleifenzähler + + string[no_digits] = '\0'; // String Terminator + 780: 82 2f mov r24, r18 + 782: 90 e0 ldi r25, 0x00 ; 0 + 784: fa 01 movw r30, r20 + 786: e8 0f add r30, r24 + 788: f9 1f adc r31, r25 + 78a: 10 82 st Z, r1 + for (i = (no_digits - 1); i >= 0; i--) { + 78c: d2 2e mov r13, r18 + 78e: da 94 dec r13 + +}/* uart_puts */ + -00000806
: +// convert an unsigned integer to string +void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { + 790: 4d 2c mov r4, r13 + 792: 55 24 eor r5, r5 + 794: 47 fc sbrc r4, 7 + 796: 50 94 com r5 + 798: ea 01 movw r28, r20 + 79a: c4 0d add r28, r4 + 79c: d5 1d adc r29, r5 + int8_t i; // schleifenzähler + + string[no_digits] = '\0'; // String Terminator + for (i = (no_digits - 1); i >= 0; i--) { + 79e: aa 24 eor r10, r10 + 7a0: bb 24 eor r11, r11 + if (zahl == 0 && i < (no_digits - 1)) { + string[i] = ' '; + } else { + string[i] = (zahl % 10) + '0'; + 7a2: ba e0 ldi r27, 0x0A ; 10 + 7a4: 6b 2e mov r6, r27 + 7a6: 71 2c mov r7, r1 + 7a8: 81 2c mov r8, r1 + 7aa: 91 2c mov r9, r1 +void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { + int8_t i; // schleifenzähler + + string[no_digits] = '\0'; // String Terminator + for (i = (no_digits - 1); i >= 0; i--) { + if (zahl == 0 && i < (no_digits - 1)) { + 7ac: 1c 01 movw r2, r24 + 7ae: 08 94 sec + 7b0: 21 08 sbc r2, r1 + 7b2: 31 08 sbc r3, r1 + string[i] = ' '; + 7b4: a0 e2 ldi r26, 0x20 ; 32 + 7b6: ca 2e mov r12, r26 +// convert an unsigned integer to string +void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { + int8_t i; // schleifenzähler + + string[no_digits] = '\0'; // String Terminator + for (i = (no_digits - 1); i >= 0; i--) { + 7b8: 22 c0 rjmp .+68 ; 0x7fe + if (zahl == 0 && i < (no_digits - 1)) { + 7ba: e1 14 cp r14, r1 + 7bc: f1 04 cpc r15, r1 + 7be: 01 05 cpc r16, r1 + 7c0: 11 05 cpc r17, r1 + 7c2: 41 f4 brne .+16 ; 0x7d4 + +}/* uart_puts */ + + +// convert an unsigned integer to string +void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { + 7c4: c5 01 movw r24, r10 + 7c6: 84 0d add r24, r4 + 7c8: 95 1d adc r25, r5 + int8_t i; // schleifenzähler + + string[no_digits] = '\0'; // String Terminator + for (i = (no_digits - 1); i >= 0; i--) { + if (zahl == 0 && i < (no_digits - 1)) { + 7ca: 82 15 cp r24, r2 + 7cc: 93 05 cpc r25, r3 + 7ce: 14 f4 brge .+4 ; 0x7d4 + string[i] = ' '; + 7d0: c8 82 st Y, r12 + 7d2: 08 c0 rjmp .+16 ; 0x7e4 + } else { + string[i] = (zahl % 10) + '0'; + 7d4: c8 01 movw r24, r16 + 7d6: b7 01 movw r22, r14 + 7d8: a4 01 movw r20, r8 + 7da: 93 01 movw r18, r6 + 7dc: 0e 94 08 0c call 0x1810 ; 0x1810 <__udivmodsi4> + 7e0: 60 5d subi r22, 0xD0 ; 208 + 7e2: 68 83 st Y, r22 + } // Modulo rechnen, dann den ASCII-Code von '0' addieren + zahl /= 10; + 7e4: c8 01 movw r24, r16 + 7e6: b7 01 movw r22, r14 + 7e8: a4 01 movw r20, r8 + 7ea: 93 01 movw r18, r6 + 7ec: 0e 94 08 0c call 0x1810 ; 0x1810 <__udivmodsi4> + 7f0: 79 01 movw r14, r18 + 7f2: 8a 01 movw r16, r20 +// convert an unsigned integer to string +void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { + int8_t i; // schleifenzähler + + string[no_digits] = '\0'; // String Terminator + for (i = (no_digits - 1); i >= 0; i--) { + 7f4: da 94 dec r13 + 7f6: 21 97 sbiw r28, 0x01 ; 1 + 7f8: 08 94 sec + 7fa: a1 08 sbc r10, r1 + 7fc: b1 08 sbc r11, r1 + 7fe: d7 fe sbrs r13, 7 + 800: dc cf rjmp .-72 ; 0x7ba + string[i] = (zahl % 10) + '0'; + } // Modulo rechnen, dann den ASCII-Code von '0' addieren + zahl /= 10; + } + +} + 802: df 91 pop r29 + 804: cf 91 pop r28 + 806: 1f 91 pop r17 + 808: 0f 91 pop r16 + 80a: ff 90 pop r15 + 80c: ef 90 pop r14 + 80e: df 90 pop r13 + 810: cf 90 pop r12 + 812: bf 90 pop r11 + 814: af 90 pop r10 + 816: 9f 90 pop r9 + 818: 8f 90 pop r8 + 81a: 7f 90 pop r7 + 81c: 6f 90 pop r6 + 81e: 5f 90 pop r5 + 820: 4f 90 pop r4 + 822: 3f 90 pop r3 + 824: 2f 90 pop r2 + 826: 08 95 ret + +00000828
: /** Main program entry point. This routine contains the overall program flow, including initial * setup of all components and the main program loop. */ int main(void) { - 806: cf 93 push r28 - 808: df 93 push r29 + 828: cf 92 push r12 + 82a: df 92 push r13 + 82c: ef 92 push r14 + 82e: ff 92 push r15 + 830: 0f 93 push r16 + 832: 1f 93 push r17 + 834: df 93 push r29 + 836: cf 93 push r28 + 838: cd b7 in r28, 0x3d ; 61 + 83a: de b7 in r29, 0x3e ; 62 + 83c: 60 97 sbiw r28, 0x10 ; 16 + 83e: 0f b6 in r0, 0x3f ; 63 + 840: f8 94 cli + 842: de bf out 0x3e, r29 ; 62 + 844: 0f be out 0x3f, r0 ; 63 + 846: cd bf out 0x3d, r28 ; 61 char dummy; uint8_t field_val = 0; SetupHardware(); - 80a: 3b df rcall .-394 ; 0x682 + 848: c5 de rcall .-630 ; 0x5d4 RingBuffer_InitBuffer(&USBtoUSART_Buffer, USBtoUSART_Buffer_Data, sizeof(USBtoUSART_Buffer_Data)); - 80c: 88 e4 ldi r24, 0x48 ; 72 - 80e: 91 e0 ldi r25, 0x01 ; 1 - 810: 64 e5 ldi r22, 0x54 ; 84 - 812: 71 e0 ldi r23, 0x01 ; 1 - 814: e1 dc rcall .-1598 ; 0x1d8 + 84a: 82 e6 ldi r24, 0x62 ; 98 + 84c: 91 e0 ldi r25, 0x01 ; 1 + 84e: 6e e6 ldi r22, 0x6E ; 110 + 850: 71 e0 ldi r23, 0x01 ; 1 + 852: c2 dc rcall .-1660 ; 0x1d8 RingBuffer_InitBuffer(&USARTtoUSB_Buffer, USARTtoUSB_Buffer_Data, sizeof(USARTtoUSB_Buffer_Data)); - 816: 84 ed ldi r24, 0xD4 ; 212 - 818: 91 e0 ldi r25, 0x01 ; 1 - 81a: 60 ee ldi r22, 0xE0 ; 224 - 81c: 71 e0 ldi r23, 0x01 ; 1 - 81e: dc dc rcall .-1608 ; 0x1d8 + 854: 8e ee ldi r24, 0xEE ; 238 + 856: 91 e0 ldi r25, 0x01 ; 1 + 858: 6a ef ldi r22, 0xFA ; 250 + 85a: 71 e0 ldi r23, 0x01 ; 1 + 85c: bd dc rcall .-1670 ; 0x1d8 static inline void GlobalInterruptEnable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) sei(); - 820: 78 94 sei + 85e: 78 94 sei // LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); GlobalInterruptEnable(); touchpad_init(); // you need to call this to setup the I/O pin! - 822: 1c de rcall .-968 ; 0x45c - 824: 8f ef ldi r24, 0xFF ; 255 - 826: 99 e6 ldi r25, 0x69 ; 105 - 828: a8 e1 ldi r26, 0x18 ; 24 - 82a: 81 50 subi r24, 0x01 ; 1 - 82c: 90 40 sbci r25, 0x00 ; 0 - 82e: a0 40 sbci r26, 0x00 ; 0 - 830: e1 f7 brne .-8 ; 0x82a - 832: 00 c0 rjmp .+0 ; 0x834 - 834: 00 00 nop + 860: fd dd rcall .-1030 ; 0x45c + 862: 8f ef ldi r24, 0xFF ; 255 + 864: 99 e6 ldi r25, 0x69 ; 105 + 866: a8 e1 ldi r26, 0x18 ; 24 + 868: 81 50 subi r24, 0x01 ; 1 + 86a: 90 40 sbci r25, 0x00 ; 0 + 86c: a0 40 sbci r26, 0x00 ; 0 + 86e: e1 f7 brne .-8 ; 0x868 + 870: 00 c0 rjmp .+0 ; 0x872 + 872: 00 00 nop _delay_ms(500); sei(); - 836: 78 94 sei + 874: 78 94 sei // ------------------------- // | left | down | right | // ------------------------- // uart_puts("you selected the keypad demo modus:\n\r"); touchpad_set_abs_mode(); // keypad functionality uses the "absolute mode" - 838: 22 de rcall .-956 ; 0x47e + 876: 03 de rcall .-1018 ; 0x47e + // end of keypad mode demo block +// +// #elif DEMO_MODE == ABSOLUTE_MODE + // begin of keypad mode demo block +// uart_puts("you selected the absolute position demo modus:\n\r"); + touchpad_set_abs_mode();// tell the touchpad you want to use it in the "absolute mode" + 878: 02 de rcall .-1020 ; 0x47e + } + // end of absolute mode demo block +// +// #elif DEMO_MODE == RELATIVE_MODE +// begin of relative mode demo block + uart_puts("you selected the relative position demo modus:\n\r"); + 87a: 80 e0 ldi r24, 0x00 ; 0 + 87c: 91 e0 ldi r25, 0x01 ; 1 + 87e: 59 df rcall .-334 ; 0x732 + touchpad_set_rel_mode_100dpi();// use touchpad in relative mode + 880: 1c de rcall .-968 ; 0x4ba +// touchpad_set_rel_mode_200dpi(); // uncomment this line if you want double resolution + uint8_t x, y = 0; + 882: dd 24 eor r13, r13 + } else { + y = (y + dy); + } + + uart_puts("x_pos: "); + my_uitoa(x, stringbuffer, 4); + 884: 8e 01 movw r16, r28 + 886: 0f 5f subi r16, 0xFF ; 255 + 888: 1f 4f sbci r17, 0xFF ; 255 +// #elif DEMO_MODE == RELATIVE_MODE +// begin of relative mode demo block + uart_puts("you selected the relative position demo modus:\n\r"); + touchpad_set_rel_mode_100dpi();// use touchpad in relative mode +// touchpad_set_rel_mode_200dpi(); // uncomment this line if you want double resolution + uint8_t x, y = 0; + 88a: ee 24 eor r14, r14 + 88c: ff 24 eor r15, r15 + int8_t dx, dy = 0; -/** Main program entry point. This routine contains the overall program flow, including initial - * setup of all components and the main program loop. - */ -int main(void) -{ - 83a: c0 e0 ldi r28, 0x00 ; 0 - 83c: d0 e0 ldi r29, 0x00 ; 0 -// uart_puts("you selected the keypad demo modus:\n\r"); - touchpad_set_abs_mode(); // keypad functionality uses the "absolute mode" while (1) { - - + Usb2SerialTask(); - 83e: c8 de rcall .-624 ; 0x5d0 + 88e: 49 de rcall .-878 ; 0x522 loopcounter++; - 840: 21 96 adiw r28, 0x01 ; 1 + 890: 08 94 sec + 892: e1 1c adc r14, r1 + 894: f1 1c adc r15, r1 if(loopcounter<2000) { - 842: 97 e0 ldi r25, 0x07 ; 7 - 844: c0 3d cpi r28, 0xD0 ; 208 - 846: d9 07 cpc r29, r25 - 848: d1 f7 brne .-12 ; 0x83e + 896: 90 ed ldi r25, 0xD0 ; 208 + 898: e9 16 cp r14, r25 + 89a: 97 e0 ldi r25, 0x07 ; 7 + 89c: f9 06 cpc r15, r25 + 89e: b9 f7 brne .-18 ; 0x88e continue; } - loopcounter=0; - - touchpad_read(); // read values from the touchpad - 84a: 10 de rcall .-992 ; 0x46c - - field_val = decode_field(); // decode_field returns the number of the - 84c: 7e de rcall .-772 ; 0x54a - // touch button that was pressed last. or zero if nothing happened - - switch (field_val) { - 84e: 83 30 cpi r24, 0x03 ; 3 - 850: e9 f0 breq .+58 ; 0x88c - 852: 84 30 cpi r24, 0x04 ; 4 - 854: 28 f4 brcc .+10 ; 0x860 - 856: 81 30 cpi r24, 0x01 ; 1 - 858: b1 f0 breq .+44 ; 0x886 - 85a: 82 30 cpi r24, 0x02 ; 2 - 85c: 71 f7 brne .-36 ; 0x83a - 85e: 0d c0 rjmp .+26 ; 0x87a - 860: 85 30 cpi r24, 0x05 ; 5 - 862: 71 f0 breq .+28 ; 0x880 - 864: 85 30 cpi r24, 0x05 ; 5 - 866: 18 f0 brcs .+6 ; 0x86e - 868: 86 30 cpi r24, 0x06 ; 6 - 86a: 39 f7 brne .-50 ; 0x83a - 86c: 03 c0 rjmp .+6 ; 0x874 - - case 4: - uart_puts("left\n\r"); - 86e: 80 e0 ldi r24, 0x00 ; 0 - 870: 91 e0 ldi r25, 0x01 ; 1 - 872: 0e c0 rjmp .+28 ; 0x890 - break; - case 6: - uart_puts("right\n\r"); - 874: 87 e0 ldi r24, 0x07 ; 7 - 876: 91 e0 ldi r25, 0x01 ; 1 - 878: 0b c0 rjmp .+22 ; 0x890 - break; - case 2: - uart_puts("up\n\r"); - 87a: 8f e0 ldi r24, 0x0F ; 15 - 87c: 91 e0 ldi r25, 0x01 ; 1 - 87e: 08 c0 rjmp .+16 ; 0x890 - break; - case 5: - uart_puts("down\n\r"); - 880: 84 e1 ldi r24, 0x14 ; 20 - 882: 91 e0 ldi r25, 0x01 ; 1 - 884: 05 c0 rjmp .+10 ; 0x890 - break; - case 1: - uart_puts("back\n\r"); - 886: 8b e1 ldi r24, 0x1B ; 27 - 888: 91 e0 ldi r25, 0x01 ; 1 - 88a: 02 c0 rjmp .+4 ; 0x890 - break; - case 3: - uart_puts("enter\n\r"); - 88c: 82 e2 ldi r24, 0x22 ; 34 - 88e: 91 e0 ldi r25, 0x01 ; 1 - 890: a7 df rcall .-178 ; 0x7e0 - 892: d3 cf rjmp .-90 ; 0x83a - -00000894 : + loopcounter=0; + + touchpad_read(); // read data from touchpad + 8a0: e5 dd rcall .-1078 ; 0x46c + + dx = delta_x();// returns the amount your finger has moved in x direction since last readout + 8a2: 2f de rcall .-930 ; 0x502 + 8a4: e8 2e mov r14, r24 + dy = delta_y();// returns the amount your finger has moved in y direction since last readout + 8a6: 1d de rcall .-966 ; 0x4e2 + + // increment/decrement some dummy variables with the + if (x + dx > 255) { + 8a8: 2e 2d mov r18, r14 + 8aa: 33 27 eor r19, r19 + 8ac: 27 fd sbrc r18, 7 + 8ae: 30 95 com r19 + 8b0: 2c 0d add r18, r12 + 8b2: 31 1d adc r19, r1 + 8b4: 2f 3f cpi r18, 0xFF ; 255 + 8b6: 31 05 cpc r19, r1 + 8b8: 09 f0 breq .+2 ; 0x8bc + 8ba: 24 f4 brge .+8 ; 0x8c4 + x = 255; + } else if (x + dx < 0) { + 8bc: 37 fd sbrc r19, 7 + 8be: 05 c0 rjmp .+10 ; 0x8ca + x = 0; + } else { + x = (x + dx); + 8c0: ce 0c add r12, r14 + 8c2: 04 c0 rjmp .+8 ; 0x8cc + dx = delta_x();// returns the amount your finger has moved in x direction since last readout + dy = delta_y();// returns the amount your finger has moved in y direction since last readout + + // increment/decrement some dummy variables with the + if (x + dx > 255) { + x = 255; + 8c4: cc 24 eor r12, r12 + 8c6: ca 94 dec r12 + 8c8: 01 c0 rjmp .+2 ; 0x8cc + } else if (x + dx < 0) { + x = 0; + 8ca: cc 24 eor r12, r12 + } else { + x = (x + dx); + } + + if (y + dy > 255) { + 8cc: 28 2f mov r18, r24 + 8ce: 33 27 eor r19, r19 + 8d0: 27 fd sbrc r18, 7 + 8d2: 30 95 com r19 + 8d4: 2d 0d add r18, r13 + 8d6: 31 1d adc r19, r1 + 8d8: 2f 3f cpi r18, 0xFF ; 255 + 8da: 31 05 cpc r19, r1 + 8dc: 09 f0 breq .+2 ; 0x8e0 + 8de: 24 f4 brge .+8 ; 0x8e8 + y = 255; + } else if (y + dy < 0) { + 8e0: 37 fd sbrc r19, 7 + 8e2: 05 c0 rjmp .+10 ; 0x8ee + y = 0; + } else { + y = (y + dy); + 8e4: d8 0e add r13, r24 + 8e6: 04 c0 rjmp .+8 ; 0x8f0 + } else { + x = (x + dx); + } + + if (y + dy > 255) { + y = 255; + 8e8: dd 24 eor r13, r13 + 8ea: da 94 dec r13 + 8ec: 01 c0 rjmp .+2 ; 0x8f0 + } else if (y + dy < 0) { + y = 0; + 8ee: dd 24 eor r13, r13 + } else { + y = (y + dy); + } + + uart_puts("x_pos: "); + 8f0: 81 e3 ldi r24, 0x31 ; 49 + 8f2: 91 e0 ldi r25, 0x01 ; 1 + 8f4: 1e df rcall .-452 ; 0x732 + my_uitoa(x, stringbuffer, 4); + 8f6: 6c 2d mov r22, r12 + 8f8: 70 e0 ldi r23, 0x00 ; 0 + 8fa: 80 e0 ldi r24, 0x00 ; 0 + 8fc: 90 e0 ldi r25, 0x00 ; 0 + 8fe: a8 01 movw r20, r16 + 900: 24 e0 ldi r18, 0x04 ; 4 + 902: 2a df rcall .-428 ; 0x758 + uart_puts(stringbuffer); + 904: c8 01 movw r24, r16 + 906: 15 df rcall .-470 ; 0x732 + uart_puts(" y_pos: "); + 908: 89 e3 ldi r24, 0x39 ; 57 + 90a: 91 e0 ldi r25, 0x01 ; 1 + 90c: 12 df rcall .-476 ; 0x732 + my_uitoa(y, stringbuffer, 4); + 90e: 6d 2d mov r22, r13 + 910: 70 e0 ldi r23, 0x00 ; 0 + 912: 80 e0 ldi r24, 0x00 ; 0 + 914: 90 e0 ldi r25, 0x00 ; 0 + 916: a8 01 movw r20, r16 + 918: 24 e0 ldi r18, 0x04 ; 4 + 91a: 1e df rcall .-452 ; 0x758 + uart_puts(stringbuffer); + 91c: c8 01 movw r24, r16 + 91e: 09 df rcall .-494 ; 0x732 + uart_puts("\r"); + 920: 83 e4 ldi r24, 0x43 ; 67 + 922: 91 e0 ldi r25, 0x01 ; 1 + 924: 06 df rcall .-500 ; 0x732 + 926: b1 cf rjmp .-158 ; 0x88a + +00000928 : const uint8_t DescriptorNumber = (wValue & 0xFF); const void* Address = NULL; uint16_t Size = NO_DESCRIPTOR; switch (DescriptorType) - 894: 92 30 cpi r25, 0x02 ; 2 - 896: 29 f0 breq .+10 ; 0x8a2 - 898: 93 30 cpi r25, 0x03 ; 3 - 89a: 41 f0 breq .+16 ; 0x8ac - 89c: 91 30 cpi r25, 0x01 ; 1 - 89e: e9 f4 brne .+58 ; 0x8da - 8a0: 17 c0 rjmp .+46 ; 0x8d0 + 928: 92 30 cpi r25, 0x02 ; 2 + 92a: 29 f0 breq .+10 ; 0x936 + 92c: 93 30 cpi r25, 0x03 ; 3 + 92e: 41 f0 breq .+16 ; 0x940 + 930: 91 30 cpi r25, 0x01 ; 1 + 932: e9 f4 brne .+58 ; 0x96e + 934: 17 c0 rjmp .+46 ; 0x964 Address = &DeviceDescriptor; Size = sizeof(USB_Descriptor_Device_t); break; case DTYPE_Configuration: Address = &ConfigurationDescriptor; Size = sizeof(USB_Descriptor_Configuration_t); - 8a2: 2e e3 ldi r18, 0x3E ; 62 - 8a4: 30 e0 ldi r19, 0x00 ; 0 + 936: 2e e3 ldi r18, 0x3E ; 62 + 938: 30 e0 ldi r19, 0x00 ; 0 case DTYPE_Device: Address = &DeviceDescriptor; Size = sizeof(USB_Descriptor_Device_t); break; case DTYPE_Configuration: Address = &ConfigurationDescriptor; - 8a6: ea ea ldi r30, 0xAA ; 170 - 8a8: f0 e0 ldi r31, 0x00 ; 0 + 93a: ea ea ldi r30, 0xAA ; 170 + 93c: f0 e0 ldi r31, 0x00 ; 0 Size = sizeof(USB_Descriptor_Configuration_t); break; - 8aa: 1b c0 rjmp .+54 ; 0x8e2 + 93e: 1b c0 rjmp .+54 ; 0x976 case DTYPE_String: switch (DescriptorNumber) - 8ac: 81 30 cpi r24, 0x01 ; 1 - 8ae: 41 f0 breq .+16 ; 0x8c0 - 8b0: 81 30 cpi r24, 0x01 ; 1 - 8b2: 18 f0 brcs .+6 ; 0x8ba - 8b4: 82 30 cpi r24, 0x02 ; 2 - 8b6: 89 f4 brne .+34 ; 0x8da - 8b8: 06 c0 rjmp .+12 ; 0x8c6 + 940: 81 30 cpi r24, 0x01 ; 1 + 942: 41 f0 breq .+16 ; 0x954 + 944: 81 30 cpi r24, 0x01 ; 1 + 946: 18 f0 brcs .+6 ; 0x94e + 948: 82 30 cpi r24, 0x02 ; 2 + 94a: 89 f4 brne .+34 ; 0x96e + 94c: 06 c0 rjmp .+12 ; 0x95a { case 0x00: Address = &LanguageString; Size = pgm_read_byte(&LanguageString.Header.Size); - 8ba: e8 ee ldi r30, 0xE8 ; 232 - 8bc: f0 e0 ldi r31, 0x00 ; 0 - 8be: 05 c0 rjmp .+10 ; 0x8ca + 94e: e8 ee ldi r30, 0xE8 ; 232 + 950: f0 e0 ldi r31, 0x00 ; 0 + 952: 05 c0 rjmp .+10 ; 0x95e break; case 0x01: Address = &ManufacturerString; Size = pgm_read_byte(&ManufacturerString.Header.Size); - 8c0: ec ee ldi r30, 0xEC ; 236 - 8c2: f0 e0 ldi r31, 0x00 ; 0 - 8c4: 02 c0 rjmp .+4 ; 0x8ca + 954: ec ee ldi r30, 0xEC ; 236 + 956: f0 e0 ldi r31, 0x00 ; 0 + 958: 02 c0 rjmp .+4 ; 0x95e break; case 0x02: Address = &ProductString; Size = pgm_read_byte(&ProductString.Header.Size); - 8c6: e6 e0 ldi r30, 0x06 ; 6 - 8c8: f1 e0 ldi r31, 0x01 ; 1 - 8ca: 24 91 lpm r18, Z+ - 8cc: 30 e0 ldi r19, 0x00 ; 0 + 95a: e6 e0 ldi r30, 0x06 ; 6 + 95c: f1 e0 ldi r31, 0x01 ; 1 + 95e: 24 91 lpm r18, Z+ + 960: 30 e0 ldi r19, 0x00 ; 0 break; - 8ce: 09 c0 rjmp .+18 ; 0x8e2 + 962: 09 c0 rjmp .+18 ; 0x976 switch (DescriptorType) { case DTYPE_Device: Address = &DeviceDescriptor; Size = sizeof(USB_Descriptor_Device_t); - 8d0: 22 e1 ldi r18, 0x12 ; 18 - 8d2: 30 e0 ldi r19, 0x00 ; 0 + 964: 22 e1 ldi r18, 0x12 ; 18 + 966: 30 e0 ldi r19, 0x00 ; 0 uint16_t Size = NO_DESCRIPTOR; switch (DescriptorType) { case DTYPE_Device: Address = &DeviceDescriptor; - 8d4: e8 e9 ldi r30, 0x98 ; 152 - 8d6: f0 e0 ldi r31, 0x00 ; 0 - 8d8: 04 c0 rjmp .+8 ; 0x8e2 + 968: e8 e9 ldi r30, 0x98 ; 152 + 96a: f0 e0 ldi r31, 0x00 ; 0 + 96c: 04 c0 rjmp .+8 ; 0x976 { const uint8_t DescriptorType = (wValue >> 8); const uint8_t DescriptorNumber = (wValue & 0xFF); const void* Address = NULL; uint16_t Size = NO_DESCRIPTOR; - 8da: 20 e0 ldi r18, 0x00 ; 0 - 8dc: 30 e0 ldi r19, 0x00 ; 0 + 96e: 20 e0 ldi r18, 0x00 ; 0 + 970: 30 e0 ldi r19, 0x00 ; 0 const void** const DescriptorAddress) { const uint8_t DescriptorType = (wValue >> 8); const uint8_t DescriptorNumber = (wValue & 0xFF); const void* Address = NULL; - 8de: e0 e0 ldi r30, 0x00 ; 0 - 8e0: f0 e0 ldi r31, 0x00 ; 0 + 972: e0 e0 ldi r30, 0x00 ; 0 + 974: f0 e0 ldi r31, 0x00 ; 0 } break; } *DescriptorAddress = Address; - 8e2: da 01 movw r26, r20 - 8e4: 11 96 adiw r26, 0x01 ; 1 - 8e6: fc 93 st X, r31 - 8e8: ee 93 st -X, r30 + 976: da 01 movw r26, r20 + 978: 11 96 adiw r26, 0x01 ; 1 + 97a: fc 93 st X, r31 + 97c: ee 93 st -X, r30 return Size; } - 8ea: c9 01 movw r24, r18 - 8ec: 08 95 ret + 97e: c9 01 movw r24, r18 + 980: 08 95 ret -000008ee : +00000982 : #if defined(TEMPLATE_FUNC_NAME) uint8_t TEMPLATE_FUNC_NAME (const void* const Buffer, uint16_t Length) { uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length)); - 8ee: 28 2f mov r18, r24 - 8f0: 39 2f mov r19, r25 - 8f2: f9 01 movw r30, r18 + 982: 28 2f mov r18, r24 + 984: 39 2f mov r19, r25 + 986: f9 01 movw r30, r18 bool LastPacketFull = false; if (Length > USB_ControlRequest.wLength) - 8f4: 80 91 7a 02 lds r24, 0x027A - 8f8: 90 91 7b 02 lds r25, 0x027B - 8fc: 86 17 cp r24, r22 - 8fe: 97 07 cpc r25, r23 - 900: 18 f4 brcc .+6 ; 0x908 - 902: bc 01 movw r22, r24 - 904: 20 e0 ldi r18, 0x00 ; 0 - 906: 34 c0 rjmp .+104 ; 0x970 + 988: 80 91 94 02 lds r24, 0x0294 + 98c: 90 91 95 02 lds r25, 0x0295 + 990: 86 17 cp r24, r22 + 992: 97 07 cpc r25, r23 + 994: 18 f4 brcc .+6 ; 0x99c + 996: bc 01 movw r22, r24 + 998: 20 e0 ldi r18, 0x00 ; 0 + 99a: 34 c0 rjmp .+104 ; 0xa04 Length = USB_ControlRequest.wLength; else if (!(Length)) - 908: 61 15 cp r22, r1 - 90a: 71 05 cpc r23, r1 - 90c: d9 f7 brne .-10 ; 0x904 + 99c: 61 15 cp r22, r1 + 99e: 71 05 cpc r23, r1 + 9a0: d9 f7 brne .-10 ; 0x998 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 90e: 80 91 e8 00 lds r24, 0x00E8 - 912: 8e 77 andi r24, 0x7E ; 126 - 914: 80 93 e8 00 sts 0x00E8, r24 - 918: f5 cf rjmp .-22 ; 0x904 + 9a2: 80 91 e8 00 lds r24, 0x00E8 + 9a6: 8e 77 andi r24, 0x7E ; 126 + 9a8: 80 93 e8 00 sts 0x00E8, r24 + 9ac: f5 cf rjmp .-22 ; 0x998 Endpoint_ClearIN(); while (Length || LastPacketFull) { uint8_t USB_DeviceState_LCL = USB_DeviceState; - 91a: 8e b3 in r24, 0x1e ; 30 + 9ae: 8e b3 in r24, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - 91c: 88 23 and r24, r24 - 91e: e9 f1 breq .+122 ; 0x99a + 9b0: 88 23 and r24, r24 + 9b2: e9 f1 breq .+122 ; 0xa2e return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - 920: 85 30 cpi r24, 0x05 ; 5 - 922: b9 f1 breq .+110 ; 0x992 + 9b4: 85 30 cpi r24, 0x05 ; 5 + 9b6: b9 f1 breq .+110 ; 0xa26 * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. */ static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsSETUPReceived(void) { return ((UEINTX & (1 << RXSTPI)) ? true : false); - 924: 80 91 e8 00 lds r24, 0x00E8 + 9b8: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWCSTREAM_BusSuspended; else if (Endpoint_IsSETUPReceived()) - 928: 83 fd sbrc r24, 3 - 92a: 35 c0 rjmp .+106 ; 0x996 + 9bc: 83 fd sbrc r24, 3 + 9be: 35 c0 rjmp .+106 ; 0xa2a * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - 92c: 80 91 e8 00 lds r24, 0x00E8 + 9c0: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWCSTREAM_HostAborted; else if (Endpoint_IsOUTReceived()) - 930: 82 fd sbrc r24, 2 - 932: 29 c0 rjmp .+82 ; 0x986 + 9c4: 82 fd sbrc r24, 2 + 9c6: 29 c0 rjmp .+82 ; 0xa1a * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - 934: 80 91 e8 00 lds r24, 0x00E8 + 9c8: 80 91 e8 00 lds r24, 0x00E8 break; if (Endpoint_IsINReady()) - 938: 80 ff sbrs r24, 0 - 93a: 1a c0 rjmp .+52 ; 0x970 + 9cc: 80 ff sbrs r24, 0 + 9ce: 1a c0 rjmp .+52 ; 0xa04 #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) return UEBCX; #elif defined(USB_SERIES_4_AVR) return (((uint16_t)UEBCHX << 8) | UEBCLX); #elif defined(USB_SERIES_2_AVR) return UEBCLX; - 93c: 80 91 f2 00 lds r24, 0x00F2 - 940: 90 e0 ldi r25, 0x00 ; 0 + 9d0: 80 91 f2 00 lds r24, 0x00F2 + 9d4: 90 e0 ldi r25, 0x00 ; 0 { uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) - 942: 06 c0 rjmp .+12 ; 0x950 + 9d6: 06 c0 rjmp .+12 ; 0x9e4 { TEMPLATE_TRANSFER_BYTE(DataStream); - 944: 21 91 ld r18, Z+ + 9d8: 21 91 ld r18, Z+ * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_8(const uint8_t Data) { UEDATX = Data; - 946: 20 93 f1 00 sts 0x00F1, r18 + 9da: 20 93 f1 00 sts 0x00F1, r18 TEMPLATE_BUFFER_MOVE(DataStream, 1); Length--; - 94a: 61 50 subi r22, 0x01 ; 1 - 94c: 70 40 sbci r23, 0x00 ; 0 + 9de: 61 50 subi r22, 0x01 ; 1 + 9e0: 70 40 sbci r23, 0x00 ; 0 BytesInEndpoint++; - 94e: 01 96 adiw r24, 0x01 ; 1 + 9e2: 01 96 adiw r24, 0x01 ; 1 if (Endpoint_IsINReady()) { uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) - 950: 61 15 cp r22, r1 - 952: 71 05 cpc r23, r1 - 954: 19 f0 breq .+6 ; 0x95c - 956: 88 30 cpi r24, 0x08 ; 8 - 958: 91 05 cpc r25, r1 - 95a: a0 f3 brcs .-24 ; 0x944 + 9e4: 61 15 cp r22, r1 + 9e6: 71 05 cpc r23, r1 + 9e8: 19 f0 breq .+6 ; 0x9f0 + 9ea: 88 30 cpi r24, 0x08 ; 8 + 9ec: 91 05 cpc r25, r1 + 9ee: a0 f3 brcs .-24 ; 0x9d8 TEMPLATE_BUFFER_MOVE(DataStream, 1); Length--; BytesInEndpoint++; } LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); - 95c: 21 e0 ldi r18, 0x01 ; 1 - 95e: 88 30 cpi r24, 0x08 ; 8 - 960: 91 05 cpc r25, r1 - 962: 09 f0 breq .+2 ; 0x966 - 964: 20 e0 ldi r18, 0x00 ; 0 + 9f0: 21 e0 ldi r18, 0x01 ; 1 + 9f2: 88 30 cpi r24, 0x08 ; 8 + 9f4: 91 05 cpc r25, r1 + 9f6: 09 f0 breq .+2 ; 0x9fa + 9f8: 20 e0 ldi r18, 0x00 ; 0 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 966: 80 91 e8 00 lds r24, 0x00E8 - 96a: 8e 77 andi r24, 0x7E ; 126 - 96c: 80 93 e8 00 sts 0x00E8, r24 + 9fa: 80 91 e8 00 lds r24, 0x00E8 + 9fe: 8e 77 andi r24, 0x7E ; 126 + a00: 80 93 e8 00 sts 0x00E8, r24 if (Length > USB_ControlRequest.wLength) Length = USB_ControlRequest.wLength; else if (!(Length)) Endpoint_ClearIN(); while (Length || LastPacketFull) - 970: 61 15 cp r22, r1 - 972: 71 05 cpc r23, r1 - 974: 91 f6 brne .-92 ; 0x91a - 976: 22 23 and r18, r18 - 978: 81 f6 brne .-96 ; 0x91a - 97a: 05 c0 rjmp .+10 ; 0x986 + a04: 61 15 cp r22, r1 + a06: 71 05 cpc r23, r1 + a08: 91 f6 brne .-92 ; 0x9ae + a0a: 22 23 and r18, r18 + a0c: 81 f6 brne .-96 ; 0x9ae + a0e: 05 c0 rjmp .+10 ; 0xa1a } } while (!(Endpoint_IsOUTReceived())) { uint8_t USB_DeviceState_LCL = USB_DeviceState; - 97c: 8e b3 in r24, 0x1e ; 30 + a10: 8e b3 in r24, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - 97e: 88 23 and r24, r24 - 980: 61 f0 breq .+24 ; 0x99a + a12: 88 23 and r24, r24 + a14: 61 f0 breq .+24 ; 0xa2e return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - 982: 85 30 cpi r24, 0x05 ; 5 - 984: 61 f0 breq .+24 ; 0x99e + a16: 85 30 cpi r24, 0x05 ; 5 + a18: 61 f0 breq .+24 ; 0xa32 * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - 986: 80 91 e8 00 lds r24, 0x00E8 + a1a: 80 91 e8 00 lds r24, 0x00E8 LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); Endpoint_ClearIN(); } } while (!(Endpoint_IsOUTReceived())) - 98a: 82 ff sbrs r24, 2 - 98c: f7 cf rjmp .-18 ; 0x97c + a1e: 82 ff sbrs r24, 2 + a20: f7 cf rjmp .-18 ; 0xa10 return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; } return ENDPOINT_RWCSTREAM_NoError; - 98e: 80 e0 ldi r24, 0x00 ; 0 - 990: 08 95 ret + a22: 80 e0 ldi r24, 0x00 ; 0 + a24: 08 95 ret uint8_t USB_DeviceState_LCL = USB_DeviceState; if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; - 992: 83 e0 ldi r24, 0x03 ; 3 - 994: 08 95 ret + a26: 83 e0 ldi r24, 0x03 ; 3 + a28: 08 95 ret else if (Endpoint_IsSETUPReceived()) return ENDPOINT_RWCSTREAM_HostAborted; - 996: 81 e0 ldi r24, 0x01 ; 1 - 998: 08 95 ret + a2a: 81 e0 ldi r24, 0x01 ; 1 + a2c: 08 95 ret while (!(Endpoint_IsOUTReceived())) { uint8_t USB_DeviceState_LCL = USB_DeviceState; if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) return ENDPOINT_RWCSTREAM_DeviceDisconnected; - 99a: 82 e0 ldi r24, 0x02 ; 2 - 99c: 08 95 ret + a2e: 82 e0 ldi r24, 0x02 ; 2 + a30: 08 95 ret else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; - 99e: 83 e0 ldi r24, 0x03 ; 3 + a32: 83 e0 ldi r24, 0x03 ; 3 } return ENDPOINT_RWCSTREAM_NoError; } - 9a0: 08 95 ret + a34: 08 95 ret -000009a2 : +00000a36 : #if defined(TEMPLATE_FUNC_NAME) uint8_t TEMPLATE_FUNC_NAME (const void* const Buffer, uint16_t Length) { uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length)); - 9a2: e8 2f mov r30, r24 - 9a4: f9 2f mov r31, r25 + a36: e8 2f mov r30, r24 + a38: f9 2f mov r31, r25 bool LastPacketFull = false; if (Length > USB_ControlRequest.wLength) - 9a6: 80 91 7a 02 lds r24, 0x027A - 9aa: 90 91 7b 02 lds r25, 0x027B - 9ae: 86 17 cp r24, r22 - 9b0: 97 07 cpc r25, r23 - 9b2: 18 f4 brcc .+6 ; 0x9ba - 9b4: bc 01 movw r22, r24 - 9b6: 20 e0 ldi r18, 0x00 ; 0 - 9b8: 36 c0 rjmp .+108 ; 0xa26 + a3a: 80 91 94 02 lds r24, 0x0294 + a3e: 90 91 95 02 lds r25, 0x0295 + a42: 86 17 cp r24, r22 + a44: 97 07 cpc r25, r23 + a46: 18 f4 brcc .+6 ; 0xa4e + a48: bc 01 movw r22, r24 + a4a: 20 e0 ldi r18, 0x00 ; 0 + a4c: 36 c0 rjmp .+108 ; 0xaba Length = USB_ControlRequest.wLength; else if (!(Length)) - 9ba: 61 15 cp r22, r1 - 9bc: 71 05 cpc r23, r1 - 9be: d9 f7 brne .-10 ; 0x9b6 + a4e: 61 15 cp r22, r1 + a50: 71 05 cpc r23, r1 + a52: d9 f7 brne .-10 ; 0xa4a */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 9c0: 80 91 e8 00 lds r24, 0x00E8 - 9c4: 8e 77 andi r24, 0x7E ; 126 - 9c6: 80 93 e8 00 sts 0x00E8, r24 - 9ca: f5 cf rjmp .-22 ; 0x9b6 + a54: 80 91 e8 00 lds r24, 0x00E8 + a58: 8e 77 andi r24, 0x7E ; 126 + a5a: 80 93 e8 00 sts 0x00E8, r24 + a5e: f5 cf rjmp .-22 ; 0xa4a Endpoint_ClearIN(); while (Length || LastPacketFull) { uint8_t USB_DeviceState_LCL = USB_DeviceState; - 9cc: 8e b3 in r24, 0x1e ; 30 + a60: 8e b3 in r24, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - 9ce: 88 23 and r24, r24 - 9d0: 09 f4 brne .+2 ; 0x9d4 - 9d2: 3e c0 rjmp .+124 ; 0xa50 + a62: 88 23 and r24, r24 + a64: 09 f4 brne .+2 ; 0xa68 + a66: 3e c0 rjmp .+124 ; 0xae4 return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - 9d4: 85 30 cpi r24, 0x05 ; 5 - 9d6: c1 f1 breq .+112 ; 0xa48 + a68: 85 30 cpi r24, 0x05 ; 5 + a6a: c1 f1 breq .+112 ; 0xadc * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. */ static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsSETUPReceived(void) { return ((UEINTX & (1 << RXSTPI)) ? true : false); - 9d8: 80 91 e8 00 lds r24, 0x00E8 + a6c: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWCSTREAM_BusSuspended; else if (Endpoint_IsSETUPReceived()) - 9dc: 83 fd sbrc r24, 3 - 9de: 36 c0 rjmp .+108 ; 0xa4c + a70: 83 fd sbrc r24, 3 + a72: 36 c0 rjmp .+108 ; 0xae0 * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - 9e0: 80 91 e8 00 lds r24, 0x00E8 + a74: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWCSTREAM_HostAborted; else if (Endpoint_IsOUTReceived()) - 9e4: 82 fd sbrc r24, 2 - 9e6: 2a c0 rjmp .+84 ; 0xa3c + a78: 82 fd sbrc r24, 2 + a7a: 2a c0 rjmp .+84 ; 0xad0 * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - 9e8: 80 91 e8 00 lds r24, 0x00E8 + a7c: 80 91 e8 00 lds r24, 0x00E8 break; if (Endpoint_IsINReady()) - 9ec: 80 ff sbrs r24, 0 - 9ee: 1b c0 rjmp .+54 ; 0xa26 + a80: 80 ff sbrs r24, 0 + a82: 1b c0 rjmp .+54 ; 0xaba #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) return UEBCX; #elif defined(USB_SERIES_4_AVR) return (((uint16_t)UEBCHX << 8) | UEBCLX); #elif defined(USB_SERIES_2_AVR) return UEBCLX; - 9f0: 80 91 f2 00 lds r24, 0x00F2 - 9f4: 90 e0 ldi r25, 0x00 ; 0 + a84: 80 91 f2 00 lds r24, 0x00F2 + a88: 90 e0 ldi r25, 0x00 ; 0 { uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) - 9f6: 07 c0 rjmp .+14 ; 0xa06 + a8a: 07 c0 rjmp .+14 ; 0xa9a { TEMPLATE_TRANSFER_BYTE(DataStream); - 9f8: 24 91 lpm r18, Z+ + a8c: 24 91 lpm r18, Z+ * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_8(const uint8_t Data) { UEDATX = Data; - 9fa: 20 93 f1 00 sts 0x00F1, r18 + a8e: 20 93 f1 00 sts 0x00F1, r18 TEMPLATE_BUFFER_MOVE(DataStream, 1); - 9fe: 31 96 adiw r30, 0x01 ; 1 + a92: 31 96 adiw r30, 0x01 ; 1 Length--; - a00: 61 50 subi r22, 0x01 ; 1 - a02: 70 40 sbci r23, 0x00 ; 0 + a94: 61 50 subi r22, 0x01 ; 1 + a96: 70 40 sbci r23, 0x00 ; 0 BytesInEndpoint++; - a04: 01 96 adiw r24, 0x01 ; 1 + a98: 01 96 adiw r24, 0x01 ; 1 if (Endpoint_IsINReady()) { uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) - a06: 61 15 cp r22, r1 - a08: 71 05 cpc r23, r1 - a0a: 19 f0 breq .+6 ; 0xa12 - a0c: 88 30 cpi r24, 0x08 ; 8 - a0e: 91 05 cpc r25, r1 - a10: 98 f3 brcs .-26 ; 0x9f8 + a9a: 61 15 cp r22, r1 + a9c: 71 05 cpc r23, r1 + a9e: 19 f0 breq .+6 ; 0xaa6 + aa0: 88 30 cpi r24, 0x08 ; 8 + aa2: 91 05 cpc r25, r1 + aa4: 98 f3 brcs .-26 ; 0xa8c TEMPLATE_BUFFER_MOVE(DataStream, 1); Length--; BytesInEndpoint++; } LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); - a12: 21 e0 ldi r18, 0x01 ; 1 - a14: 88 30 cpi r24, 0x08 ; 8 - a16: 91 05 cpc r25, r1 - a18: 09 f0 breq .+2 ; 0xa1c - a1a: 20 e0 ldi r18, 0x00 ; 0 + aa6: 21 e0 ldi r18, 0x01 ; 1 + aa8: 88 30 cpi r24, 0x08 ; 8 + aaa: 91 05 cpc r25, r1 + aac: 09 f0 breq .+2 ; 0xab0 + aae: 20 e0 ldi r18, 0x00 ; 0 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - a1c: 80 91 e8 00 lds r24, 0x00E8 - a20: 8e 77 andi r24, 0x7E ; 126 - a22: 80 93 e8 00 sts 0x00E8, r24 + ab0: 80 91 e8 00 lds r24, 0x00E8 + ab4: 8e 77 andi r24, 0x7E ; 126 + ab6: 80 93 e8 00 sts 0x00E8, r24 if (Length > USB_ControlRequest.wLength) Length = USB_ControlRequest.wLength; else if (!(Length)) Endpoint_ClearIN(); while (Length || LastPacketFull) - a26: 61 15 cp r22, r1 - a28: 71 05 cpc r23, r1 - a2a: 81 f6 brne .-96 ; 0x9cc - a2c: 22 23 and r18, r18 - a2e: 71 f6 brne .-100 ; 0x9cc - a30: 05 c0 rjmp .+10 ; 0xa3c + aba: 61 15 cp r22, r1 + abc: 71 05 cpc r23, r1 + abe: 81 f6 brne .-96 ; 0xa60 + ac0: 22 23 and r18, r18 + ac2: 71 f6 brne .-100 ; 0xa60 + ac4: 05 c0 rjmp .+10 ; 0xad0 } } while (!(Endpoint_IsOUTReceived())) { uint8_t USB_DeviceState_LCL = USB_DeviceState; - a32: 8e b3 in r24, 0x1e ; 30 + ac6: 8e b3 in r24, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - a34: 88 23 and r24, r24 - a36: 61 f0 breq .+24 ; 0xa50 + ac8: 88 23 and r24, r24 + aca: 61 f0 breq .+24 ; 0xae4 return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - a38: 85 30 cpi r24, 0x05 ; 5 - a3a: 61 f0 breq .+24 ; 0xa54 + acc: 85 30 cpi r24, 0x05 ; 5 + ace: 61 f0 breq .+24 ; 0xae8 * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - a3c: 80 91 e8 00 lds r24, 0x00E8 + ad0: 80 91 e8 00 lds r24, 0x00E8 LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); Endpoint_ClearIN(); } } while (!(Endpoint_IsOUTReceived())) - a40: 82 ff sbrs r24, 2 - a42: f7 cf rjmp .-18 ; 0xa32 + ad4: 82 ff sbrs r24, 2 + ad6: f7 cf rjmp .-18 ; 0xac6 return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; } return ENDPOINT_RWCSTREAM_NoError; - a44: 80 e0 ldi r24, 0x00 ; 0 - a46: 08 95 ret + ad8: 80 e0 ldi r24, 0x00 ; 0 + ada: 08 95 ret uint8_t USB_DeviceState_LCL = USB_DeviceState; if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; - a48: 83 e0 ldi r24, 0x03 ; 3 - a4a: 08 95 ret + adc: 83 e0 ldi r24, 0x03 ; 3 + ade: 08 95 ret else if (Endpoint_IsSETUPReceived()) return ENDPOINT_RWCSTREAM_HostAborted; - a4c: 81 e0 ldi r24, 0x01 ; 1 - a4e: 08 95 ret + ae0: 81 e0 ldi r24, 0x01 ; 1 + ae2: 08 95 ret while (!(Endpoint_IsOUTReceived())) { uint8_t USB_DeviceState_LCL = USB_DeviceState; if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) return ENDPOINT_RWCSTREAM_DeviceDisconnected; - a50: 82 e0 ldi r24, 0x02 ; 2 - a52: 08 95 ret + ae4: 82 e0 ldi r24, 0x02 ; 2 + ae6: 08 95 ret else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; - a54: 83 e0 ldi r24, 0x03 ; 3 + ae8: 83 e0 ldi r24, 0x03 ; 3 } return ENDPOINT_RWCSTREAM_NoError; } - a56: 08 95 ret + aea: 08 95 ret -00000a58 : +00000aec : UECFG0X = UECFG0XData; UECFG1X = UECFG1XData; return Endpoint_IsConfigured(); #else for (uint8_t EPNum = Number; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++) - a58: 98 2f mov r25, r24 - a5a: 2c c0 rjmp .+88 ; 0xab4 + aec: 98 2f mov r25, r24 + aee: 2c c0 rjmp .+88 ; 0xb48 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - a5c: 29 2f mov r18, r25 - a5e: 2f 70 andi r18, 0x0F ; 15 - a60: 20 93 e9 00 sts 0x00E9, r18 + af0: 29 2f mov r18, r25 + af2: 2f 70 andi r18, 0x0F ; 15 + af4: 20 93 e9 00 sts 0x00E9, r18 uint8_t UECFG1XTemp; uint8_t UEIENXTemp; Endpoint_SelectEndpoint(EPNum); if (EPNum == Number) - a64: 98 17 cp r25, r24 - a66: 39 f0 breq .+14 ; 0xa76 + af8: 98 17 cp r25, r24 + afa: 39 f0 breq .+14 ; 0xb0a UECFG1XTemp = UECFG1XData; UEIENXTemp = 0; } else { UECFG0XTemp = UECFG0X; - a68: 70 91 ec 00 lds r23, 0x00EC + afc: 70 91 ec 00 lds r23, 0x00EC UECFG1XTemp = UECFG1X; - a6c: 20 91 ed 00 lds r18, 0x00ED + b00: 20 91 ed 00 lds r18, 0x00ED UEIENXTemp = UEIENX; - a70: 50 91 f0 00 lds r21, 0x00F0 - a74: 03 c0 rjmp .+6 ; 0xa7c + b04: 50 91 f0 00 lds r21, 0x00F0 + b08: 03 c0 rjmp .+6 ; 0xb10 Endpoint_SelectEndpoint(EPNum); if (EPNum == Number) { UECFG0XTemp = UECFG0XData; UECFG1XTemp = UECFG1XData; - a76: 24 2f mov r18, r20 + b0a: 24 2f mov r18, r20 Endpoint_SelectEndpoint(EPNum); if (EPNum == Number) { UECFG0XTemp = UECFG0XData; - a78: 76 2f mov r23, r22 + b0c: 76 2f mov r23, r22 UECFG1XTemp = UECFG1XData; UEIENXTemp = 0; - a7a: 50 e0 ldi r21, 0x00 ; 0 + b0e: 50 e0 ldi r21, 0x00 ; 0 UECFG0XTemp = UECFG0X; UECFG1XTemp = UECFG1X; UEIENXTemp = UEIENX; } if (!(UECFG1XTemp & (1 << ALLOC))) - a7c: 21 ff sbrs r18, 1 - a7e: 19 c0 rjmp .+50 ; 0xab2 + b10: 21 ff sbrs r18, 1 + b12: 19 c0 rjmp .+50 ; 0xb46 * to and from a host. */ static inline void Endpoint_DisableEndpoint(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_DisableEndpoint(void) { UECONX &= ~(1 << EPEN); - a80: 30 91 eb 00 lds r19, 0x00EB - a84: 3e 7f andi r19, 0xFE ; 254 - a86: 30 93 eb 00 sts 0x00EB, r19 + b14: 30 91 eb 00 lds r19, 0x00EB + b18: 3e 7f andi r19, 0xFE ; 254 + b1a: 30 93 eb 00 sts 0x00EB, r19 continue; Endpoint_DisableEndpoint(); UECFG1X &= ~(1 << ALLOC); - a8a: 30 91 ed 00 lds r19, 0x00ED - a8e: 3d 7f andi r19, 0xFD ; 253 - a90: 30 93 ed 00 sts 0x00ED, r19 + b1e: 30 91 ed 00 lds r19, 0x00ED + b22: 3d 7f andi r19, 0xFD ; 253 + b24: 30 93 ed 00 sts 0x00ED, r19 * \note Endpoints must first be configured properly via \ref Endpoint_ConfigureEndpoint(). */ static inline void Endpoint_EnableEndpoint(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_EnableEndpoint(void) { UECONX |= (1 << EPEN); - a94: 30 91 eb 00 lds r19, 0x00EB - a98: 31 60 ori r19, 0x01 ; 1 - a9a: 30 93 eb 00 sts 0x00EB, r19 + b28: 30 91 eb 00 lds r19, 0x00EB + b2c: 31 60 ori r19, 0x01 ; 1 + b2e: 30 93 eb 00 sts 0x00EB, r19 Endpoint_EnableEndpoint(); UECFG0X = UECFG0XTemp; - a9e: 70 93 ec 00 sts 0x00EC, r23 + b32: 70 93 ec 00 sts 0x00EC, r23 UECFG1X = UECFG1XTemp; - aa2: 20 93 ed 00 sts 0x00ED, r18 + b36: 20 93 ed 00 sts 0x00ED, r18 UEIENX = UEIENXTemp; - aa6: 50 93 f0 00 sts 0x00F0, r21 + b3a: 50 93 f0 00 sts 0x00F0, r21 * \return Boolean \c true if the currently selected endpoint has been configured, \c false otherwise. */ static inline bool Endpoint_IsConfigured(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsConfigured(void) { return ((UESTA0X & (1 << CFGOK)) ? true : false); - aaa: 20 91 ee 00 lds r18, 0x00EE + b3e: 20 91 ee 00 lds r18, 0x00EE if (!(Endpoint_IsConfigured())) - aae: 27 ff sbrs r18, 7 - ab0: 08 c0 rjmp .+16 ; 0xac2 + b42: 27 ff sbrs r18, 7 + b44: 08 c0 rjmp .+16 ; 0xb56 UECFG0X = UECFG0XData; UECFG1X = UECFG1XData; return Endpoint_IsConfigured(); #else for (uint8_t EPNum = Number; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++) - ab2: 9f 5f subi r25, 0xFF ; 255 - ab4: 95 30 cpi r25, 0x05 ; 5 - ab6: 90 f2 brcs .-92 ; 0xa5c + b46: 9f 5f subi r25, 0xFF ; 255 + b48: 95 30 cpi r25, 0x05 ; 5 + b4a: 90 f2 brcs .-92 ; 0xaf0 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - ab8: 8f 70 andi r24, 0x0F ; 15 - aba: 80 93 e9 00 sts 0x00E9, r24 + b4c: 8f 70 andi r24, 0x0F ; 15 + b4e: 80 93 e9 00 sts 0x00E9, r24 if (!(Endpoint_IsConfigured())) return false; } Endpoint_SelectEndpoint(Number); return true; - abe: 81 e0 ldi r24, 0x01 ; 1 - ac0: 08 95 ret + b52: 81 e0 ldi r24, 0x01 ; 1 + b54: 08 95 ret UECFG0X = UECFG0XTemp; UECFG1X = UECFG1XTemp; UEIENX = UEIENXTemp; if (!(Endpoint_IsConfigured())) return false; - ac2: 80 e0 ldi r24, 0x00 ; 0 + b56: 80 e0 ldi r24, 0x00 ; 0 } Endpoint_SelectEndpoint(Number); return true; #endif } - ac4: 08 95 ret + b58: 08 95 ret -00000ac6 : +00000b5a : uint8_t USB_Device_ControlEndpointSize = ENDPOINT_CONTROLEP_DEFAULT_SIZE; #endif bool Endpoint_ConfigureEndpointTable(const USB_Endpoint_Table_t* const Table, const uint8_t Entries) { - ac6: ef 92 push r14 - ac8: ff 92 push r15 - aca: 0f 93 push r16 - acc: 1f 93 push r17 - ace: cf 93 push r28 - ad0: df 93 push r29 - ad2: 16 2f mov r17, r22 + b5a: ef 92 push r14 + b5c: ff 92 push r15 + b5e: 0f 93 push r16 + b60: 1f 93 push r17 + b62: cf 93 push r28 + b64: df 93 push r29 + b66: 16 2f mov r17, r22 { if (!(Table[i].Address)) continue; if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks))) return false; - ad4: e8 2e mov r14, r24 - ad6: e7 01 movw r28, r14 - ad8: 7e 01 movw r14, r28 - ada: f9 2e mov r15, r25 - adc: e7 01 movw r28, r14 + b68: e8 2e mov r14, r24 + b6a: e7 01 movw r28, r14 + b6c: 7e 01 movw r14, r28 + b6e: f9 2e mov r15, r25 + b70: e7 01 movw r28, r14 #endif bool Endpoint_ConfigureEndpointTable(const USB_Endpoint_Table_t* const Table, const uint8_t Entries) { for (uint8_t i = 0; i < Entries; i++) - ade: 00 e0 ldi r16, 0x00 ; 0 - ae0: 2a c0 rjmp .+84 ; 0xb36 + b72: 00 e0 ldi r16, 0x00 ; 0 + b74: 2a c0 rjmp .+84 ; 0xbca { if (!(Table[i].Address)) - ae2: 98 81 ld r25, Y - ae4: 99 23 and r25, r25 - ae6: 29 f1 breq .+74 ; 0xb32 + b76: 98 81 ld r25, Y + b78: 99 23 and r25, r25 + b7a: 29 f1 breq .+74 ; 0xbc6 continue; if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks))) - ae8: 6b 81 ldd r22, Y+3 ; 0x03 - aea: e9 81 ldd r30, Y+1 ; 0x01 - aec: fa 81 ldd r31, Y+2 ; 0x02 - aee: 2c 81 ldd r18, Y+4 ; 0x04 + b7c: 6b 81 ldd r22, Y+3 ; 0x03 + b7e: e9 81 ldd r30, Y+1 ; 0x01 + b80: fa 81 ldd r31, Y+2 ; 0x02 + b82: 2c 81 ldd r18, Y+4 ; 0x04 static inline bool Endpoint_ConfigureEndpoint(const uint8_t Address, const uint8_t Type, const uint16_t Size, const uint8_t Banks) { uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); - af0: 89 2f mov r24, r25 - af2: 8f 70 andi r24, 0x0F ; 15 + b84: 89 2f mov r24, r25 + b86: 8f 70 andi r24, 0x0F ; 15 if (Number >= ENDPOINT_TOTAL_ENDPOINTS) - af4: 85 30 cpi r24, 0x05 ; 5 - af6: 18 f5 brcc .+70 ; 0xb3e + b88: 85 30 cpi r24, 0x05 ; 5 + b8a: 18 f5 brcc .+70 ; 0xbd2 return false; return Endpoint_ConfigureEndpoint_Prv(Number, ((Type << EPTYPE0) | ((Address & ENDPOINT_DIR_IN) ? (1 << EPDIR) : 0)), - af8: 62 95 swap r22 - afa: 66 0f add r22, r22 - afc: 66 0f add r22, r22 - afe: 60 7c andi r22, 0xC0 ; 192 - b00: 99 1f adc r25, r25 - b02: 99 27 eor r25, r25 - b04: 99 1f adc r25, r25 + b8c: 62 95 swap r22 + b8e: 66 0f add r22, r22 + b90: 66 0f add r22, r22 + b92: 60 7c andi r22, 0xC0 ; 192 + b94: 99 1f adc r25, r25 + b96: 99 27 eor r25, r25 + b98: 99 1f adc r25, r25 uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); if (Number >= ENDPOINT_TOTAL_ENDPOINTS) return false; return Endpoint_ConfigureEndpoint_Prv(Number, - b06: 69 2b or r22, r25 - b08: 22 30 cpi r18, 0x02 ; 2 - b0a: 10 f0 brcs .+4 ; 0xb10 - b0c: 96 e0 ldi r25, 0x06 ; 6 - b0e: 01 c0 rjmp .+2 ; 0xb12 - b10: 92 e0 ldi r25, 0x02 ; 2 + b9a: 69 2b or r22, r25 + b9c: 22 30 cpi r18, 0x02 ; 2 + b9e: 10 f0 brcs .+4 ; 0xba4 + ba0: 96 e0 ldi r25, 0x06 ; 6 + ba2: 01 c0 rjmp .+2 ; 0xba6 + ba4: 92 e0 ldi r25, 0x02 ; 2 static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) ATTR_WARN_UNUSED_RESULT ATTR_CONST ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) { uint8_t MaskVal = 0; uint16_t CheckBytes = 8; - b12: 28 e0 ldi r18, 0x08 ; 8 - b14: 30 e0 ldi r19, 0x00 ; 0 + ba6: 28 e0 ldi r18, 0x08 ; 8 + ba8: 30 e0 ldi r19, 0x00 ; 0 /* Inline Functions: */ static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) ATTR_WARN_UNUSED_RESULT ATTR_CONST ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) { uint8_t MaskVal = 0; - b16: 40 e0 ldi r20, 0x00 ; 0 - b18: 03 c0 rjmp .+6 ; 0xb20 + baa: 40 e0 ldi r20, 0x00 ; 0 + bac: 03 c0 rjmp .+6 ; 0xbb4 uint16_t CheckBytes = 8; while (CheckBytes < Bytes) { MaskVal++; - b1a: 4f 5f subi r20, 0xFF ; 255 + bae: 4f 5f subi r20, 0xFF ; 255 CheckBytes <<= 1; - b1c: 22 0f add r18, r18 - b1e: 33 1f adc r19, r19 + bb0: 22 0f add r18, r18 + bb2: 33 1f adc r19, r19 static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) { uint8_t MaskVal = 0; uint16_t CheckBytes = 8; while (CheckBytes < Bytes) - b20: 2e 17 cp r18, r30 - b22: 3f 07 cpc r19, r31 - b24: d0 f3 brcs .-12 ; 0xb1a + bb4: 2e 17 cp r18, r30 + bb6: 3f 07 cpc r19, r31 + bb8: d0 f3 brcs .-12 ; 0xbae { MaskVal++; CheckBytes <<= 1; } return (MaskVal << EPSIZE0); - b26: 42 95 swap r20 - b28: 40 7f andi r20, 0xF0 ; 240 + bba: 42 95 swap r20 + bbc: 40 7f andi r20, 0xF0 ; 240 uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); if (Number >= ENDPOINT_TOTAL_ENDPOINTS) return false; return Endpoint_ConfigureEndpoint_Prv(Number, - b2a: 49 2b or r20, r25 - b2c: 95 df rcall .-214 ; 0xa58 - b2e: 88 23 and r24, r24 - b30: 31 f0 breq .+12 ; 0xb3e + bbe: 49 2b or r20, r25 + bc0: 95 df rcall .-214 ; 0xaec + bc2: 88 23 and r24, r24 + bc4: 31 f0 breq .+12 ; 0xbd2 #endif bool Endpoint_ConfigureEndpointTable(const USB_Endpoint_Table_t* const Table, const uint8_t Entries) { for (uint8_t i = 0; i < Entries; i++) - b32: 0f 5f subi r16, 0xFF ; 255 - b34: 25 96 adiw r28, 0x05 ; 5 - b36: 01 17 cp r16, r17 - b38: a0 f2 brcs .-88 ; 0xae2 + bc6: 0f 5f subi r16, 0xFF ; 255 + bc8: 25 96 adiw r28, 0x05 ; 5 + bca: 01 17 cp r16, r17 + bcc: a0 f2 brcs .-88 ; 0xb76 if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks))) return false; } return true; - b3a: 81 e0 ldi r24, 0x01 ; 1 - b3c: 01 c0 rjmp .+2 ; 0xb40 + bce: 81 e0 ldi r24, 0x01 ; 1 + bd0: 01 c0 rjmp .+2 ; 0xbd4 { if (!(Table[i].Address)) continue; if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks))) return false; - b3e: 80 e0 ldi r24, 0x00 ; 0 + bd2: 80 e0 ldi r24, 0x00 ; 0 } return true; } - b40: df 91 pop r29 - b42: cf 91 pop r28 - b44: 1f 91 pop r17 - b46: 0f 91 pop r16 - b48: ff 90 pop r15 - b4a: ef 90 pop r14 - b4c: 08 95 ret - -00000b4e : + bd4: df 91 pop r29 + bd6: cf 91 pop r28 + bd8: 1f 91 pop r17 + bda: 0f 91 pop r16 + bdc: ff 90 pop r15 + bde: ef 90 pop r14 + be0: 08 95 ret + +00000be2 : } } void Endpoint_ClearStatusStage(void) { if (USB_ControlRequest.bmRequestType & REQDIR_DEVICETOHOST) - b4e: 80 91 74 02 lds r24, 0x0274 - b52: 87 ff sbrs r24, 7 - b54: 11 c0 rjmp .+34 ; 0xb78 - b56: 03 c0 rjmp .+6 ; 0xb5e + be2: 80 91 8e 02 lds r24, 0x028E + be6: 87 ff sbrs r24, 7 + be8: 11 c0 rjmp .+34 ; 0xc0c + bea: 03 c0 rjmp .+6 ; 0xbf2 { while (!(Endpoint_IsOUTReceived())) { if (USB_DeviceState == DEVICE_STATE_Unattached) - b58: 8e b3 in r24, 0x1e ; 30 - b5a: 88 23 and r24, r24 - b5c: b1 f0 breq .+44 ; 0xb8a + bec: 8e b3 in r24, 0x1e ; 30 + bee: 88 23 and r24, r24 + bf0: b1 f0 breq .+44 ; 0xc1e * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - b5e: 80 91 e8 00 lds r24, 0x00E8 + bf2: 80 91 e8 00 lds r24, 0x00E8 void Endpoint_ClearStatusStage(void) { if (USB_ControlRequest.bmRequestType & REQDIR_DEVICETOHOST) { while (!(Endpoint_IsOUTReceived())) - b62: 82 ff sbrs r24, 2 - b64: f9 cf rjmp .-14 ; 0xb58 + bf6: 82 ff sbrs r24, 2 + bf8: f9 cf rjmp .-14 ; 0xbec */ static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearOUT(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); - b66: 80 91 e8 00 lds r24, 0x00E8 - b6a: 8b 77 andi r24, 0x7B ; 123 - b6c: 80 93 e8 00 sts 0x00E8, r24 - b70: 08 95 ret + bfa: 80 91 e8 00 lds r24, 0x00E8 + bfe: 8b 77 andi r24, 0x7B ; 123 + c00: 80 93 e8 00 sts 0x00E8, r24 + c04: 08 95 ret } else { while (!(Endpoint_IsINReady())) { if (USB_DeviceState == DEVICE_STATE_Unattached) - b72: 8e b3 in r24, 0x1e ; 30 - b74: 88 23 and r24, r24 - b76: 49 f0 breq .+18 ; 0xb8a + c06: 8e b3 in r24, 0x1e ; 30 + c08: 88 23 and r24, r24 + c0a: 49 f0 breq .+18 ; 0xc1e * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - b78: 80 91 e8 00 lds r24, 0x00E8 + c0c: 80 91 e8 00 lds r24, 0x00E8 Endpoint_ClearOUT(); } else { while (!(Endpoint_IsINReady())) - b7c: 80 ff sbrs r24, 0 - b7e: f9 cf rjmp .-14 ; 0xb72 + c10: 80 ff sbrs r24, 0 + c12: f9 cf rjmp .-14 ; 0xc06 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - b80: 80 91 e8 00 lds r24, 0x00E8 - b84: 8e 77 andi r24, 0x7E ; 126 - b86: 80 93 e8 00 sts 0x00E8, r24 - b8a: 08 95 ret + c14: 80 91 e8 00 lds r24, 0x00E8 + c18: 8e 77 andi r24, 0x7E ; 126 + c1a: 80 93 e8 00 sts 0x00E8, r24 + c1e: 08 95 ret -00000b8c : +00000c20 : * \return Current USB frame number from the USB controller. */ static inline uint16_t USB_Device_GetFrameNumber(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline uint16_t USB_Device_GetFrameNumber(void) { return UDFNUM; - b8c: 80 91 e4 00 lds r24, 0x00E4 - b90: 90 91 e5 00 lds r25, 0x00E5 + c20: 80 91 e4 00 lds r24, 0x00E4 + c24: 90 91 e5 00 lds r25, 0x00E5 #if !defined(CONTROL_ONLY_DEVICE) uint8_t Endpoint_WaitUntilReady(void) { #if (USB_STREAM_TIMEOUT_MS < 0xFF) uint8_t TimeoutMSRem = USB_STREAM_TIMEOUT_MS; - b94: 44 e6 ldi r20, 0x64 ; 100 + c28: 44 e6 ldi r20, 0x64 ; 100 * \return The currently selected endpoint's direction, as a \c ENDPOINT_DIR_* mask. */ static inline uint8_t Endpoint_GetEndpointDirection(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_GetEndpointDirection(void) { return (UECFG0X & (1 << EPDIR)) ? ENDPOINT_DIR_IN : ENDPOINT_DIR_OUT; - b96: 20 91 ec 00 lds r18, 0x00EC - b9a: 20 ff sbrs r18, 0 - b9c: 25 c0 rjmp .+74 ; 0xbe8 + c2a: 20 91 ec 00 lds r18, 0x00EC + c2e: 20 ff sbrs r18, 0 + c30: 25 c0 rjmp .+74 ; 0xc7c * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - b9e: 20 91 e8 00 lds r18, 0x00E8 + c32: 20 91 e8 00 lds r18, 0x00E8 for (;;) { if (Endpoint_GetEndpointDirection() == ENDPOINT_DIR_IN) { if (Endpoint_IsINReady()) - ba2: 20 fd sbrc r18, 0 - ba4: 15 c0 rjmp .+42 ; 0xbd0 + c36: 20 fd sbrc r18, 0 + c38: 15 c0 rjmp .+42 ; 0xc64 { if (Endpoint_IsOUTReceived()) return ENDPOINT_READYWAIT_NoError; } uint8_t USB_DeviceState_LCL = USB_DeviceState; - ba6: 2e b3 in r18, 0x1e ; 30 + c3a: 2e b3 in r18, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - ba8: 22 23 and r18, r18 - baa: a1 f0 breq .+40 ; 0xbd4 + c3c: 22 23 and r18, r18 + c3e: a1 f0 breq .+40 ; 0xc68 return ENDPOINT_READYWAIT_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - bac: 25 30 cpi r18, 0x05 ; 5 - bae: a1 f0 breq .+40 ; 0xbd8 + c40: 25 30 cpi r18, 0x05 ; 5 + c42: a1 f0 breq .+40 ; 0xc6c * \return Boolean \c true if the currently selected endpoint is stalled, \c false otherwise. */ static inline bool Endpoint_IsStalled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsStalled(void) { return ((UECONX & (1 << STALLRQ)) ? true : false); - bb0: 20 91 eb 00 lds r18, 0x00EB + c44: 20 91 eb 00 lds r18, 0x00EB return ENDPOINT_READYWAIT_BusSuspended; else if (Endpoint_IsStalled()) - bb4: 25 fd sbrc r18, 5 - bb6: 12 c0 rjmp .+36 ; 0xbdc - bb8: 20 91 e4 00 lds r18, 0x00E4 - bbc: 30 91 e5 00 lds r19, 0x00E5 + c48: 25 fd sbrc r18, 5 + c4a: 12 c0 rjmp .+36 ; 0xc70 + c4c: 20 91 e4 00 lds r18, 0x00E4 + c50: 30 91 e5 00 lds r19, 0x00E5 return ENDPOINT_READYWAIT_EndpointStalled; uint16_t CurrentFrameNumber = USB_Device_GetFrameNumber(); if (CurrentFrameNumber != PreviousFrameNumber) - bc0: 28 17 cp r18, r24 - bc2: 39 07 cpc r19, r25 - bc4: 41 f3 breq .-48 ; 0xb96 + c54: 28 17 cp r18, r24 + c56: 39 07 cpc r19, r25 + c58: 41 f3 breq .-48 ; 0xc2a { PreviousFrameNumber = CurrentFrameNumber; if (!(TimeoutMSRem--)) - bc6: 44 23 and r20, r20 - bc8: 59 f0 breq .+22 ; 0xbe0 - bca: 41 50 subi r20, 0x01 ; 1 - bcc: c9 01 movw r24, r18 - bce: e3 cf rjmp .-58 ; 0xb96 + c5a: 44 23 and r20, r20 + c5c: 59 f0 breq .+22 ; 0xc74 + c5e: 41 50 subi r20, 0x01 ; 1 + c60: c9 01 movw r24, r18 + c62: e3 cf rjmp .-58 ; 0xc2a for (;;) { if (Endpoint_GetEndpointDirection() == ENDPOINT_DIR_IN) { if (Endpoint_IsINReady()) return ENDPOINT_READYWAIT_NoError; - bd0: 80 e0 ldi r24, 0x00 ; 0 - bd2: 08 95 ret + c64: 80 e0 ldi r24, 0x00 ; 0 + c66: 08 95 ret } uint8_t USB_DeviceState_LCL = USB_DeviceState; if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) return ENDPOINT_READYWAIT_DeviceDisconnected; - bd4: 82 e0 ldi r24, 0x02 ; 2 - bd6: 08 95 ret + c68: 82 e0 ldi r24, 0x02 ; 2 + c6a: 08 95 ret else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_READYWAIT_BusSuspended; - bd8: 83 e0 ldi r24, 0x03 ; 3 - bda: 08 95 ret + c6c: 83 e0 ldi r24, 0x03 ; 3 + c6e: 08 95 ret else if (Endpoint_IsStalled()) return ENDPOINT_READYWAIT_EndpointStalled; - bdc: 81 e0 ldi r24, 0x01 ; 1 - bde: 08 95 ret + c70: 81 e0 ldi r24, 0x01 ; 1 + c72: 08 95 ret if (CurrentFrameNumber != PreviousFrameNumber) { PreviousFrameNumber = CurrentFrameNumber; if (!(TimeoutMSRem--)) return ENDPOINT_READYWAIT_Timeout; - be0: 84 e0 ldi r24, 0x04 ; 4 - be2: 08 95 ret + c74: 84 e0 ldi r24, 0x04 ; 4 + c76: 08 95 ret return ENDPOINT_READYWAIT_NoError; } else { if (Endpoint_IsOUTReceived()) return ENDPOINT_READYWAIT_NoError; - be4: 80 e0 ldi r24, 0x00 ; 0 + c78: 80 e0 ldi r24, 0x00 ; 0 if (!(TimeoutMSRem--)) return ENDPOINT_READYWAIT_Timeout; } } } - be6: 08 95 ret + c7a: 08 95 ret * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - be8: 20 91 e8 00 lds r18, 0x00E8 + c7c: 20 91 e8 00 lds r18, 0x00E8 if (Endpoint_IsINReady()) return ENDPOINT_READYWAIT_NoError; } else { if (Endpoint_IsOUTReceived()) - bec: 22 ff sbrs r18, 2 - bee: db cf rjmp .-74 ; 0xba6 - bf0: f9 cf rjmp .-14 ; 0xbe4 + c80: 22 ff sbrs r18, 2 + c82: db cf rjmp .-74 ; 0xc3a + c84: f9 cf rjmp .-14 ; 0xc78 -00000bf2 : +00000c86 : { #if defined(USB_CAN_BE_BOTH) bool UIDModeSelectEnabled = ((UHWCON & (1 << UIDE)) != 0); #endif USB_INT_DisableAllInterrupts(); - bf2: 40 d0 rcall .+128 ; 0xc74 + c86: 40 d0 rcall .+128 ; 0xd08 USB_INT_ClearAllInterrupts(); - bf4: 42 d0 rcall .+132 ; 0xc7a + c88: 42 d0 rcall .+132 ; 0xd0e } static inline void USB_Controller_Reset(void) ATTR_ALWAYS_INLINE; static inline void USB_Controller_Reset(void) { USBCON &= ~(1 << USBE); - bf6: 80 91 d8 00 lds r24, 0x00D8 - bfa: 8f 77 andi r24, 0x7F ; 127 - bfc: 80 93 d8 00 sts 0x00D8, r24 + c8a: 80 91 d8 00 lds r24, 0x00D8 + c8e: 8f 77 andi r24, 0x7F ; 127 + c90: 80 93 d8 00 sts 0x00D8, r24 USBCON |= (1 << USBE); - c00: 80 91 d8 00 lds r24, 0x00D8 - c04: 80 68 ori r24, 0x80 ; 128 - c06: 80 93 d8 00 sts 0x00D8, r24 + c94: 80 91 d8 00 lds r24, 0x00D8 + c98: 80 68 ori r24, 0x80 ; 128 + c9a: 80 93 d8 00 sts 0x00D8, r24 } static inline void USB_CLK_Unfreeze(void) ATTR_ALWAYS_INLINE; static inline void USB_CLK_Unfreeze(void) { USBCON &= ~(1 << FRZCLK); - c0a: 80 91 d8 00 lds r24, 0x00D8 - c0e: 8f 7d andi r24, 0xDF ; 223 - c10: 80 93 d8 00 sts 0x00D8, r24 + c9e: 80 91 d8 00 lds r24, 0x00D8 + ca2: 8f 7d andi r24, 0xDF ; 223 + ca4: 80 93 d8 00 sts 0x00D8, r24 /* Inline Functions: */ static inline void USB_PLL_On(void) ATTR_ALWAYS_INLINE; static inline void USB_PLL_On(void) { PLLCSR = USB_PLL_PSC; - c14: 84 e0 ldi r24, 0x04 ; 4 - c16: 89 bd out 0x29, r24 ; 41 + ca8: 84 e0 ldi r24, 0x04 ; 4 + caa: 89 bd out 0x29, r24 ; 41 PLLCSR = (USB_PLL_PSC | (1 << PLLE)); - c18: 86 e0 ldi r24, 0x06 ; 6 - c1a: 89 bd out 0x29, r24 ; 41 + cac: 86 e0 ldi r24, 0x06 ; 6 + cae: 89 bd out 0x29, r24 ; 41 if (!(USB_Options & USB_OPT_MANUAL_PLL)) { #if defined(USB_SERIES_2_AVR) USB_PLL_On(); while (!(USB_PLL_IsReady())); - c1c: 09 b4 in r0, 0x29 ; 41 - c1e: 00 fe sbrs r0, 0 - c20: fd cf rjmp .-6 ; 0xc1c + cb0: 09 b4 in r0, 0x29 ; 41 + cb2: 00 fe sbrs r0, 0 + cb4: fd cf rjmp .-6 ; 0xcb0 } #if defined(USB_CAN_BE_DEVICE) static void USB_Init_Device(void) { USB_DeviceState = DEVICE_STATE_Unattached; - c22: 1e ba out 0x1e, r1 ; 30 + cb6: 1e ba out 0x1e, r1 ; 30 USB_Device_ConfigurationNumber = 0; - c24: 10 92 70 02 sts 0x0270, r1 + cb8: 10 92 8a 02 sts 0x028A, r1 #if !defined(NO_DEVICE_REMOTE_WAKEUP) USB_Device_RemoteWakeupEnabled = false; - c28: 10 92 72 02 sts 0x0272, r1 + cbc: 10 92 8c 02 sts 0x028C, r1 #endif #if !defined(NO_DEVICE_SELF_POWER) USB_Device_CurrentlySelfPowered = false; - c2c: 10 92 71 02 sts 0x0271, r1 + cc0: 10 92 8b 02 sts 0x028B, r1 uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); if (Number >= ENDPOINT_TOTAL_ENDPOINTS) return false; return Endpoint_ConfigureEndpoint_Prv(Number, - c30: 80 e0 ldi r24, 0x00 ; 0 - c32: 60 e0 ldi r22, 0x00 ; 0 - c34: 42 e0 ldi r20, 0x02 ; 2 - c36: 10 df rcall .-480 ; 0xa58 + cc4: 80 e0 ldi r24, 0x00 ; 0 + cc6: 60 e0 ldi r22, 0x00 ; 0 + cc8: 42 e0 ldi r20, 0x02 ; 2 + cca: 10 df rcall .-480 ; 0xaec #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDINT &= ~(1 << WAKEUPI); break; case USB_INT_SUSPI: UDINT &= ~(1 << SUSPI); - c38: 80 91 e1 00 lds r24, 0x00E1 - c3c: 8e 7f andi r24, 0xFE ; 254 - c3e: 80 93 e1 00 sts 0x00E1, r24 + ccc: 80 91 e1 00 lds r24, 0x00E1 + cd0: 8e 7f andi r24, 0xFE ; 254 + cd2: 80 93 e1 00 sts 0x00E1, r24 #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN |= (1 << WAKEUPE); break; case USB_INT_SUSPI: UDIEN |= (1 << SUSPE); - c42: 80 91 e2 00 lds r24, 0x00E2 - c46: 81 60 ori r24, 0x01 ; 1 - c48: 80 93 e2 00 sts 0x00E2, r24 + cd6: 80 91 e2 00 lds r24, 0x00E2 + cda: 81 60 ori r24, 0x01 ; 1 + cdc: 80 93 e2 00 sts 0x00E2, r24 break; case USB_INT_EORSTI: UDIEN |= (1 << EORSTE); - c4c: 80 91 e2 00 lds r24, 0x00E2 - c50: 88 60 ori r24, 0x08 ; 8 - c52: 80 93 e2 00 sts 0x00E2, r24 + ce0: 80 91 e2 00 lds r24, 0x00E2 + ce4: 88 60 ori r24, 0x08 ; 8 + ce6: 80 93 e2 00 sts 0x00E2, r24 * register and despite the datasheet making no mention of its requirement in host mode. */ static inline void USB_Attach(void) ATTR_ALWAYS_INLINE; static inline void USB_Attach(void) { UDCON &= ~(1 << DETACH); - c56: 80 91 e0 00 lds r24, 0x00E0 - c5a: 8e 7f andi r24, 0xFE ; 254 - c5c: 80 93 e0 00 sts 0x00E0, r24 + cea: 80 91 e0 00 lds r24, 0x00E0 + cee: 8e 7f andi r24, 0xFE ; 254 + cf0: 80 93 e0 00 sts 0x00E0, r24 } #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) USB_OTGPAD_On(); #endif } - c60: 08 95 ret + cf4: 08 95 ret -00000c62 : +00000cf6 : static inline void USB_REG_On(void) { #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) UHWCON |= (1 << UVREGE); #else REGCR &= ~(1 << REGDIS); - c62: e3 e6 ldi r30, 0x63 ; 99 - c64: f0 e0 ldi r31, 0x00 ; 0 - c66: 80 81 ld r24, Z - c68: 8e 7f andi r24, 0xFE ; 254 - c6a: 80 83 st Z, r24 + cf6: e3 e6 ldi r30, 0x63 ; 99 + cf8: f0 e0 ldi r31, 0x00 ; 0 + cfa: 80 81 ld r24, Z + cfc: 8e 7f andi r24, 0xFE ; 254 + cfe: 80 83 st Z, r24 UHWCON &= ~(1 << UIDE); USB_CurrentMode = Mode; } #endif USB_IsInitialized = true; - c6c: 81 e0 ldi r24, 0x01 ; 1 - c6e: 80 93 73 02 sts 0x0273, r24 + d00: 81 e0 ldi r24, 0x01 ; 1 + d02: 80 93 8d 02 sts 0x028D, r24 USB_ResetInterface(); } - c72: bf cf rjmp .-130 ; 0xbf2 + d06: bf cf rjmp .-130 ; 0xc86 -00000c74 : +00000d08 : #if defined(USB_CAN_BE_HOST) UHIEN = 0; #endif #if defined(USB_CAN_BE_DEVICE) UDIEN = 0; - c74: 10 92 e2 00 sts 0x00E2, r1 + d08: 10 92 e2 00 sts 0x00E2, r1 #endif } - c78: 08 95 ret + d0c: 08 95 ret -00000c7a : +00000d0e : #if defined(USB_CAN_BE_HOST) UHINT = 0; #endif #if defined(USB_CAN_BE_DEVICE) UDINT = 0; - c7a: 10 92 e1 00 sts 0x00E1, r1 + d0e: 10 92 e1 00 sts 0x00E1, r1 #endif } - c7e: 08 95 ret + d12: 08 95 ret -00000c80 <__vector_11>: +00000d14 <__vector_11>: ISR(USB_GEN_vect, ISR_BLOCK) { - c80: 1f 92 push r1 - c82: 0f 92 push r0 - c84: 0f b6 in r0, 0x3f ; 63 - c86: 0f 92 push r0 - c88: 11 24 eor r1, r1 - c8a: 2f 93 push r18 - c8c: 3f 93 push r19 - c8e: 4f 93 push r20 - c90: 5f 93 push r21 - c92: 6f 93 push r22 - c94: 7f 93 push r23 - c96: 8f 93 push r24 - c98: 9f 93 push r25 - c9a: af 93 push r26 - c9c: bf 93 push r27 - c9e: ef 93 push r30 - ca0: ff 93 push r31 + d14: 1f 92 push r1 + d16: 0f 92 push r0 + d18: 0f b6 in r0, 0x3f ; 63 + d1a: 0f 92 push r0 + d1c: 11 24 eor r1, r1 + d1e: 2f 93 push r18 + d20: 3f 93 push r19 + d22: 4f 93 push r20 + d24: 5f 93 push r21 + d26: 6f 93 push r22 + d28: 7f 93 push r23 + d2a: 8f 93 push r24 + d2c: 9f 93 push r25 + d2e: af 93 push r26 + d30: bf 93 push r27 + d32: ef 93 push r30 + d34: ff 93 push r31 case USB_INT_SUSPI: return (UDINT & (1 << SUSPI)); case USB_INT_EORSTI: return (UDINT & (1 << EORSTI)); case USB_INT_SOFI: return (UDINT & (1 << SOFI)); - ca2: 80 91 e1 00 lds r24, 0x00E1 + d36: 80 91 e1 00 lds r24, 0x00E1 #if defined(USB_CAN_BE_DEVICE) #if !defined(NO_SOF_EVENTS) if (USB_INT_HasOccurred(USB_INT_SOFI) && USB_INT_IsEnabled(USB_INT_SOFI)) - ca6: 82 ff sbrs r24, 2 - ca8: 0a c0 rjmp .+20 ; 0xcbe <__vector_11+0x3e> + d3a: 82 ff sbrs r24, 2 + d3c: 0a c0 rjmp .+20 ; 0xd52 <__vector_11+0x3e> case USB_INT_SUSPI: return (UDIEN & (1 << SUSPE)); case USB_INT_EORSTI: return (UDIEN & (1 << EORSTE)); case USB_INT_SOFI: return (UDIEN & (1 << SOFE)); - caa: 80 91 e2 00 lds r24, 0x00E2 - cae: 82 ff sbrs r24, 2 - cb0: 06 c0 rjmp .+12 ; 0xcbe <__vector_11+0x3e> + d3e: 80 91 e2 00 lds r24, 0x00E2 + d42: 82 ff sbrs r24, 2 + d44: 06 c0 rjmp .+12 ; 0xd52 <__vector_11+0x3e> break; case USB_INT_EORSTI: UDINT &= ~(1 << EORSTI); break; case USB_INT_SOFI: UDINT &= ~(1 << SOFI); - cb2: 80 91 e1 00 lds r24, 0x00E1 - cb6: 8b 7f andi r24, 0xFB ; 251 - cb8: 80 93 e1 00 sts 0x00E1, r24 + d46: 80 91 e1 00 lds r24, 0x00E1 + d4a: 8b 7f andi r24, 0xFB ; 251 + d4c: 80 93 e1 00 sts 0x00E1, r24 { USB_INT_Clear(USB_INT_SOFI); EVENT_USB_Device_StartOfFrame(); - cbc: 21 d2 rcall .+1090 ; 0x1100 + d50: 21 d2 rcall .+1090 ; 0x1194 #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: return (UDINT & (1 << WAKEUPI)); case USB_INT_SUSPI: return (UDINT & (1 << SUSPI)); - cbe: 80 91 e1 00 lds r24, 0x00E1 + d52: 80 91 e1 00 lds r24, 0x00E1 EVENT_USB_Device_Disconnect(); } } #endif if (USB_INT_HasOccurred(USB_INT_SUSPI) && USB_INT_IsEnabled(USB_INT_SUSPI)) - cc2: 80 ff sbrs r24, 0 - cc4: 16 c0 rjmp .+44 ; 0xcf2 <__vector_11+0x72> + d56: 80 ff sbrs r24, 0 + d58: 16 c0 rjmp .+44 ; 0xd86 <__vector_11+0x72> #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: return (UDIEN & (1 << WAKEUPE)); case USB_INT_SUSPI: return (UDIEN & (1 << SUSPE)); - cc6: 80 91 e2 00 lds r24, 0x00E2 - cca: 80 ff sbrs r24, 0 - ccc: 12 c0 rjmp .+36 ; 0xcf2 <__vector_11+0x72> + d5a: 80 91 e2 00 lds r24, 0x00E2 + d5e: 80 ff sbrs r24, 0 + d60: 12 c0 rjmp .+36 ; 0xd86 <__vector_11+0x72> #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN &= ~(1 << WAKEUPE); break; case USB_INT_SUSPI: UDIEN &= ~(1 << SUSPE); - cce: 80 91 e2 00 lds r24, 0x00E2 - cd2: 8e 7f andi r24, 0xFE ; 254 - cd4: 80 93 e2 00 sts 0x00E2, r24 + d62: 80 91 e2 00 lds r24, 0x00E2 + d66: 8e 7f andi r24, 0xFE ; 254 + d68: 80 93 e2 00 sts 0x00E2, r24 USBCON |= (1 << IDTE); break; #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN |= (1 << WAKEUPE); - cd8: 80 91 e2 00 lds r24, 0x00E2 - cdc: 80 61 ori r24, 0x10 ; 16 - cde: 80 93 e2 00 sts 0x00E2, r24 + d6c: 80 91 e2 00 lds r24, 0x00E2 + d70: 80 61 ori r24, 0x10 ; 16 + d72: 80 93 e2 00 sts 0x00E2, r24 #endif static inline void USB_CLK_Freeze(void) ATTR_ALWAYS_INLINE; static inline void USB_CLK_Freeze(void) { USBCON |= (1 << FRZCLK); - ce2: 80 91 d8 00 lds r24, 0x00D8 - ce6: 80 62 ori r24, 0x20 ; 32 - ce8: 80 93 d8 00 sts 0x00D8, r24 + d76: 80 91 d8 00 lds r24, 0x00D8 + d7a: 80 62 ori r24, 0x20 ; 32 + d7c: 80 93 d8 00 sts 0x00D8, r24 } static inline void USB_PLL_Off(void) ATTR_ALWAYS_INLINE; static inline void USB_PLL_Off(void) { PLLCSR = 0; - cec: 19 bc out 0x29, r1 ; 41 + d80: 19 bc out 0x29, r1 ; 41 if (!(USB_Options & USB_OPT_MANUAL_PLL)) USB_PLL_Off(); #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT) USB_DeviceState = DEVICE_STATE_Unattached; - cee: 1e ba out 0x1e, r1 ; 30 + d82: 1e ba out 0x1e, r1 ; 30 EVENT_USB_Device_Disconnect(); - cf0: de dc rcall .-1604 ; 0x6ae + d84: 3d dc rcall .-1926 ; 0x600 case USB_INT_IDTI: return (USBINT & (1 << IDTI)); #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: return (UDINT & (1 << WAKEUPI)); - cf2: 80 91 e1 00 lds r24, 0x00E1 + d86: 80 91 e1 00 lds r24, 0x00E1 USB_DeviceState = DEVICE_STATE_Suspended; EVENT_USB_Device_Suspend(); #endif } if (USB_INT_HasOccurred(USB_INT_WAKEUPI) && USB_INT_IsEnabled(USB_INT_WAKEUPI)) - cf6: 84 ff sbrs r24, 4 - cf8: 2c c0 rjmp .+88 ; 0xd52 <__vector_11+0xd2> + d8a: 84 ff sbrs r24, 4 + d8c: 2c c0 rjmp .+88 ; 0xde6 <__vector_11+0xd2> case USB_INT_IDTI: return (USBCON & (1 << IDTE)); #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: return (UDIEN & (1 << WAKEUPE)); - cfa: 80 91 e2 00 lds r24, 0x00E2 - cfe: 84 ff sbrs r24, 4 - d00: 28 c0 rjmp .+80 ; 0xd52 <__vector_11+0xd2> + d8e: 80 91 e2 00 lds r24, 0x00E2 + d92: 84 ff sbrs r24, 4 + d94: 28 c0 rjmp .+80 ; 0xde6 <__vector_11+0xd2> /* Inline Functions: */ static inline void USB_PLL_On(void) ATTR_ALWAYS_INLINE; static inline void USB_PLL_On(void) { PLLCSR = USB_PLL_PSC; - d02: 84 e0 ldi r24, 0x04 ; 4 - d04: 89 bd out 0x29, r24 ; 41 + d96: 84 e0 ldi r24, 0x04 ; 4 + d98: 89 bd out 0x29, r24 ; 41 PLLCSR = (USB_PLL_PSC | (1 << PLLE)); - d06: 86 e0 ldi r24, 0x06 ; 6 - d08: 89 bd out 0x29, r24 ; 41 + d9a: 86 e0 ldi r24, 0x06 ; 6 + d9c: 89 bd out 0x29, r24 ; 41 { if (!(USB_Options & USB_OPT_MANUAL_PLL)) { USB_PLL_On(); while (!(USB_PLL_IsReady())); - d0a: 09 b4 in r0, 0x29 ; 41 - d0c: 00 fe sbrs r0, 0 - d0e: fd cf rjmp .-6 ; 0xd0a <__vector_11+0x8a> + d9e: 09 b4 in r0, 0x29 ; 41 + da0: 00 fe sbrs r0, 0 + da2: fd cf rjmp .-6 ; 0xd9e <__vector_11+0x8a> } static inline void USB_CLK_Unfreeze(void) ATTR_ALWAYS_INLINE; static inline void USB_CLK_Unfreeze(void) { USBCON &= ~(1 << FRZCLK); - d10: 80 91 d8 00 lds r24, 0x00D8 - d14: 8f 7d andi r24, 0xDF ; 223 - d16: 80 93 d8 00 sts 0x00D8, r24 + da4: 80 91 d8 00 lds r24, 0x00D8 + da8: 8f 7d andi r24, 0xDF ; 223 + daa: 80 93 d8 00 sts 0x00D8, r24 USBINT &= ~(1 << IDTI); break; #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDINT &= ~(1 << WAKEUPI); - d1a: 80 91 e1 00 lds r24, 0x00E1 - d1e: 8f 7e andi r24, 0xEF ; 239 - d20: 80 93 e1 00 sts 0x00E1, r24 + dae: 80 91 e1 00 lds r24, 0x00E1 + db2: 8f 7e andi r24, 0xEF ; 239 + db4: 80 93 e1 00 sts 0x00E1, r24 USBCON &= ~(1 << IDTE); break; #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN &= ~(1 << WAKEUPE); - d24: 80 91 e2 00 lds r24, 0x00E2 - d28: 8f 7e andi r24, 0xEF ; 239 - d2a: 80 93 e2 00 sts 0x00E2, r24 + db8: 80 91 e2 00 lds r24, 0x00E2 + dbc: 8f 7e andi r24, 0xEF ; 239 + dbe: 80 93 e2 00 sts 0x00E2, r24 #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN |= (1 << WAKEUPE); break; case USB_INT_SUSPI: UDIEN |= (1 << SUSPE); - d2e: 80 91 e2 00 lds r24, 0x00E2 - d32: 81 60 ori r24, 0x01 ; 1 - d34: 80 93 e2 00 sts 0x00E2, r24 + dc2: 80 91 e2 00 lds r24, 0x00E2 + dc6: 81 60 ori r24, 0x01 ; 1 + dc8: 80 93 e2 00 sts 0x00E2, r24 USB_INT_Clear(USB_INT_WAKEUPI); USB_INT_Disable(USB_INT_WAKEUPI); USB_INT_Enable(USB_INT_SUSPI); if (USB_Device_ConfigurationNumber) - d38: 80 91 70 02 lds r24, 0x0270 - d3c: 88 23 and r24, r24 - d3e: 21 f4 brne .+8 ; 0xd48 <__vector_11+0xc8> + dcc: 80 91 8a 02 lds r24, 0x028A + dd0: 88 23 and r24, r24 + dd2: 21 f4 brne .+8 ; 0xddc <__vector_11+0xc8> } static inline bool USB_Device_IsAddressSet(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline bool USB_Device_IsAddressSet(void) { return (UDADDR & (1 << ADDEN)); - d40: 80 91 e3 00 lds r24, 0x00E3 + dd4: 80 91 e3 00 lds r24, 0x00E3 USB_DeviceState = DEVICE_STATE_Configured; else USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered; - d44: 87 ff sbrs r24, 7 - d46: 02 c0 rjmp .+4 ; 0xd4c <__vector_11+0xcc> - d48: 84 e0 ldi r24, 0x04 ; 4 - d4a: 01 c0 rjmp .+2 ; 0xd4e <__vector_11+0xce> - d4c: 81 e0 ldi r24, 0x01 ; 1 - d4e: 8e bb out 0x1e, r24 ; 30 + dd8: 87 ff sbrs r24, 7 + dda: 02 c0 rjmp .+4 ; 0xde0 <__vector_11+0xcc> + ddc: 84 e0 ldi r24, 0x04 ; 4 + dde: 01 c0 rjmp .+2 ; 0xde2 <__vector_11+0xce> + de0: 81 e0 ldi r24, 0x01 ; 1 + de2: 8e bb out 0x1e, r24 ; 30 #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT) EVENT_USB_Device_Connect(); - d50: ad dc rcall .-1702 ; 0x6ac + de4: 0c dc rcall .-2024 ; 0x5fe case USB_INT_WAKEUPI: return (UDINT & (1 << WAKEUPI)); case USB_INT_SUSPI: return (UDINT & (1 << SUSPI)); case USB_INT_EORSTI: return (UDINT & (1 << EORSTI)); - d52: 80 91 e1 00 lds r24, 0x00E1 + de6: 80 91 e1 00 lds r24, 0x00E1 #else EVENT_USB_Device_WakeUp(); #endif } if (USB_INT_HasOccurred(USB_INT_EORSTI) && USB_INT_IsEnabled(USB_INT_EORSTI)) - d56: 83 ff sbrs r24, 3 - d58: 26 c0 rjmp .+76 ; 0xda6 <__vector_11+0x126> + dea: 83 ff sbrs r24, 3 + dec: 26 c0 rjmp .+76 ; 0xe3a <__vector_11+0x126> case USB_INT_WAKEUPI: return (UDIEN & (1 << WAKEUPE)); case USB_INT_SUSPI: return (UDIEN & (1 << SUSPE)); case USB_INT_EORSTI: return (UDIEN & (1 << EORSTE)); - d5a: 80 91 e2 00 lds r24, 0x00E2 - d5e: 83 ff sbrs r24, 3 - d60: 22 c0 rjmp .+68 ; 0xda6 <__vector_11+0x126> + dee: 80 91 e2 00 lds r24, 0x00E2 + df2: 83 ff sbrs r24, 3 + df4: 22 c0 rjmp .+68 ; 0xe3a <__vector_11+0x126> break; case USB_INT_SUSPI: UDINT &= ~(1 << SUSPI); break; case USB_INT_EORSTI: UDINT &= ~(1 << EORSTI); - d62: 80 91 e1 00 lds r24, 0x00E1 - d66: 87 7f andi r24, 0xF7 ; 247 - d68: 80 93 e1 00 sts 0x00E1, r24 + df6: 80 91 e1 00 lds r24, 0x00E1 + dfa: 87 7f andi r24, 0xF7 ; 247 + dfc: 80 93 e1 00 sts 0x00E1, r24 { USB_INT_Clear(USB_INT_EORSTI); USB_DeviceState = DEVICE_STATE_Default; - d6c: 82 e0 ldi r24, 0x02 ; 2 - d6e: 8e bb out 0x1e, r24 ; 30 + e00: 82 e0 ldi r24, 0x02 ; 2 + e02: 8e bb out 0x1e, r24 ; 30 USB_Device_ConfigurationNumber = 0; - d70: 10 92 70 02 sts 0x0270, r1 + e04: 10 92 8a 02 sts 0x028A, r1 #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDINT &= ~(1 << WAKEUPI); break; case USB_INT_SUSPI: UDINT &= ~(1 << SUSPI); - d74: 80 91 e1 00 lds r24, 0x00E1 - d78: 8e 7f andi r24, 0xFE ; 254 - d7a: 80 93 e1 00 sts 0x00E1, r24 + e08: 80 91 e1 00 lds r24, 0x00E1 + e0c: 8e 7f andi r24, 0xFE ; 254 + e0e: 80 93 e1 00 sts 0x00E1, r24 #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN &= ~(1 << WAKEUPE); break; case USB_INT_SUSPI: UDIEN &= ~(1 << SUSPE); - d7e: 80 91 e2 00 lds r24, 0x00E2 - d82: 8e 7f andi r24, 0xFE ; 254 - d84: 80 93 e2 00 sts 0x00E2, r24 + e12: 80 91 e2 00 lds r24, 0x00E2 + e16: 8e 7f andi r24, 0xFE ; 254 + e18: 80 93 e2 00 sts 0x00E2, r24 USBCON |= (1 << IDTE); break; #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN |= (1 << WAKEUPE); - d88: 80 91 e2 00 lds r24, 0x00E2 - d8c: 80 61 ori r24, 0x10 ; 16 - d8e: 80 93 e2 00 sts 0x00E2, r24 + e1c: 80 91 e2 00 lds r24, 0x00E2 + e20: 80 61 ori r24, 0x10 ; 16 + e22: 80 93 e2 00 sts 0x00E2, r24 uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); if (Number >= ENDPOINT_TOTAL_ENDPOINTS) return false; return Endpoint_ConfigureEndpoint_Prv(Number, - d92: 80 e0 ldi r24, 0x00 ; 0 - d94: 60 e0 ldi r22, 0x00 ; 0 - d96: 42 e0 ldi r20, 0x02 ; 2 - d98: 5f de rcall .-834 ; 0xa58 + e26: 80 e0 ldi r24, 0x00 ; 0 + e28: 60 e0 ldi r22, 0x00 ; 0 + e2a: 42 e0 ldi r20, 0x02 ; 2 + e2c: 5f de rcall .-834 ; 0xaec break; case USB_INT_SOFI: UDIEN |= (1 << SOFE); break; case USB_INT_RXSTPI: UEIENX |= (1 << RXSTPE); - d9a: 80 91 f0 00 lds r24, 0x00F0 - d9e: 88 60 ori r24, 0x08 ; 8 - da0: 80 93 f0 00 sts 0x00F0, r24 + e2e: 80 91 f0 00 lds r24, 0x00F0 + e32: 88 60 ori r24, 0x08 ; 8 + e34: 80 93 f0 00 sts 0x00F0, r24 #if defined(INTERRUPT_CONTROL_ENDPOINT) USB_INT_Enable(USB_INT_RXSTPI); #endif EVENT_USB_Device_Reset(); - da4: ad d1 rcall .+858 ; 0x1100 + e38: ad d1 rcall .+858 ; 0x1194 USB_ResetInterface(); EVENT_USB_UIDChange(); } #endif } - da6: ff 91 pop r31 - da8: ef 91 pop r30 - daa: bf 91 pop r27 - dac: af 91 pop r26 - dae: 9f 91 pop r25 - db0: 8f 91 pop r24 - db2: 7f 91 pop r23 - db4: 6f 91 pop r22 - db6: 5f 91 pop r21 - db8: 4f 91 pop r20 - dba: 3f 91 pop r19 - dbc: 2f 91 pop r18 - dbe: 0f 90 pop r0 - dc0: 0f be out 0x3f, r0 ; 63 - dc2: 0f 90 pop r0 - dc4: 1f 90 pop r1 - dc6: 18 95 reti - -00000dc8 <__vector_12>: + e3a: ff 91 pop r31 + e3c: ef 91 pop r30 + e3e: bf 91 pop r27 + e40: af 91 pop r26 + e42: 9f 91 pop r25 + e44: 8f 91 pop r24 + e46: 7f 91 pop r23 + e48: 6f 91 pop r22 + e4a: 5f 91 pop r21 + e4c: 4f 91 pop r20 + e4e: 3f 91 pop r19 + e50: 2f 91 pop r18 + e52: 0f 90 pop r0 + e54: 0f be out 0x3f, r0 ; 63 + e56: 0f 90 pop r0 + e58: 1f 90 pop r1 + e5a: 18 95 reti + +00000e5c <__vector_12>: #if defined(INTERRUPT_CONTROL_ENDPOINT) && defined(USB_CAN_BE_DEVICE) ISR(USB_COM_vect, ISR_BLOCK) { - dc8: 1f 92 push r1 - dca: 0f 92 push r0 - dcc: 0f b6 in r0, 0x3f ; 63 - dce: 0f 92 push r0 - dd0: 11 24 eor r1, r1 - dd2: 1f 93 push r17 - dd4: 2f 93 push r18 - dd6: 3f 93 push r19 - dd8: 4f 93 push r20 - dda: 5f 93 push r21 - ddc: 6f 93 push r22 - dde: 7f 93 push r23 - de0: 8f 93 push r24 - de2: 9f 93 push r25 - de4: af 93 push r26 - de6: bf 93 push r27 - de8: ef 93 push r30 - dea: ff 93 push r31 + e5c: 1f 92 push r1 + e5e: 0f 92 push r0 + e60: 0f b6 in r0, 0x3f ; 63 + e62: 0f 92 push r0 + e64: 11 24 eor r1, r1 + e66: 1f 93 push r17 + e68: 2f 93 push r18 + e6a: 3f 93 push r19 + e6c: 4f 93 push r20 + e6e: 5f 93 push r21 + e70: 6f 93 push r22 + e72: 7f 93 push r23 + e74: 8f 93 push r24 + e76: 9f 93 push r25 + e78: af 93 push r26 + e7a: bf 93 push r27 + e7c: ef 93 push r30 + e7e: ff 93 push r31 */ static inline uint8_t Endpoint_GetCurrentEndpoint(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_GetCurrentEndpoint(void) { #if !defined(CONTROL_ONLY_DEVICE) return ((UENUM & ENDPOINT_EPNUM_MASK) | Endpoint_GetEndpointDirection()); - dec: 10 91 e9 00 lds r17, 0x00E9 - df0: 1f 70 andi r17, 0x0F ; 15 + e80: 10 91 e9 00 lds r17, 0x00E9 + e84: 1f 70 andi r17, 0x0F ; 15 * \return The currently selected endpoint's direction, as a \c ENDPOINT_DIR_* mask. */ static inline uint8_t Endpoint_GetEndpointDirection(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_GetEndpointDirection(void) { return (UECFG0X & (1 << EPDIR)) ? ENDPOINT_DIR_IN : ENDPOINT_DIR_OUT; - df2: 80 91 ec 00 lds r24, 0x00EC + e86: 80 91 ec 00 lds r24, 0x00EC */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - df6: 10 92 e9 00 sts 0x00E9, r1 + e8a: 10 92 e9 00 sts 0x00E9, r1 break; case USB_INT_SOFI: UDIEN &= ~(1 << SOFE); break; case USB_INT_RXSTPI: UEIENX &= ~(1 << RXSTPE); - dfa: 80 91 f0 00 lds r24, 0x00F0 - dfe: 87 7f andi r24, 0xF7 ; 247 - e00: 80 93 f0 00 sts 0x00F0, r24 + e8e: 80 91 f0 00 lds r24, 0x00F0 + e92: 87 7f andi r24, 0xF7 ; 247 + e94: 80 93 f0 00 sts 0x00F0, r24 static inline void GlobalInterruptEnable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) sei(); - e04: 78 94 sei + e98: 78 94 sei Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); USB_INT_Disable(USB_INT_RXSTPI); GlobalInterruptEnable(); USB_Device_ProcessControlRequest(); - e06: 1b d0 rcall .+54 ; 0xe3e - e08: 10 92 e9 00 sts 0x00E9, r1 + e9a: 1b d0 rcall .+54 ; 0xed2 + e9c: 10 92 e9 00 sts 0x00E9, r1 break; case USB_INT_SOFI: UDIEN |= (1 << SOFE); break; case USB_INT_RXSTPI: UEIENX |= (1 << RXSTPE); - e0c: 80 91 f0 00 lds r24, 0x00F0 - e10: 88 60 ori r24, 0x08 ; 8 - e12: 80 93 f0 00 sts 0x00F0, r24 - e16: 10 93 e9 00 sts 0x00E9, r17 + ea0: 80 91 f0 00 lds r24, 0x00F0 + ea4: 88 60 ori r24, 0x08 ; 8 + ea6: 80 93 f0 00 sts 0x00F0, r24 + eaa: 10 93 e9 00 sts 0x00E9, r17 Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); USB_INT_Enable(USB_INT_RXSTPI); Endpoint_SelectEndpoint(PrevSelectedEndpoint); } - e1a: ff 91 pop r31 - e1c: ef 91 pop r30 - e1e: bf 91 pop r27 - e20: af 91 pop r26 - e22: 9f 91 pop r25 - e24: 8f 91 pop r24 - e26: 7f 91 pop r23 - e28: 6f 91 pop r22 - e2a: 5f 91 pop r21 - e2c: 4f 91 pop r20 - e2e: 3f 91 pop r19 - e30: 2f 91 pop r18 - e32: 1f 91 pop r17 - e34: 0f 90 pop r0 - e36: 0f be out 0x3f, r0 ; 63 - e38: 0f 90 pop r0 - e3a: 1f 90 pop r1 - e3c: 18 95 reti - -00000e3e : + eae: ff 91 pop r31 + eb0: ef 91 pop r30 + eb2: bf 91 pop r27 + eb4: af 91 pop r26 + eb6: 9f 91 pop r25 + eb8: 8f 91 pop r24 + eba: 7f 91 pop r23 + ebc: 6f 91 pop r22 + ebe: 5f 91 pop r21 + ec0: 4f 91 pop r20 + ec2: 3f 91 pop r19 + ec4: 2f 91 pop r18 + ec6: 1f 91 pop r17 + ec8: 0f 90 pop r0 + eca: 0f be out 0x3f, r0 ; 63 + ecc: 0f 90 pop r0 + ece: 1f 90 pop r1 + ed0: 18 95 reti + +00000ed2 : #if !defined(NO_DEVICE_REMOTE_WAKEUP) bool USB_Device_RemoteWakeupEnabled; #endif void USB_Device_ProcessControlRequest(void) { - e3e: 1f 93 push r17 - e40: df 93 push r29 - e42: cf 93 push r28 - e44: cd b7 in r28, 0x3d ; 61 - e46: de b7 in r29, 0x3e ; 62 - e48: ac 97 sbiw r28, 0x2c ; 44 - e4a: 0f b6 in r0, 0x3f ; 63 - e4c: f8 94 cli - e4e: de bf out 0x3e, r29 ; 62 - e50: 0f be out 0x3f, r0 ; 63 - e52: cd bf out 0x3d, r28 ; 61 + ed2: 1f 93 push r17 + ed4: df 93 push r29 + ed6: cf 93 push r28 + ed8: cd b7 in r28, 0x3d ; 61 + eda: de b7 in r29, 0x3e ; 62 + edc: ac 97 sbiw r28, 0x2c ; 44 + ede: 0f b6 in r0, 0x3f ; 63 + ee0: f8 94 cli + ee2: de bf out 0x3e, r29 ; 62 + ee4: 0f be out 0x3f, r0 ; 63 + ee6: cd bf out 0x3d, r28 ; 61 USB_ControlRequest.bRequest = Endpoint_Read_8(); USB_ControlRequest.wValue = Endpoint_Read_16_LE(); USB_ControlRequest.wIndex = Endpoint_Read_16_LE(); USB_ControlRequest.wLength = Endpoint_Read_16_LE(); #else uint8_t* RequestHeader = (uint8_t*)&USB_ControlRequest; - e54: e4 e7 ldi r30, 0x74 ; 116 - e56: f2 e0 ldi r31, 0x02 ; 2 + ee8: ee e8 ldi r30, 0x8E ; 142 + eea: f2 e0 ldi r31, 0x02 ; 2 * \return Next byte in the currently selected endpoint's FIFO buffer. */ static inline uint8_t Endpoint_Read_8(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_Read_8(void) { return UEDATX; - e58: 80 91 f1 00 lds r24, 0x00F1 + eec: 80 91 f1 00 lds r24, 0x00F1 for (uint8_t RequestHeaderByte = 0; RequestHeaderByte < sizeof(USB_Request_Header_t); RequestHeaderByte++) *(RequestHeader++) = Endpoint_Read_8(); - e5c: 81 93 st Z+, r24 + ef0: 81 93 st Z+, r24 USB_ControlRequest.wIndex = Endpoint_Read_16_LE(); USB_ControlRequest.wLength = Endpoint_Read_16_LE(); #else uint8_t* RequestHeader = (uint8_t*)&USB_ControlRequest; for (uint8_t RequestHeaderByte = 0; RequestHeaderByte < sizeof(USB_Request_Header_t); RequestHeaderByte++) - e5e: 22 e0 ldi r18, 0x02 ; 2 - e60: ec 37 cpi r30, 0x7C ; 124 - e62: f2 07 cpc r31, r18 - e64: c9 f7 brne .-14 ; 0xe58 + ef2: 22 e0 ldi r18, 0x02 ; 2 + ef4: e6 39 cpi r30, 0x96 ; 150 + ef6: f2 07 cpc r31, r18 + ef8: c9 f7 brne .-14 ; 0xeec *(RequestHeader++) = Endpoint_Read_8(); #endif EVENT_USB_Device_ControlRequest(); - e66: 27 dc rcall .-1970 ; 0x6b6 + efa: 86 db rcall .-2292 ; 0x608 * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. */ static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsSETUPReceived(void) { return ((UEINTX & (1 << RXSTPI)) ? true : false); - e68: 80 91 e8 00 lds r24, 0x00E8 + efc: 80 91 e8 00 lds r24, 0x00E8 if (Endpoint_IsSETUPReceived()) - e6c: 83 ff sbrs r24, 3 - e6e: 30 c1 rjmp .+608 ; 0x10d0 + f00: 83 ff sbrs r24, 3 + f02: 30 c1 rjmp .+608 ; 0x1164 { uint8_t bmRequestType = USB_ControlRequest.bmRequestType; - e70: 80 91 74 02 lds r24, 0x0274 + f04: 80 91 8e 02 lds r24, 0x028E switch (USB_ControlRequest.bRequest) - e74: 20 91 75 02 lds r18, 0x0275 - e78: 25 30 cpi r18, 0x05 ; 5 - e7a: 09 f4 brne .+2 ; 0xe7e - e7c: 84 c0 rjmp .+264 ; 0xf86 - e7e: 26 30 cpi r18, 0x06 ; 6 - e80: 40 f4 brcc .+16 ; 0xe92 - e82: 21 30 cpi r18, 0x01 ; 1 - e84: a1 f1 breq .+104 ; 0xeee - e86: 21 30 cpi r18, 0x01 ; 1 - e88: 70 f0 brcs .+28 ; 0xea6 - e8a: 23 30 cpi r18, 0x03 ; 3 - e8c: 09 f0 breq .+2 ; 0xe90 - e8e: 20 c1 rjmp .+576 ; 0x10d0 - e90: 2e c0 rjmp .+92 ; 0xeee - e92: 28 30 cpi r18, 0x08 ; 8 - e94: 09 f4 brne .+2 ; 0xe98 - e96: ef c0 rjmp .+478 ; 0x1076 - e98: 29 30 cpi r18, 0x09 ; 9 - e9a: 09 f4 brne .+2 ; 0xe9e - e9c: fe c0 rjmp .+508 ; 0x109a - e9e: 26 30 cpi r18, 0x06 ; 6 - ea0: 09 f0 breq .+2 ; 0xea4 - ea2: 16 c1 rjmp .+556 ; 0x10d0 - ea4: 92 c0 rjmp .+292 ; 0xfca + f08: 20 91 8f 02 lds r18, 0x028F + f0c: 25 30 cpi r18, 0x05 ; 5 + f0e: 09 f4 brne .+2 ; 0xf12 + f10: 84 c0 rjmp .+264 ; 0x101a + f12: 26 30 cpi r18, 0x06 ; 6 + f14: 40 f4 brcc .+16 ; 0xf26 + f16: 21 30 cpi r18, 0x01 ; 1 + f18: a1 f1 breq .+104 ; 0xf82 + f1a: 21 30 cpi r18, 0x01 ; 1 + f1c: 70 f0 brcs .+28 ; 0xf3a + f1e: 23 30 cpi r18, 0x03 ; 3 + f20: 09 f0 breq .+2 ; 0xf24 + f22: 20 c1 rjmp .+576 ; 0x1164 + f24: 2e c0 rjmp .+92 ; 0xf82 + f26: 28 30 cpi r18, 0x08 ; 8 + f28: 09 f4 brne .+2 ; 0xf2c + f2a: ef c0 rjmp .+478 ; 0x110a + f2c: 29 30 cpi r18, 0x09 ; 9 + f2e: 09 f4 brne .+2 ; 0xf32 + f30: fe c0 rjmp .+508 ; 0x112e + f32: 26 30 cpi r18, 0x06 ; 6 + f34: 09 f0 breq .+2 ; 0xf38 + f36: 16 c1 rjmp .+556 ; 0x1164 + f38: 92 c0 rjmp .+292 ; 0x105e { case REQ_GetStatus: if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) || - ea6: 80 38 cpi r24, 0x80 ; 128 - ea8: 21 f0 breq .+8 ; 0xeb2 - eaa: 82 38 cpi r24, 0x82 ; 130 - eac: 09 f0 breq .+2 ; 0xeb0 - eae: 10 c1 rjmp .+544 ; 0x10d0 - eb0: 08 c0 rjmp .+16 ; 0xec2 + f3a: 80 38 cpi r24, 0x80 ; 128 + f3c: 21 f0 breq .+8 ; 0xf46 + f3e: 82 38 cpi r24, 0x82 ; 130 + f40: 09 f0 breq .+2 ; 0xf44 + f42: 10 c1 rjmp .+544 ; 0x1164 + f44: 08 c0 rjmp .+16 ; 0xf56 Endpoint_ClearOUT(); } static void USB_Device_GetStatus(void) { uint8_t CurrentStatus = 0; - eb2: 80 91 71 02 lds r24, 0x0271 + f46: 80 91 8b 02 lds r24, 0x028B if (USB_Device_CurrentlySelfPowered) CurrentStatus |= FEATURE_SELFPOWERED_ENABLED; #endif #if !defined(NO_DEVICE_REMOTE_WAKEUP) if (USB_Device_RemoteWakeupEnabled) - eb6: 90 91 72 02 lds r25, 0x0272 - eba: 99 23 and r25, r25 - ebc: 71 f0 breq .+28 ; 0xeda + f4a: 90 91 8c 02 lds r25, 0x028C + f4e: 99 23 and r25, r25 + f50: 71 f0 breq .+28 ; 0xf6e CurrentStatus |= FEATURE_REMOTE_WAKEUP_ENABLED; - ebe: 82 60 ori r24, 0x02 ; 2 - ec0: 0c c0 rjmp .+24 ; 0xeda + f52: 82 60 ori r24, 0x02 ; 2 + f54: 0c c0 rjmp .+24 ; 0xf6e */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - ec2: 80 91 78 02 lds r24, 0x0278 - ec6: 8f 70 andi r24, 0x0F ; 15 - ec8: 80 93 e9 00 sts 0x00E9, r24 + f56: 80 91 92 02 lds r24, 0x0292 + f5a: 8f 70 andi r24, 0x0F ; 15 + f5c: 80 93 e9 00 sts 0x00E9, r24 * \return Boolean \c true if the currently selected endpoint is stalled, \c false otherwise. */ static inline bool Endpoint_IsStalled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsStalled(void) { return ((UECONX & (1 << STALLRQ)) ? true : false); - ecc: 90 91 eb 00 lds r25, 0x00EB + f60: 90 91 eb 00 lds r25, 0x00EB break; case (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_ENDPOINT): #if !defined(CONTROL_ONLY_DEVICE) Endpoint_SelectEndpoint((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK); CurrentStatus = Endpoint_IsStalled(); - ed0: 81 e0 ldi r24, 0x01 ; 1 - ed2: 95 ff sbrs r25, 5 - ed4: 80 e0 ldi r24, 0x00 ; 0 + f64: 81 e0 ldi r24, 0x01 ; 1 + f66: 95 ff sbrs r25, 5 + f68: 80 e0 ldi r24, 0x00 ; 0 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - ed6: 10 92 e9 00 sts 0x00E9, r1 + f6a: 10 92 e9 00 sts 0x00E9, r1 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - eda: 90 91 e8 00 lds r25, 0x00E8 - ede: 97 7f andi r25, 0xF7 ; 247 - ee0: 90 93 e8 00 sts 0x00E8, r25 + f6e: 90 91 e8 00 lds r25, 0x00E8 + f72: 97 7f andi r25, 0xF7 ; 247 + f74: 90 93 e8 00 sts 0x00E8, r25 * \param[in] Data Data to write to the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_16_LE(const uint16_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_16_LE(const uint16_t Data) { UEDATX = (Data & 0xFF); - ee4: 80 93 f1 00 sts 0x00F1, r24 + f78: 80 93 f1 00 sts 0x00F1, r24 UEDATX = (Data >> 8); - ee8: 10 92 f1 00 sts 0x00F1, r1 - eec: cf c0 rjmp .+414 ; 0x108c + f7c: 10 92 f1 00 sts 0x00F1, r1 + f80: cf c0 rjmp .+414 ; 0x1120 } break; case REQ_ClearFeature: case REQ_SetFeature: if ((bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) || - eee: 88 23 and r24, r24 - ef0: 19 f0 breq .+6 ; 0xef8 - ef2: 82 30 cpi r24, 0x02 ; 2 - ef4: 09 f0 breq .+2 ; 0xef8 - ef6: ec c0 rjmp .+472 ; 0x10d0 + f82: 88 23 and r24, r24 + f84: 19 f0 breq .+6 ; 0xf8c + f86: 82 30 cpi r24, 0x02 ; 2 + f88: 09 f0 breq .+2 ; 0xf8c + f8a: ec c0 rjmp .+472 ; 0x1164 Endpoint_ClearStatusStage(); } static void USB_Device_ClearSetFeature(void) { switch (USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_RECIPIENT) - ef8: 90 e0 ldi r25, 0x00 ; 0 - efa: 8f 71 andi r24, 0x1F ; 31 - efc: 90 70 andi r25, 0x00 ; 0 - efe: 00 97 sbiw r24, 0x00 ; 0 - f00: 29 f0 breq .+10 ; 0xf0c - f02: 82 30 cpi r24, 0x02 ; 2 - f04: 91 05 cpc r25, r1 - f06: 09 f0 breq .+2 ; 0xf0a - f08: e3 c0 rjmp .+454 ; 0x10d0 - f0a: 0b c0 rjmp .+22 ; 0xf22 + f8c: 90 e0 ldi r25, 0x00 ; 0 + f8e: 8f 71 andi r24, 0x1F ; 31 + f90: 90 70 andi r25, 0x00 ; 0 + f92: 00 97 sbiw r24, 0x00 ; 0 + f94: 29 f0 breq .+10 ; 0xfa0 + f96: 82 30 cpi r24, 0x02 ; 2 + f98: 91 05 cpc r25, r1 + f9a: 09 f0 breq .+2 ; 0xf9e + f9c: e3 c0 rjmp .+454 ; 0x1164 + f9e: 0b c0 rjmp .+22 ; 0xfb6 { #if !defined(NO_DEVICE_REMOTE_WAKEUP) case REQREC_DEVICE: if ((uint8_t)USB_ControlRequest.wValue == FEATURE_SEL_DeviceRemoteWakeup) - f0c: 80 91 76 02 lds r24, 0x0276 - f10: 81 30 cpi r24, 0x01 ; 1 - f12: 09 f0 breq .+2 ; 0xf16 - f14: dd c0 rjmp .+442 ; 0x10d0 + fa0: 80 91 90 02 lds r24, 0x0290 + fa4: 81 30 cpi r24, 0x01 ; 1 + fa6: 09 f0 breq .+2 ; 0xfaa + fa8: dd c0 rjmp .+442 ; 0x1164 USB_Device_RemoteWakeupEnabled = (USB_ControlRequest.bRequest == REQ_SetFeature); - f16: 23 30 cpi r18, 0x03 ; 3 - f18: 09 f0 breq .+2 ; 0xf1c - f1a: 80 e0 ldi r24, 0x00 ; 0 - f1c: 80 93 72 02 sts 0x0272, r24 - f20: 2c c0 rjmp .+88 ; 0xf7a + faa: 23 30 cpi r18, 0x03 ; 3 + fac: 09 f0 breq .+2 ; 0xfb0 + fae: 80 e0 ldi r24, 0x00 ; 0 + fb0: 80 93 8c 02 sts 0x028C, r24 + fb4: 2c c0 rjmp .+88 ; 0x100e break; #endif #if !defined(CONTROL_ONLY_DEVICE) case REQREC_ENDPOINT: if ((uint8_t)USB_ControlRequest.wValue == FEATURE_SEL_EndpointHalt) - f22: 80 91 76 02 lds r24, 0x0276 - f26: 88 23 and r24, r24 - f28: 41 f5 brne .+80 ; 0xf7a + fb6: 80 91 90 02 lds r24, 0x0290 + fba: 88 23 and r24, r24 + fbc: 41 f5 brne .+80 ; 0x100e { uint8_t EndpointIndex = ((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK); - f2a: 20 91 78 02 lds r18, 0x0278 - f2e: 2f 70 andi r18, 0x0F ; 15 + fbe: 20 91 92 02 lds r18, 0x0292 + fc2: 2f 70 andi r18, 0x0F ; 15 if (EndpointIndex == ENDPOINT_CONTROLEP) - f30: 09 f4 brne .+2 ; 0xf34 - f32: ce c0 rjmp .+412 ; 0x10d0 + fc4: 09 f4 brne .+2 ; 0xfc8 + fc6: ce c0 rjmp .+412 ; 0x1164 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - f34: 20 93 e9 00 sts 0x00E9, r18 + fc8: 20 93 e9 00 sts 0x00E9, r18 * \return Boolean \c true if the currently selected endpoint is enabled, \c false otherwise. */ static inline bool Endpoint_IsEnabled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsEnabled(void) { return ((UECONX & (1 << EPEN)) ? true : false); - f38: 80 91 eb 00 lds r24, 0x00EB + fcc: 80 91 eb 00 lds r24, 0x00EB return; Endpoint_SelectEndpoint(EndpointIndex); if (Endpoint_IsEnabled()) - f3c: 80 ff sbrs r24, 0 - f3e: 1d c0 rjmp .+58 ; 0xf7a + fd0: 80 ff sbrs r24, 0 + fd2: 1d c0 rjmp .+58 ; 0x100e { if (USB_ControlRequest.bRequest == REQ_SetFeature) - f40: 80 91 75 02 lds r24, 0x0275 - f44: 83 30 cpi r24, 0x03 ; 3 - f46: 21 f4 brne .+8 ; 0xf50 + fd4: 80 91 8f 02 lds r24, 0x028F + fd8: 83 30 cpi r24, 0x03 ; 3 + fda: 21 f4 brne .+8 ; 0xfe4 * \ingroup Group_EndpointPacketManagement_AVR8 */ static inline void Endpoint_StallTransaction(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_StallTransaction(void) { UECONX |= (1 << STALLRQ); - f48: 80 91 eb 00 lds r24, 0x00EB - f4c: 80 62 ori r24, 0x20 ; 32 - f4e: 13 c0 rjmp .+38 ; 0xf76 + fdc: 80 91 eb 00 lds r24, 0x00EB + fe0: 80 62 ori r24, 0x20 ; 32 + fe2: 13 c0 rjmp .+38 ; 0x100a * \ingroup Group_EndpointPacketManagement_AVR8 */ static inline void Endpoint_ClearStall(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearStall(void) { UECONX |= (1 << STALLRQC); - f50: 80 91 eb 00 lds r24, 0x00EB - f54: 80 61 ori r24, 0x10 ; 16 - f56: 80 93 eb 00 sts 0x00EB, r24 + fe4: 80 91 eb 00 lds r24, 0x00EB + fe8: 80 61 ori r24, 0x10 ; 16 + fea: 80 93 eb 00 sts 0x00EB, r24 * \param[in] Address Endpoint address whose FIFO buffers are to be reset. */ static inline void Endpoint_ResetEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_ResetEndpoint(const uint8_t Address) { UERST = (1 << (Address & ENDPOINT_EPNUM_MASK)); - f5a: 81 e0 ldi r24, 0x01 ; 1 - f5c: 90 e0 ldi r25, 0x00 ; 0 - f5e: 02 c0 rjmp .+4 ; 0xf64 - f60: 88 0f add r24, r24 - f62: 99 1f adc r25, r25 - f64: 2a 95 dec r18 - f66: e2 f7 brpl .-8 ; 0xf60 - f68: 80 93 ea 00 sts 0x00EA, r24 + fee: 81 e0 ldi r24, 0x01 ; 1 + ff0: 90 e0 ldi r25, 0x00 ; 0 + ff2: 02 c0 rjmp .+4 ; 0xff8 + ff4: 88 0f add r24, r24 + ff6: 99 1f adc r25, r25 + ff8: 2a 95 dec r18 + ffa: e2 f7 brpl .-8 ; 0xff4 + ffc: 80 93 ea 00 sts 0x00EA, r24 UERST = 0; - f6c: 10 92 ea 00 sts 0x00EA, r1 + 1000: 10 92 ea 00 sts 0x00EA, r1 /** Resets the data toggle of the currently selected endpoint. */ static inline void Endpoint_ResetDataToggle(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ResetDataToggle(void) { UECONX |= (1 << RSTDT); - f70: 80 91 eb 00 lds r24, 0x00EB - f74: 88 60 ori r24, 0x08 ; 8 - f76: 80 93 eb 00 sts 0x00EB, r24 + 1004: 80 91 eb 00 lds r24, 0x00EB + 1008: 88 60 ori r24, 0x08 ; 8 + 100a: 80 93 eb 00 sts 0x00EB, r24 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - f7a: 10 92 e9 00 sts 0x00E9, r1 + 100e: 10 92 e9 00 sts 0x00E9, r1 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - f7e: 80 91 e8 00 lds r24, 0x00E8 - f82: 87 7f andi r24, 0xF7 ; 247 - f84: 86 c0 rjmp .+268 ; 0x1092 + 1012: 80 91 e8 00 lds r24, 0x00E8 + 1016: 87 7f andi r24, 0xF7 ; 247 + 1018: 86 c0 rjmp .+268 ; 0x1126 USB_Device_ClearSetFeature(); } break; case REQ_SetAddress: if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) - f86: 88 23 and r24, r24 - f88: 09 f0 breq .+2 ; 0xf8c - f8a: a2 c0 rjmp .+324 ; 0x10d0 + 101a: 88 23 and r24, r24 + 101c: 09 f0 breq .+2 ; 0x1020 + 101e: a2 c0 rjmp .+324 ; 0x1164 } } static void USB_Device_SetAddress(void) { uint8_t DeviceAddress = (USB_ControlRequest.wValue & 0x7F); - f8c: 10 91 76 02 lds r17, 0x0276 - f90: 1f 77 andi r17, 0x7F ; 127 + 1020: 10 91 90 02 lds r17, 0x0290 + 1024: 1f 77 andi r17, 0x7F ; 127 #endif static inline void USB_Device_SetDeviceAddress(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void USB_Device_SetDeviceAddress(const uint8_t Address) { UDADDR = (UDADDR & (1 << ADDEN)) | (Address & 0x7F); - f92: 80 91 e3 00 lds r24, 0x00E3 - f96: 80 78 andi r24, 0x80 ; 128 - f98: 81 2b or r24, r17 - f9a: 80 93 e3 00 sts 0x00E3, r24 - f9e: 80 91 e8 00 lds r24, 0x00E8 - fa2: 87 7f andi r24, 0xF7 ; 247 - fa4: 80 93 e8 00 sts 0x00E8, r24 + 1026: 80 91 e3 00 lds r24, 0x00E3 + 102a: 80 78 andi r24, 0x80 ; 128 + 102c: 81 2b or r24, r17 + 102e: 80 93 e3 00 sts 0x00E3, r24 + 1032: 80 91 e8 00 lds r24, 0x00E8 + 1036: 87 7f andi r24, 0xF7 ; 247 + 1038: 80 93 e8 00 sts 0x00E8, r24 USB_Device_SetDeviceAddress(DeviceAddress); Endpoint_ClearSETUP(); Endpoint_ClearStatusStage(); - fa8: d2 dd rcall .-1116 ; 0xb4e + 103c: d2 dd rcall .-1116 ; 0xbe2 * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - faa: 80 91 e8 00 lds r24, 0x00E8 + 103e: 80 91 e8 00 lds r24, 0x00E8 while (!(Endpoint_IsINReady())); - fae: 80 ff sbrs r24, 0 - fb0: fc cf rjmp .-8 ; 0xfaa + 1042: 80 ff sbrs r24, 0 + 1044: fc cf rjmp .-8 ; 0x103e static inline void USB_Device_EnableDeviceAddress(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void USB_Device_EnableDeviceAddress(const uint8_t Address) { (void)Address; UDADDR |= (1 << ADDEN); - fb2: 80 91 e3 00 lds r24, 0x00E3 - fb6: 80 68 ori r24, 0x80 ; 128 - fb8: 80 93 e3 00 sts 0x00E3, r24 + 1046: 80 91 e3 00 lds r24, 0x00E3 + 104a: 80 68 ori r24, 0x80 ; 128 + 104c: 80 93 e3 00 sts 0x00E3, r24 USB_Device_EnableDeviceAddress(DeviceAddress); USB_DeviceState = (DeviceAddress) ? DEVICE_STATE_Addressed : DEVICE_STATE_Default; - fbc: 11 23 and r17, r17 - fbe: 11 f0 breq .+4 ; 0xfc4 - fc0: 83 e0 ldi r24, 0x03 ; 3 - fc2: 01 c0 rjmp .+2 ; 0xfc6 - fc4: 82 e0 ldi r24, 0x02 ; 2 - fc6: 8e bb out 0x1e, r24 ; 30 - fc8: 83 c0 rjmp .+262 ; 0x10d0 + 1050: 11 23 and r17, r17 + 1052: 11 f0 breq .+4 ; 0x1058 + 1054: 83 e0 ldi r24, 0x03 ; 3 + 1056: 01 c0 rjmp .+2 ; 0x105a + 1058: 82 e0 ldi r24, 0x02 ; 2 + 105a: 8e bb out 0x1e, r24 ; 30 + 105c: 83 c0 rjmp .+262 ; 0x1164 if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) USB_Device_SetAddress(); break; case REQ_GetDescriptor: if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) || - fca: 80 58 subi r24, 0x80 ; 128 - fcc: 82 30 cpi r24, 0x02 ; 2 - fce: 08 f0 brcs .+2 ; 0xfd2 - fd0: 7f c0 rjmp .+254 ; 0x10d0 + 105e: 80 58 subi r24, 0x80 ; 128 + 1060: 82 30 cpi r24, 0x02 ; 2 + 1062: 08 f0 brcs .+2 ; 0x1066 + 1064: 7f c0 rjmp .+254 ; 0x1164 !(defined(USE_FLASH_DESCRIPTORS) || defined(USE_EEPROM_DESCRIPTORS) || defined(USE_RAM_DESCRIPTORS)) uint8_t DescriptorAddressSpace; #endif #if !defined(NO_INTERNAL_SERIAL) && (USE_INTERNAL_SERIAL != NO_DESCRIPTOR) if (USB_ControlRequest.wValue == ((DTYPE_String << 8) | USE_INTERNAL_SERIAL)) - fd2: 80 91 76 02 lds r24, 0x0276 - fd6: 90 91 77 02 lds r25, 0x0277 - fda: 23 e0 ldi r18, 0x03 ; 3 - fdc: 8c 3d cpi r24, 0xDC ; 220 - fde: 92 07 cpc r25, r18 - fe0: 91 f5 brne .+100 ; 0x1046 + 1066: 80 91 90 02 lds r24, 0x0290 + 106a: 90 91 91 02 lds r25, 0x0291 + 106e: 23 e0 ldi r18, 0x03 ; 3 + 1070: 8c 3d cpi r24, 0xDC ; 220 + 1072: 92 07 cpc r25, r18 + 1074: 91 f5 brne .+100 ; 0x10da { USB_Descriptor_Header_t Header; uint16_t UnicodeString[INTERNAL_SERIAL_LENGTH_BITS / 4]; } SignatureDescriptor; SignatureDescriptor.Header.Type = DTYPE_String; - fe2: 83 e0 ldi r24, 0x03 ; 3 - fe4: 8c 83 std Y+4, r24 ; 0x04 + 1076: 83 e0 ldi r24, 0x03 ; 3 + 1078: 8c 83 std Y+4, r24 ; 0x04 SignatureDescriptor.Header.Size = USB_STRING_LEN(INTERNAL_SERIAL_LENGTH_BITS / 4); - fe6: 8a e2 ldi r24, 0x2A ; 42 - fe8: 8b 83 std Y+3, r24 ; 0x03 + 107a: 8a e2 ldi r24, 0x2A ; 42 + 107c: 8b 83 std Y+3, r24 ; 0x03 static inline uint_reg_t GetGlobalInterruptMask(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) return SREG; - fea: 5f b7 in r21, 0x3f ; 63 + 107e: 5f b7 in r21, 0x3f ; 63 static inline void GlobalInterruptDisable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) cli(); - fec: f8 94 cli + 1080: f8 94 cli __builtin_ssrf(AVR32_SR_GM_OFFSET); #elif (ARCH == ARCH_XMEGA) cli(); #endif GCC_MEMORY_BARRIER(); - fee: de 01 movw r26, r28 - ff0: 15 96 adiw r26, 0x05 ; 5 - ff2: 80 e0 ldi r24, 0x00 ; 0 - ff4: 90 e0 ldi r25, 0x00 ; 0 + 1082: de 01 movw r26, r28 + 1084: 15 96 adiw r26, 0x05 ; 5 + 1086: 80 e0 ldi r24, 0x00 ; 0 + 1088: 90 e0 ldi r25, 0x00 ; 0 static inline void USB_Device_GetSerialString(uint16_t* const UnicodeString) { uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); GlobalInterruptDisable(); uint8_t SigReadAddress = INTERNAL_SERIAL_START_ADDRESS; - ff6: 4e e0 ldi r20, 0x0E ; 14 + 108a: 4e e0 ldi r20, 0x0E ; 14 for (uint8_t SerialCharNum = 0; SerialCharNum < (INTERNAL_SERIAL_LENGTH_BITS / 4); SerialCharNum++) { uint8_t SerialByte = boot_signature_byte_get(SigReadAddress); - ff8: 61 e2 ldi r22, 0x21 ; 33 - ffa: e4 2f mov r30, r20 - ffc: f0 e0 ldi r31, 0x00 ; 0 - ffe: 60 93 57 00 sts 0x0057, r22 - 1002: e4 91 lpm r30, Z+ + 108c: 61 e2 ldi r22, 0x21 ; 33 + 108e: e4 2f mov r30, r20 + 1090: f0 e0 ldi r31, 0x00 ; 0 + 1092: 60 93 57 00 sts 0x0057, r22 + 1096: e4 91 lpm r30, Z+ if (SerialCharNum & 0x01) - 1004: 80 ff sbrs r24, 0 - 1006: 03 c0 rjmp .+6 ; 0x100e + 1098: 80 ff sbrs r24, 0 + 109a: 03 c0 rjmp .+6 ; 0x10a2 { SerialByte >>= 4; - 1008: e2 95 swap r30 - 100a: ef 70 andi r30, 0x0F ; 15 + 109c: e2 95 swap r30 + 109e: ef 70 andi r30, 0x0F ; 15 SigReadAddress++; - 100c: 4f 5f subi r20, 0xFF ; 255 + 10a0: 4f 5f subi r20, 0xFF ; 255 } SerialByte &= 0x0F; - 100e: ef 70 andi r30, 0x0F ; 15 - 1010: 2e 2f mov r18, r30 - 1012: 30 e0 ldi r19, 0x00 ; 0 + 10a2: ef 70 andi r30, 0x0F ; 15 + 10a4: 2e 2f mov r18, r30 + 10a6: 30 e0 ldi r19, 0x00 ; 0 UnicodeString[SerialCharNum] = cpu_to_le16((SerialByte >= 10) ? - 1014: ea 30 cpi r30, 0x0A ; 10 - 1016: 18 f0 brcs .+6 ; 0x101e - 1018: 29 5c subi r18, 0xC9 ; 201 - 101a: 3f 4f sbci r19, 0xFF ; 255 - 101c: 02 c0 rjmp .+4 ; 0x1022 - 101e: 20 5d subi r18, 0xD0 ; 208 - 1020: 3f 4f sbci r19, 0xFF ; 255 - 1022: 2d 93 st X+, r18 - 1024: 3d 93 st X+, r19 - 1026: 01 96 adiw r24, 0x01 ; 1 + 10a8: ea 30 cpi r30, 0x0A ; 10 + 10aa: 18 f0 brcs .+6 ; 0x10b2 + 10ac: 29 5c subi r18, 0xC9 ; 201 + 10ae: 3f 4f sbci r19, 0xFF ; 255 + 10b0: 02 c0 rjmp .+4 ; 0x10b6 + 10b2: 20 5d subi r18, 0xD0 ; 208 + 10b4: 3f 4f sbci r19, 0xFF ; 255 + 10b6: 2d 93 st X+, r18 + 10b8: 3d 93 st X+, r19 + 10ba: 01 96 adiw r24, 0x01 ; 1 uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); GlobalInterruptDisable(); uint8_t SigReadAddress = INTERNAL_SERIAL_START_ADDRESS; for (uint8_t SerialCharNum = 0; SerialCharNum < (INTERNAL_SERIAL_LENGTH_BITS / 4); SerialCharNum++) - 1028: 84 31 cpi r24, 0x14 ; 20 - 102a: 91 05 cpc r25, r1 - 102c: 31 f7 brne .-52 ; 0xffa + 10bc: 84 31 cpi r24, 0x14 ; 20 + 10be: 91 05 cpc r25, r1 + 10c0: 31 f7 brne .-52 ; 0x108e static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) SREG = GlobalIntState; - 102e: 5f bf out 0x3f, r21 ; 63 + 10c2: 5f bf out 0x3f, r21 ; 63 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 1030: 80 91 e8 00 lds r24, 0x00E8 - 1034: 87 7f andi r24, 0xF7 ; 247 - 1036: 80 93 e8 00 sts 0x00E8, r24 + 10c4: 80 91 e8 00 lds r24, 0x00E8 + 10c8: 87 7f andi r24, 0xF7 ; 247 + 10ca: 80 93 e8 00 sts 0x00E8, r24 USB_Device_GetSerialString(SignatureDescriptor.UnicodeString); Endpoint_ClearSETUP(); Endpoint_Write_Control_Stream_LE(&SignatureDescriptor, sizeof(SignatureDescriptor)); - 103a: ce 01 movw r24, r28 - 103c: 03 96 adiw r24, 0x03 ; 3 - 103e: 6a e2 ldi r22, 0x2A ; 42 - 1040: 70 e0 ldi r23, 0x00 ; 0 - 1042: 55 dc rcall .-1878 ; 0x8ee - 1044: 12 c0 rjmp .+36 ; 0x106a + 10ce: ce 01 movw r24, r28 + 10d0: 03 96 adiw r24, 0x03 ; 3 + 10d2: 6a e2 ldi r22, 0x2A ; 42 + 10d4: 70 e0 ldi r23, 0x00 ; 0 + 10d6: 55 dc rcall .-1878 ; 0x982 + 10d8: 12 c0 rjmp .+36 ; 0x10fe USB_Device_GetInternalSerialDescriptor(); return; } #endif if ((DescriptorSize = CALLBACK_USB_GetDescriptor(USB_ControlRequest.wValue, USB_ControlRequest.wIndex, - 1046: 60 91 78 02 lds r22, 0x0278 - 104a: ae 01 movw r20, r28 - 104c: 4f 5f subi r20, 0xFF ; 255 - 104e: 5f 4f sbci r21, 0xFF ; 255 - 1050: 21 dc rcall .-1982 ; 0x894 - 1052: bc 01 movw r22, r24 - 1054: 00 97 sbiw r24, 0x00 ; 0 - 1056: 09 f4 brne .+2 ; 0x105a - 1058: 3b c0 rjmp .+118 ; 0x10d0 - 105a: 80 91 e8 00 lds r24, 0x00E8 - 105e: 87 7f andi r24, 0xF7 ; 247 - 1060: 80 93 e8 00 sts 0x00E8, r24 + 10da: 60 91 92 02 lds r22, 0x0292 + 10de: ae 01 movw r20, r28 + 10e0: 4f 5f subi r20, 0xFF ; 255 + 10e2: 5f 4f sbci r21, 0xFF ; 255 + 10e4: 21 dc rcall .-1982 ; 0x928 + 10e6: bc 01 movw r22, r24 + 10e8: 00 97 sbiw r24, 0x00 ; 0 + 10ea: 09 f4 brne .+2 ; 0x10ee + 10ec: 3b c0 rjmp .+118 ; 0x1164 + 10ee: 80 91 e8 00 lds r24, 0x00E8 + 10f2: 87 7f andi r24, 0xF7 ; 247 + 10f4: 80 93 e8 00 sts 0x00E8, r24 #if defined(USE_RAM_DESCRIPTORS) || !defined(ARCH_HAS_MULTI_ADDRESS_SPACE) Endpoint_Write_Control_Stream_LE(DescriptorPointer, DescriptorSize); #elif defined(USE_EEPROM_DESCRIPTORS) Endpoint_Write_Control_EStream_LE(DescriptorPointer, DescriptorSize); #elif defined(USE_FLASH_DESCRIPTORS) Endpoint_Write_Control_PStream_LE(DescriptorPointer, DescriptorSize); - 1064: 89 81 ldd r24, Y+1 ; 0x01 - 1066: 9a 81 ldd r25, Y+2 ; 0x02 - 1068: 9c dc rcall .-1736 ; 0x9a2 + 10f8: 89 81 ldd r24, Y+1 ; 0x01 + 10fa: 9a 81 ldd r25, Y+2 ; 0x02 + 10fc: 9c dc rcall .-1736 ; 0xa36 */ static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearOUT(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); - 106a: 80 91 e8 00 lds r24, 0x00E8 - 106e: 8b 77 andi r24, 0x7B ; 123 - 1070: 80 93 e8 00 sts 0x00E8, r24 - 1074: 2d c0 rjmp .+90 ; 0x10d0 + 10fe: 80 91 e8 00 lds r24, 0x00E8 + 1102: 8b 77 andi r24, 0x7B ; 123 + 1104: 80 93 e8 00 sts 0x00E8, r24 + 1108: 2d c0 rjmp .+90 ; 0x1164 USB_Device_GetDescriptor(); } break; case REQ_GetConfiguration: if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) - 1076: 80 38 cpi r24, 0x80 ; 128 - 1078: 59 f5 brne .+86 ; 0x10d0 + 110a: 80 38 cpi r24, 0x80 ; 128 + 110c: 59 f5 brne .+86 ; 0x1164 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 107a: 80 91 e8 00 lds r24, 0x00E8 - 107e: 87 7f andi r24, 0xF7 ; 247 - 1080: 80 93 e8 00 sts 0x00E8, r24 + 110e: 80 91 e8 00 lds r24, 0x00E8 + 1112: 87 7f andi r24, 0xF7 ; 247 + 1114: 80 93 e8 00 sts 0x00E8, r24 static void USB_Device_GetConfiguration(void) { Endpoint_ClearSETUP(); Endpoint_Write_8(USB_Device_ConfigurationNumber); - 1084: 80 91 70 02 lds r24, 0x0270 + 1118: 80 91 8a 02 lds r24, 0x028A * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_8(const uint8_t Data) { UEDATX = Data; - 1088: 80 93 f1 00 sts 0x00F1, r24 + 111c: 80 93 f1 00 sts 0x00F1, r24 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 108c: 80 91 e8 00 lds r24, 0x00E8 - 1090: 8e 77 andi r24, 0x7E ; 126 - 1092: 80 93 e8 00 sts 0x00E8, r24 + 1120: 80 91 e8 00 lds r24, 0x00E8 + 1124: 8e 77 andi r24, 0x7E ; 126 + 1126: 80 93 e8 00 sts 0x00E8, r24 Endpoint_ClearIN(); Endpoint_ClearStatusStage(); - 1096: 5b dd rcall .-1354 ; 0xb4e - 1098: 1b c0 rjmp .+54 ; 0x10d0 + 112a: 5b dd rcall .-1354 ; 0xbe2 + 112c: 1b c0 rjmp .+54 ; 0x1164 if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) USB_Device_GetConfiguration(); break; case REQ_SetConfiguration: if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) - 109a: 88 23 and r24, r24 - 109c: c9 f4 brne .+50 ; 0x10d0 + 112e: 88 23 and r24, r24 + 1130: c9 f4 brne .+50 ; 0x1164 } static void USB_Device_SetConfiguration(void) { #if defined(FIXED_NUM_CONFIGURATIONS) if ((uint8_t)USB_ControlRequest.wValue > FIXED_NUM_CONFIGURATIONS) - 109e: 90 91 76 02 lds r25, 0x0276 - 10a2: 92 30 cpi r25, 0x02 ; 2 - 10a4: a8 f4 brcc .+42 ; 0x10d0 + 1132: 90 91 90 02 lds r25, 0x0290 + 1136: 92 30 cpi r25, 0x02 ; 2 + 1138: a8 f4 brcc .+42 ; 0x1164 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 10a6: 80 91 e8 00 lds r24, 0x00E8 - 10aa: 87 7f andi r24, 0xF7 ; 247 - 10ac: 80 93 e8 00 sts 0x00E8, r24 + 113a: 80 91 e8 00 lds r24, 0x00E8 + 113e: 87 7f andi r24, 0xF7 ; 247 + 1140: 80 93 e8 00 sts 0x00E8, r24 #endif #endif Endpoint_ClearSETUP(); USB_Device_ConfigurationNumber = (uint8_t)USB_ControlRequest.wValue; - 10b0: 90 93 70 02 sts 0x0270, r25 + 1144: 90 93 8a 02 sts 0x028A, r25 Endpoint_ClearStatusStage(); - 10b4: 4c dd rcall .-1384 ; 0xb4e + 1148: 4c dd rcall .-1384 ; 0xbe2 if (USB_Device_ConfigurationNumber) - 10b6: 80 91 70 02 lds r24, 0x0270 - 10ba: 88 23 and r24, r24 - 10bc: 21 f4 brne .+8 ; 0x10c6 + 114a: 80 91 8a 02 lds r24, 0x028A + 114e: 88 23 and r24, r24 + 1150: 21 f4 brne .+8 ; 0x115a } static inline bool USB_Device_IsAddressSet(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline bool USB_Device_IsAddressSet(void) { return (UDADDR & (1 << ADDEN)); - 10be: 80 91 e3 00 lds r24, 0x00E3 + 1152: 80 91 e3 00 lds r24, 0x00E3 USB_DeviceState = DEVICE_STATE_Configured; else USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered; - 10c2: 87 ff sbrs r24, 7 - 10c4: 02 c0 rjmp .+4 ; 0x10ca - 10c6: 84 e0 ldi r24, 0x04 ; 4 - 10c8: 01 c0 rjmp .+2 ; 0x10cc - 10ca: 81 e0 ldi r24, 0x01 ; 1 - 10cc: 8e bb out 0x1e, r24 ; 30 + 1156: 87 ff sbrs r24, 7 + 1158: 02 c0 rjmp .+4 ; 0x115e + 115a: 84 e0 ldi r24, 0x04 ; 4 + 115c: 01 c0 rjmp .+2 ; 0x1160 + 115e: 81 e0 ldi r24, 0x01 ; 1 + 1160: 8e bb out 0x1e, r24 ; 30 EVENT_USB_Device_ConfigurationChanged(); - 10ce: f0 da rcall .-2592 ; 0x6b0 + 1162: 4f da rcall .-2914 ; 0x602 * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. */ static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsSETUPReceived(void) { return ((UEINTX & (1 << RXSTPI)) ? true : false); - 10d0: 80 91 e8 00 lds r24, 0x00E8 + 1164: 80 91 e8 00 lds r24, 0x00E8 default: break; } } if (Endpoint_IsSETUPReceived()) - 10d4: 83 ff sbrs r24, 3 - 10d6: 0a c0 rjmp .+20 ; 0x10ec + 1168: 83 ff sbrs r24, 3 + 116a: 0a c0 rjmp .+20 ; 0x1180 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 10d8: 80 91 e8 00 lds r24, 0x00E8 - 10dc: 87 7f andi r24, 0xF7 ; 247 - 10de: 80 93 e8 00 sts 0x00E8, r24 + 116c: 80 91 e8 00 lds r24, 0x00E8 + 1170: 87 7f andi r24, 0xF7 ; 247 + 1172: 80 93 e8 00 sts 0x00E8, r24 * \ingroup Group_EndpointPacketManagement_AVR8 */ static inline void Endpoint_StallTransaction(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_StallTransaction(void) { UECONX |= (1 << STALLRQ); - 10e2: 80 91 eb 00 lds r24, 0x00EB - 10e6: 80 62 ori r24, 0x20 ; 32 - 10e8: 80 93 eb 00 sts 0x00EB, r24 + 1176: 80 91 eb 00 lds r24, 0x00EB + 117a: 80 62 ori r24, 0x20 ; 32 + 117c: 80 93 eb 00 sts 0x00EB, r24 { Endpoint_ClearSETUP(); Endpoint_StallTransaction(); } } - 10ec: ac 96 adiw r28, 0x2c ; 44 - 10ee: 0f b6 in r0, 0x3f ; 63 - 10f0: f8 94 cli - 10f2: de bf out 0x3e, r29 ; 62 - 10f4: 0f be out 0x3f, r0 ; 63 - 10f6: cd bf out 0x3d, r28 ; 61 - 10f8: cf 91 pop r28 - 10fa: df 91 pop r29 - 10fc: 1f 91 pop r17 - 10fe: 08 95 ret - -00001100 : + 1180: ac 96 adiw r28, 0x2c ; 44 + 1182: 0f b6 in r0, 0x3f ; 63 + 1184: f8 94 cli + 1186: de bf out 0x3e, r29 ; 62 + 1188: 0f be out 0x3f, r0 ; 63 + 118a: cd bf out 0x3d, r28 ; 61 + 118c: cf 91 pop r28 + 118e: df 91 pop r29 + 1190: 1f 91 pop r17 + 1192: 08 95 ret + +00001194 : #include "Events.h" void USB_Event_Stub(void) { } - 1100: 08 95 ret + 1194: 08 95 ret -00001102 : +00001196 : #if defined(USB_CAN_BE_DEVICE) && !defined(DEVICE_STATE_AS_GPIOR) volatile uint8_t USB_DeviceState; #endif void USB_USBTask(void) { - 1102: 1f 93 push r17 + 1196: 1f 93 push r17 } #if defined(USB_CAN_BE_DEVICE) static void USB_DeviceTask(void) { if (USB_DeviceState == DEVICE_STATE_Unattached) - 1104: 8e b3 in r24, 0x1e ; 30 - 1106: 88 23 and r24, r24 - 1108: a9 f0 breq .+42 ; 0x1134 + 1198: 8e b3 in r24, 0x1e ; 30 + 119a: 88 23 and r24, r24 + 119c: a9 f0 breq .+42 ; 0x11c8 */ static inline uint8_t Endpoint_GetCurrentEndpoint(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_GetCurrentEndpoint(void) { #if !defined(CONTROL_ONLY_DEVICE) return ((UENUM & ENDPOINT_EPNUM_MASK) | Endpoint_GetEndpointDirection()); - 110a: 80 91 e9 00 lds r24, 0x00E9 - 110e: 8f 70 andi r24, 0x0F ; 15 + 119e: 80 91 e9 00 lds r24, 0x00E9 + 11a2: 8f 70 andi r24, 0x0F ; 15 * \return The currently selected endpoint's direction, as a \c ENDPOINT_DIR_* mask. */ static inline uint8_t Endpoint_GetEndpointDirection(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_GetEndpointDirection(void) { return (UECFG0X & (1 << EPDIR)) ? ENDPOINT_DIR_IN : ENDPOINT_DIR_OUT; - 1110: 90 91 ec 00 lds r25, 0x00EC - 1114: 90 ff sbrs r25, 0 - 1116: 02 c0 rjmp .+4 ; 0x111c - 1118: 10 e8 ldi r17, 0x80 ; 128 - 111a: 01 c0 rjmp .+2 ; 0x111e - 111c: 10 e0 ldi r17, 0x00 ; 0 + 11a4: 90 91 ec 00 lds r25, 0x00EC + 11a8: 90 ff sbrs r25, 0 + 11aa: 02 c0 rjmp .+4 ; 0x11b0 + 11ac: 10 e8 ldi r17, 0x80 ; 128 + 11ae: 01 c0 rjmp .+2 ; 0x11b2 + 11b0: 10 e0 ldi r17, 0x00 ; 0 */ static inline uint8_t Endpoint_GetCurrentEndpoint(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_GetCurrentEndpoint(void) { #if !defined(CONTROL_ONLY_DEVICE) return ((UENUM & ENDPOINT_EPNUM_MASK) | Endpoint_GetEndpointDirection()); - 111e: 18 2b or r17, r24 + 11b2: 18 2b or r17, r24 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 1120: 10 92 e9 00 sts 0x00E9, r1 + 11b4: 10 92 e9 00 sts 0x00E9, r1 * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. */ static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsSETUPReceived(void) { return ((UEINTX & (1 << RXSTPI)) ? true : false); - 1124: 80 91 e8 00 lds r24, 0x00E8 + 11b8: 80 91 e8 00 lds r24, 0x00E8 uint8_t PrevEndpoint = Endpoint_GetCurrentEndpoint(); Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); if (Endpoint_IsSETUPReceived()) - 1128: 83 ff sbrs r24, 3 - 112a: 01 c0 rjmp .+2 ; 0x112e + 11bc: 83 ff sbrs r24, 3 + 11be: 01 c0 rjmp .+2 ; 0x11c2 USB_Device_ProcessControlRequest(); - 112c: 88 de rcall .-752 ; 0xe3e + 11c0: 88 de rcall .-752 ; 0xed2 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 112e: 1f 70 andi r17, 0x0F ; 15 - 1130: 10 93 e9 00 sts 0x00E9, r17 + 11c2: 1f 70 andi r17, 0x0F ; 15 + 11c4: 10 93 e9 00 sts 0x00E9, r17 #elif defined(USB_CAN_BE_HOST) USB_HostTask(); #elif defined(USB_CAN_BE_DEVICE) USB_DeviceTask(); #endif } - 1134: 1f 91 pop r17 - 1136: 08 95 ret + 11c8: 1f 91 pop r17 + 11ca: 08 95 ret -00001138 : +000011cc : #define __INCLUDE_FROM_CDC_DRIVER #define __INCLUDE_FROM_CDC_DEVICE_C #include "CDCClassDevice.h" void CDC_Device_ProcessControlRequest(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { - 1138: cf 93 push r28 - 113a: df 93 push r29 - 113c: ec 01 movw r28, r24 + 11cc: cf 93 push r28 + 11ce: df 93 push r29 + 11d0: ec 01 movw r28, r24 * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. */ static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsSETUPReceived(void) { return ((UEINTX & (1 << RXSTPI)) ? true : false); - 113e: 80 91 e8 00 lds r24, 0x00E8 + 11d2: 80 91 e8 00 lds r24, 0x00E8 if (!(Endpoint_IsSETUPReceived())) - 1142: 83 ff sbrs r24, 3 - 1144: a2 c0 rjmp .+324 ; 0x128a + 11d6: 83 ff sbrs r24, 3 + 11d8: a2 c0 rjmp .+324 ; 0x131e return; if (USB_ControlRequest.wIndex != CDCInterfaceInfo->Config.ControlInterfaceNumber) - 1146: 88 81 ld r24, Y - 1148: 90 e0 ldi r25, 0x00 ; 0 - 114a: 20 91 78 02 lds r18, 0x0278 - 114e: 30 91 79 02 lds r19, 0x0279 - 1152: 28 17 cp r18, r24 - 1154: 39 07 cpc r19, r25 - 1156: 09 f0 breq .+2 ; 0x115a - 1158: 98 c0 rjmp .+304 ; 0x128a + 11da: 88 81 ld r24, Y + 11dc: 90 e0 ldi r25, 0x00 ; 0 + 11de: 20 91 92 02 lds r18, 0x0292 + 11e2: 30 91 93 02 lds r19, 0x0293 + 11e6: 28 17 cp r18, r24 + 11e8: 39 07 cpc r19, r25 + 11ea: 09 f0 breq .+2 ; 0x11ee + 11ec: 98 c0 rjmp .+304 ; 0x131e return; switch (USB_ControlRequest.bRequest) - 115a: 80 91 75 02 lds r24, 0x0275 - 115e: 81 32 cpi r24, 0x21 ; 33 - 1160: 69 f0 breq .+26 ; 0x117c - 1162: 82 32 cpi r24, 0x22 ; 34 - 1164: 20 f4 brcc .+8 ; 0x116e - 1166: 80 32 cpi r24, 0x20 ; 32 - 1168: 09 f0 breq .+2 ; 0x116c - 116a: 8f c0 rjmp .+286 ; 0x128a - 116c: 3c c0 rjmp .+120 ; 0x11e6 - 116e: 82 32 cpi r24, 0x22 ; 34 - 1170: 09 f4 brne .+2 ; 0x1174 - 1172: 6a c0 rjmp .+212 ; 0x1248 - 1174: 83 32 cpi r24, 0x23 ; 35 - 1176: 09 f0 breq .+2 ; 0x117a - 1178: 88 c0 rjmp .+272 ; 0x128a - 117a: 79 c0 rjmp .+242 ; 0x126e + 11ee: 80 91 8f 02 lds r24, 0x028F + 11f2: 81 32 cpi r24, 0x21 ; 33 + 11f4: 69 f0 breq .+26 ; 0x1210 + 11f6: 82 32 cpi r24, 0x22 ; 34 + 11f8: 20 f4 brcc .+8 ; 0x1202 + 11fa: 80 32 cpi r24, 0x20 ; 32 + 11fc: 09 f0 breq .+2 ; 0x1200 + 11fe: 8f c0 rjmp .+286 ; 0x131e + 1200: 3c c0 rjmp .+120 ; 0x127a + 1202: 82 32 cpi r24, 0x22 ; 34 + 1204: 09 f4 brne .+2 ; 0x1208 + 1206: 6a c0 rjmp .+212 ; 0x12dc + 1208: 83 32 cpi r24, 0x23 ; 35 + 120a: 09 f0 breq .+2 ; 0x120e + 120c: 88 c0 rjmp .+272 ; 0x131e + 120e: 79 c0 rjmp .+242 ; 0x1302 { case CDC_REQ_GetLineEncoding: if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) - 117c: 80 91 74 02 lds r24, 0x0274 - 1180: 81 3a cpi r24, 0xA1 ; 161 - 1182: 09 f0 breq .+2 ; 0x1186 - 1184: 82 c0 rjmp .+260 ; 0x128a + 1210: 80 91 8e 02 lds r24, 0x028E + 1214: 81 3a cpi r24, 0xA1 ; 161 + 1216: 09 f0 breq .+2 ; 0x121a + 1218: 82 c0 rjmp .+260 ; 0x131e * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 1186: 80 91 e8 00 lds r24, 0x00E8 - 118a: 87 7f andi r24, 0xF7 ; 247 - 118c: 80 93 e8 00 sts 0x00E8, r24 + 121a: 80 91 e8 00 lds r24, 0x00E8 + 121e: 87 7f andi r24, 0xF7 ; 247 + 1220: 80 93 e8 00 sts 0x00E8, r24 * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - 1190: 80 91 e8 00 lds r24, 0x00E8 + 1224: 80 91 e8 00 lds r24, 0x00E8 { Endpoint_ClearSETUP(); while (!(Endpoint_IsINReady())); - 1194: 80 ff sbrs r24, 0 - 1196: fc cf rjmp .-8 ; 0x1190 + 1228: 80 ff sbrs r24, 0 + 122a: fc cf rjmp .-8 ; 0x1224 Endpoint_Write_32_LE(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS); - 1198: 8c 89 ldd r24, Y+20 ; 0x14 - 119a: 9d 89 ldd r25, Y+21 ; 0x15 - 119c: ae 89 ldd r26, Y+22 ; 0x16 - 119e: bf 89 ldd r27, Y+23 ; 0x17 + 122c: 8c 89 ldd r24, Y+20 ; 0x14 + 122e: 9d 89 ldd r25, Y+21 ; 0x15 + 1230: ae 89 ldd r26, Y+22 ; 0x16 + 1232: bf 89 ldd r27, Y+23 ; 0x17 * \param[in] Data Data to write to the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_32_LE(const uint32_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_32_LE(const uint32_t Data) { UEDATX = (Data & 0xFF); - 11a0: 80 93 f1 00 sts 0x00F1, r24 + 1234: 80 93 f1 00 sts 0x00F1, r24 UEDATX = (Data >> 8); - 11a4: 29 2f mov r18, r25 - 11a6: 3a 2f mov r19, r26 - 11a8: 4b 2f mov r20, r27 - 11aa: 55 27 eor r21, r21 - 11ac: 20 93 f1 00 sts 0x00F1, r18 + 1238: 29 2f mov r18, r25 + 123a: 3a 2f mov r19, r26 + 123c: 4b 2f mov r20, r27 + 123e: 55 27 eor r21, r21 + 1240: 20 93 f1 00 sts 0x00F1, r18 UEDATX = (Data >> 16); - 11b0: 9d 01 movw r18, r26 - 11b2: 44 27 eor r20, r20 - 11b4: 55 27 eor r21, r21 - 11b6: 20 93 f1 00 sts 0x00F1, r18 + 1244: 9d 01 movw r18, r26 + 1246: 44 27 eor r20, r20 + 1248: 55 27 eor r21, r21 + 124a: 20 93 f1 00 sts 0x00F1, r18 UEDATX = (Data >> 24); - 11ba: 8b 2f mov r24, r27 - 11bc: 99 27 eor r25, r25 - 11be: aa 27 eor r26, r26 - 11c0: bb 27 eor r27, r27 - 11c2: 80 93 f1 00 sts 0x00F1, r24 + 124e: 8b 2f mov r24, r27 + 1250: 99 27 eor r25, r25 + 1252: aa 27 eor r26, r26 + 1254: bb 27 eor r27, r27 + 1256: 80 93 f1 00 sts 0x00F1, r24 Endpoint_Write_8(CDCInterfaceInfo->State.LineEncoding.CharFormat); - 11c6: 88 8d ldd r24, Y+24 ; 0x18 + 125a: 88 8d ldd r24, Y+24 ; 0x18 * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_8(const uint8_t Data) { UEDATX = Data; - 11c8: 80 93 f1 00 sts 0x00F1, r24 + 125c: 80 93 f1 00 sts 0x00F1, r24 Endpoint_Write_8(CDCInterfaceInfo->State.LineEncoding.ParityType); - 11cc: 89 8d ldd r24, Y+25 ; 0x19 - 11ce: 80 93 f1 00 sts 0x00F1, r24 + 1260: 89 8d ldd r24, Y+25 ; 0x19 + 1262: 80 93 f1 00 sts 0x00F1, r24 Endpoint_Write_8(CDCInterfaceInfo->State.LineEncoding.DataBits); - 11d2: 8a 8d ldd r24, Y+26 ; 0x1a - 11d4: 80 93 f1 00 sts 0x00F1, r24 + 1266: 8a 8d ldd r24, Y+26 ; 0x1a + 1268: 80 93 f1 00 sts 0x00F1, r24 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 11d8: 80 91 e8 00 lds r24, 0x00E8 - 11dc: 8e 77 andi r24, 0x7E ; 126 - 11de: 80 93 e8 00 sts 0x00E8, r24 + 126c: 80 91 e8 00 lds r24, 0x00E8 + 1270: 8e 77 andi r24, 0x7E ; 126 + 1272: 80 93 e8 00 sts 0x00E8, r24 Endpoint_ClearIN(); Endpoint_ClearStatusStage(); - 11e2: b5 dc rcall .-1686 ; 0xb4e - 11e4: 52 c0 rjmp .+164 ; 0x128a + 1276: b5 dc rcall .-1686 ; 0xbe2 + 1278: 52 c0 rjmp .+164 ; 0x131e } break; case CDC_REQ_SetLineEncoding: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) - 11e6: 80 91 74 02 lds r24, 0x0274 - 11ea: 81 32 cpi r24, 0x21 ; 33 - 11ec: 09 f0 breq .+2 ; 0x11f0 - 11ee: 4d c0 rjmp .+154 ; 0x128a + 127a: 80 91 8e 02 lds r24, 0x028E + 127e: 81 32 cpi r24, 0x21 ; 33 + 1280: 09 f0 breq .+2 ; 0x1284 + 1282: 4d c0 rjmp .+154 ; 0x131e * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 11f0: 80 91 e8 00 lds r24, 0x00E8 - 11f4: 87 7f andi r24, 0xF7 ; 247 - 11f6: 80 93 e8 00 sts 0x00E8, r24 + 1284: 80 91 e8 00 lds r24, 0x00E8 + 1288: 87 7f andi r24, 0xF7 ; 247 + 128a: 80 93 e8 00 sts 0x00E8, r24 { Endpoint_ClearSETUP(); while (!(Endpoint_IsOUTReceived())) - 11fa: 04 c0 rjmp .+8 ; 0x1204 + 128e: 04 c0 rjmp .+8 ; 0x1298 { if (USB_DeviceState == DEVICE_STATE_Unattached) - 11fc: 8e b3 in r24, 0x1e ; 30 - 11fe: 88 23 and r24, r24 - 1200: 09 f4 brne .+2 ; 0x1204 - 1202: 43 c0 rjmp .+134 ; 0x128a + 1290: 8e b3 in r24, 0x1e ; 30 + 1292: 88 23 and r24, r24 + 1294: 09 f4 brne .+2 ; 0x1298 + 1296: 43 c0 rjmp .+134 ; 0x131e * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - 1204: 80 91 e8 00 lds r24, 0x00E8 + 1298: 80 91 e8 00 lds r24, 0x00E8 case CDC_REQ_SetLineEncoding: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) { Endpoint_ClearSETUP(); while (!(Endpoint_IsOUTReceived())) - 1208: 82 ff sbrs r24, 2 - 120a: f8 cf rjmp .-16 ; 0x11fc + 129c: 82 ff sbrs r24, 2 + 129e: f8 cf rjmp .-16 ; 0x1290 { uint32_t Value; uint8_t Bytes[4]; } Data; Data.Bytes[0] = UEDATX; - 120c: 30 91 f1 00 lds r19, 0x00F1 + 12a0: 30 91 f1 00 lds r19, 0x00F1 Data.Bytes[1] = UEDATX; - 1210: 20 91 f1 00 lds r18, 0x00F1 + 12a4: 20 91 f1 00 lds r18, 0x00F1 Data.Bytes[2] = UEDATX; - 1214: 90 91 f1 00 lds r25, 0x00F1 + 12a8: 90 91 f1 00 lds r25, 0x00F1 Data.Bytes[3] = UEDATX; - 1218: 80 91 f1 00 lds r24, 0x00F1 + 12ac: 80 91 f1 00 lds r24, 0x00F1 { if (USB_DeviceState == DEVICE_STATE_Unattached) return; } CDCInterfaceInfo->State.LineEncoding.BaudRateBPS = Endpoint_Read_32_LE(); - 121c: 3c 8b std Y+20, r19 ; 0x14 - 121e: 2d 8b std Y+21, r18 ; 0x15 - 1220: 9e 8b std Y+22, r25 ; 0x16 - 1222: 8f 8b std Y+23, r24 ; 0x17 + 12b0: 3c 8b std Y+20, r19 ; 0x14 + 12b2: 2d 8b std Y+21, r18 ; 0x15 + 12b4: 9e 8b std Y+22, r25 ; 0x16 + 12b6: 8f 8b std Y+23, r24 ; 0x17 * \return Next byte in the currently selected endpoint's FIFO buffer. */ static inline uint8_t Endpoint_Read_8(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_Read_8(void) { return UEDATX; - 1224: 80 91 f1 00 lds r24, 0x00F1 + 12b8: 80 91 f1 00 lds r24, 0x00F1 CDCInterfaceInfo->State.LineEncoding.CharFormat = Endpoint_Read_8(); - 1228: 88 8f std Y+24, r24 ; 0x18 - 122a: 80 91 f1 00 lds r24, 0x00F1 + 12bc: 88 8f std Y+24, r24 ; 0x18 + 12be: 80 91 f1 00 lds r24, 0x00F1 CDCInterfaceInfo->State.LineEncoding.ParityType = Endpoint_Read_8(); - 122e: 89 8f std Y+25, r24 ; 0x19 - 1230: 80 91 f1 00 lds r24, 0x00F1 + 12c2: 89 8f std Y+25, r24 ; 0x19 + 12c4: 80 91 f1 00 lds r24, 0x00F1 CDCInterfaceInfo->State.LineEncoding.DataBits = Endpoint_Read_8(); - 1234: 8a 8f std Y+26, r24 ; 0x1a + 12c8: 8a 8f std Y+26, r24 ; 0x1a */ static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearOUT(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); - 1236: 80 91 e8 00 lds r24, 0x00E8 - 123a: 8b 77 andi r24, 0x7B ; 123 - 123c: 80 93 e8 00 sts 0x00E8, r24 + 12ca: 80 91 e8 00 lds r24, 0x00E8 + 12ce: 8b 77 andi r24, 0x7B ; 123 + 12d0: 80 93 e8 00 sts 0x00E8, r24 Endpoint_ClearOUT(); Endpoint_ClearStatusStage(); - 1240: 86 dc rcall .-1780 ; 0xb4e + 12d4: 86 dc rcall .-1780 ; 0xbe2 EVENT_CDC_Device_LineEncodingChanged(CDCInterfaceInfo); - 1242: ce 01 movw r24, r28 - 1244: 65 da rcall .-2870 ; 0x710 - 1246: 21 c0 rjmp .+66 ; 0x128a + 12d6: ce 01 movw r24, r28 + 12d8: c4 d9 rcall .-3192 ; 0x662 + 12da: 21 c0 rjmp .+66 ; 0x131e } break; case CDC_REQ_SetControlLineState: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) - 1248: 80 91 74 02 lds r24, 0x0274 - 124c: 81 32 cpi r24, 0x21 ; 33 - 124e: e9 f4 brne .+58 ; 0x128a + 12dc: 80 91 8e 02 lds r24, 0x028E + 12e0: 81 32 cpi r24, 0x21 ; 33 + 12e2: e9 f4 brne .+58 ; 0x131e * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 1250: 80 91 e8 00 lds r24, 0x00E8 - 1254: 87 7f andi r24, 0xF7 ; 247 - 1256: 80 93 e8 00 sts 0x00E8, r24 + 12e4: 80 91 e8 00 lds r24, 0x00E8 + 12e8: 87 7f andi r24, 0xF7 ; 247 + 12ea: 80 93 e8 00 sts 0x00E8, r24 { Endpoint_ClearSETUP(); Endpoint_ClearStatusStage(); - 125a: 79 dc rcall .-1806 ; 0xb4e + 12ee: 79 dc rcall .-1806 ; 0xbe2 CDCInterfaceInfo->State.ControlLineStates.HostToDevice = USB_ControlRequest.wValue; - 125c: 80 91 76 02 lds r24, 0x0276 - 1260: 90 91 77 02 lds r25, 0x0277 - 1264: 99 8b std Y+17, r25 ; 0x11 - 1266: 88 8b std Y+16, r24 ; 0x10 + 12f0: 80 91 90 02 lds r24, 0x0290 + 12f4: 90 91 91 02 lds r25, 0x0291 + 12f8: 99 8b std Y+17, r25 ; 0x11 + 12fa: 88 8b std Y+16, r24 ; 0x10 EVENT_CDC_Device_ControLineStateChanged(CDCInterfaceInfo); - 1268: ce 01 movw r24, r28 - 126a: d4 d0 rcall .+424 ; 0x1414 - 126c: 0e c0 rjmp .+28 ; 0x128a + 12fc: ce 01 movw r24, r28 + 12fe: d4 d0 rcall .+424 ; 0x14a8 + 1300: 0e c0 rjmp .+28 ; 0x131e } break; case CDC_REQ_SendBreak: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) - 126e: 80 91 74 02 lds r24, 0x0274 - 1272: 81 32 cpi r24, 0x21 ; 33 - 1274: 51 f4 brne .+20 ; 0x128a - 1276: 80 91 e8 00 lds r24, 0x00E8 - 127a: 87 7f andi r24, 0xF7 ; 247 - 127c: 80 93 e8 00 sts 0x00E8, r24 + 1302: 80 91 8e 02 lds r24, 0x028E + 1306: 81 32 cpi r24, 0x21 ; 33 + 1308: 51 f4 brne .+20 ; 0x131e + 130a: 80 91 e8 00 lds r24, 0x00E8 + 130e: 87 7f andi r24, 0xF7 ; 247 + 1310: 80 93 e8 00 sts 0x00E8, r24 { Endpoint_ClearSETUP(); Endpoint_ClearStatusStage(); - 1280: 66 dc rcall .-1844 ; 0xb4e + 1314: 66 dc rcall .-1844 ; 0xbe2 EVENT_CDC_Device_BreakSent(CDCInterfaceInfo, (uint8_t)USB_ControlRequest.wValue); - 1282: ce 01 movw r24, r28 - 1284: 60 91 76 02 lds r22, 0x0276 - 1288: c5 d0 rcall .+394 ; 0x1414 + 1316: ce 01 movw r24, r28 + 1318: 60 91 90 02 lds r22, 0x0290 + 131c: c5 d0 rcall .+394 ; 0x14a8 } break; } } - 128a: df 91 pop r29 - 128c: cf 91 pop r28 - 128e: 08 95 ret + 131e: df 91 pop r29 + 1320: cf 91 pop r28 + 1322: 08 95 ret -00001290 : +00001324 : bool CDC_Device_ConfigureEndpoints(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { - 1290: cf 93 push r28 - 1292: df 93 push r29 - 1294: ec 01 movw r28, r24 + 1324: cf 93 push r28 + 1326: df 93 push r29 + 1328: ec 01 movw r28, r24 memset(&CDCInterfaceInfo->State, 0x00, sizeof(CDCInterfaceInfo->State)); - 1296: 40 96 adiw r24, 0x10 ; 16 - 1298: fc 01 movw r30, r24 - 129a: 8b e0 ldi r24, 0x0B ; 11 - 129c: df 01 movw r26, r30 - 129e: 1d 92 st X+, r1 - 12a0: 8a 95 dec r24 - 12a2: e9 f7 brne .-6 ; 0x129e + 132a: 40 96 adiw r24, 0x10 ; 16 + 132c: fc 01 movw r30, r24 + 132e: 8b e0 ldi r24, 0x0B ; 11 + 1330: df 01 movw r26, r30 + 1332: 1d 92 st X+, r1 + 1334: 8a 95 dec r24 + 1336: e9 f7 brne .-6 ; 0x1332 CDCInterfaceInfo->Config.DataINEndpoint.Type = EP_TYPE_BULK; - 12a4: 82 e0 ldi r24, 0x02 ; 2 - 12a6: 8c 83 std Y+4, r24 ; 0x04 + 1338: 82 e0 ldi r24, 0x02 ; 2 + 133a: 8c 83 std Y+4, r24 ; 0x04 CDCInterfaceInfo->Config.DataOUTEndpoint.Type = EP_TYPE_BULK; - 12a8: 89 87 std Y+9, r24 ; 0x09 + 133c: 89 87 std Y+9, r24 ; 0x09 CDCInterfaceInfo->Config.NotificationEndpoint.Type = EP_TYPE_INTERRUPT; - 12aa: 83 e0 ldi r24, 0x03 ; 3 - 12ac: 8e 87 std Y+14, r24 ; 0x0e + 133e: 83 e0 ldi r24, 0x03 ; 3 + 1340: 8e 87 std Y+14, r24 ; 0x0e if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataINEndpoint, 1))) - 12ae: ce 01 movw r24, r28 - 12b0: 01 96 adiw r24, 0x01 ; 1 - 12b2: 61 e0 ldi r22, 0x01 ; 1 - 12b4: 08 dc rcall .-2032 ; 0xac6 - 12b6: 88 23 and r24, r24 - 12b8: 59 f0 breq .+22 ; 0x12d0 + 1342: ce 01 movw r24, r28 + 1344: 01 96 adiw r24, 0x01 ; 1 + 1346: 61 e0 ldi r22, 0x01 ; 1 + 1348: 08 dc rcall .-2032 ; 0xb5a + 134a: 88 23 and r24, r24 + 134c: 59 f0 breq .+22 ; 0x1364 return false; if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataOUTEndpoint, 1))) - 12ba: ce 01 movw r24, r28 - 12bc: 06 96 adiw r24, 0x06 ; 6 - 12be: 61 e0 ldi r22, 0x01 ; 1 - 12c0: 02 dc rcall .-2044 ; 0xac6 - 12c2: 88 23 and r24, r24 - 12c4: 29 f0 breq .+10 ; 0x12d0 + 134e: ce 01 movw r24, r28 + 1350: 06 96 adiw r24, 0x06 ; 6 + 1352: 61 e0 ldi r22, 0x01 ; 1 + 1354: 02 dc rcall .-2044 ; 0xb5a + 1356: 88 23 and r24, r24 + 1358: 29 f0 breq .+10 ; 0x1364 return false; if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.NotificationEndpoint, 1))) - 12c6: ce 01 movw r24, r28 - 12c8: 0b 96 adiw r24, 0x0b ; 11 - 12ca: 61 e0 ldi r22, 0x01 ; 1 - 12cc: fc db rcall .-2056 ; 0xac6 - 12ce: 01 c0 rjmp .+2 ; 0x12d2 + 135a: ce 01 movw r24, r28 + 135c: 0b 96 adiw r24, 0x0b ; 11 + 135e: 61 e0 ldi r22, 0x01 ; 1 + 1360: fc db rcall .-2056 ; 0xb5a + 1362: 01 c0 rjmp .+2 ; 0x1366 if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataINEndpoint, 1))) return false; if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataOUTEndpoint, 1))) return false; - 12d0: 80 e0 ldi r24, 0x00 ; 0 + 1364: 80 e0 ldi r24, 0x00 ; 0 if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.NotificationEndpoint, 1))) return false; return true; } - 12d2: df 91 pop r29 - 12d4: cf 91 pop r28 - 12d6: 08 95 ret + 1366: df 91 pop r29 + 1368: cf 91 pop r28 + 136a: 08 95 ret -000012d8 : +0000136c : return Endpoint_Write_Stream_LE(Buffer, Length, NULL); } uint8_t CDC_Device_SendByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, const uint8_t Data) { - 12d8: df 93 push r29 - 12da: cf 93 push r28 - 12dc: 0f 92 push r0 - 12de: cd b7 in r28, 0x3d ; 61 - 12e0: de b7 in r29, 0x3e ; 62 - 12e2: fc 01 movw r30, r24 + 136c: df 93 push r29 + 136e: cf 93 push r28 + 1370: 0f 92 push r0 + 1372: cd b7 in r28, 0x3d ; 61 + 1374: de b7 in r29, 0x3e ; 62 + 1376: fc 01 movw r30, r24 if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - 12e4: 8e b3 in r24, 0x1e ; 30 - 12e6: 84 30 cpi r24, 0x04 ; 4 - 12e8: f9 f4 brne .+62 ; 0x1328 - 12ea: 24 89 ldd r18, Z+20 ; 0x14 - 12ec: 35 89 ldd r19, Z+21 ; 0x15 - 12ee: 46 89 ldd r20, Z+22 ; 0x16 - 12f0: 57 89 ldd r21, Z+23 ; 0x17 - 12f2: 21 15 cp r18, r1 - 12f4: 31 05 cpc r19, r1 - 12f6: 41 05 cpc r20, r1 - 12f8: 51 05 cpc r21, r1 - 12fa: b1 f0 breq .+44 ; 0x1328 + 1378: 8e b3 in r24, 0x1e ; 30 + 137a: 84 30 cpi r24, 0x04 ; 4 + 137c: f9 f4 brne .+62 ; 0x13bc + 137e: 24 89 ldd r18, Z+20 ; 0x14 + 1380: 35 89 ldd r19, Z+21 ; 0x15 + 1382: 46 89 ldd r20, Z+22 ; 0x16 + 1384: 57 89 ldd r21, Z+23 ; 0x17 + 1386: 21 15 cp r18, r1 + 1388: 31 05 cpc r19, r1 + 138a: 41 05 cpc r20, r1 + 138c: 51 05 cpc r21, r1 + 138e: b1 f0 breq .+44 ; 0x13bc */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 12fc: 81 81 ldd r24, Z+1 ; 0x01 - 12fe: 8f 70 andi r24, 0x0F ; 15 - 1300: 80 93 e9 00 sts 0x00E9, r24 + 1390: 81 81 ldd r24, Z+1 ; 0x01 + 1392: 8f 70 andi r24, 0x0F ; 15 + 1394: 80 93 e9 00 sts 0x00E9, r24 * on its direction. */ static inline bool Endpoint_IsReadWriteAllowed(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsReadWriteAllowed(void) { return ((UEINTX & (1 << RWAL)) ? true : false); - 1304: 80 91 e8 00 lds r24, 0x00E8 + 1398: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWSTREAM_DeviceDisconnected; Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address); if (!(Endpoint_IsReadWriteAllowed())) - 1308: 85 fd sbrc r24, 5 - 130a: 0a c0 rjmp .+20 ; 0x1320 + 139c: 85 fd sbrc r24, 5 + 139e: 0a c0 rjmp .+20 ; 0x13b4 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 130c: 80 91 e8 00 lds r24, 0x00E8 - 1310: 8e 77 andi r24, 0x7E ; 126 - 1312: 80 93 e8 00 sts 0x00E8, r24 + 13a0: 80 91 e8 00 lds r24, 0x00E8 + 13a4: 8e 77 andi r24, 0x7E ; 126 + 13a6: 80 93 e8 00 sts 0x00E8, r24 { Endpoint_ClearIN(); uint8_t ErrorCode; if ((ErrorCode = Endpoint_WaitUntilReady()) != ENDPOINT_READYWAIT_NoError) - 1316: 69 83 std Y+1, r22 ; 0x01 - 1318: 39 dc rcall .-1934 ; 0xb8c - 131a: 69 81 ldd r22, Y+1 ; 0x01 - 131c: 88 23 and r24, r24 - 131e: 29 f4 brne .+10 ; 0x132a + 13aa: 69 83 std Y+1, r22 ; 0x01 + 13ac: 39 dc rcall .-1934 ; 0xc20 + 13ae: 69 81 ldd r22, Y+1 ; 0x01 + 13b0: 88 23 and r24, r24 + 13b2: 29 f4 brne .+10 ; 0x13be * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_8(const uint8_t Data) { UEDATX = Data; - 1320: 60 93 f1 00 sts 0x00F1, r22 + 13b4: 60 93 f1 00 sts 0x00F1, r22 return ErrorCode; } Endpoint_Write_8(Data); return ENDPOINT_READYWAIT_NoError; - 1324: 80 e0 ldi r24, 0x00 ; 0 - 1326: 01 c0 rjmp .+2 ; 0x132a + 13b8: 80 e0 ldi r24, 0x00 ; 0 + 13ba: 01 c0 rjmp .+2 ; 0x13be uint8_t CDC_Device_SendByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, const uint8_t Data) { if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) return ENDPOINT_RWSTREAM_DeviceDisconnected; - 1328: 82 e0 ldi r24, 0x02 ; 2 + 13bc: 82 e0 ldi r24, 0x02 ; 2 return ErrorCode; } Endpoint_Write_8(Data); return ENDPOINT_READYWAIT_NoError; } - 132a: 0f 90 pop r0 - 132c: cf 91 pop r28 - 132e: df 91 pop r29 - 1330: 08 95 ret + 13be: 0f 90 pop r0 + 13c0: cf 91 pop r28 + 13c2: df 91 pop r29 + 13c4: 08 95 ret -00001332 : +000013c6 : uint8_t CDC_Device_Flush(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { - 1332: fc 01 movw r30, r24 + 13c6: fc 01 movw r30, r24 if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - 1334: 8e b3 in r24, 0x1e ; 30 - 1336: 84 30 cpi r24, 0x04 ; 4 - 1338: 19 f5 brne .+70 ; 0x1380 - 133a: 24 89 ldd r18, Z+20 ; 0x14 - 133c: 35 89 ldd r19, Z+21 ; 0x15 - 133e: 46 89 ldd r20, Z+22 ; 0x16 - 1340: 57 89 ldd r21, Z+23 ; 0x17 - 1342: 21 15 cp r18, r1 - 1344: 31 05 cpc r19, r1 - 1346: 41 05 cpc r20, r1 - 1348: 51 05 cpc r21, r1 - 134a: d1 f0 breq .+52 ; 0x1380 + 13c8: 8e b3 in r24, 0x1e ; 30 + 13ca: 84 30 cpi r24, 0x04 ; 4 + 13cc: 19 f5 brne .+70 ; 0x1414 + 13ce: 24 89 ldd r18, Z+20 ; 0x14 + 13d0: 35 89 ldd r19, Z+21 ; 0x15 + 13d2: 46 89 ldd r20, Z+22 ; 0x16 + 13d4: 57 89 ldd r21, Z+23 ; 0x17 + 13d6: 21 15 cp r18, r1 + 13d8: 31 05 cpc r19, r1 + 13da: 41 05 cpc r20, r1 + 13dc: 51 05 cpc r21, r1 + 13de: d1 f0 breq .+52 ; 0x1414 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 134c: 81 81 ldd r24, Z+1 ; 0x01 - 134e: 8f 70 andi r24, 0x0F ; 15 - 1350: 80 93 e9 00 sts 0x00E9, r24 + 13e0: 81 81 ldd r24, Z+1 ; 0x01 + 13e2: 8f 70 andi r24, 0x0F ; 15 + 13e4: 80 93 e9 00 sts 0x00E9, r24 #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) return UEBCX; #elif defined(USB_SERIES_4_AVR) return (((uint16_t)UEBCHX << 8) | UEBCLX); #elif defined(USB_SERIES_2_AVR) return UEBCLX; - 1354: 80 91 f2 00 lds r24, 0x00F2 + 13e8: 80 91 f2 00 lds r24, 0x00F2 uint8_t ErrorCode; Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address); if (!(Endpoint_BytesInEndpoint())) - 1358: 88 23 and r24, r24 - 135a: a1 f0 breq .+40 ; 0x1384 + 13ec: 88 23 and r24, r24 + 13ee: a1 f0 breq .+40 ; 0x1418 * on its direction. */ static inline bool Endpoint_IsReadWriteAllowed(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsReadWriteAllowed(void) { return ((UEINTX & (1 << RWAL)) ? true : false); - 135c: 90 91 e8 00 lds r25, 0x00E8 + 13f0: 90 91 e8 00 lds r25, 0x00E8 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 1360: 80 91 e8 00 lds r24, 0x00E8 - 1364: 8e 77 andi r24, 0x7E ; 126 - 1366: 80 93 e8 00 sts 0x00E8, r24 + 13f4: 80 91 e8 00 lds r24, 0x00E8 + 13f8: 8e 77 andi r24, 0x7E ; 126 + 13fa: 80 93 e8 00 sts 0x00E8, r24 bool BankFull = !(Endpoint_IsReadWriteAllowed()); Endpoint_ClearIN(); if (BankFull) - 136a: 95 fd sbrc r25, 5 - 136c: 0d c0 rjmp .+26 ; 0x1388 + 13fe: 95 fd sbrc r25, 5 + 1400: 0d c0 rjmp .+26 ; 0x141c { if ((ErrorCode = Endpoint_WaitUntilReady()) != ENDPOINT_READYWAIT_NoError) - 136e: 0e dc rcall .-2020 ; 0xb8c - 1370: 88 23 and r24, r24 - 1372: 59 f4 brne .+22 ; 0x138a - 1374: 90 91 e8 00 lds r25, 0x00E8 - 1378: 9e 77 andi r25, 0x7E ; 126 - 137a: 90 93 e8 00 sts 0x00E8, r25 - 137e: 08 95 ret + 1402: 0e dc rcall .-2020 ; 0xc20 + 1404: 88 23 and r24, r24 + 1406: 59 f4 brne .+22 ; 0x141e + 1408: 90 91 e8 00 lds r25, 0x00E8 + 140c: 9e 77 andi r25, 0x7E ; 126 + 140e: 90 93 e8 00 sts 0x00E8, r25 + 1412: 08 95 ret } uint8_t CDC_Device_Flush(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) return ENDPOINT_RWSTREAM_DeviceDisconnected; - 1380: 82 e0 ldi r24, 0x02 ; 2 - 1382: 08 95 ret + 1414: 82 e0 ldi r24, 0x02 ; 2 + 1416: 08 95 ret uint8_t ErrorCode; Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address); if (!(Endpoint_BytesInEndpoint())) return ENDPOINT_READYWAIT_NoError; - 1384: 80 e0 ldi r24, 0x00 ; 0 - 1386: 08 95 ret + 1418: 80 e0 ldi r24, 0x00 ; 0 + 141a: 08 95 ret return ErrorCode; Endpoint_ClearIN(); } return ENDPOINT_READYWAIT_NoError; - 1388: 80 e0 ldi r24, 0x00 ; 0 + 141c: 80 e0 ldi r24, 0x00 ; 0 } - 138a: 08 95 ret + 141e: 08 95 ret -0000138c : +00001420 : return true; } void CDC_Device_USBTask(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - 138c: 2e b3 in r18, 0x1e ; 30 - 138e: 24 30 cpi r18, 0x04 ; 4 - 1390: 99 f4 brne .+38 ; 0x13b8 - 1392: fc 01 movw r30, r24 - 1394: 24 89 ldd r18, Z+20 ; 0x14 - 1396: 35 89 ldd r19, Z+21 ; 0x15 - 1398: 46 89 ldd r20, Z+22 ; 0x16 - 139a: 57 89 ldd r21, Z+23 ; 0x17 - 139c: 21 15 cp r18, r1 - 139e: 31 05 cpc r19, r1 - 13a0: 41 05 cpc r20, r1 - 13a2: 51 05 cpc r21, r1 - 13a4: 49 f0 breq .+18 ; 0x13b8 + 1420: 2e b3 in r18, 0x1e ; 30 + 1422: 24 30 cpi r18, 0x04 ; 4 + 1424: 99 f4 brne .+38 ; 0x144c + 1426: fc 01 movw r30, r24 + 1428: 24 89 ldd r18, Z+20 ; 0x14 + 142a: 35 89 ldd r19, Z+21 ; 0x15 + 142c: 46 89 ldd r20, Z+22 ; 0x16 + 142e: 57 89 ldd r21, Z+23 ; 0x17 + 1430: 21 15 cp r18, r1 + 1432: 31 05 cpc r19, r1 + 1434: 41 05 cpc r20, r1 + 1436: 51 05 cpc r21, r1 + 1438: 49 f0 breq .+18 ; 0x144c */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 13a6: 21 81 ldd r18, Z+1 ; 0x01 - 13a8: 2f 70 andi r18, 0x0F ; 15 - 13aa: 20 93 e9 00 sts 0x00E9, r18 + 143a: 21 81 ldd r18, Z+1 ; 0x01 + 143c: 2f 70 andi r18, 0x0F ; 15 + 143e: 20 93 e9 00 sts 0x00E9, r18 * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - 13ae: 20 91 e8 00 lds r18, 0x00E8 + 1442: 20 91 e8 00 lds r18, 0x00E8 return; #if !defined(NO_CLASS_DRIVER_AUTOFLUSH) Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address); if (Endpoint_IsINReady()) - 13b2: 20 ff sbrs r18, 0 - 13b4: 01 c0 rjmp .+2 ; 0x13b8 + 1446: 20 ff sbrs r18, 0 + 1448: 01 c0 rjmp .+2 ; 0x144c CDC_Device_Flush(CDCInterfaceInfo); - 13b6: bd cf rjmp .-134 ; 0x1332 - 13b8: 08 95 ret + 144a: bd cf rjmp .-134 ; 0x13c6 + 144c: 08 95 ret -000013ba : +0000144e : return 0; } } int16_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { - 13ba: fc 01 movw r30, r24 + 144e: fc 01 movw r30, r24 if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - 13bc: 8e b3 in r24, 0x1e ; 30 - 13be: 84 30 cpi r24, 0x04 ; 4 - 13c0: 29 f5 brne .+74 ; 0x140c - 13c2: 24 89 ldd r18, Z+20 ; 0x14 - 13c4: 35 89 ldd r19, Z+21 ; 0x15 - 13c6: 46 89 ldd r20, Z+22 ; 0x16 - 13c8: 57 89 ldd r21, Z+23 ; 0x17 - 13ca: 21 15 cp r18, r1 - 13cc: 31 05 cpc r19, r1 - 13ce: 41 05 cpc r20, r1 - 13d0: 51 05 cpc r21, r1 - 13d2: e1 f0 breq .+56 ; 0x140c + 1450: 8e b3 in r24, 0x1e ; 30 + 1452: 84 30 cpi r24, 0x04 ; 4 + 1454: 29 f5 brne .+74 ; 0x14a0 + 1456: 24 89 ldd r18, Z+20 ; 0x14 + 1458: 35 89 ldd r19, Z+21 ; 0x15 + 145a: 46 89 ldd r20, Z+22 ; 0x16 + 145c: 57 89 ldd r21, Z+23 ; 0x17 + 145e: 21 15 cp r18, r1 + 1460: 31 05 cpc r19, r1 + 1462: 41 05 cpc r20, r1 + 1464: 51 05 cpc r21, r1 + 1466: e1 f0 breq .+56 ; 0x14a0 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 13d4: 86 81 ldd r24, Z+6 ; 0x06 - 13d6: 8f 70 andi r24, 0x0F ; 15 - 13d8: 80 93 e9 00 sts 0x00E9, r24 + 1468: 86 81 ldd r24, Z+6 ; 0x06 + 146a: 8f 70 andi r24, 0x0F ; 15 + 146c: 80 93 e9 00 sts 0x00E9, r24 * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - 13dc: 80 91 e8 00 lds r24, 0x00E8 + 1470: 80 91 e8 00 lds r24, 0x00E8 int16_t ReceivedByte = -1; Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataOUTEndpoint.Address); if (Endpoint_IsOUTReceived()) - 13e0: 82 ff sbrs r24, 2 - 13e2: 14 c0 rjmp .+40 ; 0x140c + 1474: 82 ff sbrs r24, 2 + 1476: 14 c0 rjmp .+40 ; 0x14a0 #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) return UEBCX; #elif defined(USB_SERIES_4_AVR) return (((uint16_t)UEBCHX << 8) | UEBCLX); #elif defined(USB_SERIES_2_AVR) return UEBCLX; - 13e4: 80 91 f2 00 lds r24, 0x00F2 + 1478: 80 91 f2 00 lds r24, 0x00F2 { if (Endpoint_BytesInEndpoint()) - 13e8: 88 23 and r24, r24 - 13ea: 21 f0 breq .+8 ; 0x13f4 + 147c: 88 23 and r24, r24 + 147e: 21 f0 breq .+8 ; 0x1488 * \return Next byte in the currently selected endpoint's FIFO buffer. */ static inline uint8_t Endpoint_Read_8(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_Read_8(void) { return UEDATX; - 13ec: 20 91 f1 00 lds r18, 0x00F1 + 1480: 20 91 f1 00 lds r18, 0x00F1 ReceivedByte = Endpoint_Read_8(); - 13f0: 30 e0 ldi r19, 0x00 ; 0 - 13f2: 02 c0 rjmp .+4 ; 0x13f8 + 1484: 30 e0 ldi r19, 0x00 ; 0 + 1486: 02 c0 rjmp .+4 ; 0x148c int16_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) return -1; int16_t ReceivedByte = -1; - 13f4: 2f ef ldi r18, 0xFF ; 255 - 13f6: 3f ef ldi r19, 0xFF ; 255 + 1488: 2f ef ldi r18, 0xFF ; 255 + 148a: 3f ef ldi r19, 0xFF ; 255 #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) return UEBCX; #elif defined(USB_SERIES_4_AVR) return (((uint16_t)UEBCHX << 8) | UEBCLX); #elif defined(USB_SERIES_2_AVR) return UEBCLX; - 13f8: 80 91 f2 00 lds r24, 0x00F2 + 148c: 80 91 f2 00 lds r24, 0x00F2 if (Endpoint_IsOUTReceived()) { if (Endpoint_BytesInEndpoint()) ReceivedByte = Endpoint_Read_8(); if (!(Endpoint_BytesInEndpoint())) - 13fc: 88 23 and r24, r24 - 13fe: 41 f4 brne .+16 ; 0x1410 + 1490: 88 23 and r24, r24 + 1492: 41 f4 brne .+16 ; 0x14a4 */ static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearOUT(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); - 1400: 80 91 e8 00 lds r24, 0x00E8 - 1404: 8b 77 andi r24, 0x7B ; 123 - 1406: 80 93 e8 00 sts 0x00E8, r24 - 140a: 02 c0 rjmp .+4 ; 0x1410 + 1494: 80 91 e8 00 lds r24, 0x00E8 + 1498: 8b 77 andi r24, 0x7B ; 123 + 149a: 80 93 e8 00 sts 0x00E8, r24 + 149e: 02 c0 rjmp .+4 ; 0x14a4 int16_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) return -1; int16_t ReceivedByte = -1; - 140c: 2f ef ldi r18, 0xFF ; 255 - 140e: 3f ef ldi r19, 0xFF ; 255 + 14a0: 2f ef ldi r18, 0xFF ; 255 + 14a2: 3f ef ldi r19, 0xFF ; 255 if (!(Endpoint_BytesInEndpoint())) Endpoint_ClearOUT(); } return ReceivedByte; } - 1410: c9 01 movw r24, r18 - 1412: 08 95 ret + 14a4: c9 01 movw r24, r18 + 14a6: 08 95 ret -00001414 : +000014a8 : #endif void CDC_Device_Event_Stub(void) { } - 1414: 08 95 ret - -00001416 <__subsf3>: - 1416: 50 58 subi r21, 0x80 ; 128 - -00001418 <__addsf3>: - 1418: bb 27 eor r27, r27 - 141a: aa 27 eor r26, r26 - 141c: 0e d0 rcall .+28 ; 0x143a <__addsf3x> - 141e: 70 c1 rjmp .+736 ; 0x1700 <__fp_round> - 1420: 61 d1 rcall .+706 ; 0x16e4 <__fp_pscA> - 1422: 30 f0 brcs .+12 ; 0x1430 <__addsf3+0x18> - 1424: 66 d1 rcall .+716 ; 0x16f2 <__fp_pscB> - 1426: 20 f0 brcs .+8 ; 0x1430 <__addsf3+0x18> - 1428: 31 f4 brne .+12 ; 0x1436 <__addsf3+0x1e> - 142a: 9f 3f cpi r25, 0xFF ; 255 - 142c: 11 f4 brne .+4 ; 0x1432 <__addsf3+0x1a> - 142e: 1e f4 brtc .+6 ; 0x1436 <__addsf3+0x1e> - 1430: 56 c1 rjmp .+684 ; 0x16de <__fp_nan> - 1432: 0e f4 brtc .+2 ; 0x1436 <__addsf3+0x1e> - 1434: e0 95 com r30 - 1436: e7 fb bst r30, 7 - 1438: 4c c1 rjmp .+664 ; 0x16d2 <__fp_inf> - -0000143a <__addsf3x>: - 143a: e9 2f mov r30, r25 - 143c: 72 d1 rcall .+740 ; 0x1722 <__fp_split3> - 143e: 80 f3 brcs .-32 ; 0x1420 <__addsf3+0x8> - 1440: ba 17 cp r27, r26 - 1442: 62 07 cpc r22, r18 - 1444: 73 07 cpc r23, r19 - 1446: 84 07 cpc r24, r20 - 1448: 95 07 cpc r25, r21 - 144a: 18 f0 brcs .+6 ; 0x1452 <__addsf3x+0x18> - 144c: 71 f4 brne .+28 ; 0x146a <__addsf3x+0x30> - 144e: 9e f5 brtc .+102 ; 0x14b6 <__addsf3x+0x7c> - 1450: 8a c1 rjmp .+788 ; 0x1766 <__fp_zero> - 1452: 0e f4 brtc .+2 ; 0x1456 <__addsf3x+0x1c> - 1454: e0 95 com r30 - 1456: 0b 2e mov r0, r27 - 1458: ba 2f mov r27, r26 - 145a: a0 2d mov r26, r0 - 145c: 0b 01 movw r0, r22 - 145e: b9 01 movw r22, r18 - 1460: 90 01 movw r18, r0 - 1462: 0c 01 movw r0, r24 - 1464: ca 01 movw r24, r20 - 1466: a0 01 movw r20, r0 - 1468: 11 24 eor r1, r1 - 146a: ff 27 eor r31, r31 - 146c: 59 1b sub r21, r25 - 146e: 99 f0 breq .+38 ; 0x1496 <__addsf3x+0x5c> - 1470: 59 3f cpi r21, 0xF9 ; 249 - 1472: 50 f4 brcc .+20 ; 0x1488 <__addsf3x+0x4e> - 1474: 50 3e cpi r21, 0xE0 ; 224 - 1476: 68 f1 brcs .+90 ; 0x14d2 <__addsf3x+0x98> - 1478: 1a 16 cp r1, r26 - 147a: f0 40 sbci r31, 0x00 ; 0 - 147c: a2 2f mov r26, r18 - 147e: 23 2f mov r18, r19 - 1480: 34 2f mov r19, r20 - 1482: 44 27 eor r20, r20 - 1484: 58 5f subi r21, 0xF8 ; 248 - 1486: f3 cf rjmp .-26 ; 0x146e <__addsf3x+0x34> - 1488: 46 95 lsr r20 - 148a: 37 95 ror r19 - 148c: 27 95 ror r18 - 148e: a7 95 ror r26 - 1490: f0 40 sbci r31, 0x00 ; 0 - 1492: 53 95 inc r21 - 1494: c9 f7 brne .-14 ; 0x1488 <__addsf3x+0x4e> - 1496: 7e f4 brtc .+30 ; 0x14b6 <__addsf3x+0x7c> - 1498: 1f 16 cp r1, r31 - 149a: ba 0b sbc r27, r26 - 149c: 62 0b sbc r22, r18 - 149e: 73 0b sbc r23, r19 - 14a0: 84 0b sbc r24, r20 - 14a2: ba f0 brmi .+46 ; 0x14d2 <__addsf3x+0x98> - 14a4: 91 50 subi r25, 0x01 ; 1 - 14a6: a1 f0 breq .+40 ; 0x14d0 <__addsf3x+0x96> - 14a8: ff 0f add r31, r31 - 14aa: bb 1f adc r27, r27 - 14ac: 66 1f adc r22, r22 - 14ae: 77 1f adc r23, r23 - 14b0: 88 1f adc r24, r24 - 14b2: c2 f7 brpl .-16 ; 0x14a4 <__addsf3x+0x6a> - 14b4: 0e c0 rjmp .+28 ; 0x14d2 <__addsf3x+0x98> - 14b6: ba 0f add r27, r26 - 14b8: 62 1f adc r22, r18 - 14ba: 73 1f adc r23, r19 - 14bc: 84 1f adc r24, r20 - 14be: 48 f4 brcc .+18 ; 0x14d2 <__addsf3x+0x98> - 14c0: 87 95 ror r24 - 14c2: 77 95 ror r23 - 14c4: 67 95 ror r22 - 14c6: b7 95 ror r27 - 14c8: f7 95 ror r31 - 14ca: 9e 3f cpi r25, 0xFE ; 254 - 14cc: 08 f0 brcs .+2 ; 0x14d0 <__addsf3x+0x96> - 14ce: b3 cf rjmp .-154 ; 0x1436 <__addsf3+0x1e> - 14d0: 93 95 inc r25 - 14d2: 88 0f add r24, r24 - 14d4: 08 f0 brcs .+2 ; 0x14d8 <__addsf3x+0x9e> - 14d6: 99 27 eor r25, r25 - 14d8: ee 0f add r30, r30 - 14da: 97 95 ror r25 - 14dc: 87 95 ror r24 - 14de: 08 95 ret - -000014e0 <__cmpsf2>: - 14e0: d4 d0 rcall .+424 ; 0x168a <__fp_cmp> - 14e2: 08 f4 brcc .+2 ; 0x14e6 <__cmpsf2+0x6> - 14e4: 81 e0 ldi r24, 0x01 ; 1 - 14e6: 08 95 ret - -000014e8 <__divsf3>: - 14e8: 0c d0 rcall .+24 ; 0x1502 <__divsf3x> - 14ea: 0a c1 rjmp .+532 ; 0x1700 <__fp_round> - 14ec: 02 d1 rcall .+516 ; 0x16f2 <__fp_pscB> - 14ee: 40 f0 brcs .+16 ; 0x1500 <__divsf3+0x18> - 14f0: f9 d0 rcall .+498 ; 0x16e4 <__fp_pscA> - 14f2: 30 f0 brcs .+12 ; 0x1500 <__divsf3+0x18> - 14f4: 21 f4 brne .+8 ; 0x14fe <__divsf3+0x16> - 14f6: 5f 3f cpi r21, 0xFF ; 255 - 14f8: 19 f0 breq .+6 ; 0x1500 <__divsf3+0x18> - 14fa: eb c0 rjmp .+470 ; 0x16d2 <__fp_inf> - 14fc: 51 11 cpse r21, r1 - 14fe: 34 c1 rjmp .+616 ; 0x1768 <__fp_szero> - 1500: ee c0 rjmp .+476 ; 0x16de <__fp_nan> - -00001502 <__divsf3x>: - 1502: 0f d1 rcall .+542 ; 0x1722 <__fp_split3> - 1504: 98 f3 brcs .-26 ; 0x14ec <__divsf3+0x4> - -00001506 <__divsf3_pse>: - 1506: 99 23 and r25, r25 - 1508: c9 f3 breq .-14 ; 0x14fc <__divsf3+0x14> - 150a: 55 23 and r21, r21 - 150c: b1 f3 breq .-20 ; 0x14fa <__divsf3+0x12> - 150e: 95 1b sub r25, r21 - 1510: 55 0b sbc r21, r21 - 1512: bb 27 eor r27, r27 - 1514: aa 27 eor r26, r26 - 1516: 62 17 cp r22, r18 - 1518: 73 07 cpc r23, r19 - 151a: 84 07 cpc r24, r20 - 151c: 38 f0 brcs .+14 ; 0x152c <__divsf3_pse+0x26> - 151e: 9f 5f subi r25, 0xFF ; 255 - 1520: 5f 4f sbci r21, 0xFF ; 255 - 1522: 22 0f add r18, r18 - 1524: 33 1f adc r19, r19 - 1526: 44 1f adc r20, r20 - 1528: aa 1f adc r26, r26 - 152a: a9 f3 breq .-22 ; 0x1516 <__divsf3_pse+0x10> - 152c: 33 d0 rcall .+102 ; 0x1594 <__divsf3_pse+0x8e> - 152e: 0e 2e mov r0, r30 - 1530: 3a f0 brmi .+14 ; 0x1540 <__divsf3_pse+0x3a> - 1532: e0 e8 ldi r30, 0x80 ; 128 - 1534: 30 d0 rcall .+96 ; 0x1596 <__divsf3_pse+0x90> - 1536: 91 50 subi r25, 0x01 ; 1 - 1538: 50 40 sbci r21, 0x00 ; 0 - 153a: e6 95 lsr r30 - 153c: 00 1c adc r0, r0 - 153e: ca f7 brpl .-14 ; 0x1532 <__divsf3_pse+0x2c> - 1540: 29 d0 rcall .+82 ; 0x1594 <__divsf3_pse+0x8e> - 1542: fe 2f mov r31, r30 - 1544: 27 d0 rcall .+78 ; 0x1594 <__divsf3_pse+0x8e> - 1546: 66 0f add r22, r22 - 1548: 77 1f adc r23, r23 - 154a: 88 1f adc r24, r24 - 154c: bb 1f adc r27, r27 - 154e: 26 17 cp r18, r22 - 1550: 37 07 cpc r19, r23 - 1552: 48 07 cpc r20, r24 - 1554: ab 07 cpc r26, r27 - 1556: b0 e8 ldi r27, 0x80 ; 128 - 1558: 09 f0 breq .+2 ; 0x155c <__divsf3_pse+0x56> - 155a: bb 0b sbc r27, r27 - 155c: 80 2d mov r24, r0 - 155e: bf 01 movw r22, r30 - 1560: ff 27 eor r31, r31 - 1562: 93 58 subi r25, 0x83 ; 131 - 1564: 5f 4f sbci r21, 0xFF ; 255 - 1566: 2a f0 brmi .+10 ; 0x1572 <__divsf3_pse+0x6c> - 1568: 9e 3f cpi r25, 0xFE ; 254 - 156a: 51 05 cpc r21, r1 - 156c: 68 f0 brcs .+26 ; 0x1588 <__divsf3_pse+0x82> - 156e: b1 c0 rjmp .+354 ; 0x16d2 <__fp_inf> - 1570: fb c0 rjmp .+502 ; 0x1768 <__fp_szero> - 1572: 5f 3f cpi r21, 0xFF ; 255 - 1574: ec f3 brlt .-6 ; 0x1570 <__divsf3_pse+0x6a> - 1576: 98 3e cpi r25, 0xE8 ; 232 - 1578: dc f3 brlt .-10 ; 0x1570 <__divsf3_pse+0x6a> - 157a: 86 95 lsr r24 - 157c: 77 95 ror r23 - 157e: 67 95 ror r22 - 1580: b7 95 ror r27 - 1582: f7 95 ror r31 - 1584: 9f 5f subi r25, 0xFF ; 255 - 1586: c9 f7 brne .-14 ; 0x157a <__divsf3_pse+0x74> - 1588: 88 0f add r24, r24 - 158a: 91 1d adc r25, r1 - 158c: 96 95 lsr r25 - 158e: 87 95 ror r24 - 1590: 97 f9 bld r25, 7 - 1592: 08 95 ret - 1594: e1 e0 ldi r30, 0x01 ; 1 - 1596: 66 0f add r22, r22 - 1598: 77 1f adc r23, r23 - 159a: 88 1f adc r24, r24 - 159c: bb 1f adc r27, r27 - 159e: 62 17 cp r22, r18 - 15a0: 73 07 cpc r23, r19 - 15a2: 84 07 cpc r24, r20 - 15a4: ba 07 cpc r27, r26 - 15a6: 20 f0 brcs .+8 ; 0x15b0 <__divsf3_pse+0xaa> - 15a8: 62 1b sub r22, r18 - 15aa: 73 0b sbc r23, r19 - 15ac: 84 0b sbc r24, r20 - 15ae: ba 0b sbc r27, r26 - 15b0: ee 1f adc r30, r30 - 15b2: 88 f7 brcc .-30 ; 0x1596 <__divsf3_pse+0x90> - 15b4: e0 95 com r30 - 15b6: 08 95 ret - -000015b8 <__fixunssfsi>: - 15b8: bc d0 rcall .+376 ; 0x1732 <__fp_splitA> - 15ba: 88 f0 brcs .+34 ; 0x15de <__fixunssfsi+0x26> - 15bc: 9f 57 subi r25, 0x7F ; 127 - 15be: 90 f0 brcs .+36 ; 0x15e4 <__fixunssfsi+0x2c> - 15c0: b9 2f mov r27, r25 - 15c2: 99 27 eor r25, r25 - 15c4: b7 51 subi r27, 0x17 ; 23 - 15c6: a0 f0 brcs .+40 ; 0x15f0 <__fixunssfsi+0x38> - 15c8: d1 f0 breq .+52 ; 0x15fe <__fixunssfsi+0x46> - 15ca: 66 0f add r22, r22 - 15cc: 77 1f adc r23, r23 - 15ce: 88 1f adc r24, r24 - 15d0: 99 1f adc r25, r25 - 15d2: 1a f0 brmi .+6 ; 0x15da <__fixunssfsi+0x22> - 15d4: ba 95 dec r27 - 15d6: c9 f7 brne .-14 ; 0x15ca <__fixunssfsi+0x12> - 15d8: 12 c0 rjmp .+36 ; 0x15fe <__fixunssfsi+0x46> - 15da: b1 30 cpi r27, 0x01 ; 1 - 15dc: 81 f0 breq .+32 ; 0x15fe <__fixunssfsi+0x46> - 15de: c3 d0 rcall .+390 ; 0x1766 <__fp_zero> - 15e0: b1 e0 ldi r27, 0x01 ; 1 - 15e2: 08 95 ret - 15e4: c0 c0 rjmp .+384 ; 0x1766 <__fp_zero> - 15e6: 67 2f mov r22, r23 - 15e8: 78 2f mov r23, r24 - 15ea: 88 27 eor r24, r24 - 15ec: b8 5f subi r27, 0xF8 ; 248 - 15ee: 39 f0 breq .+14 ; 0x15fe <__fixunssfsi+0x46> - 15f0: b9 3f cpi r27, 0xF9 ; 249 - 15f2: cc f3 brlt .-14 ; 0x15e6 <__fixunssfsi+0x2e> - 15f4: 86 95 lsr r24 - 15f6: 77 95 ror r23 - 15f8: 67 95 ror r22 - 15fa: b3 95 inc r27 - 15fc: d9 f7 brne .-10 ; 0x15f4 <__fixunssfsi+0x3c> - 15fe: 3e f4 brtc .+14 ; 0x160e <__fixunssfsi+0x56> - 1600: 90 95 com r25 - 1602: 80 95 com r24 - 1604: 70 95 com r23 - 1606: 61 95 neg r22 - 1608: 7f 4f sbci r23, 0xFF ; 255 - 160a: 8f 4f sbci r24, 0xFF ; 255 - 160c: 9f 4f sbci r25, 0xFF ; 255 - 160e: 08 95 ret - -00001610 <__floatunsisf>: - 1610: e8 94 clt - 1612: 09 c0 rjmp .+18 ; 0x1626 <__floatsisf+0x12> - -00001614 <__floatsisf>: - 1614: 97 fb bst r25, 7 - 1616: 3e f4 brtc .+14 ; 0x1626 <__floatsisf+0x12> - 1618: 90 95 com r25 - 161a: 80 95 com r24 - 161c: 70 95 com r23 - 161e: 61 95 neg r22 - 1620: 7f 4f sbci r23, 0xFF ; 255 - 1622: 8f 4f sbci r24, 0xFF ; 255 - 1624: 9f 4f sbci r25, 0xFF ; 255 - 1626: 99 23 and r25, r25 - 1628: a9 f0 breq .+42 ; 0x1654 <__floatsisf+0x40> - 162a: f9 2f mov r31, r25 - 162c: 96 e9 ldi r25, 0x96 ; 150 - 162e: bb 27 eor r27, r27 - 1630: 93 95 inc r25 - 1632: f6 95 lsr r31 - 1634: 87 95 ror r24 - 1636: 77 95 ror r23 - 1638: 67 95 ror r22 - 163a: b7 95 ror r27 - 163c: f1 11 cpse r31, r1 - 163e: f8 cf rjmp .-16 ; 0x1630 <__floatsisf+0x1c> - 1640: fa f4 brpl .+62 ; 0x1680 <__floatsisf+0x6c> - 1642: bb 0f add r27, r27 - 1644: 11 f4 brne .+4 ; 0x164a <__floatsisf+0x36> - 1646: 60 ff sbrs r22, 0 - 1648: 1b c0 rjmp .+54 ; 0x1680 <__floatsisf+0x6c> - 164a: 6f 5f subi r22, 0xFF ; 255 - 164c: 7f 4f sbci r23, 0xFF ; 255 - 164e: 8f 4f sbci r24, 0xFF ; 255 - 1650: 9f 4f sbci r25, 0xFF ; 255 - 1652: 16 c0 rjmp .+44 ; 0x1680 <__floatsisf+0x6c> - 1654: 88 23 and r24, r24 - 1656: 11 f0 breq .+4 ; 0x165c <__floatsisf+0x48> - 1658: 96 e9 ldi r25, 0x96 ; 150 - 165a: 11 c0 rjmp .+34 ; 0x167e <__floatsisf+0x6a> - 165c: 77 23 and r23, r23 - 165e: 21 f0 breq .+8 ; 0x1668 <__floatsisf+0x54> - 1660: 9e e8 ldi r25, 0x8E ; 142 - 1662: 87 2f mov r24, r23 - 1664: 76 2f mov r23, r22 - 1666: 05 c0 rjmp .+10 ; 0x1672 <__floatsisf+0x5e> - 1668: 66 23 and r22, r22 - 166a: 71 f0 breq .+28 ; 0x1688 <__floatsisf+0x74> - 166c: 96 e8 ldi r25, 0x86 ; 134 - 166e: 86 2f mov r24, r22 - 1670: 70 e0 ldi r23, 0x00 ; 0 - 1672: 60 e0 ldi r22, 0x00 ; 0 - 1674: 2a f0 brmi .+10 ; 0x1680 <__floatsisf+0x6c> - 1676: 9a 95 dec r25 - 1678: 66 0f add r22, r22 - 167a: 77 1f adc r23, r23 - 167c: 88 1f adc r24, r24 - 167e: da f7 brpl .-10 ; 0x1676 <__floatsisf+0x62> - 1680: 88 0f add r24, r24 - 1682: 96 95 lsr r25 - 1684: 87 95 ror r24 - 1686: 97 f9 bld r25, 7 - 1688: 08 95 ret - -0000168a <__fp_cmp>: - 168a: 99 0f add r25, r25 - 168c: 00 08 sbc r0, r0 - 168e: 55 0f add r21, r21 - 1690: aa 0b sbc r26, r26 - 1692: e0 e8 ldi r30, 0x80 ; 128 - 1694: fe ef ldi r31, 0xFE ; 254 - 1696: 16 16 cp r1, r22 - 1698: 17 06 cpc r1, r23 - 169a: e8 07 cpc r30, r24 - 169c: f9 07 cpc r31, r25 - 169e: c0 f0 brcs .+48 ; 0x16d0 <__fp_cmp+0x46> - 16a0: 12 16 cp r1, r18 - 16a2: 13 06 cpc r1, r19 - 16a4: e4 07 cpc r30, r20 - 16a6: f5 07 cpc r31, r21 - 16a8: 98 f0 brcs .+38 ; 0x16d0 <__fp_cmp+0x46> - 16aa: 62 1b sub r22, r18 - 16ac: 73 0b sbc r23, r19 - 16ae: 84 0b sbc r24, r20 - 16b0: 95 0b sbc r25, r21 - 16b2: 39 f4 brne .+14 ; 0x16c2 <__fp_cmp+0x38> - 16b4: 0a 26 eor r0, r26 - 16b6: 61 f0 breq .+24 ; 0x16d0 <__fp_cmp+0x46> - 16b8: 23 2b or r18, r19 - 16ba: 24 2b or r18, r20 - 16bc: 25 2b or r18, r21 - 16be: 21 f4 brne .+8 ; 0x16c8 <__fp_cmp+0x3e> - 16c0: 08 95 ret - 16c2: 0a 26 eor r0, r26 - 16c4: 09 f4 brne .+2 ; 0x16c8 <__fp_cmp+0x3e> - 16c6: a1 40 sbci r26, 0x01 ; 1 - 16c8: a6 95 lsr r26 - 16ca: 8f ef ldi r24, 0xFF ; 255 - 16cc: 81 1d adc r24, r1 - 16ce: 81 1d adc r24, r1 - 16d0: 08 95 ret - -000016d2 <__fp_inf>: - 16d2: 97 f9 bld r25, 7 - 16d4: 9f 67 ori r25, 0x7F ; 127 - 16d6: 80 e8 ldi r24, 0x80 ; 128 - 16d8: 70 e0 ldi r23, 0x00 ; 0 - 16da: 60 e0 ldi r22, 0x00 ; 0 - 16dc: 08 95 ret - -000016de <__fp_nan>: - 16de: 9f ef ldi r25, 0xFF ; 255 - 16e0: 80 ec ldi r24, 0xC0 ; 192 - 16e2: 08 95 ret - -000016e4 <__fp_pscA>: - 16e4: 00 24 eor r0, r0 - 16e6: 0a 94 dec r0 - 16e8: 16 16 cp r1, r22 - 16ea: 17 06 cpc r1, r23 - 16ec: 18 06 cpc r1, r24 - 16ee: 09 06 cpc r0, r25 - 16f0: 08 95 ret - -000016f2 <__fp_pscB>: - 16f2: 00 24 eor r0, r0 - 16f4: 0a 94 dec r0 - 16f6: 12 16 cp r1, r18 - 16f8: 13 06 cpc r1, r19 - 16fa: 14 06 cpc r1, r20 - 16fc: 05 06 cpc r0, r21 - 16fe: 08 95 ret - -00001700 <__fp_round>: - 1700: 09 2e mov r0, r25 - 1702: 03 94 inc r0 - 1704: 00 0c add r0, r0 - 1706: 11 f4 brne .+4 ; 0x170c <__fp_round+0xc> - 1708: 88 23 and r24, r24 - 170a: 52 f0 brmi .+20 ; 0x1720 <__fp_round+0x20> - 170c: bb 0f add r27, r27 - 170e: 40 f4 brcc .+16 ; 0x1720 <__fp_round+0x20> - 1710: bf 2b or r27, r31 - 1712: 11 f4 brne .+4 ; 0x1718 <__fp_round+0x18> - 1714: 60 ff sbrs r22, 0 - 1716: 04 c0 rjmp .+8 ; 0x1720 <__fp_round+0x20> - 1718: 6f 5f subi r22, 0xFF ; 255 - 171a: 7f 4f sbci r23, 0xFF ; 255 - 171c: 8f 4f sbci r24, 0xFF ; 255 - 171e: 9f 4f sbci r25, 0xFF ; 255 - 1720: 08 95 ret - -00001722 <__fp_split3>: - 1722: 57 fd sbrc r21, 7 - 1724: 90 58 subi r25, 0x80 ; 128 - 1726: 44 0f add r20, r20 - 1728: 55 1f adc r21, r21 - 172a: 59 f0 breq .+22 ; 0x1742 <__fp_splitA+0x10> - 172c: 5f 3f cpi r21, 0xFF ; 255 - 172e: 71 f0 breq .+28 ; 0x174c <__fp_splitA+0x1a> - 1730: 47 95 ror r20 - -00001732 <__fp_splitA>: - 1732: 88 0f add r24, r24 - 1734: 97 fb bst r25, 7 - 1736: 99 1f adc r25, r25 - 1738: 61 f0 breq .+24 ; 0x1752 <__fp_splitA+0x20> - 173a: 9f 3f cpi r25, 0xFF ; 255 - 173c: 79 f0 breq .+30 ; 0x175c <__fp_splitA+0x2a> - 173e: 87 95 ror r24 - 1740: 08 95 ret - 1742: 12 16 cp r1, r18 - 1744: 13 06 cpc r1, r19 - 1746: 14 06 cpc r1, r20 - 1748: 55 1f adc r21, r21 - 174a: f2 cf rjmp .-28 ; 0x1730 <__fp_split3+0xe> - 174c: 46 95 lsr r20 - 174e: f1 df rcall .-30 ; 0x1732 <__fp_splitA> - 1750: 08 c0 rjmp .+16 ; 0x1762 <__fp_splitA+0x30> - 1752: 16 16 cp r1, r22 - 1754: 17 06 cpc r1, r23 - 1756: 18 06 cpc r1, r24 - 1758: 99 1f adc r25, r25 - 175a: f1 cf rjmp .-30 ; 0x173e <__fp_splitA+0xc> - 175c: 86 95 lsr r24 - 175e: 71 05 cpc r23, r1 - 1760: 61 05 cpc r22, r1 - 1762: 08 94 sec + 14a8: 08 95 ret + +000014aa <__subsf3>: + 14aa: 50 58 subi r21, 0x80 ; 128 + +000014ac <__addsf3>: + 14ac: bb 27 eor r27, r27 + 14ae: aa 27 eor r26, r26 + 14b0: 0e d0 rcall .+28 ; 0x14ce <__addsf3x> + 14b2: 70 c1 rjmp .+736 ; 0x1794 <__fp_round> + 14b4: 61 d1 rcall .+706 ; 0x1778 <__fp_pscA> + 14b6: 30 f0 brcs .+12 ; 0x14c4 <__addsf3+0x18> + 14b8: 66 d1 rcall .+716 ; 0x1786 <__fp_pscB> + 14ba: 20 f0 brcs .+8 ; 0x14c4 <__addsf3+0x18> + 14bc: 31 f4 brne .+12 ; 0x14ca <__addsf3+0x1e> + 14be: 9f 3f cpi r25, 0xFF ; 255 + 14c0: 11 f4 brne .+4 ; 0x14c6 <__addsf3+0x1a> + 14c2: 1e f4 brtc .+6 ; 0x14ca <__addsf3+0x1e> + 14c4: 56 c1 rjmp .+684 ; 0x1772 <__fp_nan> + 14c6: 0e f4 brtc .+2 ; 0x14ca <__addsf3+0x1e> + 14c8: e0 95 com r30 + 14ca: e7 fb bst r30, 7 + 14cc: 4c c1 rjmp .+664 ; 0x1766 <__fp_inf> + +000014ce <__addsf3x>: + 14ce: e9 2f mov r30, r25 + 14d0: 72 d1 rcall .+740 ; 0x17b6 <__fp_split3> + 14d2: 80 f3 brcs .-32 ; 0x14b4 <__addsf3+0x8> + 14d4: ba 17 cp r27, r26 + 14d6: 62 07 cpc r22, r18 + 14d8: 73 07 cpc r23, r19 + 14da: 84 07 cpc r24, r20 + 14dc: 95 07 cpc r25, r21 + 14de: 18 f0 brcs .+6 ; 0x14e6 <__addsf3x+0x18> + 14e0: 71 f4 brne .+28 ; 0x14fe <__addsf3x+0x30> + 14e2: 9e f5 brtc .+102 ; 0x154a <__addsf3x+0x7c> + 14e4: 8a c1 rjmp .+788 ; 0x17fa <__fp_zero> + 14e6: 0e f4 brtc .+2 ; 0x14ea <__addsf3x+0x1c> + 14e8: e0 95 com r30 + 14ea: 0b 2e mov r0, r27 + 14ec: ba 2f mov r27, r26 + 14ee: a0 2d mov r26, r0 + 14f0: 0b 01 movw r0, r22 + 14f2: b9 01 movw r22, r18 + 14f4: 90 01 movw r18, r0 + 14f6: 0c 01 movw r0, r24 + 14f8: ca 01 movw r24, r20 + 14fa: a0 01 movw r20, r0 + 14fc: 11 24 eor r1, r1 + 14fe: ff 27 eor r31, r31 + 1500: 59 1b sub r21, r25 + 1502: 99 f0 breq .+38 ; 0x152a <__addsf3x+0x5c> + 1504: 59 3f cpi r21, 0xF9 ; 249 + 1506: 50 f4 brcc .+20 ; 0x151c <__addsf3x+0x4e> + 1508: 50 3e cpi r21, 0xE0 ; 224 + 150a: 68 f1 brcs .+90 ; 0x1566 <__addsf3x+0x98> + 150c: 1a 16 cp r1, r26 + 150e: f0 40 sbci r31, 0x00 ; 0 + 1510: a2 2f mov r26, r18 + 1512: 23 2f mov r18, r19 + 1514: 34 2f mov r19, r20 + 1516: 44 27 eor r20, r20 + 1518: 58 5f subi r21, 0xF8 ; 248 + 151a: f3 cf rjmp .-26 ; 0x1502 <__addsf3x+0x34> + 151c: 46 95 lsr r20 + 151e: 37 95 ror r19 + 1520: 27 95 ror r18 + 1522: a7 95 ror r26 + 1524: f0 40 sbci r31, 0x00 ; 0 + 1526: 53 95 inc r21 + 1528: c9 f7 brne .-14 ; 0x151c <__addsf3x+0x4e> + 152a: 7e f4 brtc .+30 ; 0x154a <__addsf3x+0x7c> + 152c: 1f 16 cp r1, r31 + 152e: ba 0b sbc r27, r26 + 1530: 62 0b sbc r22, r18 + 1532: 73 0b sbc r23, r19 + 1534: 84 0b sbc r24, r20 + 1536: ba f0 brmi .+46 ; 0x1566 <__addsf3x+0x98> + 1538: 91 50 subi r25, 0x01 ; 1 + 153a: a1 f0 breq .+40 ; 0x1564 <__addsf3x+0x96> + 153c: ff 0f add r31, r31 + 153e: bb 1f adc r27, r27 + 1540: 66 1f adc r22, r22 + 1542: 77 1f adc r23, r23 + 1544: 88 1f adc r24, r24 + 1546: c2 f7 brpl .-16 ; 0x1538 <__addsf3x+0x6a> + 1548: 0e c0 rjmp .+28 ; 0x1566 <__addsf3x+0x98> + 154a: ba 0f add r27, r26 + 154c: 62 1f adc r22, r18 + 154e: 73 1f adc r23, r19 + 1550: 84 1f adc r24, r20 + 1552: 48 f4 brcc .+18 ; 0x1566 <__addsf3x+0x98> + 1554: 87 95 ror r24 + 1556: 77 95 ror r23 + 1558: 67 95 ror r22 + 155a: b7 95 ror r27 + 155c: f7 95 ror r31 + 155e: 9e 3f cpi r25, 0xFE ; 254 + 1560: 08 f0 brcs .+2 ; 0x1564 <__addsf3x+0x96> + 1562: b3 cf rjmp .-154 ; 0x14ca <__addsf3+0x1e> + 1564: 93 95 inc r25 + 1566: 88 0f add r24, r24 + 1568: 08 f0 brcs .+2 ; 0x156c <__addsf3x+0x9e> + 156a: 99 27 eor r25, r25 + 156c: ee 0f add r30, r30 + 156e: 97 95 ror r25 + 1570: 87 95 ror r24 + 1572: 08 95 ret + +00001574 <__cmpsf2>: + 1574: d4 d0 rcall .+424 ; 0x171e <__fp_cmp> + 1576: 08 f4 brcc .+2 ; 0x157a <__cmpsf2+0x6> + 1578: 81 e0 ldi r24, 0x01 ; 1 + 157a: 08 95 ret + +0000157c <__divsf3>: + 157c: 0c d0 rcall .+24 ; 0x1596 <__divsf3x> + 157e: 0a c1 rjmp .+532 ; 0x1794 <__fp_round> + 1580: 02 d1 rcall .+516 ; 0x1786 <__fp_pscB> + 1582: 40 f0 brcs .+16 ; 0x1594 <__divsf3+0x18> + 1584: f9 d0 rcall .+498 ; 0x1778 <__fp_pscA> + 1586: 30 f0 brcs .+12 ; 0x1594 <__divsf3+0x18> + 1588: 21 f4 brne .+8 ; 0x1592 <__divsf3+0x16> + 158a: 5f 3f cpi r21, 0xFF ; 255 + 158c: 19 f0 breq .+6 ; 0x1594 <__divsf3+0x18> + 158e: eb c0 rjmp .+470 ; 0x1766 <__fp_inf> + 1590: 51 11 cpse r21, r1 + 1592: 34 c1 rjmp .+616 ; 0x17fc <__fp_szero> + 1594: ee c0 rjmp .+476 ; 0x1772 <__fp_nan> + +00001596 <__divsf3x>: + 1596: 0f d1 rcall .+542 ; 0x17b6 <__fp_split3> + 1598: 98 f3 brcs .-26 ; 0x1580 <__divsf3+0x4> + +0000159a <__divsf3_pse>: + 159a: 99 23 and r25, r25 + 159c: c9 f3 breq .-14 ; 0x1590 <__divsf3+0x14> + 159e: 55 23 and r21, r21 + 15a0: b1 f3 breq .-20 ; 0x158e <__divsf3+0x12> + 15a2: 95 1b sub r25, r21 + 15a4: 55 0b sbc r21, r21 + 15a6: bb 27 eor r27, r27 + 15a8: aa 27 eor r26, r26 + 15aa: 62 17 cp r22, r18 + 15ac: 73 07 cpc r23, r19 + 15ae: 84 07 cpc r24, r20 + 15b0: 38 f0 brcs .+14 ; 0x15c0 <__divsf3_pse+0x26> + 15b2: 9f 5f subi r25, 0xFF ; 255 + 15b4: 5f 4f sbci r21, 0xFF ; 255 + 15b6: 22 0f add r18, r18 + 15b8: 33 1f adc r19, r19 + 15ba: 44 1f adc r20, r20 + 15bc: aa 1f adc r26, r26 + 15be: a9 f3 breq .-22 ; 0x15aa <__divsf3_pse+0x10> + 15c0: 33 d0 rcall .+102 ; 0x1628 <__divsf3_pse+0x8e> + 15c2: 0e 2e mov r0, r30 + 15c4: 3a f0 brmi .+14 ; 0x15d4 <__divsf3_pse+0x3a> + 15c6: e0 e8 ldi r30, 0x80 ; 128 + 15c8: 30 d0 rcall .+96 ; 0x162a <__divsf3_pse+0x90> + 15ca: 91 50 subi r25, 0x01 ; 1 + 15cc: 50 40 sbci r21, 0x00 ; 0 + 15ce: e6 95 lsr r30 + 15d0: 00 1c adc r0, r0 + 15d2: ca f7 brpl .-14 ; 0x15c6 <__divsf3_pse+0x2c> + 15d4: 29 d0 rcall .+82 ; 0x1628 <__divsf3_pse+0x8e> + 15d6: fe 2f mov r31, r30 + 15d8: 27 d0 rcall .+78 ; 0x1628 <__divsf3_pse+0x8e> + 15da: 66 0f add r22, r22 + 15dc: 77 1f adc r23, r23 + 15de: 88 1f adc r24, r24 + 15e0: bb 1f adc r27, r27 + 15e2: 26 17 cp r18, r22 + 15e4: 37 07 cpc r19, r23 + 15e6: 48 07 cpc r20, r24 + 15e8: ab 07 cpc r26, r27 + 15ea: b0 e8 ldi r27, 0x80 ; 128 + 15ec: 09 f0 breq .+2 ; 0x15f0 <__divsf3_pse+0x56> + 15ee: bb 0b sbc r27, r27 + 15f0: 80 2d mov r24, r0 + 15f2: bf 01 movw r22, r30 + 15f4: ff 27 eor r31, r31 + 15f6: 93 58 subi r25, 0x83 ; 131 + 15f8: 5f 4f sbci r21, 0xFF ; 255 + 15fa: 2a f0 brmi .+10 ; 0x1606 <__divsf3_pse+0x6c> + 15fc: 9e 3f cpi r25, 0xFE ; 254 + 15fe: 51 05 cpc r21, r1 + 1600: 68 f0 brcs .+26 ; 0x161c <__divsf3_pse+0x82> + 1602: b1 c0 rjmp .+354 ; 0x1766 <__fp_inf> + 1604: fb c0 rjmp .+502 ; 0x17fc <__fp_szero> + 1606: 5f 3f cpi r21, 0xFF ; 255 + 1608: ec f3 brlt .-6 ; 0x1604 <__divsf3_pse+0x6a> + 160a: 98 3e cpi r25, 0xE8 ; 232 + 160c: dc f3 brlt .-10 ; 0x1604 <__divsf3_pse+0x6a> + 160e: 86 95 lsr r24 + 1610: 77 95 ror r23 + 1612: 67 95 ror r22 + 1614: b7 95 ror r27 + 1616: f7 95 ror r31 + 1618: 9f 5f subi r25, 0xFF ; 255 + 161a: c9 f7 brne .-14 ; 0x160e <__divsf3_pse+0x74> + 161c: 88 0f add r24, r24 + 161e: 91 1d adc r25, r1 + 1620: 96 95 lsr r25 + 1622: 87 95 ror r24 + 1624: 97 f9 bld r25, 7 + 1626: 08 95 ret + 1628: e1 e0 ldi r30, 0x01 ; 1 + 162a: 66 0f add r22, r22 + 162c: 77 1f adc r23, r23 + 162e: 88 1f adc r24, r24 + 1630: bb 1f adc r27, r27 + 1632: 62 17 cp r22, r18 + 1634: 73 07 cpc r23, r19 + 1636: 84 07 cpc r24, r20 + 1638: ba 07 cpc r27, r26 + 163a: 20 f0 brcs .+8 ; 0x1644 <__divsf3_pse+0xaa> + 163c: 62 1b sub r22, r18 + 163e: 73 0b sbc r23, r19 + 1640: 84 0b sbc r24, r20 + 1642: ba 0b sbc r27, r26 + 1644: ee 1f adc r30, r30 + 1646: 88 f7 brcc .-30 ; 0x162a <__divsf3_pse+0x90> + 1648: e0 95 com r30 + 164a: 08 95 ret + +0000164c <__fixunssfsi>: + 164c: bc d0 rcall .+376 ; 0x17c6 <__fp_splitA> + 164e: 88 f0 brcs .+34 ; 0x1672 <__fixunssfsi+0x26> + 1650: 9f 57 subi r25, 0x7F ; 127 + 1652: 90 f0 brcs .+36 ; 0x1678 <__fixunssfsi+0x2c> + 1654: b9 2f mov r27, r25 + 1656: 99 27 eor r25, r25 + 1658: b7 51 subi r27, 0x17 ; 23 + 165a: a0 f0 brcs .+40 ; 0x1684 <__fixunssfsi+0x38> + 165c: d1 f0 breq .+52 ; 0x1692 <__fixunssfsi+0x46> + 165e: 66 0f add r22, r22 + 1660: 77 1f adc r23, r23 + 1662: 88 1f adc r24, r24 + 1664: 99 1f adc r25, r25 + 1666: 1a f0 brmi .+6 ; 0x166e <__fixunssfsi+0x22> + 1668: ba 95 dec r27 + 166a: c9 f7 brne .-14 ; 0x165e <__fixunssfsi+0x12> + 166c: 12 c0 rjmp .+36 ; 0x1692 <__fixunssfsi+0x46> + 166e: b1 30 cpi r27, 0x01 ; 1 + 1670: 81 f0 breq .+32 ; 0x1692 <__fixunssfsi+0x46> + 1672: c3 d0 rcall .+390 ; 0x17fa <__fp_zero> + 1674: b1 e0 ldi r27, 0x01 ; 1 + 1676: 08 95 ret + 1678: c0 c0 rjmp .+384 ; 0x17fa <__fp_zero> + 167a: 67 2f mov r22, r23 + 167c: 78 2f mov r23, r24 + 167e: 88 27 eor r24, r24 + 1680: b8 5f subi r27, 0xF8 ; 248 + 1682: 39 f0 breq .+14 ; 0x1692 <__fixunssfsi+0x46> + 1684: b9 3f cpi r27, 0xF9 ; 249 + 1686: cc f3 brlt .-14 ; 0x167a <__fixunssfsi+0x2e> + 1688: 86 95 lsr r24 + 168a: 77 95 ror r23 + 168c: 67 95 ror r22 + 168e: b3 95 inc r27 + 1690: d9 f7 brne .-10 ; 0x1688 <__fixunssfsi+0x3c> + 1692: 3e f4 brtc .+14 ; 0x16a2 <__fixunssfsi+0x56> + 1694: 90 95 com r25 + 1696: 80 95 com r24 + 1698: 70 95 com r23 + 169a: 61 95 neg r22 + 169c: 7f 4f sbci r23, 0xFF ; 255 + 169e: 8f 4f sbci r24, 0xFF ; 255 + 16a0: 9f 4f sbci r25, 0xFF ; 255 + 16a2: 08 95 ret + +000016a4 <__floatunsisf>: + 16a4: e8 94 clt + 16a6: 09 c0 rjmp .+18 ; 0x16ba <__floatsisf+0x12> + +000016a8 <__floatsisf>: + 16a8: 97 fb bst r25, 7 + 16aa: 3e f4 brtc .+14 ; 0x16ba <__floatsisf+0x12> + 16ac: 90 95 com r25 + 16ae: 80 95 com r24 + 16b0: 70 95 com r23 + 16b2: 61 95 neg r22 + 16b4: 7f 4f sbci r23, 0xFF ; 255 + 16b6: 8f 4f sbci r24, 0xFF ; 255 + 16b8: 9f 4f sbci r25, 0xFF ; 255 + 16ba: 99 23 and r25, r25 + 16bc: a9 f0 breq .+42 ; 0x16e8 <__floatsisf+0x40> + 16be: f9 2f mov r31, r25 + 16c0: 96 e9 ldi r25, 0x96 ; 150 + 16c2: bb 27 eor r27, r27 + 16c4: 93 95 inc r25 + 16c6: f6 95 lsr r31 + 16c8: 87 95 ror r24 + 16ca: 77 95 ror r23 + 16cc: 67 95 ror r22 + 16ce: b7 95 ror r27 + 16d0: f1 11 cpse r31, r1 + 16d2: f8 cf rjmp .-16 ; 0x16c4 <__floatsisf+0x1c> + 16d4: fa f4 brpl .+62 ; 0x1714 <__floatsisf+0x6c> + 16d6: bb 0f add r27, r27 + 16d8: 11 f4 brne .+4 ; 0x16de <__floatsisf+0x36> + 16da: 60 ff sbrs r22, 0 + 16dc: 1b c0 rjmp .+54 ; 0x1714 <__floatsisf+0x6c> + 16de: 6f 5f subi r22, 0xFF ; 255 + 16e0: 7f 4f sbci r23, 0xFF ; 255 + 16e2: 8f 4f sbci r24, 0xFF ; 255 + 16e4: 9f 4f sbci r25, 0xFF ; 255 + 16e6: 16 c0 rjmp .+44 ; 0x1714 <__floatsisf+0x6c> + 16e8: 88 23 and r24, r24 + 16ea: 11 f0 breq .+4 ; 0x16f0 <__floatsisf+0x48> + 16ec: 96 e9 ldi r25, 0x96 ; 150 + 16ee: 11 c0 rjmp .+34 ; 0x1712 <__floatsisf+0x6a> + 16f0: 77 23 and r23, r23 + 16f2: 21 f0 breq .+8 ; 0x16fc <__floatsisf+0x54> + 16f4: 9e e8 ldi r25, 0x8E ; 142 + 16f6: 87 2f mov r24, r23 + 16f8: 76 2f mov r23, r22 + 16fa: 05 c0 rjmp .+10 ; 0x1706 <__floatsisf+0x5e> + 16fc: 66 23 and r22, r22 + 16fe: 71 f0 breq .+28 ; 0x171c <__floatsisf+0x74> + 1700: 96 e8 ldi r25, 0x86 ; 134 + 1702: 86 2f mov r24, r22 + 1704: 70 e0 ldi r23, 0x00 ; 0 + 1706: 60 e0 ldi r22, 0x00 ; 0 + 1708: 2a f0 brmi .+10 ; 0x1714 <__floatsisf+0x6c> + 170a: 9a 95 dec r25 + 170c: 66 0f add r22, r22 + 170e: 77 1f adc r23, r23 + 1710: 88 1f adc r24, r24 + 1712: da f7 brpl .-10 ; 0x170a <__floatsisf+0x62> + 1714: 88 0f add r24, r24 + 1716: 96 95 lsr r25 + 1718: 87 95 ror r24 + 171a: 97 f9 bld r25, 7 + 171c: 08 95 ret + +0000171e <__fp_cmp>: + 171e: 99 0f add r25, r25 + 1720: 00 08 sbc r0, r0 + 1722: 55 0f add r21, r21 + 1724: aa 0b sbc r26, r26 + 1726: e0 e8 ldi r30, 0x80 ; 128 + 1728: fe ef ldi r31, 0xFE ; 254 + 172a: 16 16 cp r1, r22 + 172c: 17 06 cpc r1, r23 + 172e: e8 07 cpc r30, r24 + 1730: f9 07 cpc r31, r25 + 1732: c0 f0 brcs .+48 ; 0x1764 <__fp_cmp+0x46> + 1734: 12 16 cp r1, r18 + 1736: 13 06 cpc r1, r19 + 1738: e4 07 cpc r30, r20 + 173a: f5 07 cpc r31, r21 + 173c: 98 f0 brcs .+38 ; 0x1764 <__fp_cmp+0x46> + 173e: 62 1b sub r22, r18 + 1740: 73 0b sbc r23, r19 + 1742: 84 0b sbc r24, r20 + 1744: 95 0b sbc r25, r21 + 1746: 39 f4 brne .+14 ; 0x1756 <__fp_cmp+0x38> + 1748: 0a 26 eor r0, r26 + 174a: 61 f0 breq .+24 ; 0x1764 <__fp_cmp+0x46> + 174c: 23 2b or r18, r19 + 174e: 24 2b or r18, r20 + 1750: 25 2b or r18, r21 + 1752: 21 f4 brne .+8 ; 0x175c <__fp_cmp+0x3e> + 1754: 08 95 ret + 1756: 0a 26 eor r0, r26 + 1758: 09 f4 brne .+2 ; 0x175c <__fp_cmp+0x3e> + 175a: a1 40 sbci r26, 0x01 ; 1 + 175c: a6 95 lsr r26 + 175e: 8f ef ldi r24, 0xFF ; 255 + 1760: 81 1d adc r24, r1 + 1762: 81 1d adc r24, r1 1764: 08 95 ret -00001766 <__fp_zero>: - 1766: e8 94 clt - -00001768 <__fp_szero>: - 1768: bb 27 eor r27, r27 - 176a: 66 27 eor r22, r22 - 176c: 77 27 eor r23, r23 - 176e: cb 01 movw r24, r22 - 1770: 97 f9 bld r25, 7 - 1772: 08 95 ret - -00001774 <__gesf2>: - 1774: 8a df rcall .-236 ; 0x168a <__fp_cmp> - 1776: 08 f4 brcc .+2 ; 0x177a <__gesf2+0x6> - 1778: 8f ef ldi r24, 0xFF ; 255 - 177a: 08 95 ret - -0000177c <__udivmodhi4>: - 177c: aa 1b sub r26, r26 - 177e: bb 1b sub r27, r27 - 1780: 51 e1 ldi r21, 0x11 ; 17 - 1782: 07 c0 rjmp .+14 ; 0x1792 <__udivmodhi4_ep> - -00001784 <__udivmodhi4_loop>: - 1784: aa 1f adc r26, r26 - 1786: bb 1f adc r27, r27 - 1788: a6 17 cp r26, r22 - 178a: b7 07 cpc r27, r23 - 178c: 10 f0 brcs .+4 ; 0x1792 <__udivmodhi4_ep> - 178e: a6 1b sub r26, r22 - 1790: b7 0b sbc r27, r23 - -00001792 <__udivmodhi4_ep>: - 1792: 88 1f adc r24, r24 - 1794: 99 1f adc r25, r25 - 1796: 5a 95 dec r21 - 1798: a9 f7 brne .-22 ; 0x1784 <__udivmodhi4_loop> - 179a: 80 95 com r24 - 179c: 90 95 com r25 - 179e: bc 01 movw r22, r24 - 17a0: cd 01 movw r24, r26 - 17a2: 08 95 ret - -000017a4 <_exit>: - 17a4: f8 94 cli - -000017a6 <__stop_program>: - 17a6: ff cf rjmp .-2 ; 0x17a6 <__stop_program> +00001766 <__fp_inf>: + 1766: 97 f9 bld r25, 7 + 1768: 9f 67 ori r25, 0x7F ; 127 + 176a: 80 e8 ldi r24, 0x80 ; 128 + 176c: 70 e0 ldi r23, 0x00 ; 0 + 176e: 60 e0 ldi r22, 0x00 ; 0 + 1770: 08 95 ret + +00001772 <__fp_nan>: + 1772: 9f ef ldi r25, 0xFF ; 255 + 1774: 80 ec ldi r24, 0xC0 ; 192 + 1776: 08 95 ret + +00001778 <__fp_pscA>: + 1778: 00 24 eor r0, r0 + 177a: 0a 94 dec r0 + 177c: 16 16 cp r1, r22 + 177e: 17 06 cpc r1, r23 + 1780: 18 06 cpc r1, r24 + 1782: 09 06 cpc r0, r25 + 1784: 08 95 ret + +00001786 <__fp_pscB>: + 1786: 00 24 eor r0, r0 + 1788: 0a 94 dec r0 + 178a: 12 16 cp r1, r18 + 178c: 13 06 cpc r1, r19 + 178e: 14 06 cpc r1, r20 + 1790: 05 06 cpc r0, r21 + 1792: 08 95 ret + +00001794 <__fp_round>: + 1794: 09 2e mov r0, r25 + 1796: 03 94 inc r0 + 1798: 00 0c add r0, r0 + 179a: 11 f4 brne .+4 ; 0x17a0 <__fp_round+0xc> + 179c: 88 23 and r24, r24 + 179e: 52 f0 brmi .+20 ; 0x17b4 <__fp_round+0x20> + 17a0: bb 0f add r27, r27 + 17a2: 40 f4 brcc .+16 ; 0x17b4 <__fp_round+0x20> + 17a4: bf 2b or r27, r31 + 17a6: 11 f4 brne .+4 ; 0x17ac <__fp_round+0x18> + 17a8: 60 ff sbrs r22, 0 + 17aa: 04 c0 rjmp .+8 ; 0x17b4 <__fp_round+0x20> + 17ac: 6f 5f subi r22, 0xFF ; 255 + 17ae: 7f 4f sbci r23, 0xFF ; 255 + 17b0: 8f 4f sbci r24, 0xFF ; 255 + 17b2: 9f 4f sbci r25, 0xFF ; 255 + 17b4: 08 95 ret + +000017b6 <__fp_split3>: + 17b6: 57 fd sbrc r21, 7 + 17b8: 90 58 subi r25, 0x80 ; 128 + 17ba: 44 0f add r20, r20 + 17bc: 55 1f adc r21, r21 + 17be: 59 f0 breq .+22 ; 0x17d6 <__fp_splitA+0x10> + 17c0: 5f 3f cpi r21, 0xFF ; 255 + 17c2: 71 f0 breq .+28 ; 0x17e0 <__fp_splitA+0x1a> + 17c4: 47 95 ror r20 + +000017c6 <__fp_splitA>: + 17c6: 88 0f add r24, r24 + 17c8: 97 fb bst r25, 7 + 17ca: 99 1f adc r25, r25 + 17cc: 61 f0 breq .+24 ; 0x17e6 <__fp_splitA+0x20> + 17ce: 9f 3f cpi r25, 0xFF ; 255 + 17d0: 79 f0 breq .+30 ; 0x17f0 <__fp_splitA+0x2a> + 17d2: 87 95 ror r24 + 17d4: 08 95 ret + 17d6: 12 16 cp r1, r18 + 17d8: 13 06 cpc r1, r19 + 17da: 14 06 cpc r1, r20 + 17dc: 55 1f adc r21, r21 + 17de: f2 cf rjmp .-28 ; 0x17c4 <__fp_split3+0xe> + 17e0: 46 95 lsr r20 + 17e2: f1 df rcall .-30 ; 0x17c6 <__fp_splitA> + 17e4: 08 c0 rjmp .+16 ; 0x17f6 <__fp_splitA+0x30> + 17e6: 16 16 cp r1, r22 + 17e8: 17 06 cpc r1, r23 + 17ea: 18 06 cpc r1, r24 + 17ec: 99 1f adc r25, r25 + 17ee: f1 cf rjmp .-30 ; 0x17d2 <__fp_splitA+0xc> + 17f0: 86 95 lsr r24 + 17f2: 71 05 cpc r23, r1 + 17f4: 61 05 cpc r22, r1 + 17f6: 08 94 sec + 17f8: 08 95 ret + +000017fa <__fp_zero>: + 17fa: e8 94 clt + +000017fc <__fp_szero>: + 17fc: bb 27 eor r27, r27 + 17fe: 66 27 eor r22, r22 + 1800: 77 27 eor r23, r23 + 1802: cb 01 movw r24, r22 + 1804: 97 f9 bld r25, 7 + 1806: 08 95 ret + +00001808 <__gesf2>: + 1808: 8a df rcall .-236 ; 0x171e <__fp_cmp> + 180a: 08 f4 brcc .+2 ; 0x180e <__gesf2+0x6> + 180c: 8f ef ldi r24, 0xFF ; 255 + 180e: 08 95 ret + +00001810 <__udivmodsi4>: + 1810: a1 e2 ldi r26, 0x21 ; 33 + 1812: 1a 2e mov r1, r26 + 1814: aa 1b sub r26, r26 + 1816: bb 1b sub r27, r27 + 1818: fd 01 movw r30, r26 + 181a: 0d c0 rjmp .+26 ; 0x1836 <__udivmodsi4_ep> + +0000181c <__udivmodsi4_loop>: + 181c: aa 1f adc r26, r26 + 181e: bb 1f adc r27, r27 + 1820: ee 1f adc r30, r30 + 1822: ff 1f adc r31, r31 + 1824: a2 17 cp r26, r18 + 1826: b3 07 cpc r27, r19 + 1828: e4 07 cpc r30, r20 + 182a: f5 07 cpc r31, r21 + 182c: 20 f0 brcs .+8 ; 0x1836 <__udivmodsi4_ep> + 182e: a2 1b sub r26, r18 + 1830: b3 0b sbc r27, r19 + 1832: e4 0b sbc r30, r20 + 1834: f5 0b sbc r31, r21 + +00001836 <__udivmodsi4_ep>: + 1836: 66 1f adc r22, r22 + 1838: 77 1f adc r23, r23 + 183a: 88 1f adc r24, r24 + 183c: 99 1f adc r25, r25 + 183e: 1a 94 dec r1 + 1840: 69 f7 brne .-38 ; 0x181c <__udivmodsi4_loop> + 1842: 60 95 com r22 + 1844: 70 95 com r23 + 1846: 80 95 com r24 + 1848: 90 95 com r25 + 184a: 9b 01 movw r18, r22 + 184c: ac 01 movw r20, r24 + 184e: bd 01 movw r22, r26 + 1850: cf 01 movw r24, r30 + 1852: 08 95 ret + +00001854 <_exit>: + 1854: f8 94 cli + +00001856 <__stop_program>: + 1856: ff cf rjmp .-2 ; 0x1856 <__stop_program> diff --git a/firmware/USBtoSerial.map b/firmware/USBtoSerial.map index f2a2d5e..90781a6 100644 --- a/firmware/USBtoSerial.map +++ b/firmware/USBtoSerial.map @@ -77,14 +77,14 @@ Discarded input sections .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o .text 0x0000000000000000 0x0 USBtoSerial.o - .text.touchpad_set_rel_mode_100dpi - 0x0000000000000000 0x2a USBtoSerial.o .text.touchpad_set_rel_mode_200dpi 0x0000000000000000 0x2a USBtoSerial.o - .text.delta_y 0x0000000000000000 0x20 USBtoSerial.o - .text.delta_x 0x0000000000000000 0x20 USBtoSerial.o - .text.my_uitoa - 0x0000000000000000 0xd0 USBtoSerial.o + .text.z_pressure + 0x0000000000000000 0x16 USBtoSerial.o + .text.x_abs 0x0000000000000000 0x3c USBtoSerial.o + .text.y_abs 0x0000000000000000 0x3e USBtoSerial.o + .text.decode_field + 0x0000000000000000 0x8c USBtoSerial.o .text 0x0000000000000000 0x0 Descriptors.o .data 0x0000000000000000 0x0 Descriptors.o .bss 0x0000000000000000 0x0 Descriptors.o @@ -351,10 +351,10 @@ Discarded input sections .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodhi4.o) .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodhi4.o) .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodhi4.o) + .text.libgcc 0x0000000000000000 0x28 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodhi4.o) .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodsi4.o) .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodsi4.o) .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodsi4.o) - .text.libgcc 0x0000000000000000 0x44 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodsi4.o) .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) @@ -539,7 +539,7 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a .rela.plt *(.rela.plt) -.text 0x0000000000000000 0x17a8 +.text 0x0000000000000000 0x1858 *(.vectors) .vectors 0x0000000000000000 0x98 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o 0x0000000000000000 __vectors @@ -661,188 +661,188 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a .text.touchpad_set_abs_mode 0x000000000000047e 0x3c USBtoSerial.o 0x000000000000047e touchpad_set_abs_mode - .text.z_pressure - 0x00000000000004ba 0x16 USBtoSerial.o - 0x00000000000004ba z_pressure - .text.x_abs 0x00000000000004d0 0x3c USBtoSerial.o - 0x00000000000004d0 x_abs - .text.y_abs 0x000000000000050c 0x3e USBtoSerial.o - 0x000000000000050c y_abs - .text.decode_field - 0x000000000000054a 0x86 USBtoSerial.o - 0x000000000000054a decode_field + .text.touchpad_set_rel_mode_100dpi + 0x00000000000004ba 0x28 USBtoSerial.o + 0x00000000000004ba touchpad_set_rel_mode_100dpi + .text.delta_y 0x00000000000004e2 0x20 USBtoSerial.o + 0x00000000000004e2 delta_y + .text.delta_x 0x0000000000000502 0x20 USBtoSerial.o + 0x0000000000000502 delta_x .text.Usb2SerialTask - 0x00000000000005d0 0xb2 USBtoSerial.o - 0x00000000000005d0 Usb2SerialTask + 0x0000000000000522 0xb2 USBtoSerial.o + 0x0000000000000522 Usb2SerialTask .text.SetupHardware - 0x0000000000000682 0x2a USBtoSerial.o - 0x0000000000000682 SetupHardware + 0x00000000000005d4 0x2a USBtoSerial.o + 0x00000000000005d4 SetupHardware .text.EVENT_USB_Device_Connect - 0x00000000000006ac 0x2 USBtoSerial.o - 0x00000000000006ac EVENT_USB_Device_Connect + 0x00000000000005fe 0x2 USBtoSerial.o + 0x00000000000005fe EVENT_USB_Device_Connect .text.EVENT_USB_Device_Disconnect - 0x00000000000006ae 0x2 USBtoSerial.o - 0x00000000000006ae EVENT_USB_Device_Disconnect + 0x0000000000000600 0x2 USBtoSerial.o + 0x0000000000000600 EVENT_USB_Device_Disconnect .text.EVENT_USB_Device_ConfigurationChanged - 0x00000000000006b0 0x6 USBtoSerial.o - 0x00000000000006b0 EVENT_USB_Device_ConfigurationChanged + 0x0000000000000602 0x6 USBtoSerial.o + 0x0000000000000602 EVENT_USB_Device_ConfigurationChanged .text.EVENT_USB_Device_ControlRequest - 0x00000000000006b6 0x6 USBtoSerial.o - 0x00000000000006b6 EVENT_USB_Device_ControlRequest + 0x0000000000000608 0x6 USBtoSerial.o + 0x0000000000000608 EVENT_USB_Device_ControlRequest .text.__vector_23 - 0x00000000000006bc 0x54 USBtoSerial.o - 0x00000000000006bc __vector_23 + 0x000000000000060e 0x54 USBtoSerial.o + 0x000000000000060e __vector_23 .text.EVENT_CDC_Device_LineEncodingChanged - 0x0000000000000710 0xc0 USBtoSerial.o - 0x0000000000000710 EVENT_CDC_Device_LineEncodingChanged + 0x0000000000000662 0xc0 USBtoSerial.o + 0x0000000000000662 EVENT_CDC_Device_LineEncodingChanged .text.uart_putc - 0x00000000000007d0 0x10 USBtoSerial.o - 0x00000000000007d0 uart_putc + 0x0000000000000722 0x10 USBtoSerial.o + 0x0000000000000722 uart_putc .text.uart_puts - 0x00000000000007e0 0x26 USBtoSerial.o - 0x00000000000007e0 uart_puts - .text.main 0x0000000000000806 0x8e USBtoSerial.o - 0x0000000000000806 main + 0x0000000000000732 0x26 USBtoSerial.o + 0x0000000000000732 uart_puts + .text.my_uitoa + 0x0000000000000758 0xd0 USBtoSerial.o + 0x0000000000000758 my_uitoa + .text.main 0x0000000000000828 0x100 USBtoSerial.o + 0x0000000000000828 main .text.CALLBACK_USB_GetDescriptor - 0x0000000000000894 0x5a Descriptors.o - 0x0000000000000894 CALLBACK_USB_GetDescriptor + 0x0000000000000928 0x5a Descriptors.o + 0x0000000000000928 CALLBACK_USB_GetDescriptor .text.Endpoint_Write_Control_Stream_LE - 0x00000000000008ee 0xb4 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - 0x00000000000008ee Endpoint_Write_Control_Stream_LE + 0x0000000000000982 0xb4 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000982 Endpoint_Write_Control_Stream_LE .text.Endpoint_Write_Control_PStream_LE - 0x00000000000009a2 0xb6 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - 0x00000000000009a2 Endpoint_Write_Control_PStream_LE + 0x0000000000000a36 0xb6 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000a36 Endpoint_Write_Control_PStream_LE .text.Endpoint_ConfigureEndpoint_Prv - 0x0000000000000a58 0x6e ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x0000000000000a58 Endpoint_ConfigureEndpoint_Prv + 0x0000000000000aec 0x6e ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x0000000000000aec Endpoint_ConfigureEndpoint_Prv .text.Endpoint_ConfigureEndpointTable - 0x0000000000000ac6 0x88 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x0000000000000ac6 Endpoint_ConfigureEndpointTable + 0x0000000000000b5a 0x88 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x0000000000000b5a Endpoint_ConfigureEndpointTable .text.Endpoint_ClearStatusStage - 0x0000000000000b4e 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x0000000000000b4e Endpoint_ClearStatusStage + 0x0000000000000be2 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x0000000000000be2 Endpoint_ClearStatusStage .text.Endpoint_WaitUntilReady - 0x0000000000000b8c 0x66 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x0000000000000b8c Endpoint_WaitUntilReady + 0x0000000000000c20 0x66 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x0000000000000c20 Endpoint_WaitUntilReady .text.USB_ResetInterface - 0x0000000000000bf2 0x70 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - 0x0000000000000bf2 USB_ResetInterface + 0x0000000000000c86 0x70 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + 0x0000000000000c86 USB_ResetInterface .text.USB_Init - 0x0000000000000c62 0x12 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - 0x0000000000000c62 USB_Init + 0x0000000000000cf6 0x12 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + 0x0000000000000cf6 USB_Init .text.USB_INT_DisableAllInterrupts - 0x0000000000000c74 0x6 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x0000000000000c74 USB_INT_DisableAllInterrupts + 0x0000000000000d08 0x6 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x0000000000000d08 USB_INT_DisableAllInterrupts .text.USB_INT_ClearAllInterrupts - 0x0000000000000c7a 0x6 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x0000000000000c7a USB_INT_ClearAllInterrupts + 0x0000000000000d0e 0x6 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x0000000000000d0e USB_INT_ClearAllInterrupts .text.__vector_11 - 0x0000000000000c80 0x148 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x0000000000000c80 __vector_11 + 0x0000000000000d14 0x148 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x0000000000000d14 __vector_11 .text.__vector_12 - 0x0000000000000dc8 0x76 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x0000000000000dc8 __vector_12 + 0x0000000000000e5c 0x76 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x0000000000000e5c __vector_12 .text.USB_Device_ProcessControlRequest - 0x0000000000000e3e 0x2c2 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - 0x0000000000000e3e USB_Device_ProcessControlRequest + 0x0000000000000ed2 0x2c2 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + 0x0000000000000ed2 USB_Device_ProcessControlRequest .text.USB_Event_Stub - 0x0000000000001100 0x2 ../../LUFA/Drivers/USB/Core/Events.o - 0x0000000000001100 EVENT_USB_Device_WakeUp - 0x0000000000001100 USB_Event_Stub - 0x0000000000001100 EVENT_USB_Device_Suspend - 0x0000000000001100 EVENT_USB_Device_StartOfFrame - 0x0000000000001100 EVENT_USB_Device_Reset + 0x0000000000001194 0x2 ../../LUFA/Drivers/USB/Core/Events.o + 0x0000000000001194 EVENT_USB_Device_WakeUp + 0x0000000000001194 USB_Event_Stub + 0x0000000000001194 EVENT_USB_Device_Suspend + 0x0000000000001194 EVENT_USB_Device_StartOfFrame + 0x0000000000001194 EVENT_USB_Device_Reset .text.USB_USBTask - 0x0000000000001102 0x36 ../../LUFA/Drivers/USB/Core/USBTask.o - 0x0000000000001102 USB_USBTask + 0x0000000000001196 0x36 ../../LUFA/Drivers/USB/Core/USBTask.o + 0x0000000000001196 USB_USBTask .text.CDC_Device_ProcessControlRequest - 0x0000000000001138 0x158 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x0000000000001138 CDC_Device_ProcessControlRequest + 0x00000000000011cc 0x158 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x00000000000011cc CDC_Device_ProcessControlRequest .text.CDC_Device_ConfigureEndpoints - 0x0000000000001290 0x48 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x0000000000001290 CDC_Device_ConfigureEndpoints + 0x0000000000001324 0x48 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x0000000000001324 CDC_Device_ConfigureEndpoints .text.CDC_Device_SendByte - 0x00000000000012d8 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x00000000000012d8 CDC_Device_SendByte + 0x000000000000136c 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x000000000000136c CDC_Device_SendByte .text.CDC_Device_Flush - 0x0000000000001332 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x0000000000001332 CDC_Device_Flush + 0x00000000000013c6 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x00000000000013c6 CDC_Device_Flush .text.CDC_Device_USBTask - 0x000000000000138c 0x2e ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x000000000000138c CDC_Device_USBTask + 0x0000000000001420 0x2e ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x0000000000001420 CDC_Device_USBTask .text.CDC_Device_ReceiveByte - 0x00000000000013ba 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x00000000000013ba CDC_Device_ReceiveByte + 0x000000000000144e 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x000000000000144e CDC_Device_ReceiveByte .text.CDC_Device_Event_Stub - 0x0000000000001414 0x2 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x0000000000001414 EVENT_CDC_Device_ControLineStateChanged - 0x0000000000001414 EVENT_CDC_Device_BreakSent - 0x0000000000001414 CDC_Device_Event_Stub + 0x00000000000014a8 0x2 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x00000000000014a8 EVENT_CDC_Device_ControLineStateChanged + 0x00000000000014a8 EVENT_CDC_Device_BreakSent + 0x00000000000014a8 CDC_Device_Event_Stub .text.avr-libc.fplib - 0x0000000000001416 0xa /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3.o) - 0x0000000000001416 __subsf3 - 0x0000000000001418 __addsf3 + 0x00000000000014aa 0xa /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3.o) + 0x00000000000014aa __subsf3 + 0x00000000000014ac __addsf3 .text.avr-libc.fplib - 0x0000000000001420 0xc0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) - 0x000000000000143a __addsf3x + 0x00000000000014b4 0xc0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) + 0x00000000000014ce __addsf3x .text.avr-libc.fplib - 0x00000000000014e0 0x8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(cmpsf2.o) - 0x00000000000014e0 __lesf2 - 0x00000000000014e0 __nesf2 - 0x00000000000014e0 __eqsf2 - 0x00000000000014e0 __cmpsf2 - 0x00000000000014e0 __ltsf2 + 0x0000000000001574 0x8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(cmpsf2.o) + 0x0000000000001574 __lesf2 + 0x0000000000001574 __nesf2 + 0x0000000000001574 __eqsf2 + 0x0000000000001574 __cmpsf2 + 0x0000000000001574 __ltsf2 .text.avr-libc.fplib - 0x00000000000014e8 0x4 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3.o) - 0x00000000000014e8 __divsf3 + 0x000000000000157c 0x4 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3.o) + 0x000000000000157c __divsf3 .text.avr-libc.fplib - 0x00000000000014ec 0xcc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) - 0x0000000000001502 __divsf3x - 0x0000000000001506 __divsf3_pse + 0x0000000000001580 0xcc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) + 0x0000000000001596 __divsf3x + 0x000000000000159a __divsf3_pse .text.avr-libc.fplib - 0x00000000000015b8 0x58 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fixunssfsi.o) - 0x00000000000015b8 __fixunssfsi + 0x000000000000164c 0x58 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fixunssfsi.o) + 0x000000000000164c __fixunssfsi .text.avr-libc.fplib - 0x0000000000001610 0x7a /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(floatsisf.o) - 0x0000000000001610 __floatunsisf - 0x0000000000001614 __floatsisf + 0x00000000000016a4 0x7a /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(floatsisf.o) + 0x00000000000016a4 __floatunsisf + 0x00000000000016a8 __floatsisf .text.avr-libc.fplib - 0x000000000000168a 0x48 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_cmp.o) - 0x000000000000168a __fp_cmp + 0x000000000000171e 0x48 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_cmp.o) + 0x000000000000171e __fp_cmp .text.avr-libc.fplib - 0x00000000000016d2 0xc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_inf.o) - 0x00000000000016d2 __fp_inf + 0x0000000000001766 0xc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_inf.o) + 0x0000000000001766 __fp_inf .text.avr-libc.fplib - 0x00000000000016de 0x6 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_nan.o) - 0x00000000000016de __fp_nan + 0x0000000000001772 0x6 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_nan.o) + 0x0000000000001772 __fp_nan .text.avr-libc.fplib - 0x00000000000016e4 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscA.o) - 0x00000000000016e4 __fp_pscA + 0x0000000000001778 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscA.o) + 0x0000000000001778 __fp_pscA .text.avr-libc.fplib - 0x00000000000016f2 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscB.o) - 0x00000000000016f2 __fp_pscB + 0x0000000000001786 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscB.o) + 0x0000000000001786 __fp_pscB .text.avr-libc.fplib - 0x0000000000001700 0x22 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_round.o) - 0x0000000000001700 __fp_round + 0x0000000000001794 0x22 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_round.o) + 0x0000000000001794 __fp_round .text.avr-libc.fplib - 0x0000000000001722 0x44 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_split3.o) - 0x0000000000001722 __fp_split3 - 0x0000000000001732 __fp_splitA + 0x00000000000017b6 0x44 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_split3.o) + 0x00000000000017b6 __fp_split3 + 0x00000000000017c6 __fp_splitA .text.avr-libc.fplib - 0x0000000000001766 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_zero.o) - 0x0000000000001766 __fp_zero - 0x0000000000001768 __fp_szero + 0x00000000000017fa 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_zero.o) + 0x00000000000017fa __fp_zero + 0x00000000000017fc __fp_szero .text.avr-libc.fplib - 0x0000000000001774 0x8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(gesf2.o) - 0x0000000000001774 __gtsf2 - 0x0000000000001774 __gesf2 - .text.libgcc 0x000000000000177c 0x28 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodhi4.o) - 0x000000000000177c __udivmodhi4 - 0x00000000000017a4 . = ALIGN (0x2) + 0x0000000000001808 0x8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(gesf2.o) + 0x0000000000001808 __gtsf2 + 0x0000000000001808 __gesf2 + .text.libgcc 0x0000000000001810 0x44 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodsi4.o) + 0x0000000000001810 __udivmodsi4 + 0x0000000000001854 . = ALIGN (0x2) *(.fini9) - .fini9 0x00000000000017a4 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) - 0x00000000000017a4 exit - 0x00000000000017a4 _exit + .fini9 0x0000000000001854 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) + 0x0000000000001854 exit + 0x0000000000001854 _exit *(.fini9) *(.fini8) *(.fini8) @@ -861,51 +861,50 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a *(.fini1) *(.fini1) *(.fini0) - .fini0 0x00000000000017a4 0x4 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) + .fini0 0x0000000000001854 0x4 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) *(.fini0) - 0x00000000000017a8 _etext = . + 0x0000000000001858 _etext = . -.data 0x0000000000800100 0x48 load address 0x00000000000017a8 +.data 0x0000000000800100 0x62 load address 0x0000000000001858 0x0000000000800100 PROVIDE (__data_start, .) *(.data) - .data 0x0000000000800100 0x47 USBtoSerial.o - 0x000000000080012a VirtualSerial_CDC_Interface + .data 0x0000000000800100 0x62 USBtoSerial.o + 0x0000000000800145 VirtualSerial_CDC_Interface *(.data*) *(.rodata) *(.rodata*) *(.gnu.linkonce.d*) - 0x0000000000800148 . = ALIGN (0x2) - *fill* 0x0000000000800147 0x1 00 - 0x0000000000800148 _edata = . - 0x0000000000800148 PROVIDE (__data_end, .) + 0x0000000000800162 . = ALIGN (0x2) + 0x0000000000800162 _edata = . + 0x0000000000800162 PROVIDE (__data_end, .) -.bss 0x0000000000800148 0x134 - 0x0000000000800148 PROVIDE (__bss_start, .) +.bss 0x0000000000800162 0x134 + 0x0000000000800162 PROVIDE (__bss_start, .) *(.bss) - .bss 0x0000000000800148 0x11d USBtoSerial.o + .bss 0x0000000000800162 0x11d USBtoSerial.o *(.bss*) *(COMMON) - COMMON 0x0000000000800265 0xb USBtoSerial.o - 0x0000000000800265 adb_werte - 0x000000000080026e t0ovfcount - 0x000000000080026f adb_data_length - COMMON 0x0000000000800270 0x3 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - 0x0000000000800270 USB_Device_ConfigurationNumber - 0x0000000000800271 USB_Device_CurrentlySelfPowered - 0x0000000000800272 USB_Device_RemoteWakeupEnabled - COMMON 0x0000000000800273 0x9 ../../LUFA/Drivers/USB/Core/USBTask.o - 0x0000000000800273 USB_IsInitialized - 0x0000000000800274 USB_ControlRequest - 0x000000000080027c PROVIDE (__bss_end, .) - 0x00000000000017a8 __data_load_start = LOADADDR (.data) - 0x00000000000017f0 __data_load_end = (__data_load_start + SIZEOF (.data)) - -.noinit 0x000000000080027c 0x0 - 0x000000000080027c PROVIDE (__noinit_start, .) + COMMON 0x000000000080027f 0xb USBtoSerial.o + 0x000000000080027f adb_werte + 0x0000000000800288 t0ovfcount + 0x0000000000800289 adb_data_length + COMMON 0x000000000080028a 0x3 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + 0x000000000080028a USB_Device_ConfigurationNumber + 0x000000000080028b USB_Device_CurrentlySelfPowered + 0x000000000080028c USB_Device_RemoteWakeupEnabled + COMMON 0x000000000080028d 0x9 ../../LUFA/Drivers/USB/Core/USBTask.o + 0x000000000080028d USB_IsInitialized + 0x000000000080028e USB_ControlRequest + 0x0000000000800296 PROVIDE (__bss_end, .) + 0x0000000000001858 __data_load_start = LOADADDR (.data) + 0x00000000000018ba __data_load_end = (__data_load_start + SIZEOF (.data)) + +.noinit 0x0000000000800296 0x0 + 0x0000000000800296 PROVIDE (__noinit_start, .) *(.noinit*) - 0x000000000080027c PROVIDE (__noinit_end, .) - 0x000000000080027c _end = . - 0x000000000080027c PROVIDE (__heap_start, .) + 0x0000000000800296 PROVIDE (__noinit_end, .) + 0x0000000000800296 _end = . + 0x0000000000800296 PROVIDE (__heap_start, .) .eeprom 0x0000000000810000 0x0 *(.eeprom*) @@ -1081,108 +1080,108 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a .debug_pubnames 0x0000000000000d41 0xd0 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o -.debug_info 0x0000000000000000 0x8d35 +.debug_info 0x0000000000000000 0x8d6f *(.debug_info) - .debug_info 0x0000000000000000 0xf77 USBtoSerial.o - .debug_info 0x0000000000000f77 0x77d Descriptors.o - .debug_info 0x00000000000016f4 0x6f9 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_info 0x0000000000001ded 0xd8 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_info 0x0000000000001ec5 0x154c ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_info 0x0000000000003411 0x603 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_info 0x0000000000003a14 0x6c ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o - .debug_info 0x0000000000003a80 0x6c ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o - .debug_info 0x0000000000003aec 0x6c ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o - .debug_info 0x0000000000003b58 0x412 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_info 0x0000000000003f6a 0x662 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_info 0x00000000000045cc 0x38c ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_info 0x0000000000004958 0x973 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_info 0x00000000000052cb 0x85 ../../LUFA/Drivers/USB/Core/Events.o - .debug_info 0x0000000000005350 0x6c ../../LUFA/Drivers/USB/Core/HostStandardReq.o - .debug_info 0x00000000000053bc 0x245 ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_info 0x0000000000005601 0x56c ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_info 0x0000000000005b6d 0xc3b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_info 0x00000000000067a8 0x67a ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_info 0x0000000000006e22 0x7ca ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_info 0x00000000000075ec 0x4c1 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_info 0x0000000000007aad 0xebc ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .debug_info 0x0000000000008969 0x6c ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o - .debug_info 0x00000000000089d5 0x6c ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o - .debug_info 0x0000000000008a41 0x6c ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o - .debug_info 0x0000000000008aad 0x6c ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o - .debug_info 0x0000000000008b19 0x6c ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o - .debug_info 0x0000000000008b85 0x6c ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o - .debug_info 0x0000000000008bf1 0x6c ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o - .debug_info 0x0000000000008c5d 0x6c ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o - .debug_info 0x0000000000008cc9 0x6c ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o + .debug_info 0x0000000000000000 0xfb1 USBtoSerial.o + .debug_info 0x0000000000000fb1 0x77d Descriptors.o + .debug_info 0x000000000000172e 0x6f9 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_info 0x0000000000001e27 0xd8 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .debug_info 0x0000000000001eff 0x154c ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_info 0x000000000000344b 0x603 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_info 0x0000000000003a4e 0x6c ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o + .debug_info 0x0000000000003aba 0x6c ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o + .debug_info 0x0000000000003b26 0x6c ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o + .debug_info 0x0000000000003b92 0x412 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_info 0x0000000000003fa4 0x662 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_info 0x0000000000004606 0x38c ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_info 0x0000000000004992 0x973 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_info 0x0000000000005305 0x85 ../../LUFA/Drivers/USB/Core/Events.o + .debug_info 0x000000000000538a 0x6c ../../LUFA/Drivers/USB/Core/HostStandardReq.o + .debug_info 0x00000000000053f6 0x245 ../../LUFA/Drivers/USB/Core/USBTask.o + .debug_info 0x000000000000563b 0x56c ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + .debug_info 0x0000000000005ba7 0xc3b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + .debug_info 0x00000000000067e2 0x67a ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + .debug_info 0x0000000000006e5c 0x7ca ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + .debug_info 0x0000000000007626 0x4c1 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + .debug_info 0x0000000000007ae7 0xebc ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + .debug_info 0x00000000000089a3 0x6c ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o + .debug_info 0x0000000000008a0f 0x6c ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o + .debug_info 0x0000000000008a7b 0x6c ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o + .debug_info 0x0000000000008ae7 0x6c ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o + .debug_info 0x0000000000008b53 0x6c ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o + .debug_info 0x0000000000008bbf 0x6c ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o + .debug_info 0x0000000000008c2b 0x6c ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o + .debug_info 0x0000000000008c97 0x6c ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o + .debug_info 0x0000000000008d03 0x6c ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o *(.gnu.linkonce.wi.*) -.debug_abbrev 0x0000000000000000 0x2195 +.debug_abbrev 0x0000000000000000 0x21a4 *(.debug_abbrev) - .debug_abbrev 0x0000000000000000 0x40c USBtoSerial.o - .debug_abbrev 0x000000000000040c 0x153 Descriptors.o - .debug_abbrev 0x000000000000055f 0x1ec ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_abbrev 0x000000000000074b 0x7d ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_abbrev 0x00000000000007c8 0x18b ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_abbrev 0x0000000000000953 0x1ee ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_abbrev 0x0000000000000b41 0x2a ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o - .debug_abbrev 0x0000000000000b6b 0x2a ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o - .debug_abbrev 0x0000000000000b95 0x2a ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o - .debug_abbrev 0x0000000000000bbf 0x14d ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_abbrev 0x0000000000000d0c 0x1e2 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_abbrev 0x0000000000000eee 0x148 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_abbrev 0x0000000000001036 0x20b ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_abbrev 0x0000000000001241 0x41 ../../LUFA/Drivers/USB/Core/Events.o - .debug_abbrev 0x0000000000001282 0x2a ../../LUFA/Drivers/USB/Core/HostStandardReq.o - .debug_abbrev 0x00000000000012ac 0x14b ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_abbrev 0x00000000000013f7 0x160 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_abbrev 0x0000000000001557 0x2ec ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_abbrev 0x0000000000001843 0x1b5 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_abbrev 0x00000000000019f8 0x205 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_abbrev 0x0000000000001bfd 0x16c ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_abbrev 0x0000000000001d69 0x2b2 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .debug_abbrev 0x000000000000201b 0x2a ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o - .debug_abbrev 0x0000000000002045 0x2a ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o - .debug_abbrev 0x000000000000206f 0x2a ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o - .debug_abbrev 0x0000000000002099 0x2a ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o - .debug_abbrev 0x00000000000020c3 0x2a ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o - .debug_abbrev 0x00000000000020ed 0x2a ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o - .debug_abbrev 0x0000000000002117 0x2a ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o - .debug_abbrev 0x0000000000002141 0x2a ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o - .debug_abbrev 0x000000000000216b 0x2a ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o - -.debug_line 0x0000000000000000 0x7586 + .debug_abbrev 0x0000000000000000 0x41b USBtoSerial.o + .debug_abbrev 0x000000000000041b 0x153 Descriptors.o + .debug_abbrev 0x000000000000056e 0x1ec ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_abbrev 0x000000000000075a 0x7d ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .debug_abbrev 0x00000000000007d7 0x18b ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_abbrev 0x0000000000000962 0x1ee ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_abbrev 0x0000000000000b50 0x2a ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o + .debug_abbrev 0x0000000000000b7a 0x2a ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o + .debug_abbrev 0x0000000000000ba4 0x2a ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o + .debug_abbrev 0x0000000000000bce 0x14d ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_abbrev 0x0000000000000d1b 0x1e2 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_abbrev 0x0000000000000efd 0x148 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_abbrev 0x0000000000001045 0x20b ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_abbrev 0x0000000000001250 0x41 ../../LUFA/Drivers/USB/Core/Events.o + .debug_abbrev 0x0000000000001291 0x2a ../../LUFA/Drivers/USB/Core/HostStandardReq.o + .debug_abbrev 0x00000000000012bb 0x14b ../../LUFA/Drivers/USB/Core/USBTask.o + .debug_abbrev 0x0000000000001406 0x160 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + .debug_abbrev 0x0000000000001566 0x2ec ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + .debug_abbrev 0x0000000000001852 0x1b5 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + .debug_abbrev 0x0000000000001a07 0x205 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + .debug_abbrev 0x0000000000001c0c 0x16c ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + .debug_abbrev 0x0000000000001d78 0x2b2 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + .debug_abbrev 0x000000000000202a 0x2a ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o + .debug_abbrev 0x0000000000002054 0x2a ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o + .debug_abbrev 0x000000000000207e 0x2a ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o + .debug_abbrev 0x00000000000020a8 0x2a ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o + .debug_abbrev 0x00000000000020d2 0x2a ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o + .debug_abbrev 0x00000000000020fc 0x2a ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o + .debug_abbrev 0x0000000000002126 0x2a ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o + .debug_abbrev 0x0000000000002150 0x2a ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o + .debug_abbrev 0x000000000000217a 0x2a ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o + +.debug_line 0x0000000000000000 0x7605 *(.debug_line) - .debug_line 0x0000000000000000 0xfa3 USBtoSerial.o - .debug_line 0x0000000000000fa3 0x1d9 Descriptors.o - .debug_line 0x000000000000117c 0x762 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_line 0x00000000000018de 0x15f ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_line 0x0000000000001a3d 0x1a80 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_line 0x00000000000034bd 0x5a1 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_line 0x0000000000003a5e 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o - .debug_line 0x0000000000003a9c 0x3e ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o - .debug_line 0x0000000000003ada 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o - .debug_line 0x0000000000003b18 0x312 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_line 0x0000000000003e2a 0x55a ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_line 0x0000000000004384 0x269 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_line 0x00000000000045ed 0x5a2 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_line 0x0000000000004b8f 0x80 ../../LUFA/Drivers/USB/Core/Events.o - .debug_line 0x0000000000004c0f 0x3e ../../LUFA/Drivers/USB/Core/HostStandardReq.o - .debug_line 0x0000000000004c4d 0x1ae ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_line 0x0000000000004dfb 0x4be ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_line 0x00000000000052b9 0x9c2 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_line 0x0000000000005c7b 0x5c3 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_line 0x000000000000623e 0x5c6 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_line 0x0000000000006804 0x3bc ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_line 0x0000000000006bc0 0x798 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .debug_line 0x0000000000007358 0x3e ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o - .debug_line 0x0000000000007396 0x3e ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o - .debug_line 0x00000000000073d4 0x3e ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o - .debug_line 0x0000000000007412 0x3e ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o - .debug_line 0x0000000000007450 0x3e ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o - .debug_line 0x000000000000748e 0x3e ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o - .debug_line 0x00000000000074cc 0x3e ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o - .debug_line 0x000000000000750a 0x3e ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o - .debug_line 0x0000000000007548 0x3e ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o + .debug_line 0x0000000000000000 0x1022 USBtoSerial.o + .debug_line 0x0000000000001022 0x1d9 Descriptors.o + .debug_line 0x00000000000011fb 0x762 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_line 0x000000000000195d 0x15f ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .debug_line 0x0000000000001abc 0x1a80 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_line 0x000000000000353c 0x5a1 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_line 0x0000000000003add 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o + .debug_line 0x0000000000003b1b 0x3e ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o + .debug_line 0x0000000000003b59 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o + .debug_line 0x0000000000003b97 0x312 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_line 0x0000000000003ea9 0x55a ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_line 0x0000000000004403 0x269 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_line 0x000000000000466c 0x5a2 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_line 0x0000000000004c0e 0x80 ../../LUFA/Drivers/USB/Core/Events.o + .debug_line 0x0000000000004c8e 0x3e ../../LUFA/Drivers/USB/Core/HostStandardReq.o + .debug_line 0x0000000000004ccc 0x1ae ../../LUFA/Drivers/USB/Core/USBTask.o + .debug_line 0x0000000000004e7a 0x4be ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + .debug_line 0x0000000000005338 0x9c2 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + .debug_line 0x0000000000005cfa 0x5c3 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + .debug_line 0x00000000000062bd 0x5c6 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + .debug_line 0x0000000000006883 0x3bc ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + .debug_line 0x0000000000006c3f 0x798 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + .debug_line 0x00000000000073d7 0x3e ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o + .debug_line 0x0000000000007415 0x3e ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o + .debug_line 0x0000000000007453 0x3e ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o + .debug_line 0x0000000000007491 0x3e ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o + .debug_line 0x00000000000074cf 0x3e ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o + .debug_line 0x000000000000750d 0x3e ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o + .debug_line 0x000000000000754b 0x3e ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o + .debug_line 0x0000000000007589 0x3e ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o + .debug_line 0x00000000000075c7 0x3e ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o .debug_frame 0x0000000000000000 0x830 *(.debug_frame) @@ -1270,23 +1269,23 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a .debug_str 0x0000000000003bbf 0x38 ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o 0x100 (size before relaxing) -.debug_loc 0x0000000000000000 0x45ea +.debug_loc 0x0000000000000000 0x4645 *(.debug_loc) - .debug_loc 0x0000000000000000 0x54e USBtoSerial.o - .debug_loc 0x000000000000054e 0xd3 Descriptors.o - .debug_loc 0x0000000000000621 0x88f ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_loc 0x0000000000000eb0 0x1982 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_loc 0x0000000000002832 0x390 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_loc 0x0000000000002bc2 0x190 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_loc 0x0000000000002d52 0x2bc ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_loc 0x000000000000300e 0x22a ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_loc 0x0000000000003238 0x27 ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_loc 0x000000000000325f 0x16d ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_loc 0x00000000000033cc 0x52b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_loc 0x00000000000038f7 0x249 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_loc 0x0000000000003b40 0x152 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_loc 0x0000000000003c92 0x1f6 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_loc 0x0000000000003e88 0x762 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + .debug_loc 0x0000000000000000 0x5a9 USBtoSerial.o + .debug_loc 0x00000000000005a9 0xd3 Descriptors.o + .debug_loc 0x000000000000067c 0x88f ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_loc 0x0000000000000f0b 0x1982 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_loc 0x000000000000288d 0x390 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_loc 0x0000000000002c1d 0x190 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_loc 0x0000000000002dad 0x2bc ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_loc 0x0000000000003069 0x22a ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_loc 0x0000000000003293 0x27 ../../LUFA/Drivers/USB/Core/USBTask.o + .debug_loc 0x00000000000032ba 0x16d ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + .debug_loc 0x0000000000003427 0x52b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + .debug_loc 0x0000000000003952 0x249 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + .debug_loc 0x0000000000003b9b 0x152 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + .debug_loc 0x0000000000003ced 0x1f6 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + .debug_loc 0x0000000000003ee3 0x762 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o .debug_macinfo *(.debug_macinfo) diff --git a/firmware/USBtoSerial.o b/firmware/USBtoSerial.o index 27eec7b..cca561e 100644 Binary files a/firmware/USBtoSerial.o and b/firmware/USBtoSerial.o differ diff --git a/firmware/USBtoSerial.sym b/firmware/USBtoSerial.sym index 87976f4..ce0cc01 100644 --- a/firmware/USBtoSerial.sym +++ b/firmware/USBtoSerial.sym @@ -253,107 +253,107 @@ 0000045c T touchpad_init 0000046c T touchpad_read 0000047e T touchpad_set_abs_mode -000004ba T z_pressure -000004d0 T x_abs +000004ba T touchpad_set_rel_mode_100dpi +000004e2 T delta_y 000004ff W __stack -0000050c T y_abs -0000054a T decode_field -000005d0 T Usb2SerialTask -00000682 T SetupHardware -000006ac T EVENT_USB_Device_Connect -000006ae T EVENT_USB_Device_Disconnect -000006b0 T EVENT_USB_Device_ConfigurationChanged -000006b6 T EVENT_USB_Device_ControlRequest -000006bc T __vector_23 -00000710 T EVENT_CDC_Device_LineEncodingChanged -000007d0 T uart_putc -000007e0 T uart_puts -00000806 T main -00000894 T CALLBACK_USB_GetDescriptor -000008ee T Endpoint_Write_Control_Stream_LE -000009a2 T Endpoint_Write_Control_PStream_LE -00000a58 T Endpoint_ConfigureEndpoint_Prv -00000ac6 T Endpoint_ConfigureEndpointTable -00000b4e T Endpoint_ClearStatusStage -00000b8c T Endpoint_WaitUntilReady -00000bf2 T USB_ResetInterface -00000c62 T USB_Init -00000c74 T USB_INT_DisableAllInterrupts -00000c7a T USB_INT_ClearAllInterrupts -00000c80 T __vector_11 -00000dc8 T __vector_12 -00000e3e T USB_Device_ProcessControlRequest -00001100 W EVENT_USB_Device_Reset -00001100 W EVENT_USB_Device_StartOfFrame -00001100 W EVENT_USB_Device_Suspend -00001100 W EVENT_USB_Device_WakeUp -00001100 T USB_Event_Stub -00001102 T USB_USBTask -00001138 T CDC_Device_ProcessControlRequest -00001290 T CDC_Device_ConfigureEndpoints -000012d8 T CDC_Device_SendByte -00001332 T CDC_Device_Flush -0000138c T CDC_Device_USBTask -000013ba T CDC_Device_ReceiveByte -00001414 T CDC_Device_Event_Stub -00001414 W EVENT_CDC_Device_BreakSent -00001414 W EVENT_CDC_Device_ControLineStateChanged -00001416 T __subsf3 -00001418 T __addsf3 -0000143a T __addsf3x -000014e0 T __cmpsf2 -000014e0 T __eqsf2 -000014e0 T __lesf2 -000014e0 T __ltsf2 -000014e0 T __nesf2 -000014e8 T __divsf3 -00001502 T __divsf3x -00001506 T __divsf3_pse -000015b8 T __fixunssfsi -00001610 T __floatunsisf -00001614 T __floatsisf -0000168a T __fp_cmp -000016d2 T __fp_inf -000016de T __fp_nan -000016e4 T __fp_pscA -000016f2 T __fp_pscB -00001700 T __fp_round -00001722 T __fp_split3 -00001732 T __fp_splitA -00001766 T __fp_zero -00001768 T __fp_szero -00001774 T __gesf2 -00001774 T __gtsf2 -0000177c T __udivmodhi4 -00001784 t __udivmodhi4_loop -00001792 t __udivmodhi4_ep -000017a4 T _exit -000017a4 W exit -000017a6 t __stop_program -000017a8 A __data_load_start -000017a8 T _etext -000017f0 A __data_load_end +00000502 T delta_x +00000522 T Usb2SerialTask +000005d4 T SetupHardware +000005fe T EVENT_USB_Device_Connect +00000600 T EVENT_USB_Device_Disconnect +00000602 T EVENT_USB_Device_ConfigurationChanged +00000608 T EVENT_USB_Device_ControlRequest +0000060e T __vector_23 +00000662 T EVENT_CDC_Device_LineEncodingChanged +00000722 T uart_putc +00000732 T uart_puts +00000758 T my_uitoa +00000828 T main +00000928 T CALLBACK_USB_GetDescriptor +00000982 T Endpoint_Write_Control_Stream_LE +00000a36 T Endpoint_Write_Control_PStream_LE +00000aec T Endpoint_ConfigureEndpoint_Prv +00000b5a T Endpoint_ConfigureEndpointTable +00000be2 T Endpoint_ClearStatusStage +00000c20 T Endpoint_WaitUntilReady +00000c86 T USB_ResetInterface +00000cf6 T USB_Init +00000d08 T USB_INT_DisableAllInterrupts +00000d0e T USB_INT_ClearAllInterrupts +00000d14 T __vector_11 +00000e5c T __vector_12 +00000ed2 T USB_Device_ProcessControlRequest +00001194 W EVENT_USB_Device_Reset +00001194 W EVENT_USB_Device_StartOfFrame +00001194 W EVENT_USB_Device_Suspend +00001194 W EVENT_USB_Device_WakeUp +00001194 T USB_Event_Stub +00001196 T USB_USBTask +000011cc T CDC_Device_ProcessControlRequest +00001324 T CDC_Device_ConfigureEndpoints +0000136c T CDC_Device_SendByte +000013c6 T CDC_Device_Flush +00001420 T CDC_Device_USBTask +0000144e T CDC_Device_ReceiveByte +000014a8 T CDC_Device_Event_Stub +000014a8 W EVENT_CDC_Device_BreakSent +000014a8 W EVENT_CDC_Device_ControLineStateChanged +000014aa T __subsf3 +000014ac T __addsf3 +000014ce T __addsf3x +00001574 T __cmpsf2 +00001574 T __eqsf2 +00001574 T __lesf2 +00001574 T __ltsf2 +00001574 T __nesf2 +0000157c T __divsf3 +00001596 T __divsf3x +0000159a T __divsf3_pse +0000164c T __fixunssfsi +000016a4 T __floatunsisf +000016a8 T __floatsisf +0000171e T __fp_cmp +00001766 T __fp_inf +00001772 T __fp_nan +00001778 T __fp_pscA +00001786 T __fp_pscB +00001794 T __fp_round +000017b6 T __fp_split3 +000017c6 T __fp_splitA +000017fa T __fp_zero +000017fc T __fp_szero +00001808 T __gesf2 +00001808 T __gtsf2 +00001810 T __udivmodsi4 +0000181c t __udivmodsi4_loop +00001836 t __udivmodsi4_ep +00001854 T _exit +00001854 W exit +00001856 t __stop_program +00001858 A __data_load_start +00001858 T _etext +000018ba A __data_load_end 00800100 D __data_start -0080012a D VirtualSerial_CDC_Interface -00800145 d CSWTCH.8 -00800148 b USBtoUSART_Buffer -00800148 B __bss_start -00800148 D __data_end -00800148 D _edata -00800154 b USBtoUSART_Buffer_Data -008001d4 b USARTtoUSB_Buffer -008001e0 b USARTtoUSB_Buffer_Data -00800260 b y_mem.3984 -00800262 b x_mem.3983 -00800264 b last_pressure.3978 -00800265 B adb_werte -0080026e B t0ovfcount -0080026f B adb_data_length -00800270 B USB_Device_ConfigurationNumber -00800271 B USB_Device_CurrentlySelfPowered -00800272 B USB_Device_RemoteWakeupEnabled -00800273 B USB_IsInitialized -00800274 B USB_ControlRequest -0080027c B __bss_end -0080027c N _end +00800145 D VirtualSerial_CDC_Interface +00800160 d CSWTCH.10 +00800162 b USBtoUSART_Buffer +00800162 B __bss_start +00800162 D __data_end +00800162 D _edata +0080016e b USBtoUSART_Buffer_Data +008001ee b USARTtoUSB_Buffer +008001fa b USARTtoUSB_Buffer_Data +0080027a b y_mem.3984 +0080027c b x_mem.3983 +0080027e b last_pressure.3978 +0080027f B adb_werte +00800288 B t0ovfcount +00800289 B adb_data_length +0080028a B USB_Device_ConfigurationNumber +0080028b B USB_Device_CurrentlySelfPowered +0080028c B USB_Device_RemoteWakeupEnabled +0080028d B USB_IsInitialized +0080028e B USB_ControlRequest +00800296 B __bss_end +00800296 N _end 00810000 N __eeprom_end