From 11604b90a3ca684f8aff478c5c727bdf148574e1 Mon Sep 17 00:00:00 2001 From: Michael Wiebusch Date: Sat, 5 Oct 2013 23:09:31 +0200 Subject: [PATCH] seems the define directives dont work, clean code, commenting out works --- firmware/USBtoSerial.c | 119 +- firmware/USBtoSerial.c~ | 121 +- firmware/USBtoSerial.elf | Bin 148716 -> 148581 bytes firmware/USBtoSerial.hex | 701 +++--- firmware/USBtoSerial.lss | 4788 +++++++++++++++++++------------------- firmware/USBtoSerial.map | 486 ++-- firmware/USBtoSerial.o | Bin 41156 -> 40656 bytes firmware/USBtoSerial.sym | 201 +- 8 files changed, 3200 insertions(+), 3216 deletions(-) diff --git a/firmware/USBtoSerial.c b/firmware/USBtoSerial.c index 3cd194c..961e898 100644 --- a/firmware/USBtoSerial.c +++ b/firmware/USBtoSerial.c @@ -297,8 +297,8 @@ int main(void) GlobalInterruptEnable(); touchpad_init(); // you need to call this to setup the I/O pin! - sei(); _delay_ms(500); + sei(); // setup rfm70 transceiver @@ -334,46 +334,41 @@ int main(void) -//###################################################################### -// uncomment desired demo mode here! - -#define DEMO_MODE KEYPAD_MODE -//#define DEMO_MODE ABSOLUTE_MODE -//#define DEMO_MODE RELATIVE_MODE -//###################################################################### + + +// //###################################################################### +// // uncomment desired demo mode here! +// +// // #define DEMO_MODE KEYPAD_MODE +// //#define DEMO_MODE ABSOLUTE_MODE +// #define DEMO_MODE RELATIVE_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 - - // ------------------------- - // | back | up | enter | - // ------------------------- - // | left | down | right | - // ------------------------- - - uart_puts("you selected the keypad demo modus:\n\r"); - uint8_t x, y = 0; - int8_t dx, dy = 0; +// // 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 +// +// // ------------------------- +// // | back | up | enter | +// // ------------------------- +// // | left | down | right | +// // ------------------------- +// +// // uart_puts("you selected the keypad demo modus:\n\r"); // touchpad_set_abs_mode(); // keypad functionality uses the "absolute mode" - while (1) { - Usb2SerialTask(); - loopcounter++; - if(loopcounter) { - continue; - } -// // uart_puts("c"); -// _delay_ms(20); - - dummy=touchpad_read(); // read values from the touchpad - my_uitoa(dummy,stringbuffer,4);// x_abs returns current x position of your finger - uart_puts("data_length: "); - uart_puts(stringbuffer); - uart_puts(" x_pos: "); - my_uitoa(delta_x(),stringbuffer,4);// x_abs returns current x position of your finger - uart_puts(stringbuffer); -// uart_puts("\r"); +// while (1) { +// +// +// Usb2SerialTask(); +// loopcounter++; +// if(loopcounter) { +// continue; +// } +// +// touchpad_read(); // read values from the touchpad +// // field_val = decode_field(); // decode_field returns the number of the // // touch button that was pressed last. or zero if nothing happened // @@ -402,15 +397,19 @@ int main(void) // } // // } - // end of keypad mode demo block - +// // 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"); +// // 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" // while (1) { // -// _delay_ms(20); +// Usb2SerialTask(); +// loopcounter++; +// if(loopcounter) { +// continue; +// } // // touchpad_read(); // read data from the touchpad // uart_puts("x_pos: "); @@ -427,19 +426,23 @@ int main(void) // } // // end of absolute mode demo block // -// // #elif DEMO_MODE == RELATIVE_MODE -// // begin of relative 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 -// uint8_t x, y = 0; -// int8_t dx, dy = 0; -// -// while (1) { -// -// _delay_ms(20); -// -// touchpad_read(); // read data from touchpad + touchpad_set_rel_mode_200dpi(); // uncomment this line if you want double resolution + uint8_t x, y = 0; + int8_t dx, dy = 0; + + while (1) { + + Usb2SerialTask(); + loopcounter++; + if(loopcounter) { + continue; + } + + 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 @@ -469,12 +472,14 @@ int main(void) uart_puts(stringbuffer); uart_puts("\r"); -// } + } // end of relative mode demo block // #endif - -} + + + + } // end of main \ No newline at end of file diff --git a/firmware/USBtoSerial.c~ b/firmware/USBtoSerial.c~ index 3cd194c..f28d0a2 100644 --- a/firmware/USBtoSerial.c~ +++ b/firmware/USBtoSerial.c~ @@ -297,8 +297,8 @@ int main(void) GlobalInterruptEnable(); touchpad_init(); // you need to call this to setup the I/O pin! - sei(); _delay_ms(500); + sei(); // setup rfm70 transceiver @@ -334,46 +334,41 @@ int main(void) -//###################################################################### -// uncomment desired demo mode here! - -#define DEMO_MODE KEYPAD_MODE -//#define DEMO_MODE ABSOLUTE_MODE -//#define DEMO_MODE RELATIVE_MODE -//###################################################################### + + +// //###################################################################### +// // uncomment desired demo mode here! +// +// // #define DEMO_MODE KEYPAD_MODE +// //#define DEMO_MODE ABSOLUTE_MODE +// #define DEMO_MODE RELATIVE_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 - - // ------------------------- - // | back | up | enter | - // ------------------------- - // | left | down | right | - // ------------------------- - - uart_puts("you selected the keypad demo modus:\n\r"); - uint8_t x, y = 0; - int8_t dx, dy = 0; +// // 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 +// +// // ------------------------- +// // | back | up | enter | +// // ------------------------- +// // | left | down | right | +// // ------------------------- +// +// // uart_puts("you selected the keypad demo modus:\n\r"); // touchpad_set_abs_mode(); // keypad functionality uses the "absolute mode" - while (1) { - Usb2SerialTask(); - loopcounter++; - if(loopcounter) { - continue; - } -// // uart_puts("c"); -// _delay_ms(20); - - dummy=touchpad_read(); // read values from the touchpad - my_uitoa(dummy,stringbuffer,4);// x_abs returns current x position of your finger - uart_puts("data_length: "); - uart_puts(stringbuffer); - uart_puts(" x_pos: "); - my_uitoa(delta_x(),stringbuffer,4);// x_abs returns current x position of your finger - uart_puts(stringbuffer); -// uart_puts("\r"); +// while (1) { +// +// +// Usb2SerialTask(); +// loopcounter++; +// if(loopcounter) { +// continue; +// } +// +// touchpad_read(); // read values from the touchpad +// // field_val = decode_field(); // decode_field returns the number of the // // touch button that was pressed last. or zero if nothing happened // @@ -402,15 +397,19 @@ int main(void) // } // // } - // end of keypad mode demo block - +// // 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"); +// // 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" // while (1) { // -// _delay_ms(20); +// Usb2SerialTask(); +// loopcounter++; +// if(loopcounter) { +// continue; +// } // // touchpad_read(); // read data from the touchpad // uart_puts("x_pos: "); @@ -427,19 +426,23 @@ int main(void) // } // // end of absolute mode demo block // -// // #elif DEMO_MODE == RELATIVE_MODE -// // begin of relative 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 -// uint8_t x, y = 0; -// int8_t dx, dy = 0; -// -// while (1) { -// -// _delay_ms(20); -// -// touchpad_read(); // read data from touchpad + 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; + int8_t dx, dy = 0; + + while (1) { + + Usb2SerialTask(); + loopcounter++; + if(loopcounter) { + continue; + } + + 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 @@ -469,12 +472,14 @@ int main(void) uart_puts(stringbuffer); uart_puts("\r"); -// } + } // end of relative mode demo block // #endif - -} + + + + } // end of main \ No newline at end of file diff --git a/firmware/USBtoSerial.elf b/firmware/USBtoSerial.elf index 913ff391965882a111343aeb5705a10c4f3d7301..348bf3b5652f020984d5717cf1c6b0607de9df45 100755 GIT binary patch delta 32163 zcma*Q3!F~X`Un23{k}8CCCm(Cn2RySWCk;1+!+iZcSDlv7}ti}lO(+3l8|I
0p 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 b@ceCWuSZ&eKTz~j6YHIbqBCu+71sX)ssP28 diff --git a/firmware/USBtoSerial.hex b/firmware/USBtoSerial.hex index 040d61e..7732aa6 100644 --- a/firmware/USBtoSerial.hex +++ b/firmware/USBtoSerial.hex @@ -1,9 +1,9 @@ :100000009AC00000B4C00000B2C00000B0C0000040 :10001000AEC00000ACC00000AAC00000A8C0000034 -:10002000A6C00000A4C00000A2C0000052C600008C -:10003000F4C600009CC000009AC0000098C00000F8 +:10002000A6C00000A4C00000A2C000003FC600009F +:10003000E1C600009CC000009AC0000098C000000B :1000400096C0000094C0000092C0000090C0000064 -:100050008EC00000D6C000008AC00000A6C200000A +:100050008EC00000D6C000008AC00000B0C2000000 :1000600086C0000084C0000082C0000080C0000084 :100070007EC000007CC000007AC0000078C0000094 :1000800076C0000074C0000072C0000070C00000A4 @@ -18,9 +18,9 @@ :1001100020005500530042002D00520053003200D1 :100120003300320020004100640061007000740060 :1001300065007200000011241FBECFEFD4E0DEBFC7 -:10014000CDBF11E0A0E0B1E0E6E1F8E102C005902A -:100150000D92AE36B107D9F712E0AEE6B1E001C0BC -:100160001D92A23AB107E1F72DD30C94090C48CFA8 +:10014000CDBF11E0A0E0B1E0E0EFF7E102C0059023 +:100150000D92A033B107D9F712E0A0E3B1E001C0DE +:100160001D92A436B107E1F737D30C94F60B48CFB4 :10017000FC01A081B1816C93808191810196918372 :100180008083268137818217930721F484819581AA :10019000918380832FB7F894828593850196938706 @@ -31,364 +31,357 @@ :1001E0006083738362837583648360587F4F7783F2 :1001F000668380E890E091878087138612862FBF00 :1002000008951F920F920FB60F9211248F93809131 -:1002100094028F5F809394028F910F900FBE0F9086 -:100220001F90189586B53091940220E0280F311D5B -:10023000C901089516BC109294020895DF92EF92BE +:1002100056028F5F809356028F910F900FBE0F9002 +:100220001F90189586B53091560220E0280F311D99 +:10023000C901089516BC109256020895DF92EF92FC :10024000FF920F931F93CF93DF9383E085BDF2DF7F -:10025000509A5898E7DFBC0180E090E00E94310B93 -:1002600020E030E84EE053E40E94990A87FDF2CF87 +:10025000509A5898E7DFBC0180E090E00E941E0BA6 +:1002600020E030E84EE053E40E94860A87FDF2CF9A :1002700082E085BDDD24D39410E0DCDF509A5898ED -:10028000D1DFBC0180E090E00E94310B20E030E043 -:100290004CE852E40E94990A87FDF2CF5098589A90 -:1002A000C1DFBC0180E090E00E94310B20E030E033 -:1002B00048E453E40E94990A87FDF2CF41C0C8E0A8 -:1002C000D0E000E8E12EFF248BE892E0E80EF91E72 +:10028000D1DFBC0180E090E00E941E0B20E030E056 +:100290004CE852E40E94860A87FDF2CF5098589AA3 +:1002A000C1DFBC0180E090E00E941E0B20E030E046 +:1002B00048E453E40E94860A87FDF2CF41C0C8E0BB +:1002C000D0E000E8E12EFF248DE492E0E80EF91E74 :1002D000B1DF509A5898F7018081802379F0A2DF2E -:1002E000BC0180E090E00E94310B20E030E04CE85F -:1002F00052E40E94990A87FDF2CF0EC093DFBC0141 -:1003000080E090E00E94310B20E030E042E053E4D6 -:100310000E94990A87FDF2CF5098589A83DFBC015A -:1003200080E090E00E94310B20E030E048E453E4AC -:100330000E94990A87FDF2CF0695219749F61F5F23 +:1002E000BC0180E090E00E941E0B20E030E04CE872 +:1002F00052E40E94860A87FDF2CF0EC093DFBC0154 +:1003000080E090E00E941E0B20E030E042E053E4E9 +:100310000E94860A87FDF2CF5098589A83DFBC016D +:1003200080E090E00E941E0B20E030E048E453E4BF +:100330000E94860A87FDF2CF0695219749F61F5F36 :100340001D1508F4BCCF76DF509A58986BDFBC01BE -:1003500080E090E00E94310B20E030E042E053E486 -:100360000E94990A87FDF2CF5098589A5BDFBC0132 -:1003700080E090E00E94310B20E030E048E453E45C -:100380000E94990A87FDF2CF80918B028B3329F06E +:1003500080E090E00E941E0B20E030E042E053E499 +:100360000E94860A87FDF2CF5098589A5BDFBC0145 +:1003700080E090E00E941E0B20E030E048E453E46F +:100380000E94860A87FDF2CF80914D028B3329F0BF :10039000893341F429E0D22E02C093E0D92E1130E6 :1003A00009F46BCF47DF3EDFBC0180E090E00E94A4 -:1003B000310B20E030E04AEF53E40E94E30B1816C3 -:1003C0000CF442C04899EFCF489BFECFCCE8D2E076 +:1003B0001E0B20E030E04AEF53E40E94D00B1816E9 +:1003C0000CF442C04899EFCF489BFECFCEE4D2E078 :1003D00011E001C0182F188288E0E82EF12C00E807 -:1003E00029DF20DFBC0180E090E00E94310B20E09B -:1003F00030E048E453E40E94E30B181614F4115063 +:1003E00029DF20DFBC0180E090E00E941E0B20E0AE +:1003F00030E048E453E40E94D00B181614F4115076 :1004000024C04899EECF16DF489BFECF0BDFBC011E -:1004100080E090E00E94310B20E030E048EC52E4B4 -:100420000E94990A87FF03C08881800F8883069500 +:1004100080E090E00E941E0B20E030E048EC52E4C7 +:100420000E94860A87FF03C08881800F8883069513 :100430000894E108F108E114F10491F6812F8F5F2F :100440002196893039F601C010E0812FDF91CF91DC :100450001F910F91FF90EF90DF9008955098589A58 :10046000EEE6F0E080818160808308958CE38093E4 -:100470008B02E4DE8093950280919502089580912D -:100480009502882351F080918C0286FF04C08195EB -:100490008F73819508958F73089580E008958091FA -:1004A0009502882351F080918D0286FF04C08195CA -:1004B0008F73819508958F73089580E008951F9339 -:1004C0008FB7F89420917801309179018FBF809196 -:1004D0007601909177012817390749F080E591E07E -:1004E00095D7BC0197FD03C08EE691E041DE2FB7A2 -:1004F000F89480910402909105022FBF009701F1BA -:10050000209151012F702093E9002091E80020FFF5 -:1005100017C08031910510F08FE090E0182F0EC0C9 -:10052000E091FC01F091FD0180E591E06081FDD654 -:100530001150882329F48AEF91E035DE112381F7E9 -:100540002FB7F89480917801909179012FBF00978F -:1005500049F08EE691E027DE9091C80095FFFCCF30 -:100560008093CE0080E591E03AD7F4D51F910895AD -:1005700084B7877F84BF88E10FB6F89480936000CA -:10058000109260000FBE90E080E80FB6F894809360 -:100590006100909361000FBE8DC30895089580E5BA -:1005A00091E09FC680E591E0F0C51F920F920FB6D3 -:1005B0000F9211242F933F934F935F936F937F93E9 -:1005C0008F939F93AF93BF93EF93FF936091CE0070 -:1005D0008EB3843019F48AEF91E0CADDFF91EF9178 -:1005E000BF91AF919F918F917F916F915F914F914B -:1005F0003F912F910F900FBE0F901F9018958F92E3 -:100600009F92AF92BF92CF92DF92EF92FF921F9391 -:10061000FC01A18DA150A23028F4B0E0A559BE4F35 -:100620001C9101C010E0808D823009F41860828D29 -:10063000873031F0883031F0863029F4126003C001 -:10064000146001C016601092C9001092C800109288 -:10065000CA00C488D588E688F788C701B601969590 -:10066000879577956795FDD720E034E244EF59E40C -:10067000FCD64B015C01C701B601F3D79B01AC016D -:10068000C501B4015AD720E030E040E85FE3ECD682 -:10069000BCD77093CD006093CC001093CA0082E069 -:1006A0008093C80088E98093C9001F91FF90EF9064 -:1006B000DF90CF90BF90AF909F908F900895682F5C -:1006C0008EB3843019F48AEF91E052CD0895EF9201 -:1006D000FF92CF93DF93E82EE7017E01F92EE70129 -:1006E00001C0EDDF89918823E1F7DF91CF91FF9081 -:1006F000EF9008952F923F924F925F926F927F9268 -:100700008F929F92AF92BF92CF92DF92EF92FF9221 -:100710000F931F93CF93DF937B018C01822F90E087 -:10072000FA01E80FF91F1082D22EDA944D2C5524CD -:1007300047FC5094EA01C40DD51DAA24BB24BAE09D -:100740006B2E712C812C912C1C01089421083108EE -:10075000A0E2CA2E22C0E114F1040105110541F402 -:10076000C501840D951D8215930514F4C88208C037 -:10077000C801B701A40193010E94E70B605D688383 -:10078000C801B701A40193010E94E70B79018A0116 -:10079000DA9421970894A108B108D7FEDCCFDF9145 -:1007A000CF911F910F91FF90EF90DF90CF90BF906E -:1007B000AF909F908F907F906F905F904F903F9001 -:1007C0002F900895CF92DF92EF92FF920F931F9395 -:1007D000DF93CF93CDB7DEB760970FB6F894DEBF47 -:1007E0000FBECDBFC5DE8EE691E06AE771E0F4DCB6 -:1007F0008AEF91E066E072E0EFDC78942FDE789487 -:100800008FEF99E6A8E181509040A040E1F700C049 -:10081000000080E091E05BDFFF24DD248E010F5FAC -:100820001F4F4DDED394E9F721DE682F70E080E0A2 -:1008300090E0A80124E05EDF86E291E048DFC80195 -:1008400046DF84E391E043DF2ADE682F772767FDE8 -:100850007095872F972FA80124E04CDFC80137DF60 -:100860001EDEC82E0CDE2C2D332727FD30952E0DD5 -:10087000311D2F3F310509F024F437FD05C0EC0C84 -:1008800004C0EE24EA9401C0EE24282F332727FD6C -:1008900030952F0D311D2F3F310509F024F437FD20 -:1008A00005C0F80E04C0FF24FA9401C0FF248DE3B4 -:1008B00091E00DDF6E2D70E080E090E0A80124E073 -:1008C00019DFC80104DF85E491E001DF6F2D70E0DE -:1008D00080E090E0A80124E00DDFC801F8DE8EE49E -:1008E00091E0F5DE9ECF923029F0933041F09130C7 -:1008F000E9F417C02EE330E0EAEAF0E01BC08130F3 -:1009000041F0813018F0823089F406C0E8EEF0E062 -:1009100005C0ECEEF0E002C0E6E0F1E0249130E04A -:1009200009C022E130E0E8E9F0E004C020E030E076 -:10093000E0E0F0E0DA011196FC93EE93C90108952E -:10094000282F392FF9018091A0029091A1028617DA -:10095000970718F4BC0120E034C061157105D9F780 -:100960008091E8008E778093E800F5CF8EB38823DE -:10097000E9F18530B9F18091E80083FD35C08091BF -:10098000E80082FD29C08091E80080FF1AC08091B4 -:10099000F20090E006C021912093F1006150704078 -:1009A00001966115710519F088309105A0F321E0D9 -:1009B0008830910509F020E08091E8008E778093DF -:1009C000E8006115710591F6222381F605C08EB30A -:1009D000882361F0853061F08091E80082FFF7CFD5 -:1009E00080E0089583E0089581E0089582E008950D -:1009F00083E00895E82FF92F8091A0029091A10241 -:100A00008617970718F4BC0120E036C06115710500 -:100A1000D9F78091E8008E778093E800F5CF8EB308 -:100A2000882309F43EC08530C1F18091E80083FD40 -:100A300036C08091E80082FD2AC08091E80080FFE6 -:100A40001BC08091F20090E007C024912093F10038 -:100A500031966150704001966115710519F088302A -:100A6000910598F321E08830910509F020E080910C -:100A7000E8008E778093E8006115710581F62223E6 -:100A800071F605C08EB3882361F0853061F08091E6 -:100A9000E80082FFF7CF80E0089583E0089581E0C9 -:100AA000089582E0089583E00895982F2CC0292F9F -:100AB0002F702093E900981739F07091EC00209185 -:100AC000ED005091F00003C0242F762F50E021FF5D -:100AD00019C03091EB003E7F3093EB003091ED0078 -:100AE0003D7F3093ED003091EB0031603093EB00AF -:100AF0007093EC002093ED005093F0002091EE00F5 -:100B000027FF08C09F5F953090F28F708093E900B7 -:100B100081E0089580E00895EF92FF920F931F9374 -:100B2000CF93DF93162FE82EE7017E01F92EE70120 -:100B300000E02AC09881992329F16B81E981FA812B -:100B40002C81892F8F70853018F56295660F660F9E -:100B5000607C991F9927991F692B223010F096E02D -:100B600001C092E028E030E040E003C04F5F220F78 -:100B7000331F2E173F07D0F34295407F492B95DF57 -:100B8000882331F00F5F25960117A0F281E001C0A4 -:100B900080E0DF91CF911F910F91FF90EF9008952A -:100BA00080919A0287FF11C003C08EB38823B1F0F1 -:100BB0008091E80082FFF9CF8091E8008B778093E5 -:100BC000E80008958EB3882349F08091E80080FF03 -:100BD000F9CF8091E8008E778093E80008958091A6 -:100BE000E4009091E50044E62091EC0020FF25C050 -:100BF0002091E80020FD15C02EB32223A1F025305E -:100C0000A1F02091EB0025FD12C02091E40030916D -:100C1000E5002817390741F3442359F04150C90131 -:100C2000E3CF80E0089582E0089583E0089581E0B5 -:100C3000089584E0089580E008952091E80022FF5F -:100C4000DBCFF9CF40D042D08091D8008F7780930E -:100C5000D8008091D80080688093D8008091D80017 -:100C60008F7D8093D80084E089BD86E089BD09B47A -:100C700000FEFDCF1EBA10929602109298021092BA -:100C8000970280E060E042E010DF8091E1008E7F1B -:100C90008093E1008091E20081608093E200809186 -:100CA000E20088608093E2008091E0008E7F809374 -:100CB000E0000895E3E6F0E080818E7F808381E0AC -:100CC00080939902BFCF1092E20008951092E10044 -:100CD00008951F920F920FB60F9211242F933F93F6 -:100CE0004F935F936F937F938F939F93AF93BF9334 -:100CF000EF93FF938091E10082FF0AC08091E200B0 -:100D000082FF06C08091E1008B7F8093E10021D2B9 -:100D10008091E10080FF16C08091E20080FF12C048 -:100D20008091E2008E7F8093E2008091E2008061FA -:100D30008093E2008091D80080628093D80019BC33 -:100D40001EBA2CDC8091E10084FF2CC08091E2006F -:100D500084FF28C084E089BD86E089BD09B400FE17 -:100D6000FDCF8091D8008F7D8093D8008091E100E5 -:100D70008F7E8093E1008091E2008F7E8093E2007D -:100D80008091E20081608093E20080919602882346 -:100D900021F48091E30087FF02C084E001C081E07C -:100DA0008EBBFBDB8091E10083FF26C08091E200D7 -:100DB00083FF22C08091E100877F8093E10082E081 -:100DC0008EBB109296028091E1008E7F8093E100AD -:100DD0008091E2008E7F8093E2008091E20080614A -:100DE0008093E20080E060E042E05FDE8091F0000E -:100DF00088608093F000ADD1FF91EF91BF91AF91EA -:100E00009F918F917F916F915F914F913F912F9122 -:100E10000F900FBE0F901F9018951F920F920FB654 -:100E20000F9211241F932F933F934F935F936F93D0 -:100E30007F938F939F93AF93BF93EF93FF93109103 -:100E4000E9001F708091EC001092E9008091F000A1 -:100E5000877F8093F00078941BD01092E9008091F6 -:100E6000F00088608093F0001093E900FF91EF910B -:100E7000BF91AF919F918F917F916F915F914F91B2 -:100E80003F912F911F910F900FBE0F901F901895BB -:100E90001F93DF93CF93CDB7DEB7AC970FB6F8941F -:100EA000DEBF0FBECDBFEAE9F2E08091F100819391 -:100EB00022E0E23AF207C9F775DB8091E80083FF90 -:100EC00030C180919A0220919B02253009F484C0A0 -:100ED000263040F42130A1F1213070F0233009F0A8 -:100EE00020C12EC0283009F4EFC0293009F4FEC01B -:100EF000263009F016C192C0803821F0823809F0FE -:100F000010C108C08091970290919802992371F0C6 -:100F100082600CC080919E028F708093E900909156 -:100F2000EB0081E095FF80E01092E9009091E800ED -:100F3000977F9093E8008093F1001092F100CFC06A -:100F4000882319F0823009F0ECC090E08F71907026 -:100F5000009729F08230910509F0E3C00BC0809121 -:100F60009C02813009F0DDC0233009F080E08093DD -:100F700098022CC080919C02882341F520919E020A -:100F80002F7009F4CEC02093E9008091EB0080FF20 -:100F90001DC080919B02833021F48091EB00806220 -:100FA00013C08091EB0080618093EB0081E090E0C2 -:100FB00002C0880F991F2A95E2F78093EA001092E9 -:100FC000EA008091EB0088608093EB001092E900CA -:100FD0008091E800877F86C0882309F0A2C0109125 -:100FE0009C021F778091E3008078812B8093E3003F -:100FF0008091E800877F8093E800D2DD8091E8004F -:1010000080FFFCCF8091E30080688093E300112390 -:1010100011F083E001C082E08EBB83C08058823033 -:1010200008F07FC080919C0290919D0223E08C3D4E -:10103000920791F583E08C838AE28B835FB7F89403 -:10104000DE01159680E090E04EE061E2E42FF0E0F2 -:1010500060935700E49180FF03C0E295EF704F5F0B -:10106000EF702E2F30E0EA3018F0295C3F4F02C0BD -:10107000205D3F4F2D933D9301968431910531F7CB -:101080005FBF8091E800877F8093E800CE010396E0 -:101090006AE270E055DC12C060919E02AE014F5FC3 -:1010A0005F4F21DCBC01009709F43BC08091E80050 -:1010B000877F8093E80089819A819CDC8091E80099 -:1010C0008B778093E8002DC0803859F58091E80037 -:1010D000877F8093E800809196028093F100809151 -:1010E000E8008E778093E8005BDD1BC08823C9F49D -:1010F00090919C029230A8F48091E800877F8093C1 -:10110000E800909396024CDD80919602882321F4AA -:101110008091E30087FF02C084E001C081E08EBBC4 -:101120003EDA8091E80083FF0AC08091E800877F63 -:101130008093E8008091EB0080628093EB00AC9696 -:101140000FB6F894DEBF0FBECDBFCF91DF911F91D8 -:10115000089508951F938EB38823A9F08091E90024 -:101160008F709091EC0090FF02C010E801C010E079 -:10117000182B1092E9008091E80083FF01C088DEFF -:101180001F701093E9001F910895CF93DF93EC0136 -:101190008091E80083FFA2C0888190E020919E02A8 -:1011A00030919F022817390709F098C080919B025F -:1011B000813269F0823220F4803209F08FC03CC065 -:1011C000823209F46AC0833209F088C079C0809104 -:1011D0009A02813A09F082C08091E800877F80936B -:1011E000E8008091E80080FFFCCF8C899D89AE8962 -:1011F000BF898093F100292F3A2F4B2F5527209339 -:10120000F1009D01442755272093F1008B2F99274A -:10121000AA27BB278093F100888D8093F100898DE8 -:101220008093F1008A8D8093F1008091E8008E77A1 -:101230008093E800B5DC52C080919A02813209F0B7 -:101240004DC08091E800877F8093E80004C08EB392 -:10125000882309F443C08091E80082FFF8CF3091E1 -:10126000F1002091F1009091F1008091F1003C8B10 -:101270002D8B9E8B8F8B8091F100888F8091F10058 -:10128000898F8091F1008A8F8091E8008B7780931D -:10129000E80086DCCE01B3D921C080919A02813268 -:1012A000E9F48091E800877F8093E80079DC809101 -:1012B0009C0290919D02998B888BCE01D4D00EC058 -:1012C00080919A02813251F48091E800877F809367 -:1012D000E80066DCCE0160919C02C5D0DF91CF9121 -:1012E0000895CF93DF93EC014096FC018BE0DF0182 -:1012F0001D928A95E9F782E08C83898783E08E8747 -:10130000CE01019661E008DC882359F0CE010696F3 -:1013100061E002DC882329F0CE010B9661E0FCDB62 -:1013200001C080E0DF91CF910895DF93CF930F92BA -:10133000CDB7DEB7FC018EB38430F9F4248935894A -:10134000468957892115310541055105B1F0818143 -:101350008F708093E9008091E80085FD0AC080913C -:10136000E8008E778093E800698339DC69818823FF -:1013700029F46093F10080E001C082E00F90CF91EA -:10138000DF910895FC018EB3843019F524893589E5 -:10139000468957892115310541055105D1F08181D3 -:1013A0008F708093E9008091F2008823A1F09091E2 -:1013B000E8008091E8008E778093E80095FD0DC0ED -:1013C0000EDC882359F49091E8009E779093E80012 -:1013D000089582E0089580E0089580E008952EB396 -:1013E000243099F4FC0124893589468957892115CF -:1013F00031054105510549F021812F702093E90005 -:101400002091E80020FF01C0BDCF0895FC018EB3FC -:10141000843029F524893589468957892115310574 -:1014200041055105E1F086818F708093E90080913C -:10143000E80082FF14C08091F200882321F02091FF -:10144000F10030E002C02FEF3FEF8091F2008823DF -:1014500041F48091E8008B778093E80002C02FEF81 -:101460003FEFC901089508955058BB27AA270ED011 -:1014700070C161D130F066D120F031F49F3F11F49A -:101480001EF456C10EF4E095E7FB4CC1E92F72D172 -:1014900080F3BA17620773078407950718F071F491 -:1014A0009EF58AC10EF4E0950B2EBA2FA02D0B01EC -:1014B000B90190010C01CA01A0011124FF27591B99 -:1014C00099F0593F50F4503E68F11A16F040A22F9F -:1014D000232F342F4427585FF3CF46953795279510 -:1014E000A795F0405395C9F77EF41F16BA0B620B0F -:1014F000730B840BBAF09150A1F0FF0FBB1F661F56 -:10150000771F881FC2F70EC0BA0F621F731F841F98 -:1015100048F4879577956795B795F7959E3F08F0BE -:10152000B3CF9395880F08F09927EE0F979587957D -:101530000895D4D008F481E008950CD00AC102D1F6 -:1015400040F0F9D030F021F45F3F19F0EBC05111B9 -:1015500034C1EEC00FD198F39923C9F35523B1F3E9 -:10156000951B550BBB27AA2762177307840738F012 -:101570009F5F5F4F220F331F441FAA1FA9F333D071 -:101580000E2E3AF0E0E830D091505040E695001C25 -:10159000CAF729D0FE2F27D0660F771F881FBB1FE1 -:1015A000261737074807AB07B0E809F0BB0B802DBB -:1015B000BF01FF2793585F4F2AF09E3F510568F007 -:1015C000B1C0FBC05F3FECF3983EDCF386957795A6 -:1015D0006795B795F7959F5FC9F7880F911D969509 -:1015E000879597F90895E1E0660F771F881FBB1F65 -:1015F000621773078407BA0720F0621B730B840B12 -:10160000BA0BEE1F88F7E0950895BCD088F09F577D -:1016100090F0B92F9927B751A0F0D1F0660F771F3E -:10162000881F991F1AF0BA95C9F712C0B13081F01E -:10163000C3D0B1E00895C0C0672F782F8827B85F66 -:1016400039F0B93FCCF3869577956795B395D9F77F -:101650003EF490958095709561957F4F8F4F9F4F89 -:101660000895E89409C097FB3EF490958095709595 -:1016700061957F4F8F4F9F4F9923A9F0F92F96E9DE -:10168000BB279395F695879577956795B795F11153 -:10169000F8CFFAF4BB0F11F460FF1BC06F5F7F4FF0 -:1016A0008F4F9F4F16C0882311F096E911C0772302 -:1016B00021F09EE8872F762F05C0662371F096E80B -:1016C000862F70E060E02AF09A95660F771F881FDA -:1016D000DAF7880F9695879597F90895990F00087E -:1016E000550FAA0BE0E8FEEF16161706E807F907F4 -:1016F000C0F012161306E407F50798F0621B730B8F -:10170000840B950B39F40A2661F0232B242B252B0F -:1017100021F408950A2609F4A140A6958FEF811DB2 -:10172000811D089597F99F6780E870E060E0089553 -:101730009FEF80EC089500240A94161617061806E9 -:101740000906089500240A941216130614060506C5 -:101750000895092E0394000C11F4882352F0BB0F56 -:1017600040F4BF2B11F460FF04C06F5F7F4F8F4FB9 -:101770009F4F089557FD9058440F551F59F05F3FF4 -:1017800071F04795880F97FB991F61F09F3F79F0A3 -:1017900087950895121613061406551FF2CF469525 -:1017A000F1DF08C0161617061806991FF1CF8695A7 -:1017B0007105610508940895E894BB27662777278B -:1017C000CB0197F908958ADF08F48FEF0895A1E21D -:1017D0001A2EAA1BBB1BFD010DC0AA1FBB1FEE1FAB -:1017E000FF1FA217B307E407F50720F0A21BB30BF6 -:1017F000E40BF50B661F771F881F991F1A9469F772 -:1018000060957095809590959B01AC01BD01CF01CD -:061810000895F894FFCFDB -:10181600796F752073656C6563746564207468659B -:10182600206B65797061642064656D6F206D6F64EF -:1018360075733A0A0D00646174615F6C656E677456 -:10184600683A200020785F706F733A2000785F70E6 -:101856006F733A200009795F706F733A20000D00AC -:10186600008310000001041000000182080000013E -:0E187600000000000000000000000030200014 +:100470004D02E4DE809357028091570208958BE38A +:1004800080934D0283E680934E0282E080934F0278 +:10049000D5CE80915702882351F080914E0286FF7D +:1004A00004C081958F73819508958F73089580E0BE +:1004B000089580915702882351F080914F0286FF62 +:1004C00004C081958F73819508958F73089580E09E +:1004D00008951F938FB7F89420913A0130913B0112 +:1004E0008FBF80913801909139012817390749F061 +:1004F00083E191E078D7BC0197FD03C080E391E0F0 +:1005000037DE2FB7F8948091C6019091C7012FBFB5 +:10051000009701F1209114012F702093E9002091A0 +:10052000E80020FF17C08031910510F08FE090E0C7 +:10053000182F0EC0E091BE01F091BF0183E191E060 +:100540006081E0D61150882329F48CEB91E02BDEFA +:10055000112381F72FB7F89480913A0190913B01D4 +:100560002FBF009749F080E391E01DDE9091C80015 +:1005700095FFFCCF8093CE0083E191E01DD7D7D5C6 +:100580001F91089584B7877F84BF88E10FB6F894E0 +:1005900080936000109260000FBE90E080E80FB67C +:1005A000F89480936100909361000FBE70C308952A +:1005B000089583E191E082C683E191E0D3C51F9263 +:1005C0000F920FB60F9211242F933F934F935F9387 +:1005D0006F937F938F939F93AF93BF93EF93FF930B +:1005E0006091CE008EB3843019F48CEB91E0C0DDC5 +:1005F000FF91EF91BF91AF919F918F917F916F91FB +:100600005F914F913F912F910F900FBE0F901F90D0 +:1006100018958F929F92AF92BF92CF92DF92EF92F6 +:10062000FF921F93FC01A18DA150A23028F4B0E0ED +:10063000A25DBE4F1C9101C010E0808D823009F494 +:100640001860828D873031F0883031F0863029F49F +:10065000126003C0146001C016601092C9001092AD +:10066000C8001092CA00C488D588E688F788C701F8 +:10067000B6019695879577956795E0D720E034E2A7 +:1006800044EF59E4DFD64B015C01C701B601D6D770 +:100690009B01AC01C501B4013DD720E030E040E84A +:1006A0005FE3CFD69FD77093CD006093CC001093BB +:1006B000CA0082E08093C80088E98093C9001F9136 +:1006C000FF90EF90DF90CF90BF90AF909F908F9072 +:1006D0000895682F8EB3843019F48CEB91E048CDE7 +:1006E0000895EF92FF92CF93DF93E82EE7017E010A +:1006F000F92EE70101C0EDDF89918823E1F7DF9151 +:10070000CF91FF90EF9008952F923F924F925F927A +:100710006F927F928F929F92AF92BF92CF92DF9211 +:10072000EF92FF920F931F93CF93DF937B018C0186 +:10073000822F90E0FA01E80FF91F1082D22EDA948E +:100740004D2C552447FC5094EA01C40DD51DAA2414 +:10075000BB24BAE06B2E712C812C912C1C010894C7 +:1007600021083108A0E2CA2E22C0E114F1040105DB +:10077000110541F4C501840D951D8215930514F4EE +:10078000C88208C0C801B701A40193010E94D40B1C +:10079000605D6883C801B701A40193010E94D40B76 +:1007A00079018A01DA9421970894A108B108D7FE4B +:1007B000DCCFDF91CF911F910F91FF90EF90DF90F1 +:1007C000CF90BF90AF909F908F907F906F905F90F1 +:1007D0004F903F902F900895CF92DF92EF92FF922B +:1007E0000F931F93DF93CF93CDB7DEB760970FB60C +:1007F000F894DEBF0FBECDBFC5DE80E391E06CE3B1 +:1008000071E0EADC8CEB91E068EC71E0E5DC789477 +:1008100025DE8FEF99E6A8E181509040A040E1F7F6 +:1008200000C0000078942BDEFF24DD248E010F5FD2 +:100830001F4F4FDED394E9F719DE3BDEC82E29DEC9 +:100840002C2D332727FD30952E0D311D2F3F3105DF +:1008500009F024F437FD05C0EC0C04C0EE24EA9442 +:1008600001C0EE24282F332727FD30952F0D311D91 +:100870002F3F310509F024F437FD05C0F80E04C000 +:10088000FF24FA9401C0FF2480E091E02ADF6E2D5E +:1008900070E080E090E0A80124E036DFC80121DFAD +:1008A00088E091E01EDF6F2D70E080E090E0A8010D +:1008B00024E02ADFC80115DF81E191E012DFB9CF22 +:1008C000923029F0933041F09130E9F417C02EE3D3 +:1008D00030E0EAEAF0E01BC0813041F0813018F0EE +:1008E000823089F406C0E8EEF0E005C0ECEEF0E0FE +:1008F00002C0E6E0F1E0249130E009C022E130E0FE +:10090000E8E9F0E004C020E030E0E0E0F0E0DA0107 +:100910001196FC93EE93C9010895282F392FF90100 +:1009200080916202909163028617970718F4BC01C8 +:1009300020E034C061157105D9F78091E8008E7709 +:100940008093E800F5CF8EB38823E9F18530B9F1C3 +:100950008091E80083FD35C08091E80082FD29C0C8 +:100960008091E80080FF1AC08091F20090E006C0FC +:1009700021912093F100615070400196611571053D +:1009800019F088309105A0F321E08830910509F035 +:1009900020E08091E8008E778093E8006115710572 +:1009A00091F6222381F605C08EB3882361F085304D +:1009B00061F08091E80082FFF7CF80E0089583E046 +:1009C000089581E0089582E0089583E00895E82F76 +:1009D000F92F80916202909163028617970718F4AD +:1009E000BC0120E036C061157105D9F78091E8009F +:1009F0008E778093E800F5CF8EB3882309F43EC04C +:100A00008530C1F18091E80083FD36C08091E80017 +:100A100082FD2AC08091E80080FF1BC08091F20017 +:100A200090E007C024912093F1003196615070400E +:100A300001966115710519F08830910598F321E050 +:100A40008830910509F020E08091E8008E7780934E +:100A5000E8006115710581F6222371F605C08EB399 +:100A6000882361F0853061F08091E80082FFF7CF44 +:100A700080E0089583E0089581E0089582E008957C +:100A800083E00895982F2CC0292F2F702093E90020 +:100A9000981739F07091EC002091ED005091F00022 +:100AA00003C0242F762F50E021FF19C03091EB00B6 +:100AB0003E7F3093EB003091ED003D7F3093ED00B1 +:100AC0003091EB0031603093EB007093EC00209399 +:100AD000ED005093F0002091EE0027FF08C09F5FCB +:100AE000953090F28F708093E90081E0089580E066 +:100AF0000895EF92FF920F931F93CF93DF93162FDA +:100B0000E82EE7017E01F92EE70100E02AC0988176 +:100B1000992329F16B81E981FA812C81892F8F70CA +:100B2000853018F56295660F660F607C991F9927CE +:100B3000991F692B223010F096E001C092E028E066 +:100B400030E040E003C04F5F220F331F2E173F07F6 +:100B5000D0F34295407F492B95DF882331F00F5F1A +:100B600025960117A0F281E001C080E0DF91CF91CE +:100B70001F910F91FF90EF90089580915C0287FF85 +:100B800011C003C08EB38823B1F08091E80082FFCA +:100B9000F9CF8091E8008B778093E80008958EB3B9 +:100BA000882349F08091E80080FFF9CF8091E80028 +:100BB0008E778093E80008958091E4009091E5009D +:100BC00044E62091EC0020FF25C02091E80020FDA4 +:100BD00015C02EB32223A1F02530A1F02091EB0007 +:100BE00025FD12C02091E4003091E5002817390757 +:100BF00041F3442359F04150C901E3CF80E0089507 +:100C000082E0089583E0089581E0089584E00895E6 +:100C100080E008952091E80022FFDBCFF9CF40D09B +:100C200042D08091D8008F778093D8008091D800EF +:100C300080688093D8008091D8008F7D8093D80001 +:100C400084E089BD86E089BD09B400FEFDCF1EBAEF +:100C50001092580210925A021092590280E060E0FD +:100C600042E010DF8091E1008E7F8093E10080916F +:100C7000E20081608093E2008091E20088608093CE +:100C8000E2008091E0008E7F8093E0000895E3E62B +:100C9000F0E080818E7F808381E080935B02BFCF14 +:100CA0001092E20008951092E10008951F920F92B1 +:100CB0000FB60F9211242F933F934F935F936F932F +:100CC0007F938F939F93AF93BF93EF93FF93809105 +:100CD000E10082FF0AC08091E20082FF06C080919D +:100CE000E1008B7F8093E10021D28091E10080FFC1 +:100CF00016C08091E20080FF12C08091E2008E7FDA +:100D00008093E2008091E20080618093E200809114 +:100D1000D80080628093D80019BC1EBA49DC80914B +:100D2000E10084FF2CC08091E20084FF28C084E0B1 +:100D300089BD86E089BD09B400FEFDCF8091D80051 +:100D40008F7D8093D8008091E1008F7E8093E100B9 +:100D50008091E2008F7E8093E2008091E2008160CA +:100D60008093E20080915802882321F48091E3006F +:100D700087FF02C084E001C081E08EBB18DC809157 +:100D8000E10083FF26C08091E20083FF22C08091B2 +:100D9000E100877F8093E10082E08EBB10925802D1 +:100DA0008091E1008E7F8093E1008091E2008E7F50 +:100DB0008093E2008091E20080618093E20080E015 +:100DC00060E042E05FDE8091F00088608093F00098 +:100DD000ADD1FF91EF91BF91AF919F918F917F9195 +:100DE0006F915F914F913F912F910F900FBE0F9098 +:100DF0001F9018951F920F920FB60F9211241F93F8 +:100E00002F933F934F935F936F937F938F939F9312 +:100E1000AF93BF93EF93FF931091E9001F70809100 +:100E2000EC001092E9008091F000877F8093F00041 +:100E300078941BD01092E9008091F0008860809334 +:100E4000F0001093E900FF91EF91BF91AF919F9156 +:100E50008F917F916F915F914F913F912F911F9152 +:100E60000F900FBE0F901F9018951F93DF93CF9395 +:100E7000CDB7DEB7AC970FB6F894DEBF0FBECDBFCF +:100E8000ECE5F2E08091F100819322E0E436F20794 +:100E9000C9F792DB8091E80083FF30C180915C024A +:100EA00020915D02253009F484C0263040F42130C1 +:100EB000A1F1213070F0233009F020C12EC028307C +:100EC00009F4EFC0293009F4FEC0263009F016C13C +:100ED00092C0803821F0823809F010C108C080919A +:100EE000590290915A02992371F082600CC080914E +:100EF00060028F708093E9009091EB0081E095FF94 +:100F000080E01092E9009091E800977F9093E800CC +:100F10008093F1001092F100CFC0882319F0823045 +:100F200009F0ECC090E08F719070009729F082304A +:100F3000910509F0E3C00BC080915E02813009F099 +:100F4000DDC0233009F080E080935A022CC08091EC +:100F50005E02882341F5209160022F7009F4CEC013 +:100F60002093E9008091EB0080FF1DC080915D021D +:100F7000833021F48091EB00806213C08091EB00FC +:100F800080618093EB0081E090E002C0880F991FA0 +:100F90002A95E2F78093EA001092EA008091EB0034 +:100FA00088608093EB001092E9008091E800877FD1 +:100FB00086C0882309F0A2C010915E021F7780913D +:100FC000E3008078812B8093E3008091E800877FA5 +:100FD0008093E800D2DD8091E80080FFFCCF809113 +:100FE000E30080688093E300112311F083E001C0E7 +:100FF00082E08EBB83C08058823008F07FC0809131 +:101000005E0290915F0223E08C3D920791F583E0B0 +:101010008C838AE28B835FB7F894DE01159680E0BB +:1010200090E04EE061E2E42FF0E060935700E4913D +:1010300080FF03C0E295EF704F5FEF702E2F30E01E +:10104000EA3018F0295C3F4F02C0205D3F4F2D93DE +:101050003D9301968431910531F75FBF8091E8009F +:10106000877F8093E800CE0103966AE270E055DC4A +:1010700012C060916002AE014F5F5F4F21DCBC0186 +:10108000009709F43BC08091E800877F8093E800D7 +:1010900089819A819CDC8091E8008B778093E800BD +:1010A0002DC0803859F58091E800877F8093E80053 +:1010B000809158028093F1008091E8008E778093B0 +:1010C000E8005BDD1BC08823C9F490915E0292307A +:1010D000A8F48091E800877F8093E80090935802FD +:1010E0004CDD80915802882321F48091E30087FF32 +:1010F00002C084E001C081E08EBB5BDA8091E80031 +:1011000083FF0AC08091E800877F8093E800809188 +:10111000EB0080628093EB00AC960FB6F894DEBFD4 +:101120000FBECDBFCF91DF911F91089508951F93FA +:101130008EB38823A9F08091E9008F709091EC0024 +:1011400090FF02C010E801C010E0182B1092E900D7 +:101150008091E80083FF01C088DE1F701093E900D2 +:101160001F910895CF93DF93EC018091E80083FFF6 +:10117000A2C0888190E0209160023091610228171E +:10118000390709F098C080915D02813269F082329E +:1011900020F4803209F08FC03CC0823209F46AC06A +:1011A000833209F088C079C080915C02813A09F0ED +:1011B00082C08091E800877F8093E8008091E800FA +:1011C00080FFFCCF8C899D89AE89BF898093F10017 +:1011D000292F3A2F4B2F55272093F1009D014427AB +:1011E00055272093F1008B2F9927AA27BB2780939F +:1011F000F100888D8093F100898D8093F1008A8DB4 +:101200008093F1008091E8008E778093E800B5DC50 +:1012100052C080915C02813209F04DC08091E8009B +:10122000877F8093E80004C08EB3882309F443C00D +:101230008091E80082FFF8CF3091F1002091F10019 +:101240009091F1008091F1003C8B2D8B9E8B8F8BC8 +:101250008091F100888F8091F100898F8091F10059 +:101260008A8F8091E8008B778093E80086DCCE013E +:10127000D0D921C080915C028132E9F48091E800EC +:10128000877F8093E80079DC80915E0290915F0215 +:10129000998B888BCE01D4D00EC080915C028132B4 +:1012A00051F48091E800877F8093E80066DCCE01EE +:1012B00060915E02C5D0DF91CF910895CF93DF9307 +:1012C000EC014096FC018BE0DF011D928A95E9F765 +:1012D00082E08C83898783E08E87CE01019661E06E +:1012E00008DC882359F0CE01069661E002DC8823F1 +:1012F00029F0CE010B9661E0FCDB01C080E0DF91BC +:10130000CF910895DF93CF930F92CDB7DEB7FC0155 +:101310008EB38430F9F4248935894689578921159B +:10132000310541055105B1F081818F708093E9004D +:101330008091E80085FD0AC08091E8008E77809357 +:10134000E800698339DC6981882329F46093F1001E +:1013500080E001C082E00F90CF91DF910895FC0101 +:101360008EB3843019F5248935894689578921152A +:10137000310541055105D1F081818F708093E900DD +:101380008091F2008823A1F09091E8008091E8001C +:101390008E778093E80095FD0DC00EDC882359F40C +:1013A0009091E8009E779093E800089582E0089578 +:1013B00080E0089580E008952EB3243099F4FC0174 +:1013C00024893589468957892115310541055105FB +:1013D00049F021812F702093E9002091E80020FF3F +:1013E00001C0BDCF0895FC018EB3843029F5248956 +:1013F0003589468957892115310541055105E1F0A7 +:1014000086818F708093E9008091E80082FF14C08C +:101410008091F200882321F02091F10030E002C099 +:101420002FEF3FEF8091F200882341F48091E80094 +:101430008B778093E80002C02FEF3FEFC90108953A +:1014400008955058BB27AA270ED070C161D130F043 +:1014500066D120F031F49F3F11F41EF456C10EF412 +:10146000E095E7FB4CC1E92F72D180F3BA17620710 +:1014700073078407950718F071F49EF58AC10EF47E +:10148000E0950B2EBA2FA02D0B01B90190010C0194 +:10149000CA01A0011124FF27591B99F0593F50F4AC +:1014A000503E68F11A16F040A22F232F342F442704 +:1014B000585FF3CF469537952795A795F0405395FC +:1014C000C9F77EF41F16BA0B620B730B840BBAF0CC +:1014D0009150A1F0FF0FBB1F661F771F881FC2F737 +:1014E0000EC0BA0F621F731F841F48F4879577954B +:1014F0006795B795F7959E3F08F0B3CF9395880F02 +:1015000008F09927EE0F979587950895D4D008F4A1 +:1015100081E008950CD00AC102D140F0F9D030F03A +:1015200021F45F3F19F0EBC0511134C1EEC00FD16F +:1015300098F39923C9F35523B1F3951B550BBB279A +:10154000AA2762177307840738F09F5F5F4F220F47 +:10155000331F441FAA1FA9F333D00E2E3AF0E0E840 +:1015600030D091505040E695001CCAF729D0FE2F8C +:1015700027D0660F771F881FBB1F2617370748071E +:10158000AB07B0E809F0BB0B802DBF01FF279358D4 +:101590005F4F2AF09E3F510568F0B1C0FBC05F3F2E +:1015A000ECF3983EDCF3869577956795B795F795BC +:1015B0009F5FC9F7880F911D9695879597F90895B4 +:1015C000E1E0660F771F881FBB1F62177307840750 +:1015D000BA0720F0621B730B840BBA0BEE1F88F75F +:1015E000E0950895BCD088F09F5790F0B92F9927C7 +:1015F000B751A0F0D1F0660F771F881F991F1AF01E +:10160000BA95C9F712C0B13081F0C3D0B1E00895E6 +:10161000C0C0672F782F8827B85F39F0B93FCCF367 +:10162000869577956795B395D9F73EF49095809513 +:10163000709561957F4F8F4F9F4F0895E89409C033 +:1016400097FB3EF490958095709561957F4F8F4FF5 +:101650009F4F9923A9F0F92F96E9BB279395F6950B +:10166000879577956795B795F111F8CFFAF4BB0F89 +:1016700011F460FF1BC06F5F7F4F8F4F9F4F16C0ED +:10168000882311F096E911C0772321F09EE8872F77 +:10169000762F05C0662371F096E8862F70E060E033 +:1016A0002AF09A95660F771F881FDAF7880F9695AC +:1016B000879597F90895990F0008550FAA0BE0E850 +:1016C000FEEF16161706E807F907C0F01216130604 +:1016D000E407F50798F0621B730B840B950B39F444 +:1016E0000A2661F0232B242B252B21F408950A26AA +:1016F00009F4A140A6958FEF811D811D089597F9EA +:101700009F6780E870E060E008959FEF80EC0895A7 +:1017100000240A94161617061806090608950024D0 +:101720000A9412161306140605060895092E03944A +:10173000000C11F4882352F0BB0F40F4BF2B11F4BE +:1017400060FF04C06F5F7F4F8F4F9F4F089557FD1D +:101750009058440F551F59F05F3F71F04795880F1F +:1017600097FB991F61F09F3F79F0879508951216B6 +:1017700013061406551FF2CF4695F1DF08C0161662 +:1017800017061806991FF1CF869571056105089413 +:101790000895E894BB2766277727CB0197F908952A +:1017A0008ADF08F48FEF0895A1E21A2EAA1BBB1B53 +:1017B000FD010DC0AA1FBB1FEE1FFF1FA217B3071D +:1017C000E407F50720F0A21BB30BE40BF50B661F33 +:1017D000771F881F991F1A9469F7609570958095F7 +:1017E00090959B01AC01BD01CF010895F894FFCF06 +:1017F000785F706F733A200009795F706F733A20D9 +:10180000000D000083100000010410000001820898 +:101810000000010000000000000000000000302077 :00000001FF diff --git a/firmware/USBtoSerial.lss b/firmware/USBtoSerial.lss index e0c487b..c0381d3 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 0000006e 00800100 00001816 000018aa 2**0 + 0 .data 00000030 00800100 000017f0 00001884 2**0 CONTENTS, ALLOC, LOAD, DATA - 1 .text 00001816 00000000 00000000 00000094 2**1 + 1 .text 000017f0 00000000 00000000 00000094 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE - 2 .bss 00000134 0080016e 0080016e 00001918 2**0 + 2 .bss 00000134 00800130 00800130 000018b4 2**0 ALLOC - 3 .stab 0000228c 00000000 00000000 00001918 2**2 + 3 .stab 0000228c 00000000 00000000 000018b4 2**2 CONTENTS, READONLY, DEBUGGING - 4 .stabstr 0000044f 00000000 00000000 00003ba4 2**0 + 4 .stabstr 0000044f 00000000 00000000 00003b40 2**0 CONTENTS, READONLY, DEBUGGING - 5 .debug_aranges 00000538 00000000 00000000 00003ff3 2**0 + 5 .debug_aranges 00000538 00000000 00000000 00003f8f 2**0 CONTENTS, READONLY, DEBUGGING - 6 .debug_pubnames 00000e11 00000000 00000000 0000452b 2**0 + 6 .debug_pubnames 00000e11 00000000 00000000 000044c7 2**0 CONTENTS, READONLY, DEBUGGING - 7 .debug_info 00008cae 00000000 00000000 0000533c 2**0 + 7 .debug_info 00008caa 00000000 00000000 000052d8 2**0 CONTENTS, READONLY, DEBUGGING - 8 .debug_abbrev 000021b9 00000000 00000000 0000dfea 2**0 + 8 .debug_abbrev 000021b9 00000000 00000000 0000df82 2**0 CONTENTS, READONLY, DEBUGGING - 9 .debug_line 000075f0 00000000 00000000 000101a3 2**0 + 9 .debug_line 000075c3 00000000 00000000 0001013b 2**0 CONTENTS, READONLY, DEBUGGING - 10 .debug_frame 00000830 00000000 00000000 00017794 2**2 + 10 .debug_frame 00000830 00000000 00000000 00017700 2**2 CONTENTS, READONLY, DEBUGGING - 11 .debug_str 00003bf7 00000000 00000000 00017fc4 2**0 + 11 .debug_str 00003bf7 00000000 00000000 00017f30 2**0 CONTENTS, READONLY, DEBUGGING - 12 .debug_loc 0000464d 00000000 00000000 0001bbbb 2**0 + 12 .debug_loc 0000462f 00000000 00000000 0001bb27 2**0 CONTENTS, READONLY, DEBUGGING - 13 .debug_pubtypes 00001111 00000000 00000000 00020208 2**0 + 13 .debug_pubtypes 00001111 00000000 00000000 00020156 2**0 CONTENTS, READONLY, DEBUGGING - 14 .debug_ranges 00000790 00000000 00000000 00021319 2**0 + 14 .debug_ranges 00000790 00000000 00000000 00021267 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: 52 c6 rjmp .+3236 ; 0xcd2 <__vector_11> + 2c: 3f c6 rjmp .+3198 ; 0xcac <__vector_11> 2e: 00 00 nop - 30: f4 c6 rjmp .+3560 ; 0xe1a <__vector_12> + 30: e1 c6 rjmp .+3522 ; 0xdf4 <__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: a6 c2 rjmp .+1356 ; 0x5aa <__vector_23> + 5c: b0 c2 rjmp .+1376 ; 0x5be <__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: e6 e1 ldi r30, 0x16 ; 22 - 14a: f8 e1 ldi r31, 0x18 ; 24 + 148: e0 ef ldi r30, 0xF0 ; 240 + 14a: f7 e1 ldi r31, 0x17 ; 23 14c: 02 c0 rjmp .+4 ; 0x152 <__do_copy_data+0x10> 14e: 05 90 lpm r0, Z+ 150: 0d 92 st X+, r0 - 152: ae 36 cpi r26, 0x6E ; 110 + 152: a0 33 cpi r26, 0x30 ; 48 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: ae e6 ldi r26, 0x6E ; 110 + 15a: a0 e3 ldi r26, 0x30 ; 48 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: a2 3a cpi r26, 0xA2 ; 162 + 162: a4 36 cpi r26, 0x64 ; 100 164: b1 07 cpc r27, r17 166: e1 f7 brne .-8 ; 0x160 <.do_clear_bss_loop> - 168: 2d d3 rcall .+1626 ; 0x7c4
- 16a: 0c 94 09 0c jmp 0x1812 ; 0x1812 <_exit> + 168: 37 d3 rcall .+1646 ; 0x7d8
+ 16a: 0c 94 f6 0b jmp 0x17ec ; 0x17ec <_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 94 02 lds r24, 0x0294 + 20e: 80 91 56 02 lds r24, 0x0256 212: 8f 5f subi r24, 0xFF ; 255 - 214: 80 93 94 02 sts 0x0294, r24 + 214: 80 93 56 02 sts 0x0256, 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 94 02 lds r19, 0x0294 + 226: 30 91 56 02 lds r19, 0x0256 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 94 02 sts 0x0294, r1 + 236: 10 92 56 02 sts 0x0256, 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 31 0b call 0x1662 ; 0x1662 <__floatunsisf> + 25c: 0e 94 1e 0b call 0x163c ; 0x163c <__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 99 0a call 0x1532 ; 0x1532 <__cmpsf2> + 268: 0e 94 86 0a call 0x150c ; 0x150c <__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 31 0b call 0x1662 ; 0x1662 <__floatunsisf> + 288: 0e 94 1e 0b call 0x163c ; 0x163c <__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 99 0a call 0x1532 ; 0x1532 <__cmpsf2> + 294: 0e 94 86 0a call 0x150c ; 0x150c <__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 31 0b call 0x1662 ; 0x1662 <__floatunsisf> + 2a8: 0e 94 1e 0b call 0x163c ; 0x163c <__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 99 0a call 0x1532 ; 0x1532 <__cmpsf2> + 2b4: 0e 94 86 0a call 0x150c ; 0x150c <__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: 8b e8 ldi r24, 0x8B ; 139 + 2c8: 8d e4 ldi r24, 0x4D ; 77 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 31 0b call 0x1662 ; 0x1662 <__floatunsisf> + 2e6: 0e 94 1e 0b call 0x163c ; 0x163c <__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 99 0a call 0x1532 ; 0x1532 <__cmpsf2> + 2f2: 0e 94 86 0a call 0x150c ; 0x150c <__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 31 0b call 0x1662 ; 0x1662 <__floatunsisf> + 304: 0e 94 1e 0b call 0x163c ; 0x163c <__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 99 0a call 0x1532 ; 0x1532 <__cmpsf2> + 310: 0e 94 86 0a call 0x150c ; 0x150c <__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 31 0b call 0x1662 ; 0x1662 <__floatunsisf> + 324: 0e 94 1e 0b call 0x163c ; 0x163c <__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 99 0a call 0x1532 ; 0x1532 <__cmpsf2> + 330: 0e 94 86 0a call 0x150c ; 0x150c <__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 31 0b call 0x1662 ; 0x1662 <__floatunsisf> + 354: 0e 94 1e 0b call 0x163c ; 0x163c <__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 99 0a call 0x1532 ; 0x1532 <__cmpsf2> + 360: 0e 94 86 0a call 0x150c ; 0x150c <__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 31 0b call 0x1662 ; 0x1662 <__floatunsisf> + 374: 0e 94 1e 0b call 0x163c ; 0x163c <__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 99 0a call 0x1532 ; 0x1532 <__cmpsf2> + 380: 0e 94 86 0a call 0x150c ; 0x150c <__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 8b 02 lds r24, 0x028B + 388: 80 91 4d 02 lds r24, 0x024D 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 31 0b call 0x1662 ; 0x1662 <__floatunsisf> + 3ae: 0e 94 1e 0b call 0x163c ; 0x163c <__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 e3 0b call 0x17c6 ; 0x17c6 <__gesf2> + 3ba: 0e 94 d0 0b call 0x17a0 ; 0x17a0 <__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: cc e8 ldi r28, 0x8C ; 140 + 3cc: ce e4 ldi r28, 0x4E ; 78 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 31 0b call 0x1662 ; 0x1662 <__floatunsisf> + 3ea: 0e 94 1e 0b call 0x163c ; 0x163c <__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 e3 0b call 0x17c6 ; 0x17c6 <__gesf2> + 3f6: 0e 94 d0 0b call 0x17a0 ; 0x17a0 <__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 31 0b call 0x1662 ; 0x1662 <__floatunsisf> + 414: 0e 94 1e 0b call 0x163c ; 0x163c <__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 99 0a call 0x1532 ; 0x1532 <__cmpsf2> + 420: 0e 94 86 0a call 0x150c ; 0x150c <__cmpsf2> 424: 87 ff sbrs r24, 7 426: 03 c0 rjmp .+6 ; 0x42e adb_werte[z_byte] += bitpos; @@ -874,4875 +874,4855 @@ void touchpad_init(void) { uint8_t touchpad_read(void) { adb_werte[0] = COM_TALK0; 46c: 8c e3 ldi r24, 0x3C ; 60 - 46e: 80 93 8b 02 sts 0x028B, r24 + 46e: 80 93 4d 02 sts 0x024D, r24 adb_data_length = adb(); 472: e4 de rcall .-568 ; 0x23c - 474: 80 93 95 02 sts 0x0295, r24 + 474: 80 93 57 02 sts 0x0257, r24 return adb_data_length; - 478: 80 91 95 02 lds r24, 0x0295 + 478: 80 91 57 02 lds r24, 0x0257 } 47c: 08 95 ret -0000047e : +0000047e : + +} + +void touchpad_set_rel_mode_200dpi(void) { + // Auf Relativmodus umschalten + adb_werte[0] = COM_LISTEN3; + 47e: 8b e3 ldi r24, 0x3B ; 59 + 480: 80 93 4d 02 sts 0x024D, r24 + adb_werte[1] = BITS(0110,0011); + 484: 83 e6 ldi r24, 0x63 ; 99 + 486: 80 93 4e 02 sts 0x024E, r24 + adb_werte[2] = 2; //200 dpi mouse + 48a: 82 e0 ldi r24, 0x02 ; 2 + 48c: 80 93 4f 02 sts 0x024F, r24 + adb(); + +} + 490: d5 ce rjmp .-598 ; 0x23c + +00000492 : return ((adb_werte[4] & 0b01110000) << 6) | ((adb_werte[3] & 0b01110000) << 3) | (adb_werte[1] & 0b01111111); } int8_t delta_y(void) { if(adb_data_length ==0) { - 47e: 80 91 95 02 lds r24, 0x0295 - 482: 88 23 and r24, r24 - 484: 51 f0 breq .+20 ; 0x49a + 492: 80 91 57 02 lds r24, 0x0257 + 496: 88 23 and r24, r24 + 498: 51 f0 breq .+20 ; 0x4ae return 0; } if (adb_werte[1] & 0b01000000) { - 486: 80 91 8c 02 lds r24, 0x028C - 48a: 86 ff sbrs r24, 6 - 48c: 04 c0 rjmp .+8 ; 0x496 + 49a: 80 91 4e 02 lds r24, 0x024E + 49e: 86 ff sbrs r24, 6 + 4a0: 04 c0 rjmp .+8 ; 0x4aa return -((128 - adb_werte[1]) & 0b00111111); - 48e: 81 95 neg r24 - 490: 8f 73 andi r24, 0x3F ; 63 - 492: 81 95 neg r24 - 494: 08 95 ret + 4a2: 81 95 neg r24 + 4a4: 8f 73 andi r24, 0x3F ; 63 + 4a6: 81 95 neg r24 + 4a8: 08 95 ret } else { return adb_werte[1] & 0b00111111; - 496: 8f 73 andi r24, 0x3F ; 63 - 498: 08 95 ret + 4aa: 8f 73 andi r24, 0x3F ; 63 + 4ac: 08 95 ret | ((adb_werte[3] & 0b01110000) << 3) | (adb_werte[1] & 0b01111111); } int8_t delta_y(void) { if(adb_data_length ==0) { return 0; - 49a: 80 e0 ldi r24, 0x00 ; 0 + 4ae: 80 e0 ldi r24, 0x00 ; 0 if (adb_werte[1] & 0b01000000) { return -((128 - adb_werte[1]) & 0b00111111); } else { return adb_werte[1] & 0b00111111; } } - 49c: 08 95 ret + 4b0: 08 95 ret -0000049e : +000004b2 : int8_t delta_x(void) { if(adb_data_length ==0) { - 49e: 80 91 95 02 lds r24, 0x0295 - 4a2: 88 23 and r24, r24 - 4a4: 51 f0 breq .+20 ; 0x4ba + 4b2: 80 91 57 02 lds r24, 0x0257 + 4b6: 88 23 and r24, r24 + 4b8: 51 f0 breq .+20 ; 0x4ce return 0; } if (adb_werte[2] & 0b01000000) { - 4a6: 80 91 8d 02 lds r24, 0x028D - 4aa: 86 ff sbrs r24, 6 - 4ac: 04 c0 rjmp .+8 ; 0x4b6 + 4ba: 80 91 4f 02 lds r24, 0x024F + 4be: 86 ff sbrs r24, 6 + 4c0: 04 c0 rjmp .+8 ; 0x4ca return -((128 - adb_werte[2]) & 0b00111111); - 4ae: 81 95 neg r24 - 4b0: 8f 73 andi r24, 0x3F ; 63 - 4b2: 81 95 neg r24 - 4b4: 08 95 ret + 4c2: 81 95 neg r24 + 4c4: 8f 73 andi r24, 0x3F ; 63 + 4c6: 81 95 neg r24 + 4c8: 08 95 ret } else { return adb_werte[2] & 0b00111111; - 4b6: 8f 73 andi r24, 0x3F ; 63 - 4b8: 08 95 ret + 4ca: 8f 73 andi r24, 0x3F ; 63 + 4cc: 08 95 ret } } int8_t delta_x(void) { if(adb_data_length ==0) { return 0; - 4ba: 80 e0 ldi r24, 0x00 ; 0 + 4ce: 80 e0 ldi r24, 0x00 ; 0 if (adb_werte[2] & 0b01000000) { return -((128 - adb_werte[2]) & 0b00111111); } else { return adb_werte[2] & 0b00111111; } } - 4bc: 08 95 ret + 4d0: 08 95 ret -000004be : +000004d2 : void Usb2SerialTask(void) { - 4be: 1f 93 push r17 + 4d2: 1f 93 push r17 static inline uint_reg_t GetGlobalInterruptMask(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) return SREG; - 4c0: 8f b7 in r24, 0x3f ; 63 + 4d4: 8f b7 in r24, 0x3f ; 63 static inline void GlobalInterruptDisable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) cli(); - 4c2: f8 94 cli + 4d6: f8 94 cli uint16_t Count; uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); GlobalInterruptDisable(); Count = Buffer->Count; - 4c4: 20 91 78 01 lds r18, 0x0178 - 4c8: 30 91 79 01 lds r19, 0x0179 + 4d8: 20 91 3a 01 lds r18, 0x013A + 4dc: 30 91 3b 01 lds r19, 0x013B static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) SREG = GlobalIntState; - 4cc: 8f bf out 0x3f, r24 ; 63 + 4e0: 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))) - 4ce: 80 91 76 01 lds r24, 0x0176 - 4d2: 90 91 77 01 lds r25, 0x0177 - 4d6: 28 17 cp r18, r24 - 4d8: 39 07 cpc r19, r25 - 4da: 49 f0 breq .+18 ; 0x4ee + 4e2: 80 91 38 01 lds r24, 0x0138 + 4e6: 90 91 39 01 lds r25, 0x0139 + 4ea: 28 17 cp r18, r24 + 4ec: 39 07 cpc r19, r25 + 4ee: 49 f0 breq .+18 ; 0x502 <__stack+0x3> { int16_t ReceivedByte = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface); - 4dc: 80 e5 ldi r24, 0x50 ; 80 - 4de: 91 e0 ldi r25, 0x01 ; 1 - 4e0: 95 d7 rcall .+3882 ; 0x140c - 4e2: bc 01 movw r22, r24 + 4f0: 83 e1 ldi r24, 0x13 ; 19 + 4f2: 91 e0 ldi r25, 0x01 ; 1 + 4f4: 78 d7 rcall .+3824 ; 0x13e6 + 4f6: bc 01 movw r22, r24 /* Read bytes from the USB OUT endpoint into the USART transmit buffer */ if (!(ReceivedByte < 0)) - 4e4: 97 fd sbrc r25, 7 - 4e6: 03 c0 rjmp .+6 ; 0x4ee + 4f8: 97 fd sbrc r25, 7 + 4fa: 03 c0 rjmp .+6 ; 0x502 <__stack+0x3> RingBuffer_Insert(&USBtoUSART_Buffer, ReceivedByte); - 4e8: 8e e6 ldi r24, 0x6E ; 110 - 4ea: 91 e0 ldi r25, 0x01 ; 1 - 4ec: 41 de rcall .-894 ; 0x170 + 4fc: 80 e3 ldi r24, 0x30 ; 48 + 4fe: 91 e0 ldi r25, 0x01 ; 1 + 500: 37 de rcall .-914 ; 0x170 static inline uint_reg_t GetGlobalInterruptMask(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) return SREG; - 4ee: 2f b7 in r18, 0x3f ; 63 + 502: 2f b7 in r18, 0x3f ; 63 static inline void GlobalInterruptDisable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) cli(); - 4f0: f8 94 cli - 4f2: 80 91 04 02 lds r24, 0x0204 - 4f6: 90 91 05 02 lds r25, 0x0205 + 504: f8 94 cli + 506: 80 91 c6 01 lds r24, 0x01C6 + 50a: 90 91 c7 01 lds r25, 0x01C7 static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) SREG = GlobalIntState; - 4fa: 2f bf out 0x3f, r18 ; 63 + 50e: 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) - 4fc: 00 97 sbiw r24, 0x00 ; 0 - 4fe: 01 f1 breq .+64 ; 0x540 <__stack+0x41> + 510: 00 97 sbiw r24, 0x00 ; 0 + 512: 01 f1 breq .+64 ; 0x554 <__stack+0x55> */ 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); - 500: 20 91 51 01 lds r18, 0x0151 - 504: 2f 70 andi r18, 0x0F ; 15 - 506: 20 93 e9 00 sts 0x00E9, r18 + 514: 20 91 14 01 lds r18, 0x0114 + 518: 2f 70 andi r18, 0x0F ; 15 + 51a: 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); - 50a: 20 91 e8 00 lds r18, 0x00E8 + 51e: 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()) - 50e: 20 ff sbrs r18, 0 - 510: 17 c0 rjmp .+46 ; 0x540 <__stack+0x41> + 522: 20 ff sbrs r18, 0 + 524: 17 c0 rjmp .+46 ; 0x554 <__stack+0x55> { /* 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)); - 512: 80 31 cpi r24, 0x10 ; 16 - 514: 91 05 cpc r25, r1 - 516: 10 f0 brcs .+4 ; 0x51c <__stack+0x1d> - 518: 8f e0 ldi r24, 0x0F ; 15 - 51a: 90 e0 ldi r25, 0x00 ; 0 - 51c: 18 2f mov r17, r24 + 526: 80 31 cpi r24, 0x10 ; 16 + 528: 91 05 cpc r25, r1 + 52a: 10 f0 brcs .+4 ; 0x530 <__stack+0x31> + 52c: 8f e0 ldi r24, 0x0F ; 15 + 52e: 90 e0 ldi r25, 0x00 ; 0 + 530: 18 2f mov r17, r24 /* Read bytes from the USART receive buffer into the USB IN endpoint */ while (BytesToSend--) - 51e: 0e c0 rjmp .+28 ; 0x53c <__stack+0x3d> + 532: 0e c0 rjmp .+28 ; 0x550 <__stack+0x51> * \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; - 520: e0 91 fc 01 lds r30, 0x01FC - 524: f0 91 fd 01 lds r31, 0x01FD + 534: e0 91 be 01 lds r30, 0x01BE + 538: f0 91 bf 01 lds r31, 0x01BF { /* 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, - 528: 80 e5 ldi r24, 0x50 ; 80 - 52a: 91 e0 ldi r25, 0x01 ; 1 - 52c: 60 81 ld r22, Z - 52e: fd d6 rcall .+3578 ; 0x132a - 530: 11 50 subi r17, 0x01 ; 1 - 532: 88 23 and r24, r24 - 534: 29 f4 brne .+10 ; 0x540 <__stack+0x41> + 53c: 83 e1 ldi r24, 0x13 ; 19 + 53e: 91 e0 ldi r25, 0x01 ; 1 + 540: 60 81 ld r22, Z + 542: e0 d6 rcall .+3520 ; 0x1304 + 544: 11 50 subi r17, 0x01 ; 1 + 546: 88 23 and r24, r24 + 548: 29 f4 brne .+10 ; 0x554 <__stack+0x55> { break; } /* Dequeue the already sent byte from the buffer now we have confirmed that no transmission error occurred */ RingBuffer_Remove(&USARTtoUSB_Buffer); - 536: 8a ef ldi r24, 0xFA ; 250 - 538: 91 e0 ldi r25, 0x01 ; 1 - 53a: 35 de rcall .-918 ; 0x1a6 + 54a: 8c eb ldi r24, 0xBC ; 188 + 54c: 91 e0 ldi r25, 0x01 ; 1 + 54e: 2b de rcall .-938 ; 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--) - 53c: 11 23 and r17, r17 - 53e: 81 f7 brne .-32 ; 0x520 <__stack+0x21> + 550: 11 23 and r17, r17 + 552: 81 f7 brne .-32 ; 0x534 <__stack+0x35> static inline uint_reg_t GetGlobalInterruptMask(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) return SREG; - 540: 2f b7 in r18, 0x3f ; 63 + 554: 2f b7 in r18, 0x3f ; 63 static inline void GlobalInterruptDisable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) cli(); - 542: f8 94 cli + 556: f8 94 cli uint16_t Count; uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); GlobalInterruptDisable(); Count = Buffer->Count; - 544: 80 91 78 01 lds r24, 0x0178 - 548: 90 91 79 01 lds r25, 0x0179 + 558: 80 91 3a 01 lds r24, 0x013A + 55c: 90 91 3b 01 lds r25, 0x013B static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) SREG = GlobalIntState; - 54c: 2f bf out 0x3f, r18 ; 63 + 560: 2f bf out 0x3f, r18 ; 63 } } } /* Load the next byte from the USART transmit buffer into the USART */ if (!(RingBuffer_IsEmpty(&USBtoUSART_Buffer))) { - 54e: 00 97 sbiw r24, 0x00 ; 0 - 550: 49 f0 breq .+18 ; 0x564 <__stack+0x65> + 562: 00 97 sbiw r24, 0x00 ; 0 + 564: 49 f0 breq .+18 ; 0x578 <__stack+0x79> Serial_SendByte(RingBuffer_Remove(&USBtoUSART_Buffer)); - 552: 8e e6 ldi r24, 0x6E ; 110 - 554: 91 e0 ldi r25, 0x01 ; 1 - 556: 27 de rcall .-946 ; 0x1a6 + 566: 80 e3 ldi r24, 0x30 ; 48 + 568: 91 e0 ldi r25, 0x01 ; 1 + 56a: 1d de rcall .-966 ; 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))); - 558: 90 91 c8 00 lds r25, 0x00C8 - 55c: 95 ff sbrs r25, 5 - 55e: fc cf rjmp .-8 ; 0x558 <__stack+0x59> + 56c: 90 91 c8 00 lds r25, 0x00C8 + 570: 95 ff sbrs r25, 5 + 572: fc cf rjmp .-8 ; 0x56c <__stack+0x6d> UDR1 = DataByte; - 560: 80 93 ce 00 sts 0x00CE, r24 + 574: 80 93 ce 00 sts 0x00CE, r24 // dummy = RingBuffer_Remove(&USBtoUSART_Buffer); // sendPayload(&dummy,1,0); } CDC_Device_USBTask(&VirtualSerial_CDC_Interface); - 564: 80 e5 ldi r24, 0x50 ; 80 - 566: 91 e0 ldi r25, 0x01 ; 1 - 568: 3a d7 rcall .+3700 ; 0x13de + 578: 83 e1 ldi r24, 0x13 ; 19 + 57a: 91 e0 ldi r25, 0x01 ; 1 + 57c: 1d d7 rcall .+3642 ; 0x13b8 USB_USBTask(); - 56a: f4 d5 rcall .+3048 ; 0x1154 + 57e: d7 d5 rcall .+2990 ; 0x112e } - 56c: 1f 91 pop r17 - 56e: 08 95 ret + 580: 1f 91 pop r17 + 582: 08 95 ret -00000570 : +00000584 : /** 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); - 570: 84 b7 in r24, 0x34 ; 52 - 572: 87 7f andi r24, 0xF7 ; 247 - 574: 84 bf out 0x34, r24 ; 52 + 584: 84 b7 in r24, 0x34 ; 52 + 586: 87 7f andi r24, 0xF7 ; 247 + 588: 84 bf out 0x34, r24 ; 52 wdt_disable(); - 576: 88 e1 ldi r24, 0x18 ; 24 - 578: 0f b6 in r0, 0x3f ; 63 - 57a: f8 94 cli - 57c: 80 93 60 00 sts 0x0060, r24 - 580: 10 92 60 00 sts 0x0060, r1 - 584: 0f be out 0x3f, r0 ; 63 + 58a: 88 e1 ldi r24, 0x18 ; 24 + 58c: 0f b6 in r0, 0x3f ; 63 + 58e: f8 94 cli + 590: 80 93 60 00 sts 0x0060, r24 + 594: 10 92 60 00 sts 0x0060, r1 + 598: 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__ ( - 586: 90 e0 ldi r25, 0x00 ; 0 - 588: 80 e8 ldi r24, 0x80 ; 128 - 58a: 0f b6 in r0, 0x3f ; 63 - 58c: f8 94 cli - 58e: 80 93 61 00 sts 0x0061, r24 - 592: 90 93 61 00 sts 0x0061, r25 - 596: 0f be out 0x3f, r0 ; 63 + 59a: 90 e0 ldi r25, 0x00 ; 0 + 59c: 80 e8 ldi r24, 0x80 ; 128 + 59e: 0f b6 in r0, 0x3f ; 63 + 5a0: f8 94 cli + 5a2: 80 93 61 00 sts 0x0061, r24 + 5a6: 90 93 61 00 sts 0x0061, r25 + 5aa: 0f be out 0x3f, r0 ; 63 clock_prescale_set(clock_div_1); /* Hardware Initialization */ // LEDs_Init(); USB_Init(); } - 598: 8d c3 rjmp .+1818 ; 0xcb4 + 5ac: 70 c3 rjmp .+1760 ; 0xc8e -0000059a : +000005ae : /** Event handler for the library USB Connection event. */ void EVENT_USB_Device_Connect(void) { // LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); } - 59a: 08 95 ret + 5ae: 08 95 ret -0000059c : +000005b0 : /** Event handler for the library USB Disconnection event. */ void EVENT_USB_Device_Disconnect(void) { // LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); } - 59c: 08 95 ret + 5b0: 08 95 ret -0000059e : +000005b2 : /** 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); - 59e: 80 e5 ldi r24, 0x50 ; 80 - 5a0: 91 e0 ldi r25, 0x01 ; 1 + 5b2: 83 e1 ldi r24, 0x13 ; 19 + 5b4: 91 e0 ldi r25, 0x01 ; 1 // LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); } - 5a2: 9f c6 rjmp .+3390 ; 0x12e2 + 5b6: 82 c6 rjmp .+3332 ; 0x12bc -000005a4 : +000005b8 : /** Event handler for the library USB Control Request reception event. */ void EVENT_USB_Device_ControlRequest(void) { CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface); - 5a4: 80 e5 ldi r24, 0x50 ; 80 - 5a6: 91 e0 ldi r25, 0x01 ; 1 + 5b8: 83 e1 ldi r24, 0x13 ; 19 + 5ba: 91 e0 ldi r25, 0x01 ; 1 } - 5a8: f0 c5 rjmp .+3040 ; 0x118a + 5bc: d3 c5 rjmp .+2982 ; 0x1164 -000005aa <__vector_23>: +000005be <__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) { - 5aa: 1f 92 push r1 - 5ac: 0f 92 push r0 - 5ae: 0f b6 in r0, 0x3f ; 63 - 5b0: 0f 92 push r0 - 5b2: 11 24 eor r1, r1 - 5b4: 2f 93 push r18 - 5b6: 3f 93 push r19 - 5b8: 4f 93 push r20 - 5ba: 5f 93 push r21 - 5bc: 6f 93 push r22 - 5be: 7f 93 push r23 - 5c0: 8f 93 push r24 - 5c2: 9f 93 push r25 - 5c4: af 93 push r26 - 5c6: bf 93 push r27 - 5c8: ef 93 push r30 - 5ca: ff 93 push r31 + 5be: 1f 92 push r1 + 5c0: 0f 92 push r0 + 5c2: 0f b6 in r0, 0x3f ; 63 + 5c4: 0f 92 push r0 + 5c6: 11 24 eor r1, r1 + 5c8: 2f 93 push r18 + 5ca: 3f 93 push r19 + 5cc: 4f 93 push r20 + 5ce: 5f 93 push r21 + 5d0: 6f 93 push r22 + 5d2: 7f 93 push r23 + 5d4: 8f 93 push r24 + 5d6: 9f 93 push r25 + 5d8: af 93 push r26 + 5da: bf 93 push r27 + 5dc: ef 93 push r30 + 5de: ff 93 push r31 uint8_t ReceivedByte = UDR1; - 5cc: 60 91 ce 00 lds r22, 0x00CE + 5e0: 60 91 ce 00 lds r22, 0x00CE if (USB_DeviceState == DEVICE_STATE_Configured) - 5d0: 8e b3 in r24, 0x1e ; 30 - 5d2: 84 30 cpi r24, 0x04 ; 4 - 5d4: 19 f4 brne .+6 ; 0x5dc <__vector_23+0x32> + 5e4: 8e b3 in r24, 0x1e ; 30 + 5e6: 84 30 cpi r24, 0x04 ; 4 + 5e8: 19 f4 brne .+6 ; 0x5f0 <__vector_23+0x32> RingBuffer_Insert(&USARTtoUSB_Buffer, ReceivedByte); - 5d6: 8a ef ldi r24, 0xFA ; 250 - 5d8: 91 e0 ldi r25, 0x01 ; 1 - 5da: ca dd rcall .-1132 ; 0x170 + 5ea: 8c eb ldi r24, 0xBC ; 188 + 5ec: 91 e0 ldi r25, 0x01 ; 1 + 5ee: c0 dd rcall .-1152 ; 0x170 } - 5dc: ff 91 pop r31 - 5de: ef 91 pop r30 - 5e0: bf 91 pop r27 - 5e2: af 91 pop r26 - 5e4: 9f 91 pop r25 - 5e6: 8f 91 pop r24 - 5e8: 7f 91 pop r23 - 5ea: 6f 91 pop r22 - 5ec: 5f 91 pop r21 - 5ee: 4f 91 pop r20 - 5f0: 3f 91 pop r19 - 5f2: 2f 91 pop r18 - 5f4: 0f 90 pop r0 - 5f6: 0f be out 0x3f, r0 ; 63 - 5f8: 0f 90 pop r0 - 5fa: 1f 90 pop r1 - 5fc: 18 95 reti - -000005fe : + 5f0: ff 91 pop r31 + 5f2: ef 91 pop r30 + 5f4: bf 91 pop r27 + 5f6: af 91 pop r26 + 5f8: 9f 91 pop r25 + 5fa: 8f 91 pop r24 + 5fc: 7f 91 pop r23 + 5fe: 6f 91 pop r22 + 600: 5f 91 pop r21 + 602: 4f 91 pop r20 + 604: 3f 91 pop r19 + 606: 2f 91 pop r18 + 608: 0f 90 pop r0 + 60a: 0f be out 0x3f, r0 ; 63 + 60c: 0f 90 pop r0 + 60e: 1f 90 pop r1 + 610: 18 95 reti + +00000612 : /** 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) { - 5fe: 8f 92 push r8 - 600: 9f 92 push r9 - 602: af 92 push r10 - 604: bf 92 push r11 - 606: cf 92 push r12 - 608: df 92 push r13 - 60a: ef 92 push r14 - 60c: ff 92 push r15 - 60e: 1f 93 push r17 - 610: fc 01 movw r30, r24 + 612: 8f 92 push r8 + 614: 9f 92 push r9 + 616: af 92 push r10 + 618: bf 92 push r11 + 61a: cf 92 push r12 + 61c: df 92 push r13 + 61e: ef 92 push r14 + 620: ff 92 push r15 + 622: 1f 93 push r17 + 624: fc 01 movw r30, r24 uint8_t ConfigMask = 0; switch (CDCInterfaceInfo->State.LineEncoding.ParityType) - 612: a1 8d ldd r26, Z+25 ; 0x19 - 614: a1 50 subi r26, 0x01 ; 1 - 616: a2 30 cpi r26, 0x02 ; 2 - 618: 28 f4 brcc .+10 ; 0x624 - 61a: b0 e0 ldi r27, 0x00 ; 0 - 61c: a5 59 subi r26, 0x95 ; 149 - 61e: be 4f sbci r27, 0xFE ; 254 - 620: 1c 91 ld r17, X - 622: 01 c0 rjmp .+2 ; 0x626 - 624: 10 e0 ldi r17, 0x00 ; 0 + 626: a1 8d ldd r26, Z+25 ; 0x19 + 628: a1 50 subi r26, 0x01 ; 1 + 62a: a2 30 cpi r26, 0x02 ; 2 + 62c: 28 f4 brcc .+10 ; 0x638 + 62e: b0 e0 ldi r27, 0x00 ; 0 + 630: a2 5d subi r26, 0xD2 ; 210 + 632: be 4f sbci r27, 0xFE ; 254 + 634: 1c 91 ld r17, X + 636: 01 c0 rjmp .+2 ; 0x63a + 638: 10 e0 ldi r17, 0x00 ; 0 case CDC_PARITY_Even: ConfigMask = (1 << UPM11); break; } if (CDCInterfaceInfo->State.LineEncoding.CharFormat == CDC_LINEENCODING_TwoStopBits) - 626: 80 8d ldd r24, Z+24 ; 0x18 - 628: 82 30 cpi r24, 0x02 ; 2 - 62a: 09 f4 brne .+2 ; 0x62e + 63a: 80 8d ldd r24, Z+24 ; 0x18 + 63c: 82 30 cpi r24, 0x02 ; 2 + 63e: 09 f4 brne .+2 ; 0x642 ConfigMask |= (1 << USBS1); - 62c: 18 60 ori r17, 0x08 ; 8 + 640: 18 60 ori r17, 0x08 ; 8 switch (CDCInterfaceInfo->State.LineEncoding.DataBits) - 62e: 82 8d ldd r24, Z+26 ; 0x1a - 630: 87 30 cpi r24, 0x07 ; 7 - 632: 31 f0 breq .+12 ; 0x640 - 634: 88 30 cpi r24, 0x08 ; 8 - 636: 31 f0 breq .+12 ; 0x644 - 638: 86 30 cpi r24, 0x06 ; 6 - 63a: 29 f4 brne .+10 ; 0x646 + 642: 82 8d ldd r24, Z+26 ; 0x1a + 644: 87 30 cpi r24, 0x07 ; 7 + 646: 31 f0 breq .+12 ; 0x654 + 648: 88 30 cpi r24, 0x08 ; 8 + 64a: 31 f0 breq .+12 ; 0x658 + 64c: 86 30 cpi r24, 0x06 ; 6 + 64e: 29 f4 brne .+10 ; 0x65a { case 6: ConfigMask |= (1 << UCSZ10); - 63c: 12 60 ori r17, 0x02 ; 2 + 650: 12 60 ori r17, 0x02 ; 2 break; - 63e: 03 c0 rjmp .+6 ; 0x646 + 652: 03 c0 rjmp .+6 ; 0x65a case 7: ConfigMask |= (1 << UCSZ11); - 640: 14 60 ori r17, 0x04 ; 4 + 654: 14 60 ori r17, 0x04 ; 4 break; - 642: 01 c0 rjmp .+2 ; 0x646 + 656: 01 c0 rjmp .+2 ; 0x65a case 8: ConfigMask |= ((1 << UCSZ11) | (1 << UCSZ10)); - 644: 16 60 ori r17, 0x06 ; 6 + 658: 16 60 ori r17, 0x06 ; 6 break; } /* Must turn off USART before reconfiguring it, otherwise incorrect operation may occur */ UCSR1B = 0; - 646: 10 92 c9 00 sts 0x00C9, r1 + 65a: 10 92 c9 00 sts 0x00C9, r1 UCSR1A = 0; - 64a: 10 92 c8 00 sts 0x00C8, r1 + 65e: 10 92 c8 00 sts 0x00C8, r1 UCSR1C = 0; - 64e: 10 92 ca 00 sts 0x00CA, r1 + 662: 10 92 ca 00 sts 0x00CA, r1 /* Set the new baud rate before configuring the USART */ UBRR1 = SERIAL_2X_UBBRVAL(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS); - 652: c4 88 ldd r12, Z+20 ; 0x14 - 654: d5 88 ldd r13, Z+21 ; 0x15 - 656: e6 88 ldd r14, Z+22 ; 0x16 - 658: f7 88 ldd r15, Z+23 ; 0x17 - 65a: c7 01 movw r24, r14 - 65c: b6 01 movw r22, r12 - 65e: 96 95 lsr r25 - 660: 87 95 ror r24 - 662: 77 95 ror r23 - 664: 67 95 ror r22 - 666: fd d7 rcall .+4090 ; 0x1662 <__floatunsisf> - 668: 20 e0 ldi r18, 0x00 ; 0 - 66a: 34 e2 ldi r19, 0x24 ; 36 - 66c: 44 ef ldi r20, 0xF4 ; 244 - 66e: 59 e4 ldi r21, 0x49 ; 73 - 670: fc d6 rcall .+3576 ; 0x146a <__addsf3> - 672: 4b 01 movw r8, r22 - 674: 5c 01 movw r10, r24 - 676: c7 01 movw r24, r14 - 678: b6 01 movw r22, r12 - 67a: f3 d7 rcall .+4070 ; 0x1662 <__floatunsisf> - 67c: 9b 01 movw r18, r22 - 67e: ac 01 movw r20, r24 - 680: c5 01 movw r24, r10 - 682: b4 01 movw r22, r8 - 684: 5a d7 rcall .+3764 ; 0x153a <__divsf3> - 686: 20 e0 ldi r18, 0x00 ; 0 - 688: 30 e0 ldi r19, 0x00 ; 0 - 68a: 40 e8 ldi r20, 0x80 ; 128 - 68c: 5f e3 ldi r21, 0x3F ; 63 - 68e: ec d6 rcall .+3544 ; 0x1468 <__subsf3> - 690: bc d7 rcall .+3960 ; 0x160a <__fixunssfsi> - 692: 70 93 cd 00 sts 0x00CD, r23 - 696: 60 93 cc 00 sts 0x00CC, r22 + 666: c4 88 ldd r12, Z+20 ; 0x14 + 668: d5 88 ldd r13, Z+21 ; 0x15 + 66a: e6 88 ldd r14, Z+22 ; 0x16 + 66c: f7 88 ldd r15, Z+23 ; 0x17 + 66e: c7 01 movw r24, r14 + 670: b6 01 movw r22, r12 + 672: 96 95 lsr r25 + 674: 87 95 ror r24 + 676: 77 95 ror r23 + 678: 67 95 ror r22 + 67a: e0 d7 rcall .+4032 ; 0x163c <__floatunsisf> + 67c: 20 e0 ldi r18, 0x00 ; 0 + 67e: 34 e2 ldi r19, 0x24 ; 36 + 680: 44 ef ldi r20, 0xF4 ; 244 + 682: 59 e4 ldi r21, 0x49 ; 73 + 684: df d6 rcall .+3518 ; 0x1444 <__addsf3> + 686: 4b 01 movw r8, r22 + 688: 5c 01 movw r10, r24 + 68a: c7 01 movw r24, r14 + 68c: b6 01 movw r22, r12 + 68e: d6 d7 rcall .+4012 ; 0x163c <__floatunsisf> + 690: 9b 01 movw r18, r22 + 692: ac 01 movw r20, r24 + 694: c5 01 movw r24, r10 + 696: b4 01 movw r22, r8 + 698: 3d d7 rcall .+3706 ; 0x1514 <__divsf3> + 69a: 20 e0 ldi r18, 0x00 ; 0 + 69c: 30 e0 ldi r19, 0x00 ; 0 + 69e: 40 e8 ldi r20, 0x80 ; 128 + 6a0: 5f e3 ldi r21, 0x3F ; 63 + 6a2: cf d6 rcall .+3486 ; 0x1442 <__subsf3> + 6a4: 9f d7 rcall .+3902 ; 0x15e4 <__fixunssfsi> + 6a6: 70 93 cd 00 sts 0x00CD, r23 + 6aa: 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; - 69a: 10 93 ca 00 sts 0x00CA, r17 + 6ae: 10 93 ca 00 sts 0x00CA, r17 UCSR1A = (1 << U2X1); - 69e: 82 e0 ldi r24, 0x02 ; 2 - 6a0: 80 93 c8 00 sts 0x00C8, r24 + 6b2: 82 e0 ldi r24, 0x02 ; 2 + 6b4: 80 93 c8 00 sts 0x00C8, r24 UCSR1B = ((1 << RXCIE1) | (1 << TXEN1) | (1 << RXEN1)); - 6a4: 88 e9 ldi r24, 0x98 ; 152 - 6a6: 80 93 c9 00 sts 0x00C9, r24 + 6b8: 88 e9 ldi r24, 0x98 ; 152 + 6ba: 80 93 c9 00 sts 0x00C9, r24 } - 6aa: 1f 91 pop r17 - 6ac: ff 90 pop r15 - 6ae: ef 90 pop r14 - 6b0: df 90 pop r13 - 6b2: cf 90 pop r12 - 6b4: bf 90 pop r11 - 6b6: af 90 pop r10 - 6b8: 9f 90 pop r9 - 6ba: 8f 90 pop r8 - 6bc: 08 95 ret + 6be: 1f 91 pop r17 + 6c0: ff 90 pop r15 + 6c2: ef 90 pop r14 + 6c4: df 90 pop r13 + 6c6: cf 90 pop r12 + 6c8: bf 90 pop r11 + 6ca: af 90 pop r10 + 6cc: 9f 90 pop r9 + 6ce: 8f 90 pop r8 + 6d0: 08 95 ret -000006be : +000006d2 : void uart_putc(unsigned char data) { - 6be: 68 2f mov r22, r24 + 6d2: 68 2f mov r22, r24 if (USB_DeviceState == DEVICE_STATE_Configured){ - 6c0: 8e b3 in r24, 0x1e ; 30 - 6c2: 84 30 cpi r24, 0x04 ; 4 - 6c4: 19 f4 brne .+6 ; 0x6cc + 6d4: 8e b3 in r24, 0x1e ; 30 + 6d6: 84 30 cpi r24, 0x04 ; 4 + 6d8: 19 f4 brne .+6 ; 0x6e0 RingBuffer_Insert(&USARTtoUSB_Buffer, data); - 6c6: 8a ef ldi r24, 0xFA ; 250 - 6c8: 91 e0 ldi r25, 0x01 ; 1 - 6ca: 52 cd rjmp .-1372 ; 0x170 - 6cc: 08 95 ret + 6da: 8c eb ldi r24, 0xBC ; 188 + 6dc: 91 e0 ldi r25, 0x01 ; 1 + 6de: 48 cd rjmp .-1392 ; 0x170 + 6e0: 08 95 ret -000006ce : +000006e2 : } } void uart_puts(const char *s ) { - 6ce: ef 92 push r14 - 6d0: ff 92 push r15 - 6d2: cf 93 push r28 - 6d4: df 93 push r29 - 6d6: e8 2e mov r14, r24 - 6d8: e7 01 movw r28, r14 - 6da: 7e 01 movw r14, r28 - 6dc: f9 2e mov r15, r25 - 6de: e7 01 movw r28, r14 + 6e2: ef 92 push r14 + 6e4: ff 92 push r15 + 6e6: cf 93 push r28 + 6e8: df 93 push r29 + 6ea: e8 2e mov r14, r24 + 6ec: e7 01 movw r28, r14 + 6ee: 7e 01 movw r14, r28 + 6f0: f9 2e mov r15, r25 + 6f2: e7 01 movw r28, r14 while (*s) - 6e0: 01 c0 rjmp .+2 ; 0x6e4 + 6f4: 01 c0 rjmp .+2 ; 0x6f8 uart_putc(*s++); - 6e2: ed df rcall .-38 ; 0x6be + 6f6: ed df rcall .-38 ; 0x6d2 } void uart_puts(const char *s ) { while (*s) - 6e4: 89 91 ld r24, Y+ - 6e6: 88 23 and r24, r24 - 6e8: e1 f7 brne .-8 ; 0x6e2 + 6f8: 89 91 ld r24, Y+ + 6fa: 88 23 and r24, r24 + 6fc: e1 f7 brne .-8 ; 0x6f6 uart_putc(*s++); }/* uart_puts */ - 6ea: df 91 pop r29 - 6ec: cf 91 pop r28 - 6ee: ff 90 pop r15 - 6f0: ef 90 pop r14 - 6f2: 08 95 ret + 6fe: df 91 pop r29 + 700: cf 91 pop r28 + 702: ff 90 pop r15 + 704: ef 90 pop r14 + 706: 08 95 ret -000006f4 : +00000708 : // convert an unsigned integer to string void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { - 6f4: 2f 92 push r2 - 6f6: 3f 92 push r3 - 6f8: 4f 92 push r4 - 6fa: 5f 92 push r5 - 6fc: 6f 92 push r6 - 6fe: 7f 92 push r7 - 700: 8f 92 push r8 - 702: 9f 92 push r9 - 704: af 92 push r10 - 706: bf 92 push r11 - 708: cf 92 push r12 - 70a: df 92 push r13 - 70c: ef 92 push r14 - 70e: ff 92 push r15 - 710: 0f 93 push r16 - 712: 1f 93 push r17 - 714: cf 93 push r28 - 716: df 93 push r29 - 718: 7b 01 movw r14, r22 - 71a: 8c 01 movw r16, r24 + 708: 2f 92 push r2 + 70a: 3f 92 push r3 + 70c: 4f 92 push r4 + 70e: 5f 92 push r5 + 710: 6f 92 push r6 + 712: 7f 92 push r7 + 714: 8f 92 push r8 + 716: 9f 92 push r9 + 718: af 92 push r10 + 71a: bf 92 push r11 + 71c: cf 92 push r12 + 71e: df 92 push r13 + 720: ef 92 push r14 + 722: ff 92 push r15 + 724: 0f 93 push r16 + 726: 1f 93 push r17 + 728: cf 93 push r28 + 72a: df 93 push r29 + 72c: 7b 01 movw r14, r22 + 72e: 8c 01 movw r16, r24 int8_t i; // schleifenzähler string[no_digits] = '\0'; // String Terminator - 71c: 82 2f mov r24, r18 - 71e: 90 e0 ldi r25, 0x00 ; 0 - 720: fa 01 movw r30, r20 - 722: e8 0f add r30, r24 - 724: f9 1f adc r31, r25 - 726: 10 82 st Z, r1 + 730: 82 2f mov r24, r18 + 732: 90 e0 ldi r25, 0x00 ; 0 + 734: fa 01 movw r30, r20 + 736: e8 0f add r30, r24 + 738: f9 1f adc r31, r25 + 73a: 10 82 st Z, r1 for (i = (no_digits - 1); i >= 0; i--) { - 728: d2 2e mov r13, r18 - 72a: da 94 dec r13 + 73c: d2 2e mov r13, r18 + 73e: da 94 dec r13 }/* uart_puts */ // convert an unsigned integer to string void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { - 72c: 4d 2c mov r4, r13 - 72e: 55 24 eor r5, r5 - 730: 47 fc sbrc r4, 7 - 732: 50 94 com r5 - 734: ea 01 movw r28, r20 - 736: c4 0d add r28, r4 - 738: d5 1d adc r29, r5 + 740: 4d 2c mov r4, r13 + 742: 55 24 eor r5, r5 + 744: 47 fc sbrc r4, 7 + 746: 50 94 com r5 + 748: ea 01 movw r28, r20 + 74a: c4 0d add r28, r4 + 74c: d5 1d adc r29, r5 int8_t i; // schleifenzähler string[no_digits] = '\0'; // String Terminator for (i = (no_digits - 1); i >= 0; i--) { - 73a: aa 24 eor r10, r10 - 73c: bb 24 eor r11, r11 + 74e: aa 24 eor r10, r10 + 750: bb 24 eor r11, r11 if (zahl == 0 && i < (no_digits - 1)) { string[i] = ' '; } else { string[i] = (zahl % 10) + '0'; - 73e: ba e0 ldi r27, 0x0A ; 10 - 740: 6b 2e mov r6, r27 - 742: 71 2c mov r7, r1 - 744: 81 2c mov r8, r1 - 746: 91 2c mov r9, r1 + 752: ba e0 ldi r27, 0x0A ; 10 + 754: 6b 2e mov r6, r27 + 756: 71 2c mov r7, r1 + 758: 81 2c mov r8, r1 + 75a: 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)) { - 748: 1c 01 movw r2, r24 - 74a: 08 94 sec - 74c: 21 08 sbc r2, r1 - 74e: 31 08 sbc r3, r1 + 75c: 1c 01 movw r2, r24 + 75e: 08 94 sec + 760: 21 08 sbc r2, r1 + 762: 31 08 sbc r3, r1 string[i] = ' '; - 750: a0 e2 ldi r26, 0x20 ; 32 - 752: ca 2e mov r12, r26 + 764: a0 e2 ldi r26, 0x20 ; 32 + 766: 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--) { - 754: 22 c0 rjmp .+68 ; 0x79a + 768: 22 c0 rjmp .+68 ; 0x7ae if (zahl == 0 && i < (no_digits - 1)) { - 756: e1 14 cp r14, r1 - 758: f1 04 cpc r15, r1 - 75a: 01 05 cpc r16, r1 - 75c: 11 05 cpc r17, r1 - 75e: 41 f4 brne .+16 ; 0x770 + 76a: e1 14 cp r14, r1 + 76c: f1 04 cpc r15, r1 + 76e: 01 05 cpc r16, r1 + 770: 11 05 cpc r17, r1 + 772: 41 f4 brne .+16 ; 0x784 }/* uart_puts */ // convert an unsigned integer to string void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { - 760: c5 01 movw r24, r10 - 762: 84 0d add r24, r4 - 764: 95 1d adc r25, r5 + 774: c5 01 movw r24, r10 + 776: 84 0d add r24, r4 + 778: 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)) { - 766: 82 15 cp r24, r2 - 768: 93 05 cpc r25, r3 - 76a: 14 f4 brge .+4 ; 0x770 + 77a: 82 15 cp r24, r2 + 77c: 93 05 cpc r25, r3 + 77e: 14 f4 brge .+4 ; 0x784 string[i] = ' '; - 76c: c8 82 st Y, r12 - 76e: 08 c0 rjmp .+16 ; 0x780 + 780: c8 82 st Y, r12 + 782: 08 c0 rjmp .+16 ; 0x794 } else { string[i] = (zahl % 10) + '0'; - 770: c8 01 movw r24, r16 - 772: b7 01 movw r22, r14 - 774: a4 01 movw r20, r8 - 776: 93 01 movw r18, r6 - 778: 0e 94 e7 0b call 0x17ce ; 0x17ce <__udivmodsi4> - 77c: 60 5d subi r22, 0xD0 ; 208 - 77e: 68 83 st Y, r22 + 784: c8 01 movw r24, r16 + 786: b7 01 movw r22, r14 + 788: a4 01 movw r20, r8 + 78a: 93 01 movw r18, r6 + 78c: 0e 94 d4 0b call 0x17a8 ; 0x17a8 <__udivmodsi4> + 790: 60 5d subi r22, 0xD0 ; 208 + 792: 68 83 st Y, r22 } // Modulo rechnen, dann den ASCII-Code von '0' addieren zahl /= 10; - 780: c8 01 movw r24, r16 - 782: b7 01 movw r22, r14 - 784: a4 01 movw r20, r8 - 786: 93 01 movw r18, r6 - 788: 0e 94 e7 0b call 0x17ce ; 0x17ce <__udivmodsi4> - 78c: 79 01 movw r14, r18 - 78e: 8a 01 movw r16, r20 + 794: c8 01 movw r24, r16 + 796: b7 01 movw r22, r14 + 798: a4 01 movw r20, r8 + 79a: 93 01 movw r18, r6 + 79c: 0e 94 d4 0b call 0x17a8 ; 0x17a8 <__udivmodsi4> + 7a0: 79 01 movw r14, r18 + 7a2: 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--) { - 790: da 94 dec r13 - 792: 21 97 sbiw r28, 0x01 ; 1 - 794: 08 94 sec - 796: a1 08 sbc r10, r1 - 798: b1 08 sbc r11, r1 - 79a: d7 fe sbrs r13, 7 - 79c: dc cf rjmp .-72 ; 0x756 + 7a4: da 94 dec r13 + 7a6: 21 97 sbiw r28, 0x01 ; 1 + 7a8: 08 94 sec + 7aa: a1 08 sbc r10, r1 + 7ac: b1 08 sbc r11, r1 + 7ae: d7 fe sbrs r13, 7 + 7b0: dc cf rjmp .-72 ; 0x76a string[i] = (zahl % 10) + '0'; } // Modulo rechnen, dann den ASCII-Code von '0' addieren zahl /= 10; } } - 79e: df 91 pop r29 - 7a0: cf 91 pop r28 - 7a2: 1f 91 pop r17 - 7a4: 0f 91 pop r16 - 7a6: ff 90 pop r15 - 7a8: ef 90 pop r14 - 7aa: df 90 pop r13 - 7ac: cf 90 pop r12 - 7ae: bf 90 pop r11 - 7b0: af 90 pop r10 - 7b2: 9f 90 pop r9 - 7b4: 8f 90 pop r8 - 7b6: 7f 90 pop r7 - 7b8: 6f 90 pop r6 - 7ba: 5f 90 pop r5 - 7bc: 4f 90 pop r4 - 7be: 3f 90 pop r3 - 7c0: 2f 90 pop r2 - 7c2: 08 95 ret - -000007c4
: + 7b2: df 91 pop r29 + 7b4: cf 91 pop r28 + 7b6: 1f 91 pop r17 + 7b8: 0f 91 pop r16 + 7ba: ff 90 pop r15 + 7bc: ef 90 pop r14 + 7be: df 90 pop r13 + 7c0: cf 90 pop r12 + 7c2: bf 90 pop r11 + 7c4: af 90 pop r10 + 7c6: 9f 90 pop r9 + 7c8: 8f 90 pop r8 + 7ca: 7f 90 pop r7 + 7cc: 6f 90 pop r6 + 7ce: 5f 90 pop r5 + 7d0: 4f 90 pop r4 + 7d2: 3f 90 pop r3 + 7d4: 2f 90 pop r2 + 7d6: 08 95 ret + +000007d8
: /** 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) { - 7c4: cf 92 push r12 - 7c6: df 92 push r13 - 7c8: ef 92 push r14 - 7ca: ff 92 push r15 - 7cc: 0f 93 push r16 - 7ce: 1f 93 push r17 - 7d0: df 93 push r29 - 7d2: cf 93 push r28 - 7d4: cd b7 in r28, 0x3d ; 61 - 7d6: de b7 in r29, 0x3e ; 62 - 7d8: 60 97 sbiw r28, 0x10 ; 16 - 7da: 0f b6 in r0, 0x3f ; 63 - 7dc: f8 94 cli - 7de: de bf out 0x3e, r29 ; 62 - 7e0: 0f be out 0x3f, r0 ; 63 - 7e2: cd bf out 0x3d, r28 ; 61 + 7d8: cf 92 push r12 + 7da: df 92 push r13 + 7dc: ef 92 push r14 + 7de: ff 92 push r15 + 7e0: 0f 93 push r16 + 7e2: 1f 93 push r17 + 7e4: df 93 push r29 + 7e6: cf 93 push r28 + 7e8: cd b7 in r28, 0x3d ; 61 + 7ea: de b7 in r29, 0x3e ; 62 + 7ec: 60 97 sbiw r28, 0x10 ; 16 + 7ee: 0f b6 in r0, 0x3f ; 63 + 7f0: f8 94 cli + 7f2: de bf out 0x3e, r29 ; 62 + 7f4: 0f be out 0x3f, r0 ; 63 + 7f6: cd bf out 0x3d, r28 ; 61 char dummy; uint8_t field_val = 0; SetupHardware(); - 7e4: c5 de rcall .-630 ; 0x570 + 7f8: c5 de rcall .-630 ; 0x584 RingBuffer_InitBuffer(&USBtoUSART_Buffer, USBtoUSART_Buffer_Data, sizeof(USBtoUSART_Buffer_Data)); - 7e6: 8e e6 ldi r24, 0x6E ; 110 - 7e8: 91 e0 ldi r25, 0x01 ; 1 - 7ea: 6a e7 ldi r22, 0x7A ; 122 - 7ec: 71 e0 ldi r23, 0x01 ; 1 - 7ee: f4 dc rcall .-1560 ; 0x1d8 + 7fa: 80 e3 ldi r24, 0x30 ; 48 + 7fc: 91 e0 ldi r25, 0x01 ; 1 + 7fe: 6c e3 ldi r22, 0x3C ; 60 + 800: 71 e0 ldi r23, 0x01 ; 1 + 802: ea dc rcall .-1580 ; 0x1d8 RingBuffer_InitBuffer(&USARTtoUSB_Buffer, USARTtoUSB_Buffer_Data, sizeof(USARTtoUSB_Buffer_Data)); - 7f0: 8a ef ldi r24, 0xFA ; 250 - 7f2: 91 e0 ldi r25, 0x01 ; 1 - 7f4: 66 e0 ldi r22, 0x06 ; 6 - 7f6: 72 e0 ldi r23, 0x02 ; 2 - 7f8: ef dc rcall .-1570 ; 0x1d8 + 804: 8c eb ldi r24, 0xBC ; 188 + 806: 91 e0 ldi r25, 0x01 ; 1 + 808: 68 ec ldi r22, 0xC8 ; 200 + 80a: 71 e0 ldi r23, 0x01 ; 1 + 80c: e5 dc rcall .-1590 ; 0x1d8 static inline void GlobalInterruptEnable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) sei(); - 7fa: 78 94 sei + 80e: 78 94 sei // LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); GlobalInterruptEnable(); touchpad_init(); // you need to call this to setup the I/O pin! - 7fc: 2f de rcall .-930 ; 0x45c - sei(); - 7fe: 78 94 sei + 810: 25 de rcall .-950 ; 0x45c #else //round up by default __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); #endif __builtin_avr_delay_cycles(__ticks_dc); - 800: 8f ef ldi r24, 0xFF ; 255 - 802: 99 e6 ldi r25, 0x69 ; 105 - 804: a8 e1 ldi r26, 0x18 ; 24 - 806: 81 50 subi r24, 0x01 ; 1 - 808: 90 40 sbci r25, 0x00 ; 0 - 80a: a0 40 sbci r26, 0x00 ; 0 - 80c: e1 f7 brne .-8 ; 0x806 - 80e: 00 c0 rjmp .+0 ; 0x810 - 810: 00 00 nop - // | back | up | enter | - // ------------------------- - // | left | down | right | - // ------------------------- - - uart_puts("you selected the keypad demo modus:\n\r"); - 812: 80 e0 ldi r24, 0x00 ; 0 - 814: 91 e0 ldi r25, 0x01 ; 1 - 816: 5b df rcall .-330 ; 0x6ce + 812: 8f ef ldi r24, 0xFF ; 255 + 814: 99 e6 ldi r25, 0x69 ; 105 + 816: a8 e1 ldi r26, 0x18 ; 24 + 818: 81 50 subi r24, 0x01 ; 1 + 81a: 90 40 sbci r25, 0x00 ; 0 + 81c: a0 40 sbci r26, 0x00 ; 0 + 81e: e1 f7 brne .-8 ; 0x818 + 820: 00 c0 rjmp .+0 ; 0x822 + 822: 00 00 nop + _delay_ms(500); + sei(); + 824: 78 94 sei +// +// #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 + 826: 2b de rcall .-938 ; 0x47e uint8_t x, y = 0; - 818: ff 24 eor r15, r15 + 828: ff 24 eor r15, r15 // _delay_ms(1000); // end uint8_t loopcounter=0; - 81a: dd 24 eor r13, r13 + 82a: dd 24 eor r13, r13 + } else { + y = (y + dy); } -// // uart_puts("c"); -// _delay_ms(20); - - dummy=touchpad_read(); // read values from the touchpad - my_uitoa(dummy,stringbuffer,4);// x_abs returns current x position of your finger - 81c: 8e 01 movw r16, r28 - 81e: 0f 5f subi r16, 0xFF ; 255 - 820: 1f 4f sbci r17, 0xFF ; 255 - uart_puts("you selected the keypad demo modus:\n\r"); + + uart_puts("x_pos: "); + my_uitoa(x, stringbuffer, 4); + 82c: 8e 01 movw r16, r28 + 82e: 0f 5f subi r16, 0xFF ; 255 + 830: 1f 4f sbci r17, 0xFF ; 255 uint8_t x, y = 0; int8_t dx, dy = 0; -// touchpad_set_abs_mode(); // keypad functionality uses the "absolute mode" + while (1) { + Usb2SerialTask(); - 822: 4d de rcall .-870 ; 0x4be + 832: 4f de rcall .-866 ; 0x4d2 loopcounter++; - 824: d3 94 inc r13 + 834: d3 94 inc r13 if(loopcounter) { - 826: e9 f7 brne .-6 ; 0x822 + 836: e9 f7 brne .-6 ; 0x832 continue; } -// // uart_puts("c"); -// _delay_ms(20); - - dummy=touchpad_read(); // read values from the touchpad - 828: 21 de rcall .-958 ; 0x46c - my_uitoa(dummy,stringbuffer,4);// x_abs returns current x position of your finger - 82a: 68 2f mov r22, r24 - 82c: 70 e0 ldi r23, 0x00 ; 0 - 82e: 80 e0 ldi r24, 0x00 ; 0 - 830: 90 e0 ldi r25, 0x00 ; 0 - 832: a8 01 movw r20, r16 - 834: 24 e0 ldi r18, 0x04 ; 4 - 836: 5e df rcall .-324 ; 0x6f4 - uart_puts("data_length: "); - 838: 86 e2 ldi r24, 0x26 ; 38 - 83a: 91 e0 ldi r25, 0x01 ; 1 - 83c: 48 df rcall .-368 ; 0x6ce - uart_puts(stringbuffer); - 83e: c8 01 movw r24, r16 - 840: 46 df rcall .-372 ; 0x6ce - uart_puts(" x_pos: "); - 842: 84 e3 ldi r24, 0x34 ; 52 - 844: 91 e0 ldi r25, 0x01 ; 1 - 846: 43 df rcall .-378 ; 0x6ce - my_uitoa(delta_x(),stringbuffer,4);// x_abs returns current x position of your finger - 848: 2a de rcall .-940 ; 0x49e - 84a: 68 2f mov r22, r24 - 84c: 77 27 eor r23, r23 - 84e: 67 fd sbrc r22, 7 - 850: 70 95 com r23 - 852: 87 2f mov r24, r23 - 854: 97 2f mov r25, r23 - 856: a8 01 movw r20, r16 - 858: 24 e0 ldi r18, 0x04 ; 4 - 85a: 4c df rcall .-360 ; 0x6f4 - uart_puts(stringbuffer); - 85c: c8 01 movw r24, r16 - 85e: 37 df rcall .-402 ; 0x6ce -// -// _delay_ms(20); -// -// touchpad_read(); // read data from touchpad + + touchpad_read(); // read data from touchpad + 838: 19 de rcall .-974 ; 0x46c dx = delta_x();// returns the amount your finger has moved in x direction since last readout - 860: 1e de rcall .-964 ; 0x49e - 862: c8 2e mov r12, r24 + 83a: 3b de rcall .-906 ; 0x4b2 + 83c: c8 2e mov r12, r24 dy = delta_y();// returns the amount your finger has moved in y direction since last readout - 864: 0c de rcall .-1000 ; 0x47e + 83e: 29 de rcall .-942 ; 0x492 // increment/decrement some dummy variables with the if (x + dx > 255) { - 866: 2c 2d mov r18, r12 - 868: 33 27 eor r19, r19 - 86a: 27 fd sbrc r18, 7 - 86c: 30 95 com r19 - 86e: 2e 0d add r18, r14 - 870: 31 1d adc r19, r1 - 872: 2f 3f cpi r18, 0xFF ; 255 - 874: 31 05 cpc r19, r1 - 876: 09 f0 breq .+2 ; 0x87a - 878: 24 f4 brge .+8 ; 0x882 + 840: 2c 2d mov r18, r12 + 842: 33 27 eor r19, r19 + 844: 27 fd sbrc r18, 7 + 846: 30 95 com r19 + 848: 2e 0d add r18, r14 + 84a: 31 1d adc r19, r1 + 84c: 2f 3f cpi r18, 0xFF ; 255 + 84e: 31 05 cpc r19, r1 + 850: 09 f0 breq .+2 ; 0x854 + 852: 24 f4 brge .+8 ; 0x85c x = 255; } else if (x + dx < 0) { - 87a: 37 fd sbrc r19, 7 - 87c: 05 c0 rjmp .+10 ; 0x888 + 854: 37 fd sbrc r19, 7 + 856: 05 c0 rjmp .+10 ; 0x862 x = 0; } else { x = (x + dx); - 87e: ec 0c add r14, r12 - 880: 04 c0 rjmp .+8 ; 0x88a + 858: ec 0c add r14, r12 + 85a: 04 c0 rjmp .+8 ; 0x864 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; - 882: ee 24 eor r14, r14 - 884: ea 94 dec r14 - 886: 01 c0 rjmp .+2 ; 0x88a + 85c: ee 24 eor r14, r14 + 85e: ea 94 dec r14 + 860: 01 c0 rjmp .+2 ; 0x864 } else if (x + dx < 0) { x = 0; - 888: ee 24 eor r14, r14 + 862: ee 24 eor r14, r14 } else { x = (x + dx); } if (y + dy > 255) { - 88a: 28 2f mov r18, r24 - 88c: 33 27 eor r19, r19 - 88e: 27 fd sbrc r18, 7 - 890: 30 95 com r19 - 892: 2f 0d add r18, r15 - 894: 31 1d adc r19, r1 - 896: 2f 3f cpi r18, 0xFF ; 255 - 898: 31 05 cpc r19, r1 - 89a: 09 f0 breq .+2 ; 0x89e - 89c: 24 f4 brge .+8 ; 0x8a6 + 864: 28 2f mov r18, r24 + 866: 33 27 eor r19, r19 + 868: 27 fd sbrc r18, 7 + 86a: 30 95 com r19 + 86c: 2f 0d add r18, r15 + 86e: 31 1d adc r19, r1 + 870: 2f 3f cpi r18, 0xFF ; 255 + 872: 31 05 cpc r19, r1 + 874: 09 f0 breq .+2 ; 0x878 + 876: 24 f4 brge .+8 ; 0x880 y = 255; } else if (y + dy < 0) { - 89e: 37 fd sbrc r19, 7 - 8a0: 05 c0 rjmp .+10 ; 0x8ac + 878: 37 fd sbrc r19, 7 + 87a: 05 c0 rjmp .+10 ; 0x886 y = 0; } else { y = (y + dy); - 8a2: f8 0e add r15, r24 - 8a4: 04 c0 rjmp .+8 ; 0x8ae + 87c: f8 0e add r15, r24 + 87e: 04 c0 rjmp .+8 ; 0x888 } else { x = (x + dx); } if (y + dy > 255) { y = 255; - 8a6: ff 24 eor r15, r15 - 8a8: fa 94 dec r15 - 8aa: 01 c0 rjmp .+2 ; 0x8ae + 880: ff 24 eor r15, r15 + 882: fa 94 dec r15 + 884: 01 c0 rjmp .+2 ; 0x888 } else if (y + dy < 0) { y = 0; - 8ac: ff 24 eor r15, r15 + 886: ff 24 eor r15, r15 } else { y = (y + dy); } uart_puts("x_pos: "); - 8ae: 8d e3 ldi r24, 0x3D ; 61 - 8b0: 91 e0 ldi r25, 0x01 ; 1 - 8b2: 0d df rcall .-486 ; 0x6ce + 888: 80 e0 ldi r24, 0x00 ; 0 + 88a: 91 e0 ldi r25, 0x01 ; 1 + 88c: 2a df rcall .-428 ; 0x6e2 my_uitoa(x, stringbuffer, 4); - 8b4: 6e 2d mov r22, r14 - 8b6: 70 e0 ldi r23, 0x00 ; 0 - 8b8: 80 e0 ldi r24, 0x00 ; 0 - 8ba: 90 e0 ldi r25, 0x00 ; 0 - 8bc: a8 01 movw r20, r16 - 8be: 24 e0 ldi r18, 0x04 ; 4 - 8c0: 19 df rcall .-462 ; 0x6f4 + 88e: 6e 2d mov r22, r14 + 890: 70 e0 ldi r23, 0x00 ; 0 + 892: 80 e0 ldi r24, 0x00 ; 0 + 894: 90 e0 ldi r25, 0x00 ; 0 + 896: a8 01 movw r20, r16 + 898: 24 e0 ldi r18, 0x04 ; 4 + 89a: 36 df rcall .-404 ; 0x708 uart_puts(stringbuffer); - 8c2: c8 01 movw r24, r16 - 8c4: 04 df rcall .-504 ; 0x6ce + 89c: c8 01 movw r24, r16 + 89e: 21 df rcall .-446 ; 0x6e2 uart_puts("\ty_pos: "); - 8c6: 85 e4 ldi r24, 0x45 ; 69 - 8c8: 91 e0 ldi r25, 0x01 ; 1 - 8ca: 01 df rcall .-510 ; 0x6ce + 8a0: 88 e0 ldi r24, 0x08 ; 8 + 8a2: 91 e0 ldi r25, 0x01 ; 1 + 8a4: 1e df rcall .-452 ; 0x6e2 my_uitoa(y, stringbuffer, 4); - 8cc: 6f 2d mov r22, r15 - 8ce: 70 e0 ldi r23, 0x00 ; 0 - 8d0: 80 e0 ldi r24, 0x00 ; 0 - 8d2: 90 e0 ldi r25, 0x00 ; 0 - 8d4: a8 01 movw r20, r16 - 8d6: 24 e0 ldi r18, 0x04 ; 4 - 8d8: 0d df rcall .-486 ; 0x6f4 + 8a6: 6f 2d mov r22, r15 + 8a8: 70 e0 ldi r23, 0x00 ; 0 + 8aa: 80 e0 ldi r24, 0x00 ; 0 + 8ac: 90 e0 ldi r25, 0x00 ; 0 + 8ae: a8 01 movw r20, r16 + 8b0: 24 e0 ldi r18, 0x04 ; 4 + 8b2: 2a df rcall .-428 ; 0x708 uart_puts(stringbuffer); - 8da: c8 01 movw r24, r16 - 8dc: f8 de rcall .-528 ; 0x6ce + 8b4: c8 01 movw r24, r16 + 8b6: 15 df rcall .-470 ; 0x6e2 uart_puts("\r"); - 8de: 8e e4 ldi r24, 0x4E ; 78 - 8e0: 91 e0 ldi r25, 0x01 ; 1 - 8e2: f5 de rcall .-534 ; 0x6ce - 8e4: 9e cf rjmp .-196 ; 0x822 + 8b8: 81 e1 ldi r24, 0x11 ; 17 + 8ba: 91 e0 ldi r25, 0x01 ; 1 + 8bc: 12 df rcall .-476 ; 0x6e2 + 8be: b9 cf rjmp .-142 ; 0x832 -000008e6 : +000008c0 : const uint8_t DescriptorNumber = (wValue & 0xFF); const void* Address = NULL; uint16_t Size = NO_DESCRIPTOR; switch (DescriptorType) - 8e6: 92 30 cpi r25, 0x02 ; 2 - 8e8: 29 f0 breq .+10 ; 0x8f4 - 8ea: 93 30 cpi r25, 0x03 ; 3 - 8ec: 41 f0 breq .+16 ; 0x8fe - 8ee: 91 30 cpi r25, 0x01 ; 1 - 8f0: e9 f4 brne .+58 ; 0x92c - 8f2: 17 c0 rjmp .+46 ; 0x922 + 8c0: 92 30 cpi r25, 0x02 ; 2 + 8c2: 29 f0 breq .+10 ; 0x8ce + 8c4: 93 30 cpi r25, 0x03 ; 3 + 8c6: 41 f0 breq .+16 ; 0x8d8 + 8c8: 91 30 cpi r25, 0x01 ; 1 + 8ca: e9 f4 brne .+58 ; 0x906 + 8cc: 17 c0 rjmp .+46 ; 0x8fc Address = &DeviceDescriptor; Size = sizeof(USB_Descriptor_Device_t); break; case DTYPE_Configuration: Address = &ConfigurationDescriptor; Size = sizeof(USB_Descriptor_Configuration_t); - 8f4: 2e e3 ldi r18, 0x3E ; 62 - 8f6: 30 e0 ldi r19, 0x00 ; 0 + 8ce: 2e e3 ldi r18, 0x3E ; 62 + 8d0: 30 e0 ldi r19, 0x00 ; 0 case DTYPE_Device: Address = &DeviceDescriptor; Size = sizeof(USB_Descriptor_Device_t); break; case DTYPE_Configuration: Address = &ConfigurationDescriptor; - 8f8: ea ea ldi r30, 0xAA ; 170 - 8fa: f0 e0 ldi r31, 0x00 ; 0 + 8d2: ea ea ldi r30, 0xAA ; 170 + 8d4: f0 e0 ldi r31, 0x00 ; 0 Size = sizeof(USB_Descriptor_Configuration_t); break; - 8fc: 1b c0 rjmp .+54 ; 0x934 + 8d6: 1b c0 rjmp .+54 ; 0x90e case DTYPE_String: switch (DescriptorNumber) - 8fe: 81 30 cpi r24, 0x01 ; 1 - 900: 41 f0 breq .+16 ; 0x912 - 902: 81 30 cpi r24, 0x01 ; 1 - 904: 18 f0 brcs .+6 ; 0x90c - 906: 82 30 cpi r24, 0x02 ; 2 - 908: 89 f4 brne .+34 ; 0x92c - 90a: 06 c0 rjmp .+12 ; 0x918 + 8d8: 81 30 cpi r24, 0x01 ; 1 + 8da: 41 f0 breq .+16 ; 0x8ec + 8dc: 81 30 cpi r24, 0x01 ; 1 + 8de: 18 f0 brcs .+6 ; 0x8e6 + 8e0: 82 30 cpi r24, 0x02 ; 2 + 8e2: 89 f4 brne .+34 ; 0x906 + 8e4: 06 c0 rjmp .+12 ; 0x8f2 { case 0x00: Address = &LanguageString; Size = pgm_read_byte(&LanguageString.Header.Size); - 90c: e8 ee ldi r30, 0xE8 ; 232 - 90e: f0 e0 ldi r31, 0x00 ; 0 - 910: 05 c0 rjmp .+10 ; 0x91c + 8e6: e8 ee ldi r30, 0xE8 ; 232 + 8e8: f0 e0 ldi r31, 0x00 ; 0 + 8ea: 05 c0 rjmp .+10 ; 0x8f6 break; case 0x01: Address = &ManufacturerString; Size = pgm_read_byte(&ManufacturerString.Header.Size); - 912: ec ee ldi r30, 0xEC ; 236 - 914: f0 e0 ldi r31, 0x00 ; 0 - 916: 02 c0 rjmp .+4 ; 0x91c + 8ec: ec ee ldi r30, 0xEC ; 236 + 8ee: f0 e0 ldi r31, 0x00 ; 0 + 8f0: 02 c0 rjmp .+4 ; 0x8f6 break; case 0x02: Address = &ProductString; Size = pgm_read_byte(&ProductString.Header.Size); - 918: e6 e0 ldi r30, 0x06 ; 6 - 91a: f1 e0 ldi r31, 0x01 ; 1 - 91c: 24 91 lpm r18, Z+ - 91e: 30 e0 ldi r19, 0x00 ; 0 + 8f2: e6 e0 ldi r30, 0x06 ; 6 + 8f4: f1 e0 ldi r31, 0x01 ; 1 + 8f6: 24 91 lpm r18, Z+ + 8f8: 30 e0 ldi r19, 0x00 ; 0 break; - 920: 09 c0 rjmp .+18 ; 0x934 + 8fa: 09 c0 rjmp .+18 ; 0x90e switch (DescriptorType) { case DTYPE_Device: Address = &DeviceDescriptor; Size = sizeof(USB_Descriptor_Device_t); - 922: 22 e1 ldi r18, 0x12 ; 18 - 924: 30 e0 ldi r19, 0x00 ; 0 + 8fc: 22 e1 ldi r18, 0x12 ; 18 + 8fe: 30 e0 ldi r19, 0x00 ; 0 uint16_t Size = NO_DESCRIPTOR; switch (DescriptorType) { case DTYPE_Device: Address = &DeviceDescriptor; - 926: e8 e9 ldi r30, 0x98 ; 152 - 928: f0 e0 ldi r31, 0x00 ; 0 - 92a: 04 c0 rjmp .+8 ; 0x934 + 900: e8 e9 ldi r30, 0x98 ; 152 + 902: f0 e0 ldi r31, 0x00 ; 0 + 904: 04 c0 rjmp .+8 ; 0x90e { const uint8_t DescriptorType = (wValue >> 8); const uint8_t DescriptorNumber = (wValue & 0xFF); const void* Address = NULL; uint16_t Size = NO_DESCRIPTOR; - 92c: 20 e0 ldi r18, 0x00 ; 0 - 92e: 30 e0 ldi r19, 0x00 ; 0 + 906: 20 e0 ldi r18, 0x00 ; 0 + 908: 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; - 930: e0 e0 ldi r30, 0x00 ; 0 - 932: f0 e0 ldi r31, 0x00 ; 0 + 90a: e0 e0 ldi r30, 0x00 ; 0 + 90c: f0 e0 ldi r31, 0x00 ; 0 } break; } *DescriptorAddress = Address; - 934: da 01 movw r26, r20 - 936: 11 96 adiw r26, 0x01 ; 1 - 938: fc 93 st X, r31 - 93a: ee 93 st -X, r30 + 90e: da 01 movw r26, r20 + 910: 11 96 adiw r26, 0x01 ; 1 + 912: fc 93 st X, r31 + 914: ee 93 st -X, r30 return Size; } - 93c: c9 01 movw r24, r18 - 93e: 08 95 ret + 916: c9 01 movw r24, r18 + 918: 08 95 ret -00000940 : +0000091a : #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)); - 940: 28 2f mov r18, r24 - 942: 39 2f mov r19, r25 - 944: f9 01 movw r30, r18 + 91a: 28 2f mov r18, r24 + 91c: 39 2f mov r19, r25 + 91e: f9 01 movw r30, r18 bool LastPacketFull = false; if (Length > USB_ControlRequest.wLength) - 946: 80 91 a0 02 lds r24, 0x02A0 - 94a: 90 91 a1 02 lds r25, 0x02A1 - 94e: 86 17 cp r24, r22 - 950: 97 07 cpc r25, r23 - 952: 18 f4 brcc .+6 ; 0x95a - 954: bc 01 movw r22, r24 - 956: 20 e0 ldi r18, 0x00 ; 0 - 958: 34 c0 rjmp .+104 ; 0x9c2 + 920: 80 91 62 02 lds r24, 0x0262 + 924: 90 91 63 02 lds r25, 0x0263 + 928: 86 17 cp r24, r22 + 92a: 97 07 cpc r25, r23 + 92c: 18 f4 brcc .+6 ; 0x934 + 92e: bc 01 movw r22, r24 + 930: 20 e0 ldi r18, 0x00 ; 0 + 932: 34 c0 rjmp .+104 ; 0x99c Length = USB_ControlRequest.wLength; else if (!(Length)) - 95a: 61 15 cp r22, r1 - 95c: 71 05 cpc r23, r1 - 95e: d9 f7 brne .-10 ; 0x956 + 934: 61 15 cp r22, r1 + 936: 71 05 cpc r23, r1 + 938: d9 f7 brne .-10 ; 0x930 */ 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)); - 960: 80 91 e8 00 lds r24, 0x00E8 - 964: 8e 77 andi r24, 0x7E ; 126 - 966: 80 93 e8 00 sts 0x00E8, r24 - 96a: f5 cf rjmp .-22 ; 0x956 + 93a: 80 91 e8 00 lds r24, 0x00E8 + 93e: 8e 77 andi r24, 0x7E ; 126 + 940: 80 93 e8 00 sts 0x00E8, r24 + 944: f5 cf rjmp .-22 ; 0x930 Endpoint_ClearIN(); while (Length || LastPacketFull) { uint8_t USB_DeviceState_LCL = USB_DeviceState; - 96c: 8e b3 in r24, 0x1e ; 30 + 946: 8e b3 in r24, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - 96e: 88 23 and r24, r24 - 970: e9 f1 breq .+122 ; 0x9ec + 948: 88 23 and r24, r24 + 94a: e9 f1 breq .+122 ; 0x9c6 return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - 972: 85 30 cpi r24, 0x05 ; 5 - 974: b9 f1 breq .+110 ; 0x9e4 + 94c: 85 30 cpi r24, 0x05 ; 5 + 94e: b9 f1 breq .+110 ; 0x9be * \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); - 976: 80 91 e8 00 lds r24, 0x00E8 + 950: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWCSTREAM_BusSuspended; else if (Endpoint_IsSETUPReceived()) - 97a: 83 fd sbrc r24, 3 - 97c: 35 c0 rjmp .+106 ; 0x9e8 + 954: 83 fd sbrc r24, 3 + 956: 35 c0 rjmp .+106 ; 0x9c2 * \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); - 97e: 80 91 e8 00 lds r24, 0x00E8 + 958: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWCSTREAM_HostAborted; else if (Endpoint_IsOUTReceived()) - 982: 82 fd sbrc r24, 2 - 984: 29 c0 rjmp .+82 ; 0x9d8 + 95c: 82 fd sbrc r24, 2 + 95e: 29 c0 rjmp .+82 ; 0x9b2 * \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); - 986: 80 91 e8 00 lds r24, 0x00E8 + 960: 80 91 e8 00 lds r24, 0x00E8 break; if (Endpoint_IsINReady()) - 98a: 80 ff sbrs r24, 0 - 98c: 1a c0 rjmp .+52 ; 0x9c2 + 964: 80 ff sbrs r24, 0 + 966: 1a c0 rjmp .+52 ; 0x99c #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; - 98e: 80 91 f2 00 lds r24, 0x00F2 - 992: 90 e0 ldi r25, 0x00 ; 0 + 968: 80 91 f2 00 lds r24, 0x00F2 + 96c: 90 e0 ldi r25, 0x00 ; 0 { uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) - 994: 06 c0 rjmp .+12 ; 0x9a2 + 96e: 06 c0 rjmp .+12 ; 0x97c { TEMPLATE_TRANSFER_BYTE(DataStream); - 996: 21 91 ld r18, Z+ + 970: 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; - 998: 20 93 f1 00 sts 0x00F1, r18 + 972: 20 93 f1 00 sts 0x00F1, r18 TEMPLATE_BUFFER_MOVE(DataStream, 1); Length--; - 99c: 61 50 subi r22, 0x01 ; 1 - 99e: 70 40 sbci r23, 0x00 ; 0 + 976: 61 50 subi r22, 0x01 ; 1 + 978: 70 40 sbci r23, 0x00 ; 0 BytesInEndpoint++; - 9a0: 01 96 adiw r24, 0x01 ; 1 + 97a: 01 96 adiw r24, 0x01 ; 1 if (Endpoint_IsINReady()) { uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) - 9a2: 61 15 cp r22, r1 - 9a4: 71 05 cpc r23, r1 - 9a6: 19 f0 breq .+6 ; 0x9ae - 9a8: 88 30 cpi r24, 0x08 ; 8 - 9aa: 91 05 cpc r25, r1 - 9ac: a0 f3 brcs .-24 ; 0x996 + 97c: 61 15 cp r22, r1 + 97e: 71 05 cpc r23, r1 + 980: 19 f0 breq .+6 ; 0x988 + 982: 88 30 cpi r24, 0x08 ; 8 + 984: 91 05 cpc r25, r1 + 986: a0 f3 brcs .-24 ; 0x970 TEMPLATE_BUFFER_MOVE(DataStream, 1); Length--; BytesInEndpoint++; } LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); - 9ae: 21 e0 ldi r18, 0x01 ; 1 - 9b0: 88 30 cpi r24, 0x08 ; 8 - 9b2: 91 05 cpc r25, r1 - 9b4: 09 f0 breq .+2 ; 0x9b8 - 9b6: 20 e0 ldi r18, 0x00 ; 0 + 988: 21 e0 ldi r18, 0x01 ; 1 + 98a: 88 30 cpi r24, 0x08 ; 8 + 98c: 91 05 cpc r25, r1 + 98e: 09 f0 breq .+2 ; 0x992 + 990: 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)); - 9b8: 80 91 e8 00 lds r24, 0x00E8 - 9bc: 8e 77 andi r24, 0x7E ; 126 - 9be: 80 93 e8 00 sts 0x00E8, r24 + 992: 80 91 e8 00 lds r24, 0x00E8 + 996: 8e 77 andi r24, 0x7E ; 126 + 998: 80 93 e8 00 sts 0x00E8, r24 if (Length > USB_ControlRequest.wLength) Length = USB_ControlRequest.wLength; else if (!(Length)) Endpoint_ClearIN(); while (Length || LastPacketFull) - 9c2: 61 15 cp r22, r1 - 9c4: 71 05 cpc r23, r1 - 9c6: 91 f6 brne .-92 ; 0x96c - 9c8: 22 23 and r18, r18 - 9ca: 81 f6 brne .-96 ; 0x96c - 9cc: 05 c0 rjmp .+10 ; 0x9d8 + 99c: 61 15 cp r22, r1 + 99e: 71 05 cpc r23, r1 + 9a0: 91 f6 brne .-92 ; 0x946 + 9a2: 22 23 and r18, r18 + 9a4: 81 f6 brne .-96 ; 0x946 + 9a6: 05 c0 rjmp .+10 ; 0x9b2 } } while (!(Endpoint_IsOUTReceived())) { uint8_t USB_DeviceState_LCL = USB_DeviceState; - 9ce: 8e b3 in r24, 0x1e ; 30 + 9a8: 8e b3 in r24, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - 9d0: 88 23 and r24, r24 - 9d2: 61 f0 breq .+24 ; 0x9ec + 9aa: 88 23 and r24, r24 + 9ac: 61 f0 breq .+24 ; 0x9c6 return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - 9d4: 85 30 cpi r24, 0x05 ; 5 - 9d6: 61 f0 breq .+24 ; 0x9f0 + 9ae: 85 30 cpi r24, 0x05 ; 5 + 9b0: 61 f0 breq .+24 ; 0x9ca * \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); - 9d8: 80 91 e8 00 lds r24, 0x00E8 + 9b2: 80 91 e8 00 lds r24, 0x00E8 LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); Endpoint_ClearIN(); } } while (!(Endpoint_IsOUTReceived())) - 9dc: 82 ff sbrs r24, 2 - 9de: f7 cf rjmp .-18 ; 0x9ce + 9b6: 82 ff sbrs r24, 2 + 9b8: f7 cf rjmp .-18 ; 0x9a8 return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; } return ENDPOINT_RWCSTREAM_NoError; - 9e0: 80 e0 ldi r24, 0x00 ; 0 - 9e2: 08 95 ret + 9ba: 80 e0 ldi r24, 0x00 ; 0 + 9bc: 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; - 9e4: 83 e0 ldi r24, 0x03 ; 3 - 9e6: 08 95 ret + 9be: 83 e0 ldi r24, 0x03 ; 3 + 9c0: 08 95 ret else if (Endpoint_IsSETUPReceived()) return ENDPOINT_RWCSTREAM_HostAborted; - 9e8: 81 e0 ldi r24, 0x01 ; 1 - 9ea: 08 95 ret + 9c2: 81 e0 ldi r24, 0x01 ; 1 + 9c4: 08 95 ret while (!(Endpoint_IsOUTReceived())) { uint8_t USB_DeviceState_LCL = USB_DeviceState; if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) return ENDPOINT_RWCSTREAM_DeviceDisconnected; - 9ec: 82 e0 ldi r24, 0x02 ; 2 - 9ee: 08 95 ret + 9c6: 82 e0 ldi r24, 0x02 ; 2 + 9c8: 08 95 ret else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; - 9f0: 83 e0 ldi r24, 0x03 ; 3 + 9ca: 83 e0 ldi r24, 0x03 ; 3 } return ENDPOINT_RWCSTREAM_NoError; } - 9f2: 08 95 ret + 9cc: 08 95 ret -000009f4 : +000009ce : #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)); - 9f4: e8 2f mov r30, r24 - 9f6: f9 2f mov r31, r25 + 9ce: e8 2f mov r30, r24 + 9d0: f9 2f mov r31, r25 bool LastPacketFull = false; if (Length > USB_ControlRequest.wLength) - 9f8: 80 91 a0 02 lds r24, 0x02A0 - 9fc: 90 91 a1 02 lds r25, 0x02A1 - a00: 86 17 cp r24, r22 - a02: 97 07 cpc r25, r23 - a04: 18 f4 brcc .+6 ; 0xa0c - a06: bc 01 movw r22, r24 - a08: 20 e0 ldi r18, 0x00 ; 0 - a0a: 36 c0 rjmp .+108 ; 0xa78 + 9d2: 80 91 62 02 lds r24, 0x0262 + 9d6: 90 91 63 02 lds r25, 0x0263 + 9da: 86 17 cp r24, r22 + 9dc: 97 07 cpc r25, r23 + 9de: 18 f4 brcc .+6 ; 0x9e6 + 9e0: bc 01 movw r22, r24 + 9e2: 20 e0 ldi r18, 0x00 ; 0 + 9e4: 36 c0 rjmp .+108 ; 0xa52 Length = USB_ControlRequest.wLength; else if (!(Length)) - a0c: 61 15 cp r22, r1 - a0e: 71 05 cpc r23, r1 - a10: d9 f7 brne .-10 ; 0xa08 + 9e6: 61 15 cp r22, r1 + 9e8: 71 05 cpc r23, r1 + 9ea: d9 f7 brne .-10 ; 0x9e2 */ 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)); - a12: 80 91 e8 00 lds r24, 0x00E8 - a16: 8e 77 andi r24, 0x7E ; 126 - a18: 80 93 e8 00 sts 0x00E8, r24 - a1c: f5 cf rjmp .-22 ; 0xa08 + 9ec: 80 91 e8 00 lds r24, 0x00E8 + 9f0: 8e 77 andi r24, 0x7E ; 126 + 9f2: 80 93 e8 00 sts 0x00E8, r24 + 9f6: f5 cf rjmp .-22 ; 0x9e2 Endpoint_ClearIN(); while (Length || LastPacketFull) { uint8_t USB_DeviceState_LCL = USB_DeviceState; - a1e: 8e b3 in r24, 0x1e ; 30 + 9f8: 8e b3 in r24, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - a20: 88 23 and r24, r24 - a22: 09 f4 brne .+2 ; 0xa26 - a24: 3e c0 rjmp .+124 ; 0xaa2 + 9fa: 88 23 and r24, r24 + 9fc: 09 f4 brne .+2 ; 0xa00 + 9fe: 3e c0 rjmp .+124 ; 0xa7c return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - a26: 85 30 cpi r24, 0x05 ; 5 - a28: c1 f1 breq .+112 ; 0xa9a + a00: 85 30 cpi r24, 0x05 ; 5 + a02: c1 f1 breq .+112 ; 0xa74 * \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); - a2a: 80 91 e8 00 lds r24, 0x00E8 + a04: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWCSTREAM_BusSuspended; else if (Endpoint_IsSETUPReceived()) - a2e: 83 fd sbrc r24, 3 - a30: 36 c0 rjmp .+108 ; 0xa9e + a08: 83 fd sbrc r24, 3 + a0a: 36 c0 rjmp .+108 ; 0xa78 * \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); - a32: 80 91 e8 00 lds r24, 0x00E8 + a0c: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWCSTREAM_HostAborted; else if (Endpoint_IsOUTReceived()) - a36: 82 fd sbrc r24, 2 - a38: 2a c0 rjmp .+84 ; 0xa8e + a10: 82 fd sbrc r24, 2 + a12: 2a c0 rjmp .+84 ; 0xa68 * \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); - a3a: 80 91 e8 00 lds r24, 0x00E8 + a14: 80 91 e8 00 lds r24, 0x00E8 break; if (Endpoint_IsINReady()) - a3e: 80 ff sbrs r24, 0 - a40: 1b c0 rjmp .+54 ; 0xa78 + a18: 80 ff sbrs r24, 0 + a1a: 1b c0 rjmp .+54 ; 0xa52 #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; - a42: 80 91 f2 00 lds r24, 0x00F2 - a46: 90 e0 ldi r25, 0x00 ; 0 + a1c: 80 91 f2 00 lds r24, 0x00F2 + a20: 90 e0 ldi r25, 0x00 ; 0 { uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) - a48: 07 c0 rjmp .+14 ; 0xa58 + a22: 07 c0 rjmp .+14 ; 0xa32 { TEMPLATE_TRANSFER_BYTE(DataStream); - a4a: 24 91 lpm r18, Z+ + a24: 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; - a4c: 20 93 f1 00 sts 0x00F1, r18 + a26: 20 93 f1 00 sts 0x00F1, r18 TEMPLATE_BUFFER_MOVE(DataStream, 1); - a50: 31 96 adiw r30, 0x01 ; 1 + a2a: 31 96 adiw r30, 0x01 ; 1 Length--; - a52: 61 50 subi r22, 0x01 ; 1 - a54: 70 40 sbci r23, 0x00 ; 0 + a2c: 61 50 subi r22, 0x01 ; 1 + a2e: 70 40 sbci r23, 0x00 ; 0 BytesInEndpoint++; - a56: 01 96 adiw r24, 0x01 ; 1 + a30: 01 96 adiw r24, 0x01 ; 1 if (Endpoint_IsINReady()) { uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) - a58: 61 15 cp r22, r1 - a5a: 71 05 cpc r23, r1 - a5c: 19 f0 breq .+6 ; 0xa64 - a5e: 88 30 cpi r24, 0x08 ; 8 - a60: 91 05 cpc r25, r1 - a62: 98 f3 brcs .-26 ; 0xa4a + a32: 61 15 cp r22, r1 + a34: 71 05 cpc r23, r1 + a36: 19 f0 breq .+6 ; 0xa3e + a38: 88 30 cpi r24, 0x08 ; 8 + a3a: 91 05 cpc r25, r1 + a3c: 98 f3 brcs .-26 ; 0xa24 TEMPLATE_BUFFER_MOVE(DataStream, 1); Length--; BytesInEndpoint++; } LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); - a64: 21 e0 ldi r18, 0x01 ; 1 - a66: 88 30 cpi r24, 0x08 ; 8 - a68: 91 05 cpc r25, r1 - a6a: 09 f0 breq .+2 ; 0xa6e - a6c: 20 e0 ldi r18, 0x00 ; 0 + a3e: 21 e0 ldi r18, 0x01 ; 1 + a40: 88 30 cpi r24, 0x08 ; 8 + a42: 91 05 cpc r25, r1 + a44: 09 f0 breq .+2 ; 0xa48 + a46: 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)); - a6e: 80 91 e8 00 lds r24, 0x00E8 - a72: 8e 77 andi r24, 0x7E ; 126 - a74: 80 93 e8 00 sts 0x00E8, r24 + a48: 80 91 e8 00 lds r24, 0x00E8 + a4c: 8e 77 andi r24, 0x7E ; 126 + a4e: 80 93 e8 00 sts 0x00E8, r24 if (Length > USB_ControlRequest.wLength) Length = USB_ControlRequest.wLength; else if (!(Length)) Endpoint_ClearIN(); while (Length || LastPacketFull) - a78: 61 15 cp r22, r1 - a7a: 71 05 cpc r23, r1 - a7c: 81 f6 brne .-96 ; 0xa1e - a7e: 22 23 and r18, r18 - a80: 71 f6 brne .-100 ; 0xa1e - a82: 05 c0 rjmp .+10 ; 0xa8e + a52: 61 15 cp r22, r1 + a54: 71 05 cpc r23, r1 + a56: 81 f6 brne .-96 ; 0x9f8 + a58: 22 23 and r18, r18 + a5a: 71 f6 brne .-100 ; 0x9f8 + a5c: 05 c0 rjmp .+10 ; 0xa68 } } while (!(Endpoint_IsOUTReceived())) { uint8_t USB_DeviceState_LCL = USB_DeviceState; - a84: 8e b3 in r24, 0x1e ; 30 + a5e: 8e b3 in r24, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - a86: 88 23 and r24, r24 - a88: 61 f0 breq .+24 ; 0xaa2 + a60: 88 23 and r24, r24 + a62: 61 f0 breq .+24 ; 0xa7c return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - a8a: 85 30 cpi r24, 0x05 ; 5 - a8c: 61 f0 breq .+24 ; 0xaa6 + a64: 85 30 cpi r24, 0x05 ; 5 + a66: 61 f0 breq .+24 ; 0xa80 * \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); - a8e: 80 91 e8 00 lds r24, 0x00E8 + a68: 80 91 e8 00 lds r24, 0x00E8 LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); Endpoint_ClearIN(); } } while (!(Endpoint_IsOUTReceived())) - a92: 82 ff sbrs r24, 2 - a94: f7 cf rjmp .-18 ; 0xa84 + a6c: 82 ff sbrs r24, 2 + a6e: f7 cf rjmp .-18 ; 0xa5e return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; } return ENDPOINT_RWCSTREAM_NoError; - a96: 80 e0 ldi r24, 0x00 ; 0 - a98: 08 95 ret + a70: 80 e0 ldi r24, 0x00 ; 0 + a72: 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; - a9a: 83 e0 ldi r24, 0x03 ; 3 - a9c: 08 95 ret + a74: 83 e0 ldi r24, 0x03 ; 3 + a76: 08 95 ret else if (Endpoint_IsSETUPReceived()) return ENDPOINT_RWCSTREAM_HostAborted; - a9e: 81 e0 ldi r24, 0x01 ; 1 - aa0: 08 95 ret + a78: 81 e0 ldi r24, 0x01 ; 1 + a7a: 08 95 ret while (!(Endpoint_IsOUTReceived())) { uint8_t USB_DeviceState_LCL = USB_DeviceState; if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) return ENDPOINT_RWCSTREAM_DeviceDisconnected; - aa2: 82 e0 ldi r24, 0x02 ; 2 - aa4: 08 95 ret + a7c: 82 e0 ldi r24, 0x02 ; 2 + a7e: 08 95 ret else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; - aa6: 83 e0 ldi r24, 0x03 ; 3 + a80: 83 e0 ldi r24, 0x03 ; 3 } return ENDPOINT_RWCSTREAM_NoError; } - aa8: 08 95 ret + a82: 08 95 ret -00000aaa : +00000a84 : UECFG0X = UECFG0XData; UECFG1X = UECFG1XData; return Endpoint_IsConfigured(); #else for (uint8_t EPNum = Number; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++) - aaa: 98 2f mov r25, r24 - aac: 2c c0 rjmp .+88 ; 0xb06 + a84: 98 2f mov r25, r24 + a86: 2c c0 rjmp .+88 ; 0xae0 */ 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); - aae: 29 2f mov r18, r25 - ab0: 2f 70 andi r18, 0x0F ; 15 - ab2: 20 93 e9 00 sts 0x00E9, r18 + a88: 29 2f mov r18, r25 + a8a: 2f 70 andi r18, 0x0F ; 15 + a8c: 20 93 e9 00 sts 0x00E9, r18 uint8_t UECFG1XTemp; uint8_t UEIENXTemp; Endpoint_SelectEndpoint(EPNum); if (EPNum == Number) - ab6: 98 17 cp r25, r24 - ab8: 39 f0 breq .+14 ; 0xac8 + a90: 98 17 cp r25, r24 + a92: 39 f0 breq .+14 ; 0xaa2 UECFG1XTemp = UECFG1XData; UEIENXTemp = 0; } else { UECFG0XTemp = UECFG0X; - aba: 70 91 ec 00 lds r23, 0x00EC + a94: 70 91 ec 00 lds r23, 0x00EC UECFG1XTemp = UECFG1X; - abe: 20 91 ed 00 lds r18, 0x00ED + a98: 20 91 ed 00 lds r18, 0x00ED UEIENXTemp = UEIENX; - ac2: 50 91 f0 00 lds r21, 0x00F0 - ac6: 03 c0 rjmp .+6 ; 0xace + a9c: 50 91 f0 00 lds r21, 0x00F0 + aa0: 03 c0 rjmp .+6 ; 0xaa8 Endpoint_SelectEndpoint(EPNum); if (EPNum == Number) { UECFG0XTemp = UECFG0XData; UECFG1XTemp = UECFG1XData; - ac8: 24 2f mov r18, r20 + aa2: 24 2f mov r18, r20 Endpoint_SelectEndpoint(EPNum); if (EPNum == Number) { UECFG0XTemp = UECFG0XData; - aca: 76 2f mov r23, r22 + aa4: 76 2f mov r23, r22 UECFG1XTemp = UECFG1XData; UEIENXTemp = 0; - acc: 50 e0 ldi r21, 0x00 ; 0 + aa6: 50 e0 ldi r21, 0x00 ; 0 UECFG0XTemp = UECFG0X; UECFG1XTemp = UECFG1X; UEIENXTemp = UEIENX; } if (!(UECFG1XTemp & (1 << ALLOC))) - ace: 21 ff sbrs r18, 1 - ad0: 19 c0 rjmp .+50 ; 0xb04 + aa8: 21 ff sbrs r18, 1 + aaa: 19 c0 rjmp .+50 ; 0xade * to and from a host. */ static inline void Endpoint_DisableEndpoint(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_DisableEndpoint(void) { UECONX &= ~(1 << EPEN); - ad2: 30 91 eb 00 lds r19, 0x00EB - ad6: 3e 7f andi r19, 0xFE ; 254 - ad8: 30 93 eb 00 sts 0x00EB, r19 + aac: 30 91 eb 00 lds r19, 0x00EB + ab0: 3e 7f andi r19, 0xFE ; 254 + ab2: 30 93 eb 00 sts 0x00EB, r19 continue; Endpoint_DisableEndpoint(); UECFG1X &= ~(1 << ALLOC); - adc: 30 91 ed 00 lds r19, 0x00ED - ae0: 3d 7f andi r19, 0xFD ; 253 - ae2: 30 93 ed 00 sts 0x00ED, r19 + ab6: 30 91 ed 00 lds r19, 0x00ED + aba: 3d 7f andi r19, 0xFD ; 253 + abc: 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); - ae6: 30 91 eb 00 lds r19, 0x00EB - aea: 31 60 ori r19, 0x01 ; 1 - aec: 30 93 eb 00 sts 0x00EB, r19 + ac0: 30 91 eb 00 lds r19, 0x00EB + ac4: 31 60 ori r19, 0x01 ; 1 + ac6: 30 93 eb 00 sts 0x00EB, r19 Endpoint_EnableEndpoint(); UECFG0X = UECFG0XTemp; - af0: 70 93 ec 00 sts 0x00EC, r23 + aca: 70 93 ec 00 sts 0x00EC, r23 UECFG1X = UECFG1XTemp; - af4: 20 93 ed 00 sts 0x00ED, r18 + ace: 20 93 ed 00 sts 0x00ED, r18 UEIENX = UEIENXTemp; - af8: 50 93 f0 00 sts 0x00F0, r21 + ad2: 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); - afc: 20 91 ee 00 lds r18, 0x00EE + ad6: 20 91 ee 00 lds r18, 0x00EE if (!(Endpoint_IsConfigured())) - b00: 27 ff sbrs r18, 7 - b02: 08 c0 rjmp .+16 ; 0xb14 + ada: 27 ff sbrs r18, 7 + adc: 08 c0 rjmp .+16 ; 0xaee UECFG0X = UECFG0XData; UECFG1X = UECFG1XData; return Endpoint_IsConfigured(); #else for (uint8_t EPNum = Number; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++) - b04: 9f 5f subi r25, 0xFF ; 255 - b06: 95 30 cpi r25, 0x05 ; 5 - b08: 90 f2 brcs .-92 ; 0xaae + ade: 9f 5f subi r25, 0xFF ; 255 + ae0: 95 30 cpi r25, 0x05 ; 5 + ae2: 90 f2 brcs .-92 ; 0xa88 */ 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); - b0a: 8f 70 andi r24, 0x0F ; 15 - b0c: 80 93 e9 00 sts 0x00E9, r24 + ae4: 8f 70 andi r24, 0x0F ; 15 + ae6: 80 93 e9 00 sts 0x00E9, r24 if (!(Endpoint_IsConfigured())) return false; } Endpoint_SelectEndpoint(Number); return true; - b10: 81 e0 ldi r24, 0x01 ; 1 - b12: 08 95 ret + aea: 81 e0 ldi r24, 0x01 ; 1 + aec: 08 95 ret UECFG0X = UECFG0XTemp; UECFG1X = UECFG1XTemp; UEIENX = UEIENXTemp; if (!(Endpoint_IsConfigured())) return false; - b14: 80 e0 ldi r24, 0x00 ; 0 + aee: 80 e0 ldi r24, 0x00 ; 0 } Endpoint_SelectEndpoint(Number); return true; #endif } - b16: 08 95 ret + af0: 08 95 ret -00000b18 : +00000af2 : uint8_t USB_Device_ControlEndpointSize = ENDPOINT_CONTROLEP_DEFAULT_SIZE; #endif bool Endpoint_ConfigureEndpointTable(const USB_Endpoint_Table_t* const Table, const uint8_t Entries) { - b18: ef 92 push r14 - b1a: ff 92 push r15 - b1c: 0f 93 push r16 - b1e: 1f 93 push r17 - b20: cf 93 push r28 - b22: df 93 push r29 - b24: 16 2f mov r17, r22 + af2: ef 92 push r14 + af4: ff 92 push r15 + af6: 0f 93 push r16 + af8: 1f 93 push r17 + afa: cf 93 push r28 + afc: df 93 push r29 + afe: 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; - b26: e8 2e mov r14, r24 - b28: e7 01 movw r28, r14 - b2a: 7e 01 movw r14, r28 - b2c: f9 2e mov r15, r25 - b2e: e7 01 movw r28, r14 + b00: e8 2e mov r14, r24 + b02: e7 01 movw r28, r14 + b04: 7e 01 movw r14, r28 + b06: f9 2e mov r15, r25 + b08: 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++) - b30: 00 e0 ldi r16, 0x00 ; 0 - b32: 2a c0 rjmp .+84 ; 0xb88 + b0a: 00 e0 ldi r16, 0x00 ; 0 + b0c: 2a c0 rjmp .+84 ; 0xb62 { if (!(Table[i].Address)) - b34: 98 81 ld r25, Y - b36: 99 23 and r25, r25 - b38: 29 f1 breq .+74 ; 0xb84 + b0e: 98 81 ld r25, Y + b10: 99 23 and r25, r25 + b12: 29 f1 breq .+74 ; 0xb5e continue; if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks))) - b3a: 6b 81 ldd r22, Y+3 ; 0x03 - b3c: e9 81 ldd r30, Y+1 ; 0x01 - b3e: fa 81 ldd r31, Y+2 ; 0x02 - b40: 2c 81 ldd r18, Y+4 ; 0x04 + b14: 6b 81 ldd r22, Y+3 ; 0x03 + b16: e9 81 ldd r30, Y+1 ; 0x01 + b18: fa 81 ldd r31, Y+2 ; 0x02 + b1a: 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); - b42: 89 2f mov r24, r25 - b44: 8f 70 andi r24, 0x0F ; 15 + b1c: 89 2f mov r24, r25 + b1e: 8f 70 andi r24, 0x0F ; 15 if (Number >= ENDPOINT_TOTAL_ENDPOINTS) - b46: 85 30 cpi r24, 0x05 ; 5 - b48: 18 f5 brcc .+70 ; 0xb90 + b20: 85 30 cpi r24, 0x05 ; 5 + b22: 18 f5 brcc .+70 ; 0xb6a return false; return Endpoint_ConfigureEndpoint_Prv(Number, ((Type << EPTYPE0) | ((Address & ENDPOINT_DIR_IN) ? (1 << EPDIR) : 0)), - b4a: 62 95 swap r22 - b4c: 66 0f add r22, r22 - b4e: 66 0f add r22, r22 - b50: 60 7c andi r22, 0xC0 ; 192 - b52: 99 1f adc r25, r25 - b54: 99 27 eor r25, r25 - b56: 99 1f adc r25, r25 + b24: 62 95 swap r22 + b26: 66 0f add r22, r22 + b28: 66 0f add r22, r22 + b2a: 60 7c andi r22, 0xC0 ; 192 + b2c: 99 1f adc r25, r25 + b2e: 99 27 eor r25, r25 + b30: 99 1f adc r25, r25 uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); if (Number >= ENDPOINT_TOTAL_ENDPOINTS) return false; return Endpoint_ConfigureEndpoint_Prv(Number, - b58: 69 2b or r22, r25 - b5a: 22 30 cpi r18, 0x02 ; 2 - b5c: 10 f0 brcs .+4 ; 0xb62 - b5e: 96 e0 ldi r25, 0x06 ; 6 - b60: 01 c0 rjmp .+2 ; 0xb64 - b62: 92 e0 ldi r25, 0x02 ; 2 + b32: 69 2b or r22, r25 + b34: 22 30 cpi r18, 0x02 ; 2 + b36: 10 f0 brcs .+4 ; 0xb3c + b38: 96 e0 ldi r25, 0x06 ; 6 + b3a: 01 c0 rjmp .+2 ; 0xb3e + b3c: 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; - b64: 28 e0 ldi r18, 0x08 ; 8 - b66: 30 e0 ldi r19, 0x00 ; 0 + b3e: 28 e0 ldi r18, 0x08 ; 8 + b40: 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; - b68: 40 e0 ldi r20, 0x00 ; 0 - b6a: 03 c0 rjmp .+6 ; 0xb72 + b42: 40 e0 ldi r20, 0x00 ; 0 + b44: 03 c0 rjmp .+6 ; 0xb4c uint16_t CheckBytes = 8; while (CheckBytes < Bytes) { MaskVal++; - b6c: 4f 5f subi r20, 0xFF ; 255 + b46: 4f 5f subi r20, 0xFF ; 255 CheckBytes <<= 1; - b6e: 22 0f add r18, r18 - b70: 33 1f adc r19, r19 + b48: 22 0f add r18, r18 + b4a: 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) - b72: 2e 17 cp r18, r30 - b74: 3f 07 cpc r19, r31 - b76: d0 f3 brcs .-12 ; 0xb6c + b4c: 2e 17 cp r18, r30 + b4e: 3f 07 cpc r19, r31 + b50: d0 f3 brcs .-12 ; 0xb46 { MaskVal++; CheckBytes <<= 1; } return (MaskVal << EPSIZE0); - b78: 42 95 swap r20 - b7a: 40 7f andi r20, 0xF0 ; 240 + b52: 42 95 swap r20 + b54: 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, - b7c: 49 2b or r20, r25 - b7e: 95 df rcall .-214 ; 0xaaa - b80: 88 23 and r24, r24 - b82: 31 f0 breq .+12 ; 0xb90 + b56: 49 2b or r20, r25 + b58: 95 df rcall .-214 ; 0xa84 + b5a: 88 23 and r24, r24 + b5c: 31 f0 breq .+12 ; 0xb6a #endif bool Endpoint_ConfigureEndpointTable(const USB_Endpoint_Table_t* const Table, const uint8_t Entries) { for (uint8_t i = 0; i < Entries; i++) - b84: 0f 5f subi r16, 0xFF ; 255 - b86: 25 96 adiw r28, 0x05 ; 5 - b88: 01 17 cp r16, r17 - b8a: a0 f2 brcs .-88 ; 0xb34 + b5e: 0f 5f subi r16, 0xFF ; 255 + b60: 25 96 adiw r28, 0x05 ; 5 + b62: 01 17 cp r16, r17 + b64: a0 f2 brcs .-88 ; 0xb0e if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks))) return false; } return true; - b8c: 81 e0 ldi r24, 0x01 ; 1 - b8e: 01 c0 rjmp .+2 ; 0xb92 + b66: 81 e0 ldi r24, 0x01 ; 1 + b68: 01 c0 rjmp .+2 ; 0xb6c { if (!(Table[i].Address)) continue; if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks))) return false; - b90: 80 e0 ldi r24, 0x00 ; 0 + b6a: 80 e0 ldi r24, 0x00 ; 0 } return true; } - b92: df 91 pop r29 - b94: cf 91 pop r28 - b96: 1f 91 pop r17 - b98: 0f 91 pop r16 - b9a: ff 90 pop r15 - b9c: ef 90 pop r14 - b9e: 08 95 ret - -00000ba0 : + b6c: df 91 pop r29 + b6e: cf 91 pop r28 + b70: 1f 91 pop r17 + b72: 0f 91 pop r16 + b74: ff 90 pop r15 + b76: ef 90 pop r14 + b78: 08 95 ret + +00000b7a : } } void Endpoint_ClearStatusStage(void) { if (USB_ControlRequest.bmRequestType & REQDIR_DEVICETOHOST) - ba0: 80 91 9a 02 lds r24, 0x029A - ba4: 87 ff sbrs r24, 7 - ba6: 11 c0 rjmp .+34 ; 0xbca - ba8: 03 c0 rjmp .+6 ; 0xbb0 + b7a: 80 91 5c 02 lds r24, 0x025C + b7e: 87 ff sbrs r24, 7 + b80: 11 c0 rjmp .+34 ; 0xba4 + b82: 03 c0 rjmp .+6 ; 0xb8a { while (!(Endpoint_IsOUTReceived())) { if (USB_DeviceState == DEVICE_STATE_Unattached) - baa: 8e b3 in r24, 0x1e ; 30 - bac: 88 23 and r24, r24 - bae: b1 f0 breq .+44 ; 0xbdc + b84: 8e b3 in r24, 0x1e ; 30 + b86: 88 23 and r24, r24 + b88: b1 f0 breq .+44 ; 0xbb6 * \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); - bb0: 80 91 e8 00 lds r24, 0x00E8 + b8a: 80 91 e8 00 lds r24, 0x00E8 void Endpoint_ClearStatusStage(void) { if (USB_ControlRequest.bmRequestType & REQDIR_DEVICETOHOST) { while (!(Endpoint_IsOUTReceived())) - bb4: 82 ff sbrs r24, 2 - bb6: f9 cf rjmp .-14 ; 0xbaa + b8e: 82 ff sbrs r24, 2 + b90: f9 cf rjmp .-14 ; 0xb84 */ 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)); - bb8: 80 91 e8 00 lds r24, 0x00E8 - bbc: 8b 77 andi r24, 0x7B ; 123 - bbe: 80 93 e8 00 sts 0x00E8, r24 - bc2: 08 95 ret + b92: 80 91 e8 00 lds r24, 0x00E8 + b96: 8b 77 andi r24, 0x7B ; 123 + b98: 80 93 e8 00 sts 0x00E8, r24 + b9c: 08 95 ret } else { while (!(Endpoint_IsINReady())) { if (USB_DeviceState == DEVICE_STATE_Unattached) - bc4: 8e b3 in r24, 0x1e ; 30 - bc6: 88 23 and r24, r24 - bc8: 49 f0 breq .+18 ; 0xbdc + b9e: 8e b3 in r24, 0x1e ; 30 + ba0: 88 23 and r24, r24 + ba2: 49 f0 breq .+18 ; 0xbb6 * \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); - bca: 80 91 e8 00 lds r24, 0x00E8 + ba4: 80 91 e8 00 lds r24, 0x00E8 Endpoint_ClearOUT(); } else { while (!(Endpoint_IsINReady())) - bce: 80 ff sbrs r24, 0 - bd0: f9 cf rjmp .-14 ; 0xbc4 + ba8: 80 ff sbrs r24, 0 + baa: f9 cf rjmp .-14 ; 0xb9e */ 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)); - bd2: 80 91 e8 00 lds r24, 0x00E8 - bd6: 8e 77 andi r24, 0x7E ; 126 - bd8: 80 93 e8 00 sts 0x00E8, r24 - bdc: 08 95 ret + bac: 80 91 e8 00 lds r24, 0x00E8 + bb0: 8e 77 andi r24, 0x7E ; 126 + bb2: 80 93 e8 00 sts 0x00E8, r24 + bb6: 08 95 ret -00000bde : +00000bb8 : * \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; - bde: 80 91 e4 00 lds r24, 0x00E4 - be2: 90 91 e5 00 lds r25, 0x00E5 + bb8: 80 91 e4 00 lds r24, 0x00E4 + bbc: 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; - be6: 44 e6 ldi r20, 0x64 ; 100 + bc0: 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; - be8: 20 91 ec 00 lds r18, 0x00EC - bec: 20 ff sbrs r18, 0 - bee: 25 c0 rjmp .+74 ; 0xc3a + bc2: 20 91 ec 00 lds r18, 0x00EC + bc6: 20 ff sbrs r18, 0 + bc8: 25 c0 rjmp .+74 ; 0xc14 * \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); - bf0: 20 91 e8 00 lds r18, 0x00E8 + bca: 20 91 e8 00 lds r18, 0x00E8 for (;;) { if (Endpoint_GetEndpointDirection() == ENDPOINT_DIR_IN) { if (Endpoint_IsINReady()) - bf4: 20 fd sbrc r18, 0 - bf6: 15 c0 rjmp .+42 ; 0xc22 + bce: 20 fd sbrc r18, 0 + bd0: 15 c0 rjmp .+42 ; 0xbfc { if (Endpoint_IsOUTReceived()) return ENDPOINT_READYWAIT_NoError; } uint8_t USB_DeviceState_LCL = USB_DeviceState; - bf8: 2e b3 in r18, 0x1e ; 30 + bd2: 2e b3 in r18, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - bfa: 22 23 and r18, r18 - bfc: a1 f0 breq .+40 ; 0xc26 + bd4: 22 23 and r18, r18 + bd6: a1 f0 breq .+40 ; 0xc00 return ENDPOINT_READYWAIT_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - bfe: 25 30 cpi r18, 0x05 ; 5 - c00: a1 f0 breq .+40 ; 0xc2a + bd8: 25 30 cpi r18, 0x05 ; 5 + bda: a1 f0 breq .+40 ; 0xc04 * \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); - c02: 20 91 eb 00 lds r18, 0x00EB + bdc: 20 91 eb 00 lds r18, 0x00EB return ENDPOINT_READYWAIT_BusSuspended; else if (Endpoint_IsStalled()) - c06: 25 fd sbrc r18, 5 - c08: 12 c0 rjmp .+36 ; 0xc2e - c0a: 20 91 e4 00 lds r18, 0x00E4 - c0e: 30 91 e5 00 lds r19, 0x00E5 + be0: 25 fd sbrc r18, 5 + be2: 12 c0 rjmp .+36 ; 0xc08 + be4: 20 91 e4 00 lds r18, 0x00E4 + be8: 30 91 e5 00 lds r19, 0x00E5 return ENDPOINT_READYWAIT_EndpointStalled; uint16_t CurrentFrameNumber = USB_Device_GetFrameNumber(); if (CurrentFrameNumber != PreviousFrameNumber) - c12: 28 17 cp r18, r24 - c14: 39 07 cpc r19, r25 - c16: 41 f3 breq .-48 ; 0xbe8 + bec: 28 17 cp r18, r24 + bee: 39 07 cpc r19, r25 + bf0: 41 f3 breq .-48 ; 0xbc2 { PreviousFrameNumber = CurrentFrameNumber; if (!(TimeoutMSRem--)) - c18: 44 23 and r20, r20 - c1a: 59 f0 breq .+22 ; 0xc32 - c1c: 41 50 subi r20, 0x01 ; 1 - c1e: c9 01 movw r24, r18 - c20: e3 cf rjmp .-58 ; 0xbe8 + bf2: 44 23 and r20, r20 + bf4: 59 f0 breq .+22 ; 0xc0c + bf6: 41 50 subi r20, 0x01 ; 1 + bf8: c9 01 movw r24, r18 + bfa: e3 cf rjmp .-58 ; 0xbc2 for (;;) { if (Endpoint_GetEndpointDirection() == ENDPOINT_DIR_IN) { if (Endpoint_IsINReady()) return ENDPOINT_READYWAIT_NoError; - c22: 80 e0 ldi r24, 0x00 ; 0 - c24: 08 95 ret + bfc: 80 e0 ldi r24, 0x00 ; 0 + bfe: 08 95 ret } uint8_t USB_DeviceState_LCL = USB_DeviceState; if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) return ENDPOINT_READYWAIT_DeviceDisconnected; - c26: 82 e0 ldi r24, 0x02 ; 2 - c28: 08 95 ret + c00: 82 e0 ldi r24, 0x02 ; 2 + c02: 08 95 ret else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_READYWAIT_BusSuspended; - c2a: 83 e0 ldi r24, 0x03 ; 3 - c2c: 08 95 ret + c04: 83 e0 ldi r24, 0x03 ; 3 + c06: 08 95 ret else if (Endpoint_IsStalled()) return ENDPOINT_READYWAIT_EndpointStalled; - c2e: 81 e0 ldi r24, 0x01 ; 1 - c30: 08 95 ret + c08: 81 e0 ldi r24, 0x01 ; 1 + c0a: 08 95 ret if (CurrentFrameNumber != PreviousFrameNumber) { PreviousFrameNumber = CurrentFrameNumber; if (!(TimeoutMSRem--)) return ENDPOINT_READYWAIT_Timeout; - c32: 84 e0 ldi r24, 0x04 ; 4 - c34: 08 95 ret + c0c: 84 e0 ldi r24, 0x04 ; 4 + c0e: 08 95 ret return ENDPOINT_READYWAIT_NoError; } else { if (Endpoint_IsOUTReceived()) return ENDPOINT_READYWAIT_NoError; - c36: 80 e0 ldi r24, 0x00 ; 0 + c10: 80 e0 ldi r24, 0x00 ; 0 if (!(TimeoutMSRem--)) return ENDPOINT_READYWAIT_Timeout; } } } - c38: 08 95 ret + c12: 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); - c3a: 20 91 e8 00 lds r18, 0x00E8 + c14: 20 91 e8 00 lds r18, 0x00E8 if (Endpoint_IsINReady()) return ENDPOINT_READYWAIT_NoError; } else { if (Endpoint_IsOUTReceived()) - c3e: 22 ff sbrs r18, 2 - c40: db cf rjmp .-74 ; 0xbf8 - c42: f9 cf rjmp .-14 ; 0xc36 + c18: 22 ff sbrs r18, 2 + c1a: db cf rjmp .-74 ; 0xbd2 + c1c: f9 cf rjmp .-14 ; 0xc10 -00000c44 : +00000c1e : { #if defined(USB_CAN_BE_BOTH) bool UIDModeSelectEnabled = ((UHWCON & (1 << UIDE)) != 0); #endif USB_INT_DisableAllInterrupts(); - c44: 40 d0 rcall .+128 ; 0xcc6 + c1e: 40 d0 rcall .+128 ; 0xca0 USB_INT_ClearAllInterrupts(); - c46: 42 d0 rcall .+132 ; 0xccc + c20: 42 d0 rcall .+132 ; 0xca6 } static inline void USB_Controller_Reset(void) ATTR_ALWAYS_INLINE; static inline void USB_Controller_Reset(void) { USBCON &= ~(1 << USBE); - c48: 80 91 d8 00 lds r24, 0x00D8 - c4c: 8f 77 andi r24, 0x7F ; 127 - c4e: 80 93 d8 00 sts 0x00D8, r24 + c22: 80 91 d8 00 lds r24, 0x00D8 + c26: 8f 77 andi r24, 0x7F ; 127 + c28: 80 93 d8 00 sts 0x00D8, r24 USBCON |= (1 << USBE); - c52: 80 91 d8 00 lds r24, 0x00D8 - c56: 80 68 ori r24, 0x80 ; 128 - c58: 80 93 d8 00 sts 0x00D8, r24 + c2c: 80 91 d8 00 lds r24, 0x00D8 + c30: 80 68 ori r24, 0x80 ; 128 + c32: 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); - c5c: 80 91 d8 00 lds r24, 0x00D8 - c60: 8f 7d andi r24, 0xDF ; 223 - c62: 80 93 d8 00 sts 0x00D8, r24 + c36: 80 91 d8 00 lds r24, 0x00D8 + c3a: 8f 7d andi r24, 0xDF ; 223 + c3c: 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; - c66: 84 e0 ldi r24, 0x04 ; 4 - c68: 89 bd out 0x29, r24 ; 41 + c40: 84 e0 ldi r24, 0x04 ; 4 + c42: 89 bd out 0x29, r24 ; 41 PLLCSR = (USB_PLL_PSC | (1 << PLLE)); - c6a: 86 e0 ldi r24, 0x06 ; 6 - c6c: 89 bd out 0x29, r24 ; 41 + c44: 86 e0 ldi r24, 0x06 ; 6 + c46: 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())); - c6e: 09 b4 in r0, 0x29 ; 41 - c70: 00 fe sbrs r0, 0 - c72: fd cf rjmp .-6 ; 0xc6e + c48: 09 b4 in r0, 0x29 ; 41 + c4a: 00 fe sbrs r0, 0 + c4c: fd cf rjmp .-6 ; 0xc48 } #if defined(USB_CAN_BE_DEVICE) static void USB_Init_Device(void) { USB_DeviceState = DEVICE_STATE_Unattached; - c74: 1e ba out 0x1e, r1 ; 30 + c4e: 1e ba out 0x1e, r1 ; 30 USB_Device_ConfigurationNumber = 0; - c76: 10 92 96 02 sts 0x0296, r1 + c50: 10 92 58 02 sts 0x0258, r1 #if !defined(NO_DEVICE_REMOTE_WAKEUP) USB_Device_RemoteWakeupEnabled = false; - c7a: 10 92 98 02 sts 0x0298, r1 + c54: 10 92 5a 02 sts 0x025A, r1 #endif #if !defined(NO_DEVICE_SELF_POWER) USB_Device_CurrentlySelfPowered = false; - c7e: 10 92 97 02 sts 0x0297, r1 + c58: 10 92 59 02 sts 0x0259, r1 uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); if (Number >= ENDPOINT_TOTAL_ENDPOINTS) return false; return Endpoint_ConfigureEndpoint_Prv(Number, - c82: 80 e0 ldi r24, 0x00 ; 0 - c84: 60 e0 ldi r22, 0x00 ; 0 - c86: 42 e0 ldi r20, 0x02 ; 2 - c88: 10 df rcall .-480 ; 0xaaa + c5c: 80 e0 ldi r24, 0x00 ; 0 + c5e: 60 e0 ldi r22, 0x00 ; 0 + c60: 42 e0 ldi r20, 0x02 ; 2 + c62: 10 df rcall .-480 ; 0xa84 #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDINT &= ~(1 << WAKEUPI); break; case USB_INT_SUSPI: UDINT &= ~(1 << SUSPI); - c8a: 80 91 e1 00 lds r24, 0x00E1 - c8e: 8e 7f andi r24, 0xFE ; 254 - c90: 80 93 e1 00 sts 0x00E1, r24 + c64: 80 91 e1 00 lds r24, 0x00E1 + c68: 8e 7f andi r24, 0xFE ; 254 + c6a: 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); - c94: 80 91 e2 00 lds r24, 0x00E2 - c98: 81 60 ori r24, 0x01 ; 1 - c9a: 80 93 e2 00 sts 0x00E2, r24 + c6e: 80 91 e2 00 lds r24, 0x00E2 + c72: 81 60 ori r24, 0x01 ; 1 + c74: 80 93 e2 00 sts 0x00E2, r24 break; case USB_INT_EORSTI: UDIEN |= (1 << EORSTE); - c9e: 80 91 e2 00 lds r24, 0x00E2 - ca2: 88 60 ori r24, 0x08 ; 8 - ca4: 80 93 e2 00 sts 0x00E2, r24 + c78: 80 91 e2 00 lds r24, 0x00E2 + c7c: 88 60 ori r24, 0x08 ; 8 + c7e: 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); - ca8: 80 91 e0 00 lds r24, 0x00E0 - cac: 8e 7f andi r24, 0xFE ; 254 - cae: 80 93 e0 00 sts 0x00E0, r24 + c82: 80 91 e0 00 lds r24, 0x00E0 + c86: 8e 7f andi r24, 0xFE ; 254 + c88: 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 } - cb2: 08 95 ret + c8c: 08 95 ret -00000cb4 : +00000c8e : 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); - cb4: e3 e6 ldi r30, 0x63 ; 99 - cb6: f0 e0 ldi r31, 0x00 ; 0 - cb8: 80 81 ld r24, Z - cba: 8e 7f andi r24, 0xFE ; 254 - cbc: 80 83 st Z, r24 + c8e: e3 e6 ldi r30, 0x63 ; 99 + c90: f0 e0 ldi r31, 0x00 ; 0 + c92: 80 81 ld r24, Z + c94: 8e 7f andi r24, 0xFE ; 254 + c96: 80 83 st Z, r24 UHWCON &= ~(1 << UIDE); USB_CurrentMode = Mode; } #endif USB_IsInitialized = true; - cbe: 81 e0 ldi r24, 0x01 ; 1 - cc0: 80 93 99 02 sts 0x0299, r24 + c98: 81 e0 ldi r24, 0x01 ; 1 + c9a: 80 93 5b 02 sts 0x025B, r24 USB_ResetInterface(); } - cc4: bf cf rjmp .-130 ; 0xc44 + c9e: bf cf rjmp .-130 ; 0xc1e -00000cc6 : +00000ca0 : #if defined(USB_CAN_BE_HOST) UHIEN = 0; #endif #if defined(USB_CAN_BE_DEVICE) UDIEN = 0; - cc6: 10 92 e2 00 sts 0x00E2, r1 + ca0: 10 92 e2 00 sts 0x00E2, r1 #endif } - cca: 08 95 ret + ca4: 08 95 ret -00000ccc : +00000ca6 : #if defined(USB_CAN_BE_HOST) UHINT = 0; #endif #if defined(USB_CAN_BE_DEVICE) UDINT = 0; - ccc: 10 92 e1 00 sts 0x00E1, r1 + ca6: 10 92 e1 00 sts 0x00E1, r1 #endif } - cd0: 08 95 ret + caa: 08 95 ret -00000cd2 <__vector_11>: +00000cac <__vector_11>: ISR(USB_GEN_vect, ISR_BLOCK) { - cd2: 1f 92 push r1 - cd4: 0f 92 push r0 - cd6: 0f b6 in r0, 0x3f ; 63 - cd8: 0f 92 push r0 - cda: 11 24 eor r1, r1 - cdc: 2f 93 push r18 - cde: 3f 93 push r19 - ce0: 4f 93 push r20 - ce2: 5f 93 push r21 - ce4: 6f 93 push r22 - ce6: 7f 93 push r23 - ce8: 8f 93 push r24 - cea: 9f 93 push r25 - cec: af 93 push r26 - cee: bf 93 push r27 - cf0: ef 93 push r30 - cf2: ff 93 push r31 + cac: 1f 92 push r1 + cae: 0f 92 push r0 + cb0: 0f b6 in r0, 0x3f ; 63 + cb2: 0f 92 push r0 + cb4: 11 24 eor r1, r1 + cb6: 2f 93 push r18 + cb8: 3f 93 push r19 + cba: 4f 93 push r20 + cbc: 5f 93 push r21 + cbe: 6f 93 push r22 + cc0: 7f 93 push r23 + cc2: 8f 93 push r24 + cc4: 9f 93 push r25 + cc6: af 93 push r26 + cc8: bf 93 push r27 + cca: ef 93 push r30 + ccc: 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)); - cf4: 80 91 e1 00 lds r24, 0x00E1 + cce: 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)) - cf8: 82 ff sbrs r24, 2 - cfa: 0a c0 rjmp .+20 ; 0xd10 <__vector_11+0x3e> + cd2: 82 ff sbrs r24, 2 + cd4: 0a c0 rjmp .+20 ; 0xcea <__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)); - cfc: 80 91 e2 00 lds r24, 0x00E2 - d00: 82 ff sbrs r24, 2 - d02: 06 c0 rjmp .+12 ; 0xd10 <__vector_11+0x3e> + cd6: 80 91 e2 00 lds r24, 0x00E2 + cda: 82 ff sbrs r24, 2 + cdc: 06 c0 rjmp .+12 ; 0xcea <__vector_11+0x3e> break; case USB_INT_EORSTI: UDINT &= ~(1 << EORSTI); break; case USB_INT_SOFI: UDINT &= ~(1 << SOFI); - d04: 80 91 e1 00 lds r24, 0x00E1 - d08: 8b 7f andi r24, 0xFB ; 251 - d0a: 80 93 e1 00 sts 0x00E1, r24 + cde: 80 91 e1 00 lds r24, 0x00E1 + ce2: 8b 7f andi r24, 0xFB ; 251 + ce4: 80 93 e1 00 sts 0x00E1, r24 { USB_INT_Clear(USB_INT_SOFI); EVENT_USB_Device_StartOfFrame(); - d0e: 21 d2 rcall .+1090 ; 0x1152 + ce8: 21 d2 rcall .+1090 ; 0x112c #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: return (UDINT & (1 << WAKEUPI)); case USB_INT_SUSPI: return (UDINT & (1 << SUSPI)); - d10: 80 91 e1 00 lds r24, 0x00E1 + cea: 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)) - d14: 80 ff sbrs r24, 0 - d16: 16 c0 rjmp .+44 ; 0xd44 <__vector_11+0x72> + cee: 80 ff sbrs r24, 0 + cf0: 16 c0 rjmp .+44 ; 0xd1e <__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)); - d18: 80 91 e2 00 lds r24, 0x00E2 - d1c: 80 ff sbrs r24, 0 - d1e: 12 c0 rjmp .+36 ; 0xd44 <__vector_11+0x72> + cf2: 80 91 e2 00 lds r24, 0x00E2 + cf6: 80 ff sbrs r24, 0 + cf8: 12 c0 rjmp .+36 ; 0xd1e <__vector_11+0x72> #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN &= ~(1 << WAKEUPE); break; case USB_INT_SUSPI: UDIEN &= ~(1 << SUSPE); - d20: 80 91 e2 00 lds r24, 0x00E2 - d24: 8e 7f andi r24, 0xFE ; 254 - d26: 80 93 e2 00 sts 0x00E2, r24 + cfa: 80 91 e2 00 lds r24, 0x00E2 + cfe: 8e 7f andi r24, 0xFE ; 254 + d00: 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); - d2a: 80 91 e2 00 lds r24, 0x00E2 - d2e: 80 61 ori r24, 0x10 ; 16 - d30: 80 93 e2 00 sts 0x00E2, r24 + d04: 80 91 e2 00 lds r24, 0x00E2 + d08: 80 61 ori r24, 0x10 ; 16 + d0a: 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); - d34: 80 91 d8 00 lds r24, 0x00D8 - d38: 80 62 ori r24, 0x20 ; 32 - d3a: 80 93 d8 00 sts 0x00D8, r24 + d0e: 80 91 d8 00 lds r24, 0x00D8 + d12: 80 62 ori r24, 0x20 ; 32 + d14: 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; - d3e: 19 bc out 0x29, r1 ; 41 + d18: 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; - d40: 1e ba out 0x1e, r1 ; 30 + d1a: 1e ba out 0x1e, r1 ; 30 EVENT_USB_Device_Disconnect(); - d42: 2c dc rcall .-1960 ; 0x59c + d1c: 49 dc rcall .-1902 ; 0x5b0 case USB_INT_IDTI: return (USBINT & (1 << IDTI)); #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: return (UDINT & (1 << WAKEUPI)); - d44: 80 91 e1 00 lds r24, 0x00E1 + d1e: 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)) - d48: 84 ff sbrs r24, 4 - d4a: 2c c0 rjmp .+88 ; 0xda4 <__vector_11+0xd2> + d22: 84 ff sbrs r24, 4 + d24: 2c c0 rjmp .+88 ; 0xd7e <__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)); - d4c: 80 91 e2 00 lds r24, 0x00E2 - d50: 84 ff sbrs r24, 4 - d52: 28 c0 rjmp .+80 ; 0xda4 <__vector_11+0xd2> + d26: 80 91 e2 00 lds r24, 0x00E2 + d2a: 84 ff sbrs r24, 4 + d2c: 28 c0 rjmp .+80 ; 0xd7e <__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; - d54: 84 e0 ldi r24, 0x04 ; 4 - d56: 89 bd out 0x29, r24 ; 41 + d2e: 84 e0 ldi r24, 0x04 ; 4 + d30: 89 bd out 0x29, r24 ; 41 PLLCSR = (USB_PLL_PSC | (1 << PLLE)); - d58: 86 e0 ldi r24, 0x06 ; 6 - d5a: 89 bd out 0x29, r24 ; 41 + d32: 86 e0 ldi r24, 0x06 ; 6 + d34: 89 bd out 0x29, r24 ; 41 { if (!(USB_Options & USB_OPT_MANUAL_PLL)) { USB_PLL_On(); while (!(USB_PLL_IsReady())); - d5c: 09 b4 in r0, 0x29 ; 41 - d5e: 00 fe sbrs r0, 0 - d60: fd cf rjmp .-6 ; 0xd5c <__vector_11+0x8a> + d36: 09 b4 in r0, 0x29 ; 41 + d38: 00 fe sbrs r0, 0 + d3a: fd cf rjmp .-6 ; 0xd36 <__vector_11+0x8a> } static inline void USB_CLK_Unfreeze(void) ATTR_ALWAYS_INLINE; static inline void USB_CLK_Unfreeze(void) { USBCON &= ~(1 << FRZCLK); - d62: 80 91 d8 00 lds r24, 0x00D8 - d66: 8f 7d andi r24, 0xDF ; 223 - d68: 80 93 d8 00 sts 0x00D8, r24 + d3c: 80 91 d8 00 lds r24, 0x00D8 + d40: 8f 7d andi r24, 0xDF ; 223 + d42: 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); - d6c: 80 91 e1 00 lds r24, 0x00E1 - d70: 8f 7e andi r24, 0xEF ; 239 - d72: 80 93 e1 00 sts 0x00E1, r24 + d46: 80 91 e1 00 lds r24, 0x00E1 + d4a: 8f 7e andi r24, 0xEF ; 239 + d4c: 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); - d76: 80 91 e2 00 lds r24, 0x00E2 - d7a: 8f 7e andi r24, 0xEF ; 239 - d7c: 80 93 e2 00 sts 0x00E2, r24 + d50: 80 91 e2 00 lds r24, 0x00E2 + d54: 8f 7e andi r24, 0xEF ; 239 + d56: 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); - d80: 80 91 e2 00 lds r24, 0x00E2 - d84: 81 60 ori r24, 0x01 ; 1 - d86: 80 93 e2 00 sts 0x00E2, r24 + d5a: 80 91 e2 00 lds r24, 0x00E2 + d5e: 81 60 ori r24, 0x01 ; 1 + d60: 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) - d8a: 80 91 96 02 lds r24, 0x0296 - d8e: 88 23 and r24, r24 - d90: 21 f4 brne .+8 ; 0xd9a <__vector_11+0xc8> + d64: 80 91 58 02 lds r24, 0x0258 + d68: 88 23 and r24, r24 + d6a: 21 f4 brne .+8 ; 0xd74 <__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)); - d92: 80 91 e3 00 lds r24, 0x00E3 + d6c: 80 91 e3 00 lds r24, 0x00E3 USB_DeviceState = DEVICE_STATE_Configured; else USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered; - d96: 87 ff sbrs r24, 7 - d98: 02 c0 rjmp .+4 ; 0xd9e <__vector_11+0xcc> - d9a: 84 e0 ldi r24, 0x04 ; 4 - d9c: 01 c0 rjmp .+2 ; 0xda0 <__vector_11+0xce> - d9e: 81 e0 ldi r24, 0x01 ; 1 - da0: 8e bb out 0x1e, r24 ; 30 + d70: 87 ff sbrs r24, 7 + d72: 02 c0 rjmp .+4 ; 0xd78 <__vector_11+0xcc> + d74: 84 e0 ldi r24, 0x04 ; 4 + d76: 01 c0 rjmp .+2 ; 0xd7a <__vector_11+0xce> + d78: 81 e0 ldi r24, 0x01 ; 1 + d7a: 8e bb out 0x1e, r24 ; 30 #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT) EVENT_USB_Device_Connect(); - da2: fb db rcall .-2058 ; 0x59a + d7c: 18 dc rcall .-2000 ; 0x5ae case USB_INT_WAKEUPI: return (UDINT & (1 << WAKEUPI)); case USB_INT_SUSPI: return (UDINT & (1 << SUSPI)); case USB_INT_EORSTI: return (UDINT & (1 << EORSTI)); - da4: 80 91 e1 00 lds r24, 0x00E1 + d7e: 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)) - da8: 83 ff sbrs r24, 3 - daa: 26 c0 rjmp .+76 ; 0xdf8 <__vector_11+0x126> + d82: 83 ff sbrs r24, 3 + d84: 26 c0 rjmp .+76 ; 0xdd2 <__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)); - dac: 80 91 e2 00 lds r24, 0x00E2 - db0: 83 ff sbrs r24, 3 - db2: 22 c0 rjmp .+68 ; 0xdf8 <__vector_11+0x126> + d86: 80 91 e2 00 lds r24, 0x00E2 + d8a: 83 ff sbrs r24, 3 + d8c: 22 c0 rjmp .+68 ; 0xdd2 <__vector_11+0x126> break; case USB_INT_SUSPI: UDINT &= ~(1 << SUSPI); break; case USB_INT_EORSTI: UDINT &= ~(1 << EORSTI); - db4: 80 91 e1 00 lds r24, 0x00E1 - db8: 87 7f andi r24, 0xF7 ; 247 - dba: 80 93 e1 00 sts 0x00E1, r24 + d8e: 80 91 e1 00 lds r24, 0x00E1 + d92: 87 7f andi r24, 0xF7 ; 247 + d94: 80 93 e1 00 sts 0x00E1, r24 { USB_INT_Clear(USB_INT_EORSTI); USB_DeviceState = DEVICE_STATE_Default; - dbe: 82 e0 ldi r24, 0x02 ; 2 - dc0: 8e bb out 0x1e, r24 ; 30 + d98: 82 e0 ldi r24, 0x02 ; 2 + d9a: 8e bb out 0x1e, r24 ; 30 USB_Device_ConfigurationNumber = 0; - dc2: 10 92 96 02 sts 0x0296, r1 + d9c: 10 92 58 02 sts 0x0258, r1 #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDINT &= ~(1 << WAKEUPI); break; case USB_INT_SUSPI: UDINT &= ~(1 << SUSPI); - dc6: 80 91 e1 00 lds r24, 0x00E1 - dca: 8e 7f andi r24, 0xFE ; 254 - dcc: 80 93 e1 00 sts 0x00E1, r24 + da0: 80 91 e1 00 lds r24, 0x00E1 + da4: 8e 7f andi r24, 0xFE ; 254 + da6: 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); - dd0: 80 91 e2 00 lds r24, 0x00E2 - dd4: 8e 7f andi r24, 0xFE ; 254 - dd6: 80 93 e2 00 sts 0x00E2, r24 + daa: 80 91 e2 00 lds r24, 0x00E2 + dae: 8e 7f andi r24, 0xFE ; 254 + db0: 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); - dda: 80 91 e2 00 lds r24, 0x00E2 - dde: 80 61 ori r24, 0x10 ; 16 - de0: 80 93 e2 00 sts 0x00E2, r24 + db4: 80 91 e2 00 lds r24, 0x00E2 + db8: 80 61 ori r24, 0x10 ; 16 + dba: 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, - de4: 80 e0 ldi r24, 0x00 ; 0 - de6: 60 e0 ldi r22, 0x00 ; 0 - de8: 42 e0 ldi r20, 0x02 ; 2 - dea: 5f de rcall .-834 ; 0xaaa + dbe: 80 e0 ldi r24, 0x00 ; 0 + dc0: 60 e0 ldi r22, 0x00 ; 0 + dc2: 42 e0 ldi r20, 0x02 ; 2 + dc4: 5f de rcall .-834 ; 0xa84 break; case USB_INT_SOFI: UDIEN |= (1 << SOFE); break; case USB_INT_RXSTPI: UEIENX |= (1 << RXSTPE); - dec: 80 91 f0 00 lds r24, 0x00F0 - df0: 88 60 ori r24, 0x08 ; 8 - df2: 80 93 f0 00 sts 0x00F0, r24 + dc6: 80 91 f0 00 lds r24, 0x00F0 + dca: 88 60 ori r24, 0x08 ; 8 + dcc: 80 93 f0 00 sts 0x00F0, r24 #if defined(INTERRUPT_CONTROL_ENDPOINT) USB_INT_Enable(USB_INT_RXSTPI); #endif EVENT_USB_Device_Reset(); - df6: ad d1 rcall .+858 ; 0x1152 + dd0: ad d1 rcall .+858 ; 0x112c USB_ResetInterface(); EVENT_USB_UIDChange(); } #endif } - df8: ff 91 pop r31 - dfa: ef 91 pop r30 - dfc: bf 91 pop r27 - dfe: af 91 pop r26 - e00: 9f 91 pop r25 - e02: 8f 91 pop r24 - e04: 7f 91 pop r23 - e06: 6f 91 pop r22 - e08: 5f 91 pop r21 - e0a: 4f 91 pop r20 - e0c: 3f 91 pop r19 - e0e: 2f 91 pop r18 - e10: 0f 90 pop r0 - e12: 0f be out 0x3f, r0 ; 63 - e14: 0f 90 pop r0 - e16: 1f 90 pop r1 - e18: 18 95 reti - -00000e1a <__vector_12>: + dd2: ff 91 pop r31 + dd4: ef 91 pop r30 + dd6: bf 91 pop r27 + dd8: af 91 pop r26 + dda: 9f 91 pop r25 + ddc: 8f 91 pop r24 + dde: 7f 91 pop r23 + de0: 6f 91 pop r22 + de2: 5f 91 pop r21 + de4: 4f 91 pop r20 + de6: 3f 91 pop r19 + de8: 2f 91 pop r18 + dea: 0f 90 pop r0 + dec: 0f be out 0x3f, r0 ; 63 + dee: 0f 90 pop r0 + df0: 1f 90 pop r1 + df2: 18 95 reti + +00000df4 <__vector_12>: #if defined(INTERRUPT_CONTROL_ENDPOINT) && defined(USB_CAN_BE_DEVICE) ISR(USB_COM_vect, ISR_BLOCK) { - e1a: 1f 92 push r1 - e1c: 0f 92 push r0 - e1e: 0f b6 in r0, 0x3f ; 63 - e20: 0f 92 push r0 - e22: 11 24 eor r1, r1 - e24: 1f 93 push r17 - e26: 2f 93 push r18 - e28: 3f 93 push r19 - e2a: 4f 93 push r20 - e2c: 5f 93 push r21 - e2e: 6f 93 push r22 - e30: 7f 93 push r23 - e32: 8f 93 push r24 - e34: 9f 93 push r25 - e36: af 93 push r26 - e38: bf 93 push r27 - e3a: ef 93 push r30 - e3c: ff 93 push r31 + df4: 1f 92 push r1 + df6: 0f 92 push r0 + df8: 0f b6 in r0, 0x3f ; 63 + dfa: 0f 92 push r0 + dfc: 11 24 eor r1, r1 + dfe: 1f 93 push r17 + e00: 2f 93 push r18 + e02: 3f 93 push r19 + e04: 4f 93 push r20 + e06: 5f 93 push r21 + e08: 6f 93 push r22 + e0a: 7f 93 push r23 + e0c: 8f 93 push r24 + e0e: 9f 93 push r25 + e10: af 93 push r26 + e12: bf 93 push r27 + e14: ef 93 push r30 + e16: 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()); - e3e: 10 91 e9 00 lds r17, 0x00E9 - e42: 1f 70 andi r17, 0x0F ; 15 + e18: 10 91 e9 00 lds r17, 0x00E9 + e1c: 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; - e44: 80 91 ec 00 lds r24, 0x00EC + e1e: 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); - e48: 10 92 e9 00 sts 0x00E9, r1 + e22: 10 92 e9 00 sts 0x00E9, r1 break; case USB_INT_SOFI: UDIEN &= ~(1 << SOFE); break; case USB_INT_RXSTPI: UEIENX &= ~(1 << RXSTPE); - e4c: 80 91 f0 00 lds r24, 0x00F0 - e50: 87 7f andi r24, 0xF7 ; 247 - e52: 80 93 f0 00 sts 0x00F0, r24 + e26: 80 91 f0 00 lds r24, 0x00F0 + e2a: 87 7f andi r24, 0xF7 ; 247 + e2c: 80 93 f0 00 sts 0x00F0, r24 static inline void GlobalInterruptEnable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) sei(); - e56: 78 94 sei + e30: 78 94 sei Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); USB_INT_Disable(USB_INT_RXSTPI); GlobalInterruptEnable(); USB_Device_ProcessControlRequest(); - e58: 1b d0 rcall .+54 ; 0xe90 - e5a: 10 92 e9 00 sts 0x00E9, r1 + e32: 1b d0 rcall .+54 ; 0xe6a + e34: 10 92 e9 00 sts 0x00E9, r1 break; case USB_INT_SOFI: UDIEN |= (1 << SOFE); break; case USB_INT_RXSTPI: UEIENX |= (1 << RXSTPE); - e5e: 80 91 f0 00 lds r24, 0x00F0 - e62: 88 60 ori r24, 0x08 ; 8 - e64: 80 93 f0 00 sts 0x00F0, r24 - e68: 10 93 e9 00 sts 0x00E9, r17 + e38: 80 91 f0 00 lds r24, 0x00F0 + e3c: 88 60 ori r24, 0x08 ; 8 + e3e: 80 93 f0 00 sts 0x00F0, r24 + e42: 10 93 e9 00 sts 0x00E9, r17 Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); USB_INT_Enable(USB_INT_RXSTPI); Endpoint_SelectEndpoint(PrevSelectedEndpoint); } - e6c: ff 91 pop r31 - e6e: ef 91 pop r30 - e70: bf 91 pop r27 - e72: af 91 pop r26 - e74: 9f 91 pop r25 - e76: 8f 91 pop r24 - e78: 7f 91 pop r23 - e7a: 6f 91 pop r22 - e7c: 5f 91 pop r21 - e7e: 4f 91 pop r20 - e80: 3f 91 pop r19 - e82: 2f 91 pop r18 - e84: 1f 91 pop r17 - e86: 0f 90 pop r0 - e88: 0f be out 0x3f, r0 ; 63 - e8a: 0f 90 pop r0 - e8c: 1f 90 pop r1 - e8e: 18 95 reti - -00000e90 : + e46: ff 91 pop r31 + e48: ef 91 pop r30 + e4a: bf 91 pop r27 + e4c: af 91 pop r26 + e4e: 9f 91 pop r25 + e50: 8f 91 pop r24 + e52: 7f 91 pop r23 + e54: 6f 91 pop r22 + e56: 5f 91 pop r21 + e58: 4f 91 pop r20 + e5a: 3f 91 pop r19 + e5c: 2f 91 pop r18 + e5e: 1f 91 pop r17 + e60: 0f 90 pop r0 + e62: 0f be out 0x3f, r0 ; 63 + e64: 0f 90 pop r0 + e66: 1f 90 pop r1 + e68: 18 95 reti + +00000e6a : #if !defined(NO_DEVICE_REMOTE_WAKEUP) bool USB_Device_RemoteWakeupEnabled; #endif void USB_Device_ProcessControlRequest(void) { - e90: 1f 93 push r17 - e92: df 93 push r29 - e94: cf 93 push r28 - e96: cd b7 in r28, 0x3d ; 61 - e98: de b7 in r29, 0x3e ; 62 - e9a: ac 97 sbiw r28, 0x2c ; 44 - e9c: 0f b6 in r0, 0x3f ; 63 - e9e: f8 94 cli - ea0: de bf out 0x3e, r29 ; 62 - ea2: 0f be out 0x3f, r0 ; 63 - ea4: cd bf out 0x3d, r28 ; 61 + e6a: 1f 93 push r17 + e6c: df 93 push r29 + e6e: cf 93 push r28 + e70: cd b7 in r28, 0x3d ; 61 + e72: de b7 in r29, 0x3e ; 62 + e74: ac 97 sbiw r28, 0x2c ; 44 + e76: 0f b6 in r0, 0x3f ; 63 + e78: f8 94 cli + e7a: de bf out 0x3e, r29 ; 62 + e7c: 0f be out 0x3f, r0 ; 63 + e7e: 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; - ea6: ea e9 ldi r30, 0x9A ; 154 - ea8: f2 e0 ldi r31, 0x02 ; 2 + e80: ec e5 ldi r30, 0x5C ; 92 + e82: 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; - eaa: 80 91 f1 00 lds r24, 0x00F1 + e84: 80 91 f1 00 lds r24, 0x00F1 for (uint8_t RequestHeaderByte = 0; RequestHeaderByte < sizeof(USB_Request_Header_t); RequestHeaderByte++) *(RequestHeader++) = Endpoint_Read_8(); - eae: 81 93 st Z+, r24 + e88: 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++) - eb0: 22 e0 ldi r18, 0x02 ; 2 - eb2: e2 3a cpi r30, 0xA2 ; 162 - eb4: f2 07 cpc r31, r18 - eb6: c9 f7 brne .-14 ; 0xeaa + e8a: 22 e0 ldi r18, 0x02 ; 2 + e8c: e4 36 cpi r30, 0x64 ; 100 + e8e: f2 07 cpc r31, r18 + e90: c9 f7 brne .-14 ; 0xe84 *(RequestHeader++) = Endpoint_Read_8(); #endif EVENT_USB_Device_ControlRequest(); - eb8: 75 db rcall .-2326 ; 0x5a4 + e92: 92 db rcall .-2268 ; 0x5b8 * \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); - eba: 80 91 e8 00 lds r24, 0x00E8 + e94: 80 91 e8 00 lds r24, 0x00E8 if (Endpoint_IsSETUPReceived()) - ebe: 83 ff sbrs r24, 3 - ec0: 30 c1 rjmp .+608 ; 0x1122 + e98: 83 ff sbrs r24, 3 + e9a: 30 c1 rjmp .+608 ; 0x10fc { uint8_t bmRequestType = USB_ControlRequest.bmRequestType; - ec2: 80 91 9a 02 lds r24, 0x029A + e9c: 80 91 5c 02 lds r24, 0x025C switch (USB_ControlRequest.bRequest) - ec6: 20 91 9b 02 lds r18, 0x029B - eca: 25 30 cpi r18, 0x05 ; 5 - ecc: 09 f4 brne .+2 ; 0xed0 - ece: 84 c0 rjmp .+264 ; 0xfd8 - ed0: 26 30 cpi r18, 0x06 ; 6 - ed2: 40 f4 brcc .+16 ; 0xee4 - ed4: 21 30 cpi r18, 0x01 ; 1 - ed6: a1 f1 breq .+104 ; 0xf40 - ed8: 21 30 cpi r18, 0x01 ; 1 - eda: 70 f0 brcs .+28 ; 0xef8 - edc: 23 30 cpi r18, 0x03 ; 3 - ede: 09 f0 breq .+2 ; 0xee2 - ee0: 20 c1 rjmp .+576 ; 0x1122 - ee2: 2e c0 rjmp .+92 ; 0xf40 - ee4: 28 30 cpi r18, 0x08 ; 8 - ee6: 09 f4 brne .+2 ; 0xeea - ee8: ef c0 rjmp .+478 ; 0x10c8 - eea: 29 30 cpi r18, 0x09 ; 9 - eec: 09 f4 brne .+2 ; 0xef0 - eee: fe c0 rjmp .+508 ; 0x10ec - ef0: 26 30 cpi r18, 0x06 ; 6 - ef2: 09 f0 breq .+2 ; 0xef6 - ef4: 16 c1 rjmp .+556 ; 0x1122 - ef6: 92 c0 rjmp .+292 ; 0x101c + ea0: 20 91 5d 02 lds r18, 0x025D + ea4: 25 30 cpi r18, 0x05 ; 5 + ea6: 09 f4 brne .+2 ; 0xeaa + ea8: 84 c0 rjmp .+264 ; 0xfb2 + eaa: 26 30 cpi r18, 0x06 ; 6 + eac: 40 f4 brcc .+16 ; 0xebe + eae: 21 30 cpi r18, 0x01 ; 1 + eb0: a1 f1 breq .+104 ; 0xf1a + eb2: 21 30 cpi r18, 0x01 ; 1 + eb4: 70 f0 brcs .+28 ; 0xed2 + eb6: 23 30 cpi r18, 0x03 ; 3 + eb8: 09 f0 breq .+2 ; 0xebc + eba: 20 c1 rjmp .+576 ; 0x10fc + ebc: 2e c0 rjmp .+92 ; 0xf1a + ebe: 28 30 cpi r18, 0x08 ; 8 + ec0: 09 f4 brne .+2 ; 0xec4 + ec2: ef c0 rjmp .+478 ; 0x10a2 + ec4: 29 30 cpi r18, 0x09 ; 9 + ec6: 09 f4 brne .+2 ; 0xeca + ec8: fe c0 rjmp .+508 ; 0x10c6 + eca: 26 30 cpi r18, 0x06 ; 6 + ecc: 09 f0 breq .+2 ; 0xed0 + ece: 16 c1 rjmp .+556 ; 0x10fc + ed0: 92 c0 rjmp .+292 ; 0xff6 { case REQ_GetStatus: if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) || - ef8: 80 38 cpi r24, 0x80 ; 128 - efa: 21 f0 breq .+8 ; 0xf04 - efc: 82 38 cpi r24, 0x82 ; 130 - efe: 09 f0 breq .+2 ; 0xf02 - f00: 10 c1 rjmp .+544 ; 0x1122 - f02: 08 c0 rjmp .+16 ; 0xf14 + ed2: 80 38 cpi r24, 0x80 ; 128 + ed4: 21 f0 breq .+8 ; 0xede + ed6: 82 38 cpi r24, 0x82 ; 130 + ed8: 09 f0 breq .+2 ; 0xedc + eda: 10 c1 rjmp .+544 ; 0x10fc + edc: 08 c0 rjmp .+16 ; 0xeee Endpoint_ClearOUT(); } static void USB_Device_GetStatus(void) { uint8_t CurrentStatus = 0; - f04: 80 91 97 02 lds r24, 0x0297 + ede: 80 91 59 02 lds r24, 0x0259 if (USB_Device_CurrentlySelfPowered) CurrentStatus |= FEATURE_SELFPOWERED_ENABLED; #endif #if !defined(NO_DEVICE_REMOTE_WAKEUP) if (USB_Device_RemoteWakeupEnabled) - f08: 90 91 98 02 lds r25, 0x0298 - f0c: 99 23 and r25, r25 - f0e: 71 f0 breq .+28 ; 0xf2c + ee2: 90 91 5a 02 lds r25, 0x025A + ee6: 99 23 and r25, r25 + ee8: 71 f0 breq .+28 ; 0xf06 CurrentStatus |= FEATURE_REMOTE_WAKEUP_ENABLED; - f10: 82 60 ori r24, 0x02 ; 2 - f12: 0c c0 rjmp .+24 ; 0xf2c + eea: 82 60 ori r24, 0x02 ; 2 + eec: 0c c0 rjmp .+24 ; 0xf06 */ 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); - f14: 80 91 9e 02 lds r24, 0x029E - f18: 8f 70 andi r24, 0x0F ; 15 - f1a: 80 93 e9 00 sts 0x00E9, r24 + eee: 80 91 60 02 lds r24, 0x0260 + ef2: 8f 70 andi r24, 0x0F ; 15 + ef4: 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); - f1e: 90 91 eb 00 lds r25, 0x00EB + ef8: 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(); - f22: 81 e0 ldi r24, 0x01 ; 1 - f24: 95 ff sbrs r25, 5 - f26: 80 e0 ldi r24, 0x00 ; 0 + efc: 81 e0 ldi r24, 0x01 ; 1 + efe: 95 ff sbrs r25, 5 + f00: 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); - f28: 10 92 e9 00 sts 0x00E9, r1 + f02: 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); - f2c: 90 91 e8 00 lds r25, 0x00E8 - f30: 97 7f andi r25, 0xF7 ; 247 - f32: 90 93 e8 00 sts 0x00E8, r25 + f06: 90 91 e8 00 lds r25, 0x00E8 + f0a: 97 7f andi r25, 0xF7 ; 247 + f0c: 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); - f36: 80 93 f1 00 sts 0x00F1, r24 + f10: 80 93 f1 00 sts 0x00F1, r24 UEDATX = (Data >> 8); - f3a: 10 92 f1 00 sts 0x00F1, r1 - f3e: cf c0 rjmp .+414 ; 0x10de + f14: 10 92 f1 00 sts 0x00F1, r1 + f18: cf c0 rjmp .+414 ; 0x10b8 } break; case REQ_ClearFeature: case REQ_SetFeature: if ((bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) || - f40: 88 23 and r24, r24 - f42: 19 f0 breq .+6 ; 0xf4a - f44: 82 30 cpi r24, 0x02 ; 2 - f46: 09 f0 breq .+2 ; 0xf4a - f48: ec c0 rjmp .+472 ; 0x1122 + f1a: 88 23 and r24, r24 + f1c: 19 f0 breq .+6 ; 0xf24 + f1e: 82 30 cpi r24, 0x02 ; 2 + f20: 09 f0 breq .+2 ; 0xf24 + f22: ec c0 rjmp .+472 ; 0x10fc Endpoint_ClearStatusStage(); } static void USB_Device_ClearSetFeature(void) { switch (USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_RECIPIENT) - f4a: 90 e0 ldi r25, 0x00 ; 0 - f4c: 8f 71 andi r24, 0x1F ; 31 - f4e: 90 70 andi r25, 0x00 ; 0 - f50: 00 97 sbiw r24, 0x00 ; 0 - f52: 29 f0 breq .+10 ; 0xf5e - f54: 82 30 cpi r24, 0x02 ; 2 - f56: 91 05 cpc r25, r1 - f58: 09 f0 breq .+2 ; 0xf5c - f5a: e3 c0 rjmp .+454 ; 0x1122 - f5c: 0b c0 rjmp .+22 ; 0xf74 + f24: 90 e0 ldi r25, 0x00 ; 0 + f26: 8f 71 andi r24, 0x1F ; 31 + f28: 90 70 andi r25, 0x00 ; 0 + f2a: 00 97 sbiw r24, 0x00 ; 0 + f2c: 29 f0 breq .+10 ; 0xf38 + f2e: 82 30 cpi r24, 0x02 ; 2 + f30: 91 05 cpc r25, r1 + f32: 09 f0 breq .+2 ; 0xf36 + f34: e3 c0 rjmp .+454 ; 0x10fc + f36: 0b c0 rjmp .+22 ; 0xf4e { #if !defined(NO_DEVICE_REMOTE_WAKEUP) case REQREC_DEVICE: if ((uint8_t)USB_ControlRequest.wValue == FEATURE_SEL_DeviceRemoteWakeup) - f5e: 80 91 9c 02 lds r24, 0x029C - f62: 81 30 cpi r24, 0x01 ; 1 - f64: 09 f0 breq .+2 ; 0xf68 - f66: dd c0 rjmp .+442 ; 0x1122 + f38: 80 91 5e 02 lds r24, 0x025E + f3c: 81 30 cpi r24, 0x01 ; 1 + f3e: 09 f0 breq .+2 ; 0xf42 + f40: dd c0 rjmp .+442 ; 0x10fc USB_Device_RemoteWakeupEnabled = (USB_ControlRequest.bRequest == REQ_SetFeature); - f68: 23 30 cpi r18, 0x03 ; 3 - f6a: 09 f0 breq .+2 ; 0xf6e - f6c: 80 e0 ldi r24, 0x00 ; 0 - f6e: 80 93 98 02 sts 0x0298, r24 - f72: 2c c0 rjmp .+88 ; 0xfcc + f42: 23 30 cpi r18, 0x03 ; 3 + f44: 09 f0 breq .+2 ; 0xf48 + f46: 80 e0 ldi r24, 0x00 ; 0 + f48: 80 93 5a 02 sts 0x025A, r24 + f4c: 2c c0 rjmp .+88 ; 0xfa6 break; #endif #if !defined(CONTROL_ONLY_DEVICE) case REQREC_ENDPOINT: if ((uint8_t)USB_ControlRequest.wValue == FEATURE_SEL_EndpointHalt) - f74: 80 91 9c 02 lds r24, 0x029C - f78: 88 23 and r24, r24 - f7a: 41 f5 brne .+80 ; 0xfcc + f4e: 80 91 5e 02 lds r24, 0x025E + f52: 88 23 and r24, r24 + f54: 41 f5 brne .+80 ; 0xfa6 { uint8_t EndpointIndex = ((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK); - f7c: 20 91 9e 02 lds r18, 0x029E - f80: 2f 70 andi r18, 0x0F ; 15 + f56: 20 91 60 02 lds r18, 0x0260 + f5a: 2f 70 andi r18, 0x0F ; 15 if (EndpointIndex == ENDPOINT_CONTROLEP) - f82: 09 f4 brne .+2 ; 0xf86 - f84: ce c0 rjmp .+412 ; 0x1122 + f5c: 09 f4 brne .+2 ; 0xf60 + f5e: ce c0 rjmp .+412 ; 0x10fc */ 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); - f86: 20 93 e9 00 sts 0x00E9, r18 + f60: 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); - f8a: 80 91 eb 00 lds r24, 0x00EB + f64: 80 91 eb 00 lds r24, 0x00EB return; Endpoint_SelectEndpoint(EndpointIndex); if (Endpoint_IsEnabled()) - f8e: 80 ff sbrs r24, 0 - f90: 1d c0 rjmp .+58 ; 0xfcc + f68: 80 ff sbrs r24, 0 + f6a: 1d c0 rjmp .+58 ; 0xfa6 { if (USB_ControlRequest.bRequest == REQ_SetFeature) - f92: 80 91 9b 02 lds r24, 0x029B - f96: 83 30 cpi r24, 0x03 ; 3 - f98: 21 f4 brne .+8 ; 0xfa2 + f6c: 80 91 5d 02 lds r24, 0x025D + f70: 83 30 cpi r24, 0x03 ; 3 + f72: 21 f4 brne .+8 ; 0xf7c * \ingroup Group_EndpointPacketManagement_AVR8 */ static inline void Endpoint_StallTransaction(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_StallTransaction(void) { UECONX |= (1 << STALLRQ); - f9a: 80 91 eb 00 lds r24, 0x00EB - f9e: 80 62 ori r24, 0x20 ; 32 - fa0: 13 c0 rjmp .+38 ; 0xfc8 + f74: 80 91 eb 00 lds r24, 0x00EB + f78: 80 62 ori r24, 0x20 ; 32 + f7a: 13 c0 rjmp .+38 ; 0xfa2 * \ingroup Group_EndpointPacketManagement_AVR8 */ static inline void Endpoint_ClearStall(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearStall(void) { UECONX |= (1 << STALLRQC); - fa2: 80 91 eb 00 lds r24, 0x00EB - fa6: 80 61 ori r24, 0x10 ; 16 - fa8: 80 93 eb 00 sts 0x00EB, r24 + f7c: 80 91 eb 00 lds r24, 0x00EB + f80: 80 61 ori r24, 0x10 ; 16 + f82: 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)); - fac: 81 e0 ldi r24, 0x01 ; 1 - fae: 90 e0 ldi r25, 0x00 ; 0 - fb0: 02 c0 rjmp .+4 ; 0xfb6 - fb2: 88 0f add r24, r24 - fb4: 99 1f adc r25, r25 - fb6: 2a 95 dec r18 - fb8: e2 f7 brpl .-8 ; 0xfb2 - fba: 80 93 ea 00 sts 0x00EA, r24 + f86: 81 e0 ldi r24, 0x01 ; 1 + f88: 90 e0 ldi r25, 0x00 ; 0 + f8a: 02 c0 rjmp .+4 ; 0xf90 + f8c: 88 0f add r24, r24 + f8e: 99 1f adc r25, r25 + f90: 2a 95 dec r18 + f92: e2 f7 brpl .-8 ; 0xf8c + f94: 80 93 ea 00 sts 0x00EA, r24 UERST = 0; - fbe: 10 92 ea 00 sts 0x00EA, r1 + f98: 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); - fc2: 80 91 eb 00 lds r24, 0x00EB - fc6: 88 60 ori r24, 0x08 ; 8 - fc8: 80 93 eb 00 sts 0x00EB, r24 + f9c: 80 91 eb 00 lds r24, 0x00EB + fa0: 88 60 ori r24, 0x08 ; 8 + fa2: 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); - fcc: 10 92 e9 00 sts 0x00E9, r1 + fa6: 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); - fd0: 80 91 e8 00 lds r24, 0x00E8 - fd4: 87 7f andi r24, 0xF7 ; 247 - fd6: 86 c0 rjmp .+268 ; 0x10e4 + faa: 80 91 e8 00 lds r24, 0x00E8 + fae: 87 7f andi r24, 0xF7 ; 247 + fb0: 86 c0 rjmp .+268 ; 0x10be USB_Device_ClearSetFeature(); } break; case REQ_SetAddress: if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) - fd8: 88 23 and r24, r24 - fda: 09 f0 breq .+2 ; 0xfde - fdc: a2 c0 rjmp .+324 ; 0x1122 + fb2: 88 23 and r24, r24 + fb4: 09 f0 breq .+2 ; 0xfb8 + fb6: a2 c0 rjmp .+324 ; 0x10fc } } static void USB_Device_SetAddress(void) { uint8_t DeviceAddress = (USB_ControlRequest.wValue & 0x7F); - fde: 10 91 9c 02 lds r17, 0x029C - fe2: 1f 77 andi r17, 0x7F ; 127 + fb8: 10 91 5e 02 lds r17, 0x025E + fbc: 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); - fe4: 80 91 e3 00 lds r24, 0x00E3 - fe8: 80 78 andi r24, 0x80 ; 128 - fea: 81 2b or r24, r17 - fec: 80 93 e3 00 sts 0x00E3, r24 - ff0: 80 91 e8 00 lds r24, 0x00E8 - ff4: 87 7f andi r24, 0xF7 ; 247 - ff6: 80 93 e8 00 sts 0x00E8, r24 + fbe: 80 91 e3 00 lds r24, 0x00E3 + fc2: 80 78 andi r24, 0x80 ; 128 + fc4: 81 2b or r24, r17 + fc6: 80 93 e3 00 sts 0x00E3, r24 + fca: 80 91 e8 00 lds r24, 0x00E8 + fce: 87 7f andi r24, 0xF7 ; 247 + fd0: 80 93 e8 00 sts 0x00E8, r24 USB_Device_SetDeviceAddress(DeviceAddress); Endpoint_ClearSETUP(); Endpoint_ClearStatusStage(); - ffa: d2 dd rcall .-1116 ; 0xba0 + fd4: d2 dd rcall .-1116 ; 0xb7a * \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); - ffc: 80 91 e8 00 lds r24, 0x00E8 + fd6: 80 91 e8 00 lds r24, 0x00E8 while (!(Endpoint_IsINReady())); - 1000: 80 ff sbrs r24, 0 - 1002: fc cf rjmp .-8 ; 0xffc + fda: 80 ff sbrs r24, 0 + fdc: fc cf rjmp .-8 ; 0xfd6 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); - 1004: 80 91 e3 00 lds r24, 0x00E3 - 1008: 80 68 ori r24, 0x80 ; 128 - 100a: 80 93 e3 00 sts 0x00E3, r24 + fde: 80 91 e3 00 lds r24, 0x00E3 + fe2: 80 68 ori r24, 0x80 ; 128 + fe4: 80 93 e3 00 sts 0x00E3, r24 USB_Device_EnableDeviceAddress(DeviceAddress); USB_DeviceState = (DeviceAddress) ? DEVICE_STATE_Addressed : DEVICE_STATE_Default; - 100e: 11 23 and r17, r17 - 1010: 11 f0 breq .+4 ; 0x1016 - 1012: 83 e0 ldi r24, 0x03 ; 3 - 1014: 01 c0 rjmp .+2 ; 0x1018 - 1016: 82 e0 ldi r24, 0x02 ; 2 - 1018: 8e bb out 0x1e, r24 ; 30 - 101a: 83 c0 rjmp .+262 ; 0x1122 + fe8: 11 23 and r17, r17 + fea: 11 f0 breq .+4 ; 0xff0 + fec: 83 e0 ldi r24, 0x03 ; 3 + fee: 01 c0 rjmp .+2 ; 0xff2 + ff0: 82 e0 ldi r24, 0x02 ; 2 + ff2: 8e bb out 0x1e, r24 ; 30 + ff4: 83 c0 rjmp .+262 ; 0x10fc if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) USB_Device_SetAddress(); break; case REQ_GetDescriptor: if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) || - 101c: 80 58 subi r24, 0x80 ; 128 - 101e: 82 30 cpi r24, 0x02 ; 2 - 1020: 08 f0 brcs .+2 ; 0x1024 - 1022: 7f c0 rjmp .+254 ; 0x1122 + ff6: 80 58 subi r24, 0x80 ; 128 + ff8: 82 30 cpi r24, 0x02 ; 2 + ffa: 08 f0 brcs .+2 ; 0xffe + ffc: 7f c0 rjmp .+254 ; 0x10fc !(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)) - 1024: 80 91 9c 02 lds r24, 0x029C - 1028: 90 91 9d 02 lds r25, 0x029D - 102c: 23 e0 ldi r18, 0x03 ; 3 - 102e: 8c 3d cpi r24, 0xDC ; 220 - 1030: 92 07 cpc r25, r18 - 1032: 91 f5 brne .+100 ; 0x1098 + ffe: 80 91 5e 02 lds r24, 0x025E + 1002: 90 91 5f 02 lds r25, 0x025F + 1006: 23 e0 ldi r18, 0x03 ; 3 + 1008: 8c 3d cpi r24, 0xDC ; 220 + 100a: 92 07 cpc r25, r18 + 100c: 91 f5 brne .+100 ; 0x1072 { USB_Descriptor_Header_t Header; uint16_t UnicodeString[INTERNAL_SERIAL_LENGTH_BITS / 4]; } SignatureDescriptor; SignatureDescriptor.Header.Type = DTYPE_String; - 1034: 83 e0 ldi r24, 0x03 ; 3 - 1036: 8c 83 std Y+4, r24 ; 0x04 + 100e: 83 e0 ldi r24, 0x03 ; 3 + 1010: 8c 83 std Y+4, r24 ; 0x04 SignatureDescriptor.Header.Size = USB_STRING_LEN(INTERNAL_SERIAL_LENGTH_BITS / 4); - 1038: 8a e2 ldi r24, 0x2A ; 42 - 103a: 8b 83 std Y+3, r24 ; 0x03 + 1012: 8a e2 ldi r24, 0x2A ; 42 + 1014: 8b 83 std Y+3, r24 ; 0x03 static inline uint_reg_t GetGlobalInterruptMask(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) return SREG; - 103c: 5f b7 in r21, 0x3f ; 63 + 1016: 5f b7 in r21, 0x3f ; 63 static inline void GlobalInterruptDisable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) cli(); - 103e: f8 94 cli + 1018: f8 94 cli __builtin_ssrf(AVR32_SR_GM_OFFSET); #elif (ARCH == ARCH_XMEGA) cli(); #endif GCC_MEMORY_BARRIER(); - 1040: de 01 movw r26, r28 - 1042: 15 96 adiw r26, 0x05 ; 5 - 1044: 80 e0 ldi r24, 0x00 ; 0 - 1046: 90 e0 ldi r25, 0x00 ; 0 + 101a: de 01 movw r26, r28 + 101c: 15 96 adiw r26, 0x05 ; 5 + 101e: 80 e0 ldi r24, 0x00 ; 0 + 1020: 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; - 1048: 4e e0 ldi r20, 0x0E ; 14 + 1022: 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); - 104a: 61 e2 ldi r22, 0x21 ; 33 - 104c: e4 2f mov r30, r20 - 104e: f0 e0 ldi r31, 0x00 ; 0 - 1050: 60 93 57 00 sts 0x0057, r22 - 1054: e4 91 lpm r30, Z+ + 1024: 61 e2 ldi r22, 0x21 ; 33 + 1026: e4 2f mov r30, r20 + 1028: f0 e0 ldi r31, 0x00 ; 0 + 102a: 60 93 57 00 sts 0x0057, r22 + 102e: e4 91 lpm r30, Z+ if (SerialCharNum & 0x01) - 1056: 80 ff sbrs r24, 0 - 1058: 03 c0 rjmp .+6 ; 0x1060 + 1030: 80 ff sbrs r24, 0 + 1032: 03 c0 rjmp .+6 ; 0x103a { SerialByte >>= 4; - 105a: e2 95 swap r30 - 105c: ef 70 andi r30, 0x0F ; 15 + 1034: e2 95 swap r30 + 1036: ef 70 andi r30, 0x0F ; 15 SigReadAddress++; - 105e: 4f 5f subi r20, 0xFF ; 255 + 1038: 4f 5f subi r20, 0xFF ; 255 } SerialByte &= 0x0F; - 1060: ef 70 andi r30, 0x0F ; 15 - 1062: 2e 2f mov r18, r30 - 1064: 30 e0 ldi r19, 0x00 ; 0 + 103a: ef 70 andi r30, 0x0F ; 15 + 103c: 2e 2f mov r18, r30 + 103e: 30 e0 ldi r19, 0x00 ; 0 UnicodeString[SerialCharNum] = cpu_to_le16((SerialByte >= 10) ? - 1066: ea 30 cpi r30, 0x0A ; 10 - 1068: 18 f0 brcs .+6 ; 0x1070 - 106a: 29 5c subi r18, 0xC9 ; 201 - 106c: 3f 4f sbci r19, 0xFF ; 255 - 106e: 02 c0 rjmp .+4 ; 0x1074 - 1070: 20 5d subi r18, 0xD0 ; 208 - 1072: 3f 4f sbci r19, 0xFF ; 255 - 1074: 2d 93 st X+, r18 - 1076: 3d 93 st X+, r19 - 1078: 01 96 adiw r24, 0x01 ; 1 + 1040: ea 30 cpi r30, 0x0A ; 10 + 1042: 18 f0 brcs .+6 ; 0x104a + 1044: 29 5c subi r18, 0xC9 ; 201 + 1046: 3f 4f sbci r19, 0xFF ; 255 + 1048: 02 c0 rjmp .+4 ; 0x104e + 104a: 20 5d subi r18, 0xD0 ; 208 + 104c: 3f 4f sbci r19, 0xFF ; 255 + 104e: 2d 93 st X+, r18 + 1050: 3d 93 st X+, r19 + 1052: 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++) - 107a: 84 31 cpi r24, 0x14 ; 20 - 107c: 91 05 cpc r25, r1 - 107e: 31 f7 brne .-52 ; 0x104c + 1054: 84 31 cpi r24, 0x14 ; 20 + 1056: 91 05 cpc r25, r1 + 1058: 31 f7 brne .-52 ; 0x1026 static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) SREG = GlobalIntState; - 1080: 5f bf out 0x3f, r21 ; 63 + 105a: 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); - 1082: 80 91 e8 00 lds r24, 0x00E8 - 1086: 87 7f andi r24, 0xF7 ; 247 - 1088: 80 93 e8 00 sts 0x00E8, r24 + 105c: 80 91 e8 00 lds r24, 0x00E8 + 1060: 87 7f andi r24, 0xF7 ; 247 + 1062: 80 93 e8 00 sts 0x00E8, r24 USB_Device_GetSerialString(SignatureDescriptor.UnicodeString); Endpoint_ClearSETUP(); Endpoint_Write_Control_Stream_LE(&SignatureDescriptor, sizeof(SignatureDescriptor)); - 108c: ce 01 movw r24, r28 - 108e: 03 96 adiw r24, 0x03 ; 3 - 1090: 6a e2 ldi r22, 0x2A ; 42 - 1092: 70 e0 ldi r23, 0x00 ; 0 - 1094: 55 dc rcall .-1878 ; 0x940 - 1096: 12 c0 rjmp .+36 ; 0x10bc + 1066: ce 01 movw r24, r28 + 1068: 03 96 adiw r24, 0x03 ; 3 + 106a: 6a e2 ldi r22, 0x2A ; 42 + 106c: 70 e0 ldi r23, 0x00 ; 0 + 106e: 55 dc rcall .-1878 ; 0x91a + 1070: 12 c0 rjmp .+36 ; 0x1096 USB_Device_GetInternalSerialDescriptor(); return; } #endif if ((DescriptorSize = CALLBACK_USB_GetDescriptor(USB_ControlRequest.wValue, USB_ControlRequest.wIndex, - 1098: 60 91 9e 02 lds r22, 0x029E - 109c: ae 01 movw r20, r28 - 109e: 4f 5f subi r20, 0xFF ; 255 - 10a0: 5f 4f sbci r21, 0xFF ; 255 - 10a2: 21 dc rcall .-1982 ; 0x8e6 - 10a4: bc 01 movw r22, r24 - 10a6: 00 97 sbiw r24, 0x00 ; 0 - 10a8: 09 f4 brne .+2 ; 0x10ac - 10aa: 3b c0 rjmp .+118 ; 0x1122 - 10ac: 80 91 e8 00 lds r24, 0x00E8 - 10b0: 87 7f andi r24, 0xF7 ; 247 - 10b2: 80 93 e8 00 sts 0x00E8, r24 + 1072: 60 91 60 02 lds r22, 0x0260 + 1076: ae 01 movw r20, r28 + 1078: 4f 5f subi r20, 0xFF ; 255 + 107a: 5f 4f sbci r21, 0xFF ; 255 + 107c: 21 dc rcall .-1982 ; 0x8c0 + 107e: bc 01 movw r22, r24 + 1080: 00 97 sbiw r24, 0x00 ; 0 + 1082: 09 f4 brne .+2 ; 0x1086 + 1084: 3b c0 rjmp .+118 ; 0x10fc + 1086: 80 91 e8 00 lds r24, 0x00E8 + 108a: 87 7f andi r24, 0xF7 ; 247 + 108c: 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); - 10b6: 89 81 ldd r24, Y+1 ; 0x01 - 10b8: 9a 81 ldd r25, Y+2 ; 0x02 - 10ba: 9c dc rcall .-1736 ; 0x9f4 + 1090: 89 81 ldd r24, Y+1 ; 0x01 + 1092: 9a 81 ldd r25, Y+2 ; 0x02 + 1094: 9c dc rcall .-1736 ; 0x9ce */ 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)); - 10bc: 80 91 e8 00 lds r24, 0x00E8 - 10c0: 8b 77 andi r24, 0x7B ; 123 - 10c2: 80 93 e8 00 sts 0x00E8, r24 - 10c6: 2d c0 rjmp .+90 ; 0x1122 + 1096: 80 91 e8 00 lds r24, 0x00E8 + 109a: 8b 77 andi r24, 0x7B ; 123 + 109c: 80 93 e8 00 sts 0x00E8, r24 + 10a0: 2d c0 rjmp .+90 ; 0x10fc USB_Device_GetDescriptor(); } break; case REQ_GetConfiguration: if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) - 10c8: 80 38 cpi r24, 0x80 ; 128 - 10ca: 59 f5 brne .+86 ; 0x1122 + 10a2: 80 38 cpi r24, 0x80 ; 128 + 10a4: 59 f5 brne .+86 ; 0x10fc * \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); - 10cc: 80 91 e8 00 lds r24, 0x00E8 - 10d0: 87 7f andi r24, 0xF7 ; 247 - 10d2: 80 93 e8 00 sts 0x00E8, r24 + 10a6: 80 91 e8 00 lds r24, 0x00E8 + 10aa: 87 7f andi r24, 0xF7 ; 247 + 10ac: 80 93 e8 00 sts 0x00E8, r24 static void USB_Device_GetConfiguration(void) { Endpoint_ClearSETUP(); Endpoint_Write_8(USB_Device_ConfigurationNumber); - 10d6: 80 91 96 02 lds r24, 0x0296 + 10b0: 80 91 58 02 lds r24, 0x0258 * \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; - 10da: 80 93 f1 00 sts 0x00F1, r24 + 10b4: 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)); - 10de: 80 91 e8 00 lds r24, 0x00E8 - 10e2: 8e 77 andi r24, 0x7E ; 126 - 10e4: 80 93 e8 00 sts 0x00E8, r24 + 10b8: 80 91 e8 00 lds r24, 0x00E8 + 10bc: 8e 77 andi r24, 0x7E ; 126 + 10be: 80 93 e8 00 sts 0x00E8, r24 Endpoint_ClearIN(); Endpoint_ClearStatusStage(); - 10e8: 5b dd rcall .-1354 ; 0xba0 - 10ea: 1b c0 rjmp .+54 ; 0x1122 + 10c2: 5b dd rcall .-1354 ; 0xb7a + 10c4: 1b c0 rjmp .+54 ; 0x10fc if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) USB_Device_GetConfiguration(); break; case REQ_SetConfiguration: if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) - 10ec: 88 23 and r24, r24 - 10ee: c9 f4 brne .+50 ; 0x1122 + 10c6: 88 23 and r24, r24 + 10c8: c9 f4 brne .+50 ; 0x10fc } static void USB_Device_SetConfiguration(void) { #if defined(FIXED_NUM_CONFIGURATIONS) if ((uint8_t)USB_ControlRequest.wValue > FIXED_NUM_CONFIGURATIONS) - 10f0: 90 91 9c 02 lds r25, 0x029C - 10f4: 92 30 cpi r25, 0x02 ; 2 - 10f6: a8 f4 brcc .+42 ; 0x1122 + 10ca: 90 91 5e 02 lds r25, 0x025E + 10ce: 92 30 cpi r25, 0x02 ; 2 + 10d0: a8 f4 brcc .+42 ; 0x10fc * \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); - 10f8: 80 91 e8 00 lds r24, 0x00E8 - 10fc: 87 7f andi r24, 0xF7 ; 247 - 10fe: 80 93 e8 00 sts 0x00E8, r24 + 10d2: 80 91 e8 00 lds r24, 0x00E8 + 10d6: 87 7f andi r24, 0xF7 ; 247 + 10d8: 80 93 e8 00 sts 0x00E8, r24 #endif #endif Endpoint_ClearSETUP(); USB_Device_ConfigurationNumber = (uint8_t)USB_ControlRequest.wValue; - 1102: 90 93 96 02 sts 0x0296, r25 + 10dc: 90 93 58 02 sts 0x0258, r25 Endpoint_ClearStatusStage(); - 1106: 4c dd rcall .-1384 ; 0xba0 + 10e0: 4c dd rcall .-1384 ; 0xb7a if (USB_Device_ConfigurationNumber) - 1108: 80 91 96 02 lds r24, 0x0296 - 110c: 88 23 and r24, r24 - 110e: 21 f4 brne .+8 ; 0x1118 + 10e2: 80 91 58 02 lds r24, 0x0258 + 10e6: 88 23 and r24, r24 + 10e8: 21 f4 brne .+8 ; 0x10f2 } 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)); - 1110: 80 91 e3 00 lds r24, 0x00E3 + 10ea: 80 91 e3 00 lds r24, 0x00E3 USB_DeviceState = DEVICE_STATE_Configured; else USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered; - 1114: 87 ff sbrs r24, 7 - 1116: 02 c0 rjmp .+4 ; 0x111c - 1118: 84 e0 ldi r24, 0x04 ; 4 - 111a: 01 c0 rjmp .+2 ; 0x111e - 111c: 81 e0 ldi r24, 0x01 ; 1 - 111e: 8e bb out 0x1e, r24 ; 30 + 10ee: 87 ff sbrs r24, 7 + 10f0: 02 c0 rjmp .+4 ; 0x10f6 + 10f2: 84 e0 ldi r24, 0x04 ; 4 + 10f4: 01 c0 rjmp .+2 ; 0x10f8 + 10f6: 81 e0 ldi r24, 0x01 ; 1 + 10f8: 8e bb out 0x1e, r24 ; 30 EVENT_USB_Device_ConfigurationChanged(); - 1120: 3e da rcall .-2948 ; 0x59e + 10fa: 5b da rcall .-2890 ; 0x5b2 * \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); - 1122: 80 91 e8 00 lds r24, 0x00E8 + 10fc: 80 91 e8 00 lds r24, 0x00E8 default: break; } } if (Endpoint_IsSETUPReceived()) - 1126: 83 ff sbrs r24, 3 - 1128: 0a c0 rjmp .+20 ; 0x113e + 1100: 83 ff sbrs r24, 3 + 1102: 0a c0 rjmp .+20 ; 0x1118 * \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); - 112a: 80 91 e8 00 lds r24, 0x00E8 - 112e: 87 7f andi r24, 0xF7 ; 247 - 1130: 80 93 e8 00 sts 0x00E8, r24 + 1104: 80 91 e8 00 lds r24, 0x00E8 + 1108: 87 7f andi r24, 0xF7 ; 247 + 110a: 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); - 1134: 80 91 eb 00 lds r24, 0x00EB - 1138: 80 62 ori r24, 0x20 ; 32 - 113a: 80 93 eb 00 sts 0x00EB, r24 + 110e: 80 91 eb 00 lds r24, 0x00EB + 1112: 80 62 ori r24, 0x20 ; 32 + 1114: 80 93 eb 00 sts 0x00EB, r24 { Endpoint_ClearSETUP(); Endpoint_StallTransaction(); } } - 113e: ac 96 adiw r28, 0x2c ; 44 - 1140: 0f b6 in r0, 0x3f ; 63 - 1142: f8 94 cli - 1144: de bf out 0x3e, r29 ; 62 - 1146: 0f be out 0x3f, r0 ; 63 - 1148: cd bf out 0x3d, r28 ; 61 - 114a: cf 91 pop r28 - 114c: df 91 pop r29 - 114e: 1f 91 pop r17 - 1150: 08 95 ret - -00001152 : + 1118: ac 96 adiw r28, 0x2c ; 44 + 111a: 0f b6 in r0, 0x3f ; 63 + 111c: f8 94 cli + 111e: de bf out 0x3e, r29 ; 62 + 1120: 0f be out 0x3f, r0 ; 63 + 1122: cd bf out 0x3d, r28 ; 61 + 1124: cf 91 pop r28 + 1126: df 91 pop r29 + 1128: 1f 91 pop r17 + 112a: 08 95 ret + +0000112c : #include "Events.h" void USB_Event_Stub(void) { } - 1152: 08 95 ret + 112c: 08 95 ret -00001154 : +0000112e : #if defined(USB_CAN_BE_DEVICE) && !defined(DEVICE_STATE_AS_GPIOR) volatile uint8_t USB_DeviceState; #endif void USB_USBTask(void) { - 1154: 1f 93 push r17 + 112e: 1f 93 push r17 } #if defined(USB_CAN_BE_DEVICE) static void USB_DeviceTask(void) { if (USB_DeviceState == DEVICE_STATE_Unattached) - 1156: 8e b3 in r24, 0x1e ; 30 - 1158: 88 23 and r24, r24 - 115a: a9 f0 breq .+42 ; 0x1186 + 1130: 8e b3 in r24, 0x1e ; 30 + 1132: 88 23 and r24, r24 + 1134: a9 f0 breq .+42 ; 0x1160 */ 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()); - 115c: 80 91 e9 00 lds r24, 0x00E9 - 1160: 8f 70 andi r24, 0x0F ; 15 + 1136: 80 91 e9 00 lds r24, 0x00E9 + 113a: 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; - 1162: 90 91 ec 00 lds r25, 0x00EC - 1166: 90 ff sbrs r25, 0 - 1168: 02 c0 rjmp .+4 ; 0x116e - 116a: 10 e8 ldi r17, 0x80 ; 128 - 116c: 01 c0 rjmp .+2 ; 0x1170 - 116e: 10 e0 ldi r17, 0x00 ; 0 + 113c: 90 91 ec 00 lds r25, 0x00EC + 1140: 90 ff sbrs r25, 0 + 1142: 02 c0 rjmp .+4 ; 0x1148 + 1144: 10 e8 ldi r17, 0x80 ; 128 + 1146: 01 c0 rjmp .+2 ; 0x114a + 1148: 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()); - 1170: 18 2b or r17, r24 + 114a: 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); - 1172: 10 92 e9 00 sts 0x00E9, r1 + 114c: 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); - 1176: 80 91 e8 00 lds r24, 0x00E8 + 1150: 80 91 e8 00 lds r24, 0x00E8 uint8_t PrevEndpoint = Endpoint_GetCurrentEndpoint(); Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); if (Endpoint_IsSETUPReceived()) - 117a: 83 ff sbrs r24, 3 - 117c: 01 c0 rjmp .+2 ; 0x1180 + 1154: 83 ff sbrs r24, 3 + 1156: 01 c0 rjmp .+2 ; 0x115a USB_Device_ProcessControlRequest(); - 117e: 88 de rcall .-752 ; 0xe90 + 1158: 88 de rcall .-752 ; 0xe6a */ 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); - 1180: 1f 70 andi r17, 0x0F ; 15 - 1182: 10 93 e9 00 sts 0x00E9, r17 + 115a: 1f 70 andi r17, 0x0F ; 15 + 115c: 10 93 e9 00 sts 0x00E9, r17 #elif defined(USB_CAN_BE_HOST) USB_HostTask(); #elif defined(USB_CAN_BE_DEVICE) USB_DeviceTask(); #endif } - 1186: 1f 91 pop r17 - 1188: 08 95 ret + 1160: 1f 91 pop r17 + 1162: 08 95 ret -0000118a : +00001164 : #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) { - 118a: cf 93 push r28 - 118c: df 93 push r29 - 118e: ec 01 movw r28, r24 + 1164: cf 93 push r28 + 1166: df 93 push r29 + 1168: 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); - 1190: 80 91 e8 00 lds r24, 0x00E8 + 116a: 80 91 e8 00 lds r24, 0x00E8 if (!(Endpoint_IsSETUPReceived())) - 1194: 83 ff sbrs r24, 3 - 1196: a2 c0 rjmp .+324 ; 0x12dc + 116e: 83 ff sbrs r24, 3 + 1170: a2 c0 rjmp .+324 ; 0x12b6 return; if (USB_ControlRequest.wIndex != CDCInterfaceInfo->Config.ControlInterfaceNumber) - 1198: 88 81 ld r24, Y - 119a: 90 e0 ldi r25, 0x00 ; 0 - 119c: 20 91 9e 02 lds r18, 0x029E - 11a0: 30 91 9f 02 lds r19, 0x029F - 11a4: 28 17 cp r18, r24 - 11a6: 39 07 cpc r19, r25 - 11a8: 09 f0 breq .+2 ; 0x11ac - 11aa: 98 c0 rjmp .+304 ; 0x12dc + 1172: 88 81 ld r24, Y + 1174: 90 e0 ldi r25, 0x00 ; 0 + 1176: 20 91 60 02 lds r18, 0x0260 + 117a: 30 91 61 02 lds r19, 0x0261 + 117e: 28 17 cp r18, r24 + 1180: 39 07 cpc r19, r25 + 1182: 09 f0 breq .+2 ; 0x1186 + 1184: 98 c0 rjmp .+304 ; 0x12b6 return; switch (USB_ControlRequest.bRequest) - 11ac: 80 91 9b 02 lds r24, 0x029B - 11b0: 81 32 cpi r24, 0x21 ; 33 - 11b2: 69 f0 breq .+26 ; 0x11ce - 11b4: 82 32 cpi r24, 0x22 ; 34 - 11b6: 20 f4 brcc .+8 ; 0x11c0 - 11b8: 80 32 cpi r24, 0x20 ; 32 - 11ba: 09 f0 breq .+2 ; 0x11be - 11bc: 8f c0 rjmp .+286 ; 0x12dc - 11be: 3c c0 rjmp .+120 ; 0x1238 - 11c0: 82 32 cpi r24, 0x22 ; 34 - 11c2: 09 f4 brne .+2 ; 0x11c6 - 11c4: 6a c0 rjmp .+212 ; 0x129a - 11c6: 83 32 cpi r24, 0x23 ; 35 - 11c8: 09 f0 breq .+2 ; 0x11cc - 11ca: 88 c0 rjmp .+272 ; 0x12dc - 11cc: 79 c0 rjmp .+242 ; 0x12c0 + 1186: 80 91 5d 02 lds r24, 0x025D + 118a: 81 32 cpi r24, 0x21 ; 33 + 118c: 69 f0 breq .+26 ; 0x11a8 + 118e: 82 32 cpi r24, 0x22 ; 34 + 1190: 20 f4 brcc .+8 ; 0x119a + 1192: 80 32 cpi r24, 0x20 ; 32 + 1194: 09 f0 breq .+2 ; 0x1198 + 1196: 8f c0 rjmp .+286 ; 0x12b6 + 1198: 3c c0 rjmp .+120 ; 0x1212 + 119a: 82 32 cpi r24, 0x22 ; 34 + 119c: 09 f4 brne .+2 ; 0x11a0 + 119e: 6a c0 rjmp .+212 ; 0x1274 + 11a0: 83 32 cpi r24, 0x23 ; 35 + 11a2: 09 f0 breq .+2 ; 0x11a6 + 11a4: 88 c0 rjmp .+272 ; 0x12b6 + 11a6: 79 c0 rjmp .+242 ; 0x129a { case CDC_REQ_GetLineEncoding: if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) - 11ce: 80 91 9a 02 lds r24, 0x029A - 11d2: 81 3a cpi r24, 0xA1 ; 161 - 11d4: 09 f0 breq .+2 ; 0x11d8 - 11d6: 82 c0 rjmp .+260 ; 0x12dc + 11a8: 80 91 5c 02 lds r24, 0x025C + 11ac: 81 3a cpi r24, 0xA1 ; 161 + 11ae: 09 f0 breq .+2 ; 0x11b2 + 11b0: 82 c0 rjmp .+260 ; 0x12b6 * \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); - 11d8: 80 91 e8 00 lds r24, 0x00E8 - 11dc: 87 7f andi r24, 0xF7 ; 247 - 11de: 80 93 e8 00 sts 0x00E8, r24 + 11b2: 80 91 e8 00 lds r24, 0x00E8 + 11b6: 87 7f andi r24, 0xF7 ; 247 + 11b8: 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); - 11e2: 80 91 e8 00 lds r24, 0x00E8 + 11bc: 80 91 e8 00 lds r24, 0x00E8 { Endpoint_ClearSETUP(); while (!(Endpoint_IsINReady())); - 11e6: 80 ff sbrs r24, 0 - 11e8: fc cf rjmp .-8 ; 0x11e2 + 11c0: 80 ff sbrs r24, 0 + 11c2: fc cf rjmp .-8 ; 0x11bc Endpoint_Write_32_LE(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS); - 11ea: 8c 89 ldd r24, Y+20 ; 0x14 - 11ec: 9d 89 ldd r25, Y+21 ; 0x15 - 11ee: ae 89 ldd r26, Y+22 ; 0x16 - 11f0: bf 89 ldd r27, Y+23 ; 0x17 + 11c4: 8c 89 ldd r24, Y+20 ; 0x14 + 11c6: 9d 89 ldd r25, Y+21 ; 0x15 + 11c8: ae 89 ldd r26, Y+22 ; 0x16 + 11ca: 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); - 11f2: 80 93 f1 00 sts 0x00F1, r24 + 11cc: 80 93 f1 00 sts 0x00F1, r24 UEDATX = (Data >> 8); - 11f6: 29 2f mov r18, r25 - 11f8: 3a 2f mov r19, r26 - 11fa: 4b 2f mov r20, r27 - 11fc: 55 27 eor r21, r21 - 11fe: 20 93 f1 00 sts 0x00F1, r18 + 11d0: 29 2f mov r18, r25 + 11d2: 3a 2f mov r19, r26 + 11d4: 4b 2f mov r20, r27 + 11d6: 55 27 eor r21, r21 + 11d8: 20 93 f1 00 sts 0x00F1, r18 UEDATX = (Data >> 16); - 1202: 9d 01 movw r18, r26 - 1204: 44 27 eor r20, r20 - 1206: 55 27 eor r21, r21 - 1208: 20 93 f1 00 sts 0x00F1, r18 + 11dc: 9d 01 movw r18, r26 + 11de: 44 27 eor r20, r20 + 11e0: 55 27 eor r21, r21 + 11e2: 20 93 f1 00 sts 0x00F1, r18 UEDATX = (Data >> 24); - 120c: 8b 2f mov r24, r27 - 120e: 99 27 eor r25, r25 - 1210: aa 27 eor r26, r26 - 1212: bb 27 eor r27, r27 - 1214: 80 93 f1 00 sts 0x00F1, r24 + 11e6: 8b 2f mov r24, r27 + 11e8: 99 27 eor r25, r25 + 11ea: aa 27 eor r26, r26 + 11ec: bb 27 eor r27, r27 + 11ee: 80 93 f1 00 sts 0x00F1, r24 Endpoint_Write_8(CDCInterfaceInfo->State.LineEncoding.CharFormat); - 1218: 88 8d ldd r24, Y+24 ; 0x18 + 11f2: 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; - 121a: 80 93 f1 00 sts 0x00F1, r24 + 11f4: 80 93 f1 00 sts 0x00F1, r24 Endpoint_Write_8(CDCInterfaceInfo->State.LineEncoding.ParityType); - 121e: 89 8d ldd r24, Y+25 ; 0x19 - 1220: 80 93 f1 00 sts 0x00F1, r24 + 11f8: 89 8d ldd r24, Y+25 ; 0x19 + 11fa: 80 93 f1 00 sts 0x00F1, r24 Endpoint_Write_8(CDCInterfaceInfo->State.LineEncoding.DataBits); - 1224: 8a 8d ldd r24, Y+26 ; 0x1a - 1226: 80 93 f1 00 sts 0x00F1, r24 + 11fe: 8a 8d ldd r24, Y+26 ; 0x1a + 1200: 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)); - 122a: 80 91 e8 00 lds r24, 0x00E8 - 122e: 8e 77 andi r24, 0x7E ; 126 - 1230: 80 93 e8 00 sts 0x00E8, r24 + 1204: 80 91 e8 00 lds r24, 0x00E8 + 1208: 8e 77 andi r24, 0x7E ; 126 + 120a: 80 93 e8 00 sts 0x00E8, r24 Endpoint_ClearIN(); Endpoint_ClearStatusStage(); - 1234: b5 dc rcall .-1686 ; 0xba0 - 1236: 52 c0 rjmp .+164 ; 0x12dc + 120e: b5 dc rcall .-1686 ; 0xb7a + 1210: 52 c0 rjmp .+164 ; 0x12b6 } break; case CDC_REQ_SetLineEncoding: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) - 1238: 80 91 9a 02 lds r24, 0x029A - 123c: 81 32 cpi r24, 0x21 ; 33 - 123e: 09 f0 breq .+2 ; 0x1242 - 1240: 4d c0 rjmp .+154 ; 0x12dc + 1212: 80 91 5c 02 lds r24, 0x025C + 1216: 81 32 cpi r24, 0x21 ; 33 + 1218: 09 f0 breq .+2 ; 0x121c + 121a: 4d c0 rjmp .+154 ; 0x12b6 * \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); - 1242: 80 91 e8 00 lds r24, 0x00E8 - 1246: 87 7f andi r24, 0xF7 ; 247 - 1248: 80 93 e8 00 sts 0x00E8, r24 + 121c: 80 91 e8 00 lds r24, 0x00E8 + 1220: 87 7f andi r24, 0xF7 ; 247 + 1222: 80 93 e8 00 sts 0x00E8, r24 { Endpoint_ClearSETUP(); while (!(Endpoint_IsOUTReceived())) - 124c: 04 c0 rjmp .+8 ; 0x1256 + 1226: 04 c0 rjmp .+8 ; 0x1230 { if (USB_DeviceState == DEVICE_STATE_Unattached) - 124e: 8e b3 in r24, 0x1e ; 30 - 1250: 88 23 and r24, r24 - 1252: 09 f4 brne .+2 ; 0x1256 - 1254: 43 c0 rjmp .+134 ; 0x12dc + 1228: 8e b3 in r24, 0x1e ; 30 + 122a: 88 23 and r24, r24 + 122c: 09 f4 brne .+2 ; 0x1230 + 122e: 43 c0 rjmp .+134 ; 0x12b6 * \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); - 1256: 80 91 e8 00 lds r24, 0x00E8 + 1230: 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())) - 125a: 82 ff sbrs r24, 2 - 125c: f8 cf rjmp .-16 ; 0x124e + 1234: 82 ff sbrs r24, 2 + 1236: f8 cf rjmp .-16 ; 0x1228 { uint32_t Value; uint8_t Bytes[4]; } Data; Data.Bytes[0] = UEDATX; - 125e: 30 91 f1 00 lds r19, 0x00F1 + 1238: 30 91 f1 00 lds r19, 0x00F1 Data.Bytes[1] = UEDATX; - 1262: 20 91 f1 00 lds r18, 0x00F1 + 123c: 20 91 f1 00 lds r18, 0x00F1 Data.Bytes[2] = UEDATX; - 1266: 90 91 f1 00 lds r25, 0x00F1 + 1240: 90 91 f1 00 lds r25, 0x00F1 Data.Bytes[3] = UEDATX; - 126a: 80 91 f1 00 lds r24, 0x00F1 + 1244: 80 91 f1 00 lds r24, 0x00F1 { if (USB_DeviceState == DEVICE_STATE_Unattached) return; } CDCInterfaceInfo->State.LineEncoding.BaudRateBPS = Endpoint_Read_32_LE(); - 126e: 3c 8b std Y+20, r19 ; 0x14 - 1270: 2d 8b std Y+21, r18 ; 0x15 - 1272: 9e 8b std Y+22, r25 ; 0x16 - 1274: 8f 8b std Y+23, r24 ; 0x17 + 1248: 3c 8b std Y+20, r19 ; 0x14 + 124a: 2d 8b std Y+21, r18 ; 0x15 + 124c: 9e 8b std Y+22, r25 ; 0x16 + 124e: 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; - 1276: 80 91 f1 00 lds r24, 0x00F1 + 1250: 80 91 f1 00 lds r24, 0x00F1 CDCInterfaceInfo->State.LineEncoding.CharFormat = Endpoint_Read_8(); - 127a: 88 8f std Y+24, r24 ; 0x18 - 127c: 80 91 f1 00 lds r24, 0x00F1 + 1254: 88 8f std Y+24, r24 ; 0x18 + 1256: 80 91 f1 00 lds r24, 0x00F1 CDCInterfaceInfo->State.LineEncoding.ParityType = Endpoint_Read_8(); - 1280: 89 8f std Y+25, r24 ; 0x19 - 1282: 80 91 f1 00 lds r24, 0x00F1 + 125a: 89 8f std Y+25, r24 ; 0x19 + 125c: 80 91 f1 00 lds r24, 0x00F1 CDCInterfaceInfo->State.LineEncoding.DataBits = Endpoint_Read_8(); - 1286: 8a 8f std Y+26, r24 ; 0x1a + 1260: 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)); - 1288: 80 91 e8 00 lds r24, 0x00E8 - 128c: 8b 77 andi r24, 0x7B ; 123 - 128e: 80 93 e8 00 sts 0x00E8, r24 + 1262: 80 91 e8 00 lds r24, 0x00E8 + 1266: 8b 77 andi r24, 0x7B ; 123 + 1268: 80 93 e8 00 sts 0x00E8, r24 Endpoint_ClearOUT(); Endpoint_ClearStatusStage(); - 1292: 86 dc rcall .-1780 ; 0xba0 + 126c: 86 dc rcall .-1780 ; 0xb7a EVENT_CDC_Device_LineEncodingChanged(CDCInterfaceInfo); - 1294: ce 01 movw r24, r28 - 1296: b3 d9 rcall .-3226 ; 0x5fe - 1298: 21 c0 rjmp .+66 ; 0x12dc + 126e: ce 01 movw r24, r28 + 1270: d0 d9 rcall .-3168 ; 0x612 + 1272: 21 c0 rjmp .+66 ; 0x12b6 } break; case CDC_REQ_SetControlLineState: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) - 129a: 80 91 9a 02 lds r24, 0x029A - 129e: 81 32 cpi r24, 0x21 ; 33 - 12a0: e9 f4 brne .+58 ; 0x12dc + 1274: 80 91 5c 02 lds r24, 0x025C + 1278: 81 32 cpi r24, 0x21 ; 33 + 127a: e9 f4 brne .+58 ; 0x12b6 * \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); - 12a2: 80 91 e8 00 lds r24, 0x00E8 - 12a6: 87 7f andi r24, 0xF7 ; 247 - 12a8: 80 93 e8 00 sts 0x00E8, r24 + 127c: 80 91 e8 00 lds r24, 0x00E8 + 1280: 87 7f andi r24, 0xF7 ; 247 + 1282: 80 93 e8 00 sts 0x00E8, r24 { Endpoint_ClearSETUP(); Endpoint_ClearStatusStage(); - 12ac: 79 dc rcall .-1806 ; 0xba0 + 1286: 79 dc rcall .-1806 ; 0xb7a CDCInterfaceInfo->State.ControlLineStates.HostToDevice = USB_ControlRequest.wValue; - 12ae: 80 91 9c 02 lds r24, 0x029C - 12b2: 90 91 9d 02 lds r25, 0x029D - 12b6: 99 8b std Y+17, r25 ; 0x11 - 12b8: 88 8b std Y+16, r24 ; 0x10 + 1288: 80 91 5e 02 lds r24, 0x025E + 128c: 90 91 5f 02 lds r25, 0x025F + 1290: 99 8b std Y+17, r25 ; 0x11 + 1292: 88 8b std Y+16, r24 ; 0x10 EVENT_CDC_Device_ControLineStateChanged(CDCInterfaceInfo); - 12ba: ce 01 movw r24, r28 - 12bc: d4 d0 rcall .+424 ; 0x1466 - 12be: 0e c0 rjmp .+28 ; 0x12dc + 1294: ce 01 movw r24, r28 + 1296: d4 d0 rcall .+424 ; 0x1440 + 1298: 0e c0 rjmp .+28 ; 0x12b6 } break; case CDC_REQ_SendBreak: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) - 12c0: 80 91 9a 02 lds r24, 0x029A - 12c4: 81 32 cpi r24, 0x21 ; 33 - 12c6: 51 f4 brne .+20 ; 0x12dc - 12c8: 80 91 e8 00 lds r24, 0x00E8 - 12cc: 87 7f andi r24, 0xF7 ; 247 - 12ce: 80 93 e8 00 sts 0x00E8, r24 + 129a: 80 91 5c 02 lds r24, 0x025C + 129e: 81 32 cpi r24, 0x21 ; 33 + 12a0: 51 f4 brne .+20 ; 0x12b6 + 12a2: 80 91 e8 00 lds r24, 0x00E8 + 12a6: 87 7f andi r24, 0xF7 ; 247 + 12a8: 80 93 e8 00 sts 0x00E8, r24 { Endpoint_ClearSETUP(); Endpoint_ClearStatusStage(); - 12d2: 66 dc rcall .-1844 ; 0xba0 + 12ac: 66 dc rcall .-1844 ; 0xb7a EVENT_CDC_Device_BreakSent(CDCInterfaceInfo, (uint8_t)USB_ControlRequest.wValue); - 12d4: ce 01 movw r24, r28 - 12d6: 60 91 9c 02 lds r22, 0x029C - 12da: c5 d0 rcall .+394 ; 0x1466 + 12ae: ce 01 movw r24, r28 + 12b0: 60 91 5e 02 lds r22, 0x025E + 12b4: c5 d0 rcall .+394 ; 0x1440 } break; } } - 12dc: df 91 pop r29 - 12de: cf 91 pop r28 - 12e0: 08 95 ret + 12b6: df 91 pop r29 + 12b8: cf 91 pop r28 + 12ba: 08 95 ret -000012e2 : +000012bc : bool CDC_Device_ConfigureEndpoints(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { - 12e2: cf 93 push r28 - 12e4: df 93 push r29 - 12e6: ec 01 movw r28, r24 + 12bc: cf 93 push r28 + 12be: df 93 push r29 + 12c0: ec 01 movw r28, r24 memset(&CDCInterfaceInfo->State, 0x00, sizeof(CDCInterfaceInfo->State)); - 12e8: 40 96 adiw r24, 0x10 ; 16 - 12ea: fc 01 movw r30, r24 - 12ec: 8b e0 ldi r24, 0x0B ; 11 - 12ee: df 01 movw r26, r30 - 12f0: 1d 92 st X+, r1 - 12f2: 8a 95 dec r24 - 12f4: e9 f7 brne .-6 ; 0x12f0 + 12c2: 40 96 adiw r24, 0x10 ; 16 + 12c4: fc 01 movw r30, r24 + 12c6: 8b e0 ldi r24, 0x0B ; 11 + 12c8: df 01 movw r26, r30 + 12ca: 1d 92 st X+, r1 + 12cc: 8a 95 dec r24 + 12ce: e9 f7 brne .-6 ; 0x12ca CDCInterfaceInfo->Config.DataINEndpoint.Type = EP_TYPE_BULK; - 12f6: 82 e0 ldi r24, 0x02 ; 2 - 12f8: 8c 83 std Y+4, r24 ; 0x04 + 12d0: 82 e0 ldi r24, 0x02 ; 2 + 12d2: 8c 83 std Y+4, r24 ; 0x04 CDCInterfaceInfo->Config.DataOUTEndpoint.Type = EP_TYPE_BULK; - 12fa: 89 87 std Y+9, r24 ; 0x09 + 12d4: 89 87 std Y+9, r24 ; 0x09 CDCInterfaceInfo->Config.NotificationEndpoint.Type = EP_TYPE_INTERRUPT; - 12fc: 83 e0 ldi r24, 0x03 ; 3 - 12fe: 8e 87 std Y+14, r24 ; 0x0e + 12d6: 83 e0 ldi r24, 0x03 ; 3 + 12d8: 8e 87 std Y+14, r24 ; 0x0e if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataINEndpoint, 1))) - 1300: ce 01 movw r24, r28 - 1302: 01 96 adiw r24, 0x01 ; 1 - 1304: 61 e0 ldi r22, 0x01 ; 1 - 1306: 08 dc rcall .-2032 ; 0xb18 - 1308: 88 23 and r24, r24 - 130a: 59 f0 breq .+22 ; 0x1322 + 12da: ce 01 movw r24, r28 + 12dc: 01 96 adiw r24, 0x01 ; 1 + 12de: 61 e0 ldi r22, 0x01 ; 1 + 12e0: 08 dc rcall .-2032 ; 0xaf2 + 12e2: 88 23 and r24, r24 + 12e4: 59 f0 breq .+22 ; 0x12fc return false; if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataOUTEndpoint, 1))) - 130c: ce 01 movw r24, r28 - 130e: 06 96 adiw r24, 0x06 ; 6 - 1310: 61 e0 ldi r22, 0x01 ; 1 - 1312: 02 dc rcall .-2044 ; 0xb18 - 1314: 88 23 and r24, r24 - 1316: 29 f0 breq .+10 ; 0x1322 + 12e6: ce 01 movw r24, r28 + 12e8: 06 96 adiw r24, 0x06 ; 6 + 12ea: 61 e0 ldi r22, 0x01 ; 1 + 12ec: 02 dc rcall .-2044 ; 0xaf2 + 12ee: 88 23 and r24, r24 + 12f0: 29 f0 breq .+10 ; 0x12fc return false; if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.NotificationEndpoint, 1))) - 1318: ce 01 movw r24, r28 - 131a: 0b 96 adiw r24, 0x0b ; 11 - 131c: 61 e0 ldi r22, 0x01 ; 1 - 131e: fc db rcall .-2056 ; 0xb18 - 1320: 01 c0 rjmp .+2 ; 0x1324 + 12f2: ce 01 movw r24, r28 + 12f4: 0b 96 adiw r24, 0x0b ; 11 + 12f6: 61 e0 ldi r22, 0x01 ; 1 + 12f8: fc db rcall .-2056 ; 0xaf2 + 12fa: 01 c0 rjmp .+2 ; 0x12fe if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataINEndpoint, 1))) return false; if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataOUTEndpoint, 1))) return false; - 1322: 80 e0 ldi r24, 0x00 ; 0 + 12fc: 80 e0 ldi r24, 0x00 ; 0 if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.NotificationEndpoint, 1))) return false; return true; } - 1324: df 91 pop r29 - 1326: cf 91 pop r28 - 1328: 08 95 ret + 12fe: df 91 pop r29 + 1300: cf 91 pop r28 + 1302: 08 95 ret -0000132a : +00001304 : return Endpoint_Write_Stream_LE(Buffer, Length, NULL); } uint8_t CDC_Device_SendByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, const uint8_t Data) { - 132a: df 93 push r29 - 132c: cf 93 push r28 - 132e: 0f 92 push r0 - 1330: cd b7 in r28, 0x3d ; 61 - 1332: de b7 in r29, 0x3e ; 62 - 1334: fc 01 movw r30, r24 + 1304: df 93 push r29 + 1306: cf 93 push r28 + 1308: 0f 92 push r0 + 130a: cd b7 in r28, 0x3d ; 61 + 130c: de b7 in r29, 0x3e ; 62 + 130e: fc 01 movw r30, r24 if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - 1336: 8e b3 in r24, 0x1e ; 30 - 1338: 84 30 cpi r24, 0x04 ; 4 - 133a: f9 f4 brne .+62 ; 0x137a - 133c: 24 89 ldd r18, Z+20 ; 0x14 - 133e: 35 89 ldd r19, Z+21 ; 0x15 - 1340: 46 89 ldd r20, Z+22 ; 0x16 - 1342: 57 89 ldd r21, Z+23 ; 0x17 - 1344: 21 15 cp r18, r1 - 1346: 31 05 cpc r19, r1 - 1348: 41 05 cpc r20, r1 - 134a: 51 05 cpc r21, r1 - 134c: b1 f0 breq .+44 ; 0x137a + 1310: 8e b3 in r24, 0x1e ; 30 + 1312: 84 30 cpi r24, 0x04 ; 4 + 1314: f9 f4 brne .+62 ; 0x1354 + 1316: 24 89 ldd r18, Z+20 ; 0x14 + 1318: 35 89 ldd r19, Z+21 ; 0x15 + 131a: 46 89 ldd r20, Z+22 ; 0x16 + 131c: 57 89 ldd r21, Z+23 ; 0x17 + 131e: 21 15 cp r18, r1 + 1320: 31 05 cpc r19, r1 + 1322: 41 05 cpc r20, r1 + 1324: 51 05 cpc r21, r1 + 1326: b1 f0 breq .+44 ; 0x1354 */ 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); - 134e: 81 81 ldd r24, Z+1 ; 0x01 - 1350: 8f 70 andi r24, 0x0F ; 15 - 1352: 80 93 e9 00 sts 0x00E9, r24 + 1328: 81 81 ldd r24, Z+1 ; 0x01 + 132a: 8f 70 andi r24, 0x0F ; 15 + 132c: 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); - 1356: 80 91 e8 00 lds r24, 0x00E8 + 1330: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWSTREAM_DeviceDisconnected; Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address); if (!(Endpoint_IsReadWriteAllowed())) - 135a: 85 fd sbrc r24, 5 - 135c: 0a c0 rjmp .+20 ; 0x1372 + 1334: 85 fd sbrc r24, 5 + 1336: 0a c0 rjmp .+20 ; 0x134c */ 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)); - 135e: 80 91 e8 00 lds r24, 0x00E8 - 1362: 8e 77 andi r24, 0x7E ; 126 - 1364: 80 93 e8 00 sts 0x00E8, r24 + 1338: 80 91 e8 00 lds r24, 0x00E8 + 133c: 8e 77 andi r24, 0x7E ; 126 + 133e: 80 93 e8 00 sts 0x00E8, r24 { Endpoint_ClearIN(); uint8_t ErrorCode; if ((ErrorCode = Endpoint_WaitUntilReady()) != ENDPOINT_READYWAIT_NoError) - 1368: 69 83 std Y+1, r22 ; 0x01 - 136a: 39 dc rcall .-1934 ; 0xbde - 136c: 69 81 ldd r22, Y+1 ; 0x01 - 136e: 88 23 and r24, r24 - 1370: 29 f4 brne .+10 ; 0x137c + 1342: 69 83 std Y+1, r22 ; 0x01 + 1344: 39 dc rcall .-1934 ; 0xbb8 + 1346: 69 81 ldd r22, Y+1 ; 0x01 + 1348: 88 23 and r24, r24 + 134a: 29 f4 brne .+10 ; 0x1356 * \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; - 1372: 60 93 f1 00 sts 0x00F1, r22 + 134c: 60 93 f1 00 sts 0x00F1, r22 return ErrorCode; } Endpoint_Write_8(Data); return ENDPOINT_READYWAIT_NoError; - 1376: 80 e0 ldi r24, 0x00 ; 0 - 1378: 01 c0 rjmp .+2 ; 0x137c + 1350: 80 e0 ldi r24, 0x00 ; 0 + 1352: 01 c0 rjmp .+2 ; 0x1356 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; - 137a: 82 e0 ldi r24, 0x02 ; 2 + 1354: 82 e0 ldi r24, 0x02 ; 2 return ErrorCode; } Endpoint_Write_8(Data); return ENDPOINT_READYWAIT_NoError; } - 137c: 0f 90 pop r0 - 137e: cf 91 pop r28 - 1380: df 91 pop r29 - 1382: 08 95 ret + 1356: 0f 90 pop r0 + 1358: cf 91 pop r28 + 135a: df 91 pop r29 + 135c: 08 95 ret -00001384 : +0000135e : uint8_t CDC_Device_Flush(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { - 1384: fc 01 movw r30, r24 + 135e: fc 01 movw r30, r24 if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - 1386: 8e b3 in r24, 0x1e ; 30 - 1388: 84 30 cpi r24, 0x04 ; 4 - 138a: 19 f5 brne .+70 ; 0x13d2 - 138c: 24 89 ldd r18, Z+20 ; 0x14 - 138e: 35 89 ldd r19, Z+21 ; 0x15 - 1390: 46 89 ldd r20, Z+22 ; 0x16 - 1392: 57 89 ldd r21, Z+23 ; 0x17 - 1394: 21 15 cp r18, r1 - 1396: 31 05 cpc r19, r1 - 1398: 41 05 cpc r20, r1 - 139a: 51 05 cpc r21, r1 - 139c: d1 f0 breq .+52 ; 0x13d2 + 1360: 8e b3 in r24, 0x1e ; 30 + 1362: 84 30 cpi r24, 0x04 ; 4 + 1364: 19 f5 brne .+70 ; 0x13ac + 1366: 24 89 ldd r18, Z+20 ; 0x14 + 1368: 35 89 ldd r19, Z+21 ; 0x15 + 136a: 46 89 ldd r20, Z+22 ; 0x16 + 136c: 57 89 ldd r21, Z+23 ; 0x17 + 136e: 21 15 cp r18, r1 + 1370: 31 05 cpc r19, r1 + 1372: 41 05 cpc r20, r1 + 1374: 51 05 cpc r21, r1 + 1376: d1 f0 breq .+52 ; 0x13ac */ 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); - 139e: 81 81 ldd r24, Z+1 ; 0x01 - 13a0: 8f 70 andi r24, 0x0F ; 15 - 13a2: 80 93 e9 00 sts 0x00E9, r24 + 1378: 81 81 ldd r24, Z+1 ; 0x01 + 137a: 8f 70 andi r24, 0x0F ; 15 + 137c: 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; - 13a6: 80 91 f2 00 lds r24, 0x00F2 + 1380: 80 91 f2 00 lds r24, 0x00F2 uint8_t ErrorCode; Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address); if (!(Endpoint_BytesInEndpoint())) - 13aa: 88 23 and r24, r24 - 13ac: a1 f0 breq .+40 ; 0x13d6 + 1384: 88 23 and r24, r24 + 1386: a1 f0 breq .+40 ; 0x13b0 * 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); - 13ae: 90 91 e8 00 lds r25, 0x00E8 + 1388: 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)); - 13b2: 80 91 e8 00 lds r24, 0x00E8 - 13b6: 8e 77 andi r24, 0x7E ; 126 - 13b8: 80 93 e8 00 sts 0x00E8, r24 + 138c: 80 91 e8 00 lds r24, 0x00E8 + 1390: 8e 77 andi r24, 0x7E ; 126 + 1392: 80 93 e8 00 sts 0x00E8, r24 bool BankFull = !(Endpoint_IsReadWriteAllowed()); Endpoint_ClearIN(); if (BankFull) - 13bc: 95 fd sbrc r25, 5 - 13be: 0d c0 rjmp .+26 ; 0x13da + 1396: 95 fd sbrc r25, 5 + 1398: 0d c0 rjmp .+26 ; 0x13b4 { if ((ErrorCode = Endpoint_WaitUntilReady()) != ENDPOINT_READYWAIT_NoError) - 13c0: 0e dc rcall .-2020 ; 0xbde - 13c2: 88 23 and r24, r24 - 13c4: 59 f4 brne .+22 ; 0x13dc - 13c6: 90 91 e8 00 lds r25, 0x00E8 - 13ca: 9e 77 andi r25, 0x7E ; 126 - 13cc: 90 93 e8 00 sts 0x00E8, r25 - 13d0: 08 95 ret + 139a: 0e dc rcall .-2020 ; 0xbb8 + 139c: 88 23 and r24, r24 + 139e: 59 f4 brne .+22 ; 0x13b6 + 13a0: 90 91 e8 00 lds r25, 0x00E8 + 13a4: 9e 77 andi r25, 0x7E ; 126 + 13a6: 90 93 e8 00 sts 0x00E8, r25 + 13aa: 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; - 13d2: 82 e0 ldi r24, 0x02 ; 2 - 13d4: 08 95 ret + 13ac: 82 e0 ldi r24, 0x02 ; 2 + 13ae: 08 95 ret uint8_t ErrorCode; Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address); if (!(Endpoint_BytesInEndpoint())) return ENDPOINT_READYWAIT_NoError; - 13d6: 80 e0 ldi r24, 0x00 ; 0 - 13d8: 08 95 ret + 13b0: 80 e0 ldi r24, 0x00 ; 0 + 13b2: 08 95 ret return ErrorCode; Endpoint_ClearIN(); } return ENDPOINT_READYWAIT_NoError; - 13da: 80 e0 ldi r24, 0x00 ; 0 + 13b4: 80 e0 ldi r24, 0x00 ; 0 } - 13dc: 08 95 ret + 13b6: 08 95 ret -000013de : +000013b8 : return true; } void CDC_Device_USBTask(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - 13de: 2e b3 in r18, 0x1e ; 30 - 13e0: 24 30 cpi r18, 0x04 ; 4 - 13e2: 99 f4 brne .+38 ; 0x140a - 13e4: fc 01 movw r30, r24 - 13e6: 24 89 ldd r18, Z+20 ; 0x14 - 13e8: 35 89 ldd r19, Z+21 ; 0x15 - 13ea: 46 89 ldd r20, Z+22 ; 0x16 - 13ec: 57 89 ldd r21, Z+23 ; 0x17 - 13ee: 21 15 cp r18, r1 - 13f0: 31 05 cpc r19, r1 - 13f2: 41 05 cpc r20, r1 - 13f4: 51 05 cpc r21, r1 - 13f6: 49 f0 breq .+18 ; 0x140a + 13b8: 2e b3 in r18, 0x1e ; 30 + 13ba: 24 30 cpi r18, 0x04 ; 4 + 13bc: 99 f4 brne .+38 ; 0x13e4 + 13be: fc 01 movw r30, r24 + 13c0: 24 89 ldd r18, Z+20 ; 0x14 + 13c2: 35 89 ldd r19, Z+21 ; 0x15 + 13c4: 46 89 ldd r20, Z+22 ; 0x16 + 13c6: 57 89 ldd r21, Z+23 ; 0x17 + 13c8: 21 15 cp r18, r1 + 13ca: 31 05 cpc r19, r1 + 13cc: 41 05 cpc r20, r1 + 13ce: 51 05 cpc r21, r1 + 13d0: 49 f0 breq .+18 ; 0x13e4 */ 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); - 13f8: 21 81 ldd r18, Z+1 ; 0x01 - 13fa: 2f 70 andi r18, 0x0F ; 15 - 13fc: 20 93 e9 00 sts 0x00E9, r18 + 13d2: 21 81 ldd r18, Z+1 ; 0x01 + 13d4: 2f 70 andi r18, 0x0F ; 15 + 13d6: 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); - 1400: 20 91 e8 00 lds r18, 0x00E8 + 13da: 20 91 e8 00 lds r18, 0x00E8 return; #if !defined(NO_CLASS_DRIVER_AUTOFLUSH) Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address); if (Endpoint_IsINReady()) - 1404: 20 ff sbrs r18, 0 - 1406: 01 c0 rjmp .+2 ; 0x140a + 13de: 20 ff sbrs r18, 0 + 13e0: 01 c0 rjmp .+2 ; 0x13e4 CDC_Device_Flush(CDCInterfaceInfo); - 1408: bd cf rjmp .-134 ; 0x1384 - 140a: 08 95 ret + 13e2: bd cf rjmp .-134 ; 0x135e + 13e4: 08 95 ret -0000140c : +000013e6 : return 0; } } int16_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { - 140c: fc 01 movw r30, r24 + 13e6: fc 01 movw r30, r24 if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - 140e: 8e b3 in r24, 0x1e ; 30 - 1410: 84 30 cpi r24, 0x04 ; 4 - 1412: 29 f5 brne .+74 ; 0x145e - 1414: 24 89 ldd r18, Z+20 ; 0x14 - 1416: 35 89 ldd r19, Z+21 ; 0x15 - 1418: 46 89 ldd r20, Z+22 ; 0x16 - 141a: 57 89 ldd r21, Z+23 ; 0x17 - 141c: 21 15 cp r18, r1 - 141e: 31 05 cpc r19, r1 - 1420: 41 05 cpc r20, r1 - 1422: 51 05 cpc r21, r1 - 1424: e1 f0 breq .+56 ; 0x145e + 13e8: 8e b3 in r24, 0x1e ; 30 + 13ea: 84 30 cpi r24, 0x04 ; 4 + 13ec: 29 f5 brne .+74 ; 0x1438 + 13ee: 24 89 ldd r18, Z+20 ; 0x14 + 13f0: 35 89 ldd r19, Z+21 ; 0x15 + 13f2: 46 89 ldd r20, Z+22 ; 0x16 + 13f4: 57 89 ldd r21, Z+23 ; 0x17 + 13f6: 21 15 cp r18, r1 + 13f8: 31 05 cpc r19, r1 + 13fa: 41 05 cpc r20, r1 + 13fc: 51 05 cpc r21, r1 + 13fe: e1 f0 breq .+56 ; 0x1438 */ 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); - 1426: 86 81 ldd r24, Z+6 ; 0x06 - 1428: 8f 70 andi r24, 0x0F ; 15 - 142a: 80 93 e9 00 sts 0x00E9, r24 + 1400: 86 81 ldd r24, Z+6 ; 0x06 + 1402: 8f 70 andi r24, 0x0F ; 15 + 1404: 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); - 142e: 80 91 e8 00 lds r24, 0x00E8 + 1408: 80 91 e8 00 lds r24, 0x00E8 int16_t ReceivedByte = -1; Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataOUTEndpoint.Address); if (Endpoint_IsOUTReceived()) - 1432: 82 ff sbrs r24, 2 - 1434: 14 c0 rjmp .+40 ; 0x145e + 140c: 82 ff sbrs r24, 2 + 140e: 14 c0 rjmp .+40 ; 0x1438 #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; - 1436: 80 91 f2 00 lds r24, 0x00F2 + 1410: 80 91 f2 00 lds r24, 0x00F2 { if (Endpoint_BytesInEndpoint()) - 143a: 88 23 and r24, r24 - 143c: 21 f0 breq .+8 ; 0x1446 + 1414: 88 23 and r24, r24 + 1416: 21 f0 breq .+8 ; 0x1420 * \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; - 143e: 20 91 f1 00 lds r18, 0x00F1 + 1418: 20 91 f1 00 lds r18, 0x00F1 ReceivedByte = Endpoint_Read_8(); - 1442: 30 e0 ldi r19, 0x00 ; 0 - 1444: 02 c0 rjmp .+4 ; 0x144a + 141c: 30 e0 ldi r19, 0x00 ; 0 + 141e: 02 c0 rjmp .+4 ; 0x1424 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; - 1446: 2f ef ldi r18, 0xFF ; 255 - 1448: 3f ef ldi r19, 0xFF ; 255 + 1420: 2f ef ldi r18, 0xFF ; 255 + 1422: 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; - 144a: 80 91 f2 00 lds r24, 0x00F2 + 1424: 80 91 f2 00 lds r24, 0x00F2 if (Endpoint_IsOUTReceived()) { if (Endpoint_BytesInEndpoint()) ReceivedByte = Endpoint_Read_8(); if (!(Endpoint_BytesInEndpoint())) - 144e: 88 23 and r24, r24 - 1450: 41 f4 brne .+16 ; 0x1462 + 1428: 88 23 and r24, r24 + 142a: 41 f4 brne .+16 ; 0x143c */ 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)); - 1452: 80 91 e8 00 lds r24, 0x00E8 - 1456: 8b 77 andi r24, 0x7B ; 123 - 1458: 80 93 e8 00 sts 0x00E8, r24 - 145c: 02 c0 rjmp .+4 ; 0x1462 + 142c: 80 91 e8 00 lds r24, 0x00E8 + 1430: 8b 77 andi r24, 0x7B ; 123 + 1432: 80 93 e8 00 sts 0x00E8, r24 + 1436: 02 c0 rjmp .+4 ; 0x143c 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; - 145e: 2f ef ldi r18, 0xFF ; 255 - 1460: 3f ef ldi r19, 0xFF ; 255 + 1438: 2f ef ldi r18, 0xFF ; 255 + 143a: 3f ef ldi r19, 0xFF ; 255 if (!(Endpoint_BytesInEndpoint())) Endpoint_ClearOUT(); } return ReceivedByte; } - 1462: c9 01 movw r24, r18 - 1464: 08 95 ret + 143c: c9 01 movw r24, r18 + 143e: 08 95 ret -00001466 : +00001440 : #endif void CDC_Device_Event_Stub(void) { } - 1466: 08 95 ret - -00001468 <__subsf3>: - 1468: 50 58 subi r21, 0x80 ; 128 - -0000146a <__addsf3>: - 146a: bb 27 eor r27, r27 - 146c: aa 27 eor r26, r26 - 146e: 0e d0 rcall .+28 ; 0x148c <__addsf3x> - 1470: 70 c1 rjmp .+736 ; 0x1752 <__fp_round> - 1472: 61 d1 rcall .+706 ; 0x1736 <__fp_pscA> - 1474: 30 f0 brcs .+12 ; 0x1482 <__addsf3+0x18> - 1476: 66 d1 rcall .+716 ; 0x1744 <__fp_pscB> - 1478: 20 f0 brcs .+8 ; 0x1482 <__addsf3+0x18> - 147a: 31 f4 brne .+12 ; 0x1488 <__addsf3+0x1e> - 147c: 9f 3f cpi r25, 0xFF ; 255 - 147e: 11 f4 brne .+4 ; 0x1484 <__addsf3+0x1a> - 1480: 1e f4 brtc .+6 ; 0x1488 <__addsf3+0x1e> - 1482: 56 c1 rjmp .+684 ; 0x1730 <__fp_nan> - 1484: 0e f4 brtc .+2 ; 0x1488 <__addsf3+0x1e> - 1486: e0 95 com r30 - 1488: e7 fb bst r30, 7 - 148a: 4c c1 rjmp .+664 ; 0x1724 <__fp_inf> - -0000148c <__addsf3x>: - 148c: e9 2f mov r30, r25 - 148e: 72 d1 rcall .+740 ; 0x1774 <__fp_split3> - 1490: 80 f3 brcs .-32 ; 0x1472 <__addsf3+0x8> - 1492: ba 17 cp r27, r26 - 1494: 62 07 cpc r22, r18 - 1496: 73 07 cpc r23, r19 - 1498: 84 07 cpc r24, r20 - 149a: 95 07 cpc r25, r21 - 149c: 18 f0 brcs .+6 ; 0x14a4 <__addsf3x+0x18> - 149e: 71 f4 brne .+28 ; 0x14bc <__addsf3x+0x30> - 14a0: 9e f5 brtc .+102 ; 0x1508 <__addsf3x+0x7c> - 14a2: 8a c1 rjmp .+788 ; 0x17b8 <__fp_zero> - 14a4: 0e f4 brtc .+2 ; 0x14a8 <__addsf3x+0x1c> - 14a6: e0 95 com r30 - 14a8: 0b 2e mov r0, r27 - 14aa: ba 2f mov r27, r26 - 14ac: a0 2d mov r26, r0 - 14ae: 0b 01 movw r0, r22 - 14b0: b9 01 movw r22, r18 - 14b2: 90 01 movw r18, r0 - 14b4: 0c 01 movw r0, r24 - 14b6: ca 01 movw r24, r20 - 14b8: a0 01 movw r20, r0 - 14ba: 11 24 eor r1, r1 - 14bc: ff 27 eor r31, r31 - 14be: 59 1b sub r21, r25 - 14c0: 99 f0 breq .+38 ; 0x14e8 <__addsf3x+0x5c> - 14c2: 59 3f cpi r21, 0xF9 ; 249 - 14c4: 50 f4 brcc .+20 ; 0x14da <__addsf3x+0x4e> - 14c6: 50 3e cpi r21, 0xE0 ; 224 - 14c8: 68 f1 brcs .+90 ; 0x1524 <__addsf3x+0x98> - 14ca: 1a 16 cp r1, r26 - 14cc: f0 40 sbci r31, 0x00 ; 0 - 14ce: a2 2f mov r26, r18 - 14d0: 23 2f mov r18, r19 - 14d2: 34 2f mov r19, r20 - 14d4: 44 27 eor r20, r20 - 14d6: 58 5f subi r21, 0xF8 ; 248 - 14d8: f3 cf rjmp .-26 ; 0x14c0 <__addsf3x+0x34> - 14da: 46 95 lsr r20 - 14dc: 37 95 ror r19 - 14de: 27 95 ror r18 - 14e0: a7 95 ror r26 - 14e2: f0 40 sbci r31, 0x00 ; 0 - 14e4: 53 95 inc r21 - 14e6: c9 f7 brne .-14 ; 0x14da <__addsf3x+0x4e> - 14e8: 7e f4 brtc .+30 ; 0x1508 <__addsf3x+0x7c> - 14ea: 1f 16 cp r1, r31 - 14ec: ba 0b sbc r27, r26 - 14ee: 62 0b sbc r22, r18 - 14f0: 73 0b sbc r23, r19 - 14f2: 84 0b sbc r24, r20 - 14f4: ba f0 brmi .+46 ; 0x1524 <__addsf3x+0x98> - 14f6: 91 50 subi r25, 0x01 ; 1 - 14f8: a1 f0 breq .+40 ; 0x1522 <__addsf3x+0x96> - 14fa: ff 0f add r31, r31 - 14fc: bb 1f adc r27, r27 - 14fe: 66 1f adc r22, r22 - 1500: 77 1f adc r23, r23 - 1502: 88 1f adc r24, r24 - 1504: c2 f7 brpl .-16 ; 0x14f6 <__addsf3x+0x6a> - 1506: 0e c0 rjmp .+28 ; 0x1524 <__addsf3x+0x98> - 1508: ba 0f add r27, r26 - 150a: 62 1f adc r22, r18 - 150c: 73 1f adc r23, r19 - 150e: 84 1f adc r24, r20 - 1510: 48 f4 brcc .+18 ; 0x1524 <__addsf3x+0x98> - 1512: 87 95 ror r24 - 1514: 77 95 ror r23 - 1516: 67 95 ror r22 - 1518: b7 95 ror r27 - 151a: f7 95 ror r31 - 151c: 9e 3f cpi r25, 0xFE ; 254 - 151e: 08 f0 brcs .+2 ; 0x1522 <__addsf3x+0x96> - 1520: b3 cf rjmp .-154 ; 0x1488 <__addsf3+0x1e> - 1522: 93 95 inc r25 - 1524: 88 0f add r24, r24 - 1526: 08 f0 brcs .+2 ; 0x152a <__addsf3x+0x9e> - 1528: 99 27 eor r25, r25 - 152a: ee 0f add r30, r30 - 152c: 97 95 ror r25 - 152e: 87 95 ror r24 - 1530: 08 95 ret - -00001532 <__cmpsf2>: - 1532: d4 d0 rcall .+424 ; 0x16dc <__fp_cmp> - 1534: 08 f4 brcc .+2 ; 0x1538 <__cmpsf2+0x6> - 1536: 81 e0 ldi r24, 0x01 ; 1 - 1538: 08 95 ret - -0000153a <__divsf3>: - 153a: 0c d0 rcall .+24 ; 0x1554 <__divsf3x> - 153c: 0a c1 rjmp .+532 ; 0x1752 <__fp_round> - 153e: 02 d1 rcall .+516 ; 0x1744 <__fp_pscB> - 1540: 40 f0 brcs .+16 ; 0x1552 <__divsf3+0x18> - 1542: f9 d0 rcall .+498 ; 0x1736 <__fp_pscA> - 1544: 30 f0 brcs .+12 ; 0x1552 <__divsf3+0x18> - 1546: 21 f4 brne .+8 ; 0x1550 <__divsf3+0x16> - 1548: 5f 3f cpi r21, 0xFF ; 255 - 154a: 19 f0 breq .+6 ; 0x1552 <__divsf3+0x18> - 154c: eb c0 rjmp .+470 ; 0x1724 <__fp_inf> - 154e: 51 11 cpse r21, r1 - 1550: 34 c1 rjmp .+616 ; 0x17ba <__fp_szero> - 1552: ee c0 rjmp .+476 ; 0x1730 <__fp_nan> - -00001554 <__divsf3x>: - 1554: 0f d1 rcall .+542 ; 0x1774 <__fp_split3> - 1556: 98 f3 brcs .-26 ; 0x153e <__divsf3+0x4> - -00001558 <__divsf3_pse>: - 1558: 99 23 and r25, r25 - 155a: c9 f3 breq .-14 ; 0x154e <__divsf3+0x14> - 155c: 55 23 and r21, r21 - 155e: b1 f3 breq .-20 ; 0x154c <__divsf3+0x12> - 1560: 95 1b sub r25, r21 - 1562: 55 0b sbc r21, r21 - 1564: bb 27 eor r27, r27 - 1566: aa 27 eor r26, r26 - 1568: 62 17 cp r22, r18 - 156a: 73 07 cpc r23, r19 - 156c: 84 07 cpc r24, r20 - 156e: 38 f0 brcs .+14 ; 0x157e <__divsf3_pse+0x26> - 1570: 9f 5f subi r25, 0xFF ; 255 - 1572: 5f 4f sbci r21, 0xFF ; 255 - 1574: 22 0f add r18, r18 - 1576: 33 1f adc r19, r19 - 1578: 44 1f adc r20, r20 - 157a: aa 1f adc r26, r26 - 157c: a9 f3 breq .-22 ; 0x1568 <__divsf3_pse+0x10> - 157e: 33 d0 rcall .+102 ; 0x15e6 <__divsf3_pse+0x8e> - 1580: 0e 2e mov r0, r30 - 1582: 3a f0 brmi .+14 ; 0x1592 <__divsf3_pse+0x3a> - 1584: e0 e8 ldi r30, 0x80 ; 128 - 1586: 30 d0 rcall .+96 ; 0x15e8 <__divsf3_pse+0x90> - 1588: 91 50 subi r25, 0x01 ; 1 - 158a: 50 40 sbci r21, 0x00 ; 0 - 158c: e6 95 lsr r30 - 158e: 00 1c adc r0, r0 - 1590: ca f7 brpl .-14 ; 0x1584 <__divsf3_pse+0x2c> - 1592: 29 d0 rcall .+82 ; 0x15e6 <__divsf3_pse+0x8e> - 1594: fe 2f mov r31, r30 - 1596: 27 d0 rcall .+78 ; 0x15e6 <__divsf3_pse+0x8e> - 1598: 66 0f add r22, r22 - 159a: 77 1f adc r23, r23 - 159c: 88 1f adc r24, r24 - 159e: bb 1f adc r27, r27 - 15a0: 26 17 cp r18, r22 - 15a2: 37 07 cpc r19, r23 - 15a4: 48 07 cpc r20, r24 - 15a6: ab 07 cpc r26, r27 - 15a8: b0 e8 ldi r27, 0x80 ; 128 - 15aa: 09 f0 breq .+2 ; 0x15ae <__divsf3_pse+0x56> - 15ac: bb 0b sbc r27, r27 - 15ae: 80 2d mov r24, r0 - 15b0: bf 01 movw r22, r30 - 15b2: ff 27 eor r31, r31 - 15b4: 93 58 subi r25, 0x83 ; 131 - 15b6: 5f 4f sbci r21, 0xFF ; 255 - 15b8: 2a f0 brmi .+10 ; 0x15c4 <__divsf3_pse+0x6c> - 15ba: 9e 3f cpi r25, 0xFE ; 254 - 15bc: 51 05 cpc r21, r1 - 15be: 68 f0 brcs .+26 ; 0x15da <__divsf3_pse+0x82> - 15c0: b1 c0 rjmp .+354 ; 0x1724 <__fp_inf> - 15c2: fb c0 rjmp .+502 ; 0x17ba <__fp_szero> - 15c4: 5f 3f cpi r21, 0xFF ; 255 - 15c6: ec f3 brlt .-6 ; 0x15c2 <__divsf3_pse+0x6a> - 15c8: 98 3e cpi r25, 0xE8 ; 232 - 15ca: dc f3 brlt .-10 ; 0x15c2 <__divsf3_pse+0x6a> - 15cc: 86 95 lsr r24 - 15ce: 77 95 ror r23 - 15d0: 67 95 ror r22 - 15d2: b7 95 ror r27 - 15d4: f7 95 ror r31 - 15d6: 9f 5f subi r25, 0xFF ; 255 - 15d8: c9 f7 brne .-14 ; 0x15cc <__divsf3_pse+0x74> - 15da: 88 0f add r24, r24 - 15dc: 91 1d adc r25, r1 - 15de: 96 95 lsr r25 - 15e0: 87 95 ror r24 - 15e2: 97 f9 bld r25, 7 - 15e4: 08 95 ret - 15e6: e1 e0 ldi r30, 0x01 ; 1 - 15e8: 66 0f add r22, r22 - 15ea: 77 1f adc r23, r23 - 15ec: 88 1f adc r24, r24 - 15ee: bb 1f adc r27, r27 - 15f0: 62 17 cp r22, r18 - 15f2: 73 07 cpc r23, r19 - 15f4: 84 07 cpc r24, r20 - 15f6: ba 07 cpc r27, r26 - 15f8: 20 f0 brcs .+8 ; 0x1602 <__divsf3_pse+0xaa> - 15fa: 62 1b sub r22, r18 - 15fc: 73 0b sbc r23, r19 - 15fe: 84 0b sbc r24, r20 - 1600: ba 0b sbc r27, r26 - 1602: ee 1f adc r30, r30 - 1604: 88 f7 brcc .-30 ; 0x15e8 <__divsf3_pse+0x90> - 1606: e0 95 com r30 - 1608: 08 95 ret - -0000160a <__fixunssfsi>: - 160a: bc d0 rcall .+376 ; 0x1784 <__fp_splitA> - 160c: 88 f0 brcs .+34 ; 0x1630 <__fixunssfsi+0x26> - 160e: 9f 57 subi r25, 0x7F ; 127 - 1610: 90 f0 brcs .+36 ; 0x1636 <__fixunssfsi+0x2c> - 1612: b9 2f mov r27, r25 - 1614: 99 27 eor r25, r25 - 1616: b7 51 subi r27, 0x17 ; 23 - 1618: a0 f0 brcs .+40 ; 0x1642 <__fixunssfsi+0x38> - 161a: d1 f0 breq .+52 ; 0x1650 <__fixunssfsi+0x46> - 161c: 66 0f add r22, r22 - 161e: 77 1f adc r23, r23 - 1620: 88 1f adc r24, r24 - 1622: 99 1f adc r25, r25 - 1624: 1a f0 brmi .+6 ; 0x162c <__fixunssfsi+0x22> - 1626: ba 95 dec r27 - 1628: c9 f7 brne .-14 ; 0x161c <__fixunssfsi+0x12> - 162a: 12 c0 rjmp .+36 ; 0x1650 <__fixunssfsi+0x46> - 162c: b1 30 cpi r27, 0x01 ; 1 - 162e: 81 f0 breq .+32 ; 0x1650 <__fixunssfsi+0x46> - 1630: c3 d0 rcall .+390 ; 0x17b8 <__fp_zero> - 1632: b1 e0 ldi r27, 0x01 ; 1 - 1634: 08 95 ret - 1636: c0 c0 rjmp .+384 ; 0x17b8 <__fp_zero> - 1638: 67 2f mov r22, r23 - 163a: 78 2f mov r23, r24 - 163c: 88 27 eor r24, r24 - 163e: b8 5f subi r27, 0xF8 ; 248 - 1640: 39 f0 breq .+14 ; 0x1650 <__fixunssfsi+0x46> - 1642: b9 3f cpi r27, 0xF9 ; 249 - 1644: cc f3 brlt .-14 ; 0x1638 <__fixunssfsi+0x2e> - 1646: 86 95 lsr r24 - 1648: 77 95 ror r23 - 164a: 67 95 ror r22 - 164c: b3 95 inc r27 - 164e: d9 f7 brne .-10 ; 0x1646 <__fixunssfsi+0x3c> - 1650: 3e f4 brtc .+14 ; 0x1660 <__fixunssfsi+0x56> - 1652: 90 95 com r25 - 1654: 80 95 com r24 - 1656: 70 95 com r23 - 1658: 61 95 neg r22 - 165a: 7f 4f sbci r23, 0xFF ; 255 - 165c: 8f 4f sbci r24, 0xFF ; 255 - 165e: 9f 4f sbci r25, 0xFF ; 255 - 1660: 08 95 ret - -00001662 <__floatunsisf>: - 1662: e8 94 clt - 1664: 09 c0 rjmp .+18 ; 0x1678 <__floatsisf+0x12> - -00001666 <__floatsisf>: - 1666: 97 fb bst r25, 7 - 1668: 3e f4 brtc .+14 ; 0x1678 <__floatsisf+0x12> - 166a: 90 95 com r25 - 166c: 80 95 com r24 - 166e: 70 95 com r23 - 1670: 61 95 neg r22 - 1672: 7f 4f sbci r23, 0xFF ; 255 - 1674: 8f 4f sbci r24, 0xFF ; 255 - 1676: 9f 4f sbci r25, 0xFF ; 255 - 1678: 99 23 and r25, r25 - 167a: a9 f0 breq .+42 ; 0x16a6 <__floatsisf+0x40> - 167c: f9 2f mov r31, r25 - 167e: 96 e9 ldi r25, 0x96 ; 150 - 1680: bb 27 eor r27, r27 - 1682: 93 95 inc r25 - 1684: f6 95 lsr r31 - 1686: 87 95 ror r24 - 1688: 77 95 ror r23 - 168a: 67 95 ror r22 - 168c: b7 95 ror r27 - 168e: f1 11 cpse r31, r1 - 1690: f8 cf rjmp .-16 ; 0x1682 <__floatsisf+0x1c> - 1692: fa f4 brpl .+62 ; 0x16d2 <__floatsisf+0x6c> - 1694: bb 0f add r27, r27 - 1696: 11 f4 brne .+4 ; 0x169c <__floatsisf+0x36> - 1698: 60 ff sbrs r22, 0 - 169a: 1b c0 rjmp .+54 ; 0x16d2 <__floatsisf+0x6c> - 169c: 6f 5f subi r22, 0xFF ; 255 - 169e: 7f 4f sbci r23, 0xFF ; 255 - 16a0: 8f 4f sbci r24, 0xFF ; 255 - 16a2: 9f 4f sbci r25, 0xFF ; 255 - 16a4: 16 c0 rjmp .+44 ; 0x16d2 <__floatsisf+0x6c> - 16a6: 88 23 and r24, r24 - 16a8: 11 f0 breq .+4 ; 0x16ae <__floatsisf+0x48> - 16aa: 96 e9 ldi r25, 0x96 ; 150 - 16ac: 11 c0 rjmp .+34 ; 0x16d0 <__floatsisf+0x6a> - 16ae: 77 23 and r23, r23 - 16b0: 21 f0 breq .+8 ; 0x16ba <__floatsisf+0x54> - 16b2: 9e e8 ldi r25, 0x8E ; 142 - 16b4: 87 2f mov r24, r23 - 16b6: 76 2f mov r23, r22 - 16b8: 05 c0 rjmp .+10 ; 0x16c4 <__floatsisf+0x5e> - 16ba: 66 23 and r22, r22 - 16bc: 71 f0 breq .+28 ; 0x16da <__floatsisf+0x74> - 16be: 96 e8 ldi r25, 0x86 ; 134 - 16c0: 86 2f mov r24, r22 - 16c2: 70 e0 ldi r23, 0x00 ; 0 - 16c4: 60 e0 ldi r22, 0x00 ; 0 - 16c6: 2a f0 brmi .+10 ; 0x16d2 <__floatsisf+0x6c> - 16c8: 9a 95 dec r25 - 16ca: 66 0f add r22, r22 - 16cc: 77 1f adc r23, r23 - 16ce: 88 1f adc r24, r24 - 16d0: da f7 brpl .-10 ; 0x16c8 <__floatsisf+0x62> - 16d2: 88 0f add r24, r24 - 16d4: 96 95 lsr r25 - 16d6: 87 95 ror r24 - 16d8: 97 f9 bld r25, 7 - 16da: 08 95 ret - -000016dc <__fp_cmp>: - 16dc: 99 0f add r25, r25 - 16de: 00 08 sbc r0, r0 - 16e0: 55 0f add r21, r21 - 16e2: aa 0b sbc r26, r26 - 16e4: e0 e8 ldi r30, 0x80 ; 128 - 16e6: fe ef ldi r31, 0xFE ; 254 - 16e8: 16 16 cp r1, r22 - 16ea: 17 06 cpc r1, r23 - 16ec: e8 07 cpc r30, r24 - 16ee: f9 07 cpc r31, r25 - 16f0: c0 f0 brcs .+48 ; 0x1722 <__fp_cmp+0x46> - 16f2: 12 16 cp r1, r18 - 16f4: 13 06 cpc r1, r19 - 16f6: e4 07 cpc r30, r20 - 16f8: f5 07 cpc r31, r21 - 16fa: 98 f0 brcs .+38 ; 0x1722 <__fp_cmp+0x46> - 16fc: 62 1b sub r22, r18 - 16fe: 73 0b sbc r23, r19 - 1700: 84 0b sbc r24, r20 - 1702: 95 0b sbc r25, r21 - 1704: 39 f4 brne .+14 ; 0x1714 <__fp_cmp+0x38> - 1706: 0a 26 eor r0, r26 - 1708: 61 f0 breq .+24 ; 0x1722 <__fp_cmp+0x46> - 170a: 23 2b or r18, r19 - 170c: 24 2b or r18, r20 - 170e: 25 2b or r18, r21 - 1710: 21 f4 brne .+8 ; 0x171a <__fp_cmp+0x3e> - 1712: 08 95 ret - 1714: 0a 26 eor r0, r26 - 1716: 09 f4 brne .+2 ; 0x171a <__fp_cmp+0x3e> - 1718: a1 40 sbci r26, 0x01 ; 1 - 171a: a6 95 lsr r26 - 171c: 8f ef ldi r24, 0xFF ; 255 - 171e: 81 1d adc r24, r1 - 1720: 81 1d adc r24, r1 - 1722: 08 95 ret - -00001724 <__fp_inf>: - 1724: 97 f9 bld r25, 7 - 1726: 9f 67 ori r25, 0x7F ; 127 - 1728: 80 e8 ldi r24, 0x80 ; 128 - 172a: 70 e0 ldi r23, 0x00 ; 0 - 172c: 60 e0 ldi r22, 0x00 ; 0 - 172e: 08 95 ret - -00001730 <__fp_nan>: - 1730: 9f ef ldi r25, 0xFF ; 255 - 1732: 80 ec ldi r24, 0xC0 ; 192 - 1734: 08 95 ret - -00001736 <__fp_pscA>: - 1736: 00 24 eor r0, r0 - 1738: 0a 94 dec r0 - 173a: 16 16 cp r1, r22 - 173c: 17 06 cpc r1, r23 - 173e: 18 06 cpc r1, r24 - 1740: 09 06 cpc r0, r25 - 1742: 08 95 ret - -00001744 <__fp_pscB>: - 1744: 00 24 eor r0, r0 - 1746: 0a 94 dec r0 - 1748: 12 16 cp r1, r18 - 174a: 13 06 cpc r1, r19 - 174c: 14 06 cpc r1, r20 - 174e: 05 06 cpc r0, r21 - 1750: 08 95 ret - -00001752 <__fp_round>: - 1752: 09 2e mov r0, r25 - 1754: 03 94 inc r0 - 1756: 00 0c add r0, r0 - 1758: 11 f4 brne .+4 ; 0x175e <__fp_round+0xc> - 175a: 88 23 and r24, r24 - 175c: 52 f0 brmi .+20 ; 0x1772 <__fp_round+0x20> - 175e: bb 0f add r27, r27 - 1760: 40 f4 brcc .+16 ; 0x1772 <__fp_round+0x20> - 1762: bf 2b or r27, r31 - 1764: 11 f4 brne .+4 ; 0x176a <__fp_round+0x18> - 1766: 60 ff sbrs r22, 0 - 1768: 04 c0 rjmp .+8 ; 0x1772 <__fp_round+0x20> - 176a: 6f 5f subi r22, 0xFF ; 255 - 176c: 7f 4f sbci r23, 0xFF ; 255 - 176e: 8f 4f sbci r24, 0xFF ; 255 - 1770: 9f 4f sbci r25, 0xFF ; 255 - 1772: 08 95 ret - -00001774 <__fp_split3>: - 1774: 57 fd sbrc r21, 7 - 1776: 90 58 subi r25, 0x80 ; 128 - 1778: 44 0f add r20, r20 - 177a: 55 1f adc r21, r21 - 177c: 59 f0 breq .+22 ; 0x1794 <__fp_splitA+0x10> - 177e: 5f 3f cpi r21, 0xFF ; 255 - 1780: 71 f0 breq .+28 ; 0x179e <__fp_splitA+0x1a> - 1782: 47 95 ror r20 - -00001784 <__fp_splitA>: - 1784: 88 0f add r24, r24 - 1786: 97 fb bst r25, 7 - 1788: 99 1f adc r25, r25 - 178a: 61 f0 breq .+24 ; 0x17a4 <__fp_splitA+0x20> - 178c: 9f 3f cpi r25, 0xFF ; 255 - 178e: 79 f0 breq .+30 ; 0x17ae <__fp_splitA+0x2a> - 1790: 87 95 ror r24 - 1792: 08 95 ret - 1794: 12 16 cp r1, r18 - 1796: 13 06 cpc r1, r19 - 1798: 14 06 cpc r1, r20 - 179a: 55 1f adc r21, r21 - 179c: f2 cf rjmp .-28 ; 0x1782 <__fp_split3+0xe> - 179e: 46 95 lsr r20 - 17a0: f1 df rcall .-30 ; 0x1784 <__fp_splitA> - 17a2: 08 c0 rjmp .+16 ; 0x17b4 <__fp_splitA+0x30> - 17a4: 16 16 cp r1, r22 - 17a6: 17 06 cpc r1, r23 - 17a8: 18 06 cpc r1, r24 - 17aa: 99 1f adc r25, r25 - 17ac: f1 cf rjmp .-30 ; 0x1790 <__fp_splitA+0xc> - 17ae: 86 95 lsr r24 - 17b0: 71 05 cpc r23, r1 - 17b2: 61 05 cpc r22, r1 - 17b4: 08 94 sec - 17b6: 08 95 ret - -000017b8 <__fp_zero>: - 17b8: e8 94 clt - -000017ba <__fp_szero>: - 17ba: bb 27 eor r27, r27 - 17bc: 66 27 eor r22, r22 - 17be: 77 27 eor r23, r23 - 17c0: cb 01 movw r24, r22 - 17c2: 97 f9 bld r25, 7 - 17c4: 08 95 ret - -000017c6 <__gesf2>: - 17c6: 8a df rcall .-236 ; 0x16dc <__fp_cmp> - 17c8: 08 f4 brcc .+2 ; 0x17cc <__gesf2+0x6> - 17ca: 8f ef ldi r24, 0xFF ; 255 - 17cc: 08 95 ret - -000017ce <__udivmodsi4>: - 17ce: a1 e2 ldi r26, 0x21 ; 33 - 17d0: 1a 2e mov r1, r26 - 17d2: aa 1b sub r26, r26 - 17d4: bb 1b sub r27, r27 - 17d6: fd 01 movw r30, r26 - 17d8: 0d c0 rjmp .+26 ; 0x17f4 <__udivmodsi4_ep> - -000017da <__udivmodsi4_loop>: - 17da: aa 1f adc r26, r26 - 17dc: bb 1f adc r27, r27 - 17de: ee 1f adc r30, r30 - 17e0: ff 1f adc r31, r31 - 17e2: a2 17 cp r26, r18 - 17e4: b3 07 cpc r27, r19 - 17e6: e4 07 cpc r30, r20 - 17e8: f5 07 cpc r31, r21 - 17ea: 20 f0 brcs .+8 ; 0x17f4 <__udivmodsi4_ep> - 17ec: a2 1b sub r26, r18 - 17ee: b3 0b sbc r27, r19 - 17f0: e4 0b sbc r30, r20 - 17f2: f5 0b sbc r31, r21 - -000017f4 <__udivmodsi4_ep>: - 17f4: 66 1f adc r22, r22 - 17f6: 77 1f adc r23, r23 - 17f8: 88 1f adc r24, r24 - 17fa: 99 1f adc r25, r25 - 17fc: 1a 94 dec r1 - 17fe: 69 f7 brne .-38 ; 0x17da <__udivmodsi4_loop> - 1800: 60 95 com r22 - 1802: 70 95 com r23 - 1804: 80 95 com r24 - 1806: 90 95 com r25 - 1808: 9b 01 movw r18, r22 - 180a: ac 01 movw r20, r24 - 180c: bd 01 movw r22, r26 - 180e: cf 01 movw r24, r30 - 1810: 08 95 ret - -00001812 <_exit>: - 1812: f8 94 cli - -00001814 <__stop_program>: - 1814: ff cf rjmp .-2 ; 0x1814 <__stop_program> + 1440: 08 95 ret + +00001442 <__subsf3>: + 1442: 50 58 subi r21, 0x80 ; 128 + +00001444 <__addsf3>: + 1444: bb 27 eor r27, r27 + 1446: aa 27 eor r26, r26 + 1448: 0e d0 rcall .+28 ; 0x1466 <__addsf3x> + 144a: 70 c1 rjmp .+736 ; 0x172c <__fp_round> + 144c: 61 d1 rcall .+706 ; 0x1710 <__fp_pscA> + 144e: 30 f0 brcs .+12 ; 0x145c <__addsf3+0x18> + 1450: 66 d1 rcall .+716 ; 0x171e <__fp_pscB> + 1452: 20 f0 brcs .+8 ; 0x145c <__addsf3+0x18> + 1454: 31 f4 brne .+12 ; 0x1462 <__addsf3+0x1e> + 1456: 9f 3f cpi r25, 0xFF ; 255 + 1458: 11 f4 brne .+4 ; 0x145e <__addsf3+0x1a> + 145a: 1e f4 brtc .+6 ; 0x1462 <__addsf3+0x1e> + 145c: 56 c1 rjmp .+684 ; 0x170a <__fp_nan> + 145e: 0e f4 brtc .+2 ; 0x1462 <__addsf3+0x1e> + 1460: e0 95 com r30 + 1462: e7 fb bst r30, 7 + 1464: 4c c1 rjmp .+664 ; 0x16fe <__fp_inf> + +00001466 <__addsf3x>: + 1466: e9 2f mov r30, r25 + 1468: 72 d1 rcall .+740 ; 0x174e <__fp_split3> + 146a: 80 f3 brcs .-32 ; 0x144c <__addsf3+0x8> + 146c: ba 17 cp r27, r26 + 146e: 62 07 cpc r22, r18 + 1470: 73 07 cpc r23, r19 + 1472: 84 07 cpc r24, r20 + 1474: 95 07 cpc r25, r21 + 1476: 18 f0 brcs .+6 ; 0x147e <__addsf3x+0x18> + 1478: 71 f4 brne .+28 ; 0x1496 <__addsf3x+0x30> + 147a: 9e f5 brtc .+102 ; 0x14e2 <__addsf3x+0x7c> + 147c: 8a c1 rjmp .+788 ; 0x1792 <__fp_zero> + 147e: 0e f4 brtc .+2 ; 0x1482 <__addsf3x+0x1c> + 1480: e0 95 com r30 + 1482: 0b 2e mov r0, r27 + 1484: ba 2f mov r27, r26 + 1486: a0 2d mov r26, r0 + 1488: 0b 01 movw r0, r22 + 148a: b9 01 movw r22, r18 + 148c: 90 01 movw r18, r0 + 148e: 0c 01 movw r0, r24 + 1490: ca 01 movw r24, r20 + 1492: a0 01 movw r20, r0 + 1494: 11 24 eor r1, r1 + 1496: ff 27 eor r31, r31 + 1498: 59 1b sub r21, r25 + 149a: 99 f0 breq .+38 ; 0x14c2 <__addsf3x+0x5c> + 149c: 59 3f cpi r21, 0xF9 ; 249 + 149e: 50 f4 brcc .+20 ; 0x14b4 <__addsf3x+0x4e> + 14a0: 50 3e cpi r21, 0xE0 ; 224 + 14a2: 68 f1 brcs .+90 ; 0x14fe <__addsf3x+0x98> + 14a4: 1a 16 cp r1, r26 + 14a6: f0 40 sbci r31, 0x00 ; 0 + 14a8: a2 2f mov r26, r18 + 14aa: 23 2f mov r18, r19 + 14ac: 34 2f mov r19, r20 + 14ae: 44 27 eor r20, r20 + 14b0: 58 5f subi r21, 0xF8 ; 248 + 14b2: f3 cf rjmp .-26 ; 0x149a <__addsf3x+0x34> + 14b4: 46 95 lsr r20 + 14b6: 37 95 ror r19 + 14b8: 27 95 ror r18 + 14ba: a7 95 ror r26 + 14bc: f0 40 sbci r31, 0x00 ; 0 + 14be: 53 95 inc r21 + 14c0: c9 f7 brne .-14 ; 0x14b4 <__addsf3x+0x4e> + 14c2: 7e f4 brtc .+30 ; 0x14e2 <__addsf3x+0x7c> + 14c4: 1f 16 cp r1, r31 + 14c6: ba 0b sbc r27, r26 + 14c8: 62 0b sbc r22, r18 + 14ca: 73 0b sbc r23, r19 + 14cc: 84 0b sbc r24, r20 + 14ce: ba f0 brmi .+46 ; 0x14fe <__addsf3x+0x98> + 14d0: 91 50 subi r25, 0x01 ; 1 + 14d2: a1 f0 breq .+40 ; 0x14fc <__addsf3x+0x96> + 14d4: ff 0f add r31, r31 + 14d6: bb 1f adc r27, r27 + 14d8: 66 1f adc r22, r22 + 14da: 77 1f adc r23, r23 + 14dc: 88 1f adc r24, r24 + 14de: c2 f7 brpl .-16 ; 0x14d0 <__addsf3x+0x6a> + 14e0: 0e c0 rjmp .+28 ; 0x14fe <__addsf3x+0x98> + 14e2: ba 0f add r27, r26 + 14e4: 62 1f adc r22, r18 + 14e6: 73 1f adc r23, r19 + 14e8: 84 1f adc r24, r20 + 14ea: 48 f4 brcc .+18 ; 0x14fe <__addsf3x+0x98> + 14ec: 87 95 ror r24 + 14ee: 77 95 ror r23 + 14f0: 67 95 ror r22 + 14f2: b7 95 ror r27 + 14f4: f7 95 ror r31 + 14f6: 9e 3f cpi r25, 0xFE ; 254 + 14f8: 08 f0 brcs .+2 ; 0x14fc <__addsf3x+0x96> + 14fa: b3 cf rjmp .-154 ; 0x1462 <__addsf3+0x1e> + 14fc: 93 95 inc r25 + 14fe: 88 0f add r24, r24 + 1500: 08 f0 brcs .+2 ; 0x1504 <__addsf3x+0x9e> + 1502: 99 27 eor r25, r25 + 1504: ee 0f add r30, r30 + 1506: 97 95 ror r25 + 1508: 87 95 ror r24 + 150a: 08 95 ret + +0000150c <__cmpsf2>: + 150c: d4 d0 rcall .+424 ; 0x16b6 <__fp_cmp> + 150e: 08 f4 brcc .+2 ; 0x1512 <__cmpsf2+0x6> + 1510: 81 e0 ldi r24, 0x01 ; 1 + 1512: 08 95 ret + +00001514 <__divsf3>: + 1514: 0c d0 rcall .+24 ; 0x152e <__divsf3x> + 1516: 0a c1 rjmp .+532 ; 0x172c <__fp_round> + 1518: 02 d1 rcall .+516 ; 0x171e <__fp_pscB> + 151a: 40 f0 brcs .+16 ; 0x152c <__divsf3+0x18> + 151c: f9 d0 rcall .+498 ; 0x1710 <__fp_pscA> + 151e: 30 f0 brcs .+12 ; 0x152c <__divsf3+0x18> + 1520: 21 f4 brne .+8 ; 0x152a <__divsf3+0x16> + 1522: 5f 3f cpi r21, 0xFF ; 255 + 1524: 19 f0 breq .+6 ; 0x152c <__divsf3+0x18> + 1526: eb c0 rjmp .+470 ; 0x16fe <__fp_inf> + 1528: 51 11 cpse r21, r1 + 152a: 34 c1 rjmp .+616 ; 0x1794 <__fp_szero> + 152c: ee c0 rjmp .+476 ; 0x170a <__fp_nan> + +0000152e <__divsf3x>: + 152e: 0f d1 rcall .+542 ; 0x174e <__fp_split3> + 1530: 98 f3 brcs .-26 ; 0x1518 <__divsf3+0x4> + +00001532 <__divsf3_pse>: + 1532: 99 23 and r25, r25 + 1534: c9 f3 breq .-14 ; 0x1528 <__divsf3+0x14> + 1536: 55 23 and r21, r21 + 1538: b1 f3 breq .-20 ; 0x1526 <__divsf3+0x12> + 153a: 95 1b sub r25, r21 + 153c: 55 0b sbc r21, r21 + 153e: bb 27 eor r27, r27 + 1540: aa 27 eor r26, r26 + 1542: 62 17 cp r22, r18 + 1544: 73 07 cpc r23, r19 + 1546: 84 07 cpc r24, r20 + 1548: 38 f0 brcs .+14 ; 0x1558 <__divsf3_pse+0x26> + 154a: 9f 5f subi r25, 0xFF ; 255 + 154c: 5f 4f sbci r21, 0xFF ; 255 + 154e: 22 0f add r18, r18 + 1550: 33 1f adc r19, r19 + 1552: 44 1f adc r20, r20 + 1554: aa 1f adc r26, r26 + 1556: a9 f3 breq .-22 ; 0x1542 <__divsf3_pse+0x10> + 1558: 33 d0 rcall .+102 ; 0x15c0 <__divsf3_pse+0x8e> + 155a: 0e 2e mov r0, r30 + 155c: 3a f0 brmi .+14 ; 0x156c <__divsf3_pse+0x3a> + 155e: e0 e8 ldi r30, 0x80 ; 128 + 1560: 30 d0 rcall .+96 ; 0x15c2 <__divsf3_pse+0x90> + 1562: 91 50 subi r25, 0x01 ; 1 + 1564: 50 40 sbci r21, 0x00 ; 0 + 1566: e6 95 lsr r30 + 1568: 00 1c adc r0, r0 + 156a: ca f7 brpl .-14 ; 0x155e <__divsf3_pse+0x2c> + 156c: 29 d0 rcall .+82 ; 0x15c0 <__divsf3_pse+0x8e> + 156e: fe 2f mov r31, r30 + 1570: 27 d0 rcall .+78 ; 0x15c0 <__divsf3_pse+0x8e> + 1572: 66 0f add r22, r22 + 1574: 77 1f adc r23, r23 + 1576: 88 1f adc r24, r24 + 1578: bb 1f adc r27, r27 + 157a: 26 17 cp r18, r22 + 157c: 37 07 cpc r19, r23 + 157e: 48 07 cpc r20, r24 + 1580: ab 07 cpc r26, r27 + 1582: b0 e8 ldi r27, 0x80 ; 128 + 1584: 09 f0 breq .+2 ; 0x1588 <__divsf3_pse+0x56> + 1586: bb 0b sbc r27, r27 + 1588: 80 2d mov r24, r0 + 158a: bf 01 movw r22, r30 + 158c: ff 27 eor r31, r31 + 158e: 93 58 subi r25, 0x83 ; 131 + 1590: 5f 4f sbci r21, 0xFF ; 255 + 1592: 2a f0 brmi .+10 ; 0x159e <__divsf3_pse+0x6c> + 1594: 9e 3f cpi r25, 0xFE ; 254 + 1596: 51 05 cpc r21, r1 + 1598: 68 f0 brcs .+26 ; 0x15b4 <__divsf3_pse+0x82> + 159a: b1 c0 rjmp .+354 ; 0x16fe <__fp_inf> + 159c: fb c0 rjmp .+502 ; 0x1794 <__fp_szero> + 159e: 5f 3f cpi r21, 0xFF ; 255 + 15a0: ec f3 brlt .-6 ; 0x159c <__divsf3_pse+0x6a> + 15a2: 98 3e cpi r25, 0xE8 ; 232 + 15a4: dc f3 brlt .-10 ; 0x159c <__divsf3_pse+0x6a> + 15a6: 86 95 lsr r24 + 15a8: 77 95 ror r23 + 15aa: 67 95 ror r22 + 15ac: b7 95 ror r27 + 15ae: f7 95 ror r31 + 15b0: 9f 5f subi r25, 0xFF ; 255 + 15b2: c9 f7 brne .-14 ; 0x15a6 <__divsf3_pse+0x74> + 15b4: 88 0f add r24, r24 + 15b6: 91 1d adc r25, r1 + 15b8: 96 95 lsr r25 + 15ba: 87 95 ror r24 + 15bc: 97 f9 bld r25, 7 + 15be: 08 95 ret + 15c0: e1 e0 ldi r30, 0x01 ; 1 + 15c2: 66 0f add r22, r22 + 15c4: 77 1f adc r23, r23 + 15c6: 88 1f adc r24, r24 + 15c8: bb 1f adc r27, r27 + 15ca: 62 17 cp r22, r18 + 15cc: 73 07 cpc r23, r19 + 15ce: 84 07 cpc r24, r20 + 15d0: ba 07 cpc r27, r26 + 15d2: 20 f0 brcs .+8 ; 0x15dc <__divsf3_pse+0xaa> + 15d4: 62 1b sub r22, r18 + 15d6: 73 0b sbc r23, r19 + 15d8: 84 0b sbc r24, r20 + 15da: ba 0b sbc r27, r26 + 15dc: ee 1f adc r30, r30 + 15de: 88 f7 brcc .-30 ; 0x15c2 <__divsf3_pse+0x90> + 15e0: e0 95 com r30 + 15e2: 08 95 ret + +000015e4 <__fixunssfsi>: + 15e4: bc d0 rcall .+376 ; 0x175e <__fp_splitA> + 15e6: 88 f0 brcs .+34 ; 0x160a <__fixunssfsi+0x26> + 15e8: 9f 57 subi r25, 0x7F ; 127 + 15ea: 90 f0 brcs .+36 ; 0x1610 <__fixunssfsi+0x2c> + 15ec: b9 2f mov r27, r25 + 15ee: 99 27 eor r25, r25 + 15f0: b7 51 subi r27, 0x17 ; 23 + 15f2: a0 f0 brcs .+40 ; 0x161c <__fixunssfsi+0x38> + 15f4: d1 f0 breq .+52 ; 0x162a <__fixunssfsi+0x46> + 15f6: 66 0f add r22, r22 + 15f8: 77 1f adc r23, r23 + 15fa: 88 1f adc r24, r24 + 15fc: 99 1f adc r25, r25 + 15fe: 1a f0 brmi .+6 ; 0x1606 <__fixunssfsi+0x22> + 1600: ba 95 dec r27 + 1602: c9 f7 brne .-14 ; 0x15f6 <__fixunssfsi+0x12> + 1604: 12 c0 rjmp .+36 ; 0x162a <__fixunssfsi+0x46> + 1606: b1 30 cpi r27, 0x01 ; 1 + 1608: 81 f0 breq .+32 ; 0x162a <__fixunssfsi+0x46> + 160a: c3 d0 rcall .+390 ; 0x1792 <__fp_zero> + 160c: b1 e0 ldi r27, 0x01 ; 1 + 160e: 08 95 ret + 1610: c0 c0 rjmp .+384 ; 0x1792 <__fp_zero> + 1612: 67 2f mov r22, r23 + 1614: 78 2f mov r23, r24 + 1616: 88 27 eor r24, r24 + 1618: b8 5f subi r27, 0xF8 ; 248 + 161a: 39 f0 breq .+14 ; 0x162a <__fixunssfsi+0x46> + 161c: b9 3f cpi r27, 0xF9 ; 249 + 161e: cc f3 brlt .-14 ; 0x1612 <__fixunssfsi+0x2e> + 1620: 86 95 lsr r24 + 1622: 77 95 ror r23 + 1624: 67 95 ror r22 + 1626: b3 95 inc r27 + 1628: d9 f7 brne .-10 ; 0x1620 <__fixunssfsi+0x3c> + 162a: 3e f4 brtc .+14 ; 0x163a <__fixunssfsi+0x56> + 162c: 90 95 com r25 + 162e: 80 95 com r24 + 1630: 70 95 com r23 + 1632: 61 95 neg r22 + 1634: 7f 4f sbci r23, 0xFF ; 255 + 1636: 8f 4f sbci r24, 0xFF ; 255 + 1638: 9f 4f sbci r25, 0xFF ; 255 + 163a: 08 95 ret + +0000163c <__floatunsisf>: + 163c: e8 94 clt + 163e: 09 c0 rjmp .+18 ; 0x1652 <__floatsisf+0x12> + +00001640 <__floatsisf>: + 1640: 97 fb bst r25, 7 + 1642: 3e f4 brtc .+14 ; 0x1652 <__floatsisf+0x12> + 1644: 90 95 com r25 + 1646: 80 95 com r24 + 1648: 70 95 com r23 + 164a: 61 95 neg r22 + 164c: 7f 4f sbci r23, 0xFF ; 255 + 164e: 8f 4f sbci r24, 0xFF ; 255 + 1650: 9f 4f sbci r25, 0xFF ; 255 + 1652: 99 23 and r25, r25 + 1654: a9 f0 breq .+42 ; 0x1680 <__floatsisf+0x40> + 1656: f9 2f mov r31, r25 + 1658: 96 e9 ldi r25, 0x96 ; 150 + 165a: bb 27 eor r27, r27 + 165c: 93 95 inc r25 + 165e: f6 95 lsr r31 + 1660: 87 95 ror r24 + 1662: 77 95 ror r23 + 1664: 67 95 ror r22 + 1666: b7 95 ror r27 + 1668: f1 11 cpse r31, r1 + 166a: f8 cf rjmp .-16 ; 0x165c <__floatsisf+0x1c> + 166c: fa f4 brpl .+62 ; 0x16ac <__floatsisf+0x6c> + 166e: bb 0f add r27, r27 + 1670: 11 f4 brne .+4 ; 0x1676 <__floatsisf+0x36> + 1672: 60 ff sbrs r22, 0 + 1674: 1b c0 rjmp .+54 ; 0x16ac <__floatsisf+0x6c> + 1676: 6f 5f subi r22, 0xFF ; 255 + 1678: 7f 4f sbci r23, 0xFF ; 255 + 167a: 8f 4f sbci r24, 0xFF ; 255 + 167c: 9f 4f sbci r25, 0xFF ; 255 + 167e: 16 c0 rjmp .+44 ; 0x16ac <__floatsisf+0x6c> + 1680: 88 23 and r24, r24 + 1682: 11 f0 breq .+4 ; 0x1688 <__floatsisf+0x48> + 1684: 96 e9 ldi r25, 0x96 ; 150 + 1686: 11 c0 rjmp .+34 ; 0x16aa <__floatsisf+0x6a> + 1688: 77 23 and r23, r23 + 168a: 21 f0 breq .+8 ; 0x1694 <__floatsisf+0x54> + 168c: 9e e8 ldi r25, 0x8E ; 142 + 168e: 87 2f mov r24, r23 + 1690: 76 2f mov r23, r22 + 1692: 05 c0 rjmp .+10 ; 0x169e <__floatsisf+0x5e> + 1694: 66 23 and r22, r22 + 1696: 71 f0 breq .+28 ; 0x16b4 <__floatsisf+0x74> + 1698: 96 e8 ldi r25, 0x86 ; 134 + 169a: 86 2f mov r24, r22 + 169c: 70 e0 ldi r23, 0x00 ; 0 + 169e: 60 e0 ldi r22, 0x00 ; 0 + 16a0: 2a f0 brmi .+10 ; 0x16ac <__floatsisf+0x6c> + 16a2: 9a 95 dec r25 + 16a4: 66 0f add r22, r22 + 16a6: 77 1f adc r23, r23 + 16a8: 88 1f adc r24, r24 + 16aa: da f7 brpl .-10 ; 0x16a2 <__floatsisf+0x62> + 16ac: 88 0f add r24, r24 + 16ae: 96 95 lsr r25 + 16b0: 87 95 ror r24 + 16b2: 97 f9 bld r25, 7 + 16b4: 08 95 ret + +000016b6 <__fp_cmp>: + 16b6: 99 0f add r25, r25 + 16b8: 00 08 sbc r0, r0 + 16ba: 55 0f add r21, r21 + 16bc: aa 0b sbc r26, r26 + 16be: e0 e8 ldi r30, 0x80 ; 128 + 16c0: fe ef ldi r31, 0xFE ; 254 + 16c2: 16 16 cp r1, r22 + 16c4: 17 06 cpc r1, r23 + 16c6: e8 07 cpc r30, r24 + 16c8: f9 07 cpc r31, r25 + 16ca: c0 f0 brcs .+48 ; 0x16fc <__fp_cmp+0x46> + 16cc: 12 16 cp r1, r18 + 16ce: 13 06 cpc r1, r19 + 16d0: e4 07 cpc r30, r20 + 16d2: f5 07 cpc r31, r21 + 16d4: 98 f0 brcs .+38 ; 0x16fc <__fp_cmp+0x46> + 16d6: 62 1b sub r22, r18 + 16d8: 73 0b sbc r23, r19 + 16da: 84 0b sbc r24, r20 + 16dc: 95 0b sbc r25, r21 + 16de: 39 f4 brne .+14 ; 0x16ee <__fp_cmp+0x38> + 16e0: 0a 26 eor r0, r26 + 16e2: 61 f0 breq .+24 ; 0x16fc <__fp_cmp+0x46> + 16e4: 23 2b or r18, r19 + 16e6: 24 2b or r18, r20 + 16e8: 25 2b or r18, r21 + 16ea: 21 f4 brne .+8 ; 0x16f4 <__fp_cmp+0x3e> + 16ec: 08 95 ret + 16ee: 0a 26 eor r0, r26 + 16f0: 09 f4 brne .+2 ; 0x16f4 <__fp_cmp+0x3e> + 16f2: a1 40 sbci r26, 0x01 ; 1 + 16f4: a6 95 lsr r26 + 16f6: 8f ef ldi r24, 0xFF ; 255 + 16f8: 81 1d adc r24, r1 + 16fa: 81 1d adc r24, r1 + 16fc: 08 95 ret + +000016fe <__fp_inf>: + 16fe: 97 f9 bld r25, 7 + 1700: 9f 67 ori r25, 0x7F ; 127 + 1702: 80 e8 ldi r24, 0x80 ; 128 + 1704: 70 e0 ldi r23, 0x00 ; 0 + 1706: 60 e0 ldi r22, 0x00 ; 0 + 1708: 08 95 ret + +0000170a <__fp_nan>: + 170a: 9f ef ldi r25, 0xFF ; 255 + 170c: 80 ec ldi r24, 0xC0 ; 192 + 170e: 08 95 ret + +00001710 <__fp_pscA>: + 1710: 00 24 eor r0, r0 + 1712: 0a 94 dec r0 + 1714: 16 16 cp r1, r22 + 1716: 17 06 cpc r1, r23 + 1718: 18 06 cpc r1, r24 + 171a: 09 06 cpc r0, r25 + 171c: 08 95 ret + +0000171e <__fp_pscB>: + 171e: 00 24 eor r0, r0 + 1720: 0a 94 dec r0 + 1722: 12 16 cp r1, r18 + 1724: 13 06 cpc r1, r19 + 1726: 14 06 cpc r1, r20 + 1728: 05 06 cpc r0, r21 + 172a: 08 95 ret + +0000172c <__fp_round>: + 172c: 09 2e mov r0, r25 + 172e: 03 94 inc r0 + 1730: 00 0c add r0, r0 + 1732: 11 f4 brne .+4 ; 0x1738 <__fp_round+0xc> + 1734: 88 23 and r24, r24 + 1736: 52 f0 brmi .+20 ; 0x174c <__fp_round+0x20> + 1738: bb 0f add r27, r27 + 173a: 40 f4 brcc .+16 ; 0x174c <__fp_round+0x20> + 173c: bf 2b or r27, r31 + 173e: 11 f4 brne .+4 ; 0x1744 <__fp_round+0x18> + 1740: 60 ff sbrs r22, 0 + 1742: 04 c0 rjmp .+8 ; 0x174c <__fp_round+0x20> + 1744: 6f 5f subi r22, 0xFF ; 255 + 1746: 7f 4f sbci r23, 0xFF ; 255 + 1748: 8f 4f sbci r24, 0xFF ; 255 + 174a: 9f 4f sbci r25, 0xFF ; 255 + 174c: 08 95 ret + +0000174e <__fp_split3>: + 174e: 57 fd sbrc r21, 7 + 1750: 90 58 subi r25, 0x80 ; 128 + 1752: 44 0f add r20, r20 + 1754: 55 1f adc r21, r21 + 1756: 59 f0 breq .+22 ; 0x176e <__fp_splitA+0x10> + 1758: 5f 3f cpi r21, 0xFF ; 255 + 175a: 71 f0 breq .+28 ; 0x1778 <__fp_splitA+0x1a> + 175c: 47 95 ror r20 + +0000175e <__fp_splitA>: + 175e: 88 0f add r24, r24 + 1760: 97 fb bst r25, 7 + 1762: 99 1f adc r25, r25 + 1764: 61 f0 breq .+24 ; 0x177e <__fp_splitA+0x20> + 1766: 9f 3f cpi r25, 0xFF ; 255 + 1768: 79 f0 breq .+30 ; 0x1788 <__fp_splitA+0x2a> + 176a: 87 95 ror r24 + 176c: 08 95 ret + 176e: 12 16 cp r1, r18 + 1770: 13 06 cpc r1, r19 + 1772: 14 06 cpc r1, r20 + 1774: 55 1f adc r21, r21 + 1776: f2 cf rjmp .-28 ; 0x175c <__fp_split3+0xe> + 1778: 46 95 lsr r20 + 177a: f1 df rcall .-30 ; 0x175e <__fp_splitA> + 177c: 08 c0 rjmp .+16 ; 0x178e <__fp_splitA+0x30> + 177e: 16 16 cp r1, r22 + 1780: 17 06 cpc r1, r23 + 1782: 18 06 cpc r1, r24 + 1784: 99 1f adc r25, r25 + 1786: f1 cf rjmp .-30 ; 0x176a <__fp_splitA+0xc> + 1788: 86 95 lsr r24 + 178a: 71 05 cpc r23, r1 + 178c: 61 05 cpc r22, r1 + 178e: 08 94 sec + 1790: 08 95 ret + +00001792 <__fp_zero>: + 1792: e8 94 clt + +00001794 <__fp_szero>: + 1794: bb 27 eor r27, r27 + 1796: 66 27 eor r22, r22 + 1798: 77 27 eor r23, r23 + 179a: cb 01 movw r24, r22 + 179c: 97 f9 bld r25, 7 + 179e: 08 95 ret + +000017a0 <__gesf2>: + 17a0: 8a df rcall .-236 ; 0x16b6 <__fp_cmp> + 17a2: 08 f4 brcc .+2 ; 0x17a6 <__gesf2+0x6> + 17a4: 8f ef ldi r24, 0xFF ; 255 + 17a6: 08 95 ret + +000017a8 <__udivmodsi4>: + 17a8: a1 e2 ldi r26, 0x21 ; 33 + 17aa: 1a 2e mov r1, r26 + 17ac: aa 1b sub r26, r26 + 17ae: bb 1b sub r27, r27 + 17b0: fd 01 movw r30, r26 + 17b2: 0d c0 rjmp .+26 ; 0x17ce <__udivmodsi4_ep> + +000017b4 <__udivmodsi4_loop>: + 17b4: aa 1f adc r26, r26 + 17b6: bb 1f adc r27, r27 + 17b8: ee 1f adc r30, r30 + 17ba: ff 1f adc r31, r31 + 17bc: a2 17 cp r26, r18 + 17be: b3 07 cpc r27, r19 + 17c0: e4 07 cpc r30, r20 + 17c2: f5 07 cpc r31, r21 + 17c4: 20 f0 brcs .+8 ; 0x17ce <__udivmodsi4_ep> + 17c6: a2 1b sub r26, r18 + 17c8: b3 0b sbc r27, r19 + 17ca: e4 0b sbc r30, r20 + 17cc: f5 0b sbc r31, r21 + +000017ce <__udivmodsi4_ep>: + 17ce: 66 1f adc r22, r22 + 17d0: 77 1f adc r23, r23 + 17d2: 88 1f adc r24, r24 + 17d4: 99 1f adc r25, r25 + 17d6: 1a 94 dec r1 + 17d8: 69 f7 brne .-38 ; 0x17b4 <__udivmodsi4_loop> + 17da: 60 95 com r22 + 17dc: 70 95 com r23 + 17de: 80 95 com r24 + 17e0: 90 95 com r25 + 17e2: 9b 01 movw r18, r22 + 17e4: ac 01 movw r20, r24 + 17e6: bd 01 movw r22, r26 + 17e8: cf 01 movw r24, r30 + 17ea: 08 95 ret + +000017ec <_exit>: + 17ec: f8 94 cli + +000017ee <__stop_program>: + 17ee: ff cf rjmp .-2 ; 0x17ee <__stop_program> diff --git a/firmware/USBtoSerial.map b/firmware/USBtoSerial.map index 81032a2..c72e03d 100644 --- a/firmware/USBtoSerial.map +++ b/firmware/USBtoSerial.map @@ -81,8 +81,6 @@ Discarded input sections 0x0000000000000000 0x30 USBtoSerial.o .text.touchpad_set_rel_mode_100dpi 0x0000000000000000 0x18 USBtoSerial.o - .text.touchpad_set_rel_mode_200dpi - 0x0000000000000000 0x18 USBtoSerial.o .text.z_pressure 0x0000000000000000 0x16 USBtoSerial.o .text.x_abs 0x0000000000000000 0x3c USBtoSerial.o @@ -543,7 +541,7 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a .rela.plt *(.rela.plt) -.text 0x0000000000000000 0x1816 +.text 0x0000000000000000 0x17f0 *(.vectors) .vectors 0x0000000000000000 0x98 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o 0x0000000000000000 __vectors @@ -662,185 +660,188 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a .text.touchpad_read 0x000000000000046c 0x12 USBtoSerial.o 0x000000000000046c touchpad_read - .text.delta_y 0x000000000000047e 0x20 USBtoSerial.o - 0x000000000000047e delta_y - .text.delta_x 0x000000000000049e 0x20 USBtoSerial.o - 0x000000000000049e delta_x + .text.touchpad_set_rel_mode_200dpi + 0x000000000000047e 0x14 USBtoSerial.o + 0x000000000000047e touchpad_set_rel_mode_200dpi + .text.delta_y 0x0000000000000492 0x20 USBtoSerial.o + 0x0000000000000492 delta_y + .text.delta_x 0x00000000000004b2 0x20 USBtoSerial.o + 0x00000000000004b2 delta_x .text.Usb2SerialTask - 0x00000000000004be 0xb2 USBtoSerial.o - 0x00000000000004be Usb2SerialTask + 0x00000000000004d2 0xb2 USBtoSerial.o + 0x00000000000004d2 Usb2SerialTask .text.SetupHardware - 0x0000000000000570 0x2a USBtoSerial.o - 0x0000000000000570 SetupHardware + 0x0000000000000584 0x2a USBtoSerial.o + 0x0000000000000584 SetupHardware .text.EVENT_USB_Device_Connect - 0x000000000000059a 0x2 USBtoSerial.o - 0x000000000000059a EVENT_USB_Device_Connect + 0x00000000000005ae 0x2 USBtoSerial.o + 0x00000000000005ae EVENT_USB_Device_Connect .text.EVENT_USB_Device_Disconnect - 0x000000000000059c 0x2 USBtoSerial.o - 0x000000000000059c EVENT_USB_Device_Disconnect + 0x00000000000005b0 0x2 USBtoSerial.o + 0x00000000000005b0 EVENT_USB_Device_Disconnect .text.EVENT_USB_Device_ConfigurationChanged - 0x000000000000059e 0x6 USBtoSerial.o - 0x000000000000059e EVENT_USB_Device_ConfigurationChanged + 0x00000000000005b2 0x6 USBtoSerial.o + 0x00000000000005b2 EVENT_USB_Device_ConfigurationChanged .text.EVENT_USB_Device_ControlRequest - 0x00000000000005a4 0x6 USBtoSerial.o - 0x00000000000005a4 EVENT_USB_Device_ControlRequest + 0x00000000000005b8 0x6 USBtoSerial.o + 0x00000000000005b8 EVENT_USB_Device_ControlRequest .text.__vector_23 - 0x00000000000005aa 0x54 USBtoSerial.o - 0x00000000000005aa __vector_23 + 0x00000000000005be 0x54 USBtoSerial.o + 0x00000000000005be __vector_23 .text.EVENT_CDC_Device_LineEncodingChanged - 0x00000000000005fe 0xc0 USBtoSerial.o - 0x00000000000005fe EVENT_CDC_Device_LineEncodingChanged + 0x0000000000000612 0xc0 USBtoSerial.o + 0x0000000000000612 EVENT_CDC_Device_LineEncodingChanged .text.uart_putc - 0x00000000000006be 0x10 USBtoSerial.o - 0x00000000000006be uart_putc + 0x00000000000006d2 0x10 USBtoSerial.o + 0x00000000000006d2 uart_putc .text.uart_puts - 0x00000000000006ce 0x26 USBtoSerial.o - 0x00000000000006ce uart_puts + 0x00000000000006e2 0x26 USBtoSerial.o + 0x00000000000006e2 uart_puts .text.my_uitoa - 0x00000000000006f4 0xd0 USBtoSerial.o - 0x00000000000006f4 my_uitoa - .text.main 0x00000000000007c4 0x122 USBtoSerial.o - 0x00000000000007c4 main + 0x0000000000000708 0xd0 USBtoSerial.o + 0x0000000000000708 my_uitoa + .text.main 0x00000000000007d8 0xe8 USBtoSerial.o + 0x00000000000007d8 main .text.CALLBACK_USB_GetDescriptor - 0x00000000000008e6 0x5a Descriptors.o - 0x00000000000008e6 CALLBACK_USB_GetDescriptor + 0x00000000000008c0 0x5a Descriptors.o + 0x00000000000008c0 CALLBACK_USB_GetDescriptor .text.Endpoint_Write_Control_Stream_LE - 0x0000000000000940 0xb4 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - 0x0000000000000940 Endpoint_Write_Control_Stream_LE + 0x000000000000091a 0xb4 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x000000000000091a Endpoint_Write_Control_Stream_LE .text.Endpoint_Write_Control_PStream_LE - 0x00000000000009f4 0xb6 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - 0x00000000000009f4 Endpoint_Write_Control_PStream_LE + 0x00000000000009ce 0xb6 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x00000000000009ce Endpoint_Write_Control_PStream_LE .text.Endpoint_ConfigureEndpoint_Prv - 0x0000000000000aaa 0x6e ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x0000000000000aaa Endpoint_ConfigureEndpoint_Prv + 0x0000000000000a84 0x6e ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x0000000000000a84 Endpoint_ConfigureEndpoint_Prv .text.Endpoint_ConfigureEndpointTable - 0x0000000000000b18 0x88 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x0000000000000b18 Endpoint_ConfigureEndpointTable + 0x0000000000000af2 0x88 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x0000000000000af2 Endpoint_ConfigureEndpointTable .text.Endpoint_ClearStatusStage - 0x0000000000000ba0 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x0000000000000ba0 Endpoint_ClearStatusStage + 0x0000000000000b7a 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x0000000000000b7a Endpoint_ClearStatusStage .text.Endpoint_WaitUntilReady - 0x0000000000000bde 0x66 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x0000000000000bde Endpoint_WaitUntilReady + 0x0000000000000bb8 0x66 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x0000000000000bb8 Endpoint_WaitUntilReady .text.USB_ResetInterface - 0x0000000000000c44 0x70 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - 0x0000000000000c44 USB_ResetInterface + 0x0000000000000c1e 0x70 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + 0x0000000000000c1e USB_ResetInterface .text.USB_Init - 0x0000000000000cb4 0x12 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - 0x0000000000000cb4 USB_Init + 0x0000000000000c8e 0x12 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + 0x0000000000000c8e USB_Init .text.USB_INT_DisableAllInterrupts - 0x0000000000000cc6 0x6 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x0000000000000cc6 USB_INT_DisableAllInterrupts + 0x0000000000000ca0 0x6 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x0000000000000ca0 USB_INT_DisableAllInterrupts .text.USB_INT_ClearAllInterrupts - 0x0000000000000ccc 0x6 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x0000000000000ccc USB_INT_ClearAllInterrupts + 0x0000000000000ca6 0x6 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x0000000000000ca6 USB_INT_ClearAllInterrupts .text.__vector_11 - 0x0000000000000cd2 0x148 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x0000000000000cd2 __vector_11 + 0x0000000000000cac 0x148 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x0000000000000cac __vector_11 .text.__vector_12 - 0x0000000000000e1a 0x76 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x0000000000000e1a __vector_12 + 0x0000000000000df4 0x76 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x0000000000000df4 __vector_12 .text.USB_Device_ProcessControlRequest - 0x0000000000000e90 0x2c2 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - 0x0000000000000e90 USB_Device_ProcessControlRequest + 0x0000000000000e6a 0x2c2 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + 0x0000000000000e6a USB_Device_ProcessControlRequest .text.USB_Event_Stub - 0x0000000000001152 0x2 ../../LUFA/Drivers/USB/Core/Events.o - 0x0000000000001152 EVENT_USB_Device_WakeUp - 0x0000000000001152 USB_Event_Stub - 0x0000000000001152 EVENT_USB_Device_Suspend - 0x0000000000001152 EVENT_USB_Device_StartOfFrame - 0x0000000000001152 EVENT_USB_Device_Reset + 0x000000000000112c 0x2 ../../LUFA/Drivers/USB/Core/Events.o + 0x000000000000112c EVENT_USB_Device_WakeUp + 0x000000000000112c USB_Event_Stub + 0x000000000000112c EVENT_USB_Device_Suspend + 0x000000000000112c EVENT_USB_Device_StartOfFrame + 0x000000000000112c EVENT_USB_Device_Reset .text.USB_USBTask - 0x0000000000001154 0x36 ../../LUFA/Drivers/USB/Core/USBTask.o - 0x0000000000001154 USB_USBTask + 0x000000000000112e 0x36 ../../LUFA/Drivers/USB/Core/USBTask.o + 0x000000000000112e USB_USBTask .text.CDC_Device_ProcessControlRequest - 0x000000000000118a 0x158 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x000000000000118a CDC_Device_ProcessControlRequest + 0x0000000000001164 0x158 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x0000000000001164 CDC_Device_ProcessControlRequest .text.CDC_Device_ConfigureEndpoints - 0x00000000000012e2 0x48 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x00000000000012e2 CDC_Device_ConfigureEndpoints + 0x00000000000012bc 0x48 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x00000000000012bc CDC_Device_ConfigureEndpoints .text.CDC_Device_SendByte - 0x000000000000132a 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x000000000000132a CDC_Device_SendByte + 0x0000000000001304 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x0000000000001304 CDC_Device_SendByte .text.CDC_Device_Flush - 0x0000000000001384 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x0000000000001384 CDC_Device_Flush + 0x000000000000135e 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x000000000000135e CDC_Device_Flush .text.CDC_Device_USBTask - 0x00000000000013de 0x2e ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x00000000000013de CDC_Device_USBTask + 0x00000000000013b8 0x2e ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x00000000000013b8 CDC_Device_USBTask .text.CDC_Device_ReceiveByte - 0x000000000000140c 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x000000000000140c CDC_Device_ReceiveByte + 0x00000000000013e6 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x00000000000013e6 CDC_Device_ReceiveByte .text.CDC_Device_Event_Stub - 0x0000000000001466 0x2 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x0000000000001466 EVENT_CDC_Device_ControLineStateChanged - 0x0000000000001466 EVENT_CDC_Device_BreakSent - 0x0000000000001466 CDC_Device_Event_Stub + 0x0000000000001440 0x2 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x0000000000001440 EVENT_CDC_Device_ControLineStateChanged + 0x0000000000001440 EVENT_CDC_Device_BreakSent + 0x0000000000001440 CDC_Device_Event_Stub .text.avr-libc.fplib - 0x0000000000001468 0xa /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3.o) - 0x0000000000001468 __subsf3 - 0x000000000000146a __addsf3 + 0x0000000000001442 0xa /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3.o) + 0x0000000000001442 __subsf3 + 0x0000000000001444 __addsf3 .text.avr-libc.fplib - 0x0000000000001472 0xc0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) - 0x000000000000148c __addsf3x + 0x000000000000144c 0xc0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) + 0x0000000000001466 __addsf3x .text.avr-libc.fplib - 0x0000000000001532 0x8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(cmpsf2.o) - 0x0000000000001532 __lesf2 - 0x0000000000001532 __nesf2 - 0x0000000000001532 __eqsf2 - 0x0000000000001532 __cmpsf2 - 0x0000000000001532 __ltsf2 + 0x000000000000150c 0x8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(cmpsf2.o) + 0x000000000000150c __lesf2 + 0x000000000000150c __nesf2 + 0x000000000000150c __eqsf2 + 0x000000000000150c __cmpsf2 + 0x000000000000150c __ltsf2 .text.avr-libc.fplib - 0x000000000000153a 0x4 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3.o) - 0x000000000000153a __divsf3 + 0x0000000000001514 0x4 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3.o) + 0x0000000000001514 __divsf3 .text.avr-libc.fplib - 0x000000000000153e 0xcc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) - 0x0000000000001554 __divsf3x - 0x0000000000001558 __divsf3_pse + 0x0000000000001518 0xcc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) + 0x000000000000152e __divsf3x + 0x0000000000001532 __divsf3_pse .text.avr-libc.fplib - 0x000000000000160a 0x58 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fixunssfsi.o) - 0x000000000000160a __fixunssfsi + 0x00000000000015e4 0x58 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fixunssfsi.o) + 0x00000000000015e4 __fixunssfsi .text.avr-libc.fplib - 0x0000000000001662 0x7a /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(floatsisf.o) - 0x0000000000001662 __floatunsisf - 0x0000000000001666 __floatsisf + 0x000000000000163c 0x7a /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(floatsisf.o) + 0x000000000000163c __floatunsisf + 0x0000000000001640 __floatsisf .text.avr-libc.fplib - 0x00000000000016dc 0x48 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_cmp.o) - 0x00000000000016dc __fp_cmp + 0x00000000000016b6 0x48 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_cmp.o) + 0x00000000000016b6 __fp_cmp .text.avr-libc.fplib - 0x0000000000001724 0xc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_inf.o) - 0x0000000000001724 __fp_inf + 0x00000000000016fe 0xc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_inf.o) + 0x00000000000016fe __fp_inf .text.avr-libc.fplib - 0x0000000000001730 0x6 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_nan.o) - 0x0000000000001730 __fp_nan + 0x000000000000170a 0x6 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_nan.o) + 0x000000000000170a __fp_nan .text.avr-libc.fplib - 0x0000000000001736 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscA.o) - 0x0000000000001736 __fp_pscA + 0x0000000000001710 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscA.o) + 0x0000000000001710 __fp_pscA .text.avr-libc.fplib - 0x0000000000001744 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscB.o) - 0x0000000000001744 __fp_pscB + 0x000000000000171e 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscB.o) + 0x000000000000171e __fp_pscB .text.avr-libc.fplib - 0x0000000000001752 0x22 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_round.o) - 0x0000000000001752 __fp_round + 0x000000000000172c 0x22 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_round.o) + 0x000000000000172c __fp_round .text.avr-libc.fplib - 0x0000000000001774 0x44 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_split3.o) - 0x0000000000001774 __fp_split3 - 0x0000000000001784 __fp_splitA + 0x000000000000174e 0x44 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_split3.o) + 0x000000000000174e __fp_split3 + 0x000000000000175e __fp_splitA .text.avr-libc.fplib - 0x00000000000017b8 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_zero.o) - 0x00000000000017b8 __fp_zero - 0x00000000000017ba __fp_szero + 0x0000000000001792 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_zero.o) + 0x0000000000001792 __fp_zero + 0x0000000000001794 __fp_szero .text.avr-libc.fplib - 0x00000000000017c6 0x8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(gesf2.o) - 0x00000000000017c6 __gtsf2 - 0x00000000000017c6 __gesf2 - .text.libgcc 0x00000000000017ce 0x44 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodsi4.o) - 0x00000000000017ce __udivmodsi4 - 0x0000000000001812 . = ALIGN (0x2) + 0x00000000000017a0 0x8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(gesf2.o) + 0x00000000000017a0 __gtsf2 + 0x00000000000017a0 __gesf2 + .text.libgcc 0x00000000000017a8 0x44 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodsi4.o) + 0x00000000000017a8 __udivmodsi4 + 0x00000000000017ec . = ALIGN (0x2) *(.fini9) - .fini9 0x0000000000001812 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) - 0x0000000000001812 exit - 0x0000000000001812 _exit + .fini9 0x00000000000017ec 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) + 0x00000000000017ec exit + 0x00000000000017ec _exit *(.fini9) *(.fini8) *(.fini8) @@ -859,51 +860,50 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a *(.fini1) *(.fini1) *(.fini0) - .fini0 0x0000000000001812 0x4 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) + .fini0 0x00000000000017ec 0x4 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) *(.fini0) - 0x0000000000001816 _etext = . + 0x00000000000017f0 _etext = . -.data 0x0000000000800100 0x6e load address 0x0000000000001816 +.data 0x0000000000800100 0x30 load address 0x00000000000017f0 0x0000000000800100 PROVIDE (__data_start, .) *(.data) - .data 0x0000000000800100 0x6d USBtoSerial.o - 0x0000000000800150 VirtualSerial_CDC_Interface + .data 0x0000000000800100 0x30 USBtoSerial.o + 0x0000000000800113 VirtualSerial_CDC_Interface *(.data*) *(.rodata) *(.rodata*) *(.gnu.linkonce.d*) - 0x000000000080016e . = ALIGN (0x2) - *fill* 0x000000000080016d 0x1 00 - 0x000000000080016e _edata = . - 0x000000000080016e PROVIDE (__data_end, .) + 0x0000000000800130 . = ALIGN (0x2) + 0x0000000000800130 _edata = . + 0x0000000000800130 PROVIDE (__data_end, .) -.bss 0x000000000080016e 0x134 - 0x000000000080016e PROVIDE (__bss_start, .) +.bss 0x0000000000800130 0x134 + 0x0000000000800130 PROVIDE (__bss_start, .) *(.bss) - .bss 0x000000000080016e 0x11d USBtoSerial.o + .bss 0x0000000000800130 0x11d USBtoSerial.o *(.bss*) *(COMMON) - COMMON 0x000000000080028b 0xb USBtoSerial.o - 0x000000000080028b adb_werte - 0x0000000000800294 t0ovfcount - 0x0000000000800295 adb_data_length - COMMON 0x0000000000800296 0x3 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - 0x0000000000800296 USB_Device_ConfigurationNumber - 0x0000000000800297 USB_Device_CurrentlySelfPowered - 0x0000000000800298 USB_Device_RemoteWakeupEnabled - COMMON 0x0000000000800299 0x9 ../../LUFA/Drivers/USB/Core/USBTask.o - 0x0000000000800299 USB_IsInitialized - 0x000000000080029a USB_ControlRequest - 0x00000000008002a2 PROVIDE (__bss_end, .) - 0x0000000000001816 __data_load_start = LOADADDR (.data) - 0x0000000000001884 __data_load_end = (__data_load_start + SIZEOF (.data)) - -.noinit 0x00000000008002a2 0x0 - 0x00000000008002a2 PROVIDE (__noinit_start, .) + COMMON 0x000000000080024d 0xb USBtoSerial.o + 0x000000000080024d adb_werte + 0x0000000000800256 t0ovfcount + 0x0000000000800257 adb_data_length + COMMON 0x0000000000800258 0x3 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + 0x0000000000800258 USB_Device_ConfigurationNumber + 0x0000000000800259 USB_Device_CurrentlySelfPowered + 0x000000000080025a USB_Device_RemoteWakeupEnabled + COMMON 0x000000000080025b 0x9 ../../LUFA/Drivers/USB/Core/USBTask.o + 0x000000000080025b USB_IsInitialized + 0x000000000080025c USB_ControlRequest + 0x0000000000800264 PROVIDE (__bss_end, .) + 0x00000000000017f0 __data_load_start = LOADADDR (.data) + 0x0000000000001820 __data_load_end = (__data_load_start + SIZEOF (.data)) + +.noinit 0x0000000000800264 0x0 + 0x0000000000800264 PROVIDE (__noinit_start, .) *(.noinit*) - 0x00000000008002a2 PROVIDE (__noinit_end, .) - 0x00000000008002a2 _end = . - 0x00000000008002a2 PROVIDE (__heap_start, .) + 0x0000000000800264 PROVIDE (__noinit_end, .) + 0x0000000000800264 _end = . + 0x0000000000800264 PROVIDE (__heap_start, .) .eeprom 0x0000000000810000 0x0 *(.eeprom*) @@ -1079,39 +1079,39 @@ 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 0x8cae +.debug_info 0x0000000000000000 0x8caa *(.debug_info) - .debug_info 0x0000000000000000 0xef0 USBtoSerial.o - .debug_info 0x0000000000000ef0 0x77d Descriptors.o - .debug_info 0x000000000000166d 0x6f9 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_info 0x0000000000001d66 0xd8 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_info 0x0000000000001e3e 0x154c ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_info 0x000000000000338a 0x603 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_info 0x000000000000398d 0x6c ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o - .debug_info 0x00000000000039f9 0x6c ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o - .debug_info 0x0000000000003a65 0x6c ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o - .debug_info 0x0000000000003ad1 0x412 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_info 0x0000000000003ee3 0x662 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_info 0x0000000000004545 0x38c ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_info 0x00000000000048d1 0x973 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_info 0x0000000000005244 0x85 ../../LUFA/Drivers/USB/Core/Events.o - .debug_info 0x00000000000052c9 0x6c ../../LUFA/Drivers/USB/Core/HostStandardReq.o - .debug_info 0x0000000000005335 0x245 ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_info 0x000000000000557a 0x56c ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_info 0x0000000000005ae6 0xc3b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_info 0x0000000000006721 0x67a ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_info 0x0000000000006d9b 0x7ca ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_info 0x0000000000007565 0x4c1 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_info 0x0000000000007a26 0xebc ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .debug_info 0x00000000000088e2 0x6c ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o - .debug_info 0x000000000000894e 0x6c ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o - .debug_info 0x00000000000089ba 0x6c ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o - .debug_info 0x0000000000008a26 0x6c ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o - .debug_info 0x0000000000008a92 0x6c ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o - .debug_info 0x0000000000008afe 0x6c ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o - .debug_info 0x0000000000008b6a 0x6c ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o - .debug_info 0x0000000000008bd6 0x6c ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o - .debug_info 0x0000000000008c42 0x6c ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o + .debug_info 0x0000000000000000 0xeec USBtoSerial.o + .debug_info 0x0000000000000eec 0x77d Descriptors.o + .debug_info 0x0000000000001669 0x6f9 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_info 0x0000000000001d62 0xd8 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .debug_info 0x0000000000001e3a 0x154c ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_info 0x0000000000003386 0x603 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_info 0x0000000000003989 0x6c ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o + .debug_info 0x00000000000039f5 0x6c ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o + .debug_info 0x0000000000003a61 0x6c ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o + .debug_info 0x0000000000003acd 0x412 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_info 0x0000000000003edf 0x662 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_info 0x0000000000004541 0x38c ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_info 0x00000000000048cd 0x973 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_info 0x0000000000005240 0x85 ../../LUFA/Drivers/USB/Core/Events.o + .debug_info 0x00000000000052c5 0x6c ../../LUFA/Drivers/USB/Core/HostStandardReq.o + .debug_info 0x0000000000005331 0x245 ../../LUFA/Drivers/USB/Core/USBTask.o + .debug_info 0x0000000000005576 0x56c ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + .debug_info 0x0000000000005ae2 0xc3b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + .debug_info 0x000000000000671d 0x67a ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + .debug_info 0x0000000000006d97 0x7ca ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + .debug_info 0x0000000000007561 0x4c1 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + .debug_info 0x0000000000007a22 0xebc ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + .debug_info 0x00000000000088de 0x6c ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o + .debug_info 0x000000000000894a 0x6c ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o + .debug_info 0x00000000000089b6 0x6c ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o + .debug_info 0x0000000000008a22 0x6c ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o + .debug_info 0x0000000000008a8e 0x6c ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o + .debug_info 0x0000000000008afa 0x6c ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o + .debug_info 0x0000000000008b66 0x6c ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o + .debug_info 0x0000000000008bd2 0x6c ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o + .debug_info 0x0000000000008c3e 0x6c ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o *(.gnu.linkonce.wi.*) .debug_abbrev 0x0000000000000000 0x21b9 @@ -1148,39 +1148,39 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a .debug_abbrev 0x0000000000002165 0x2a ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o .debug_abbrev 0x000000000000218f 0x2a ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o -.debug_line 0x0000000000000000 0x75f0 +.debug_line 0x0000000000000000 0x75c3 *(.debug_line) - .debug_line 0x0000000000000000 0x100d USBtoSerial.o - .debug_line 0x000000000000100d 0x1d9 Descriptors.o - .debug_line 0x00000000000011e6 0x762 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_line 0x0000000000001948 0x15f ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_line 0x0000000000001aa7 0x1a80 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_line 0x0000000000003527 0x5a1 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_line 0x0000000000003ac8 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o - .debug_line 0x0000000000003b06 0x3e ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o - .debug_line 0x0000000000003b44 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o - .debug_line 0x0000000000003b82 0x312 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_line 0x0000000000003e94 0x55a ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_line 0x00000000000043ee 0x269 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_line 0x0000000000004657 0x5a2 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_line 0x0000000000004bf9 0x80 ../../LUFA/Drivers/USB/Core/Events.o - .debug_line 0x0000000000004c79 0x3e ../../LUFA/Drivers/USB/Core/HostStandardReq.o - .debug_line 0x0000000000004cb7 0x1ae ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_line 0x0000000000004e65 0x4be ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_line 0x0000000000005323 0x9c2 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_line 0x0000000000005ce5 0x5c3 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_line 0x00000000000062a8 0x5c6 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_line 0x000000000000686e 0x3bc ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_line 0x0000000000006c2a 0x798 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .debug_line 0x00000000000073c2 0x3e ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o - .debug_line 0x0000000000007400 0x3e ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o - .debug_line 0x000000000000743e 0x3e ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o - .debug_line 0x000000000000747c 0x3e ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o - .debug_line 0x00000000000074ba 0x3e ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o - .debug_line 0x00000000000074f8 0x3e ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o - .debug_line 0x0000000000007536 0x3e ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o - .debug_line 0x0000000000007574 0x3e ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o - .debug_line 0x00000000000075b2 0x3e ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o + .debug_line 0x0000000000000000 0xfe0 USBtoSerial.o + .debug_line 0x0000000000000fe0 0x1d9 Descriptors.o + .debug_line 0x00000000000011b9 0x762 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_line 0x000000000000191b 0x15f ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .debug_line 0x0000000000001a7a 0x1a80 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_line 0x00000000000034fa 0x5a1 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_line 0x0000000000003a9b 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o + .debug_line 0x0000000000003ad9 0x3e ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o + .debug_line 0x0000000000003b17 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o + .debug_line 0x0000000000003b55 0x312 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_line 0x0000000000003e67 0x55a ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_line 0x00000000000043c1 0x269 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_line 0x000000000000462a 0x5a2 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_line 0x0000000000004bcc 0x80 ../../LUFA/Drivers/USB/Core/Events.o + .debug_line 0x0000000000004c4c 0x3e ../../LUFA/Drivers/USB/Core/HostStandardReq.o + .debug_line 0x0000000000004c8a 0x1ae ../../LUFA/Drivers/USB/Core/USBTask.o + .debug_line 0x0000000000004e38 0x4be ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + .debug_line 0x00000000000052f6 0x9c2 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + .debug_line 0x0000000000005cb8 0x5c3 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + .debug_line 0x000000000000627b 0x5c6 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + .debug_line 0x0000000000006841 0x3bc ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + .debug_line 0x0000000000006bfd 0x798 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + .debug_line 0x0000000000007395 0x3e ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o + .debug_line 0x00000000000073d3 0x3e ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o + .debug_line 0x0000000000007411 0x3e ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o + .debug_line 0x000000000000744f 0x3e ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o + .debug_line 0x000000000000748d 0x3e ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o + .debug_line 0x00000000000074cb 0x3e ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o + .debug_line 0x0000000000007509 0x3e ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o + .debug_line 0x0000000000007547 0x3e ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o + .debug_line 0x0000000000007585 0x3e ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o .debug_frame 0x0000000000000000 0x830 *(.debug_frame) @@ -1268,23 +1268,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 0x464d +.debug_loc 0x0000000000000000 0x462f *(.debug_loc) - .debug_loc 0x0000000000000000 0x5b1 USBtoSerial.o - .debug_loc 0x00000000000005b1 0xd3 Descriptors.o - .debug_loc 0x0000000000000684 0x88f ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_loc 0x0000000000000f13 0x1982 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_loc 0x0000000000002895 0x390 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_loc 0x0000000000002c25 0x190 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_loc 0x0000000000002db5 0x2bc ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_loc 0x0000000000003071 0x22a ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_loc 0x000000000000329b 0x27 ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_loc 0x00000000000032c2 0x16d ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_loc 0x000000000000342f 0x52b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_loc 0x000000000000395a 0x249 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_loc 0x0000000000003ba3 0x152 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_loc 0x0000000000003cf5 0x1f6 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_loc 0x0000000000003eeb 0x762 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + .debug_loc 0x0000000000000000 0x593 USBtoSerial.o + .debug_loc 0x0000000000000593 0xd3 Descriptors.o + .debug_loc 0x0000000000000666 0x88f ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_loc 0x0000000000000ef5 0x1982 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_loc 0x0000000000002877 0x390 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_loc 0x0000000000002c07 0x190 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_loc 0x0000000000002d97 0x2bc ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_loc 0x0000000000003053 0x22a ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_loc 0x000000000000327d 0x27 ../../LUFA/Drivers/USB/Core/USBTask.o + .debug_loc 0x00000000000032a4 0x16d ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + .debug_loc 0x0000000000003411 0x52b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + .debug_loc 0x000000000000393c 0x249 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + .debug_loc 0x0000000000003b85 0x152 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + .debug_loc 0x0000000000003cd7 0x1f6 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + .debug_loc 0x0000000000003ecd 0x762 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o .debug_macinfo *(.debug_macinfo) diff --git a/firmware/USBtoSerial.o b/firmware/USBtoSerial.o index 51f8fa1766f17aa090a101a00ffd696e1b072d13..768b8749293e58ca7efa8a72e2c67e6bd064c45c 100644 GIT binary patch delta 2754 zcmZ9Nd2Ccw6voeeohc)++YC}@B$ST62UwwE6{?^G7iejx8zL696sH1;Qnd&)#wjB* z*iNNz8mJ9!D1qQsc!)||N+sG5H#Ba<1<;5gsFCo8A{xKbIn~jZ+&RDRoO9n@&bxOG z?6*F8!|KQl?3qdQ3=tKg5sjrP3hipF_n05uk3G}V(o@rkMoGjo+Jr2=(C%VEpC2^jwFWXg zJCwTAo~JgYEi#z&+@R|=!&M`)`R9=%IDL$d&yMi%f*c<&365}Y3V!Juw*HsLe%Ntz zb!A8KQ^n>q^%AY@KVzsMJL={SNxgAJ+r2o0{&@M(1baw#KCV-iR10`AfFpb zg5G&`MDw`4B$(O~AUcx4drR_Cdm4#8%HnTI^2`D@rH<7SC7=vmnOZ<+d5h`^z0`X^c-m zT+dk{$Lfgj6(QTK;d+SoV%!SxEJQZ-lj!38t%!YpZOtl2=zb*1S0HglOeM5bNT61_`^zb6z#l<6K&8d!rW-`FMGC&`a$^ znf!Ql(2D1CA2Kr6^9f`;FoB5qyqci*$OfWLo>mhy8C+lESWVsBT4P%eU(UN>TDti# z%(s)-nuC&c^LUu!Q@9$2ws14dw?(`aX5Te@5a#ANdtI@!@2rSpYDs*10{y6+=)t`?SZB&03{F~K(0{PD> z%Y=3bUxx%dd(|(Kdt3PGguh>SELI>h{Zz!j)kt($JIG6q3&RH7_Ip-jrhOq2yC)lS zjI*MFNG<4;dT$2*seCKgi~B^f!{7|%#o%mZxvfVlF9kcwxGQL)^8Mh+%FW=bl^+Gq z%+UI6gs9NKCh(2QTflY7Pk`mG&r0UG|{KM0;UhRhGKEnZ%+~u}*mopvg|j^A4JS(g4zD7@z!?Cd5}sfg@n) zjAKH_(4@2Q_h^HiPYY|`Gf94_tMtu+CEQBVSJ(m%_Du!L0>bX0jzvSvFt?~HW<_Mr zU-$fbP7Wk-zq0KAhe`a2vfQ0=?+u=@ACxFusVoz1QEmpWQI-!P70vLfEdjS>OR>izL;ej0Cgo}X delta 3288 zcmY+F4Nz3q702&=>=Fi9pi8SMsk#C3mM97+V}L+HQjE)o%R(q>VnuXUNkO1>RhUTt zL!xLFB_2W(YBEWiF?Pn-(6t%O7)Gsa>@;guK(eLv0dX)N=QYsHksZ3R^ysD#hlWSw3Ij}Yu@VkPI0asI? zqpiX3@&`7wx;C`>H*GA8cPM{Du%W&=(6T<*Sm;u&_WHKgjfJk^g$*`+HT;V0F^4lg zQK^S`SlevvH5h38JMMgzjgT&ASGItDm}NW#9slR~5nQJqoQkOeKcegChfcSiM@`PW z;#3Tg^b{u=W$)_1G~R`ZDRkWt-k(}H%s&lbxf)5i~Sc92bB76#`%n0I;nnk z6?>l!=o@Ssv)e9m#(td<$%+iI^vOW9f+0pE&ERLRB`K8UN!D*svB!;fz~i=mVnZi-*^_S1TCJ3yj(E~zkEbZ*NT$o4wAlWiDs``u z;>*(XX_{B&Hum>WU72avGN=>gP!H{cS(HJi%S`*~45iW{vm}%!8^?NRR=H_^9%6Dt zTnX{B9%_NO2Vz`AJOFXLhejX{K`f=0Yf|Vo#K|5?tT63kX0&@{MY8^aeq7-;LfdIu zg=rXWItX)gJB`9DaMN9w%w94pO{3gRUYO;*v>9fNo8Exw?WI3fn!25?Rl1FVUYfqt z)Q6~esoOZ*OY7i#MSXB?^wRrFO~aWM>D2=bXBr`k2X}f4Nr&$t4#d?eF&#HL=$jMlEddV`a`tH zXBw$U!=8_lYOdoBoHtmyhmGaSB)#>)k zT}mCGKUJq2CG+SD&giGe-b-~bM+&GD=Em!^k7I>&8YWaqH(_#qM6+tKo|WMzYExr$Q@CMS zm7#s%;T0P-%mYvVGo{Oi(p=)e6;O=o#8ptkoUhbjn^Ma}_r{{~gr7!!tK^I#Cn)-B z&_kjtyHZ2KdEj3Q2f>Gh_kfQ(RF~3uN)=)5KX3s22>27>Qt;n}>%jlA=vOTIT>Ss| z2RQI2%NOp8Q);oW4?k>~@H3crEi)FcFu!V)zzK8+N+1ED4$(W%`9;w~(07WSg@Fb| ze--*KME^JP_Y3oae#g8R33xsbofr2JbKavBv0=PP7b$mZO4lmTSE8;4-xgj2w&5b;>_%{ca5MP3!Y$w*2)BVVgoEHL;TOPp z!n_kj!h67_NphA$a4IG6TX3!LVem@f5wKtQ1h`pv6dV*j3w~C34E%!dI5;Fc0Ui+k zhR<@ZICl|vTi8Hl9uSTL9}YyiHTee|Bc)a$l6qlmg3j>a530 zo>(3e{A~`ccJ6NtLBHD}v=Q`xRUgUegGr2Q6<(4Ebm{;8xcI;k%kFE}H8r*Jl z1(9_Wb;cLOv*6!b_#@#S=zQUG4p-1wVXlhH7M>7pfqu=x*M<3m!yky~Wn{C<#leR$ zO#;kG!hA5(g~!3E!hC4=TlfKCo`AnPJi#jD08!Q|U=85?e#}jiYwhJEzcUic{lFy$({h+LLPy)QtH-t}se<_@(sdFfmx`z_N MuMXweY&_xr08SK5@&Et; diff --git a/firmware/USBtoSerial.sym b/firmware/USBtoSerial.sym index a03e211..ffc99aa 100644 --- a/firmware/USBtoSerial.sym +++ b/firmware/USBtoSerial.sym @@ -252,106 +252,107 @@ 0000023c T adb 0000045c T touchpad_init 0000046c T touchpad_read -0000047e T delta_y -0000049e T delta_x -000004be T Usb2SerialTask +0000047e T touchpad_set_rel_mode_200dpi +00000492 T delta_y +000004b2 T delta_x +000004d2 T Usb2SerialTask 000004ff W __stack -00000570 T SetupHardware -0000059a T EVENT_USB_Device_Connect -0000059c T EVENT_USB_Device_Disconnect -0000059e T EVENT_USB_Device_ConfigurationChanged -000005a4 T EVENT_USB_Device_ControlRequest -000005aa T __vector_23 -000005fe T EVENT_CDC_Device_LineEncodingChanged -000006be T uart_putc -000006ce T uart_puts -000006f4 T my_uitoa -000007c4 T main -000008e6 T CALLBACK_USB_GetDescriptor -00000940 T Endpoint_Write_Control_Stream_LE -000009f4 T Endpoint_Write_Control_PStream_LE -00000aaa T Endpoint_ConfigureEndpoint_Prv -00000b18 T Endpoint_ConfigureEndpointTable -00000ba0 T Endpoint_ClearStatusStage -00000bde T Endpoint_WaitUntilReady -00000c44 T USB_ResetInterface -00000cb4 T USB_Init -00000cc6 T USB_INT_DisableAllInterrupts -00000ccc T USB_INT_ClearAllInterrupts -00000cd2 T __vector_11 -00000e1a T __vector_12 -00000e90 T USB_Device_ProcessControlRequest -00001152 W EVENT_USB_Device_Reset -00001152 W EVENT_USB_Device_StartOfFrame -00001152 W EVENT_USB_Device_Suspend -00001152 W EVENT_USB_Device_WakeUp -00001152 T USB_Event_Stub -00001154 T USB_USBTask -0000118a T CDC_Device_ProcessControlRequest -000012e2 T CDC_Device_ConfigureEndpoints -0000132a T CDC_Device_SendByte -00001384 T CDC_Device_Flush -000013de T CDC_Device_USBTask -0000140c T CDC_Device_ReceiveByte -00001466 T CDC_Device_Event_Stub -00001466 W EVENT_CDC_Device_BreakSent -00001466 W EVENT_CDC_Device_ControLineStateChanged -00001468 T __subsf3 -0000146a T __addsf3 -0000148c T __addsf3x -00001532 T __cmpsf2 -00001532 T __eqsf2 -00001532 T __lesf2 -00001532 T __ltsf2 -00001532 T __nesf2 -0000153a T __divsf3 -00001554 T __divsf3x -00001558 T __divsf3_pse -0000160a T __fixunssfsi -00001662 T __floatunsisf -00001666 T __floatsisf -000016dc T __fp_cmp -00001724 T __fp_inf -00001730 T __fp_nan -00001736 T __fp_pscA -00001744 T __fp_pscB -00001752 T __fp_round -00001774 T __fp_split3 -00001784 T __fp_splitA -000017b8 T __fp_zero -000017ba T __fp_szero -000017c6 T __gesf2 -000017c6 T __gtsf2 -000017ce T __udivmodsi4 -000017da t __udivmodsi4_loop -000017f4 t __udivmodsi4_ep -00001812 T _exit -00001812 W exit -00001814 t __stop_program -00001816 A __data_load_start -00001816 T _etext -00001884 A __data_load_end +00000584 T SetupHardware +000005ae T EVENT_USB_Device_Connect +000005b0 T EVENT_USB_Device_Disconnect +000005b2 T EVENT_USB_Device_ConfigurationChanged +000005b8 T EVENT_USB_Device_ControlRequest +000005be T __vector_23 +00000612 T EVENT_CDC_Device_LineEncodingChanged +000006d2 T uart_putc +000006e2 T uart_puts +00000708 T my_uitoa +000007d8 T main +000008c0 T CALLBACK_USB_GetDescriptor +0000091a T Endpoint_Write_Control_Stream_LE +000009ce T Endpoint_Write_Control_PStream_LE +00000a84 T Endpoint_ConfigureEndpoint_Prv +00000af2 T Endpoint_ConfigureEndpointTable +00000b7a T Endpoint_ClearStatusStage +00000bb8 T Endpoint_WaitUntilReady +00000c1e T USB_ResetInterface +00000c8e T USB_Init +00000ca0 T USB_INT_DisableAllInterrupts +00000ca6 T USB_INT_ClearAllInterrupts +00000cac T __vector_11 +00000df4 T __vector_12 +00000e6a T USB_Device_ProcessControlRequest +0000112c W EVENT_USB_Device_Reset +0000112c W EVENT_USB_Device_StartOfFrame +0000112c W EVENT_USB_Device_Suspend +0000112c W EVENT_USB_Device_WakeUp +0000112c T USB_Event_Stub +0000112e T USB_USBTask +00001164 T CDC_Device_ProcessControlRequest +000012bc T CDC_Device_ConfigureEndpoints +00001304 T CDC_Device_SendByte +0000135e T CDC_Device_Flush +000013b8 T CDC_Device_USBTask +000013e6 T CDC_Device_ReceiveByte +00001440 T CDC_Device_Event_Stub +00001440 W EVENT_CDC_Device_BreakSent +00001440 W EVENT_CDC_Device_ControLineStateChanged +00001442 T __subsf3 +00001444 T __addsf3 +00001466 T __addsf3x +0000150c T __cmpsf2 +0000150c T __eqsf2 +0000150c T __lesf2 +0000150c T __ltsf2 +0000150c T __nesf2 +00001514 T __divsf3 +0000152e T __divsf3x +00001532 T __divsf3_pse +000015e4 T __fixunssfsi +0000163c T __floatunsisf +00001640 T __floatsisf +000016b6 T __fp_cmp +000016fe T __fp_inf +0000170a T __fp_nan +00001710 T __fp_pscA +0000171e T __fp_pscB +0000172c T __fp_round +0000174e T __fp_split3 +0000175e T __fp_splitA +00001792 T __fp_zero +00001794 T __fp_szero +000017a0 T __gesf2 +000017a0 T __gtsf2 +000017a8 T __udivmodsi4 +000017b4 t __udivmodsi4_loop +000017ce t __udivmodsi4_ep +000017ec T _exit +000017ec W exit +000017ee t __stop_program +000017f0 A __data_load_start +000017f0 T _etext +00001820 A __data_load_end 00800100 D __data_start -00800150 D VirtualSerial_CDC_Interface -0080016b d CSWTCH.10 -0080016e b USBtoUSART_Buffer -0080016e B __bss_start -0080016e D __data_end -0080016e D _edata -0080017a b USBtoUSART_Buffer_Data -008001fa b USARTtoUSB_Buffer -00800206 b USARTtoUSB_Buffer_Data -00800286 b y_mem.3984 -00800288 b x_mem.3983 -0080028a b last_pressure.3978 -0080028b B adb_werte -00800294 B t0ovfcount -00800295 B adb_data_length -00800296 B USB_Device_ConfigurationNumber -00800297 B USB_Device_CurrentlySelfPowered -00800298 B USB_Device_RemoteWakeupEnabled -00800299 B USB_IsInitialized -0080029a B USB_ControlRequest -008002a2 B __bss_end -008002a2 N _end +00800113 D VirtualSerial_CDC_Interface +0080012e d CSWTCH.10 +00800130 b USBtoUSART_Buffer +00800130 B __bss_start +00800130 D __data_end +00800130 D _edata +0080013c b USBtoUSART_Buffer_Data +008001bc b USARTtoUSB_Buffer +008001c8 b USARTtoUSB_Buffer_Data +00800248 b y_mem.3984 +0080024a b x_mem.3983 +0080024c b last_pressure.3978 +0080024d B adb_werte +00800256 B t0ovfcount +00800257 B adb_data_length +00800258 B USB_Device_ConfigurationNumber +00800259 B USB_Device_CurrentlySelfPowered +0080025a B USB_Device_RemoteWakeupEnabled +0080025b B USB_IsInitialized +0080025c B USB_ControlRequest +00800264 B __bss_end +00800264 N _end 00810000 N __eeprom_end -- 2.43.0