Sections:
Idx Name Size VMA LMA File off Algn
- 0 .data 0000007a 00800100 00001e88 00001f1c 2**0
+ 0 .data 0000004e 00800100 00001ef8 00001f8c 2**0
CONTENTS, ALLOC, LOAD, DATA
- 1 .text 00001e88 00000000 00000000 00000094 2**1
+ 1 .text 00001ef8 00000000 00000000 00000094 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
- 2 .bss 00000176 0080017a 0080017a 00001f96 2**0
+ 2 .bss 00000186 0080014e 0080014e 00001fda 2**0
ALLOC
- 3 .stab 0000255c 00000000 00000000 00001f98 2**2
+ 3 .stab 0000255c 00000000 00000000 00001fdc 2**2
CONTENTS, READONLY, DEBUGGING
- 4 .stabstr 000004d5 00000000 00000000 000044f4 2**0
+ 4 .stabstr 000004d5 00000000 00000000 00004538 2**0
CONTENTS, READONLY, DEBUGGING
- 5 .debug_aranges 00000590 00000000 00000000 000049c9 2**0
+ 5 .debug_aranges 000005a0 00000000 00000000 00004a0d 2**0
CONTENTS, READONLY, DEBUGGING
- 6 .debug_pubnames 00000f05 00000000 00000000 00004f59 2**0
+ 6 .debug_pubnames 00000f39 00000000 00000000 00004fad 2**0
CONTENTS, READONLY, DEBUGGING
- 7 .debug_info 00009207 00000000 00000000 00005e5e 2**0
+ 7 .debug_info 000092a5 00000000 00000000 00005ee6 2**0
CONTENTS, READONLY, DEBUGGING
- 8 .debug_abbrev 0000220b 00000000 00000000 0000f065 2**0
+ 8 .debug_abbrev 0000220b 00000000 00000000 0000f18b 2**0
CONTENTS, READONLY, DEBUGGING
- 9 .debug_line 00007b46 00000000 00000000 00011270 2**0
+ 9 .debug_line 00007bdc 00000000 00000000 00011396 2**0
CONTENTS, READONLY, DEBUGGING
- 10 .debug_frame 000008e0 00000000 00000000 00018db8 2**2
+ 10 .debug_frame 00000900 00000000 00000000 00018f74 2**2
CONTENTS, READONLY, DEBUGGING
- 11 .debug_str 00003d5d 00000000 00000000 00019698 2**0
+ 11 .debug_str 00003d96 00000000 00000000 00019874 2**0
CONTENTS, READONLY, DEBUGGING
- 12 .debug_loc 00004a7a 00000000 00000000 0001d3f5 2**0
+ 12 .debug_loc 00004b07 00000000 00000000 0001d60a 2**0
CONTENTS, READONLY, DEBUGGING
- 13 .debug_pubtypes 00001111 00000000 00000000 00021e6f 2**0
+ 13 .debug_pubtypes 00001111 00000000 00000000 00022111 2**0
CONTENTS, READONLY, DEBUGGING
- 14 .debug_ranges 00000818 00000000 00000000 00022f80 2**0
+ 14 .debug_ranges 00000828 00000000 00000000 00023222 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
26: 00 00 nop
28: a2 c0 rjmp .+324 ; 0x16e <__bad_interrupt>
2a: 00 00 nop
- 2c: 0c 94 31 09 jmp 0x1262 ; 0x1262 <__vector_11>
- 30: 0c 94 d5 09 jmp 0x13aa ; 0x13aa <__vector_12>
+ 2c: 0c 94 69 09 jmp 0x12d2 ; 0x12d2 <__vector_11>
+ 30: 0c 94 0d 0a jmp 0x141a ; 0x141a <__vector_12>
34: 9c c0 rjmp .+312 ; 0x16e <__bad_interrupt>
36: 00 00 nop
38: 9a c0 rjmp .+308 ; 0x16e <__bad_interrupt>
142: 11 e0 ldi r17, 0x01 ; 1
144: a0 e0 ldi r26, 0x00 ; 0
146: b1 e0 ldi r27, 0x01 ; 1
- 148: e8 e8 ldi r30, 0x88 ; 136
+ 148: e8 ef ldi r30, 0xF8 ; 248
14a: fe e1 ldi r31, 0x1E ; 30
14c: 02 c0 rjmp .+4 ; 0x152 <__do_copy_data+0x10>
14e: 05 90 lpm r0, Z+
150: 0d 92 st X+, r0
- 152: aa 37 cpi r26, 0x7A ; 122
+ 152: ae 34 cpi r26, 0x4E ; 78
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: aa e7 ldi r26, 0x7A ; 122
+ 15a: ae e4 ldi r26, 0x4E ; 78
15c: b1 e0 ldi r27, 0x01 ; 1
15e: 01 c0 rjmp .+2 ; 0x162 <.do_clear_bss_start>
160: 1d 92 st X+, r1
00000162 <.do_clear_bss_start>:
- 162: a0 3f cpi r26, 0xF0 ; 240
+ 162: a4 3d cpi r26, 0xD4 ; 212
164: b1 07 cpc r27, r17
166: e1 f7 brne .-8 ; 0x160 <.do_clear_bss_loop>
- 168: 2f d6 rcall .+3166 ; 0xdc8 <main>
- 16a: 0c 94 42 0f jmp 0x1e84 ; 0x1e84 <_exit>
+ 168: 67 d6 rcall .+3278 ; 0xe38 <main>
+ 16a: 0c 94 7a 0f jmp 0x1ef4 ; 0x1ef4 <_exit>
0000016e <__bad_interrupt>:
16e: 48 cf rjmp .-368 ; 0x0 <__vectors>
2f4: 11 24 eor r1, r1
2f6: 8f 93 push r24
t0ovfcount++;
- 2f8: 80 91 e2 02 lds r24, 0x02E2
+ 2f8: 80 91 c6 02 lds r24, 0x02C6
2fc: 8f 5f subi r24, 0xFF ; 255
- 2fe: 80 93 e2 02 sts 0x02E2, r24
+ 2fe: 80 93 c6 02 sts 0x02C6, r24
}
302: 8f 91 pop r24
304: 0f 90 pop r0
uint16_t t0ext(void) {
return (t0ovfcount * 256 + (u16) TCNT0); // return current counter value
30e: 86 b5 in r24, 0x26 ; 38
- 310: 30 91 e2 02 lds r19, 0x02E2
+ 310: 30 91 c6 02 lds r19, 0x02C6
314: 20 e0 ldi r18, 0x00 ; 0
316: 28 0f add r18, r24
318: 31 1d adc r19, r1
TCNT0 = 0; // set counter to zero
31e: 16 bc out 0x26, r1 ; 38
t0ovfcount = 0; // set overflow counter to zero
- 320: 10 92 e2 02 sts 0x02E2, r1
+ 320: 10 92 c6 02 sts 0x02C6, r1
}
324: 08 95 ret
340: bc 01 movw r22, r24
342: 80 e0 ldi r24, 0x00 ; 0
344: 90 e0 ldi r25, 0x00 ; 0
- 346: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf>
+ 346: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf>
34a: 20 e0 ldi r18, 0x00 ; 0
34c: 30 e8 ldi r19, 0x80 ; 128
34e: 4e e0 ldi r20, 0x0E ; 14
350: 53 e4 ldi r21, 0x43 ; 67
- 352: 0e 94 63 0d call 0x1ac6 ; 0x1ac6 <__cmpsf2>
+ 352: 0e 94 9b 0d call 0x1b36 ; 0x1b36 <__cmpsf2>
356: 87 fd sbrc r24, 7
358: f2 cf rjmp .-28 ; 0x33e <adb+0x18>
; // Warteschleife
36c: bc 01 movw r22, r24
36e: 80 e0 ldi r24, 0x00 ; 0
370: 90 e0 ldi r25, 0x00 ; 0
- 372: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf>
+ 372: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf>
376: 20 e0 ldi r18, 0x00 ; 0
378: 30 e0 ldi r19, 0x00 ; 0
37a: 4c e8 ldi r20, 0x8C ; 140
37c: 52 e4 ldi r21, 0x42 ; 66
- 37e: 0e 94 63 0d call 0x1ac6 ; 0x1ac6 <__cmpsf2>
+ 37e: 0e 94 9b 0d call 0x1b36 ; 0x1b36 <__cmpsf2>
382: 87 fd sbrc r24, 7
384: f2 cf rjmp .-28 ; 0x36a <adb+0x44>
;
38c: bc 01 movw r22, r24
38e: 80 e0 ldi r24, 0x00 ; 0
390: 90 e0 ldi r25, 0x00 ; 0
- 392: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf>
+ 392: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf>
396: 20 e0 ldi r18, 0x00 ; 0
398: 30 e0 ldi r19, 0x00 ; 0
39a: 48 e4 ldi r20, 0x48 ; 72
39c: 53 e4 ldi r21, 0x43 ; 67
- 39e: 0e 94 63 0d call 0x1ac6 ; 0x1ac6 <__cmpsf2>
+ 39e: 0e 94 9b 0d call 0x1b36 ; 0x1b36 <__cmpsf2>
3a2: 87 fd sbrc r24, 7
3a4: f2 cf rjmp .-28 ; 0x38a <adb+0x64>
3a6: 41 c0 rjmp .+130 ; 0x42a <adb+0x104>
if (adb_werte[z_byte] & bitpos)
3ae: e1 2e mov r14, r17
3b0: ff 24 eor r15, r15
- 3b2: 89 ec ldi r24, 0xC9 ; 201
+ 3b2: 8d ea ldi r24, 0xAD ; 173
3b4: 92 e0 ldi r25, 0x02 ; 2
3b6: e8 0e add r14, r24
3b8: f9 1e adc r15, r25
3ca: bc 01 movw r22, r24
3cc: 80 e0 ldi r24, 0x00 ; 0
3ce: 90 e0 ldi r25, 0x00 ; 0
- 3d0: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf>
+ 3d0: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf>
3d4: 20 e0 ldi r18, 0x00 ; 0
3d6: 30 e0 ldi r19, 0x00 ; 0
3d8: 4c e8 ldi r20, 0x8C ; 140
3da: 52 e4 ldi r21, 0x42 ; 66
- 3dc: 0e 94 63 0d call 0x1ac6 ; 0x1ac6 <__cmpsf2>
+ 3dc: 0e 94 9b 0d call 0x1b36 ; 0x1b36 <__cmpsf2>
3e0: 87 fd sbrc r24, 7
3e2: f2 cf rjmp .-28 ; 0x3c8 <adb+0xa2>
3e4: 0e c0 rjmp .+28 ; 0x402 <adb+0xdc>
3e8: bc 01 movw r22, r24
3ea: 80 e0 ldi r24, 0x00 ; 0
3ec: 90 e0 ldi r25, 0x00 ; 0
- 3ee: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf>
+ 3ee: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf>
3f2: 20 e0 ldi r18, 0x00 ; 0
3f4: 30 e0 ldi r19, 0x00 ; 0
3f6: 42 e0 ldi r20, 0x02 ; 2
3f8: 53 e4 ldi r21, 0x43 ; 67
- 3fa: 0e 94 63 0d call 0x1ac6 ; 0x1ac6 <__cmpsf2>
+ 3fa: 0e 94 9b 0d call 0x1b36 ; 0x1b36 <__cmpsf2>
3fe: 87 fd sbrc r24, 7
400: f2 cf rjmp .-28 ; 0x3e6 <adb+0xc0>
;
408: bc 01 movw r22, r24
40a: 80 e0 ldi r24, 0x00 ; 0
40c: 90 e0 ldi r25, 0x00 ; 0
- 40e: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf>
+ 40e: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf>
412: 20 e0 ldi r18, 0x00 ; 0
414: 30 e0 ldi r19, 0x00 ; 0
416: 48 e4 ldi r20, 0x48 ; 72
418: 53 e4 ldi r21, 0x43 ; 67
- 41a: 0e 94 63 0d call 0x1ac6 ; 0x1ac6 <__cmpsf2>
+ 41a: 0e 94 9b 0d call 0x1b36 ; 0x1b36 <__cmpsf2>
41e: 87 fd sbrc r24, 7
420: f2 cf rjmp .-28 ; 0x406 <adb+0xe0>
ADB_POUT |= ADB_BIT;
438: bc 01 movw r22, r24
43a: 80 e0 ldi r24, 0x00 ; 0
43c: 90 e0 ldi r25, 0x00 ; 0
- 43e: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf>
+ 43e: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf>
442: 20 e0 ldi r18, 0x00 ; 0
444: 30 e0 ldi r19, 0x00 ; 0
446: 42 e0 ldi r20, 0x02 ; 2
448: 53 e4 ldi r21, 0x43 ; 67
- 44a: 0e 94 63 0d call 0x1ac6 ; 0x1ac6 <__cmpsf2>
+ 44a: 0e 94 9b 0d call 0x1b36 ; 0x1b36 <__cmpsf2>
44e: 87 fd sbrc r24, 7
450: f2 cf rjmp .-28 ; 0x436 <adb+0x110>
;
458: bc 01 movw r22, r24
45a: 80 e0 ldi r24, 0x00 ; 0
45c: 90 e0 ldi r25, 0x00 ; 0
- 45e: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf>
+ 45e: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf>
462: 20 e0 ldi r18, 0x00 ; 0
464: 30 e0 ldi r19, 0x00 ; 0
466: 48 e4 ldi r20, 0x48 ; 72
468: 53 e4 ldi r21, 0x43 ; 67
- 46a: 0e 94 63 0d call 0x1ac6 ; 0x1ac6 <__cmpsf2>
+ 46a: 0e 94 9b 0d call 0x1b36 ; 0x1b36 <__cmpsf2>
46e: 87 fd sbrc r24, 7
470: f2 cf rjmp .-28 ; 0x456 <adb+0x130>
;
// Entscheidung, ob noch weitere Daten übertragen werden
if (adb_werte[0] == COM_LISTEN3)
- 472: 80 91 c9 02 lds r24, 0x02C9
+ 472: 80 91 ad 02 lds r24, 0x02AD
476: 8b 33 cpi r24, 0x3B ; 59
478: 29 f0 breq .+10 ; 0x484 <adb+0x15e>
anzahl_out = 2 + 1;
492: bc 01 movw r22, r24
494: 80 e0 ldi r24, 0x00 ; 0
496: 90 e0 ldi r25, 0x00 ; 0
- 498: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf>
+ 498: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf>
49c: 20 e0 ldi r18, 0x00 ; 0
49e: 30 e0 ldi r19, 0x00 ; 0
4a0: 4a ef ldi r20, 0xFA ; 250
4a2: 53 e4 ldi r21, 0x43 ; 67
- 4a4: 0e 94 ad 0e call 0x1d5a ; 0x1d5a <__gesf2>
+ 4a4: 0e 94 e5 0e call 0x1dca ; 0x1dca <__gesf2>
4a8: 18 16 cp r1, r24
4aa: 0c f4 brge .+2 ; 0x4ae <adb+0x188>
4ac: 42 c0 rjmp .+132 ; 0x532 <__stack+0x33>
while (!(ADB_PIN & ADB_BIT))
4b2: 48 9b sbis 0x09, 0 ; 9
4b4: fe cf rjmp .-4 ; 0x4b2 <adb+0x18c>
- 4b6: ca ec ldi r28, 0xCA ; 202
+ 4b6: ce ea ldi r28, 0xAE ; 174
4b8: d2 e0 ldi r29, 0x02 ; 2
4ba: 11 e0 ldi r17, 0x01 ; 1
4bc: 01 c0 rjmp .+2 ; 0x4c0 <adb+0x19a>
4ce: bc 01 movw r22, r24
4d0: 80 e0 ldi r24, 0x00 ; 0
4d2: 90 e0 ldi r25, 0x00 ; 0
- 4d4: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf>
+ 4d4: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf>
4d8: 20 e0 ldi r18, 0x00 ; 0
4da: 30 e0 ldi r19, 0x00 ; 0
4dc: 48 e4 ldi r20, 0x48 ; 72
4de: 53 e4 ldi r21, 0x43 ; 67
- 4e0: 0e 94 ad 0e call 0x1d5a ; 0x1d5a <__gesf2>
+ 4e0: 0e 94 e5 0e call 0x1dca ; 0x1dca <__gesf2>
4e4: 18 16 cp r1, r24
4e6: 14 f4 brge .+4 ; 0x4ec <adb+0x1c6>
return (z_byte - 1);
4f8: bc 01 movw r22, r24
4fa: 80 e0 ldi r24, 0x00 ; 0
4fc: 90 e0 ldi r25, 0x00 ; 0
- 4fe: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf>
+ 4fe: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf>
502: 20 e0 ldi r18, 0x00 ; 0
504: 30 e0 ldi r19, 0x00 ; 0
506: 48 ec ldi r20, 0xC8 ; 200
508: 52 e4 ldi r21, 0x42 ; 66
- 50a: 0e 94 63 0d call 0x1ac6 ; 0x1ac6 <__cmpsf2>
+ 50a: 0e 94 9b 0d call 0x1b36 ; 0x1b36 <__cmpsf2>
50e: 87 ff sbrs r24, 7
510: 03 c0 rjmp .+6 ; 0x518 <__stack+0x19>
adb_werte[z_byte] += bitpos;
uint8_t touchpad_read(void) {
adb_werte[0] = COM_TALK0;
556: 8c e3 ldi r24, 0x3C ; 60
- 558: 80 93 c9 02 sts 0x02C9, r24
+ 558: 80 93 ad 02 sts 0x02AD, r24
adb_data_length = adb();
55c: e4 de rcall .-568 ; 0x326 <adb>
- 55e: 80 93 e3 02 sts 0x02E3, r24
+ 55e: 80 93 c7 02 sts 0x02C7, r24
return adb_data_length;
- 562: 80 91 e3 02 lds r24, 0x02E3
+ 562: 80 91 c7 02 lds r24, 0x02C7
}
566: 08 95 ret
// Auf Relativmodus umschalten
adb_werte[0] = COM_LISTEN3;
568: 8b e3 ldi r24, 0x3B ; 59
- 56a: 80 93 c9 02 sts 0x02C9, r24
+ 56a: 80 93 ad 02 sts 0x02AD, r24
adb_werte[1] = BITS(0110,0011);
56e: 83 e6 ldi r24, 0x63 ; 99
- 570: 80 93 ca 02 sts 0x02CA, r24
+ 570: 80 93 ae 02 sts 0x02AE, r24
adb_werte[2] = 1; //default modus: 100 dpi mouse
574: 81 e0 ldi r24, 0x01 ; 1
- 576: 80 93 cb 02 sts 0x02CB, r24
+ 576: 80 93 af 02 sts 0x02AF, r24
adb();
57a: d5 de rcall .-598 ; 0x326 <adb>
#else
int8_t delta_y(void) {
if(adb_data_length ==0) {
- 590: 80 91 e3 02 lds r24, 0x02E3
+ 590: 80 91 c7 02 lds r24, 0x02C7
594: 88 23 and r24, r24
596: 51 f0 breq .+20 ; 0x5ac <delta_y+0x1c>
return 0;
}
if (adb_werte[1] & 0b01000000) {
- 598: 80 91 ca 02 lds r24, 0x02CA
+ 598: 80 91 ae 02 lds r24, 0x02AE
59c: 86 ff sbrs r24, 6
59e: 04 c0 rjmp .+8 ; 0x5a8 <delta_y+0x18>
return -((128 - adb_werte[1]) & 0b00111111);
int8_t delta_x(void) {
if(adb_data_length ==0) {
- 5b0: 80 91 e3 02 lds r24, 0x02E3
+ 5b0: 80 91 c7 02 lds r24, 0x02C7
5b4: 88 23 and r24, r24
5b6: 51 f0 breq .+20 ; 0x5cc <delta_x+0x1c>
return 0;
}
if (adb_werte[2] & 0b01000000) {
- 5b8: 80 91 cb 02 lds r24, 0x02CB
+ 5b8: 80 91 af 02 lds r24, 0x02AF
5bc: 86 ff sbrs r24, 6
5be: 04 c0 rjmp .+8 ; 0x5c8 <delta_x+0x18>
return -((128 - adb_werte[2]) & 0b00111111);
GlobalInterruptDisable();
Count = Buffer->Count;
- 5d6: 20 91 88 01 lds r18, 0x0188
- 5da: 30 91 89 01 lds r19, 0x0189
+ 5d6: 20 91 5c 01 lds r18, 0x015C
+ 5da: 30 91 5d 01 lds r19, 0x015D
static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState)
{
GCC_MEMORY_BARRIER();
/* Only try to read in bytes from the CDC interface if the transmit buffer is not full */
if (!(RingBuffer_IsFull(&USBtoUSART_Buffer)))
- 5e0: 80 91 86 01 lds r24, 0x0186
- 5e4: 90 91 87 01 lds r25, 0x0187
+ 5e0: 80 91 5a 01 lds r24, 0x015A
+ 5e4: 90 91 5b 01 lds r25, 0x015B
5e8: 28 17 cp r18, r24
5ea: 39 07 cpc r19, r25
5ec: 51 f0 breq .+20 ; 0x602 <Usb2SerialTask+0x32>
{
int16_t ReceivedByte = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);
- 5ee: 84 e5 ldi r24, 0x54 ; 84
+ 5ee: 88 e2 ldi r24, 0x28 ; 40
5f0: 91 e0 ldi r25, 0x01 ; 1
- 5f2: 0e 94 d0 0c call 0x19a0 ; 0x19a0 <CDC_Device_ReceiveByte>
+ 5f2: 0e 94 08 0d call 0x1a10 ; 0x1a10 <CDC_Device_ReceiveByte>
5f6: bc 01 movw r22, r24
/* Read bytes from the USB OUT endpoint into the USART transmit buffer */
5f8: 97 fd sbrc r25, 7
5fa: 03 c0 rjmp .+6 ; 0x602 <Usb2SerialTask+0x32>
RingBuffer_Insert(&USBtoUSART_Buffer, ReceivedByte);
- 5fc: 8e e7 ldi r24, 0x7E ; 126
+ 5fc: 82 e5 ldi r24, 0x52 ; 82
5fe: 91 e0 ldi r25, 0x01 ; 1
600: b7 dd rcall .-1170 ; 0x170 <RingBuffer_Insert>
static inline uint_reg_t GetGlobalInterruptMask(void)
#if (ARCH == ARCH_AVR8)
cli();
604: f8 94 cli
- 606: 80 91 14 02 lds r24, 0x0214
- 60a: 90 91 15 02 lds r25, 0x0215
+ 606: 80 91 e8 01 lds r24, 0x01E8
+ 60a: 90 91 e9 01 lds r25, 0x01E9
static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState)
{
GCC_MEMORY_BARRIER();
{
#if !defined(CONTROL_ONLY_DEVICE)
UENUM = (Address & ENDPOINT_EPNUM_MASK);
- 614: 20 91 55 01 lds r18, 0x0155
+ 614: 20 91 29 01 lds r18, 0x0129
618: 2f 70 andi r18, 0x0F ; 15
61a: 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 uint8_t RingBuffer_Peek(RingBuffer_t* const Buffer)
{
return *Buffer->Out;
- 634: e0 91 0c 02 lds r30, 0x020C
- 638: f0 91 0d 02 lds r31, 0x020D
+ 634: e0 91 e0 01 lds r30, 0x01E0
+ 638: f0 91 e1 01 lds r31, 0x01E1
{
/* 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,
- 63c: 84 e5 ldi r24, 0x54 ; 84
+ 63c: 88 e2 ldi r24, 0x28 ; 40
63e: 91 e0 ldi r25, 0x01 ; 1
640: 60 81 ld r22, Z
- 642: 0e 94 5f 0c call 0x18be ; 0x18be <CDC_Device_SendByte>
+ 642: 0e 94 97 0c call 0x192e ; 0x192e <CDC_Device_SendByte>
646: 11 50 subi r17, 0x01 ; 1
648: 88 23 and r24, r24
64a: 29 f4 brne .+10 ; 0x656 <Usb2SerialTask+0x86>
/* Dequeue the already sent byte from the buffer now we have confirmed that no transmission error occurred */
RingBuffer_Remove(&USARTtoUSB_Buffer);
- 64c: 8a e0 ldi r24, 0x0A ; 10
- 64e: 92 e0 ldi r25, 0x02 ; 2
+ 64c: 8e ed ldi r24, 0xDE ; 222
+ 64e: 91 e0 ldi r25, 0x01 ; 1
650: aa dd rcall .-1196 ; 0x1a6 <RingBuffer_Remove>
/* 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 */
// sendPayload(&dummy,1,0);
// }
CDC_Device_USBTask(&VirtualSerial_CDC_Interface);
- 656: 84 e5 ldi r24, 0x54 ; 84
+ 656: 88 e2 ldi r24, 0x28 ; 40
658: 91 e0 ldi r25, 0x01 ; 1
- 65a: 0e 94 b9 0c call 0x1972 ; 0x1972 <CDC_Device_USBTask>
+ 65a: 0e 94 f1 0c call 0x19e2 ; 0x19e2 <CDC_Device_USBTask>
USB_USBTask();
- 65e: 0e 94 73 0b call 0x16e6 ; 0x16e6 <USB_USBTask>
+ 65e: 0e 94 ab 0b call 0x1756 ; 0x1756 <USB_USBTask>
}
662: 1f 91 pop r17
// LEDs_Init();
USB_Init();
}
- 68e: da c5 rjmp .+2996 ; 0x1244 <USB_Init>
+ 68e: 12 c6 rjmp .+3108 ; 0x12b4 <USB_Init>
00000690 <EVENT_USB_Device_Connect>:
bool ConfigSuccess = true;
ConfigSuccess &= CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface);
- 694: 84 e5 ldi r24, 0x54 ; 84
+ 694: 88 e2 ldi r24, 0x28 ; 40
696: 91 e0 ldi r25, 0x01 ; 1
- 698: 0c 94 3b 0c jmp 0x1876 ; 0x1876 <CDC_Device_ConfigureEndpoints>
+ 698: 0c 94 73 0c jmp 0x18e6 ; 0x18e6 <CDC_Device_ConfigureEndpoints>
0000069c <EVENT_USB_Device_ControlRequest>:
}
void EVENT_USB_Device_ControlRequest(void)
{
CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface);
- 69c: 84 e5 ldi r24, 0x54 ; 84
+ 69c: 88 e2 ldi r24, 0x28 ; 40
69e: 91 e0 ldi r25, 0x01 ; 1
- 6a0: 0c 94 8e 0b jmp 0x171c ; 0x171c <CDC_Device_ProcessControlRequest>
+ 6a0: 0c 94 c6 0b jmp 0x178c ; 0x178c <CDC_Device_ProcessControlRequest>
000006a4 <__vector_23>:
6cc: 84 30 cpi r24, 0x04 ; 4
6ce: 19 f4 brne .+6 ; 0x6d6 <__vector_23+0x32>
RingBuffer_Insert(&USARTtoUSB_Buffer, ReceivedByte);
- 6d0: 8a e0 ldi r24, 0x0A ; 10
- 6d2: 92 e0 ldi r25, 0x02 ; 2
+ 6d0: 8e ed ldi r24, 0xDE ; 222
+ 6d2: 91 e0 ldi r25, 0x01 ; 1
6d4: 4d dd rcall .-1382 ; 0x170 <RingBuffer_Insert>
}
6d6: ff 91 pop r31
710: a2 30 cpi r26, 0x02 ; 2
712: 28 f4 brcc .+10 ; 0x71e <EVENT_CDC_Device_LineEncodingChanged+0x26>
714: b0 e0 ldi r27, 0x00 ; 0
- 716: ad 58 subi r26, 0x8D ; 141
+ 716: a9 5b subi r26, 0xB9 ; 185
718: be 4f sbci r27, 0xFE ; 254
71a: 1c 91 ld r17, X
71c: 01 c0 rjmp .+2 ; 0x720 <EVENT_CDC_Device_LineEncodingChanged+0x28>
75a: 87 95 ror r24
75c: 77 95 ror r23
75e: 67 95 ror r22
- 760: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf>
+ 760: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf>
764: 20 e0 ldi r18, 0x00 ; 0
766: 34 e2 ldi r19, 0x24 ; 36
768: 44 ef ldi r20, 0xF4 ; 244
76a: 59 e4 ldi r21, 0x49 ; 73
- 76c: 0e 94 ff 0c call 0x19fe ; 0x19fe <__addsf3>
+ 76c: 0e 94 37 0d call 0x1a6e ; 0x1a6e <__addsf3>
770: 4b 01 movw r8, r22
772: 5c 01 movw r10, r24
774: c7 01 movw r24, r14
776: b6 01 movw r22, r12
- 778: 0e 94 fb 0d call 0x1bf6 ; 0x1bf6 <__floatunsisf>
+ 778: 0e 94 33 0e call 0x1c66 ; 0x1c66 <__floatunsisf>
77c: 9b 01 movw r18, r22
77e: ac 01 movw r20, r24
780: c5 01 movw r24, r10
782: b4 01 movw r22, r8
- 784: 0e 94 67 0d call 0x1ace ; 0x1ace <__divsf3>
+ 784: 0e 94 9f 0d call 0x1b3e ; 0x1b3e <__divsf3>
788: 20 e0 ldi r18, 0x00 ; 0
78a: 30 e0 ldi r19, 0x00 ; 0
78c: 40 e8 ldi r20, 0x80 ; 128
78e: 5f e3 ldi r21, 0x3F ; 63
- 790: 0e 94 fe 0c call 0x19fc ; 0x19fc <__subsf3>
- 794: 0e 94 cf 0d call 0x1b9e ; 0x1b9e <__fixunssfsi>
+ 790: 0e 94 36 0d call 0x1a6c ; 0x1a6c <__subsf3>
+ 794: 0e 94 07 0e call 0x1c0e ; 0x1c0e <__fixunssfsi>
798: 70 93 cd 00 sts 0x00CD, r23
79c: 60 93 cc 00 sts 0x00CC, r22
7c8: 84 30 cpi r24, 0x04 ; 4
7ca: 19 f4 brne .+6 ; 0x7d2 <uart_putc+0xe>
RingBuffer_Insert(&USARTtoUSB_Buffer, data);
- 7cc: 8a e0 ldi r24, 0x0A ; 10
- 7ce: 92 e0 ldi r25, 0x02 ; 2
+ 7cc: 8e ed ldi r24, 0xDE ; 222
+ 7ce: 91 e0 ldi r25, 0x01 ; 1
7d0: cf cc rjmp .-1634 ; 0x170 <RingBuffer_Insert>
7d2: 08 95 ret
// convert an unsigned integer to string
-void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) {
+void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits, char leading_char) {
7fa: 2f 92 push r2
7fc: 3f 92 push r3
7fe: 4f 92 push r4
818: 1f 93 push r17
81a: cf 93 push r28
81c: df 93 push r29
- 81e: 7b 01 movw r14, r22
- 820: 8c 01 movw r16, r24
+ 81e: 6b 01 movw r12, r22
+ 820: 7c 01 movw r14, r24
int8_t i; // schleifenzähler
string[no_digits] = '\0'; // String Terminator
82a: f9 1f adc r31, r25
82c: 10 82 st Z, r1
for (i = (no_digits - 1); i >= 0; i--) {
- 82e: d2 2e mov r13, r18
- 830: da 94 dec r13
+ 82e: 12 2f mov r17, r18
+ 830: 11 50 subi r17, 0x01 ; 1
}/* uart_puts */
// convert an unsigned integer to string
-void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) {
- 832: 4d 2c mov r4, r13
+void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits, char leading_char) {
+ 832: 41 2e mov r4, r17
834: 55 24 eor r5, r5
836: 47 fc sbrc r4, 7
838: 50 94 com r5
840: aa 24 eor r10, r10
842: bb 24 eor r11, r11
if (zahl == 0 && i < (no_digits - 1)) {
- string[i] = ' ';
+ string[i] = leading_char;
} else {
string[i] = (zahl % 10) + '0';
- 844: aa e0 ldi r26, 0x0A ; 10
- 846: 6a 2e mov r6, r26
+ 844: fa e0 ldi r31, 0x0A ; 10
+ 846: 6f 2e mov r6, r31
848: 71 2c mov r7, r1
84a: 81 2c mov r8, r1
84c: 91 2c mov r9, r1
-void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) {
+void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits, char leading_char) {
int8_t i; // schleifenzähler
string[no_digits] = '\0'; // String Terminator
850: 08 94 sec
852: 21 08 sbc r2, r1
854: 31 08 sbc r3, r1
- string[i] = ' ';
- 856: f0 e2 ldi r31, 0x20 ; 32
- 858: cf 2e mov r12, r31
// convert an unsigned integer to string
-void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) {
+void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits, char leading_char) {
int8_t i; // schleifenzähler
string[no_digits] = '\0'; // String Terminator
for (i = (no_digits - 1); i >= 0; i--) {
- 85a: 22 c0 rjmp .+68 ; 0x8a0 <my_uitoa+0xa6>
+ 856: 22 c0 rjmp .+68 ; 0x89c <my_uitoa+0xa2>
if (zahl == 0 && i < (no_digits - 1)) {
- 85c: e1 14 cp r14, r1
+ 858: c1 14 cp r12, r1
+ 85a: d1 04 cpc r13, r1
+ 85c: e1 04 cpc r14, r1
85e: f1 04 cpc r15, r1
- 860: 01 05 cpc r16, r1
- 862: 11 05 cpc r17, r1
- 864: 41 f4 brne .+16 ; 0x876 <my_uitoa+0x7c>
+ 860: 41 f4 brne .+16 ; 0x872 <my_uitoa+0x78>
}/* uart_puts */
// convert an unsigned integer to string
-void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) {
- 866: c5 01 movw r24, r10
- 868: 84 0d add r24, r4
- 86a: 95 1d adc r25, r5
+void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits, char leading_char) {
+ 862: c5 01 movw r24, r10
+ 864: 84 0d add r24, r4
+ 866: 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)) {
- 86c: 82 15 cp r24, r2
- 86e: 93 05 cpc r25, r3
- 870: 14 f4 brge .+4 ; 0x876 <my_uitoa+0x7c>
- string[i] = ' ';
- 872: c8 82 st Y, r12
- 874: 08 c0 rjmp .+16 ; 0x886 <my_uitoa+0x8c>
+ 868: 82 15 cp r24, r2
+ 86a: 93 05 cpc r25, r3
+ 86c: 14 f4 brge .+4 ; 0x872 <my_uitoa+0x78>
+ string[i] = leading_char;
+ 86e: 08 83 st Y, r16
+ 870: 08 c0 rjmp .+16 ; 0x882 <my_uitoa+0x88>
} else {
string[i] = (zahl % 10) + '0';
- 876: c8 01 movw r24, r16
- 878: b7 01 movw r22, r14
- 87a: a4 01 movw r20, r8
- 87c: 93 01 movw r18, r6
- 87e: 0e 94 ea 0e call 0x1dd4 ; 0x1dd4 <__udivmodsi4>
- 882: 60 5d subi r22, 0xD0 ; 208
- 884: 68 83 st Y, r22
+ 872: c7 01 movw r24, r14
+ 874: b6 01 movw r22, r12
+ 876: a4 01 movw r20, r8
+ 878: 93 01 movw r18, r6
+ 87a: 0e 94 22 0f call 0x1e44 ; 0x1e44 <__udivmodsi4>
+ 87e: 60 5d subi r22, 0xD0 ; 208
+ 880: 68 83 st Y, r22
} // Modulo rechnen, dann den ASCII-Code von '0' addieren
zahl /= 10;
- 886: c8 01 movw r24, r16
- 888: b7 01 movw r22, r14
- 88a: a4 01 movw r20, r8
- 88c: 93 01 movw r18, r6
- 88e: 0e 94 ea 0e call 0x1dd4 ; 0x1dd4 <__udivmodsi4>
- 892: 79 01 movw r14, r18
- 894: 8a 01 movw r16, r20
+ 882: c7 01 movw r24, r14
+ 884: b6 01 movw r22, r12
+ 886: a4 01 movw r20, r8
+ 888: 93 01 movw r18, r6
+ 88a: 0e 94 22 0f call 0x1e44 ; 0x1e44 <__udivmodsi4>
+ 88e: 69 01 movw r12, r18
+ 890: 7a 01 movw r14, r20
// convert an unsigned integer to string
-void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) {
+void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits, char leading_char) {
int8_t i; // schleifenzähler
string[no_digits] = '\0'; // String Terminator
for (i = (no_digits - 1); i >= 0; i--) {
- 896: da 94 dec r13
- 898: 21 97 sbiw r28, 0x01 ; 1
- 89a: 08 94 sec
- 89c: a1 08 sbc r10, r1
- 89e: b1 08 sbc r11, r1
- 8a0: d7 fe sbrs r13, 7
- 8a2: dc cf rjmp .-72 ; 0x85c <my_uitoa+0x62>
+ 892: 11 50 subi r17, 0x01 ; 1
+ 894: 21 97 sbiw r28, 0x01 ; 1
+ 896: 08 94 sec
+ 898: a1 08 sbc r10, r1
+ 89a: b1 08 sbc r11, r1
+ 89c: 17 ff sbrs r17, 7
+ 89e: dc cf rjmp .-72 ; 0x858 <my_uitoa+0x5e>
string[i] = (zahl % 10) + '0';
} // Modulo rechnen, dann den ASCII-Code von '0' addieren
zahl /= 10;
}
}
- 8a4: df 91 pop r29
- 8a6: cf 91 pop r28
- 8a8: 1f 91 pop r17
- 8aa: 0f 91 pop r16
- 8ac: ff 90 pop r15
- 8ae: ef 90 pop r14
- 8b0: df 90 pop r13
- 8b2: cf 90 pop r12
- 8b4: bf 90 pop r11
- 8b6: af 90 pop r10
- 8b8: 9f 90 pop r9
- 8ba: 8f 90 pop r8
- 8bc: 7f 90 pop r7
- 8be: 6f 90 pop r6
- 8c0: 5f 90 pop r5
- 8c2: 4f 90 pop r4
- 8c4: 3f 90 pop r3
- 8c6: 2f 90 pop r2
- 8c8: 08 95 ret
-
-000008ca <sign>:
+ 8a0: df 91 pop r29
+ 8a2: cf 91 pop r28
+ 8a4: 1f 91 pop r17
+ 8a6: 0f 91 pop r16
+ 8a8: ff 90 pop r15
+ 8aa: ef 90 pop r14
+ 8ac: df 90 pop r13
+ 8ae: cf 90 pop r12
+ 8b0: bf 90 pop r11
+ 8b2: af 90 pop r10
+ 8b4: 9f 90 pop r9
+ 8b6: 8f 90 pop r8
+ 8b8: 7f 90 pop r7
+ 8ba: 6f 90 pop r6
+ 8bc: 5f 90 pop r5
+ 8be: 4f 90 pop r4
+ 8c0: 3f 90 pop r3
+ 8c2: 2f 90 pop r2
+ 8c4: 08 95 ret
+
+000008c6 <sign>:
int8_t sign(int16_t x) {
return (x > 0) - (x < 0);
- 8ca: 21 e0 ldi r18, 0x01 ; 1
- 8cc: 18 16 cp r1, r24
- 8ce: 19 06 cpc r1, r25
- 8d0: 0c f0 brlt .+2 ; 0x8d4 <sign+0xa>
- 8d2: 20 e0 ldi r18, 0x00 ; 0
- 8d4: 89 2f mov r24, r25
+ 8c6: 21 e0 ldi r18, 0x01 ; 1
+ 8c8: 18 16 cp r1, r24
+ 8ca: 19 06 cpc r1, r25
+ 8cc: 0c f0 brlt .+2 ; 0x8d0 <sign+0xa>
+ 8ce: 20 e0 ldi r18, 0x00 ; 0
+ 8d0: 89 2f mov r24, r25
+ 8d2: 88 1f adc r24, r24
+ 8d4: 88 27 eor r24, r24
8d6: 88 1f adc r24, r24
- 8d8: 88 27 eor r24, r24
- 8da: 88 1f adc r24, r24
}
- 8dc: 28 1b sub r18, r24
- 8de: 82 2f mov r24, r18
- 8e0: 08 95 ret
-
-000008e2 <uart_print_number>:
-
-
-void uart_print_number(uint32_t zahl, uint8_t no_digits) {
- 8e2: 24 2f mov r18, r20
- my_uitoa(abs(zahl),stringbuffer,no_digits);
- 8e4: 77 ff sbrs r23, 7
- 8e6: 03 c0 rjmp .+6 ; 0x8ee <uart_print_number+0xc>
- 8e8: 70 95 com r23
- 8ea: 61 95 neg r22
- 8ec: 7f 4f sbci r23, 0xFF ; 255
- 8ee: 88 27 eor r24, r24
- 8f0: 77 fd sbrc r23, 7
- 8f2: 80 95 com r24
- 8f4: 98 2f mov r25, r24
- 8f6: 42 ed ldi r20, 0xD2 ; 210
- 8f8: 52 e0 ldi r21, 0x02 ; 2
+ 8d8: 28 1b sub r18, r24
+ 8da: 82 2f mov r24, r18
+ 8dc: 08 95 ret
+
+000008de <uart_print_number_wlzeros>:
+ my_uitoa(abs(zahl),stringbuffer,no_digits,' ');
+ uart_puts(stringbuffer);
+}
+
+
+void uart_print_number_wlzeros(uint32_t zahl, uint8_t no_digits) {
+ 8de: 0f 93 push r16
+ 8e0: 24 2f mov r18, r20
+ my_uitoa(abs(zahl),stringbuffer,no_digits,'0');
+ 8e2: 77 ff sbrs r23, 7
+ 8e4: 03 c0 rjmp .+6 ; 0x8ec <uart_print_number_wlzeros+0xe>
+ 8e6: 70 95 com r23
+ 8e8: 61 95 neg r22
+ 8ea: 7f 4f sbci r23, 0xFF ; 255
+ 8ec: 88 27 eor r24, r24
+ 8ee: 77 fd sbrc r23, 7
+ 8f0: 80 95 com r24
+ 8f2: 98 2f mov r25, r24
+ 8f4: 46 eb ldi r20, 0xB6 ; 182
+ 8f6: 52 e0 ldi r21, 0x02 ; 2
+ 8f8: 00 e3 ldi r16, 0x30 ; 48
8fa: 7f df rcall .-258 ; 0x7fa <my_uitoa>
uart_puts(stringbuffer);
- 8fc: 82 ed ldi r24, 0xD2 ; 210
+ 8fc: 86 eb ldi r24, 0xB6 ; 182
8fe: 92 e0 ldi r25, 0x02 ; 2
-
+ 900: 69 df rcall .-302 ; 0x7d4 <uart_puts>
}
- 900: 69 cf rjmp .-302 ; 0x7d4 <uart_puts>
+ 902: 0f 91 pop r16
+ 904: 08 95 ret
+
+00000906 <uart_print_signed_number>:
-00000902 <uart_print_signed_number>:
void uart_print_signed_number(uint32_t zahl, uint8_t no_digits) {
- 902: 0f 93 push r16
- 904: 1f 93 push r17
- 906: 24 2f mov r18, r20
- my_uitoa(abs(zahl),stringbuffer,no_digits);
- 908: 8b 01 movw r16, r22
- 90a: 77 ff sbrs r23, 7
- 90c: 03 c0 rjmp .+6 ; 0x914 <uart_print_signed_number+0x12>
- 90e: 70 95 com r23
- 910: 61 95 neg r22
- 912: 7f 4f sbci r23, 0xFF ; 255
- 914: 88 27 eor r24, r24
- 916: 77 fd sbrc r23, 7
- 918: 80 95 com r24
- 91a: 98 2f mov r25, r24
- 91c: 42 ed ldi r20, 0xD2 ; 210
- 91e: 52 e0 ldi r21, 0x02 ; 2
- 920: 6c df rcall .-296 ; 0x7fa <my_uitoa>
+ 906: ff 92 push r15
+ 908: 0f 93 push r16
+ 90a: 1f 93 push r17
+ 90c: 24 2f mov r18, r20
+ my_uitoa(abs(zahl),stringbuffer,no_digits,' ');
+ 90e: f6 2e mov r15, r22
+ 910: 17 2f mov r17, r23
+ 912: 77 ff sbrs r23, 7
+ 914: 03 c0 rjmp .+6 ; 0x91c <uart_print_signed_number+0x16>
+ 916: 70 95 com r23
+ 918: 61 95 neg r22
+ 91a: 7f 4f sbci r23, 0xFF ; 255
+ 91c: 88 27 eor r24, r24
+ 91e: 77 fd sbrc r23, 7
+ 920: 80 95 com r24
+ 922: 98 2f mov r25, r24
+ 924: 46 eb ldi r20, 0xB6 ; 182
+ 926: 52 e0 ldi r21, 0x02 ; 2
+ 928: 00 e2 ldi r16, 0x20 ; 32
+ 92a: 67 df rcall .-306 ; 0x7fa <my_uitoa>
if (sign(zahl) < 0) {
- 922: c8 01 movw r24, r16
- 924: d2 df rcall .-92 ; 0x8ca <sign>
- 926: 87 ff sbrs r24, 7
- 928: 02 c0 rjmp .+4 ; 0x92e <uart_print_signed_number+0x2c>
+ 92c: 8f 2d mov r24, r15
+ 92e: 91 2f mov r25, r17
+ 930: ca df rcall .-108 ; 0x8c6 <sign>
+ 932: 87 ff sbrs r24, 7
+ 934: 02 c0 rjmp .+4 ; 0x93a <uart_print_signed_number+0x34>
uart_putc('-');
- 92a: 8d e2 ldi r24, 0x2D ; 45
- 92c: 01 c0 rjmp .+2 ; 0x930 <uart_print_signed_number+0x2e>
+ 936: 8d e2 ldi r24, 0x2D ; 45
+ 938: 01 c0 rjmp .+2 ; 0x93c <uart_print_signed_number+0x36>
} else {
uart_putc('+');
- 92e: 8b e2 ldi r24, 0x2B ; 43
- 930: 49 df rcall .-366 ; 0x7c4 <uart_putc>
+ 93a: 8b e2 ldi r24, 0x2B ; 43
+ 93c: 43 df rcall .-378 ; 0x7c4 <uart_putc>
}
uart_puts(stringbuffer);
- 932: 82 ed ldi r24, 0xD2 ; 210
- 934: 92 e0 ldi r25, 0x02 ; 2
- 936: 4e df rcall .-356 ; 0x7d4 <uart_puts>
+ 93e: 86 eb ldi r24, 0xB6 ; 182
+ 940: 92 e0 ldi r25, 0x02 ; 2
+ 942: 48 df rcall .-368 ; 0x7d4 <uart_puts>
}
- 938: 1f 91 pop r17
- 93a: 0f 91 pop r16
- 93c: 08 95 ret
+ 944: 1f 91 pop r17
+ 946: 0f 91 pop r16
+ 948: ff 90 pop r15
+ 94a: 08 95 ret
-0000093e <init_motors>:
+0000094c <init_motors>:
PORTY2 |= ((byte & (1<<2))>>2)<<Y2;
PORTY3 |= ((byte & (1<<3))>>3)<<Y3;
}
void init_motors(void){
set_x(0);
- 93e: 80 e0 ldi r24, 0x00 ; 0
- 940: 4b dc rcall .-1898 ; 0x1d8 <set_x>
+ 94c: 80 e0 ldi r24, 0x00 ; 0
+ 94e: 44 dc rcall .-1912 ; 0x1d8 <set_x>
set_y(0);
- 942: 80 e0 ldi r24, 0x00 ; 0
- 944: 84 dc rcall .-1784 ; 0x24e <set_y>
+ 950: 80 e0 ldi r24, 0x00 ; 0
+ 952: 7d dc rcall .-1798 ; 0x24e <set_y>
DDRX0 |= (1<<X0);
- 946: 22 9a sbi 0x04, 2 ; 4
+ 954: 22 9a sbi 0x04, 2 ; 4
DDRX1 |= (1<<X1);
- 948: 23 9a sbi 0x04, 3 ; 4
+ 956: 23 9a sbi 0x04, 3 ; 4
DDRX2 |= (1<<X2);
- 94a: 24 9a sbi 0x04, 4 ; 4
+ 958: 24 9a sbi 0x04, 4 ; 4
DDRX3 |= (1<<X3);
- 94c: 25 9a sbi 0x04, 5 ; 4
+ 95a: 25 9a sbi 0x04, 5 ; 4
DDRY0 |= (1<<Y0);
- 94e: 27 9a sbi 0x04, 7 ; 4
+ 95c: 27 9a sbi 0x04, 7 ; 4
DDRY1 |= (1<<Y1);
- 950: 26 9a sbi 0x04, 6 ; 4
+ 95e: 26 9a sbi 0x04, 6 ; 4
DDRY2 |= (1<<Y2);
- 952: 3f 9a sbi 0x07, 7 ; 7
+ 960: 3f 9a sbi 0x07, 7 ; 7
DDRY3 |= (1<<Y3);
- 954: 3e 9a sbi 0x07, 6 ; 7
+ 962: 3e 9a sbi 0x07, 6 ; 7
}
- 956: 08 95 ret
+ 964: 08 95 ret
-00000958 <motor_step>:
+00000966 <motor_step>:
uint8_t motor_step(uint8_t motor, int8_t direction) { // motor: M1 or M2, direction +1 or -1, 0 for coil deactivation
- 958: 0f 93 push r16
- 95a: 1f 93 push r17
- 95c: 16 2f mov r17, r22
- 95e: 82 30 cpi r24, 0x02 ; 2
- 960: 50 f4 brcc .+20 ; 0x976 <motor_step+0x1e>
- 962: a8 2f mov r26, r24
- 964: b0 e0 ldi r27, 0x00 ; 0
- 966: aa 0f add r26, r26
- 968: bb 1f adc r27, r27
- 96a: ab 58 subi r26, 0x8B ; 139
- 96c: be 4f sbci r27, 0xFE ; 254
- 96e: 2d 91 ld r18, X+
- 970: 3c 91 ld r19, X
- 972: 11 97 sbiw r26, 0x01 ; 1
- 974: 02 c0 rjmp .+4 ; 0x97a <motor_step+0x22>
- 976: 2c ee ldi r18, 0xEC ; 236
- 978: 30 e0 ldi r19, 0x00 ; 0
+ 966: 0f 93 push r16
+ 968: 1f 93 push r17
+ 96a: 16 2f mov r17, r22
+ 96c: 82 30 cpi r24, 0x02 ; 2
+ 96e: 50 f4 brcc .+20 ; 0x984 <motor_step+0x1e>
+ 970: a8 2f mov r26, r24
+ 972: b0 e0 ldi r27, 0x00 ; 0
+ 974: aa 0f add r26, r26
+ 976: bb 1f adc r27, r27
+ 978: a7 5b subi r26, 0xB7 ; 183
+ 97a: be 4f sbci r27, 0xFE ; 254
+ 97c: 2d 91 ld r18, X+
+ 97e: 3c 91 ld r19, X
+ 980: 11 97 sbiw r26, 0x01 ; 1
+ 982: 02 c0 rjmp .+4 ; 0x988 <motor_step+0x22>
+ 984: 2c ee ldi r18, 0xEC ; 236
+ 986: 30 e0 ldi r19, 0x00 ; 0
case Y:
setport = &set_y;
break;
}
next_phase = (phase_memory[motor] + 4 + direction) % 4;
- 97a: e8 2f mov r30, r24
- 97c: f0 e0 ldi r31, 0x00 ; 0
- 97e: 81 2f mov r24, r17
- 980: 99 27 eor r25, r25
- 982: 87 fd sbrc r24, 7
- 984: 90 95 com r25
- 986: 04 96 adiw r24, 0x04 ; 4
- 988: ee 53 subi r30, 0x3E ; 62
- 98a: fd 4f sbci r31, 0xFD ; 253
- 98c: 40 81 ld r20, Z
- 98e: 84 0f add r24, r20
- 990: 91 1d adc r25, r1
- 992: 64 e0 ldi r22, 0x04 ; 4
- 994: 70 e0 ldi r23, 0x00 ; 0
- 996: 0e 94 d7 0e call 0x1dae ; 0x1dae <__divmodhi4>
+ 988: e8 2f mov r30, r24
+ 98a: f0 e0 ldi r31, 0x00 ; 0
+ 98c: 81 2f mov r24, r17
+ 98e: 99 27 eor r25, r25
+ 990: 87 fd sbrc r24, 7
+ 992: 90 95 com r25
+ 994: 04 96 adiw r24, 0x04 ; 4
+ 996: ea 55 subi r30, 0x5A ; 90
+ 998: fd 4f sbci r31, 0xFD ; 253
+ 99a: 40 81 ld r20, Z
+ 99c: 84 0f add r24, r20
+ 99e: 91 1d adc r25, r1
+ 9a0: 64 e0 ldi r22, 0x04 ; 4
+ 9a2: 70 e0 ldi r23, 0x00 ; 0
+ 9a4: 0e 94 0f 0f call 0x1e1e ; 0x1e1e <__divmodhi4>
phase_memory[motor] = next_phase;
- 99a: 80 83 st Z, r24
+ 9a8: 80 83 st Z, r24
next_pattern = phase_pattern[next_phase];
- 99c: e8 2f mov r30, r24
- 99e: f0 e0 ldi r31, 0x00 ; 0
- 9a0: e1 59 subi r30, 0x91 ; 145
- 9a2: fe 4f sbci r31, 0xFE ; 254
- 9a4: 00 81 ld r16, Z
+ 9aa: e8 2f mov r30, r24
+ 9ac: f0 e0 ldi r31, 0x00 ; 0
+ 9ae: ed 5b subi r30, 0xBD ; 189
+ 9b0: fe 4f sbci r31, 0xFE ; 254
+ 9b2: 00 81 ld r16, Z
if (direction != 0) {
- 9a6: 11 23 and r17, r17
- 9a8: 11 f0 breq .+4 ; 0x9ae <motor_step+0x56>
+ 9b4: 11 23 and r17, r17
+ 9b6: 11 f0 breq .+4 ; 0x9bc <motor_step+0x56>
(*setport)(next_pattern);
- 9aa: 80 2f mov r24, r16
- 9ac: 01 c0 rjmp .+2 ; 0x9b0 <motor_step+0x58>
+ 9b8: 80 2f mov r24, r16
+ 9ba: 01 c0 rjmp .+2 ; 0x9be <motor_step+0x58>
} else {
(*setport)(0);
- 9ae: 80 e0 ldi r24, 0x00 ; 0
- 9b0: f9 01 movw r30, r18
- 9b2: 09 95 icall
+ 9bc: 80 e0 ldi r24, 0x00 ; 0
+ 9be: f9 01 movw r30, r18
+ 9c0: 09 95 icall
}
return next_pattern;
}
- 9b4: 80 2f mov r24, r16
- 9b6: 1f 91 pop r17
- 9b8: 0f 91 pop r16
- 9ba: 08 95 ret
+ 9c2: 80 2f mov r24, r16
+ 9c4: 1f 91 pop r17
+ 9c6: 0f 91 pop r16
+ 9c8: 08 95 ret
-000009bc <move_plate>:
+000009ca <move_plate>:
return val;
}
uint8_t move_plate(int16_t dx, int16_t dy){
- 9bc: 0f 93 push r16
- 9be: 1f 93 push r17
+ 9ca: 0f 93 push r16
+ 9cc: 1f 93 push r17
static int16_t todo_x,todo_y = 0;
int8_t signum;
uint8_t returnval = 0;
todo_x += dx;
- 9c0: 20 91 c0 02 lds r18, 0x02C0
- 9c4: 30 91 c1 02 lds r19, 0x02C1
- 9c8: 28 0f add r18, r24
- 9ca: 39 1f adc r19, r25
- 9cc: 30 93 c1 02 sts 0x02C1, r19
- 9d0: 20 93 c0 02 sts 0x02C0, r18
+ 9ce: 20 91 a4 02 lds r18, 0x02A4
+ 9d2: 30 91 a5 02 lds r19, 0x02A5
+ 9d6: 28 0f add r18, r24
+ 9d8: 39 1f adc r19, r25
+ 9da: 30 93 a5 02 sts 0x02A5, r19
+ 9de: 20 93 a4 02 sts 0x02A4, r18
todo_y += dy;
- 9d4: 80 91 be 02 lds r24, 0x02BE
- 9d8: 90 91 bf 02 lds r25, 0x02BF
- 9dc: 86 0f add r24, r22
- 9de: 97 1f adc r25, r23
- 9e0: 90 93 bf 02 sts 0x02BF, r25
- 9e4: 80 93 be 02 sts 0x02BE, r24
+ 9e2: 80 91 a2 02 lds r24, 0x02A2
+ 9e6: 90 91 a3 02 lds r25, 0x02A3
+ 9ea: 86 0f add r24, r22
+ 9ec: 97 1f adc r25, r23
+ 9ee: 90 93 a3 02 sts 0x02A3, r25
+ 9f2: 80 93 a2 02 sts 0x02A2, r24
signum = sign(todo_x);
- 9e8: c9 01 movw r24, r18
- 9ea: 6f df rcall .-290 ; 0x8ca <sign>
- 9ec: 08 2f mov r16, r24
+ 9f6: c9 01 movw r24, r18
+ 9f8: 66 df rcall .-308 ; 0x8c6 <sign>
+ 9fa: 08 2f mov r16, r24
uint8_t move_plate(int16_t dx, int16_t dy){
static int16_t todo_x,todo_y = 0;
int8_t signum;
uint8_t returnval = 0;
- 9ee: 11 e0 ldi r17, 0x01 ; 1
- 9f0: 88 23 and r24, r24
- 9f2: 09 f4 brne .+2 ; 0x9f6 <move_plate+0x3a>
- 9f4: 10 e0 ldi r17, 0x00 ; 0
+ 9fc: 11 e0 ldi r17, 0x01 ; 1
+ 9fe: 88 23 and r24, r24
+ a00: 09 f4 brne .+2 ; 0xa04 <move_plate+0x3a>
+ a02: 10 e0 ldi r17, 0x00 ; 0
signum = sign(todo_x);
if(signum != 0) {
returnval++;
}
motor_step(X,signum);
- 9f6: 80 e0 ldi r24, 0x00 ; 0
- 9f8: 60 2f mov r22, r16
- 9fa: ae df rcall .-164 ; 0x958 <motor_step>
+ a04: 80 e0 ldi r24, 0x00 ; 0
+ a06: 60 2f mov r22, r16
+ a08: ae df rcall .-164 ; 0x966 <motor_step>
todo_x -= signum;
- 9fc: 60 2f mov r22, r16
- 9fe: 77 27 eor r23, r23
- a00: 67 fd sbrc r22, 7
- a02: 70 95 com r23
- a04: 20 91 c0 02 lds r18, 0x02C0
- a08: 30 91 c1 02 lds r19, 0x02C1
- a0c: 26 1b sub r18, r22
- a0e: 37 0b sbc r19, r23
- a10: 30 93 c1 02 sts 0x02C1, r19
- a14: 20 93 c0 02 sts 0x02C0, r18
+ a0a: 60 2f mov r22, r16
+ a0c: 77 27 eor r23, r23
+ a0e: 67 fd sbrc r22, 7
+ a10: 70 95 com r23
+ a12: 20 91 a4 02 lds r18, 0x02A4
+ a16: 30 91 a5 02 lds r19, 0x02A5
+ a1a: 26 1b sub r18, r22
+ a1c: 37 0b sbc r19, r23
+ a1e: 30 93 a5 02 sts 0x02A5, r19
+ a22: 20 93 a4 02 sts 0x02A4, r18
signum = sign(todo_y);
- a18: 80 91 be 02 lds r24, 0x02BE
- a1c: 90 91 bf 02 lds r25, 0x02BF
- a20: 54 df rcall .-344 ; 0x8ca <sign>
- a22: 08 2f mov r16, r24
+ a26: 80 91 a2 02 lds r24, 0x02A2
+ a2a: 90 91 a3 02 lds r25, 0x02A3
+ a2e: 4b df rcall .-362 ; 0x8c6 <sign>
+ a30: 08 2f mov r16, r24
if(signum != 0) {
- a24: 81 11 cpse r24, r1
+ a32: 81 11 cpse r24, r1
returnval++;
- a26: 1f 5f subi r17, 0xFF ; 255
+ a34: 1f 5f subi r17, 0xFF ; 255
}
motor_step(Y,signum);
- a28: 81 e0 ldi r24, 0x01 ; 1
- a2a: 60 2f mov r22, r16
- a2c: 95 df rcall .-214 ; 0x958 <motor_step>
+ a36: 81 e0 ldi r24, 0x01 ; 1
+ a38: 60 2f mov r22, r16
+ a3a: 95 df rcall .-214 ; 0x966 <motor_step>
todo_y -= signum;
- a2e: 60 2f mov r22, r16
- a30: 77 27 eor r23, r23
- a32: 67 fd sbrc r22, 7
- a34: 70 95 com r23
- a36: 20 91 be 02 lds r18, 0x02BE
- a3a: 30 91 bf 02 lds r19, 0x02BF
- a3e: 26 1b sub r18, r22
- a40: 37 0b sbc r19, r23
- a42: 30 93 bf 02 sts 0x02BF, r19
- a46: 20 93 be 02 sts 0x02BE, r18
+ a3c: 60 2f mov r22, r16
+ a3e: 77 27 eor r23, r23
+ a40: 67 fd sbrc r22, 7
+ a42: 70 95 com r23
+ a44: 20 91 a2 02 lds r18, 0x02A2
+ a48: 30 91 a3 02 lds r19, 0x02A3
+ a4c: 26 1b sub r18, r22
+ a4e: 37 0b sbc r19, r23
+ a50: 30 93 a3 02 sts 0x02A3, r19
+ a54: 20 93 a2 02 sts 0x02A2, r18
return returnval; // busy
}
- a4a: 81 2f mov r24, r17
- a4c: 1f 91 pop r17
- a4e: 0f 91 pop r16
- a50: 08 95 ret
+ a58: 81 2f mov r24, r17
+ a5a: 1f 91 pop r17
+ a5c: 0f 91 pop r16
+ a5e: 08 95 ret
-00000a52 <pos_report>:
+00000a60 <print_steps_in_mm>:
+
+void print_steps_in_mm(int16_t steps) {
+ a60: 0f 93 push r16
+ a62: 1f 93 push r17
+ a64: 8c 01 movw r16, r24
+ int16_t predot,postdot;
+
+ predot = steps/24;
+ a66: 68 e1 ldi r22, 0x18 ; 24
+ a68: 70 e0 ldi r23, 0x00 ; 0
+ a6a: 0e 94 0f 0f call 0x1e1e ; 0x1e1e <__divmodhi4>
+ postdot = ((abs(steps)%24)*417)/10;
+ uart_print_signed_number(predot,3);
+ a6e: 88 27 eor r24, r24
+ a70: 77 fd sbrc r23, 7
+ a72: 80 95 com r24
+ a74: 98 2f mov r25, r24
+ a76: 43 e0 ldi r20, 0x03 ; 3
+ a78: 46 df rcall .-372 ; 0x906 <uart_print_signed_number>
+ uart_putc('.');
+ a7a: 8e e2 ldi r24, 0x2E ; 46
+ a7c: a3 de rcall .-698 ; 0x7c4 <uart_putc>
+
+void print_steps_in_mm(int16_t steps) {
+ int16_t predot,postdot;
+
+ predot = steps/24;
+ postdot = ((abs(steps)%24)*417)/10;
+ a7e: c8 01 movw r24, r16
+ a80: 17 ff sbrs r17, 7
+ a82: 03 c0 rjmp .+6 ; 0xa8a <print_steps_in_mm+0x2a>
+ a84: 90 95 com r25
+ a86: 81 95 neg r24
+ a88: 9f 4f sbci r25, 0xFF ; 255
+ a8a: 68 e1 ldi r22, 0x18 ; 24
+ a8c: 70 e0 ldi r23, 0x00 ; 0
+ a8e: 0e 94 0f 0f call 0x1e1e ; 0x1e1e <__divmodhi4>
+ a92: 61 ea ldi r22, 0xA1 ; 161
+ a94: 71 e0 ldi r23, 0x01 ; 1
+ a96: 0e 94 e9 0e call 0x1dd2 ; 0x1dd2 <__mulhi3>
+ a9a: 6a e0 ldi r22, 0x0A ; 10
+ a9c: 70 e0 ldi r23, 0x00 ; 0
+ a9e: 0e 94 0f 0f call 0x1e1e ; 0x1e1e <__divmodhi4>
+ uart_print_signed_number(predot,3);
+ uart_putc('.');
+ uart_print_number_wlzeros(postdot,3);
+ aa2: 88 27 eor r24, r24
+ aa4: 77 fd sbrc r23, 7
+ aa6: 80 95 com r24
+ aa8: 98 2f mov r25, r24
+ aaa: 43 e0 ldi r20, 0x03 ; 3
+ aac: 18 df rcall .-464 ; 0x8de <uart_print_number_wlzeros>
+
+}
+ aae: 1f 91 pop r17
+ ab0: 0f 91 pop r16
+ ab2: 08 95 ret
+
+00000ab4 <pos_report>:
void pos_report(void){
uart_puts("x_pos: ");
- a52: 80 e0 ldi r24, 0x00 ; 0
- a54: 91 e0 ldi r25, 0x01 ; 1
- a56: be de rcall .-644 ; 0x7d4 <uart_puts>
- uart_print_signed_number(plate_pos_x,6);
- a58: 60 91 7a 01 lds r22, 0x017A
- a5c: 70 91 7b 01 lds r23, 0x017B
- a60: 88 27 eor r24, r24
- a62: 77 fd sbrc r23, 7
- a64: 80 95 com r24
- a66: 98 2f mov r25, r24
- a68: 46 e0 ldi r20, 0x06 ; 6
- a6a: 4b df rcall .-362 ; 0x902 <uart_print_signed_number>
+ ab4: 80 e0 ldi r24, 0x00 ; 0
+ ab6: 91 e0 ldi r25, 0x01 ; 1
+ ab8: 8d de rcall .-742 ; 0x7d4 <uart_puts>
+// uart_print_signed_number(plate_pos_x,6);
+ print_steps_in_mm(plate_pos_x);
+ aba: 80 91 4e 01 lds r24, 0x014E
+ abe: 90 91 4f 01 lds r25, 0x014F
+ ac2: ce df rcall .-100 ; 0xa60 <print_steps_in_mm>
// my_uitoa(plate_pos_x, stringbuffer, 6);
// uart_puts(stringbuffer);
uart_puts(" y_pos: ");
- a6c: 88 e0 ldi r24, 0x08 ; 8
- a6e: 91 e0 ldi r25, 0x01 ; 1
- a70: b1 de rcall .-670 ; 0x7d4 <uart_puts>
- uart_print_signed_number(plate_pos_y,6);
- a72: 60 91 7c 01 lds r22, 0x017C
- a76: 70 91 7d 01 lds r23, 0x017D
- a7a: 88 27 eor r24, r24
- a7c: 77 fd sbrc r23, 7
- a7e: 80 95 com r24
- a80: 98 2f mov r25, r24
- a82: 46 e0 ldi r20, 0x06 ; 6
- a84: 3e df rcall .-388 ; 0x902 <uart_print_signed_number>
+ ac4: 88 e0 ldi r24, 0x08 ; 8
+ ac6: 91 e0 ldi r25, 0x01 ; 1
+ ac8: 85 de rcall .-758 ; 0x7d4 <uart_puts>
+// uart_print_signed_number(plate_pos_y,6);
+ print_steps_in_mm(plate_pos_y);
+ aca: 80 91 50 01 lds r24, 0x0150
+ ace: 90 91 51 01 lds r25, 0x0151
+ ad2: c6 df rcall .-116 ; 0xa60 <print_steps_in_mm>
uart_puts("\r");
- a86: 82 e1 ldi r24, 0x12 ; 18
- a88: 91 e0 ldi r25, 0x01 ; 1
+ ad4: 82 e1 ldi r24, 0x12 ; 18
+ ad6: 91 e0 ldi r25, 0x01 ; 1
}
- a8a: a4 ce rjmp .-696 ; 0x7d4 <uart_puts>
+ ad8: 7d ce rjmp .-774 ; 0x7d4 <uart_puts>
-00000a8c <parse_command>:
+00000ada <parse_command>:
#define POSITION 0
#define GOTO 1
#define MOVEREL 2
#define SETZERO 3
void parse_command(void){
- a8c: cf 92 push r12
- a8e: df 92 push r13
- a90: ef 92 push r14
- a92: ff 92 push r15
- a94: 0f 93 push r16
- a96: 1f 93 push r17
- a98: cf 93 push r28
- a9a: df 93 push r29
+ ada: cf 92 push r12
+ adc: df 92 push r13
+ ade: ef 92 push r14
+ ae0: ff 92 push r15
+ ae2: 0f 93 push r16
+ ae4: 1f 93 push r17
+ ae6: cf 93 push r28
+ ae8: df 93 push r29
static inline uint_reg_t GetGlobalInterruptMask(void)
{
GCC_MEMORY_BARRIER();
#if (ARCH == ARCH_AVR8)
return SREG;
- a9c: 2f b7 in r18, 0x3f ; 63
+ aea: 2f b7 in r18, 0x3f ; 63
static inline void GlobalInterruptDisable(void)
{
GCC_MEMORY_BARRIER();
#if (ARCH == ARCH_AVR8)
cli();
- a9e: f8 94 cli
+ aec: f8 94 cli
uint16_t Count;
uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask();
GlobalInterruptDisable();
Count = Buffer->Count;
- aa0: 80 91 88 01 lds r24, 0x0188
- aa4: 90 91 89 01 lds r25, 0x0189
+ aee: 80 91 5c 01 lds r24, 0x015C
+ af2: 90 91 5d 01 lds r25, 0x015D
static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState)
{
GCC_MEMORY_BARRIER();
#if (ARCH == ARCH_AVR8)
SREG = GlobalIntState;
- aa8: 2f bf out 0x3f, r18 ; 63
+ af6: 2f bf out 0x3f, r18 ; 63
uint8_t action=0,axis=0;
int8_t num_sign = 1;
char byte;
/* Load the next byte from the USART transmit buffer into the USART */
if (!(RingBuffer_IsEmpty(&USBtoUSART_Buffer))) {
- aaa: 00 97 sbiw r24, 0x00 ; 0
- aac: 09 f4 brne .+2 ; 0xab0 <parse_command+0x24>
- aae: 83 c1 rjmp .+774 ; 0xdb6 <parse_command+0x32a>
+ af8: 00 97 sbiw r24, 0x00 ; 0
+ afa: 09 f4 brne .+2 ; 0xafe <parse_command+0x24>
+ afc: 94 c1 rjmp .+808 ; 0xe26 <parse_command+0x34c>
byte = RingBuffer_Remove(&USBtoUSART_Buffer);
- ab0: 8e e7 ldi r24, 0x7E ; 126
- ab2: 91 e0 ldi r25, 0x01 ; 1
- ab4: 78 db rcall .-2320 ; 0x1a6 <RingBuffer_Remove>
+ afe: 82 e5 ldi r24, 0x52 ; 82
+ b00: 91 e0 ldi r25, 0x01 ; 1
+ b02: 51 db rcall .-2398 ; 0x1a6 <RingBuffer_Remove>
+ b04: 18 2f mov r17, r24
if (byte == '\r' || byte == '\n') {// end of command, evaluate cemmand!
- ab6: 8d 30 cpi r24, 0x0D ; 13
- ab8: 19 f0 breq .+6 ; 0xac0 <parse_command+0x34>
- aba: 8a 30 cpi r24, 0x0A ; 10
- abc: 09 f0 breq .+2 ; 0xac0 <parse_command+0x34>
- abe: 70 c1 rjmp .+736 ; 0xda0 <parse_command+0x314>
+ b06: 8d 30 cpi r24, 0x0D ; 13
+ b08: 19 f0 breq .+6 ; 0xb10 <parse_command+0x36>
+ b0a: 8a 30 cpi r24, 0x0A ; 10
+ b0c: 09 f0 breq .+2 ; 0xb10 <parse_command+0x36>
+ b0e: 74 c1 rjmp .+744 ; 0xdf8 <parse_command+0x31e>
uart_puts("\r\n");
- ac0: 84 e1 ldi r24, 0x14 ; 20
- ac2: 91 e0 ldi r25, 0x01 ; 1
- ac4: 87 de rcall .-754 ; 0x7d4 <uart_puts>
+ b10: 84 e1 ldi r24, 0x14 ; 20
+ b12: 91 e0 ldi r25, 0x01 ; 1
+ b14: 5f de rcall .-834 ; 0x7d4 <uart_puts>
cmdbuffer[cmdPos] = '\0'; // terminate new command string
- ac6: 80 91 99 02 lds r24, 0x0299
- aca: e8 2f mov r30, r24
- acc: f0 e0 ldi r31, 0x00 ; 0
- ace: e2 55 subi r30, 0x52 ; 82
- ad0: fd 4f sbci r31, 0xFD ; 253
- ad2: 10 82 st Z, r1
+ b16: 80 91 6d 02 lds r24, 0x026D
+ b1a: e8 2f mov r30, r24
+ b1c: f0 e0 ldi r31, 0x00 ; 0
+ b1e: ee 57 subi r30, 0x7E ; 126
+ b20: fd 4f sbci r31, 0xFD ; 253
+ b22: 10 82 st Z, r1
curCmdLen = cmdPos;
- ad4: 80 93 98 02 sts 0x0298, r24
+ b24: 80 93 6c 02 sts 0x026C, r24
cmdPos = 0;
- ad8: 10 92 99 02 sts 0x0299, r1
+ b28: 10 92 6d 02 sts 0x026D, r1
if (cmdbuffer[0] == 'g' || cmdbuffer[0] == 'G') { // goto command
- adc: 80 91 ae 02 lds r24, 0x02AE
- ae0: 87 36 cpi r24, 0x67 ; 103
- ae2: 59 f0 breq .+22 ; 0xafa <parse_command+0x6e>
- ae4: 87 34 cpi r24, 0x47 ; 71
- ae6: 49 f0 breq .+18 ; 0xafa <parse_command+0x6e>
+ b2c: 80 91 82 02 lds r24, 0x0282
+ b30: 87 36 cpi r24, 0x67 ; 103
+ b32: 59 f0 breq .+22 ; 0xb4a <parse_command+0x70>
+ b34: 87 34 cpi r24, 0x47 ; 71
+ b36: 49 f0 breq .+18 ; 0xb4a <parse_command+0x70>
action = GOTO;
} else if ( cmdbuffer[0] == 'm' || cmdbuffer[0] == 'M') {
- ae8: 8d 36 cpi r24, 0x6D ; 109
- aea: 49 f0 breq .+18 ; 0xafe <parse_command+0x72>
- aec: 8d 34 cpi r24, 0x4D ; 77
- aee: 39 f0 breq .+14 ; 0xafe <parse_command+0x72>
+ b38: 8d 36 cpi r24, 0x6D ; 109
+ b3a: 49 f0 breq .+18 ; 0xb4e <parse_command+0x74>
+ b3c: 8d 34 cpi r24, 0x4D ; 77
+ b3e: 39 f0 breq .+14 ; 0xb4e <parse_command+0x74>
action = MOVEREL;
} else if ( cmdbuffer[0] == 'z' || cmdbuffer[0] == 'Z' ) {
- af0: 8a 37 cpi r24, 0x7A ; 122
- af2: 39 f0 breq .+14 ; 0xb02 <parse_command+0x76>
- af4: 8a 35 cpi r24, 0x5A ; 90
- af6: 39 f4 brne .+14 ; 0xb06 <parse_command+0x7a>
- af8: 04 c0 rjmp .+8 ; 0xb02 <parse_command+0x76>
+ b40: 8a 37 cpi r24, 0x7A ; 122
+ b42: 39 f0 breq .+14 ; 0xb52 <parse_command+0x78>
+ b44: 8a 35 cpi r24, 0x5A ; 90
+ b46: 39 f4 brne .+14 ; 0xb56 <parse_command+0x7c>
+ b48: 04 c0 rjmp .+8 ; 0xb52 <parse_command+0x78>
curCmdLen = cmdPos;
cmdPos = 0;
if (cmdbuffer[0] == 'g' || cmdbuffer[0] == 'G') { // goto command
action = GOTO;
- afa: 01 e0 ldi r16, 0x01 ; 1
- afc: 05 c0 rjmp .+10 ; 0xb08 <parse_command+0x7c>
+ b4a: 01 e0 ldi r16, 0x01 ; 1
+ b4c: 05 c0 rjmp .+10 ; 0xb58 <parse_command+0x7e>
} else if ( cmdbuffer[0] == 'm' || cmdbuffer[0] == 'M') {
action = MOVEREL;
- afe: 02 e0 ldi r16, 0x02 ; 2
- b00: 03 c0 rjmp .+6 ; 0xb08 <parse_command+0x7c>
+ b4e: 02 e0 ldi r16, 0x02 ; 2
+ b50: 03 c0 rjmp .+6 ; 0xb58 <parse_command+0x7e>
} else if ( cmdbuffer[0] == 'z' || cmdbuffer[0] == 'Z' ) {
action = SETZERO;
- b02: 03 e0 ldi r16, 0x03 ; 3
- b04: 01 c0 rjmp .+2 ; 0xb08 <parse_command+0x7c>
+ b52: 03 e0 ldi r16, 0x03 ; 3
+ b54: 01 c0 rjmp .+2 ; 0xb58 <parse_command+0x7e>
} else {
action = POSITION;
- b06: 00 e0 ldi r16, 0x00 ; 0
+ b56: 00 e0 ldi r16, 0x00 ; 0
}
if (cmdbuffer[1] == 'x' || cmdbuffer[1] == 'X') {
- b08: 80 91 af 02 lds r24, 0x02AF
- b0c: 88 37 cpi r24, 0x78 ; 120
- b0e: 39 f0 breq .+14 ; 0xb1e <parse_command+0x92>
- b10: 88 35 cpi r24, 0x58 ; 88
- b12: 29 f0 breq .+10 ; 0xb1e <parse_command+0x92>
+ b58: 80 91 83 02 lds r24, 0x0283
+ b5c: 88 37 cpi r24, 0x78 ; 120
+ b5e: 39 f0 breq .+14 ; 0xb6e <parse_command+0x94>
+ b60: 88 35 cpi r24, 0x58 ; 88
+ b62: 29 f0 breq .+10 ; 0xb6e <parse_command+0x94>
axis = X;
} else if (cmdbuffer[1] == 'y' || cmdbuffer[1] == 'Y') {
- b14: 89 37 cpi r24, 0x79 ; 121
- b16: 29 f0 breq .+10 ; 0xb22 <parse_command+0x96>
+ b64: 89 37 cpi r24, 0x79 ; 121
+ b66: 29 f0 breq .+10 ; 0xb72 <parse_command+0x98>
#define POSITION 0
#define GOTO 1
#define MOVEREL 2
#define SETZERO 3
void parse_command(void){
- b18: 11 e0 ldi r17, 0x01 ; 1
- b1a: 89 35 cpi r24, 0x59 ; 89
- b1c: 19 f0 breq .+6 ; 0xb24 <parse_command+0x98>
+ b68: 11 e0 ldi r17, 0x01 ; 1
+ b6a: 89 35 cpi r24, 0x59 ; 89
+ b6c: 19 f0 breq .+6 ; 0xb74 <parse_command+0x9a>
} else {
action = POSITION;
}
if (cmdbuffer[1] == 'x' || cmdbuffer[1] == 'X') {
axis = X;
- b1e: 10 e0 ldi r17, 0x00 ; 0
- b20: 01 c0 rjmp .+2 ; 0xb24 <parse_command+0x98>
+ b6e: 10 e0 ldi r17, 0x00 ; 0
+ b70: 01 c0 rjmp .+2 ; 0xb74 <parse_command+0x9a>
} else if (cmdbuffer[1] == 'y' || cmdbuffer[1] == 'Y') {
axis = Y;
- b22: 11 e0 ldi r17, 0x01 ; 1
+ b72: 11 e0 ldi r17, 0x01 ; 1
}
// if you expect coordinate, parse number!
if (action == GOTO || action == MOVEREL){
- b24: 80 2f mov r24, r16
- b26: 81 50 subi r24, 0x01 ; 1
- b28: 82 30 cpi r24, 0x02 ; 2
- b2a: 08 f0 brcs .+2 ; 0xb2e <parse_command+0xa2>
- b2c: 6d c0 rjmp .+218 ; 0xc08 <parse_command+0x17c>
+ b74: 80 2f mov r24, r16
+ b76: 81 50 subi r24, 0x01 ; 1
+ b78: 82 30 cpi r24, 0x02 ; 2
+ b7a: 08 f0 brcs .+2 ; 0xb7e <parse_command+0xa4>
+ b7c: 6d c0 rjmp .+218 ; 0xc58 <parse_command+0x17e>
predot = 0;
- b2e: 10 92 9d 02 sts 0x029D, r1
- b32: 10 92 9c 02 sts 0x029C, r1
+ b7e: 10 92 71 02 sts 0x0271, r1
+ b82: 10 92 70 02 sts 0x0270, r1
postdot = 0;
- b36: 10 92 9b 02 sts 0x029B, r1
- b3a: 10 92 9a 02 sts 0x029A, r1
+ b86: 10 92 6f 02 sts 0x026F, r1
+ b8a: 10 92 6e 02 sts 0x026E, r1
num_sign = 1;
num_start = 0;
- b3e: 10 92 97 02 sts 0x0297, r1
+ b8e: 10 92 6b 02 sts 0x026B, r1
nums_found = 0;
- b42: 10 92 96 02 sts 0x0296, r1
+ b92: 10 92 6a 02 sts 0x026A, r1
for (uint8_t i=2; i<=curCmdLen; i++) {
- b46: 92 e0 ldi r25, 0x02 ; 2
- b48: f9 2e mov r15, r25
+ b96: 92 e0 ldi r25, 0x02 ; 2
+ b98: f9 2e mov r15, r25
// if you expect coordinate, parse number!
if (action == GOTO || action == MOVEREL){
predot = 0;
postdot = 0;
num_sign = 1;
- b4a: dd 24 eor r13, r13
- b4c: d3 94 inc r13
+ b9a: dd 24 eor r13, r13
+ b9c: d3 94 inc r13
predot = atoi(numbuffer);
} else { // its the postdot digits
uint8_t postdotlen = i-num_start;
if (postdotlen < 3){ // if too small ,fill with zeros
for( uint8_t j = postdotlen; j <=2; j++) {
numbuffer[j] = '0';
- b4e: 80 e3 ldi r24, 0x30 ; 48
- b50: c8 2e mov r12, r24
+ b9e: 80 e3 ldi r24, 0x30 ; 48
+ ba0: c8 2e mov r12, r24
postdot = 0;
num_sign = 1;
num_start = 0;
nums_found = 0;
for (uint8_t i=2; i<=curCmdLen; i++) {
- b52: 54 c0 rjmp .+168 ; 0xbfc <parse_command+0x170>
+ ba2: 54 c0 rjmp .+168 ; 0xc4c <parse_command+0x172>
if ( num_start == 0 && cmdbuffer[i] == '-' ) { // if you find a minus before
- b54: e0 90 97 02 lds r14, 0x0297
- b58: ee 20 and r14, r14
- b5a: 49 f4 brne .+18 ; 0xb6e <parse_command+0xe2>
- b5c: ef 2d mov r30, r15
- b5e: f0 e0 ldi r31, 0x00 ; 0
- b60: e2 55 subi r30, 0x52 ; 82
- b62: fd 4f sbci r31, 0xFD ; 253
- b64: 80 81 ld r24, Z
- b66: 8d 32 cpi r24, 0x2D ; 45
- b68: 11 f4 brne .+4 ; 0xb6e <parse_command+0xe2>
+ ba4: e0 90 6b 02 lds r14, 0x026B
+ ba8: ee 20 and r14, r14
+ baa: 49 f4 brne .+18 ; 0xbbe <parse_command+0xe4>
+ bac: ef 2d mov r30, r15
+ bae: f0 e0 ldi r31, 0x00 ; 0
+ bb0: ee 57 subi r30, 0x7E ; 126
+ bb2: fd 4f sbci r31, 0xFD ; 253
+ bb4: 80 81 ld r24, Z
+ bb6: 8d 32 cpi r24, 0x2D ; 45
+ bb8: 11 f4 brne .+4 ; 0xbbe <parse_command+0xe4>
// you find a digit, it's a negative number
num_sign = -1;
- b6a: dd 24 eor r13, r13
- b6c: da 94 dec r13
+ bba: dd 24 eor r13, r13
+ bbc: da 94 dec r13
}
if ( cmdbuffer[i] >= 48 && cmdbuffer[i] <= 57 ){ // is it a number?
- b6e: cf 2d mov r28, r15
- b70: d0 e0 ldi r29, 0x00 ; 0
- b72: fe 01 movw r30, r28
- b74: e2 55 subi r30, 0x52 ; 82
- b76: fd 4f sbci r31, 0xFD ; 253
- b78: 80 81 ld r24, Z
- b7a: 80 53 subi r24, 0x30 ; 48
- b7c: 8a 30 cpi r24, 0x0A ; 10
- b7e: 28 f4 brcc .+10 ; 0xb8a <parse_command+0xfe>
+ bbe: cf 2d mov r28, r15
+ bc0: d0 e0 ldi r29, 0x00 ; 0
+ bc2: fe 01 movw r30, r28
+ bc4: ee 57 subi r30, 0x7E ; 126
+ bc6: fd 4f sbci r31, 0xFD ; 253
+ bc8: 80 81 ld r24, Z
+ bca: 80 53 subi r24, 0x30 ; 48
+ bcc: 8a 30 cpi r24, 0x0A ; 10
+ bce: 28 f4 brcc .+10 ; 0xbda <parse_command+0x100>
if ( num_start == 0) { // this is the first digit in the string
- b80: ee 20 and r14, r14
- b82: d9 f5 brne .+118 ; 0xbfa <parse_command+0x16e>
+ bd0: ee 20 and r14, r14
+ bd2: d9 f5 brne .+118 ; 0xc4a <parse_command+0x170>
num_start = i;
- b84: f0 92 97 02 sts 0x0297, r15
- b88: 38 c0 rjmp .+112 ; 0xbfa <parse_command+0x16e>
+ bd4: f0 92 6b 02 sts 0x026B, r15
+ bd8: 38 c0 rjmp .+112 ; 0xc4a <parse_command+0x170>
}
} else { // no digit!
if ( num_start != 0) { // digits have been found before
- b8a: ee 20 and r14, r14
- b8c: b1 f1 breq .+108 ; 0xbfa <parse_command+0x16e>
+ bda: ee 20 and r14, r14
+ bdc: b1 f1 breq .+108 ; 0xc4a <parse_command+0x170>
strncpy(numbuffer,cmdbuffer+num_start,i-num_start); // copy number found to
- b8e: 6e 2d mov r22, r14
- b90: 70 e0 ldi r23, 0x00 ; 0
- b92: c6 1b sub r28, r22
- b94: d7 0b sbc r29, r23
- b96: 62 55 subi r22, 0x52 ; 82
- b98: 7d 4f sbci r23, 0xFD ; 253
- b9a: 8e e9 ldi r24, 0x9E ; 158
- b9c: 92 e0 ldi r25, 0x02 ; 2
- b9e: ae 01 movw r20, r28
- ba0: 0e 94 29 0f call 0x1e52 ; 0x1e52 <strncpy>
+ bde: 6e 2d mov r22, r14
+ be0: 70 e0 ldi r23, 0x00 ; 0
+ be2: c6 1b sub r28, r22
+ be4: d7 0b sbc r29, r23
+ be6: 6e 57 subi r22, 0x7E ; 126
+ be8: 7d 4f sbci r23, 0xFD ; 253
+ bea: 82 e7 ldi r24, 0x72 ; 114
+ bec: 92 e0 ldi r25, 0x02 ; 2
+ bee: ae 01 movw r20, r28
+ bf0: 0e 94 61 0f call 0x1ec2 ; 0x1ec2 <strncpy>
// numbuffer
numbuffer[i-num_start] = '\0'; // make sure it's always a terminated string
- ba4: c2 56 subi r28, 0x62 ; 98
- ba6: dd 4f sbci r29, 0xFD ; 253
- ba8: 18 82 st Y, r1
+ bf4: ce 58 subi r28, 0x8E ; 142
+ bf6: dd 4f sbci r29, 0xFD ; 253
+ bf8: 18 82 st Y, r1
nums_found++;
- baa: 80 91 96 02 lds r24, 0x0296
- bae: 8f 5f subi r24, 0xFF ; 255
- bb0: 80 93 96 02 sts 0x0296, r24
+ bfa: 80 91 6a 02 lds r24, 0x026A
+ bfe: 8f 5f subi r24, 0xFF ; 255
+ c00: 80 93 6a 02 sts 0x026A, r24
if(nums_found == 1) { // its the predot digits
- bb4: 81 30 cpi r24, 0x01 ; 1
- bb6: 49 f4 brne .+18 ; 0xbca <parse_command+0x13e>
+ c04: 81 30 cpi r24, 0x01 ; 1
+ c06: 49 f4 brne .+18 ; 0xc1a <parse_command+0x140>
predot = atoi(numbuffer);
- bb8: 8e e9 ldi r24, 0x9E ; 158
- bba: 92 e0 ldi r25, 0x02 ; 2
- bbc: 0e 94 0c 0f call 0x1e18 ; 0x1e18 <atoi>
- bc0: 90 93 9d 02 sts 0x029D, r25
- bc4: 80 93 9c 02 sts 0x029C, r24
- bc8: 16 c0 rjmp .+44 ; 0xbf6 <parse_command+0x16a>
+ c08: 82 e7 ldi r24, 0x72 ; 114
+ c0a: 92 e0 ldi r25, 0x02 ; 2
+ c0c: 0e 94 44 0f call 0x1e88 ; 0x1e88 <atoi>
+ c10: 90 93 71 02 sts 0x0271, r25
+ c14: 80 93 70 02 sts 0x0270, r24
+ c18: 16 c0 rjmp .+44 ; 0xc46 <parse_command+0x16c>
} else { // its the postdot digits
uint8_t postdotlen = i-num_start;
- bca: 8f 2d mov r24, r15
- bcc: 8e 19 sub r24, r14
+ c1a: 8f 2d mov r24, r15
+ c1c: 8e 19 sub r24, r14
if (postdotlen < 3){ // if too small ,fill with zeros
- bce: 83 30 cpi r24, 0x03 ; 3
- bd0: 40 f4 brcc .+16 ; 0xbe2 <parse_command+0x156>
+ c1e: 83 30 cpi r24, 0x03 ; 3
+ c20: 40 f4 brcc .+16 ; 0xc32 <parse_command+0x158>
for( uint8_t j = postdotlen; j <=2; j++) {
numbuffer[j] = '0';
- bd2: e8 2f mov r30, r24
- bd4: f0 e0 ldi r31, 0x00 ; 0
- bd6: e2 56 subi r30, 0x62 ; 98
- bd8: fd 4f sbci r31, 0xFD ; 253
- bda: c0 82 st Z, r12
+ c22: e8 2f mov r30, r24
+ c24: f0 e0 ldi r31, 0x00 ; 0
+ c26: ee 58 subi r30, 0x8E ; 142
+ c28: fd 4f sbci r31, 0xFD ; 253
+ c2a: c0 82 st Z, r12
if(nums_found == 1) { // its the predot digits
predot = atoi(numbuffer);
} else { // its the postdot digits
uint8_t postdotlen = i-num_start;
if (postdotlen < 3){ // if too small ,fill with zeros
for( uint8_t j = postdotlen; j <=2; j++) {
- bdc: 8f 5f subi r24, 0xFF ; 255
- bde: 83 30 cpi r24, 0x03 ; 3
- be0: c1 f7 brne .-16 ; 0xbd2 <parse_command+0x146>
+ c2c: 8f 5f subi r24, 0xFF ; 255
+ c2e: 83 30 cpi r24, 0x03 ; 3
+ c30: c1 f7 brne .-16 ; 0xc22 <parse_command+0x148>
numbuffer[j] = '0';
}
}
// crop the number to three post dot digits
numbuffer[3] = '\0';
- be2: 10 92 a1 02 sts 0x02A1, r1
+ c32: 10 92 75 02 sts 0x0275, r1
postdot = atoi(numbuffer);
- be6: 8e e9 ldi r24, 0x9E ; 158
- be8: 92 e0 ldi r25, 0x02 ; 2
- bea: 0e 94 0c 0f call 0x1e18 ; 0x1e18 <atoi>
- bee: 90 93 9b 02 sts 0x029B, r25
- bf2: 80 93 9a 02 sts 0x029A, r24
+ c36: 82 e7 ldi r24, 0x72 ; 114
+ c38: 92 e0 ldi r25, 0x02 ; 2
+ c3a: 0e 94 44 0f call 0x1e88 ; 0x1e88 <atoi>
+ c3e: 90 93 6f 02 sts 0x026F, r25
+ c42: 80 93 6e 02 sts 0x026E, r24
}
num_start = 0;
- bf6: 10 92 97 02 sts 0x0297, r1
+ c46: 10 92 6b 02 sts 0x026B, r1
postdot = 0;
num_sign = 1;
num_start = 0;
nums_found = 0;
for (uint8_t i=2; i<=curCmdLen; i++) {
- bfa: f3 94 inc r15
- bfc: 80 91 98 02 lds r24, 0x0298
- c00: 8f 15 cp r24, r15
- c02: 08 f0 brcs .+2 ; 0xc06 <parse_command+0x17a>
- c04: a7 cf rjmp .-178 ; 0xb54 <parse_command+0xc8>
- c06: 02 c0 rjmp .+4 ; 0xc0c <parse_command+0x180>
- static char cmdbuffer[16];
+ c4a: f3 94 inc r15
+ c4c: 80 91 6c 02 lds r24, 0x026C
+ c50: 8f 15 cp r24, r15
+ c52: 08 f0 brcs .+2 ; 0xc56 <parse_command+0x17c>
+ c54: a7 cf rjmp .-178 ; 0xba4 <parse_command+0xca>
+ c56: 02 c0 rjmp .+4 ; 0xc5c <parse_command+0x182>
+ static char cmdbuffer[32];
static char numbuffer[16];
static uint16_t predot = 0,postdot = 0;
static uint8_t cmdPos, curCmdLen, num_start = 0, nums_found = 0;
uint8_t action=0,axis=0;
int8_t num_sign = 1;
- c08: dd 24 eor r13, r13
- c0a: d3 94 inc r13
+ c58: dd 24 eor r13, r13
+ c5a: d3 94 inc r13
}
int16_t steps = 0,dest=0;
switch (action) {
- c0c: 02 30 cpi r16, 0x02 ; 2
- c0e: 09 f4 brne .+2 ; 0xc12 <parse_command+0x186>
- c10: 5f c0 rjmp .+190 ; 0xcd0 <parse_command+0x244>
- c12: 03 30 cpi r16, 0x03 ; 3
- c14: 09 f4 brne .+2 ; 0xc18 <parse_command+0x18c>
- c16: ba c0 rjmp .+372 ; 0xd8c <parse_command+0x300>
- c18: 01 30 cpi r16, 0x01 ; 1
- c1a: 09 f0 breq .+2 ; 0xc1e <parse_command+0x192>
- c1c: bf c0 rjmp .+382 ; 0xd9c <parse_command+0x310>
+ c5c: 02 30 cpi r16, 0x02 ; 2
+ c5e: 09 f4 brne .+2 ; 0xc62 <parse_command+0x188>
+ c60: 61 c0 rjmp .+194 ; 0xd24 <parse_command+0x24a>
+ c62: 03 30 cpi r16, 0x03 ; 3
+ c64: 09 f4 brne .+2 ; 0xc68 <parse_command+0x18e>
+ c66: be c0 rjmp .+380 ; 0xde4 <parse_command+0x30a>
+ c68: 01 30 cpi r16, 0x01 ; 1
+ c6a: 09 f0 breq .+2 ; 0xc6e <parse_command+0x194>
+ c6c: c3 c0 rjmp .+390 ; 0xdf4 <parse_command+0x31a>
case GOTO:
uart_puts("GOTO ");
- c1e: 87 e1 ldi r24, 0x17 ; 23
- c20: 91 e0 ldi r25, 0x01 ; 1
- c22: d8 dd rcall .-1104 ; 0x7d4 <uart_puts>
+ c6e: 87 e1 ldi r24, 0x17 ; 23
+ c70: 91 e0 ldi r25, 0x01 ; 1
+ c72: b0 dd rcall .-1184 ; 0x7d4 <uart_puts>
uart_putc(88+axis);// x or y
- c24: 81 2f mov r24, r17
- c26: 88 5a subi r24, 0xA8 ; 168
- c28: cd dd rcall .-1126 ; 0x7c4 <uart_putc>
+ c74: 81 2f mov r24, r17
+ c76: 88 5a subi r24, 0xA8 ; 168
+ c78: a5 dd rcall .-1206 ; 0x7c4 <uart_putc>
+ uart_putc(' ');
+ c7a: 80 e2 ldi r24, 0x20 ; 32
+ c7c: a3 dd rcall .-1210 ; 0x7c4 <uart_putc>
uart_print_signed_number(predot*num_sign,3);
- c2a: cd 2d mov r28, r13
- c2c: dd 27 eor r29, r29
- c2e: c7 fd sbrc r28, 7
- c30: d0 95 com r29
- c32: 60 91 9c 02 lds r22, 0x029C
- c36: 70 91 9d 02 lds r23, 0x029D
- c3a: ce 01 movw r24, r28
- c3c: 0e 94 b1 0e call 0x1d62 ; 0x1d62 <__mulhi3>
- c40: bc 01 movw r22, r24
- c42: 80 e0 ldi r24, 0x00 ; 0
- c44: 90 e0 ldi r25, 0x00 ; 0
- c46: 43 e0 ldi r20, 0x03 ; 3
- c48: 5c de rcall .-840 ; 0x902 <uart_print_signed_number>
+ c7e: cd 2d mov r28, r13
+ c80: dd 27 eor r29, r29
+ c82: c7 fd sbrc r28, 7
+ c84: d0 95 com r29
+ c86: 60 91 70 02 lds r22, 0x0270
+ c8a: 70 91 71 02 lds r23, 0x0271
+ c8e: ce 01 movw r24, r28
+ c90: 0e 94 e9 0e call 0x1dd2 ; 0x1dd2 <__mulhi3>
+ c94: bc 01 movw r22, r24
+ c96: 80 e0 ldi r24, 0x00 ; 0
+ c98: 90 e0 ldi r25, 0x00 ; 0
+ c9a: 43 e0 ldi r20, 0x03 ; 3
+ c9c: 34 de rcall .-920 ; 0x906 <uart_print_signed_number>
uart_putc('.');
- c4a: 8e e2 ldi r24, 0x2E ; 46
- c4c: bb dd rcall .-1162 ; 0x7c4 <uart_putc>
- uart_print_number(postdot,3);
- c4e: 60 91 9a 02 lds r22, 0x029A
- c52: 70 91 9b 02 lds r23, 0x029B
- c56: 80 e0 ldi r24, 0x00 ; 0
- c58: 90 e0 ldi r25, 0x00 ; 0
- c5a: 43 e0 ldi r20, 0x03 ; 3
- c5c: 42 de rcall .-892 ; 0x8e2 <uart_print_number>
+ c9e: 8e e2 ldi r24, 0x2E ; 46
+ ca0: 91 dd rcall .-1246 ; 0x7c4 <uart_putc>
+ uart_print_number_wlzeros(postdot,3);
+ ca2: 60 91 6e 02 lds r22, 0x026E
+ ca6: 70 91 6f 02 lds r23, 0x026F
+ caa: 80 e0 ldi r24, 0x00 ; 0
+ cac: 90 e0 ldi r25, 0x00 ; 0
+ cae: 43 e0 ldi r20, 0x03 ; 3
+ cb0: 16 de rcall .-980 ; 0x8de <uart_print_number_wlzeros>
uart_puts("\r\n");
- c5e: 84 e1 ldi r24, 0x14 ; 20
- c60: 91 e0 ldi r25, 0x01 ; 1
- c62: b8 dd rcall .-1168 ; 0x7d4 <uart_puts>
+ cb2: 84 e1 ldi r24, 0x14 ; 20
+ cb4: 91 e0 ldi r25, 0x01 ; 1
+ cb6: 8e dd rcall .-1252 ; 0x7d4 <uart_puts>
dest = num_sign *( predot*24 +(postdot*10)/416);
- c64: 80 91 9a 02 lds r24, 0x029A
- c68: 90 91 9b 02 lds r25, 0x029B
- c6c: 6a e0 ldi r22, 0x0A ; 10
- c6e: 70 e0 ldi r23, 0x00 ; 0
- c70: 0e 94 b1 0e call 0x1d62 ; 0x1d62 <__mulhi3>
- c74: 60 ea ldi r22, 0xA0 ; 160
- c76: 71 e0 ldi r23, 0x01 ; 1
- c78: 0e 94 c3 0e call 0x1d86 ; 0x1d86 <__udivmodhi4>
- c7c: 9b 01 movw r18, r22
- c7e: 80 91 9c 02 lds r24, 0x029C
- c82: 90 91 9d 02 lds r25, 0x029D
- c86: 68 e1 ldi r22, 0x18 ; 24
- c88: 70 e0 ldi r23, 0x00 ; 0
- c8a: 0e 94 b1 0e call 0x1d62 ; 0x1d62 <__mulhi3>
- c8e: 28 0f add r18, r24
- c90: 39 1f adc r19, r25
- c92: ce 01 movw r24, r28
- c94: b9 01 movw r22, r18
- c96: 0e 94 b1 0e call 0x1d62 ; 0x1d62 <__mulhi3>
+ cb8: 80 91 6e 02 lds r24, 0x026E
+ cbc: 90 91 6f 02 lds r25, 0x026F
+ cc0: 6a e0 ldi r22, 0x0A ; 10
+ cc2: 70 e0 ldi r23, 0x00 ; 0
+ cc4: 0e 94 e9 0e call 0x1dd2 ; 0x1dd2 <__mulhi3>
+ cc8: 60 ea ldi r22, 0xA0 ; 160
+ cca: 71 e0 ldi r23, 0x01 ; 1
+ ccc: 0e 94 fb 0e call 0x1df6 ; 0x1df6 <__udivmodhi4>
+ cd0: 9b 01 movw r18, r22
+ cd2: 80 91 70 02 lds r24, 0x0270
+ cd6: 90 91 71 02 lds r25, 0x0271
+ cda: 68 e1 ldi r22, 0x18 ; 24
+ cdc: 70 e0 ldi r23, 0x00 ; 0
+ cde: 0e 94 e9 0e call 0x1dd2 ; 0x1dd2 <__mulhi3>
+ ce2: 28 0f add r18, r24
+ ce4: 39 1f adc r19, r25
+ ce6: ce 01 movw r24, r28
+ ce8: b9 01 movw r22, r18
+ cea: 0e 94 e9 0e call 0x1dd2 ; 0x1dd2 <__mulhi3>
if (axis == X) {
- c9a: 11 23 and r17, r17
- c9c: 69 f4 brne .+26 ; 0xcb8 <parse_command+0x22c>
- steps = dest - plate_pos_x;
- c9e: 20 91 7a 01 lds r18, 0x017A
- ca2: 30 91 7b 01 lds r19, 0x017B
- ca6: e8 2e mov r14, r24
- ca8: e7 01 movw r28, r14
- caa: 7e 01 movw r14, r28
- cac: f9 2e mov r15, r25
- cae: e7 01 movw r28, r14
- cb0: c2 1b sub r28, r18
- cb2: d3 0b sbc r29, r19
+ cee: 11 23 and r17, r17
+ cf0: 69 f4 brne .+26 ; 0xd0c <parse_command+0x232>
+ steps = dest - plate_pos_x; // experimental correction!
+ cf2: 20 91 4e 01 lds r18, 0x014E
+ cf6: 30 91 4f 01 lds r19, 0x014F
+ cfa: e8 2e mov r14, r24
+ cfc: e7 01 movw r28, r14
+ cfe: 7e 01 movw r14, r28
+ d00: f9 2e mov r15, r25
+ d02: e7 01 movw r28, r14
+ d04: c2 1b sub r28, r18
+ d06: d3 0b sbc r29, r19
move_plate(steps,0);
- cb4: ce 01 movw r24, r28
- cb6: 4d c0 rjmp .+154 ; 0xd52 <parse_command+0x2c6>
+ d08: ce 01 movw r24, r28
+ d0a: 4f c0 rjmp .+158 ; 0xdaa <parse_command+0x2d0>
plate_pos_x += steps;
} else if (axis == Y) {
steps = dest - plate_pos_y;
- cb8: 20 91 7c 01 lds r18, 0x017C
- cbc: 30 91 7d 01 lds r19, 0x017D
- cc0: e8 2e mov r14, r24
- cc2: e7 01 movw r28, r14
- cc4: 7e 01 movw r14, r28
- cc6: f9 2e mov r15, r25
- cc8: e7 01 movw r28, r14
- cca: c2 1b sub r28, r18
- ccc: d3 0b sbc r29, r19
- cce: 4f c0 rjmp .+158 ; 0xd6e <parse_command+0x2e2>
+ d0c: 20 91 50 01 lds r18, 0x0150
+ d10: 30 91 51 01 lds r19, 0x0151
+ d14: e8 2e mov r14, r24
+ d16: e7 01 movw r28, r14
+ d18: 7e 01 movw r14, r28
+ d1a: f9 2e mov r15, r25
+ d1c: e7 01 movw r28, r14
+ d1e: c2 1b sub r28, r18
+ d20: d3 0b sbc r29, r19
+ d22: 51 c0 rjmp .+162 ; 0xdc6 <parse_command+0x2ec>
}
pos_report();
break;
case MOVEREL:
uart_puts("MOVE ");
- cd0: 8d e1 ldi r24, 0x1D ; 29
- cd2: 91 e0 ldi r25, 0x01 ; 1
- cd4: 7f dd rcall .-1282 ; 0x7d4 <uart_puts>
+ d24: 8d e1 ldi r24, 0x1D ; 29
+ d26: 91 e0 ldi r25, 0x01 ; 1
+ d28: 55 dd rcall .-1366 ; 0x7d4 <uart_puts>
uart_putc(88+axis);// x or y
- cd6: 81 2f mov r24, r17
- cd8: 88 5a subi r24, 0xA8 ; 168
- cda: 74 dd rcall .-1304 ; 0x7c4 <uart_putc>
+ d2a: 81 2f mov r24, r17
+ d2c: 88 5a subi r24, 0xA8 ; 168
+ d2e: 4a dd rcall .-1388 ; 0x7c4 <uart_putc>
+ uart_putc(' ');
+ d30: 80 e2 ldi r24, 0x20 ; 32
+ d32: 48 dd rcall .-1392 ; 0x7c4 <uart_putc>
uart_print_signed_number(predot*num_sign,3);
- cdc: cd 2d mov r28, r13
- cde: dd 27 eor r29, r29
- ce0: c7 fd sbrc r28, 7
- ce2: d0 95 com r29
- ce4: 60 91 9c 02 lds r22, 0x029C
- ce8: 70 91 9d 02 lds r23, 0x029D
- cec: ce 01 movw r24, r28
- cee: 0e 94 b1 0e call 0x1d62 ; 0x1d62 <__mulhi3>
- cf2: bc 01 movw r22, r24
- cf4: 80 e0 ldi r24, 0x00 ; 0
- cf6: 90 e0 ldi r25, 0x00 ; 0
- cf8: 43 e0 ldi r20, 0x03 ; 3
- cfa: 03 de rcall .-1018 ; 0x902 <uart_print_signed_number>
+ d34: cd 2d mov r28, r13
+ d36: dd 27 eor r29, r29
+ d38: c7 fd sbrc r28, 7
+ d3a: d0 95 com r29
+ d3c: 60 91 70 02 lds r22, 0x0270
+ d40: 70 91 71 02 lds r23, 0x0271
+ d44: ce 01 movw r24, r28
+ d46: 0e 94 e9 0e call 0x1dd2 ; 0x1dd2 <__mulhi3>
+ d4a: bc 01 movw r22, r24
+ d4c: 80 e0 ldi r24, 0x00 ; 0
+ d4e: 90 e0 ldi r25, 0x00 ; 0
+ d50: 43 e0 ldi r20, 0x03 ; 3
+ d52: d9 dd rcall .-1102 ; 0x906 <uart_print_signed_number>
uart_putc('.');
- cfc: 8e e2 ldi r24, 0x2E ; 46
- cfe: 62 dd rcall .-1340 ; 0x7c4 <uart_putc>
- uart_print_number(postdot,3);
- d00: 60 91 9a 02 lds r22, 0x029A
- d04: 70 91 9b 02 lds r23, 0x029B
- d08: 80 e0 ldi r24, 0x00 ; 0
- d0a: 90 e0 ldi r25, 0x00 ; 0
- d0c: 43 e0 ldi r20, 0x03 ; 3
- d0e: e9 dd rcall .-1070 ; 0x8e2 <uart_print_number>
+ d54: 8e e2 ldi r24, 0x2E ; 46
+ d56: 36 dd rcall .-1428 ; 0x7c4 <uart_putc>
+ uart_print_number_wlzeros(postdot,3);
+ d58: 60 91 6e 02 lds r22, 0x026E
+ d5c: 70 91 6f 02 lds r23, 0x026F
+ d60: 80 e0 ldi r24, 0x00 ; 0
+ d62: 90 e0 ldi r25, 0x00 ; 0
+ d64: 43 e0 ldi r20, 0x03 ; 3
+ d66: bb dd rcall .-1162 ; 0x8de <uart_print_number_wlzeros>
uart_puts("\r\n");
- d10: 84 e1 ldi r24, 0x14 ; 20
- d12: 91 e0 ldi r25, 0x01 ; 1
- d14: 5f dd rcall .-1346 ; 0x7d4 <uart_puts>
+ d68: 84 e1 ldi r24, 0x14 ; 20
+ d6a: 91 e0 ldi r25, 0x01 ; 1
+ d6c: 33 dd rcall .-1434 ; 0x7d4 <uart_puts>
steps = num_sign *( predot*24 +(postdot*10)/416);
- d16: 80 91 9a 02 lds r24, 0x029A
- d1a: 90 91 9b 02 lds r25, 0x029B
- d1e: 6a e0 ldi r22, 0x0A ; 10
- d20: 70 e0 ldi r23, 0x00 ; 0
- d22: 0e 94 b1 0e call 0x1d62 ; 0x1d62 <__mulhi3>
- d26: 60 ea ldi r22, 0xA0 ; 160
- d28: 71 e0 ldi r23, 0x01 ; 1
- d2a: 0e 94 c3 0e call 0x1d86 ; 0x1d86 <__udivmodhi4>
- d2e: 9b 01 movw r18, r22
- d30: 80 91 9c 02 lds r24, 0x029C
- d34: 90 91 9d 02 lds r25, 0x029D
- d38: 68 e1 ldi r22, 0x18 ; 24
- d3a: 70 e0 ldi r23, 0x00 ; 0
- d3c: 0e 94 b1 0e call 0x1d62 ; 0x1d62 <__mulhi3>
- d40: 28 0f add r18, r24
- d42: 39 1f adc r19, r25
- d44: ce 01 movw r24, r28
- d46: b9 01 movw r22, r18
- d48: 0e 94 b1 0e call 0x1d62 ; 0x1d62 <__mulhi3>
- d4c: ec 01 movw r28, r24
+ d6e: 80 91 6e 02 lds r24, 0x026E
+ d72: 90 91 6f 02 lds r25, 0x026F
+ d76: 6a e0 ldi r22, 0x0A ; 10
+ d78: 70 e0 ldi r23, 0x00 ; 0
+ d7a: 0e 94 e9 0e call 0x1dd2 ; 0x1dd2 <__mulhi3>
+ d7e: 60 ea ldi r22, 0xA0 ; 160
+ d80: 71 e0 ldi r23, 0x01 ; 1
+ d82: 0e 94 fb 0e call 0x1df6 ; 0x1df6 <__udivmodhi4>
+ d86: 9b 01 movw r18, r22
+ d88: 80 91 70 02 lds r24, 0x0270
+ d8c: 90 91 71 02 lds r25, 0x0271
+ d90: 68 e1 ldi r22, 0x18 ; 24
+ d92: 70 e0 ldi r23, 0x00 ; 0
+ d94: 0e 94 e9 0e call 0x1dd2 ; 0x1dd2 <__mulhi3>
+ d98: 28 0f add r18, r24
+ d9a: 39 1f adc r19, r25
+ d9c: ce 01 movw r24, r28
+ d9e: b9 01 movw r22, r18
+ da0: 0e 94 e9 0e call 0x1dd2 ; 0x1dd2 <__mulhi3>
+ da4: ec 01 movw r28, r24
if (axis == X) {
- d4e: 11 23 and r17, r17
- d50: 71 f4 brne .+28 ; 0xd6e <parse_command+0x2e2>
+ da6: 11 23 and r17, r17
+ da8: 71 f4 brne .+28 ; 0xdc6 <parse_command+0x2ec>
move_plate(steps,0);
- d52: 60 e0 ldi r22, 0x00 ; 0
- d54: 70 e0 ldi r23, 0x00 ; 0
- d56: 32 de rcall .-924 ; 0x9bc <move_plate>
+ daa: 60 e0 ldi r22, 0x00 ; 0
+ dac: 70 e0 ldi r23, 0x00 ; 0
+ dae: 0d de rcall .-998 ; 0x9ca <move_plate>
plate_pos_x += steps;
- d58: 80 91 7a 01 lds r24, 0x017A
- d5c: 90 91 7b 01 lds r25, 0x017B
- d60: 8c 0f add r24, r28
- d62: 9d 1f adc r25, r29
- d64: 90 93 7b 01 sts 0x017B, r25
- d68: 80 93 7a 01 sts 0x017A, r24
- d6c: 17 c0 rjmp .+46 ; 0xd9c <parse_command+0x310>
+ db0: 80 91 4e 01 lds r24, 0x014E
+ db4: 90 91 4f 01 lds r25, 0x014F
+ db8: 8c 0f add r24, r28
+ dba: 9d 1f adc r25, r29
+ dbc: 90 93 4f 01 sts 0x014F, r25
+ dc0: 80 93 4e 01 sts 0x014E, r24
+ dc4: 17 c0 rjmp .+46 ; 0xdf4 <parse_command+0x31a>
} else if (axis == Y) {
move_plate(0,steps);
- d6e: 80 e0 ldi r24, 0x00 ; 0
- d70: 90 e0 ldi r25, 0x00 ; 0
- d72: be 01 movw r22, r28
- d74: 23 de rcall .-954 ; 0x9bc <move_plate>
+ dc6: 80 e0 ldi r24, 0x00 ; 0
+ dc8: 90 e0 ldi r25, 0x00 ; 0
+ dca: be 01 movw r22, r28
+ dcc: fe dd rcall .-1028 ; 0x9ca <move_plate>
plate_pos_y += steps;
- d76: 80 91 7c 01 lds r24, 0x017C
- d7a: 90 91 7d 01 lds r25, 0x017D
- d7e: 8c 0f add r24, r28
- d80: 9d 1f adc r25, r29
- d82: 90 93 7d 01 sts 0x017D, r25
- d86: 80 93 7c 01 sts 0x017C, r24
- d8a: 08 c0 rjmp .+16 ; 0xd9c <parse_command+0x310>
+ dce: 80 91 50 01 lds r24, 0x0150
+ dd2: 90 91 51 01 lds r25, 0x0151
+ dd6: 8c 0f add r24, r28
+ dd8: 9d 1f adc r25, r29
+ dda: 90 93 51 01 sts 0x0151, r25
+ dde: 80 93 50 01 sts 0x0150, r24
+ de2: 08 c0 rjmp .+16 ; 0xdf4 <parse_command+0x31a>
}
pos_report();
break;
case SETZERO:
plate_pos_x = 0;
- d8c: 10 92 7b 01 sts 0x017B, r1
- d90: 10 92 7a 01 sts 0x017A, r1
+ de4: 10 92 4f 01 sts 0x014F, r1
+ de8: 10 92 4e 01 sts 0x014E, r1
plate_pos_y = 0;
- d94: 10 92 7d 01 sts 0x017D, r1
- d98: 10 92 7c 01 sts 0x017C, r1
+ dec: 10 92 51 01 sts 0x0151, r1
+ df0: 10 92 50 01 sts 0x0150, r1
pos_report();
break;
case POSITION:
pos_report();
- d9c: 5a de rcall .-844 ; 0xa52 <pos_report>
+ df4: 5f de rcall .-834 ; 0xab4 <pos_report>
break;
- d9e: 0b c0 rjmp .+22 ; 0xdb6 <parse_command+0x32a>
+ df6: 17 c0 rjmp .+46 ; 0xe26 <parse_command+0x34c>
}
} else { // queue command
- cmdbuffer[cmdPos++] = byte;
- da0: 90 91 99 02 lds r25, 0x0299
- da4: e9 2f mov r30, r25
- da6: f0 e0 ldi r31, 0x00 ; 0
- da8: e2 55 subi r30, 0x52 ; 82
- daa: fd 4f sbci r31, 0xFD ; 253
- dac: 80 83 st Z, r24
- dae: 9f 5f subi r25, 0xFF ; 255
- db0: 90 93 99 02 sts 0x0299, r25
+ if( cmdPos == 0 ){
+ df8: 80 91 6d 02 lds r24, 0x026D
+ dfc: 88 23 and r24, r24
+ dfe: 19 f4 brne .+6 ; 0xe06 <parse_command+0x32c>
+ uart_puts("\r\n$ ");
+ e00: 83 e2 ldi r24, 0x23 ; 35
+ e02: 91 e0 ldi r25, 0x01 ; 1
+ e04: e7 dc rcall .-1586 ; 0x7d4 <uart_puts>
+ e06: 80 91 6d 02 lds r24, 0x026D
+ }
+
+ if( byte == 8 ){ // backspace
+ e0a: 18 30 cpi r17, 0x08 ; 8
+ e0c: 11 f4 brne .+4 ; 0xe12 <parse_command+0x338>
+ cmdPos--;
+ e0e: 81 50 subi r24, 0x01 ; 1
+ e10: 06 c0 rjmp .+12 ; 0xe1e <parse_command+0x344>
+ } else {
+ cmdbuffer[cmdPos++] = byte;
+ e12: e8 2f mov r30, r24
+ e14: f0 e0 ldi r31, 0x00 ; 0
+ e16: ee 57 subi r30, 0x7E ; 126
+ e18: fd 4f sbci r31, 0xFD ; 253
+ e1a: 10 83 st Z, r17
+ e1c: 8f 5f subi r24, 0xFF ; 255
+ e1e: 80 93 6d 02 sts 0x026D, r24
+ }
uart_putc(byte);
- db4: 07 dd rcall .-1522 ; 0x7c4 <uart_putc>
+ e22: 81 2f mov r24, r17
+ e24: cf dc rcall .-1634 ; 0x7c4 <uart_putc>
+
+
}
}
}
- db6: df 91 pop r29
- db8: cf 91 pop r28
- dba: 1f 91 pop r17
- dbc: 0f 91 pop r16
- dbe: ff 90 pop r15
- dc0: ef 90 pop r14
- dc2: df 90 pop r13
- dc4: cf 90 pop r12
- dc6: 08 95 ret
-
-00000dc8 <main>:
+ e26: df 91 pop r29
+ e28: cf 91 pop r28
+ e2a: 1f 91 pop r17
+ e2c: 0f 91 pop r16
+ e2e: ff 90 pop r15
+ e30: ef 90 pop r14
+ e32: df 90 pop r13
+ e34: cf 90 pop r12
+ e36: 08 95 ret
+
+00000e38 <main>:
int main(void)
{
- dc8: 0f 93 push r16
- dca: 1f 93 push r17
- dcc: df 93 push r29
- dce: cf 93 push r28
- dd0: 0f 92 push r0
- dd2: cd b7 in r28, 0x3d ; 61
- dd4: de b7 in r29, 0x3e ; 62
+ e38: 0f 93 push r16
+ e3a: 1f 93 push r17
+ e3c: df 93 push r29
+ e3e: cf 93 push r28
+ e40: 0f 92 push r0
+ e42: cd b7 in r28, 0x3d ; 61
+ e44: de b7 in r29, 0x3e ; 62
init_motors();
- dd6: b3 dd rcall .-1178 ; 0x93e <init_motors>
+ e46: 82 dd rcall .-1276 ; 0x94c <init_motors>
char dummy;
uint8_t field_val = 0;
SetupHardware();
- dd8: 46 dc rcall .-1908 ; 0x666 <SetupHardware>
+ e48: 0e dc rcall .-2020 ; 0x666 <SetupHardware>
RingBuffer_InitBuffer(&USBtoUSART_Buffer, USBtoUSART_Buffer_Data, sizeof(USBtoUSART_Buffer_Data));
- dda: 8e e7 ldi r24, 0x7E ; 126
- ddc: 91 e0 ldi r25, 0x01 ; 1
- dde: 6a e8 ldi r22, 0x8A ; 138
- de0: 71 e0 ldi r23, 0x01 ; 1
- de2: 6f da rcall .-2850 ; 0x2c2 <RingBuffer_InitBuffer.clone.0>
+ e4a: 82 e5 ldi r24, 0x52 ; 82
+ e4c: 91 e0 ldi r25, 0x01 ; 1
+ e4e: 6e e5 ldi r22, 0x5E ; 94
+ e50: 71 e0 ldi r23, 0x01 ; 1
+ e52: 37 da rcall .-2962 ; 0x2c2 <RingBuffer_InitBuffer.clone.0>
RingBuffer_InitBuffer(&USARTtoUSB_Buffer, USARTtoUSB_Buffer_Data, sizeof(USARTtoUSB_Buffer_Data));
- de4: 8a e0 ldi r24, 0x0A ; 10
- de6: 92 e0 ldi r25, 0x02 ; 2
- de8: 66 e1 ldi r22, 0x16 ; 22
- dea: 72 e0 ldi r23, 0x02 ; 2
- dec: 6a da rcall .-2860 ; 0x2c2 <RingBuffer_InitBuffer.clone.0>
+ e54: 8e ed ldi r24, 0xDE ; 222
+ e56: 91 e0 ldi r25, 0x01 ; 1
+ e58: 6a ee ldi r22, 0xEA ; 234
+ e5a: 71 e0 ldi r23, 0x01 ; 1
+ e5c: 32 da rcall .-2972 ; 0x2c2 <RingBuffer_InitBuffer.clone.0>
static inline void GlobalInterruptEnable(void)
{
GCC_MEMORY_BARRIER();
#if (ARCH == ARCH_AVR8)
sei();
- dee: 78 94 sei
+ e5e: 78 94 sei
// LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
GlobalInterruptEnable();
touchpad_init(); // you need to call this to setup the I/O pin!
- df0: aa db rcall .-2220 ; 0x546 <touchpad_init>
- df2: 8f ef ldi r24, 0xFF ; 255
- df4: 99 e6 ldi r25, 0x69 ; 105
- df6: a8 e1 ldi r26, 0x18 ; 24
- df8: 81 50 subi r24, 0x01 ; 1
- dfa: 90 40 sbci r25, 0x00 ; 0
- dfc: a0 40 sbci r26, 0x00 ; 0
- dfe: e1 f7 brne .-8 ; 0xdf8 <main+0x30>
- e00: 00 c0 rjmp .+0 ; 0xe02 <main+0x3a>
- e02: 00 00 nop
+ e60: 72 db rcall .-2332 ; 0x546 <touchpad_init>
+ e62: 2f ef ldi r18, 0xFF ; 255
+ e64: 39 e6 ldi r19, 0x69 ; 105
+ e66: 48 e1 ldi r20, 0x18 ; 24
+ e68: 21 50 subi r18, 0x01 ; 1
+ e6a: 30 40 sbci r19, 0x00 ; 0
+ e6c: 40 40 sbci r20, 0x00 ; 0
+ e6e: e1 f7 brne .-8 ; 0xe68 <main+0x30>
+ e70: 00 c0 rjmp .+0 ; 0xe72 <main+0x3a>
+ e72: 00 00 nop
_delay_ms(500);
sei();
- e04: 78 94 sei
-
+ e74: 78 94 sei
uint16_t loopcounter=0;
- uart_puts("you selected the relative position demo modus:\n\r");
- e06: 83 e2 ldi r24, 0x23 ; 35
- e08: 91 e0 ldi r25, 0x01 ; 1
- e0a: e4 dc rcall .-1592 ; 0x7d4 <uart_puts>
+// uart_puts("you selected the relative position demo modus:\n\r");
touchpad_set_rel_mode_100dpi();// use touchpad in relative mode
- e0c: ad db rcall .-2214 ; 0x568 <touchpad_set_rel_mode_100dpi>
+ e76: 78 db rcall .-2320 ; 0x568 <touchpad_set_rel_mode_100dpi>
// touchpad_set_rel_mode_200dpi(); // uncomment this line if you want double resolution
int16_t x, y = 0;
int8_t dx, dy = 0;
uint8_t busy = 0, last_busy = 0;
- e0e: 10 e0 ldi r17, 0x00 ; 0
+ e78: 10 e0 ldi r17, 0x00 ; 0
while (1) {
Usb2SerialTask();
- e10: df db rcall .-2114 ; 0x5d0 <Usb2SerialTask>
+ e7a: aa db rcall .-2220 ; 0x5d0 <Usb2SerialTask>
// loopcounter++;
// if(loopcounter<2000) {
// continue;
// }
// loopcounter=0;
parse_command(); // read data from virtual comport
- e12: 3c de rcall .-904 ; 0xa8c <parse_command>
+ e7c: 2e de rcall .-932 ; 0xada <parse_command>
touchpad_read(); // read data from touchpad
- e14: a0 db rcall .-2240 ; 0x556 <touchpad_read>
+ e7e: 6b db rcall .-2346 ; 0x556 <touchpad_read>
dx = delta_x();// returns the amount your finger has moved in x direction since last readout
- e16: cc db rcall .-2152 ; 0x5b0 <delta_x>
- e18: 08 2f mov r16, r24
+ e80: 97 db rcall .-2258 ; 0x5b0 <delta_x>
+ e82: 08 2f mov r16, r24
dy = delta_y();// returns the amount your finger has moved in y direction since last readout
- e1a: ba db rcall .-2188 ; 0x590 <delta_y>
+ e84: 85 db rcall .-2294 ; 0x590 <delta_y>
// increment/decrement some dummy variables with the
plate_pos_x += dx;
- e1c: 40 2f mov r20, r16
- e1e: 55 27 eor r21, r21
- e20: 47 fd sbrc r20, 7
- e22: 50 95 com r21
- e24: 20 91 7a 01 lds r18, 0x017A
- e28: 30 91 7b 01 lds r19, 0x017B
- e2c: 24 0f add r18, r20
- e2e: 35 1f adc r19, r21
- e30: 30 93 7b 01 sts 0x017B, r19
- e34: 20 93 7a 01 sts 0x017A, r18
+ e86: 40 2f mov r20, r16
+ e88: 55 27 eor r21, r21
+ e8a: 47 fd sbrc r20, 7
+ e8c: 50 95 com r21
+ e8e: 20 91 4e 01 lds r18, 0x014E
+ e92: 30 91 4f 01 lds r19, 0x014F
+ e96: 24 0f add r18, r20
+ e98: 35 1f adc r19, r21
+ e9a: 30 93 4f 01 sts 0x014F, r19
+ e9e: 20 93 4e 01 sts 0x014E, r18
plate_pos_y += dy;
- e38: 68 2f mov r22, r24
- e3a: 77 27 eor r23, r23
- e3c: 67 fd sbrc r22, 7
- e3e: 70 95 com r23
- e40: 80 91 7c 01 lds r24, 0x017C
- e44: 90 91 7d 01 lds r25, 0x017D
- e48: 86 0f add r24, r22
- e4a: 97 1f adc r25, r23
- e4c: 90 93 7d 01 sts 0x017D, r25
- e50: 80 93 7c 01 sts 0x017C, r24
+ ea2: 68 2f mov r22, r24
+ ea4: 77 27 eor r23, r23
+ ea6: 67 fd sbrc r22, 7
+ ea8: 70 95 com r23
+ eaa: 80 91 50 01 lds r24, 0x0150
+ eae: 90 91 51 01 lds r25, 0x0151
+ eb2: 86 0f add r24, r22
+ eb4: 97 1f adc r25, r23
+ eb6: 90 93 51 01 sts 0x0151, r25
+ eba: 80 93 50 01 sts 0x0150, r24
last_busy = busy;
busy = move_plate(dx,dy);
- e54: ca 01 movw r24, r20
- e56: b2 dd rcall .-1180 ; 0x9bc <move_plate>
+ ebe: ca 01 movw r24, r20
+ ec0: 84 dd rcall .-1272 ; 0x9ca <move_plate>
if (last_busy && !(busy)){
- e58: 11 23 and r17, r17
- e5a: 29 f0 breq .+10 ; 0xe66 <main+0x9e>
- e5c: 88 23 and r24, r24
- e5e: 19 f4 brne .+6 ; 0xe66 <main+0x9e>
+ ec2: 11 23 and r17, r17
+ ec4: 29 f0 breq .+10 ; 0xed0 <main+0x98>
+ ec6: 88 23 and r24, r24
+ ec8: 19 f4 brne .+6 ; 0xed0 <main+0x98>
pos_report();
- e60: 89 83 std Y+1, r24 ; 0x01
- e62: f7 dd rcall .-1042 ; 0xa52 <pos_report>
- e64: 89 81 ldd r24, Y+1 ; 0x01
- e66: af e3 ldi r26, 0x3F ; 63
- e68: bc e9 ldi r27, 0x9C ; 156
- e6a: 11 97 sbiw r26, 0x01 ; 1
- e6c: f1 f7 brne .-4 ; 0xe6a <main+0xa2>
- e6e: 00 c0 rjmp .+0 ; 0xe70 <main+0xa8>
- e70: 00 00 nop
+ eca: 89 83 std Y+1, r24 ; 0x01
+ ecc: f3 dd rcall .-1050 ; 0xab4 <pos_report>
+ ece: 89 81 ldd r24, Y+1 ; 0x01
+ ed0: 2f ef ldi r18, 0xFF ; 255
+ ed2: 39 ef ldi r19, 0xF9 ; 249
+ ed4: 40 e0 ldi r20, 0x00 ; 0
+ ed6: 21 50 subi r18, 0x01 ; 1
+ ed8: 30 40 sbci r19, 0x00 ; 0
+ eda: 40 40 sbci r20, 0x00 ; 0
+ edc: e1 f7 brne .-8 ; 0xed6 <main+0x9e>
+ ede: 00 c0 rjmp .+0 ; 0xee0 <main+0xa8>
+ ee0: 00 00 nop
plate_pos_x += dx;
plate_pos_y += dy;
last_busy = busy;
busy = move_plate(dx,dy);
- e72: 18 2f mov r17, r24
- e74: cd cf rjmp .-102 ; 0xe10 <main+0x48>
+ ee2: 18 2f mov r17, r24
+ ee4: ca cf rjmp .-108 ; 0xe7a <main+0x42>
-00000e76 <CALLBACK_USB_GetDescriptor>:
+00000ee6 <CALLBACK_USB_GetDescriptor>:
const uint8_t DescriptorNumber = (wValue & 0xFF);
const void* Address = NULL;
uint16_t Size = NO_DESCRIPTOR;
switch (DescriptorType)
- e76: 92 30 cpi r25, 0x02 ; 2
- e78: 29 f0 breq .+10 ; 0xe84 <CALLBACK_USB_GetDescriptor+0xe>
- e7a: 93 30 cpi r25, 0x03 ; 3
- e7c: 41 f0 breq .+16 ; 0xe8e <CALLBACK_USB_GetDescriptor+0x18>
- e7e: 91 30 cpi r25, 0x01 ; 1
- e80: e9 f4 brne .+58 ; 0xebc <CALLBACK_USB_GetDescriptor+0x46>
- e82: 17 c0 rjmp .+46 ; 0xeb2 <CALLBACK_USB_GetDescriptor+0x3c>
+ ee6: 92 30 cpi r25, 0x02 ; 2
+ ee8: 29 f0 breq .+10 ; 0xef4 <CALLBACK_USB_GetDescriptor+0xe>
+ eea: 93 30 cpi r25, 0x03 ; 3
+ eec: 41 f0 breq .+16 ; 0xefe <CALLBACK_USB_GetDescriptor+0x18>
+ eee: 91 30 cpi r25, 0x01 ; 1
+ ef0: e9 f4 brne .+58 ; 0xf2c <CALLBACK_USB_GetDescriptor+0x46>
+ ef2: 17 c0 rjmp .+46 ; 0xf22 <CALLBACK_USB_GetDescriptor+0x3c>
Address = &DeviceDescriptor;
Size = sizeof(USB_Descriptor_Device_t);
break;
case DTYPE_Configuration:
Address = &ConfigurationDescriptor;
Size = sizeof(USB_Descriptor_Configuration_t);
- e84: 2e e3 ldi r18, 0x3E ; 62
- e86: 30 e0 ldi r19, 0x00 ; 0
+ ef4: 2e e3 ldi r18, 0x3E ; 62
+ ef6: 30 e0 ldi r19, 0x00 ; 0
case DTYPE_Device:
Address = &DeviceDescriptor;
Size = sizeof(USB_Descriptor_Device_t);
break;
case DTYPE_Configuration:
Address = &ConfigurationDescriptor;
- e88: ea ea ldi r30, 0xAA ; 170
- e8a: f0 e0 ldi r31, 0x00 ; 0
+ ef8: ea ea ldi r30, 0xAA ; 170
+ efa: f0 e0 ldi r31, 0x00 ; 0
Size = sizeof(USB_Descriptor_Configuration_t);
break;
- e8c: 1b c0 rjmp .+54 ; 0xec4 <CALLBACK_USB_GetDescriptor+0x4e>
+ efc: 1b c0 rjmp .+54 ; 0xf34 <CALLBACK_USB_GetDescriptor+0x4e>
case DTYPE_String:
switch (DescriptorNumber)
- e8e: 81 30 cpi r24, 0x01 ; 1
- e90: 41 f0 breq .+16 ; 0xea2 <CALLBACK_USB_GetDescriptor+0x2c>
- e92: 81 30 cpi r24, 0x01 ; 1
- e94: 18 f0 brcs .+6 ; 0xe9c <CALLBACK_USB_GetDescriptor+0x26>
- e96: 82 30 cpi r24, 0x02 ; 2
- e98: 89 f4 brne .+34 ; 0xebc <CALLBACK_USB_GetDescriptor+0x46>
- e9a: 06 c0 rjmp .+12 ; 0xea8 <CALLBACK_USB_GetDescriptor+0x32>
+ efe: 81 30 cpi r24, 0x01 ; 1
+ f00: 41 f0 breq .+16 ; 0xf12 <CALLBACK_USB_GetDescriptor+0x2c>
+ f02: 81 30 cpi r24, 0x01 ; 1
+ f04: 18 f0 brcs .+6 ; 0xf0c <CALLBACK_USB_GetDescriptor+0x26>
+ f06: 82 30 cpi r24, 0x02 ; 2
+ f08: 89 f4 brne .+34 ; 0xf2c <CALLBACK_USB_GetDescriptor+0x46>
+ f0a: 06 c0 rjmp .+12 ; 0xf18 <CALLBACK_USB_GetDescriptor+0x32>
{
case 0x00:
Address = &LanguageString;
Size = pgm_read_byte(&LanguageString.Header.Size);
- e9c: e8 ee ldi r30, 0xE8 ; 232
- e9e: f0 e0 ldi r31, 0x00 ; 0
- ea0: 05 c0 rjmp .+10 ; 0xeac <CALLBACK_USB_GetDescriptor+0x36>
+ f0c: e8 ee ldi r30, 0xE8 ; 232
+ f0e: f0 e0 ldi r31, 0x00 ; 0
+ f10: 05 c0 rjmp .+10 ; 0xf1c <CALLBACK_USB_GetDescriptor+0x36>
break;
case 0x01:
Address = &ManufacturerString;
Size = pgm_read_byte(&ManufacturerString.Header.Size);
- ea2: ec ee ldi r30, 0xEC ; 236
- ea4: f0 e0 ldi r31, 0x00 ; 0
- ea6: 02 c0 rjmp .+4 ; 0xeac <CALLBACK_USB_GetDescriptor+0x36>
+ f12: ec ee ldi r30, 0xEC ; 236
+ f14: f0 e0 ldi r31, 0x00 ; 0
+ f16: 02 c0 rjmp .+4 ; 0xf1c <CALLBACK_USB_GetDescriptor+0x36>
break;
case 0x02:
Address = &ProductString;
Size = pgm_read_byte(&ProductString.Header.Size);
- ea8: e6 e0 ldi r30, 0x06 ; 6
- eaa: f1 e0 ldi r31, 0x01 ; 1
- eac: 24 91 lpm r18, Z+
- eae: 30 e0 ldi r19, 0x00 ; 0
+ f18: e6 e0 ldi r30, 0x06 ; 6
+ f1a: f1 e0 ldi r31, 0x01 ; 1
+ f1c: 24 91 lpm r18, Z+
+ f1e: 30 e0 ldi r19, 0x00 ; 0
break;
- eb0: 09 c0 rjmp .+18 ; 0xec4 <CALLBACK_USB_GetDescriptor+0x4e>
+ f20: 09 c0 rjmp .+18 ; 0xf34 <CALLBACK_USB_GetDescriptor+0x4e>
switch (DescriptorType)
{
case DTYPE_Device:
Address = &DeviceDescriptor;
Size = sizeof(USB_Descriptor_Device_t);
- eb2: 22 e1 ldi r18, 0x12 ; 18
- eb4: 30 e0 ldi r19, 0x00 ; 0
+ f22: 22 e1 ldi r18, 0x12 ; 18
+ f24: 30 e0 ldi r19, 0x00 ; 0
uint16_t Size = NO_DESCRIPTOR;
switch (DescriptorType)
{
case DTYPE_Device:
Address = &DeviceDescriptor;
- eb6: e8 e9 ldi r30, 0x98 ; 152
- eb8: f0 e0 ldi r31, 0x00 ; 0
- eba: 04 c0 rjmp .+8 ; 0xec4 <CALLBACK_USB_GetDescriptor+0x4e>
+ f26: e8 e9 ldi r30, 0x98 ; 152
+ f28: f0 e0 ldi r31, 0x00 ; 0
+ f2a: 04 c0 rjmp .+8 ; 0xf34 <CALLBACK_USB_GetDescriptor+0x4e>
{
const uint8_t DescriptorType = (wValue >> 8);
const uint8_t DescriptorNumber = (wValue & 0xFF);
const void* Address = NULL;
uint16_t Size = NO_DESCRIPTOR;
- ebc: 20 e0 ldi r18, 0x00 ; 0
- ebe: 30 e0 ldi r19, 0x00 ; 0
+ f2c: 20 e0 ldi r18, 0x00 ; 0
+ f2e: 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;
- ec0: e0 e0 ldi r30, 0x00 ; 0
- ec2: f0 e0 ldi r31, 0x00 ; 0
+ f30: e0 e0 ldi r30, 0x00 ; 0
+ f32: f0 e0 ldi r31, 0x00 ; 0
}
break;
}
*DescriptorAddress = Address;
- ec4: da 01 movw r26, r20
- ec6: 11 96 adiw r26, 0x01 ; 1
- ec8: fc 93 st X, r31
- eca: ee 93 st -X, r30
+ f34: da 01 movw r26, r20
+ f36: 11 96 adiw r26, 0x01 ; 1
+ f38: fc 93 st X, r31
+ f3a: ee 93 st -X, r30
return Size;
}
- ecc: c9 01 movw r24, r18
- ece: 08 95 ret
+ f3c: c9 01 movw r24, r18
+ f3e: 08 95 ret
-00000ed0 <Endpoint_Write_Control_Stream_LE>:
+00000f40 <Endpoint_Write_Control_Stream_LE>:
#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));
- ed0: 28 2f mov r18, r24
- ed2: 39 2f mov r19, r25
- ed4: f9 01 movw r30, r18
+ f40: 28 2f mov r18, r24
+ f42: 39 2f mov r19, r25
+ f44: f9 01 movw r30, r18
bool LastPacketFull = false;
if (Length > USB_ControlRequest.wLength)
- ed6: 80 91 ee 02 lds r24, 0x02EE
- eda: 90 91 ef 02 lds r25, 0x02EF
- ede: 86 17 cp r24, r22
- ee0: 97 07 cpc r25, r23
- ee2: 18 f4 brcc .+6 ; 0xeea <Endpoint_Write_Control_Stream_LE+0x1a>
- ee4: bc 01 movw r22, r24
- ee6: 20 e0 ldi r18, 0x00 ; 0
- ee8: 34 c0 rjmp .+104 ; 0xf52 <Endpoint_Write_Control_Stream_LE+0x82>
+ f46: 80 91 d2 02 lds r24, 0x02D2
+ f4a: 90 91 d3 02 lds r25, 0x02D3
+ f4e: 86 17 cp r24, r22
+ f50: 97 07 cpc r25, r23
+ f52: 18 f4 brcc .+6 ; 0xf5a <Endpoint_Write_Control_Stream_LE+0x1a>
+ f54: bc 01 movw r22, r24
+ f56: 20 e0 ldi r18, 0x00 ; 0
+ f58: 34 c0 rjmp .+104 ; 0xfc2 <Endpoint_Write_Control_Stream_LE+0x82>
Length = USB_ControlRequest.wLength;
else if (!(Length))
- eea: 61 15 cp r22, r1
- eec: 71 05 cpc r23, r1
- eee: d9 f7 brne .-10 ; 0xee6 <Endpoint_Write_Control_Stream_LE+0x16>
+ f5a: 61 15 cp r22, r1
+ f5c: 71 05 cpc r23, r1
+ f5e: d9 f7 brne .-10 ; 0xf56 <Endpoint_Write_Control_Stream_LE+0x16>
*/
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));
- ef0: 80 91 e8 00 lds r24, 0x00E8
- ef4: 8e 77 andi r24, 0x7E ; 126
- ef6: 80 93 e8 00 sts 0x00E8, r24
- efa: f5 cf rjmp .-22 ; 0xee6 <Endpoint_Write_Control_Stream_LE+0x16>
+ f60: 80 91 e8 00 lds r24, 0x00E8
+ f64: 8e 77 andi r24, 0x7E ; 126
+ f66: 80 93 e8 00 sts 0x00E8, r24
+ f6a: f5 cf rjmp .-22 ; 0xf56 <Endpoint_Write_Control_Stream_LE+0x16>
Endpoint_ClearIN();
while (Length || LastPacketFull)
{
uint8_t USB_DeviceState_LCL = USB_DeviceState;
- efc: 8e b3 in r24, 0x1e ; 30
+ f6c: 8e b3 in r24, 0x1e ; 30
if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
- efe: 88 23 and r24, r24
- f00: e9 f1 breq .+122 ; 0xf7c <Endpoint_Write_Control_Stream_LE+0xac>
+ f6e: 88 23 and r24, r24
+ f70: e9 f1 breq .+122 ; 0xfec <Endpoint_Write_Control_Stream_LE+0xac>
return ENDPOINT_RWCSTREAM_DeviceDisconnected;
else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
- f02: 85 30 cpi r24, 0x05 ; 5
- f04: b9 f1 breq .+110 ; 0xf74 <Endpoint_Write_Control_Stream_LE+0xa4>
+ f72: 85 30 cpi r24, 0x05 ; 5
+ f74: b9 f1 breq .+110 ; 0xfe4 <Endpoint_Write_Control_Stream_LE+0xa4>
* \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);
- f06: 80 91 e8 00 lds r24, 0x00E8
+ f76: 80 91 e8 00 lds r24, 0x00E8
return ENDPOINT_RWCSTREAM_BusSuspended;
else if (Endpoint_IsSETUPReceived())
- f0a: 83 fd sbrc r24, 3
- f0c: 35 c0 rjmp .+106 ; 0xf78 <Endpoint_Write_Control_Stream_LE+0xa8>
+ f7a: 83 fd sbrc r24, 3
+ f7c: 35 c0 rjmp .+106 ; 0xfe8 <Endpoint_Write_Control_Stream_LE+0xa8>
* \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);
- f0e: 80 91 e8 00 lds r24, 0x00E8
+ f7e: 80 91 e8 00 lds r24, 0x00E8
return ENDPOINT_RWCSTREAM_HostAborted;
else if (Endpoint_IsOUTReceived())
- f12: 82 fd sbrc r24, 2
- f14: 29 c0 rjmp .+82 ; 0xf68 <Endpoint_Write_Control_Stream_LE+0x98>
+ f82: 82 fd sbrc r24, 2
+ f84: 29 c0 rjmp .+82 ; 0xfd8 <Endpoint_Write_Control_Stream_LE+0x98>
* \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);
- f16: 80 91 e8 00 lds r24, 0x00E8
+ f86: 80 91 e8 00 lds r24, 0x00E8
break;
if (Endpoint_IsINReady())
- f1a: 80 ff sbrs r24, 0
- f1c: 1a c0 rjmp .+52 ; 0xf52 <Endpoint_Write_Control_Stream_LE+0x82>
+ f8a: 80 ff sbrs r24, 0
+ f8c: 1a c0 rjmp .+52 ; 0xfc2 <Endpoint_Write_Control_Stream_LE+0x82>
#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;
- f1e: 80 91 f2 00 lds r24, 0x00F2
- f22: 90 e0 ldi r25, 0x00 ; 0
+ f8e: 80 91 f2 00 lds r24, 0x00F2
+ f92: 90 e0 ldi r25, 0x00 ; 0
{
uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint();
while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize))
- f24: 06 c0 rjmp .+12 ; 0xf32 <Endpoint_Write_Control_Stream_LE+0x62>
+ f94: 06 c0 rjmp .+12 ; 0xfa2 <Endpoint_Write_Control_Stream_LE+0x62>
{
TEMPLATE_TRANSFER_BYTE(DataStream);
- f26: 21 91 ld r18, Z+
+ f96: 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;
- f28: 20 93 f1 00 sts 0x00F1, r18
+ f98: 20 93 f1 00 sts 0x00F1, r18
TEMPLATE_BUFFER_MOVE(DataStream, 1);
Length--;
- f2c: 61 50 subi r22, 0x01 ; 1
- f2e: 70 40 sbci r23, 0x00 ; 0
+ f9c: 61 50 subi r22, 0x01 ; 1
+ f9e: 70 40 sbci r23, 0x00 ; 0
BytesInEndpoint++;
- f30: 01 96 adiw r24, 0x01 ; 1
+ fa0: 01 96 adiw r24, 0x01 ; 1
if (Endpoint_IsINReady())
{
uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint();
while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize))
- f32: 61 15 cp r22, r1
- f34: 71 05 cpc r23, r1
- f36: 19 f0 breq .+6 ; 0xf3e <Endpoint_Write_Control_Stream_LE+0x6e>
- f38: 88 30 cpi r24, 0x08 ; 8
- f3a: 91 05 cpc r25, r1
- f3c: a0 f3 brcs .-24 ; 0xf26 <Endpoint_Write_Control_Stream_LE+0x56>
+ fa2: 61 15 cp r22, r1
+ fa4: 71 05 cpc r23, r1
+ fa6: 19 f0 breq .+6 ; 0xfae <Endpoint_Write_Control_Stream_LE+0x6e>
+ fa8: 88 30 cpi r24, 0x08 ; 8
+ faa: 91 05 cpc r25, r1
+ fac: a0 f3 brcs .-24 ; 0xf96 <Endpoint_Write_Control_Stream_LE+0x56>
TEMPLATE_BUFFER_MOVE(DataStream, 1);
Length--;
BytesInEndpoint++;
}
LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize);
- f3e: 21 e0 ldi r18, 0x01 ; 1
- f40: 88 30 cpi r24, 0x08 ; 8
- f42: 91 05 cpc r25, r1
- f44: 09 f0 breq .+2 ; 0xf48 <Endpoint_Write_Control_Stream_LE+0x78>
- f46: 20 e0 ldi r18, 0x00 ; 0
+ fae: 21 e0 ldi r18, 0x01 ; 1
+ fb0: 88 30 cpi r24, 0x08 ; 8
+ fb2: 91 05 cpc r25, r1
+ fb4: 09 f0 breq .+2 ; 0xfb8 <Endpoint_Write_Control_Stream_LE+0x78>
+ fb6: 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));
- f48: 80 91 e8 00 lds r24, 0x00E8
- f4c: 8e 77 andi r24, 0x7E ; 126
- f4e: 80 93 e8 00 sts 0x00E8, r24
+ fb8: 80 91 e8 00 lds r24, 0x00E8
+ fbc: 8e 77 andi r24, 0x7E ; 126
+ fbe: 80 93 e8 00 sts 0x00E8, r24
if (Length > USB_ControlRequest.wLength)
Length = USB_ControlRequest.wLength;
else if (!(Length))
Endpoint_ClearIN();
while (Length || LastPacketFull)
- f52: 61 15 cp r22, r1
- f54: 71 05 cpc r23, r1
- f56: 91 f6 brne .-92 ; 0xefc <Endpoint_Write_Control_Stream_LE+0x2c>
- f58: 22 23 and r18, r18
- f5a: 81 f6 brne .-96 ; 0xefc <Endpoint_Write_Control_Stream_LE+0x2c>
- f5c: 05 c0 rjmp .+10 ; 0xf68 <Endpoint_Write_Control_Stream_LE+0x98>
+ fc2: 61 15 cp r22, r1
+ fc4: 71 05 cpc r23, r1
+ fc6: 91 f6 brne .-92 ; 0xf6c <Endpoint_Write_Control_Stream_LE+0x2c>
+ fc8: 22 23 and r18, r18
+ fca: 81 f6 brne .-96 ; 0xf6c <Endpoint_Write_Control_Stream_LE+0x2c>
+ fcc: 05 c0 rjmp .+10 ; 0xfd8 <Endpoint_Write_Control_Stream_LE+0x98>
}
}
while (!(Endpoint_IsOUTReceived()))
{
uint8_t USB_DeviceState_LCL = USB_DeviceState;
- f5e: 8e b3 in r24, 0x1e ; 30
+ fce: 8e b3 in r24, 0x1e ; 30
if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
- f60: 88 23 and r24, r24
- f62: 61 f0 breq .+24 ; 0xf7c <Endpoint_Write_Control_Stream_LE+0xac>
+ fd0: 88 23 and r24, r24
+ fd2: 61 f0 breq .+24 ; 0xfec <Endpoint_Write_Control_Stream_LE+0xac>
return ENDPOINT_RWCSTREAM_DeviceDisconnected;
else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
- f64: 85 30 cpi r24, 0x05 ; 5
- f66: 61 f0 breq .+24 ; 0xf80 <Endpoint_Write_Control_Stream_LE+0xb0>
+ fd4: 85 30 cpi r24, 0x05 ; 5
+ fd6: 61 f0 breq .+24 ; 0xff0 <Endpoint_Write_Control_Stream_LE+0xb0>
* \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);
- f68: 80 91 e8 00 lds r24, 0x00E8
+ fd8: 80 91 e8 00 lds r24, 0x00E8
LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize);
Endpoint_ClearIN();
}
}
while (!(Endpoint_IsOUTReceived()))
- f6c: 82 ff sbrs r24, 2
- f6e: f7 cf rjmp .-18 ; 0xf5e <Endpoint_Write_Control_Stream_LE+0x8e>
+ fdc: 82 ff sbrs r24, 2
+ fde: f7 cf rjmp .-18 ; 0xfce <Endpoint_Write_Control_Stream_LE+0x8e>
return ENDPOINT_RWCSTREAM_DeviceDisconnected;
else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
return ENDPOINT_RWCSTREAM_BusSuspended;
}
return ENDPOINT_RWCSTREAM_NoError;
- f70: 80 e0 ldi r24, 0x00 ; 0
- f72: 08 95 ret
+ fe0: 80 e0 ldi r24, 0x00 ; 0
+ fe2: 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;
- f74: 83 e0 ldi r24, 0x03 ; 3
- f76: 08 95 ret
+ fe4: 83 e0 ldi r24, 0x03 ; 3
+ fe6: 08 95 ret
else if (Endpoint_IsSETUPReceived())
return ENDPOINT_RWCSTREAM_HostAborted;
- f78: 81 e0 ldi r24, 0x01 ; 1
- f7a: 08 95 ret
+ fe8: 81 e0 ldi r24, 0x01 ; 1
+ fea: 08 95 ret
while (!(Endpoint_IsOUTReceived()))
{
uint8_t USB_DeviceState_LCL = USB_DeviceState;
if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
return ENDPOINT_RWCSTREAM_DeviceDisconnected;
- f7c: 82 e0 ldi r24, 0x02 ; 2
- f7e: 08 95 ret
+ fec: 82 e0 ldi r24, 0x02 ; 2
+ fee: 08 95 ret
else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
return ENDPOINT_RWCSTREAM_BusSuspended;
- f80: 83 e0 ldi r24, 0x03 ; 3
+ ff0: 83 e0 ldi r24, 0x03 ; 3
}
return ENDPOINT_RWCSTREAM_NoError;
}
- f82: 08 95 ret
+ ff2: 08 95 ret
-00000f84 <Endpoint_Write_Control_PStream_LE>:
+00000ff4 <Endpoint_Write_Control_PStream_LE>:
#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));
- f84: e8 2f mov r30, r24
- f86: f9 2f mov r31, r25
+ ff4: e8 2f mov r30, r24
+ ff6: f9 2f mov r31, r25
bool LastPacketFull = false;
if (Length > USB_ControlRequest.wLength)
- f88: 80 91 ee 02 lds r24, 0x02EE
- f8c: 90 91 ef 02 lds r25, 0x02EF
- f90: 86 17 cp r24, r22
- f92: 97 07 cpc r25, r23
- f94: 18 f4 brcc .+6 ; 0xf9c <Endpoint_Write_Control_PStream_LE+0x18>
- f96: bc 01 movw r22, r24
- f98: 20 e0 ldi r18, 0x00 ; 0
- f9a: 36 c0 rjmp .+108 ; 0x1008 <Endpoint_Write_Control_PStream_LE+0x84>
+ ff8: 80 91 d2 02 lds r24, 0x02D2
+ ffc: 90 91 d3 02 lds r25, 0x02D3
+ 1000: 86 17 cp r24, r22
+ 1002: 97 07 cpc r25, r23
+ 1004: 18 f4 brcc .+6 ; 0x100c <Endpoint_Write_Control_PStream_LE+0x18>
+ 1006: bc 01 movw r22, r24
+ 1008: 20 e0 ldi r18, 0x00 ; 0
+ 100a: 36 c0 rjmp .+108 ; 0x1078 <Endpoint_Write_Control_PStream_LE+0x84>
Length = USB_ControlRequest.wLength;
else if (!(Length))
- f9c: 61 15 cp r22, r1
- f9e: 71 05 cpc r23, r1
- fa0: d9 f7 brne .-10 ; 0xf98 <Endpoint_Write_Control_PStream_LE+0x14>
+ 100c: 61 15 cp r22, r1
+ 100e: 71 05 cpc r23, r1
+ 1010: d9 f7 brne .-10 ; 0x1008 <Endpoint_Write_Control_PStream_LE+0x14>
*/
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));
- fa2: 80 91 e8 00 lds r24, 0x00E8
- fa6: 8e 77 andi r24, 0x7E ; 126
- fa8: 80 93 e8 00 sts 0x00E8, r24
- fac: f5 cf rjmp .-22 ; 0xf98 <Endpoint_Write_Control_PStream_LE+0x14>
+ 1012: 80 91 e8 00 lds r24, 0x00E8
+ 1016: 8e 77 andi r24, 0x7E ; 126
+ 1018: 80 93 e8 00 sts 0x00E8, r24
+ 101c: f5 cf rjmp .-22 ; 0x1008 <Endpoint_Write_Control_PStream_LE+0x14>
Endpoint_ClearIN();
while (Length || LastPacketFull)
{
uint8_t USB_DeviceState_LCL = USB_DeviceState;
- fae: 8e b3 in r24, 0x1e ; 30
+ 101e: 8e b3 in r24, 0x1e ; 30
if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
- fb0: 88 23 and r24, r24
- fb2: 09 f4 brne .+2 ; 0xfb6 <Endpoint_Write_Control_PStream_LE+0x32>
- fb4: 3e c0 rjmp .+124 ; 0x1032 <Endpoint_Write_Control_PStream_LE+0xae>
+ 1020: 88 23 and r24, r24
+ 1022: 09 f4 brne .+2 ; 0x1026 <Endpoint_Write_Control_PStream_LE+0x32>
+ 1024: 3e c0 rjmp .+124 ; 0x10a2 <Endpoint_Write_Control_PStream_LE+0xae>
return ENDPOINT_RWCSTREAM_DeviceDisconnected;
else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
- fb6: 85 30 cpi r24, 0x05 ; 5
- fb8: c1 f1 breq .+112 ; 0x102a <Endpoint_Write_Control_PStream_LE+0xa6>
+ 1026: 85 30 cpi r24, 0x05 ; 5
+ 1028: c1 f1 breq .+112 ; 0x109a <Endpoint_Write_Control_PStream_LE+0xa6>
* \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);
- fba: 80 91 e8 00 lds r24, 0x00E8
+ 102a: 80 91 e8 00 lds r24, 0x00E8
return ENDPOINT_RWCSTREAM_BusSuspended;
else if (Endpoint_IsSETUPReceived())
- fbe: 83 fd sbrc r24, 3
- fc0: 36 c0 rjmp .+108 ; 0x102e <Endpoint_Write_Control_PStream_LE+0xaa>
+ 102e: 83 fd sbrc r24, 3
+ 1030: 36 c0 rjmp .+108 ; 0x109e <Endpoint_Write_Control_PStream_LE+0xaa>
* \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);
- fc2: 80 91 e8 00 lds r24, 0x00E8
+ 1032: 80 91 e8 00 lds r24, 0x00E8
return ENDPOINT_RWCSTREAM_HostAborted;
else if (Endpoint_IsOUTReceived())
- fc6: 82 fd sbrc r24, 2
- fc8: 2a c0 rjmp .+84 ; 0x101e <Endpoint_Write_Control_PStream_LE+0x9a>
+ 1036: 82 fd sbrc r24, 2
+ 1038: 2a c0 rjmp .+84 ; 0x108e <Endpoint_Write_Control_PStream_LE+0x9a>
* \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);
- fca: 80 91 e8 00 lds r24, 0x00E8
+ 103a: 80 91 e8 00 lds r24, 0x00E8
break;
if (Endpoint_IsINReady())
- fce: 80 ff sbrs r24, 0
- fd0: 1b c0 rjmp .+54 ; 0x1008 <Endpoint_Write_Control_PStream_LE+0x84>
+ 103e: 80 ff sbrs r24, 0
+ 1040: 1b c0 rjmp .+54 ; 0x1078 <Endpoint_Write_Control_PStream_LE+0x84>
#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;
- fd2: 80 91 f2 00 lds r24, 0x00F2
- fd6: 90 e0 ldi r25, 0x00 ; 0
+ 1042: 80 91 f2 00 lds r24, 0x00F2
+ 1046: 90 e0 ldi r25, 0x00 ; 0
{
uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint();
while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize))
- fd8: 07 c0 rjmp .+14 ; 0xfe8 <Endpoint_Write_Control_PStream_LE+0x64>
+ 1048: 07 c0 rjmp .+14 ; 0x1058 <Endpoint_Write_Control_PStream_LE+0x64>
{
TEMPLATE_TRANSFER_BYTE(DataStream);
- fda: 24 91 lpm r18, Z+
+ 104a: 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;
- fdc: 20 93 f1 00 sts 0x00F1, r18
+ 104c: 20 93 f1 00 sts 0x00F1, r18
TEMPLATE_BUFFER_MOVE(DataStream, 1);
- fe0: 31 96 adiw r30, 0x01 ; 1
+ 1050: 31 96 adiw r30, 0x01 ; 1
Length--;
- fe2: 61 50 subi r22, 0x01 ; 1
- fe4: 70 40 sbci r23, 0x00 ; 0
+ 1052: 61 50 subi r22, 0x01 ; 1
+ 1054: 70 40 sbci r23, 0x00 ; 0
BytesInEndpoint++;
- fe6: 01 96 adiw r24, 0x01 ; 1
+ 1056: 01 96 adiw r24, 0x01 ; 1
if (Endpoint_IsINReady())
{
uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint();
while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize))
- fe8: 61 15 cp r22, r1
- fea: 71 05 cpc r23, r1
- fec: 19 f0 breq .+6 ; 0xff4 <Endpoint_Write_Control_PStream_LE+0x70>
- fee: 88 30 cpi r24, 0x08 ; 8
- ff0: 91 05 cpc r25, r1
- ff2: 98 f3 brcs .-26 ; 0xfda <Endpoint_Write_Control_PStream_LE+0x56>
+ 1058: 61 15 cp r22, r1
+ 105a: 71 05 cpc r23, r1
+ 105c: 19 f0 breq .+6 ; 0x1064 <Endpoint_Write_Control_PStream_LE+0x70>
+ 105e: 88 30 cpi r24, 0x08 ; 8
+ 1060: 91 05 cpc r25, r1
+ 1062: 98 f3 brcs .-26 ; 0x104a <Endpoint_Write_Control_PStream_LE+0x56>
TEMPLATE_BUFFER_MOVE(DataStream, 1);
Length--;
BytesInEndpoint++;
}
LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize);
- ff4: 21 e0 ldi r18, 0x01 ; 1
- ff6: 88 30 cpi r24, 0x08 ; 8
- ff8: 91 05 cpc r25, r1
- ffa: 09 f0 breq .+2 ; 0xffe <Endpoint_Write_Control_PStream_LE+0x7a>
- ffc: 20 e0 ldi r18, 0x00 ; 0
+ 1064: 21 e0 ldi r18, 0x01 ; 1
+ 1066: 88 30 cpi r24, 0x08 ; 8
+ 1068: 91 05 cpc r25, r1
+ 106a: 09 f0 breq .+2 ; 0x106e <Endpoint_Write_Control_PStream_LE+0x7a>
+ 106c: 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));
- ffe: 80 91 e8 00 lds r24, 0x00E8
- 1002: 8e 77 andi r24, 0x7E ; 126
- 1004: 80 93 e8 00 sts 0x00E8, r24
+ 106e: 80 91 e8 00 lds r24, 0x00E8
+ 1072: 8e 77 andi r24, 0x7E ; 126
+ 1074: 80 93 e8 00 sts 0x00E8, r24
if (Length > USB_ControlRequest.wLength)
Length = USB_ControlRequest.wLength;
else if (!(Length))
Endpoint_ClearIN();
while (Length || LastPacketFull)
- 1008: 61 15 cp r22, r1
- 100a: 71 05 cpc r23, r1
- 100c: 81 f6 brne .-96 ; 0xfae <Endpoint_Write_Control_PStream_LE+0x2a>
- 100e: 22 23 and r18, r18
- 1010: 71 f6 brne .-100 ; 0xfae <Endpoint_Write_Control_PStream_LE+0x2a>
- 1012: 05 c0 rjmp .+10 ; 0x101e <Endpoint_Write_Control_PStream_LE+0x9a>
+ 1078: 61 15 cp r22, r1
+ 107a: 71 05 cpc r23, r1
+ 107c: 81 f6 brne .-96 ; 0x101e <Endpoint_Write_Control_PStream_LE+0x2a>
+ 107e: 22 23 and r18, r18
+ 1080: 71 f6 brne .-100 ; 0x101e <Endpoint_Write_Control_PStream_LE+0x2a>
+ 1082: 05 c0 rjmp .+10 ; 0x108e <Endpoint_Write_Control_PStream_LE+0x9a>
}
}
while (!(Endpoint_IsOUTReceived()))
{
uint8_t USB_DeviceState_LCL = USB_DeviceState;
- 1014: 8e b3 in r24, 0x1e ; 30
+ 1084: 8e b3 in r24, 0x1e ; 30
if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
- 1016: 88 23 and r24, r24
- 1018: 61 f0 breq .+24 ; 0x1032 <Endpoint_Write_Control_PStream_LE+0xae>
+ 1086: 88 23 and r24, r24
+ 1088: 61 f0 breq .+24 ; 0x10a2 <Endpoint_Write_Control_PStream_LE+0xae>
return ENDPOINT_RWCSTREAM_DeviceDisconnected;
else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
- 101a: 85 30 cpi r24, 0x05 ; 5
- 101c: 61 f0 breq .+24 ; 0x1036 <Endpoint_Write_Control_PStream_LE+0xb2>
+ 108a: 85 30 cpi r24, 0x05 ; 5
+ 108c: 61 f0 breq .+24 ; 0x10a6 <Endpoint_Write_Control_PStream_LE+0xb2>
* \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);
- 101e: 80 91 e8 00 lds r24, 0x00E8
+ 108e: 80 91 e8 00 lds r24, 0x00E8
LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize);
Endpoint_ClearIN();
}
}
while (!(Endpoint_IsOUTReceived()))
- 1022: 82 ff sbrs r24, 2
- 1024: f7 cf rjmp .-18 ; 0x1014 <Endpoint_Write_Control_PStream_LE+0x90>
+ 1092: 82 ff sbrs r24, 2
+ 1094: f7 cf rjmp .-18 ; 0x1084 <Endpoint_Write_Control_PStream_LE+0x90>
return ENDPOINT_RWCSTREAM_DeviceDisconnected;
else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
return ENDPOINT_RWCSTREAM_BusSuspended;
}
return ENDPOINT_RWCSTREAM_NoError;
- 1026: 80 e0 ldi r24, 0x00 ; 0
- 1028: 08 95 ret
+ 1096: 80 e0 ldi r24, 0x00 ; 0
+ 1098: 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;
- 102a: 83 e0 ldi r24, 0x03 ; 3
- 102c: 08 95 ret
+ 109a: 83 e0 ldi r24, 0x03 ; 3
+ 109c: 08 95 ret
else if (Endpoint_IsSETUPReceived())
return ENDPOINT_RWCSTREAM_HostAborted;
- 102e: 81 e0 ldi r24, 0x01 ; 1
- 1030: 08 95 ret
+ 109e: 81 e0 ldi r24, 0x01 ; 1
+ 10a0: 08 95 ret
while (!(Endpoint_IsOUTReceived()))
{
uint8_t USB_DeviceState_LCL = USB_DeviceState;
if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
return ENDPOINT_RWCSTREAM_DeviceDisconnected;
- 1032: 82 e0 ldi r24, 0x02 ; 2
- 1034: 08 95 ret
+ 10a2: 82 e0 ldi r24, 0x02 ; 2
+ 10a4: 08 95 ret
else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
return ENDPOINT_RWCSTREAM_BusSuspended;
- 1036: 83 e0 ldi r24, 0x03 ; 3
+ 10a6: 83 e0 ldi r24, 0x03 ; 3
}
return ENDPOINT_RWCSTREAM_NoError;
}
- 1038: 08 95 ret
+ 10a8: 08 95 ret
-0000103a <Endpoint_ConfigureEndpoint_Prv>:
+000010aa <Endpoint_ConfigureEndpoint_Prv>:
UECFG0X = UECFG0XData;
UECFG1X = UECFG1XData;
return Endpoint_IsConfigured();
#else
for (uint8_t EPNum = Number; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++)
- 103a: 98 2f mov r25, r24
- 103c: 2c c0 rjmp .+88 ; 0x1096 <Endpoint_ConfigureEndpoint_Prv+0x5c>
+ 10aa: 98 2f mov r25, r24
+ 10ac: 2c c0 rjmp .+88 ; 0x1106 <Endpoint_ConfigureEndpoint_Prv+0x5c>
*/
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);
- 103e: 29 2f mov r18, r25
- 1040: 2f 70 andi r18, 0x0F ; 15
- 1042: 20 93 e9 00 sts 0x00E9, r18
+ 10ae: 29 2f mov r18, r25
+ 10b0: 2f 70 andi r18, 0x0F ; 15
+ 10b2: 20 93 e9 00 sts 0x00E9, r18
uint8_t UECFG1XTemp;
uint8_t UEIENXTemp;
Endpoint_SelectEndpoint(EPNum);
if (EPNum == Number)
- 1046: 98 17 cp r25, r24
- 1048: 39 f0 breq .+14 ; 0x1058 <Endpoint_ConfigureEndpoint_Prv+0x1e>
+ 10b6: 98 17 cp r25, r24
+ 10b8: 39 f0 breq .+14 ; 0x10c8 <Endpoint_ConfigureEndpoint_Prv+0x1e>
UECFG1XTemp = UECFG1XData;
UEIENXTemp = 0;
}
else
{
UECFG0XTemp = UECFG0X;
- 104a: 70 91 ec 00 lds r23, 0x00EC
+ 10ba: 70 91 ec 00 lds r23, 0x00EC
UECFG1XTemp = UECFG1X;
- 104e: 20 91 ed 00 lds r18, 0x00ED
+ 10be: 20 91 ed 00 lds r18, 0x00ED
UEIENXTemp = UEIENX;
- 1052: 50 91 f0 00 lds r21, 0x00F0
- 1056: 03 c0 rjmp .+6 ; 0x105e <Endpoint_ConfigureEndpoint_Prv+0x24>
+ 10c2: 50 91 f0 00 lds r21, 0x00F0
+ 10c6: 03 c0 rjmp .+6 ; 0x10ce <Endpoint_ConfigureEndpoint_Prv+0x24>
Endpoint_SelectEndpoint(EPNum);
if (EPNum == Number)
{
UECFG0XTemp = UECFG0XData;
UECFG1XTemp = UECFG1XData;
- 1058: 24 2f mov r18, r20
+ 10c8: 24 2f mov r18, r20
Endpoint_SelectEndpoint(EPNum);
if (EPNum == Number)
{
UECFG0XTemp = UECFG0XData;
- 105a: 76 2f mov r23, r22
+ 10ca: 76 2f mov r23, r22
UECFG1XTemp = UECFG1XData;
UEIENXTemp = 0;
- 105c: 50 e0 ldi r21, 0x00 ; 0
+ 10cc: 50 e0 ldi r21, 0x00 ; 0
UECFG0XTemp = UECFG0X;
UECFG1XTemp = UECFG1X;
UEIENXTemp = UEIENX;
}
if (!(UECFG1XTemp & (1 << ALLOC)))
- 105e: 21 ff sbrs r18, 1
- 1060: 19 c0 rjmp .+50 ; 0x1094 <Endpoint_ConfigureEndpoint_Prv+0x5a>
+ 10ce: 21 ff sbrs r18, 1
+ 10d0: 19 c0 rjmp .+50 ; 0x1104 <Endpoint_ConfigureEndpoint_Prv+0x5a>
* to and from a host.
*/
static inline void Endpoint_DisableEndpoint(void) ATTR_ALWAYS_INLINE;
static inline void Endpoint_DisableEndpoint(void)
{
UECONX &= ~(1 << EPEN);
- 1062: 30 91 eb 00 lds r19, 0x00EB
- 1066: 3e 7f andi r19, 0xFE ; 254
- 1068: 30 93 eb 00 sts 0x00EB, r19
+ 10d2: 30 91 eb 00 lds r19, 0x00EB
+ 10d6: 3e 7f andi r19, 0xFE ; 254
+ 10d8: 30 93 eb 00 sts 0x00EB, r19
continue;
Endpoint_DisableEndpoint();
UECFG1X &= ~(1 << ALLOC);
- 106c: 30 91 ed 00 lds r19, 0x00ED
- 1070: 3d 7f andi r19, 0xFD ; 253
- 1072: 30 93 ed 00 sts 0x00ED, r19
+ 10dc: 30 91 ed 00 lds r19, 0x00ED
+ 10e0: 3d 7f andi r19, 0xFD ; 253
+ 10e2: 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);
- 1076: 30 91 eb 00 lds r19, 0x00EB
- 107a: 31 60 ori r19, 0x01 ; 1
- 107c: 30 93 eb 00 sts 0x00EB, r19
+ 10e6: 30 91 eb 00 lds r19, 0x00EB
+ 10ea: 31 60 ori r19, 0x01 ; 1
+ 10ec: 30 93 eb 00 sts 0x00EB, r19
Endpoint_EnableEndpoint();
UECFG0X = UECFG0XTemp;
- 1080: 70 93 ec 00 sts 0x00EC, r23
+ 10f0: 70 93 ec 00 sts 0x00EC, r23
UECFG1X = UECFG1XTemp;
- 1084: 20 93 ed 00 sts 0x00ED, r18
+ 10f4: 20 93 ed 00 sts 0x00ED, r18
UEIENX = UEIENXTemp;
- 1088: 50 93 f0 00 sts 0x00F0, r21
+ 10f8: 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);
- 108c: 20 91 ee 00 lds r18, 0x00EE
+ 10fc: 20 91 ee 00 lds r18, 0x00EE
if (!(Endpoint_IsConfigured()))
- 1090: 27 ff sbrs r18, 7
- 1092: 08 c0 rjmp .+16 ; 0x10a4 <Endpoint_ConfigureEndpoint_Prv+0x6a>
+ 1100: 27 ff sbrs r18, 7
+ 1102: 08 c0 rjmp .+16 ; 0x1114 <Endpoint_ConfigureEndpoint_Prv+0x6a>
UECFG0X = UECFG0XData;
UECFG1X = UECFG1XData;
return Endpoint_IsConfigured();
#else
for (uint8_t EPNum = Number; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++)
- 1094: 9f 5f subi r25, 0xFF ; 255
- 1096: 95 30 cpi r25, 0x05 ; 5
- 1098: 90 f2 brcs .-92 ; 0x103e <Endpoint_ConfigureEndpoint_Prv+0x4>
+ 1104: 9f 5f subi r25, 0xFF ; 255
+ 1106: 95 30 cpi r25, 0x05 ; 5
+ 1108: 90 f2 brcs .-92 ; 0x10ae <Endpoint_ConfigureEndpoint_Prv+0x4>
*/
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);
- 109a: 8f 70 andi r24, 0x0F ; 15
- 109c: 80 93 e9 00 sts 0x00E9, r24
+ 110a: 8f 70 andi r24, 0x0F ; 15
+ 110c: 80 93 e9 00 sts 0x00E9, r24
if (!(Endpoint_IsConfigured()))
return false;
}
Endpoint_SelectEndpoint(Number);
return true;
- 10a0: 81 e0 ldi r24, 0x01 ; 1
- 10a2: 08 95 ret
+ 1110: 81 e0 ldi r24, 0x01 ; 1
+ 1112: 08 95 ret
UECFG0X = UECFG0XTemp;
UECFG1X = UECFG1XTemp;
UEIENX = UEIENXTemp;
if (!(Endpoint_IsConfigured()))
return false;
- 10a4: 80 e0 ldi r24, 0x00 ; 0
+ 1114: 80 e0 ldi r24, 0x00 ; 0
}
Endpoint_SelectEndpoint(Number);
return true;
#endif
}
- 10a6: 08 95 ret
+ 1116: 08 95 ret
-000010a8 <Endpoint_ConfigureEndpointTable>:
+00001118 <Endpoint_ConfigureEndpointTable>:
uint8_t USB_Device_ControlEndpointSize = ENDPOINT_CONTROLEP_DEFAULT_SIZE;
#endif
bool Endpoint_ConfigureEndpointTable(const USB_Endpoint_Table_t* const Table,
const uint8_t Entries)
{
- 10a8: ef 92 push r14
- 10aa: ff 92 push r15
- 10ac: 0f 93 push r16
- 10ae: 1f 93 push r17
- 10b0: cf 93 push r28
- 10b2: df 93 push r29
- 10b4: 16 2f mov r17, r22
+ 1118: ef 92 push r14
+ 111a: ff 92 push r15
+ 111c: 0f 93 push r16
+ 111e: 1f 93 push r17
+ 1120: cf 93 push r28
+ 1122: df 93 push r29
+ 1124: 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;
- 10b6: e8 2e mov r14, r24
- 10b8: e7 01 movw r28, r14
- 10ba: 7e 01 movw r14, r28
- 10bc: f9 2e mov r15, r25
- 10be: e7 01 movw r28, r14
+ 1126: e8 2e mov r14, r24
+ 1128: e7 01 movw r28, r14
+ 112a: 7e 01 movw r14, r28
+ 112c: f9 2e mov r15, r25
+ 112e: 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++)
- 10c0: 00 e0 ldi r16, 0x00 ; 0
- 10c2: 2a c0 rjmp .+84 ; 0x1118 <Endpoint_ConfigureEndpointTable+0x70>
+ 1130: 00 e0 ldi r16, 0x00 ; 0
+ 1132: 2a c0 rjmp .+84 ; 0x1188 <Endpoint_ConfigureEndpointTable+0x70>
{
if (!(Table[i].Address))
- 10c4: 98 81 ld r25, Y
- 10c6: 99 23 and r25, r25
- 10c8: 29 f1 breq .+74 ; 0x1114 <Endpoint_ConfigureEndpointTable+0x6c>
+ 1134: 98 81 ld r25, Y
+ 1136: 99 23 and r25, r25
+ 1138: 29 f1 breq .+74 ; 0x1184 <Endpoint_ConfigureEndpointTable+0x6c>
continue;
if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks)))
- 10ca: 6b 81 ldd r22, Y+3 ; 0x03
- 10cc: e9 81 ldd r30, Y+1 ; 0x01
- 10ce: fa 81 ldd r31, Y+2 ; 0x02
- 10d0: 2c 81 ldd r18, Y+4 ; 0x04
+ 113a: 6b 81 ldd r22, Y+3 ; 0x03
+ 113c: e9 81 ldd r30, Y+1 ; 0x01
+ 113e: fa 81 ldd r31, Y+2 ; 0x02
+ 1140: 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);
- 10d2: 89 2f mov r24, r25
- 10d4: 8f 70 andi r24, 0x0F ; 15
+ 1142: 89 2f mov r24, r25
+ 1144: 8f 70 andi r24, 0x0F ; 15
if (Number >= ENDPOINT_TOTAL_ENDPOINTS)
- 10d6: 85 30 cpi r24, 0x05 ; 5
- 10d8: 18 f5 brcc .+70 ; 0x1120 <Endpoint_ConfigureEndpointTable+0x78>
+ 1146: 85 30 cpi r24, 0x05 ; 5
+ 1148: 18 f5 brcc .+70 ; 0x1190 <Endpoint_ConfigureEndpointTable+0x78>
return false;
return Endpoint_ConfigureEndpoint_Prv(Number,
((Type << EPTYPE0) | ((Address & ENDPOINT_DIR_IN) ? (1 << EPDIR) : 0)),
- 10da: 62 95 swap r22
- 10dc: 66 0f add r22, r22
- 10de: 66 0f add r22, r22
- 10e0: 60 7c andi r22, 0xC0 ; 192
- 10e2: 99 1f adc r25, r25
- 10e4: 99 27 eor r25, r25
- 10e6: 99 1f adc r25, r25
+ 114a: 62 95 swap r22
+ 114c: 66 0f add r22, r22
+ 114e: 66 0f add r22, r22
+ 1150: 60 7c andi r22, 0xC0 ; 192
+ 1152: 99 1f adc r25, r25
+ 1154: 99 27 eor r25, r25
+ 1156: 99 1f adc r25, r25
uint8_t Number = (Address & ENDPOINT_EPNUM_MASK);
if (Number >= ENDPOINT_TOTAL_ENDPOINTS)
return false;
return Endpoint_ConfigureEndpoint_Prv(Number,
- 10e8: 69 2b or r22, r25
- 10ea: 22 30 cpi r18, 0x02 ; 2
- 10ec: 10 f0 brcs .+4 ; 0x10f2 <Endpoint_ConfigureEndpointTable+0x4a>
- 10ee: 96 e0 ldi r25, 0x06 ; 6
- 10f0: 01 c0 rjmp .+2 ; 0x10f4 <Endpoint_ConfigureEndpointTable+0x4c>
- 10f2: 92 e0 ldi r25, 0x02 ; 2
+ 1158: 69 2b or r22, r25
+ 115a: 22 30 cpi r18, 0x02 ; 2
+ 115c: 10 f0 brcs .+4 ; 0x1162 <Endpoint_ConfigureEndpointTable+0x4a>
+ 115e: 96 e0 ldi r25, 0x06 ; 6
+ 1160: 01 c0 rjmp .+2 ; 0x1164 <Endpoint_ConfigureEndpointTable+0x4c>
+ 1162: 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;
- 10f4: 28 e0 ldi r18, 0x08 ; 8
- 10f6: 30 e0 ldi r19, 0x00 ; 0
+ 1164: 28 e0 ldi r18, 0x08 ; 8
+ 1166: 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;
- 10f8: 40 e0 ldi r20, 0x00 ; 0
- 10fa: 03 c0 rjmp .+6 ; 0x1102 <Endpoint_ConfigureEndpointTable+0x5a>
+ 1168: 40 e0 ldi r20, 0x00 ; 0
+ 116a: 03 c0 rjmp .+6 ; 0x1172 <Endpoint_ConfigureEndpointTable+0x5a>
uint16_t CheckBytes = 8;
while (CheckBytes < Bytes)
{
MaskVal++;
- 10fc: 4f 5f subi r20, 0xFF ; 255
+ 116c: 4f 5f subi r20, 0xFF ; 255
CheckBytes <<= 1;
- 10fe: 22 0f add r18, r18
- 1100: 33 1f adc r19, r19
+ 116e: 22 0f add r18, r18
+ 1170: 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)
- 1102: 2e 17 cp r18, r30
- 1104: 3f 07 cpc r19, r31
- 1106: d0 f3 brcs .-12 ; 0x10fc <Endpoint_ConfigureEndpointTable+0x54>
+ 1172: 2e 17 cp r18, r30
+ 1174: 3f 07 cpc r19, r31
+ 1176: d0 f3 brcs .-12 ; 0x116c <Endpoint_ConfigureEndpointTable+0x54>
{
MaskVal++;
CheckBytes <<= 1;
}
return (MaskVal << EPSIZE0);
- 1108: 42 95 swap r20
- 110a: 40 7f andi r20, 0xF0 ; 240
+ 1178: 42 95 swap r20
+ 117a: 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,
- 110c: 49 2b or r20, r25
- 110e: 95 df rcall .-214 ; 0x103a <Endpoint_ConfigureEndpoint_Prv>
- 1110: 88 23 and r24, r24
- 1112: 31 f0 breq .+12 ; 0x1120 <Endpoint_ConfigureEndpointTable+0x78>
+ 117c: 49 2b or r20, r25
+ 117e: 95 df rcall .-214 ; 0x10aa <Endpoint_ConfigureEndpoint_Prv>
+ 1180: 88 23 and r24, r24
+ 1182: 31 f0 breq .+12 ; 0x1190 <Endpoint_ConfigureEndpointTable+0x78>
#endif
bool Endpoint_ConfigureEndpointTable(const USB_Endpoint_Table_t* const Table,
const uint8_t Entries)
{
for (uint8_t i = 0; i < Entries; i++)
- 1114: 0f 5f subi r16, 0xFF ; 255
- 1116: 25 96 adiw r28, 0x05 ; 5
- 1118: 01 17 cp r16, r17
- 111a: a0 f2 brcs .-88 ; 0x10c4 <Endpoint_ConfigureEndpointTable+0x1c>
+ 1184: 0f 5f subi r16, 0xFF ; 255
+ 1186: 25 96 adiw r28, 0x05 ; 5
+ 1188: 01 17 cp r16, r17
+ 118a: a0 f2 brcs .-88 ; 0x1134 <Endpoint_ConfigureEndpointTable+0x1c>
if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks)))
return false;
}
return true;
- 111c: 81 e0 ldi r24, 0x01 ; 1
- 111e: 01 c0 rjmp .+2 ; 0x1122 <Endpoint_ConfigureEndpointTable+0x7a>
+ 118c: 81 e0 ldi r24, 0x01 ; 1
+ 118e: 01 c0 rjmp .+2 ; 0x1192 <Endpoint_ConfigureEndpointTable+0x7a>
{
if (!(Table[i].Address))
continue;
if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks)))
return false;
- 1120: 80 e0 ldi r24, 0x00 ; 0
+ 1190: 80 e0 ldi r24, 0x00 ; 0
}
return true;
}
- 1122: df 91 pop r29
- 1124: cf 91 pop r28
- 1126: 1f 91 pop r17
- 1128: 0f 91 pop r16
- 112a: ff 90 pop r15
- 112c: ef 90 pop r14
- 112e: 08 95 ret
-
-00001130 <Endpoint_ClearStatusStage>:
+ 1192: df 91 pop r29
+ 1194: cf 91 pop r28
+ 1196: 1f 91 pop r17
+ 1198: 0f 91 pop r16
+ 119a: ff 90 pop r15
+ 119c: ef 90 pop r14
+ 119e: 08 95 ret
+
+000011a0 <Endpoint_ClearStatusStage>:
}
}
void Endpoint_ClearStatusStage(void)
{
if (USB_ControlRequest.bmRequestType & REQDIR_DEVICETOHOST)
- 1130: 80 91 e8 02 lds r24, 0x02E8
- 1134: 87 ff sbrs r24, 7
- 1136: 11 c0 rjmp .+34 ; 0x115a <Endpoint_ClearStatusStage+0x2a>
- 1138: 03 c0 rjmp .+6 ; 0x1140 <Endpoint_ClearStatusStage+0x10>
+ 11a0: 80 91 cc 02 lds r24, 0x02CC
+ 11a4: 87 ff sbrs r24, 7
+ 11a6: 11 c0 rjmp .+34 ; 0x11ca <Endpoint_ClearStatusStage+0x2a>
+ 11a8: 03 c0 rjmp .+6 ; 0x11b0 <Endpoint_ClearStatusStage+0x10>
{
while (!(Endpoint_IsOUTReceived()))
{
if (USB_DeviceState == DEVICE_STATE_Unattached)
- 113a: 8e b3 in r24, 0x1e ; 30
- 113c: 88 23 and r24, r24
- 113e: b1 f0 breq .+44 ; 0x116c <Endpoint_ClearStatusStage+0x3c>
+ 11aa: 8e b3 in r24, 0x1e ; 30
+ 11ac: 88 23 and r24, r24
+ 11ae: b1 f0 breq .+44 ; 0x11dc <Endpoint_ClearStatusStage+0x3c>
* \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);
- 1140: 80 91 e8 00 lds r24, 0x00E8
+ 11b0: 80 91 e8 00 lds r24, 0x00E8
void Endpoint_ClearStatusStage(void)
{
if (USB_ControlRequest.bmRequestType & REQDIR_DEVICETOHOST)
{
while (!(Endpoint_IsOUTReceived()))
- 1144: 82 ff sbrs r24, 2
- 1146: f9 cf rjmp .-14 ; 0x113a <Endpoint_ClearStatusStage+0xa>
+ 11b4: 82 ff sbrs r24, 2
+ 11b6: f9 cf rjmp .-14 ; 0x11aa <Endpoint_ClearStatusStage+0xa>
*/
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));
- 1148: 80 91 e8 00 lds r24, 0x00E8
- 114c: 8b 77 andi r24, 0x7B ; 123
- 114e: 80 93 e8 00 sts 0x00E8, r24
- 1152: 08 95 ret
+ 11b8: 80 91 e8 00 lds r24, 0x00E8
+ 11bc: 8b 77 andi r24, 0x7B ; 123
+ 11be: 80 93 e8 00 sts 0x00E8, r24
+ 11c2: 08 95 ret
}
else
{
while (!(Endpoint_IsINReady()))
{
if (USB_DeviceState == DEVICE_STATE_Unattached)
- 1154: 8e b3 in r24, 0x1e ; 30
- 1156: 88 23 and r24, r24
- 1158: 49 f0 breq .+18 ; 0x116c <Endpoint_ClearStatusStage+0x3c>
+ 11c4: 8e b3 in r24, 0x1e ; 30
+ 11c6: 88 23 and r24, r24
+ 11c8: 49 f0 breq .+18 ; 0x11dc <Endpoint_ClearStatusStage+0x3c>
* \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);
- 115a: 80 91 e8 00 lds r24, 0x00E8
+ 11ca: 80 91 e8 00 lds r24, 0x00E8
Endpoint_ClearOUT();
}
else
{
while (!(Endpoint_IsINReady()))
- 115e: 80 ff sbrs r24, 0
- 1160: f9 cf rjmp .-14 ; 0x1154 <Endpoint_ClearStatusStage+0x24>
+ 11ce: 80 ff sbrs r24, 0
+ 11d0: f9 cf rjmp .-14 ; 0x11c4 <Endpoint_ClearStatusStage+0x24>
*/
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));
- 1162: 80 91 e8 00 lds r24, 0x00E8
- 1166: 8e 77 andi r24, 0x7E ; 126
- 1168: 80 93 e8 00 sts 0x00E8, r24
- 116c: 08 95 ret
+ 11d2: 80 91 e8 00 lds r24, 0x00E8
+ 11d6: 8e 77 andi r24, 0x7E ; 126
+ 11d8: 80 93 e8 00 sts 0x00E8, r24
+ 11dc: 08 95 ret
-0000116e <Endpoint_WaitUntilReady>:
+000011de <Endpoint_WaitUntilReady>:
* \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;
- 116e: 80 91 e4 00 lds r24, 0x00E4
- 1172: 90 91 e5 00 lds r25, 0x00E5
+ 11de: 80 91 e4 00 lds r24, 0x00E4
+ 11e2: 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;
- 1176: 44 e6 ldi r20, 0x64 ; 100
+ 11e6: 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;
- 1178: 20 91 ec 00 lds r18, 0x00EC
- 117c: 20 ff sbrs r18, 0
- 117e: 25 c0 rjmp .+74 ; 0x11ca <Endpoint_WaitUntilReady+0x5c>
+ 11e8: 20 91 ec 00 lds r18, 0x00EC
+ 11ec: 20 ff sbrs r18, 0
+ 11ee: 25 c0 rjmp .+74 ; 0x123a <Endpoint_WaitUntilReady+0x5c>
* \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);
- 1180: 20 91 e8 00 lds r18, 0x00E8
+ 11f0: 20 91 e8 00 lds r18, 0x00E8
for (;;)
{
if (Endpoint_GetEndpointDirection() == ENDPOINT_DIR_IN)
{
if (Endpoint_IsINReady())
- 1184: 20 fd sbrc r18, 0
- 1186: 15 c0 rjmp .+42 ; 0x11b2 <Endpoint_WaitUntilReady+0x44>
+ 11f4: 20 fd sbrc r18, 0
+ 11f6: 15 c0 rjmp .+42 ; 0x1222 <Endpoint_WaitUntilReady+0x44>
{
if (Endpoint_IsOUTReceived())
return ENDPOINT_READYWAIT_NoError;
}
uint8_t USB_DeviceState_LCL = USB_DeviceState;
- 1188: 2e b3 in r18, 0x1e ; 30
+ 11f8: 2e b3 in r18, 0x1e ; 30
if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
- 118a: 22 23 and r18, r18
- 118c: a1 f0 breq .+40 ; 0x11b6 <Endpoint_WaitUntilReady+0x48>
+ 11fa: 22 23 and r18, r18
+ 11fc: a1 f0 breq .+40 ; 0x1226 <Endpoint_WaitUntilReady+0x48>
return ENDPOINT_READYWAIT_DeviceDisconnected;
else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
- 118e: 25 30 cpi r18, 0x05 ; 5
- 1190: a1 f0 breq .+40 ; 0x11ba <Endpoint_WaitUntilReady+0x4c>
+ 11fe: 25 30 cpi r18, 0x05 ; 5
+ 1200: a1 f0 breq .+40 ; 0x122a <Endpoint_WaitUntilReady+0x4c>
* \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);
- 1192: 20 91 eb 00 lds r18, 0x00EB
+ 1202: 20 91 eb 00 lds r18, 0x00EB
return ENDPOINT_READYWAIT_BusSuspended;
else if (Endpoint_IsStalled())
- 1196: 25 fd sbrc r18, 5
- 1198: 12 c0 rjmp .+36 ; 0x11be <Endpoint_WaitUntilReady+0x50>
- 119a: 20 91 e4 00 lds r18, 0x00E4
- 119e: 30 91 e5 00 lds r19, 0x00E5
+ 1206: 25 fd sbrc r18, 5
+ 1208: 12 c0 rjmp .+36 ; 0x122e <Endpoint_WaitUntilReady+0x50>
+ 120a: 20 91 e4 00 lds r18, 0x00E4
+ 120e: 30 91 e5 00 lds r19, 0x00E5
return ENDPOINT_READYWAIT_EndpointStalled;
uint16_t CurrentFrameNumber = USB_Device_GetFrameNumber();
if (CurrentFrameNumber != PreviousFrameNumber)
- 11a2: 28 17 cp r18, r24
- 11a4: 39 07 cpc r19, r25
- 11a6: 41 f3 breq .-48 ; 0x1178 <Endpoint_WaitUntilReady+0xa>
+ 1212: 28 17 cp r18, r24
+ 1214: 39 07 cpc r19, r25
+ 1216: 41 f3 breq .-48 ; 0x11e8 <Endpoint_WaitUntilReady+0xa>
{
PreviousFrameNumber = CurrentFrameNumber;
if (!(TimeoutMSRem--))
- 11a8: 44 23 and r20, r20
- 11aa: 59 f0 breq .+22 ; 0x11c2 <Endpoint_WaitUntilReady+0x54>
- 11ac: 41 50 subi r20, 0x01 ; 1
- 11ae: c9 01 movw r24, r18
- 11b0: e3 cf rjmp .-58 ; 0x1178 <Endpoint_WaitUntilReady+0xa>
+ 1218: 44 23 and r20, r20
+ 121a: 59 f0 breq .+22 ; 0x1232 <Endpoint_WaitUntilReady+0x54>
+ 121c: 41 50 subi r20, 0x01 ; 1
+ 121e: c9 01 movw r24, r18
+ 1220: e3 cf rjmp .-58 ; 0x11e8 <Endpoint_WaitUntilReady+0xa>
for (;;)
{
if (Endpoint_GetEndpointDirection() == ENDPOINT_DIR_IN)
{
if (Endpoint_IsINReady())
return ENDPOINT_READYWAIT_NoError;
- 11b2: 80 e0 ldi r24, 0x00 ; 0
- 11b4: 08 95 ret
+ 1222: 80 e0 ldi r24, 0x00 ; 0
+ 1224: 08 95 ret
}
uint8_t USB_DeviceState_LCL = USB_DeviceState;
if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
return ENDPOINT_READYWAIT_DeviceDisconnected;
- 11b6: 82 e0 ldi r24, 0x02 ; 2
- 11b8: 08 95 ret
+ 1226: 82 e0 ldi r24, 0x02 ; 2
+ 1228: 08 95 ret
else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
return ENDPOINT_READYWAIT_BusSuspended;
- 11ba: 83 e0 ldi r24, 0x03 ; 3
- 11bc: 08 95 ret
+ 122a: 83 e0 ldi r24, 0x03 ; 3
+ 122c: 08 95 ret
else if (Endpoint_IsStalled())
return ENDPOINT_READYWAIT_EndpointStalled;
- 11be: 81 e0 ldi r24, 0x01 ; 1
- 11c0: 08 95 ret
+ 122e: 81 e0 ldi r24, 0x01 ; 1
+ 1230: 08 95 ret
if (CurrentFrameNumber != PreviousFrameNumber)
{
PreviousFrameNumber = CurrentFrameNumber;
if (!(TimeoutMSRem--))
return ENDPOINT_READYWAIT_Timeout;
- 11c2: 84 e0 ldi r24, 0x04 ; 4
- 11c4: 08 95 ret
+ 1232: 84 e0 ldi r24, 0x04 ; 4
+ 1234: 08 95 ret
return ENDPOINT_READYWAIT_NoError;
}
else
{
if (Endpoint_IsOUTReceived())
return ENDPOINT_READYWAIT_NoError;
- 11c6: 80 e0 ldi r24, 0x00 ; 0
+ 1236: 80 e0 ldi r24, 0x00 ; 0
if (!(TimeoutMSRem--))
return ENDPOINT_READYWAIT_Timeout;
}
}
}
- 11c8: 08 95 ret
+ 1238: 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);
- 11ca: 20 91 e8 00 lds r18, 0x00E8
+ 123a: 20 91 e8 00 lds r18, 0x00E8
if (Endpoint_IsINReady())
return ENDPOINT_READYWAIT_NoError;
}
else
{
if (Endpoint_IsOUTReceived())
- 11ce: 22 ff sbrs r18, 2
- 11d0: db cf rjmp .-74 ; 0x1188 <Endpoint_WaitUntilReady+0x1a>
- 11d2: f9 cf rjmp .-14 ; 0x11c6 <Endpoint_WaitUntilReady+0x58>
+ 123e: 22 ff sbrs r18, 2
+ 1240: db cf rjmp .-74 ; 0x11f8 <Endpoint_WaitUntilReady+0x1a>
+ 1242: f9 cf rjmp .-14 ; 0x1236 <Endpoint_WaitUntilReady+0x58>
-000011d4 <USB_ResetInterface>:
+00001244 <USB_ResetInterface>:
{
#if defined(USB_CAN_BE_BOTH)
bool UIDModeSelectEnabled = ((UHWCON & (1 << UIDE)) != 0);
#endif
USB_INT_DisableAllInterrupts();
- 11d4: 40 d0 rcall .+128 ; 0x1256 <USB_INT_DisableAllInterrupts>
+ 1244: 40 d0 rcall .+128 ; 0x12c6 <USB_INT_DisableAllInterrupts>
USB_INT_ClearAllInterrupts();
- 11d6: 42 d0 rcall .+132 ; 0x125c <USB_INT_ClearAllInterrupts>
+ 1246: 42 d0 rcall .+132 ; 0x12cc <USB_INT_ClearAllInterrupts>
}
static inline void USB_Controller_Reset(void) ATTR_ALWAYS_INLINE;
static inline void USB_Controller_Reset(void)
{
USBCON &= ~(1 << USBE);
- 11d8: 80 91 d8 00 lds r24, 0x00D8
- 11dc: 8f 77 andi r24, 0x7F ; 127
- 11de: 80 93 d8 00 sts 0x00D8, r24
+ 1248: 80 91 d8 00 lds r24, 0x00D8
+ 124c: 8f 77 andi r24, 0x7F ; 127
+ 124e: 80 93 d8 00 sts 0x00D8, r24
USBCON |= (1 << USBE);
- 11e2: 80 91 d8 00 lds r24, 0x00D8
- 11e6: 80 68 ori r24, 0x80 ; 128
- 11e8: 80 93 d8 00 sts 0x00D8, r24
+ 1252: 80 91 d8 00 lds r24, 0x00D8
+ 1256: 80 68 ori r24, 0x80 ; 128
+ 1258: 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);
- 11ec: 80 91 d8 00 lds r24, 0x00D8
- 11f0: 8f 7d andi r24, 0xDF ; 223
- 11f2: 80 93 d8 00 sts 0x00D8, r24
+ 125c: 80 91 d8 00 lds r24, 0x00D8
+ 1260: 8f 7d andi r24, 0xDF ; 223
+ 1262: 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;
- 11f6: 84 e0 ldi r24, 0x04 ; 4
- 11f8: 89 bd out 0x29, r24 ; 41
+ 1266: 84 e0 ldi r24, 0x04 ; 4
+ 1268: 89 bd out 0x29, r24 ; 41
PLLCSR = (USB_PLL_PSC | (1 << PLLE));
- 11fa: 86 e0 ldi r24, 0x06 ; 6
- 11fc: 89 bd out 0x29, r24 ; 41
+ 126a: 86 e0 ldi r24, 0x06 ; 6
+ 126c: 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()));
- 11fe: 09 b4 in r0, 0x29 ; 41
- 1200: 00 fe sbrs r0, 0
- 1202: fd cf rjmp .-6 ; 0x11fe <USB_ResetInterface+0x2a>
+ 126e: 09 b4 in r0, 0x29 ; 41
+ 1270: 00 fe sbrs r0, 0
+ 1272: fd cf rjmp .-6 ; 0x126e <USB_ResetInterface+0x2a>
}
#if defined(USB_CAN_BE_DEVICE)
static void USB_Init_Device(void)
{
USB_DeviceState = DEVICE_STATE_Unattached;
- 1204: 1e ba out 0x1e, r1 ; 30
+ 1274: 1e ba out 0x1e, r1 ; 30
USB_Device_ConfigurationNumber = 0;
- 1206: 10 92 e4 02 sts 0x02E4, r1
+ 1276: 10 92 c8 02 sts 0x02C8, r1
#if !defined(NO_DEVICE_REMOTE_WAKEUP)
USB_Device_RemoteWakeupEnabled = false;
- 120a: 10 92 e6 02 sts 0x02E6, r1
+ 127a: 10 92 ca 02 sts 0x02CA, r1
#endif
#if !defined(NO_DEVICE_SELF_POWER)
USB_Device_CurrentlySelfPowered = false;
- 120e: 10 92 e5 02 sts 0x02E5, r1
+ 127e: 10 92 c9 02 sts 0x02C9, r1
uint8_t Number = (Address & ENDPOINT_EPNUM_MASK);
if (Number >= ENDPOINT_TOTAL_ENDPOINTS)
return false;
return Endpoint_ConfigureEndpoint_Prv(Number,
- 1212: 80 e0 ldi r24, 0x00 ; 0
- 1214: 60 e0 ldi r22, 0x00 ; 0
- 1216: 42 e0 ldi r20, 0x02 ; 2
- 1218: 10 df rcall .-480 ; 0x103a <Endpoint_ConfigureEndpoint_Prv>
+ 1282: 80 e0 ldi r24, 0x00 ; 0
+ 1284: 60 e0 ldi r22, 0x00 ; 0
+ 1286: 42 e0 ldi r20, 0x02 ; 2
+ 1288: 10 df rcall .-480 ; 0x10aa <Endpoint_ConfigureEndpoint_Prv>
#if defined(USB_CAN_BE_DEVICE)
case USB_INT_WAKEUPI:
UDINT &= ~(1 << WAKEUPI);
break;
case USB_INT_SUSPI:
UDINT &= ~(1 << SUSPI);
- 121a: 80 91 e1 00 lds r24, 0x00E1
- 121e: 8e 7f andi r24, 0xFE ; 254
- 1220: 80 93 e1 00 sts 0x00E1, r24
+ 128a: 80 91 e1 00 lds r24, 0x00E1
+ 128e: 8e 7f andi r24, 0xFE ; 254
+ 1290: 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);
- 1224: 80 91 e2 00 lds r24, 0x00E2
- 1228: 81 60 ori r24, 0x01 ; 1
- 122a: 80 93 e2 00 sts 0x00E2, r24
+ 1294: 80 91 e2 00 lds r24, 0x00E2
+ 1298: 81 60 ori r24, 0x01 ; 1
+ 129a: 80 93 e2 00 sts 0x00E2, r24
break;
case USB_INT_EORSTI:
UDIEN |= (1 << EORSTE);
- 122e: 80 91 e2 00 lds r24, 0x00E2
- 1232: 88 60 ori r24, 0x08 ; 8
- 1234: 80 93 e2 00 sts 0x00E2, r24
+ 129e: 80 91 e2 00 lds r24, 0x00E2
+ 12a2: 88 60 ori r24, 0x08 ; 8
+ 12a4: 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);
- 1238: 80 91 e0 00 lds r24, 0x00E0
- 123c: 8e 7f andi r24, 0xFE ; 254
- 123e: 80 93 e0 00 sts 0x00E0, r24
+ 12a8: 80 91 e0 00 lds r24, 0x00E0
+ 12ac: 8e 7f andi r24, 0xFE ; 254
+ 12ae: 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
}
- 1242: 08 95 ret
+ 12b2: 08 95 ret
-00001244 <USB_Init>:
+000012b4 <USB_Init>:
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);
- 1244: e3 e6 ldi r30, 0x63 ; 99
- 1246: f0 e0 ldi r31, 0x00 ; 0
- 1248: 80 81 ld r24, Z
- 124a: 8e 7f andi r24, 0xFE ; 254
- 124c: 80 83 st Z, r24
+ 12b4: e3 e6 ldi r30, 0x63 ; 99
+ 12b6: f0 e0 ldi r31, 0x00 ; 0
+ 12b8: 80 81 ld r24, Z
+ 12ba: 8e 7f andi r24, 0xFE ; 254
+ 12bc: 80 83 st Z, r24
UHWCON &= ~(1 << UIDE);
USB_CurrentMode = Mode;
}
#endif
USB_IsInitialized = true;
- 124e: 81 e0 ldi r24, 0x01 ; 1
- 1250: 80 93 e7 02 sts 0x02E7, r24
+ 12be: 81 e0 ldi r24, 0x01 ; 1
+ 12c0: 80 93 cb 02 sts 0x02CB, r24
USB_ResetInterface();
}
- 1254: bf cf rjmp .-130 ; 0x11d4 <USB_ResetInterface>
+ 12c4: bf cf rjmp .-130 ; 0x1244 <USB_ResetInterface>
-00001256 <USB_INT_DisableAllInterrupts>:
+000012c6 <USB_INT_DisableAllInterrupts>:
#if defined(USB_CAN_BE_HOST)
UHIEN = 0;
#endif
#if defined(USB_CAN_BE_DEVICE)
UDIEN = 0;
- 1256: 10 92 e2 00 sts 0x00E2, r1
+ 12c6: 10 92 e2 00 sts 0x00E2, r1
#endif
}
- 125a: 08 95 ret
+ 12ca: 08 95 ret
-0000125c <USB_INT_ClearAllInterrupts>:
+000012cc <USB_INT_ClearAllInterrupts>:
#if defined(USB_CAN_BE_HOST)
UHINT = 0;
#endif
#if defined(USB_CAN_BE_DEVICE)
UDINT = 0;
- 125c: 10 92 e1 00 sts 0x00E1, r1
+ 12cc: 10 92 e1 00 sts 0x00E1, r1
#endif
}
- 1260: 08 95 ret
+ 12d0: 08 95 ret
-00001262 <__vector_11>:
+000012d2 <__vector_11>:
ISR(USB_GEN_vect, ISR_BLOCK)
{
- 1262: 1f 92 push r1
- 1264: 0f 92 push r0
- 1266: 0f b6 in r0, 0x3f ; 63
- 1268: 0f 92 push r0
- 126a: 11 24 eor r1, r1
- 126c: 2f 93 push r18
- 126e: 3f 93 push r19
- 1270: 4f 93 push r20
- 1272: 5f 93 push r21
- 1274: 6f 93 push r22
- 1276: 7f 93 push r23
- 1278: 8f 93 push r24
- 127a: 9f 93 push r25
- 127c: af 93 push r26
- 127e: bf 93 push r27
- 1280: ef 93 push r30
- 1282: ff 93 push r31
+ 12d2: 1f 92 push r1
+ 12d4: 0f 92 push r0
+ 12d6: 0f b6 in r0, 0x3f ; 63
+ 12d8: 0f 92 push r0
+ 12da: 11 24 eor r1, r1
+ 12dc: 2f 93 push r18
+ 12de: 3f 93 push r19
+ 12e0: 4f 93 push r20
+ 12e2: 5f 93 push r21
+ 12e4: 6f 93 push r22
+ 12e6: 7f 93 push r23
+ 12e8: 8f 93 push r24
+ 12ea: 9f 93 push r25
+ 12ec: af 93 push r26
+ 12ee: bf 93 push r27
+ 12f0: ef 93 push r30
+ 12f2: 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));
- 1284: 80 91 e1 00 lds r24, 0x00E1
+ 12f4: 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))
- 1288: 82 ff sbrs r24, 2
- 128a: 0a c0 rjmp .+20 ; 0x12a0 <__vector_11+0x3e>
+ 12f8: 82 ff sbrs r24, 2
+ 12fa: 0a c0 rjmp .+20 ; 0x1310 <__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));
- 128c: 80 91 e2 00 lds r24, 0x00E2
- 1290: 82 ff sbrs r24, 2
- 1292: 06 c0 rjmp .+12 ; 0x12a0 <__vector_11+0x3e>
+ 12fc: 80 91 e2 00 lds r24, 0x00E2
+ 1300: 82 ff sbrs r24, 2
+ 1302: 06 c0 rjmp .+12 ; 0x1310 <__vector_11+0x3e>
break;
case USB_INT_EORSTI:
UDINT &= ~(1 << EORSTI);
break;
case USB_INT_SOFI:
UDINT &= ~(1 << SOFI);
- 1294: 80 91 e1 00 lds r24, 0x00E1
- 1298: 8b 7f andi r24, 0xFB ; 251
- 129a: 80 93 e1 00 sts 0x00E1, r24
+ 1304: 80 91 e1 00 lds r24, 0x00E1
+ 1308: 8b 7f andi r24, 0xFB ; 251
+ 130a: 80 93 e1 00 sts 0x00E1, r24
{
USB_INT_Clear(USB_INT_SOFI);
EVENT_USB_Device_StartOfFrame();
- 129e: 22 d2 rcall .+1092 ; 0x16e4 <USB_Event_Stub>
+ 130e: 22 d2 rcall .+1092 ; 0x1754 <USB_Event_Stub>
#endif
#if defined(USB_CAN_BE_DEVICE)
case USB_INT_WAKEUPI:
return (UDINT & (1 << WAKEUPI));
case USB_INT_SUSPI:
return (UDINT & (1 << SUSPI));
- 12a0: 80 91 e1 00 lds r24, 0x00E1
+ 1310: 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))
- 12a4: 80 ff sbrs r24, 0
- 12a6: 16 c0 rjmp .+44 ; 0x12d4 <__vector_11+0x72>
+ 1314: 80 ff sbrs r24, 0
+ 1316: 16 c0 rjmp .+44 ; 0x1344 <__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));
- 12a8: 80 91 e2 00 lds r24, 0x00E2
- 12ac: 80 ff sbrs r24, 0
- 12ae: 12 c0 rjmp .+36 ; 0x12d4 <__vector_11+0x72>
+ 1318: 80 91 e2 00 lds r24, 0x00E2
+ 131c: 80 ff sbrs r24, 0
+ 131e: 12 c0 rjmp .+36 ; 0x1344 <__vector_11+0x72>
#if defined(USB_CAN_BE_DEVICE)
case USB_INT_WAKEUPI:
UDIEN &= ~(1 << WAKEUPE);
break;
case USB_INT_SUSPI:
UDIEN &= ~(1 << SUSPE);
- 12b0: 80 91 e2 00 lds r24, 0x00E2
- 12b4: 8e 7f andi r24, 0xFE ; 254
- 12b6: 80 93 e2 00 sts 0x00E2, r24
+ 1320: 80 91 e2 00 lds r24, 0x00E2
+ 1324: 8e 7f andi r24, 0xFE ; 254
+ 1326: 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);
- 12ba: 80 91 e2 00 lds r24, 0x00E2
- 12be: 80 61 ori r24, 0x10 ; 16
- 12c0: 80 93 e2 00 sts 0x00E2, r24
+ 132a: 80 91 e2 00 lds r24, 0x00E2
+ 132e: 80 61 ori r24, 0x10 ; 16
+ 1330: 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);
- 12c4: 80 91 d8 00 lds r24, 0x00D8
- 12c8: 80 62 ori r24, 0x20 ; 32
- 12ca: 80 93 d8 00 sts 0x00D8, r24
+ 1334: 80 91 d8 00 lds r24, 0x00D8
+ 1338: 80 62 ori r24, 0x20 ; 32
+ 133a: 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;
- 12ce: 19 bc out 0x29, r1 ; 41
+ 133e: 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;
- 12d0: 1e ba out 0x1e, r1 ; 30
+ 1340: 1e ba out 0x1e, r1 ; 30
EVENT_USB_Device_Disconnect();
- 12d2: df d9 rcall .-3138 ; 0x692 <EVENT_USB_Device_Disconnect>
+ 1342: a7 d9 rcall .-3250 ; 0x692 <EVENT_USB_Device_Disconnect>
case USB_INT_IDTI:
return (USBINT & (1 << IDTI));
#endif
#if defined(USB_CAN_BE_DEVICE)
case USB_INT_WAKEUPI:
return (UDINT & (1 << WAKEUPI));
- 12d4: 80 91 e1 00 lds r24, 0x00E1
+ 1344: 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))
- 12d8: 84 ff sbrs r24, 4
- 12da: 2c c0 rjmp .+88 ; 0x1334 <__vector_11+0xd2>
+ 1348: 84 ff sbrs r24, 4
+ 134a: 2c c0 rjmp .+88 ; 0x13a4 <__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));
- 12dc: 80 91 e2 00 lds r24, 0x00E2
- 12e0: 84 ff sbrs r24, 4
- 12e2: 28 c0 rjmp .+80 ; 0x1334 <__vector_11+0xd2>
+ 134c: 80 91 e2 00 lds r24, 0x00E2
+ 1350: 84 ff sbrs r24, 4
+ 1352: 28 c0 rjmp .+80 ; 0x13a4 <__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;
- 12e4: 84 e0 ldi r24, 0x04 ; 4
- 12e6: 89 bd out 0x29, r24 ; 41
+ 1354: 84 e0 ldi r24, 0x04 ; 4
+ 1356: 89 bd out 0x29, r24 ; 41
PLLCSR = (USB_PLL_PSC | (1 << PLLE));
- 12e8: 86 e0 ldi r24, 0x06 ; 6
- 12ea: 89 bd out 0x29, r24 ; 41
+ 1358: 86 e0 ldi r24, 0x06 ; 6
+ 135a: 89 bd out 0x29, r24 ; 41
{
if (!(USB_Options & USB_OPT_MANUAL_PLL))
{
USB_PLL_On();
while (!(USB_PLL_IsReady()));
- 12ec: 09 b4 in r0, 0x29 ; 41
- 12ee: 00 fe sbrs r0, 0
- 12f0: fd cf rjmp .-6 ; 0x12ec <__vector_11+0x8a>
+ 135c: 09 b4 in r0, 0x29 ; 41
+ 135e: 00 fe sbrs r0, 0
+ 1360: fd cf rjmp .-6 ; 0x135c <__vector_11+0x8a>
}
static inline void USB_CLK_Unfreeze(void) ATTR_ALWAYS_INLINE;
static inline void USB_CLK_Unfreeze(void)
{
USBCON &= ~(1 << FRZCLK);
- 12f2: 80 91 d8 00 lds r24, 0x00D8
- 12f6: 8f 7d andi r24, 0xDF ; 223
- 12f8: 80 93 d8 00 sts 0x00D8, r24
+ 1362: 80 91 d8 00 lds r24, 0x00D8
+ 1366: 8f 7d andi r24, 0xDF ; 223
+ 1368: 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);
- 12fc: 80 91 e1 00 lds r24, 0x00E1
- 1300: 8f 7e andi r24, 0xEF ; 239
- 1302: 80 93 e1 00 sts 0x00E1, r24
+ 136c: 80 91 e1 00 lds r24, 0x00E1
+ 1370: 8f 7e andi r24, 0xEF ; 239
+ 1372: 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);
- 1306: 80 91 e2 00 lds r24, 0x00E2
- 130a: 8f 7e andi r24, 0xEF ; 239
- 130c: 80 93 e2 00 sts 0x00E2, r24
+ 1376: 80 91 e2 00 lds r24, 0x00E2
+ 137a: 8f 7e andi r24, 0xEF ; 239
+ 137c: 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);
- 1310: 80 91 e2 00 lds r24, 0x00E2
- 1314: 81 60 ori r24, 0x01 ; 1
- 1316: 80 93 e2 00 sts 0x00E2, r24
+ 1380: 80 91 e2 00 lds r24, 0x00E2
+ 1384: 81 60 ori r24, 0x01 ; 1
+ 1386: 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)
- 131a: 80 91 e4 02 lds r24, 0x02E4
- 131e: 88 23 and r24, r24
- 1320: 21 f4 brne .+8 ; 0x132a <__vector_11+0xc8>
+ 138a: 80 91 c8 02 lds r24, 0x02C8
+ 138e: 88 23 and r24, r24
+ 1390: 21 f4 brne .+8 ; 0x139a <__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));
- 1322: 80 91 e3 00 lds r24, 0x00E3
+ 1392: 80 91 e3 00 lds r24, 0x00E3
USB_DeviceState = DEVICE_STATE_Configured;
else
USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered;
- 1326: 87 ff sbrs r24, 7
- 1328: 02 c0 rjmp .+4 ; 0x132e <__vector_11+0xcc>
- 132a: 84 e0 ldi r24, 0x04 ; 4
- 132c: 01 c0 rjmp .+2 ; 0x1330 <__vector_11+0xce>
- 132e: 81 e0 ldi r24, 0x01 ; 1
- 1330: 8e bb out 0x1e, r24 ; 30
+ 1396: 87 ff sbrs r24, 7
+ 1398: 02 c0 rjmp .+4 ; 0x139e <__vector_11+0xcc>
+ 139a: 84 e0 ldi r24, 0x04 ; 4
+ 139c: 01 c0 rjmp .+2 ; 0x13a0 <__vector_11+0xce>
+ 139e: 81 e0 ldi r24, 0x01 ; 1
+ 13a0: 8e bb out 0x1e, r24 ; 30
#if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT)
EVENT_USB_Device_Connect();
- 1332: ae d9 rcall .-3236 ; 0x690 <EVENT_USB_Device_Connect>
+ 13a2: 76 d9 rcall .-3348 ; 0x690 <EVENT_USB_Device_Connect>
case USB_INT_WAKEUPI:
return (UDINT & (1 << WAKEUPI));
case USB_INT_SUSPI:
return (UDINT & (1 << SUSPI));
case USB_INT_EORSTI:
return (UDINT & (1 << EORSTI));
- 1334: 80 91 e1 00 lds r24, 0x00E1
+ 13a4: 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))
- 1338: 83 ff sbrs r24, 3
- 133a: 26 c0 rjmp .+76 ; 0x1388 <__vector_11+0x126>
+ 13a8: 83 ff sbrs r24, 3
+ 13aa: 26 c0 rjmp .+76 ; 0x13f8 <__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));
- 133c: 80 91 e2 00 lds r24, 0x00E2
- 1340: 83 ff sbrs r24, 3
- 1342: 22 c0 rjmp .+68 ; 0x1388 <__vector_11+0x126>
+ 13ac: 80 91 e2 00 lds r24, 0x00E2
+ 13b0: 83 ff sbrs r24, 3
+ 13b2: 22 c0 rjmp .+68 ; 0x13f8 <__vector_11+0x126>
break;
case USB_INT_SUSPI:
UDINT &= ~(1 << SUSPI);
break;
case USB_INT_EORSTI:
UDINT &= ~(1 << EORSTI);
- 1344: 80 91 e1 00 lds r24, 0x00E1
- 1348: 87 7f andi r24, 0xF7 ; 247
- 134a: 80 93 e1 00 sts 0x00E1, r24
+ 13b4: 80 91 e1 00 lds r24, 0x00E1
+ 13b8: 87 7f andi r24, 0xF7 ; 247
+ 13ba: 80 93 e1 00 sts 0x00E1, r24
{
USB_INT_Clear(USB_INT_EORSTI);
USB_DeviceState = DEVICE_STATE_Default;
- 134e: 82 e0 ldi r24, 0x02 ; 2
- 1350: 8e bb out 0x1e, r24 ; 30
+ 13be: 82 e0 ldi r24, 0x02 ; 2
+ 13c0: 8e bb out 0x1e, r24 ; 30
USB_Device_ConfigurationNumber = 0;
- 1352: 10 92 e4 02 sts 0x02E4, r1
+ 13c2: 10 92 c8 02 sts 0x02C8, r1
#if defined(USB_CAN_BE_DEVICE)
case USB_INT_WAKEUPI:
UDINT &= ~(1 << WAKEUPI);
break;
case USB_INT_SUSPI:
UDINT &= ~(1 << SUSPI);
- 1356: 80 91 e1 00 lds r24, 0x00E1
- 135a: 8e 7f andi r24, 0xFE ; 254
- 135c: 80 93 e1 00 sts 0x00E1, r24
+ 13c6: 80 91 e1 00 lds r24, 0x00E1
+ 13ca: 8e 7f andi r24, 0xFE ; 254
+ 13cc: 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);
- 1360: 80 91 e2 00 lds r24, 0x00E2
- 1364: 8e 7f andi r24, 0xFE ; 254
- 1366: 80 93 e2 00 sts 0x00E2, r24
+ 13d0: 80 91 e2 00 lds r24, 0x00E2
+ 13d4: 8e 7f andi r24, 0xFE ; 254
+ 13d6: 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);
- 136a: 80 91 e2 00 lds r24, 0x00E2
- 136e: 80 61 ori r24, 0x10 ; 16
- 1370: 80 93 e2 00 sts 0x00E2, r24
+ 13da: 80 91 e2 00 lds r24, 0x00E2
+ 13de: 80 61 ori r24, 0x10 ; 16
+ 13e0: 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,
- 1374: 80 e0 ldi r24, 0x00 ; 0
- 1376: 60 e0 ldi r22, 0x00 ; 0
- 1378: 42 e0 ldi r20, 0x02 ; 2
- 137a: 5f de rcall .-834 ; 0x103a <Endpoint_ConfigureEndpoint_Prv>
+ 13e4: 80 e0 ldi r24, 0x00 ; 0
+ 13e6: 60 e0 ldi r22, 0x00 ; 0
+ 13e8: 42 e0 ldi r20, 0x02 ; 2
+ 13ea: 5f de rcall .-834 ; 0x10aa <Endpoint_ConfigureEndpoint_Prv>
break;
case USB_INT_SOFI:
UDIEN |= (1 << SOFE);
break;
case USB_INT_RXSTPI:
UEIENX |= (1 << RXSTPE);
- 137c: 80 91 f0 00 lds r24, 0x00F0
- 1380: 88 60 ori r24, 0x08 ; 8
- 1382: 80 93 f0 00 sts 0x00F0, r24
+ 13ec: 80 91 f0 00 lds r24, 0x00F0
+ 13f0: 88 60 ori r24, 0x08 ; 8
+ 13f2: 80 93 f0 00 sts 0x00F0, r24
#if defined(INTERRUPT_CONTROL_ENDPOINT)
USB_INT_Enable(USB_INT_RXSTPI);
#endif
EVENT_USB_Device_Reset();
- 1386: ae d1 rcall .+860 ; 0x16e4 <USB_Event_Stub>
+ 13f6: ae d1 rcall .+860 ; 0x1754 <USB_Event_Stub>
USB_ResetInterface();
EVENT_USB_UIDChange();
}
#endif
}
- 1388: ff 91 pop r31
- 138a: ef 91 pop r30
- 138c: bf 91 pop r27
- 138e: af 91 pop r26
- 1390: 9f 91 pop r25
- 1392: 8f 91 pop r24
- 1394: 7f 91 pop r23
- 1396: 6f 91 pop r22
- 1398: 5f 91 pop r21
- 139a: 4f 91 pop r20
- 139c: 3f 91 pop r19
- 139e: 2f 91 pop r18
- 13a0: 0f 90 pop r0
- 13a2: 0f be out 0x3f, r0 ; 63
- 13a4: 0f 90 pop r0
- 13a6: 1f 90 pop r1
- 13a8: 18 95 reti
-
-000013aa <__vector_12>:
+ 13f8: ff 91 pop r31
+ 13fa: ef 91 pop r30
+ 13fc: bf 91 pop r27
+ 13fe: af 91 pop r26
+ 1400: 9f 91 pop r25
+ 1402: 8f 91 pop r24
+ 1404: 7f 91 pop r23
+ 1406: 6f 91 pop r22
+ 1408: 5f 91 pop r21
+ 140a: 4f 91 pop r20
+ 140c: 3f 91 pop r19
+ 140e: 2f 91 pop r18
+ 1410: 0f 90 pop r0
+ 1412: 0f be out 0x3f, r0 ; 63
+ 1414: 0f 90 pop r0
+ 1416: 1f 90 pop r1
+ 1418: 18 95 reti
+
+0000141a <__vector_12>:
#if defined(INTERRUPT_CONTROL_ENDPOINT) && defined(USB_CAN_BE_DEVICE)
ISR(USB_COM_vect, ISR_BLOCK)
{
- 13aa: 1f 92 push r1
- 13ac: 0f 92 push r0
- 13ae: 0f b6 in r0, 0x3f ; 63
- 13b0: 0f 92 push r0
- 13b2: 11 24 eor r1, r1
- 13b4: 1f 93 push r17
- 13b6: 2f 93 push r18
- 13b8: 3f 93 push r19
- 13ba: 4f 93 push r20
- 13bc: 5f 93 push r21
- 13be: 6f 93 push r22
- 13c0: 7f 93 push r23
- 13c2: 8f 93 push r24
- 13c4: 9f 93 push r25
- 13c6: af 93 push r26
- 13c8: bf 93 push r27
- 13ca: ef 93 push r30
- 13cc: ff 93 push r31
+ 141a: 1f 92 push r1
+ 141c: 0f 92 push r0
+ 141e: 0f b6 in r0, 0x3f ; 63
+ 1420: 0f 92 push r0
+ 1422: 11 24 eor r1, r1
+ 1424: 1f 93 push r17
+ 1426: 2f 93 push r18
+ 1428: 3f 93 push r19
+ 142a: 4f 93 push r20
+ 142c: 5f 93 push r21
+ 142e: 6f 93 push r22
+ 1430: 7f 93 push r23
+ 1432: 8f 93 push r24
+ 1434: 9f 93 push r25
+ 1436: af 93 push r26
+ 1438: bf 93 push r27
+ 143a: ef 93 push r30
+ 143c: 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());
- 13ce: 10 91 e9 00 lds r17, 0x00E9
- 13d2: 1f 70 andi r17, 0x0F ; 15
+ 143e: 10 91 e9 00 lds r17, 0x00E9
+ 1442: 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;
- 13d4: 80 91 ec 00 lds r24, 0x00EC
+ 1444: 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);
- 13d8: 10 92 e9 00 sts 0x00E9, r1
+ 1448: 10 92 e9 00 sts 0x00E9, r1
break;
case USB_INT_SOFI:
UDIEN &= ~(1 << SOFE);
break;
case USB_INT_RXSTPI:
UEIENX &= ~(1 << RXSTPE);
- 13dc: 80 91 f0 00 lds r24, 0x00F0
- 13e0: 87 7f andi r24, 0xF7 ; 247
- 13e2: 80 93 f0 00 sts 0x00F0, r24
+ 144c: 80 91 f0 00 lds r24, 0x00F0
+ 1450: 87 7f andi r24, 0xF7 ; 247
+ 1452: 80 93 f0 00 sts 0x00F0, r24
static inline void GlobalInterruptEnable(void)
{
GCC_MEMORY_BARRIER();
#if (ARCH == ARCH_AVR8)
sei();
- 13e6: 78 94 sei
+ 1456: 78 94 sei
Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
USB_INT_Disable(USB_INT_RXSTPI);
GlobalInterruptEnable();
USB_Device_ProcessControlRequest();
- 13e8: 1b d0 rcall .+54 ; 0x1420 <USB_Device_ProcessControlRequest>
- 13ea: 10 92 e9 00 sts 0x00E9, r1
+ 1458: 1b d0 rcall .+54 ; 0x1490 <USB_Device_ProcessControlRequest>
+ 145a: 10 92 e9 00 sts 0x00E9, r1
break;
case USB_INT_SOFI:
UDIEN |= (1 << SOFE);
break;
case USB_INT_RXSTPI:
UEIENX |= (1 << RXSTPE);
- 13ee: 80 91 f0 00 lds r24, 0x00F0
- 13f2: 88 60 ori r24, 0x08 ; 8
- 13f4: 80 93 f0 00 sts 0x00F0, r24
- 13f8: 10 93 e9 00 sts 0x00E9, r17
+ 145e: 80 91 f0 00 lds r24, 0x00F0
+ 1462: 88 60 ori r24, 0x08 ; 8
+ 1464: 80 93 f0 00 sts 0x00F0, r24
+ 1468: 10 93 e9 00 sts 0x00E9, r17
Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
USB_INT_Enable(USB_INT_RXSTPI);
Endpoint_SelectEndpoint(PrevSelectedEndpoint);
}
- 13fc: ff 91 pop r31
- 13fe: ef 91 pop r30
- 1400: bf 91 pop r27
- 1402: af 91 pop r26
- 1404: 9f 91 pop r25
- 1406: 8f 91 pop r24
- 1408: 7f 91 pop r23
- 140a: 6f 91 pop r22
- 140c: 5f 91 pop r21
- 140e: 4f 91 pop r20
- 1410: 3f 91 pop r19
- 1412: 2f 91 pop r18
- 1414: 1f 91 pop r17
- 1416: 0f 90 pop r0
- 1418: 0f be out 0x3f, r0 ; 63
- 141a: 0f 90 pop r0
- 141c: 1f 90 pop r1
- 141e: 18 95 reti
-
-00001420 <USB_Device_ProcessControlRequest>:
+ 146c: ff 91 pop r31
+ 146e: ef 91 pop r30
+ 1470: bf 91 pop r27
+ 1472: af 91 pop r26
+ 1474: 9f 91 pop r25
+ 1476: 8f 91 pop r24
+ 1478: 7f 91 pop r23
+ 147a: 6f 91 pop r22
+ 147c: 5f 91 pop r21
+ 147e: 4f 91 pop r20
+ 1480: 3f 91 pop r19
+ 1482: 2f 91 pop r18
+ 1484: 1f 91 pop r17
+ 1486: 0f 90 pop r0
+ 1488: 0f be out 0x3f, r0 ; 63
+ 148a: 0f 90 pop r0
+ 148c: 1f 90 pop r1
+ 148e: 18 95 reti
+
+00001490 <USB_Device_ProcessControlRequest>:
#if !defined(NO_DEVICE_REMOTE_WAKEUP)
bool USB_Device_RemoteWakeupEnabled;
#endif
void USB_Device_ProcessControlRequest(void)
{
- 1420: 1f 93 push r17
- 1422: df 93 push r29
- 1424: cf 93 push r28
- 1426: cd b7 in r28, 0x3d ; 61
- 1428: de b7 in r29, 0x3e ; 62
- 142a: ac 97 sbiw r28, 0x2c ; 44
- 142c: 0f b6 in r0, 0x3f ; 63
- 142e: f8 94 cli
- 1430: de bf out 0x3e, r29 ; 62
- 1432: 0f be out 0x3f, r0 ; 63
- 1434: cd bf out 0x3d, r28 ; 61
+ 1490: 1f 93 push r17
+ 1492: df 93 push r29
+ 1494: cf 93 push r28
+ 1496: cd b7 in r28, 0x3d ; 61
+ 1498: de b7 in r29, 0x3e ; 62
+ 149a: ac 97 sbiw r28, 0x2c ; 44
+ 149c: 0f b6 in r0, 0x3f ; 63
+ 149e: f8 94 cli
+ 14a0: de bf out 0x3e, r29 ; 62
+ 14a2: 0f be out 0x3f, r0 ; 63
+ 14a4: 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;
- 1436: e8 ee ldi r30, 0xE8 ; 232
- 1438: f2 e0 ldi r31, 0x02 ; 2
+ 14a6: ec ec ldi r30, 0xCC ; 204
+ 14a8: 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;
- 143a: 80 91 f1 00 lds r24, 0x00F1
+ 14aa: 80 91 f1 00 lds r24, 0x00F1
for (uint8_t RequestHeaderByte = 0; RequestHeaderByte < sizeof(USB_Request_Header_t); RequestHeaderByte++)
*(RequestHeader++) = Endpoint_Read_8();
- 143e: 81 93 st Z+, r24
+ 14ae: 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++)
- 1440: 22 e0 ldi r18, 0x02 ; 2
- 1442: e0 3f cpi r30, 0xF0 ; 240
- 1444: f2 07 cpc r31, r18
- 1446: c9 f7 brne .-14 ; 0x143a <USB_Device_ProcessControlRequest+0x1a>
+ 14b0: 22 e0 ldi r18, 0x02 ; 2
+ 14b2: e4 3d cpi r30, 0xD4 ; 212
+ 14b4: f2 07 cpc r31, r18
+ 14b6: c9 f7 brne .-14 ; 0x14aa <USB_Device_ProcessControlRequest+0x1a>
*(RequestHeader++) = Endpoint_Read_8();
#endif
EVENT_USB_Device_ControlRequest();
- 1448: 29 d9 rcall .-3502 ; 0x69c <EVENT_USB_Device_ControlRequest>
+ 14b8: f1 d8 rcall .-3614 ; 0x69c <EVENT_USB_Device_ControlRequest>
* \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);
- 144a: 80 91 e8 00 lds r24, 0x00E8
+ 14ba: 80 91 e8 00 lds r24, 0x00E8
if (Endpoint_IsSETUPReceived())
- 144e: 83 ff sbrs r24, 3
- 1450: 31 c1 rjmp .+610 ; 0x16b4 <USB_Device_ProcessControlRequest+0x294>
+ 14be: 83 ff sbrs r24, 3
+ 14c0: 31 c1 rjmp .+610 ; 0x1724 <USB_Device_ProcessControlRequest+0x294>
{
uint8_t bmRequestType = USB_ControlRequest.bmRequestType;
- 1452: 80 91 e8 02 lds r24, 0x02E8
+ 14c2: 80 91 cc 02 lds r24, 0x02CC
switch (USB_ControlRequest.bRequest)
- 1456: 20 91 e9 02 lds r18, 0x02E9
- 145a: 25 30 cpi r18, 0x05 ; 5
- 145c: 09 f4 brne .+2 ; 0x1460 <USB_Device_ProcessControlRequest+0x40>
- 145e: 84 c0 rjmp .+264 ; 0x1568 <USB_Device_ProcessControlRequest+0x148>
- 1460: 26 30 cpi r18, 0x06 ; 6
- 1462: 40 f4 brcc .+16 ; 0x1474 <USB_Device_ProcessControlRequest+0x54>
- 1464: 21 30 cpi r18, 0x01 ; 1
- 1466: a1 f1 breq .+104 ; 0x14d0 <USB_Device_ProcessControlRequest+0xb0>
- 1468: 21 30 cpi r18, 0x01 ; 1
- 146a: 70 f0 brcs .+28 ; 0x1488 <USB_Device_ProcessControlRequest+0x68>
- 146c: 23 30 cpi r18, 0x03 ; 3
- 146e: 09 f0 breq .+2 ; 0x1472 <USB_Device_ProcessControlRequest+0x52>
- 1470: 21 c1 rjmp .+578 ; 0x16b4 <USB_Device_ProcessControlRequest+0x294>
- 1472: 2e c0 rjmp .+92 ; 0x14d0 <USB_Device_ProcessControlRequest+0xb0>
- 1474: 28 30 cpi r18, 0x08 ; 8
- 1476: 09 f4 brne .+2 ; 0x147a <USB_Device_ProcessControlRequest+0x5a>
- 1478: ef c0 rjmp .+478 ; 0x1658 <USB_Device_ProcessControlRequest+0x238>
- 147a: 29 30 cpi r18, 0x09 ; 9
- 147c: 09 f4 brne .+2 ; 0x1480 <USB_Device_ProcessControlRequest+0x60>
- 147e: fe c0 rjmp .+508 ; 0x167c <USB_Device_ProcessControlRequest+0x25c>
- 1480: 26 30 cpi r18, 0x06 ; 6
- 1482: 09 f0 breq .+2 ; 0x1486 <USB_Device_ProcessControlRequest+0x66>
- 1484: 17 c1 rjmp .+558 ; 0x16b4 <USB_Device_ProcessControlRequest+0x294>
- 1486: 92 c0 rjmp .+292 ; 0x15ac <USB_Device_ProcessControlRequest+0x18c>
+ 14c6: 20 91 cd 02 lds r18, 0x02CD
+ 14ca: 25 30 cpi r18, 0x05 ; 5
+ 14cc: 09 f4 brne .+2 ; 0x14d0 <USB_Device_ProcessControlRequest+0x40>
+ 14ce: 84 c0 rjmp .+264 ; 0x15d8 <USB_Device_ProcessControlRequest+0x148>
+ 14d0: 26 30 cpi r18, 0x06 ; 6
+ 14d2: 40 f4 brcc .+16 ; 0x14e4 <USB_Device_ProcessControlRequest+0x54>
+ 14d4: 21 30 cpi r18, 0x01 ; 1
+ 14d6: a1 f1 breq .+104 ; 0x1540 <USB_Device_ProcessControlRequest+0xb0>
+ 14d8: 21 30 cpi r18, 0x01 ; 1
+ 14da: 70 f0 brcs .+28 ; 0x14f8 <USB_Device_ProcessControlRequest+0x68>
+ 14dc: 23 30 cpi r18, 0x03 ; 3
+ 14de: 09 f0 breq .+2 ; 0x14e2 <USB_Device_ProcessControlRequest+0x52>
+ 14e0: 21 c1 rjmp .+578 ; 0x1724 <USB_Device_ProcessControlRequest+0x294>
+ 14e2: 2e c0 rjmp .+92 ; 0x1540 <USB_Device_ProcessControlRequest+0xb0>
+ 14e4: 28 30 cpi r18, 0x08 ; 8
+ 14e6: 09 f4 brne .+2 ; 0x14ea <USB_Device_ProcessControlRequest+0x5a>
+ 14e8: ef c0 rjmp .+478 ; 0x16c8 <USB_Device_ProcessControlRequest+0x238>
+ 14ea: 29 30 cpi r18, 0x09 ; 9
+ 14ec: 09 f4 brne .+2 ; 0x14f0 <USB_Device_ProcessControlRequest+0x60>
+ 14ee: fe c0 rjmp .+508 ; 0x16ec <USB_Device_ProcessControlRequest+0x25c>
+ 14f0: 26 30 cpi r18, 0x06 ; 6
+ 14f2: 09 f0 breq .+2 ; 0x14f6 <USB_Device_ProcessControlRequest+0x66>
+ 14f4: 17 c1 rjmp .+558 ; 0x1724 <USB_Device_ProcessControlRequest+0x294>
+ 14f6: 92 c0 rjmp .+292 ; 0x161c <USB_Device_ProcessControlRequest+0x18c>
{
case REQ_GetStatus:
if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) ||
- 1488: 80 38 cpi r24, 0x80 ; 128
- 148a: 21 f0 breq .+8 ; 0x1494 <USB_Device_ProcessControlRequest+0x74>
- 148c: 82 38 cpi r24, 0x82 ; 130
- 148e: 09 f0 breq .+2 ; 0x1492 <USB_Device_ProcessControlRequest+0x72>
- 1490: 11 c1 rjmp .+546 ; 0x16b4 <USB_Device_ProcessControlRequest+0x294>
- 1492: 08 c0 rjmp .+16 ; 0x14a4 <USB_Device_ProcessControlRequest+0x84>
+ 14f8: 80 38 cpi r24, 0x80 ; 128
+ 14fa: 21 f0 breq .+8 ; 0x1504 <USB_Device_ProcessControlRequest+0x74>
+ 14fc: 82 38 cpi r24, 0x82 ; 130
+ 14fe: 09 f0 breq .+2 ; 0x1502 <USB_Device_ProcessControlRequest+0x72>
+ 1500: 11 c1 rjmp .+546 ; 0x1724 <USB_Device_ProcessControlRequest+0x294>
+ 1502: 08 c0 rjmp .+16 ; 0x1514 <USB_Device_ProcessControlRequest+0x84>
Endpoint_ClearOUT();
}
static void USB_Device_GetStatus(void)
{
uint8_t CurrentStatus = 0;
- 1494: 80 91 e5 02 lds r24, 0x02E5
+ 1504: 80 91 c9 02 lds r24, 0x02C9
if (USB_Device_CurrentlySelfPowered)
CurrentStatus |= FEATURE_SELFPOWERED_ENABLED;
#endif
#if !defined(NO_DEVICE_REMOTE_WAKEUP)
if (USB_Device_RemoteWakeupEnabled)
- 1498: 90 91 e6 02 lds r25, 0x02E6
- 149c: 99 23 and r25, r25
- 149e: 71 f0 breq .+28 ; 0x14bc <USB_Device_ProcessControlRequest+0x9c>
+ 1508: 90 91 ca 02 lds r25, 0x02CA
+ 150c: 99 23 and r25, r25
+ 150e: 71 f0 breq .+28 ; 0x152c <USB_Device_ProcessControlRequest+0x9c>
CurrentStatus |= FEATURE_REMOTE_WAKEUP_ENABLED;
- 14a0: 82 60 ori r24, 0x02 ; 2
- 14a2: 0c c0 rjmp .+24 ; 0x14bc <USB_Device_ProcessControlRequest+0x9c>
+ 1510: 82 60 ori r24, 0x02 ; 2
+ 1512: 0c c0 rjmp .+24 ; 0x152c <USB_Device_ProcessControlRequest+0x9c>
*/
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);
- 14a4: 80 91 ec 02 lds r24, 0x02EC
- 14a8: 8f 70 andi r24, 0x0F ; 15
- 14aa: 80 93 e9 00 sts 0x00E9, r24
+ 1514: 80 91 d0 02 lds r24, 0x02D0
+ 1518: 8f 70 andi r24, 0x0F ; 15
+ 151a: 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);
- 14ae: 90 91 eb 00 lds r25, 0x00EB
+ 151e: 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();
- 14b2: 81 e0 ldi r24, 0x01 ; 1
- 14b4: 95 ff sbrs r25, 5
- 14b6: 80 e0 ldi r24, 0x00 ; 0
+ 1522: 81 e0 ldi r24, 0x01 ; 1
+ 1524: 95 ff sbrs r25, 5
+ 1526: 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);
- 14b8: 10 92 e9 00 sts 0x00E9, r1
+ 1528: 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);
- 14bc: 90 91 e8 00 lds r25, 0x00E8
- 14c0: 97 7f andi r25, 0xF7 ; 247
- 14c2: 90 93 e8 00 sts 0x00E8, r25
+ 152c: 90 91 e8 00 lds r25, 0x00E8
+ 1530: 97 7f andi r25, 0xF7 ; 247
+ 1532: 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);
- 14c6: 80 93 f1 00 sts 0x00F1, r24
+ 1536: 80 93 f1 00 sts 0x00F1, r24
UEDATX = (Data >> 8);
- 14ca: 10 92 f1 00 sts 0x00F1, r1
- 14ce: cf c0 rjmp .+414 ; 0x166e <USB_Device_ProcessControlRequest+0x24e>
+ 153a: 10 92 f1 00 sts 0x00F1, r1
+ 153e: cf c0 rjmp .+414 ; 0x16de <USB_Device_ProcessControlRequest+0x24e>
}
break;
case REQ_ClearFeature:
case REQ_SetFeature:
if ((bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) ||
- 14d0: 88 23 and r24, r24
- 14d2: 19 f0 breq .+6 ; 0x14da <USB_Device_ProcessControlRequest+0xba>
- 14d4: 82 30 cpi r24, 0x02 ; 2
- 14d6: 09 f0 breq .+2 ; 0x14da <USB_Device_ProcessControlRequest+0xba>
- 14d8: ed c0 rjmp .+474 ; 0x16b4 <USB_Device_ProcessControlRequest+0x294>
+ 1540: 88 23 and r24, r24
+ 1542: 19 f0 breq .+6 ; 0x154a <USB_Device_ProcessControlRequest+0xba>
+ 1544: 82 30 cpi r24, 0x02 ; 2
+ 1546: 09 f0 breq .+2 ; 0x154a <USB_Device_ProcessControlRequest+0xba>
+ 1548: ed c0 rjmp .+474 ; 0x1724 <USB_Device_ProcessControlRequest+0x294>
Endpoint_ClearStatusStage();
}
static void USB_Device_ClearSetFeature(void)
{
switch (USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_RECIPIENT)
- 14da: 90 e0 ldi r25, 0x00 ; 0
- 14dc: 8f 71 andi r24, 0x1F ; 31
- 14de: 90 70 andi r25, 0x00 ; 0
- 14e0: 00 97 sbiw r24, 0x00 ; 0
- 14e2: 29 f0 breq .+10 ; 0x14ee <USB_Device_ProcessControlRequest+0xce>
- 14e4: 82 30 cpi r24, 0x02 ; 2
- 14e6: 91 05 cpc r25, r1
- 14e8: 09 f0 breq .+2 ; 0x14ec <USB_Device_ProcessControlRequest+0xcc>
- 14ea: e4 c0 rjmp .+456 ; 0x16b4 <USB_Device_ProcessControlRequest+0x294>
- 14ec: 0b c0 rjmp .+22 ; 0x1504 <USB_Device_ProcessControlRequest+0xe4>
+ 154a: 90 e0 ldi r25, 0x00 ; 0
+ 154c: 8f 71 andi r24, 0x1F ; 31
+ 154e: 90 70 andi r25, 0x00 ; 0
+ 1550: 00 97 sbiw r24, 0x00 ; 0
+ 1552: 29 f0 breq .+10 ; 0x155e <USB_Device_ProcessControlRequest+0xce>
+ 1554: 82 30 cpi r24, 0x02 ; 2
+ 1556: 91 05 cpc r25, r1
+ 1558: 09 f0 breq .+2 ; 0x155c <USB_Device_ProcessControlRequest+0xcc>
+ 155a: e4 c0 rjmp .+456 ; 0x1724 <USB_Device_ProcessControlRequest+0x294>
+ 155c: 0b c0 rjmp .+22 ; 0x1574 <USB_Device_ProcessControlRequest+0xe4>
{
#if !defined(NO_DEVICE_REMOTE_WAKEUP)
case REQREC_DEVICE:
if ((uint8_t)USB_ControlRequest.wValue == FEATURE_SEL_DeviceRemoteWakeup)
- 14ee: 80 91 ea 02 lds r24, 0x02EA
- 14f2: 81 30 cpi r24, 0x01 ; 1
- 14f4: 09 f0 breq .+2 ; 0x14f8 <USB_Device_ProcessControlRequest+0xd8>
- 14f6: de c0 rjmp .+444 ; 0x16b4 <USB_Device_ProcessControlRequest+0x294>
+ 155e: 80 91 ce 02 lds r24, 0x02CE
+ 1562: 81 30 cpi r24, 0x01 ; 1
+ 1564: 09 f0 breq .+2 ; 0x1568 <USB_Device_ProcessControlRequest+0xd8>
+ 1566: de c0 rjmp .+444 ; 0x1724 <USB_Device_ProcessControlRequest+0x294>
USB_Device_RemoteWakeupEnabled = (USB_ControlRequest.bRequest == REQ_SetFeature);
- 14f8: 23 30 cpi r18, 0x03 ; 3
- 14fa: 09 f0 breq .+2 ; 0x14fe <USB_Device_ProcessControlRequest+0xde>
- 14fc: 80 e0 ldi r24, 0x00 ; 0
- 14fe: 80 93 e6 02 sts 0x02E6, r24
- 1502: 2c c0 rjmp .+88 ; 0x155c <USB_Device_ProcessControlRequest+0x13c>
+ 1568: 23 30 cpi r18, 0x03 ; 3
+ 156a: 09 f0 breq .+2 ; 0x156e <USB_Device_ProcessControlRequest+0xde>
+ 156c: 80 e0 ldi r24, 0x00 ; 0
+ 156e: 80 93 ca 02 sts 0x02CA, r24
+ 1572: 2c c0 rjmp .+88 ; 0x15cc <USB_Device_ProcessControlRequest+0x13c>
break;
#endif
#if !defined(CONTROL_ONLY_DEVICE)
case REQREC_ENDPOINT:
if ((uint8_t)USB_ControlRequest.wValue == FEATURE_SEL_EndpointHalt)
- 1504: 80 91 ea 02 lds r24, 0x02EA
- 1508: 88 23 and r24, r24
- 150a: 41 f5 brne .+80 ; 0x155c <USB_Device_ProcessControlRequest+0x13c>
+ 1574: 80 91 ce 02 lds r24, 0x02CE
+ 1578: 88 23 and r24, r24
+ 157a: 41 f5 brne .+80 ; 0x15cc <USB_Device_ProcessControlRequest+0x13c>
{
uint8_t EndpointIndex = ((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK);
- 150c: 20 91 ec 02 lds r18, 0x02EC
- 1510: 2f 70 andi r18, 0x0F ; 15
+ 157c: 20 91 d0 02 lds r18, 0x02D0
+ 1580: 2f 70 andi r18, 0x0F ; 15
if (EndpointIndex == ENDPOINT_CONTROLEP)
- 1512: 09 f4 brne .+2 ; 0x1516 <USB_Device_ProcessControlRequest+0xf6>
- 1514: cf c0 rjmp .+414 ; 0x16b4 <USB_Device_ProcessControlRequest+0x294>
+ 1582: 09 f4 brne .+2 ; 0x1586 <USB_Device_ProcessControlRequest+0xf6>
+ 1584: cf c0 rjmp .+414 ; 0x1724 <USB_Device_ProcessControlRequest+0x294>
*/
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);
- 1516: 20 93 e9 00 sts 0x00E9, r18
+ 1586: 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);
- 151a: 80 91 eb 00 lds r24, 0x00EB
+ 158a: 80 91 eb 00 lds r24, 0x00EB
return;
Endpoint_SelectEndpoint(EndpointIndex);
if (Endpoint_IsEnabled())
- 151e: 80 ff sbrs r24, 0
- 1520: 1d c0 rjmp .+58 ; 0x155c <USB_Device_ProcessControlRequest+0x13c>
+ 158e: 80 ff sbrs r24, 0
+ 1590: 1d c0 rjmp .+58 ; 0x15cc <USB_Device_ProcessControlRequest+0x13c>
{
if (USB_ControlRequest.bRequest == REQ_SetFeature)
- 1522: 80 91 e9 02 lds r24, 0x02E9
- 1526: 83 30 cpi r24, 0x03 ; 3
- 1528: 21 f4 brne .+8 ; 0x1532 <USB_Device_ProcessControlRequest+0x112>
+ 1592: 80 91 cd 02 lds r24, 0x02CD
+ 1596: 83 30 cpi r24, 0x03 ; 3
+ 1598: 21 f4 brne .+8 ; 0x15a2 <USB_Device_ProcessControlRequest+0x112>
* \ingroup Group_EndpointPacketManagement_AVR8
*/
static inline void Endpoint_StallTransaction(void) ATTR_ALWAYS_INLINE;
static inline void Endpoint_StallTransaction(void)
{
UECONX |= (1 << STALLRQ);
- 152a: 80 91 eb 00 lds r24, 0x00EB
- 152e: 80 62 ori r24, 0x20 ; 32
- 1530: 13 c0 rjmp .+38 ; 0x1558 <USB_Device_ProcessControlRequest+0x138>
+ 159a: 80 91 eb 00 lds r24, 0x00EB
+ 159e: 80 62 ori r24, 0x20 ; 32
+ 15a0: 13 c0 rjmp .+38 ; 0x15c8 <USB_Device_ProcessControlRequest+0x138>
* \ingroup Group_EndpointPacketManagement_AVR8
*/
static inline void Endpoint_ClearStall(void) ATTR_ALWAYS_INLINE;
static inline void Endpoint_ClearStall(void)
{
UECONX |= (1 << STALLRQC);
- 1532: 80 91 eb 00 lds r24, 0x00EB
- 1536: 80 61 ori r24, 0x10 ; 16
- 1538: 80 93 eb 00 sts 0x00EB, r24
+ 15a2: 80 91 eb 00 lds r24, 0x00EB
+ 15a6: 80 61 ori r24, 0x10 ; 16
+ 15a8: 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));
- 153c: 81 e0 ldi r24, 0x01 ; 1
- 153e: 90 e0 ldi r25, 0x00 ; 0
- 1540: 02 c0 rjmp .+4 ; 0x1546 <USB_Device_ProcessControlRequest+0x126>
- 1542: 88 0f add r24, r24
- 1544: 99 1f adc r25, r25
- 1546: 2a 95 dec r18
- 1548: e2 f7 brpl .-8 ; 0x1542 <USB_Device_ProcessControlRequest+0x122>
- 154a: 80 93 ea 00 sts 0x00EA, r24
+ 15ac: 81 e0 ldi r24, 0x01 ; 1
+ 15ae: 90 e0 ldi r25, 0x00 ; 0
+ 15b0: 02 c0 rjmp .+4 ; 0x15b6 <USB_Device_ProcessControlRequest+0x126>
+ 15b2: 88 0f add r24, r24
+ 15b4: 99 1f adc r25, r25
+ 15b6: 2a 95 dec r18
+ 15b8: e2 f7 brpl .-8 ; 0x15b2 <USB_Device_ProcessControlRequest+0x122>
+ 15ba: 80 93 ea 00 sts 0x00EA, r24
UERST = 0;
- 154e: 10 92 ea 00 sts 0x00EA, r1
+ 15be: 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);
- 1552: 80 91 eb 00 lds r24, 0x00EB
- 1556: 88 60 ori r24, 0x08 ; 8
- 1558: 80 93 eb 00 sts 0x00EB, r24
+ 15c2: 80 91 eb 00 lds r24, 0x00EB
+ 15c6: 88 60 ori r24, 0x08 ; 8
+ 15c8: 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);
- 155c: 10 92 e9 00 sts 0x00E9, r1
+ 15cc: 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);
- 1560: 80 91 e8 00 lds r24, 0x00E8
- 1564: 87 7f andi r24, 0xF7 ; 247
- 1566: 86 c0 rjmp .+268 ; 0x1674 <USB_Device_ProcessControlRequest+0x254>
+ 15d0: 80 91 e8 00 lds r24, 0x00E8
+ 15d4: 87 7f andi r24, 0xF7 ; 247
+ 15d6: 86 c0 rjmp .+268 ; 0x16e4 <USB_Device_ProcessControlRequest+0x254>
USB_Device_ClearSetFeature();
}
break;
case REQ_SetAddress:
if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE))
- 1568: 88 23 and r24, r24
- 156a: 09 f0 breq .+2 ; 0x156e <USB_Device_ProcessControlRequest+0x14e>
- 156c: a3 c0 rjmp .+326 ; 0x16b4 <USB_Device_ProcessControlRequest+0x294>
+ 15d8: 88 23 and r24, r24
+ 15da: 09 f0 breq .+2 ; 0x15de <USB_Device_ProcessControlRequest+0x14e>
+ 15dc: a3 c0 rjmp .+326 ; 0x1724 <USB_Device_ProcessControlRequest+0x294>
}
}
static void USB_Device_SetAddress(void)
{
uint8_t DeviceAddress = (USB_ControlRequest.wValue & 0x7F);
- 156e: 10 91 ea 02 lds r17, 0x02EA
- 1572: 1f 77 andi r17, 0x7F ; 127
+ 15de: 10 91 ce 02 lds r17, 0x02CE
+ 15e2: 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);
- 1574: 80 91 e3 00 lds r24, 0x00E3
- 1578: 80 78 andi r24, 0x80 ; 128
- 157a: 81 2b or r24, r17
- 157c: 80 93 e3 00 sts 0x00E3, r24
- 1580: 80 91 e8 00 lds r24, 0x00E8
- 1584: 87 7f andi r24, 0xF7 ; 247
- 1586: 80 93 e8 00 sts 0x00E8, r24
+ 15e4: 80 91 e3 00 lds r24, 0x00E3
+ 15e8: 80 78 andi r24, 0x80 ; 128
+ 15ea: 81 2b or r24, r17
+ 15ec: 80 93 e3 00 sts 0x00E3, r24
+ 15f0: 80 91 e8 00 lds r24, 0x00E8
+ 15f4: 87 7f andi r24, 0xF7 ; 247
+ 15f6: 80 93 e8 00 sts 0x00E8, r24
USB_Device_SetDeviceAddress(DeviceAddress);
Endpoint_ClearSETUP();
Endpoint_ClearStatusStage();
- 158a: d2 dd rcall .-1116 ; 0x1130 <Endpoint_ClearStatusStage>
+ 15fa: d2 dd rcall .-1116 ; 0x11a0 <Endpoint_ClearStatusStage>
* \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);
- 158c: 80 91 e8 00 lds r24, 0x00E8
+ 15fc: 80 91 e8 00 lds r24, 0x00E8
while (!(Endpoint_IsINReady()));
- 1590: 80 ff sbrs r24, 0
- 1592: fc cf rjmp .-8 ; 0x158c <USB_Device_ProcessControlRequest+0x16c>
+ 1600: 80 ff sbrs r24, 0
+ 1602: fc cf rjmp .-8 ; 0x15fc <USB_Device_ProcessControlRequest+0x16c>
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);
- 1594: 80 91 e3 00 lds r24, 0x00E3
- 1598: 80 68 ori r24, 0x80 ; 128
- 159a: 80 93 e3 00 sts 0x00E3, r24
+ 1604: 80 91 e3 00 lds r24, 0x00E3
+ 1608: 80 68 ori r24, 0x80 ; 128
+ 160a: 80 93 e3 00 sts 0x00E3, r24
USB_Device_EnableDeviceAddress(DeviceAddress);
USB_DeviceState = (DeviceAddress) ? DEVICE_STATE_Addressed : DEVICE_STATE_Default;
- 159e: 11 23 and r17, r17
- 15a0: 11 f0 breq .+4 ; 0x15a6 <USB_Device_ProcessControlRequest+0x186>
- 15a2: 83 e0 ldi r24, 0x03 ; 3
- 15a4: 01 c0 rjmp .+2 ; 0x15a8 <USB_Device_ProcessControlRequest+0x188>
- 15a6: 82 e0 ldi r24, 0x02 ; 2
- 15a8: 8e bb out 0x1e, r24 ; 30
- 15aa: 84 c0 rjmp .+264 ; 0x16b4 <USB_Device_ProcessControlRequest+0x294>
+ 160e: 11 23 and r17, r17
+ 1610: 11 f0 breq .+4 ; 0x1616 <USB_Device_ProcessControlRequest+0x186>
+ 1612: 83 e0 ldi r24, 0x03 ; 3
+ 1614: 01 c0 rjmp .+2 ; 0x1618 <USB_Device_ProcessControlRequest+0x188>
+ 1616: 82 e0 ldi r24, 0x02 ; 2
+ 1618: 8e bb out 0x1e, r24 ; 30
+ 161a: 84 c0 rjmp .+264 ; 0x1724 <USB_Device_ProcessControlRequest+0x294>
if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE))
USB_Device_SetAddress();
break;
case REQ_GetDescriptor:
if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) ||
- 15ac: 80 58 subi r24, 0x80 ; 128
- 15ae: 82 30 cpi r24, 0x02 ; 2
- 15b0: 08 f0 brcs .+2 ; 0x15b4 <USB_Device_ProcessControlRequest+0x194>
- 15b2: 80 c0 rjmp .+256 ; 0x16b4 <USB_Device_ProcessControlRequest+0x294>
+ 161c: 80 58 subi r24, 0x80 ; 128
+ 161e: 82 30 cpi r24, 0x02 ; 2
+ 1620: 08 f0 brcs .+2 ; 0x1624 <USB_Device_ProcessControlRequest+0x194>
+ 1622: 80 c0 rjmp .+256 ; 0x1724 <USB_Device_ProcessControlRequest+0x294>
!(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))
- 15b4: 80 91 ea 02 lds r24, 0x02EA
- 15b8: 90 91 eb 02 lds r25, 0x02EB
- 15bc: 23 e0 ldi r18, 0x03 ; 3
- 15be: 8c 3d cpi r24, 0xDC ; 220
- 15c0: 92 07 cpc r25, r18
- 15c2: 91 f5 brne .+100 ; 0x1628 <USB_Device_ProcessControlRequest+0x208>
+ 1624: 80 91 ce 02 lds r24, 0x02CE
+ 1628: 90 91 cf 02 lds r25, 0x02CF
+ 162c: 23 e0 ldi r18, 0x03 ; 3
+ 162e: 8c 3d cpi r24, 0xDC ; 220
+ 1630: 92 07 cpc r25, r18
+ 1632: 91 f5 brne .+100 ; 0x1698 <USB_Device_ProcessControlRequest+0x208>
{
USB_Descriptor_Header_t Header;
uint16_t UnicodeString[INTERNAL_SERIAL_LENGTH_BITS / 4];
} SignatureDescriptor;
SignatureDescriptor.Header.Type = DTYPE_String;
- 15c4: 83 e0 ldi r24, 0x03 ; 3
- 15c6: 8c 83 std Y+4, r24 ; 0x04
+ 1634: 83 e0 ldi r24, 0x03 ; 3
+ 1636: 8c 83 std Y+4, r24 ; 0x04
SignatureDescriptor.Header.Size = USB_STRING_LEN(INTERNAL_SERIAL_LENGTH_BITS / 4);
- 15c8: 8a e2 ldi r24, 0x2A ; 42
- 15ca: 8b 83 std Y+3, r24 ; 0x03
+ 1638: 8a e2 ldi r24, 0x2A ; 42
+ 163a: 8b 83 std Y+3, r24 ; 0x03
static inline uint_reg_t GetGlobalInterruptMask(void)
{
GCC_MEMORY_BARRIER();
#if (ARCH == ARCH_AVR8)
return SREG;
- 15cc: 5f b7 in r21, 0x3f ; 63
+ 163c: 5f b7 in r21, 0x3f ; 63
static inline void GlobalInterruptDisable(void)
{
GCC_MEMORY_BARRIER();
#if (ARCH == ARCH_AVR8)
cli();
- 15ce: f8 94 cli
+ 163e: f8 94 cli
__builtin_ssrf(AVR32_SR_GM_OFFSET);
#elif (ARCH == ARCH_XMEGA)
cli();
#endif
GCC_MEMORY_BARRIER();
- 15d0: de 01 movw r26, r28
- 15d2: 15 96 adiw r26, 0x05 ; 5
- 15d4: 80 e0 ldi r24, 0x00 ; 0
- 15d6: 90 e0 ldi r25, 0x00 ; 0
+ 1640: de 01 movw r26, r28
+ 1642: 15 96 adiw r26, 0x05 ; 5
+ 1644: 80 e0 ldi r24, 0x00 ; 0
+ 1646: 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;
- 15d8: 4e e0 ldi r20, 0x0E ; 14
+ 1648: 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);
- 15da: 61 e2 ldi r22, 0x21 ; 33
- 15dc: e4 2f mov r30, r20
- 15de: f0 e0 ldi r31, 0x00 ; 0
- 15e0: 60 93 57 00 sts 0x0057, r22
- 15e4: e4 91 lpm r30, Z+
+ 164a: 61 e2 ldi r22, 0x21 ; 33
+ 164c: e4 2f mov r30, r20
+ 164e: f0 e0 ldi r31, 0x00 ; 0
+ 1650: 60 93 57 00 sts 0x0057, r22
+ 1654: e4 91 lpm r30, Z+
if (SerialCharNum & 0x01)
- 15e6: 80 ff sbrs r24, 0
- 15e8: 03 c0 rjmp .+6 ; 0x15f0 <USB_Device_ProcessControlRequest+0x1d0>
+ 1656: 80 ff sbrs r24, 0
+ 1658: 03 c0 rjmp .+6 ; 0x1660 <USB_Device_ProcessControlRequest+0x1d0>
{
SerialByte >>= 4;
- 15ea: e2 95 swap r30
- 15ec: ef 70 andi r30, 0x0F ; 15
+ 165a: e2 95 swap r30
+ 165c: ef 70 andi r30, 0x0F ; 15
SigReadAddress++;
- 15ee: 4f 5f subi r20, 0xFF ; 255
+ 165e: 4f 5f subi r20, 0xFF ; 255
}
SerialByte &= 0x0F;
- 15f0: ef 70 andi r30, 0x0F ; 15
- 15f2: 2e 2f mov r18, r30
- 15f4: 30 e0 ldi r19, 0x00 ; 0
+ 1660: ef 70 andi r30, 0x0F ; 15
+ 1662: 2e 2f mov r18, r30
+ 1664: 30 e0 ldi r19, 0x00 ; 0
UnicodeString[SerialCharNum] = cpu_to_le16((SerialByte >= 10) ?
- 15f6: ea 30 cpi r30, 0x0A ; 10
- 15f8: 18 f0 brcs .+6 ; 0x1600 <USB_Device_ProcessControlRequest+0x1e0>
- 15fa: 29 5c subi r18, 0xC9 ; 201
- 15fc: 3f 4f sbci r19, 0xFF ; 255
- 15fe: 02 c0 rjmp .+4 ; 0x1604 <USB_Device_ProcessControlRequest+0x1e4>
- 1600: 20 5d subi r18, 0xD0 ; 208
- 1602: 3f 4f sbci r19, 0xFF ; 255
- 1604: 2d 93 st X+, r18
- 1606: 3d 93 st X+, r19
- 1608: 01 96 adiw r24, 0x01 ; 1
+ 1666: ea 30 cpi r30, 0x0A ; 10
+ 1668: 18 f0 brcs .+6 ; 0x1670 <USB_Device_ProcessControlRequest+0x1e0>
+ 166a: 29 5c subi r18, 0xC9 ; 201
+ 166c: 3f 4f sbci r19, 0xFF ; 255
+ 166e: 02 c0 rjmp .+4 ; 0x1674 <USB_Device_ProcessControlRequest+0x1e4>
+ 1670: 20 5d subi r18, 0xD0 ; 208
+ 1672: 3f 4f sbci r19, 0xFF ; 255
+ 1674: 2d 93 st X+, r18
+ 1676: 3d 93 st X+, r19
+ 1678: 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++)
- 160a: 84 31 cpi r24, 0x14 ; 20
- 160c: 91 05 cpc r25, r1
- 160e: 31 f7 brne .-52 ; 0x15dc <USB_Device_ProcessControlRequest+0x1bc>
+ 167a: 84 31 cpi r24, 0x14 ; 20
+ 167c: 91 05 cpc r25, r1
+ 167e: 31 f7 brne .-52 ; 0x164c <USB_Device_ProcessControlRequest+0x1bc>
static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState)
{
GCC_MEMORY_BARRIER();
#if (ARCH == ARCH_AVR8)
SREG = GlobalIntState;
- 1610: 5f bf out 0x3f, r21 ; 63
+ 1680: 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);
- 1612: 80 91 e8 00 lds r24, 0x00E8
- 1616: 87 7f andi r24, 0xF7 ; 247
- 1618: 80 93 e8 00 sts 0x00E8, r24
+ 1682: 80 91 e8 00 lds r24, 0x00E8
+ 1686: 87 7f andi r24, 0xF7 ; 247
+ 1688: 80 93 e8 00 sts 0x00E8, r24
USB_Device_GetSerialString(SignatureDescriptor.UnicodeString);
Endpoint_ClearSETUP();
Endpoint_Write_Control_Stream_LE(&SignatureDescriptor, sizeof(SignatureDescriptor));
- 161c: ce 01 movw r24, r28
- 161e: 03 96 adiw r24, 0x03 ; 3
- 1620: 6a e2 ldi r22, 0x2A ; 42
- 1622: 70 e0 ldi r23, 0x00 ; 0
- 1624: 55 dc rcall .-1878 ; 0xed0 <Endpoint_Write_Control_Stream_LE>
- 1626: 12 c0 rjmp .+36 ; 0x164c <USB_Device_ProcessControlRequest+0x22c>
+ 168c: ce 01 movw r24, r28
+ 168e: 03 96 adiw r24, 0x03 ; 3
+ 1690: 6a e2 ldi r22, 0x2A ; 42
+ 1692: 70 e0 ldi r23, 0x00 ; 0
+ 1694: 55 dc rcall .-1878 ; 0xf40 <Endpoint_Write_Control_Stream_LE>
+ 1696: 12 c0 rjmp .+36 ; 0x16bc <USB_Device_ProcessControlRequest+0x22c>
USB_Device_GetInternalSerialDescriptor();
return;
}
#endif
if ((DescriptorSize = CALLBACK_USB_GetDescriptor(USB_ControlRequest.wValue, USB_ControlRequest.wIndex,
- 1628: 60 91 ec 02 lds r22, 0x02EC
- 162c: ae 01 movw r20, r28
- 162e: 4f 5f subi r20, 0xFF ; 255
- 1630: 5f 4f sbci r21, 0xFF ; 255
- 1632: 21 dc rcall .-1982 ; 0xe76 <CALLBACK_USB_GetDescriptor>
- 1634: bc 01 movw r22, r24
- 1636: 00 97 sbiw r24, 0x00 ; 0
- 1638: 09 f4 brne .+2 ; 0x163c <USB_Device_ProcessControlRequest+0x21c>
- 163a: 3c c0 rjmp .+120 ; 0x16b4 <USB_Device_ProcessControlRequest+0x294>
- 163c: 80 91 e8 00 lds r24, 0x00E8
- 1640: 87 7f andi r24, 0xF7 ; 247
- 1642: 80 93 e8 00 sts 0x00E8, r24
+ 1698: 60 91 d0 02 lds r22, 0x02D0
+ 169c: ae 01 movw r20, r28
+ 169e: 4f 5f subi r20, 0xFF ; 255
+ 16a0: 5f 4f sbci r21, 0xFF ; 255
+ 16a2: 21 dc rcall .-1982 ; 0xee6 <CALLBACK_USB_GetDescriptor>
+ 16a4: bc 01 movw r22, r24
+ 16a6: 00 97 sbiw r24, 0x00 ; 0
+ 16a8: 09 f4 brne .+2 ; 0x16ac <USB_Device_ProcessControlRequest+0x21c>
+ 16aa: 3c c0 rjmp .+120 ; 0x1724 <USB_Device_ProcessControlRequest+0x294>
+ 16ac: 80 91 e8 00 lds r24, 0x00E8
+ 16b0: 87 7f andi r24, 0xF7 ; 247
+ 16b2: 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);
- 1646: 89 81 ldd r24, Y+1 ; 0x01
- 1648: 9a 81 ldd r25, Y+2 ; 0x02
- 164a: 9c dc rcall .-1736 ; 0xf84 <Endpoint_Write_Control_PStream_LE>
+ 16b6: 89 81 ldd r24, Y+1 ; 0x01
+ 16b8: 9a 81 ldd r25, Y+2 ; 0x02
+ 16ba: 9c dc rcall .-1736 ; 0xff4 <Endpoint_Write_Control_PStream_LE>
*/
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));
- 164c: 80 91 e8 00 lds r24, 0x00E8
- 1650: 8b 77 andi r24, 0x7B ; 123
- 1652: 80 93 e8 00 sts 0x00E8, r24
- 1656: 2e c0 rjmp .+92 ; 0x16b4 <USB_Device_ProcessControlRequest+0x294>
+ 16bc: 80 91 e8 00 lds r24, 0x00E8
+ 16c0: 8b 77 andi r24, 0x7B ; 123
+ 16c2: 80 93 e8 00 sts 0x00E8, r24
+ 16c6: 2e c0 rjmp .+92 ; 0x1724 <USB_Device_ProcessControlRequest+0x294>
USB_Device_GetDescriptor();
}
break;
case REQ_GetConfiguration:
if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE))
- 1658: 80 38 cpi r24, 0x80 ; 128
- 165a: 61 f5 brne .+88 ; 0x16b4 <USB_Device_ProcessControlRequest+0x294>
+ 16c8: 80 38 cpi r24, 0x80 ; 128
+ 16ca: 61 f5 brne .+88 ; 0x1724 <USB_Device_ProcessControlRequest+0x294>
* \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);
- 165c: 80 91 e8 00 lds r24, 0x00E8
- 1660: 87 7f andi r24, 0xF7 ; 247
- 1662: 80 93 e8 00 sts 0x00E8, r24
+ 16cc: 80 91 e8 00 lds r24, 0x00E8
+ 16d0: 87 7f andi r24, 0xF7 ; 247
+ 16d2: 80 93 e8 00 sts 0x00E8, r24
static void USB_Device_GetConfiguration(void)
{
Endpoint_ClearSETUP();
Endpoint_Write_8(USB_Device_ConfigurationNumber);
- 1666: 80 91 e4 02 lds r24, 0x02E4
+ 16d6: 80 91 c8 02 lds r24, 0x02C8
* \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;
- 166a: 80 93 f1 00 sts 0x00F1, r24
+ 16da: 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));
- 166e: 80 91 e8 00 lds r24, 0x00E8
- 1672: 8e 77 andi r24, 0x7E ; 126
- 1674: 80 93 e8 00 sts 0x00E8, r24
+ 16de: 80 91 e8 00 lds r24, 0x00E8
+ 16e2: 8e 77 andi r24, 0x7E ; 126
+ 16e4: 80 93 e8 00 sts 0x00E8, r24
Endpoint_ClearIN();
Endpoint_ClearStatusStage();
- 1678: 5b dd rcall .-1354 ; 0x1130 <Endpoint_ClearStatusStage>
- 167a: 1c c0 rjmp .+56 ; 0x16b4 <USB_Device_ProcessControlRequest+0x294>
+ 16e8: 5b dd rcall .-1354 ; 0x11a0 <Endpoint_ClearStatusStage>
+ 16ea: 1c c0 rjmp .+56 ; 0x1724 <USB_Device_ProcessControlRequest+0x294>
if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE))
USB_Device_GetConfiguration();
break;
case REQ_SetConfiguration:
if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE))
- 167c: 88 23 and r24, r24
- 167e: d1 f4 brne .+52 ; 0x16b4 <USB_Device_ProcessControlRequest+0x294>
+ 16ec: 88 23 and r24, r24
+ 16ee: d1 f4 brne .+52 ; 0x1724 <USB_Device_ProcessControlRequest+0x294>
}
static void USB_Device_SetConfiguration(void)
{
#if defined(FIXED_NUM_CONFIGURATIONS)
if ((uint8_t)USB_ControlRequest.wValue > FIXED_NUM_CONFIGURATIONS)
- 1680: 90 91 ea 02 lds r25, 0x02EA
- 1684: 92 30 cpi r25, 0x02 ; 2
- 1686: b0 f4 brcc .+44 ; 0x16b4 <USB_Device_ProcessControlRequest+0x294>
+ 16f0: 90 91 ce 02 lds r25, 0x02CE
+ 16f4: 92 30 cpi r25, 0x02 ; 2
+ 16f6: b0 f4 brcc .+44 ; 0x1724 <USB_Device_ProcessControlRequest+0x294>
* \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);
- 1688: 80 91 e8 00 lds r24, 0x00E8
- 168c: 87 7f andi r24, 0xF7 ; 247
- 168e: 80 93 e8 00 sts 0x00E8, r24
+ 16f8: 80 91 e8 00 lds r24, 0x00E8
+ 16fc: 87 7f andi r24, 0xF7 ; 247
+ 16fe: 80 93 e8 00 sts 0x00E8, r24
#endif
#endif
Endpoint_ClearSETUP();
USB_Device_ConfigurationNumber = (uint8_t)USB_ControlRequest.wValue;
- 1692: 90 93 e4 02 sts 0x02E4, r25
+ 1702: 90 93 c8 02 sts 0x02C8, r25
Endpoint_ClearStatusStage();
- 1696: 4c dd rcall .-1384 ; 0x1130 <Endpoint_ClearStatusStage>
+ 1706: 4c dd rcall .-1384 ; 0x11a0 <Endpoint_ClearStatusStage>
if (USB_Device_ConfigurationNumber)
- 1698: 80 91 e4 02 lds r24, 0x02E4
- 169c: 88 23 and r24, r24
- 169e: 21 f4 brne .+8 ; 0x16a8 <USB_Device_ProcessControlRequest+0x288>
+ 1708: 80 91 c8 02 lds r24, 0x02C8
+ 170c: 88 23 and r24, r24
+ 170e: 21 f4 brne .+8 ; 0x1718 <USB_Device_ProcessControlRequest+0x288>
}
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));
- 16a0: 80 91 e3 00 lds r24, 0x00E3
+ 1710: 80 91 e3 00 lds r24, 0x00E3
USB_DeviceState = DEVICE_STATE_Configured;
else
USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered;
- 16a4: 87 ff sbrs r24, 7
- 16a6: 02 c0 rjmp .+4 ; 0x16ac <USB_Device_ProcessControlRequest+0x28c>
- 16a8: 84 e0 ldi r24, 0x04 ; 4
- 16aa: 01 c0 rjmp .+2 ; 0x16ae <USB_Device_ProcessControlRequest+0x28e>
- 16ac: 81 e0 ldi r24, 0x01 ; 1
- 16ae: 8e bb out 0x1e, r24 ; 30
+ 1714: 87 ff sbrs r24, 7
+ 1716: 02 c0 rjmp .+4 ; 0x171c <USB_Device_ProcessControlRequest+0x28c>
+ 1718: 84 e0 ldi r24, 0x04 ; 4
+ 171a: 01 c0 rjmp .+2 ; 0x171e <USB_Device_ProcessControlRequest+0x28e>
+ 171c: 81 e0 ldi r24, 0x01 ; 1
+ 171e: 8e bb out 0x1e, r24 ; 30
EVENT_USB_Device_ConfigurationChanged();
- 16b0: 0e 94 4a 03 call 0x694 ; 0x694 <EVENT_USB_Device_ConfigurationChanged>
+ 1720: 0e 94 4a 03 call 0x694 ; 0x694 <EVENT_USB_Device_ConfigurationChanged>
* \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);
- 16b4: 80 91 e8 00 lds r24, 0x00E8
+ 1724: 80 91 e8 00 lds r24, 0x00E8
default:
break;
}
}
if (Endpoint_IsSETUPReceived())
- 16b8: 83 ff sbrs r24, 3
- 16ba: 0a c0 rjmp .+20 ; 0x16d0 <USB_Device_ProcessControlRequest+0x2b0>
+ 1728: 83 ff sbrs r24, 3
+ 172a: 0a c0 rjmp .+20 ; 0x1740 <USB_Device_ProcessControlRequest+0x2b0>
* \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);
- 16bc: 80 91 e8 00 lds r24, 0x00E8
- 16c0: 87 7f andi r24, 0xF7 ; 247
- 16c2: 80 93 e8 00 sts 0x00E8, r24
+ 172c: 80 91 e8 00 lds r24, 0x00E8
+ 1730: 87 7f andi r24, 0xF7 ; 247
+ 1732: 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);
- 16c6: 80 91 eb 00 lds r24, 0x00EB
- 16ca: 80 62 ori r24, 0x20 ; 32
- 16cc: 80 93 eb 00 sts 0x00EB, r24
+ 1736: 80 91 eb 00 lds r24, 0x00EB
+ 173a: 80 62 ori r24, 0x20 ; 32
+ 173c: 80 93 eb 00 sts 0x00EB, r24
{
Endpoint_ClearSETUP();
Endpoint_StallTransaction();
}
}
- 16d0: ac 96 adiw r28, 0x2c ; 44
- 16d2: 0f b6 in r0, 0x3f ; 63
- 16d4: f8 94 cli
- 16d6: de bf out 0x3e, r29 ; 62
- 16d8: 0f be out 0x3f, r0 ; 63
- 16da: cd bf out 0x3d, r28 ; 61
- 16dc: cf 91 pop r28
- 16de: df 91 pop r29
- 16e0: 1f 91 pop r17
- 16e2: 08 95 ret
-
-000016e4 <USB_Event_Stub>:
+ 1740: ac 96 adiw r28, 0x2c ; 44
+ 1742: 0f b6 in r0, 0x3f ; 63
+ 1744: f8 94 cli
+ 1746: de bf out 0x3e, r29 ; 62
+ 1748: 0f be out 0x3f, r0 ; 63
+ 174a: cd bf out 0x3d, r28 ; 61
+ 174c: cf 91 pop r28
+ 174e: df 91 pop r29
+ 1750: 1f 91 pop r17
+ 1752: 08 95 ret
+
+00001754 <USB_Event_Stub>:
#include "Events.h"
void USB_Event_Stub(void)
{
}
- 16e4: 08 95 ret
+ 1754: 08 95 ret
-000016e6 <USB_USBTask>:
+00001756 <USB_USBTask>:
#if defined(USB_CAN_BE_DEVICE) && !defined(DEVICE_STATE_AS_GPIOR)
volatile uint8_t USB_DeviceState;
#endif
void USB_USBTask(void)
{
- 16e6: 1f 93 push r17
+ 1756: 1f 93 push r17
}
#if defined(USB_CAN_BE_DEVICE)
static void USB_DeviceTask(void)
{
if (USB_DeviceState == DEVICE_STATE_Unattached)
- 16e8: 8e b3 in r24, 0x1e ; 30
- 16ea: 88 23 and r24, r24
- 16ec: a9 f0 breq .+42 ; 0x1718 <USB_USBTask+0x32>
+ 1758: 8e b3 in r24, 0x1e ; 30
+ 175a: 88 23 and r24, r24
+ 175c: a9 f0 breq .+42 ; 0x1788 <USB_USBTask+0x32>
*/
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());
- 16ee: 80 91 e9 00 lds r24, 0x00E9
- 16f2: 8f 70 andi r24, 0x0F ; 15
+ 175e: 80 91 e9 00 lds r24, 0x00E9
+ 1762: 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;
- 16f4: 90 91 ec 00 lds r25, 0x00EC
- 16f8: 90 ff sbrs r25, 0
- 16fa: 02 c0 rjmp .+4 ; 0x1700 <USB_USBTask+0x1a>
- 16fc: 10 e8 ldi r17, 0x80 ; 128
- 16fe: 01 c0 rjmp .+2 ; 0x1702 <USB_USBTask+0x1c>
- 1700: 10 e0 ldi r17, 0x00 ; 0
+ 1764: 90 91 ec 00 lds r25, 0x00EC
+ 1768: 90 ff sbrs r25, 0
+ 176a: 02 c0 rjmp .+4 ; 0x1770 <USB_USBTask+0x1a>
+ 176c: 10 e8 ldi r17, 0x80 ; 128
+ 176e: 01 c0 rjmp .+2 ; 0x1772 <USB_USBTask+0x1c>
+ 1770: 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());
- 1702: 18 2b or r17, r24
+ 1772: 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);
- 1704: 10 92 e9 00 sts 0x00E9, r1
+ 1774: 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);
- 1708: 80 91 e8 00 lds r24, 0x00E8
+ 1778: 80 91 e8 00 lds r24, 0x00E8
uint8_t PrevEndpoint = Endpoint_GetCurrentEndpoint();
Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
if (Endpoint_IsSETUPReceived())
- 170c: 83 ff sbrs r24, 3
- 170e: 01 c0 rjmp .+2 ; 0x1712 <USB_USBTask+0x2c>
+ 177c: 83 ff sbrs r24, 3
+ 177e: 01 c0 rjmp .+2 ; 0x1782 <USB_USBTask+0x2c>
USB_Device_ProcessControlRequest();
- 1710: 87 de rcall .-754 ; 0x1420 <USB_Device_ProcessControlRequest>
+ 1780: 87 de rcall .-754 ; 0x1490 <USB_Device_ProcessControlRequest>
*/
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);
- 1712: 1f 70 andi r17, 0x0F ; 15
- 1714: 10 93 e9 00 sts 0x00E9, r17
+ 1782: 1f 70 andi r17, 0x0F ; 15
+ 1784: 10 93 e9 00 sts 0x00E9, r17
#elif defined(USB_CAN_BE_HOST)
USB_HostTask();
#elif defined(USB_CAN_BE_DEVICE)
USB_DeviceTask();
#endif
}
- 1718: 1f 91 pop r17
- 171a: 08 95 ret
+ 1788: 1f 91 pop r17
+ 178a: 08 95 ret
-0000171c <CDC_Device_ProcessControlRequest>:
+0000178c <CDC_Device_ProcessControlRequest>:
#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)
{
- 171c: cf 93 push r28
- 171e: df 93 push r29
- 1720: ec 01 movw r28, r24
+ 178c: cf 93 push r28
+ 178e: df 93 push r29
+ 1790: 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);
- 1722: 80 91 e8 00 lds r24, 0x00E8
+ 1792: 80 91 e8 00 lds r24, 0x00E8
if (!(Endpoint_IsSETUPReceived()))
- 1726: 83 ff sbrs r24, 3
- 1728: a3 c0 rjmp .+326 ; 0x1870 <CDC_Device_ProcessControlRequest+0x154>
+ 1796: 83 ff sbrs r24, 3
+ 1798: a3 c0 rjmp .+326 ; 0x18e0 <CDC_Device_ProcessControlRequest+0x154>
return;
if (USB_ControlRequest.wIndex != CDCInterfaceInfo->Config.ControlInterfaceNumber)
- 172a: 88 81 ld r24, Y
- 172c: 90 e0 ldi r25, 0x00 ; 0
- 172e: 20 91 ec 02 lds r18, 0x02EC
- 1732: 30 91 ed 02 lds r19, 0x02ED
- 1736: 28 17 cp r18, r24
- 1738: 39 07 cpc r19, r25
- 173a: 09 f0 breq .+2 ; 0x173e <CDC_Device_ProcessControlRequest+0x22>
- 173c: 99 c0 rjmp .+306 ; 0x1870 <CDC_Device_ProcessControlRequest+0x154>
+ 179a: 88 81 ld r24, Y
+ 179c: 90 e0 ldi r25, 0x00 ; 0
+ 179e: 20 91 d0 02 lds r18, 0x02D0
+ 17a2: 30 91 d1 02 lds r19, 0x02D1
+ 17a6: 28 17 cp r18, r24
+ 17a8: 39 07 cpc r19, r25
+ 17aa: 09 f0 breq .+2 ; 0x17ae <CDC_Device_ProcessControlRequest+0x22>
+ 17ac: 99 c0 rjmp .+306 ; 0x18e0 <CDC_Device_ProcessControlRequest+0x154>
return;
switch (USB_ControlRequest.bRequest)
- 173e: 80 91 e9 02 lds r24, 0x02E9
- 1742: 81 32 cpi r24, 0x21 ; 33
- 1744: 69 f0 breq .+26 ; 0x1760 <CDC_Device_ProcessControlRequest+0x44>
- 1746: 82 32 cpi r24, 0x22 ; 34
- 1748: 20 f4 brcc .+8 ; 0x1752 <CDC_Device_ProcessControlRequest+0x36>
- 174a: 80 32 cpi r24, 0x20 ; 32
- 174c: 09 f0 breq .+2 ; 0x1750 <CDC_Device_ProcessControlRequest+0x34>
- 174e: 90 c0 rjmp .+288 ; 0x1870 <CDC_Device_ProcessControlRequest+0x154>
- 1750: 3c c0 rjmp .+120 ; 0x17ca <CDC_Device_ProcessControlRequest+0xae>
- 1752: 82 32 cpi r24, 0x22 ; 34
- 1754: 09 f4 brne .+2 ; 0x1758 <CDC_Device_ProcessControlRequest+0x3c>
- 1756: 6b c0 rjmp .+214 ; 0x182e <CDC_Device_ProcessControlRequest+0x112>
- 1758: 83 32 cpi r24, 0x23 ; 35
- 175a: 09 f0 breq .+2 ; 0x175e <CDC_Device_ProcessControlRequest+0x42>
- 175c: 89 c0 rjmp .+274 ; 0x1870 <CDC_Device_ProcessControlRequest+0x154>
- 175e: 7a c0 rjmp .+244 ; 0x1854 <CDC_Device_ProcessControlRequest+0x138>
+ 17ae: 80 91 cd 02 lds r24, 0x02CD
+ 17b2: 81 32 cpi r24, 0x21 ; 33
+ 17b4: 69 f0 breq .+26 ; 0x17d0 <CDC_Device_ProcessControlRequest+0x44>
+ 17b6: 82 32 cpi r24, 0x22 ; 34
+ 17b8: 20 f4 brcc .+8 ; 0x17c2 <CDC_Device_ProcessControlRequest+0x36>
+ 17ba: 80 32 cpi r24, 0x20 ; 32
+ 17bc: 09 f0 breq .+2 ; 0x17c0 <CDC_Device_ProcessControlRequest+0x34>
+ 17be: 90 c0 rjmp .+288 ; 0x18e0 <CDC_Device_ProcessControlRequest+0x154>
+ 17c0: 3c c0 rjmp .+120 ; 0x183a <CDC_Device_ProcessControlRequest+0xae>
+ 17c2: 82 32 cpi r24, 0x22 ; 34
+ 17c4: 09 f4 brne .+2 ; 0x17c8 <CDC_Device_ProcessControlRequest+0x3c>
+ 17c6: 6b c0 rjmp .+214 ; 0x189e <CDC_Device_ProcessControlRequest+0x112>
+ 17c8: 83 32 cpi r24, 0x23 ; 35
+ 17ca: 09 f0 breq .+2 ; 0x17ce <CDC_Device_ProcessControlRequest+0x42>
+ 17cc: 89 c0 rjmp .+274 ; 0x18e0 <CDC_Device_ProcessControlRequest+0x154>
+ 17ce: 7a c0 rjmp .+244 ; 0x18c4 <CDC_Device_ProcessControlRequest+0x138>
{
case CDC_REQ_GetLineEncoding:
if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))
- 1760: 80 91 e8 02 lds r24, 0x02E8
- 1764: 81 3a cpi r24, 0xA1 ; 161
- 1766: 09 f0 breq .+2 ; 0x176a <CDC_Device_ProcessControlRequest+0x4e>
- 1768: 83 c0 rjmp .+262 ; 0x1870 <CDC_Device_ProcessControlRequest+0x154>
+ 17d0: 80 91 cc 02 lds r24, 0x02CC
+ 17d4: 81 3a cpi r24, 0xA1 ; 161
+ 17d6: 09 f0 breq .+2 ; 0x17da <CDC_Device_ProcessControlRequest+0x4e>
+ 17d8: 83 c0 rjmp .+262 ; 0x18e0 <CDC_Device_ProcessControlRequest+0x154>
* \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);
- 176a: 80 91 e8 00 lds r24, 0x00E8
- 176e: 87 7f andi r24, 0xF7 ; 247
- 1770: 80 93 e8 00 sts 0x00E8, r24
+ 17da: 80 91 e8 00 lds r24, 0x00E8
+ 17de: 87 7f andi r24, 0xF7 ; 247
+ 17e0: 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);
- 1774: 80 91 e8 00 lds r24, 0x00E8
+ 17e4: 80 91 e8 00 lds r24, 0x00E8
{
Endpoint_ClearSETUP();
while (!(Endpoint_IsINReady()));
- 1778: 80 ff sbrs r24, 0
- 177a: fc cf rjmp .-8 ; 0x1774 <CDC_Device_ProcessControlRequest+0x58>
+ 17e8: 80 ff sbrs r24, 0
+ 17ea: fc cf rjmp .-8 ; 0x17e4 <CDC_Device_ProcessControlRequest+0x58>
Endpoint_Write_32_LE(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS);
- 177c: 8c 89 ldd r24, Y+20 ; 0x14
- 177e: 9d 89 ldd r25, Y+21 ; 0x15
- 1780: ae 89 ldd r26, Y+22 ; 0x16
- 1782: bf 89 ldd r27, Y+23 ; 0x17
+ 17ec: 8c 89 ldd r24, Y+20 ; 0x14
+ 17ee: 9d 89 ldd r25, Y+21 ; 0x15
+ 17f0: ae 89 ldd r26, Y+22 ; 0x16
+ 17f2: 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);
- 1784: 80 93 f1 00 sts 0x00F1, r24
+ 17f4: 80 93 f1 00 sts 0x00F1, r24
UEDATX = (Data >> 8);
- 1788: 29 2f mov r18, r25
- 178a: 3a 2f mov r19, r26
- 178c: 4b 2f mov r20, r27
- 178e: 55 27 eor r21, r21
- 1790: 20 93 f1 00 sts 0x00F1, r18
+ 17f8: 29 2f mov r18, r25
+ 17fa: 3a 2f mov r19, r26
+ 17fc: 4b 2f mov r20, r27
+ 17fe: 55 27 eor r21, r21
+ 1800: 20 93 f1 00 sts 0x00F1, r18
UEDATX = (Data >> 16);
- 1794: 9d 01 movw r18, r26
- 1796: 44 27 eor r20, r20
- 1798: 55 27 eor r21, r21
- 179a: 20 93 f1 00 sts 0x00F1, r18
+ 1804: 9d 01 movw r18, r26
+ 1806: 44 27 eor r20, r20
+ 1808: 55 27 eor r21, r21
+ 180a: 20 93 f1 00 sts 0x00F1, r18
UEDATX = (Data >> 24);
- 179e: 8b 2f mov r24, r27
- 17a0: 99 27 eor r25, r25
- 17a2: aa 27 eor r26, r26
- 17a4: bb 27 eor r27, r27
- 17a6: 80 93 f1 00 sts 0x00F1, r24
+ 180e: 8b 2f mov r24, r27
+ 1810: 99 27 eor r25, r25
+ 1812: aa 27 eor r26, r26
+ 1814: bb 27 eor r27, r27
+ 1816: 80 93 f1 00 sts 0x00F1, r24
Endpoint_Write_8(CDCInterfaceInfo->State.LineEncoding.CharFormat);
- 17aa: 88 8d ldd r24, Y+24 ; 0x18
+ 181a: 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;
- 17ac: 80 93 f1 00 sts 0x00F1, r24
+ 181c: 80 93 f1 00 sts 0x00F1, r24
Endpoint_Write_8(CDCInterfaceInfo->State.LineEncoding.ParityType);
- 17b0: 89 8d ldd r24, Y+25 ; 0x19
- 17b2: 80 93 f1 00 sts 0x00F1, r24
+ 1820: 89 8d ldd r24, Y+25 ; 0x19
+ 1822: 80 93 f1 00 sts 0x00F1, r24
Endpoint_Write_8(CDCInterfaceInfo->State.LineEncoding.DataBits);
- 17b6: 8a 8d ldd r24, Y+26 ; 0x1a
- 17b8: 80 93 f1 00 sts 0x00F1, r24
+ 1826: 8a 8d ldd r24, Y+26 ; 0x1a
+ 1828: 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));
- 17bc: 80 91 e8 00 lds r24, 0x00E8
- 17c0: 8e 77 andi r24, 0x7E ; 126
- 17c2: 80 93 e8 00 sts 0x00E8, r24
+ 182c: 80 91 e8 00 lds r24, 0x00E8
+ 1830: 8e 77 andi r24, 0x7E ; 126
+ 1832: 80 93 e8 00 sts 0x00E8, r24
Endpoint_ClearIN();
Endpoint_ClearStatusStage();
- 17c6: b4 dc rcall .-1688 ; 0x1130 <Endpoint_ClearStatusStage>
- 17c8: 53 c0 rjmp .+166 ; 0x1870 <CDC_Device_ProcessControlRequest+0x154>
+ 1836: b4 dc rcall .-1688 ; 0x11a0 <Endpoint_ClearStatusStage>
+ 1838: 53 c0 rjmp .+166 ; 0x18e0 <CDC_Device_ProcessControlRequest+0x154>
}
break;
case CDC_REQ_SetLineEncoding:
if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
- 17ca: 80 91 e8 02 lds r24, 0x02E8
- 17ce: 81 32 cpi r24, 0x21 ; 33
- 17d0: 09 f0 breq .+2 ; 0x17d4 <CDC_Device_ProcessControlRequest+0xb8>
- 17d2: 4e c0 rjmp .+156 ; 0x1870 <CDC_Device_ProcessControlRequest+0x154>
+ 183a: 80 91 cc 02 lds r24, 0x02CC
+ 183e: 81 32 cpi r24, 0x21 ; 33
+ 1840: 09 f0 breq .+2 ; 0x1844 <CDC_Device_ProcessControlRequest+0xb8>
+ 1842: 4e c0 rjmp .+156 ; 0x18e0 <CDC_Device_ProcessControlRequest+0x154>
* \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);
- 17d4: 80 91 e8 00 lds r24, 0x00E8
- 17d8: 87 7f andi r24, 0xF7 ; 247
- 17da: 80 93 e8 00 sts 0x00E8, r24
+ 1844: 80 91 e8 00 lds r24, 0x00E8
+ 1848: 87 7f andi r24, 0xF7 ; 247
+ 184a: 80 93 e8 00 sts 0x00E8, r24
{
Endpoint_ClearSETUP();
while (!(Endpoint_IsOUTReceived()))
- 17de: 04 c0 rjmp .+8 ; 0x17e8 <CDC_Device_ProcessControlRequest+0xcc>
+ 184e: 04 c0 rjmp .+8 ; 0x1858 <CDC_Device_ProcessControlRequest+0xcc>
{
if (USB_DeviceState == DEVICE_STATE_Unattached)
- 17e0: 8e b3 in r24, 0x1e ; 30
- 17e2: 88 23 and r24, r24
- 17e4: 09 f4 brne .+2 ; 0x17e8 <CDC_Device_ProcessControlRequest+0xcc>
- 17e6: 44 c0 rjmp .+136 ; 0x1870 <CDC_Device_ProcessControlRequest+0x154>
+ 1850: 8e b3 in r24, 0x1e ; 30
+ 1852: 88 23 and r24, r24
+ 1854: 09 f4 brne .+2 ; 0x1858 <CDC_Device_ProcessControlRequest+0xcc>
+ 1856: 44 c0 rjmp .+136 ; 0x18e0 <CDC_Device_ProcessControlRequest+0x154>
* \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);
- 17e8: 80 91 e8 00 lds r24, 0x00E8
+ 1858: 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()))
- 17ec: 82 ff sbrs r24, 2
- 17ee: f8 cf rjmp .-16 ; 0x17e0 <CDC_Device_ProcessControlRequest+0xc4>
+ 185c: 82 ff sbrs r24, 2
+ 185e: f8 cf rjmp .-16 ; 0x1850 <CDC_Device_ProcessControlRequest+0xc4>
{
uint32_t Value;
uint8_t Bytes[4];
} Data;
Data.Bytes[0] = UEDATX;
- 17f0: 30 91 f1 00 lds r19, 0x00F1
+ 1860: 30 91 f1 00 lds r19, 0x00F1
Data.Bytes[1] = UEDATX;
- 17f4: 20 91 f1 00 lds r18, 0x00F1
+ 1864: 20 91 f1 00 lds r18, 0x00F1
Data.Bytes[2] = UEDATX;
- 17f8: 90 91 f1 00 lds r25, 0x00F1
+ 1868: 90 91 f1 00 lds r25, 0x00F1
Data.Bytes[3] = UEDATX;
- 17fc: 80 91 f1 00 lds r24, 0x00F1
+ 186c: 80 91 f1 00 lds r24, 0x00F1
{
if (USB_DeviceState == DEVICE_STATE_Unattached)
return;
}
CDCInterfaceInfo->State.LineEncoding.BaudRateBPS = Endpoint_Read_32_LE();
- 1800: 3c 8b std Y+20, r19 ; 0x14
- 1802: 2d 8b std Y+21, r18 ; 0x15
- 1804: 9e 8b std Y+22, r25 ; 0x16
- 1806: 8f 8b std Y+23, r24 ; 0x17
+ 1870: 3c 8b std Y+20, r19 ; 0x14
+ 1872: 2d 8b std Y+21, r18 ; 0x15
+ 1874: 9e 8b std Y+22, r25 ; 0x16
+ 1876: 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;
- 1808: 80 91 f1 00 lds r24, 0x00F1
+ 1878: 80 91 f1 00 lds r24, 0x00F1
CDCInterfaceInfo->State.LineEncoding.CharFormat = Endpoint_Read_8();
- 180c: 88 8f std Y+24, r24 ; 0x18
- 180e: 80 91 f1 00 lds r24, 0x00F1
+ 187c: 88 8f std Y+24, r24 ; 0x18
+ 187e: 80 91 f1 00 lds r24, 0x00F1
CDCInterfaceInfo->State.LineEncoding.ParityType = Endpoint_Read_8();
- 1812: 89 8f std Y+25, r24 ; 0x19
- 1814: 80 91 f1 00 lds r24, 0x00F1
+ 1882: 89 8f std Y+25, r24 ; 0x19
+ 1884: 80 91 f1 00 lds r24, 0x00F1
CDCInterfaceInfo->State.LineEncoding.DataBits = Endpoint_Read_8();
- 1818: 8a 8f std Y+26, r24 ; 0x1a
+ 1888: 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));
- 181a: 80 91 e8 00 lds r24, 0x00E8
- 181e: 8b 77 andi r24, 0x7B ; 123
- 1820: 80 93 e8 00 sts 0x00E8, r24
+ 188a: 80 91 e8 00 lds r24, 0x00E8
+ 188e: 8b 77 andi r24, 0x7B ; 123
+ 1890: 80 93 e8 00 sts 0x00E8, r24
Endpoint_ClearOUT();
Endpoint_ClearStatusStage();
- 1824: 85 dc rcall .-1782 ; 0x1130 <Endpoint_ClearStatusStage>
+ 1894: 85 dc rcall .-1782 ; 0x11a0 <Endpoint_ClearStatusStage>
EVENT_CDC_Device_LineEncodingChanged(CDCInterfaceInfo);
- 1826: ce 01 movw r24, r28
- 1828: 0e 94 7c 03 call 0x6f8 ; 0x6f8 <EVENT_CDC_Device_LineEncodingChanged>
- 182c: 21 c0 rjmp .+66 ; 0x1870 <CDC_Device_ProcessControlRequest+0x154>
+ 1896: ce 01 movw r24, r28
+ 1898: 0e 94 7c 03 call 0x6f8 ; 0x6f8 <EVENT_CDC_Device_LineEncodingChanged>
+ 189c: 21 c0 rjmp .+66 ; 0x18e0 <CDC_Device_ProcessControlRequest+0x154>
}
break;
case CDC_REQ_SetControlLineState:
if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
- 182e: 80 91 e8 02 lds r24, 0x02E8
- 1832: 81 32 cpi r24, 0x21 ; 33
- 1834: e9 f4 brne .+58 ; 0x1870 <CDC_Device_ProcessControlRequest+0x154>
+ 189e: 80 91 cc 02 lds r24, 0x02CC
+ 18a2: 81 32 cpi r24, 0x21 ; 33
+ 18a4: e9 f4 brne .+58 ; 0x18e0 <CDC_Device_ProcessControlRequest+0x154>
* \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);
- 1836: 80 91 e8 00 lds r24, 0x00E8
- 183a: 87 7f andi r24, 0xF7 ; 247
- 183c: 80 93 e8 00 sts 0x00E8, r24
+ 18a6: 80 91 e8 00 lds r24, 0x00E8
+ 18aa: 87 7f andi r24, 0xF7 ; 247
+ 18ac: 80 93 e8 00 sts 0x00E8, r24
{
Endpoint_ClearSETUP();
Endpoint_ClearStatusStage();
- 1840: 77 dc rcall .-1810 ; 0x1130 <Endpoint_ClearStatusStage>
+ 18b0: 77 dc rcall .-1810 ; 0x11a0 <Endpoint_ClearStatusStage>
CDCInterfaceInfo->State.ControlLineStates.HostToDevice = USB_ControlRequest.wValue;
- 1842: 80 91 ea 02 lds r24, 0x02EA
- 1846: 90 91 eb 02 lds r25, 0x02EB
- 184a: 99 8b std Y+17, r25 ; 0x11
- 184c: 88 8b std Y+16, r24 ; 0x10
+ 18b2: 80 91 ce 02 lds r24, 0x02CE
+ 18b6: 90 91 cf 02 lds r25, 0x02CF
+ 18ba: 99 8b std Y+17, r25 ; 0x11
+ 18bc: 88 8b std Y+16, r24 ; 0x10
EVENT_CDC_Device_ControLineStateChanged(CDCInterfaceInfo);
- 184e: ce 01 movw r24, r28
- 1850: d4 d0 rcall .+424 ; 0x19fa <CDC_Device_Event_Stub>
- 1852: 0e c0 rjmp .+28 ; 0x1870 <CDC_Device_ProcessControlRequest+0x154>
+ 18be: ce 01 movw r24, r28
+ 18c0: d4 d0 rcall .+424 ; 0x1a6a <CDC_Device_Event_Stub>
+ 18c2: 0e c0 rjmp .+28 ; 0x18e0 <CDC_Device_ProcessControlRequest+0x154>
}
break;
case CDC_REQ_SendBreak:
if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
- 1854: 80 91 e8 02 lds r24, 0x02E8
- 1858: 81 32 cpi r24, 0x21 ; 33
- 185a: 51 f4 brne .+20 ; 0x1870 <CDC_Device_ProcessControlRequest+0x154>
- 185c: 80 91 e8 00 lds r24, 0x00E8
- 1860: 87 7f andi r24, 0xF7 ; 247
- 1862: 80 93 e8 00 sts 0x00E8, r24
+ 18c4: 80 91 cc 02 lds r24, 0x02CC
+ 18c8: 81 32 cpi r24, 0x21 ; 33
+ 18ca: 51 f4 brne .+20 ; 0x18e0 <CDC_Device_ProcessControlRequest+0x154>
+ 18cc: 80 91 e8 00 lds r24, 0x00E8
+ 18d0: 87 7f andi r24, 0xF7 ; 247
+ 18d2: 80 93 e8 00 sts 0x00E8, r24
{
Endpoint_ClearSETUP();
Endpoint_ClearStatusStage();
- 1866: 64 dc rcall .-1848 ; 0x1130 <Endpoint_ClearStatusStage>
+ 18d6: 64 dc rcall .-1848 ; 0x11a0 <Endpoint_ClearStatusStage>
EVENT_CDC_Device_BreakSent(CDCInterfaceInfo, (uint8_t)USB_ControlRequest.wValue);
- 1868: ce 01 movw r24, r28
- 186a: 60 91 ea 02 lds r22, 0x02EA
- 186e: c5 d0 rcall .+394 ; 0x19fa <CDC_Device_Event_Stub>
+ 18d8: ce 01 movw r24, r28
+ 18da: 60 91 ce 02 lds r22, 0x02CE
+ 18de: c5 d0 rcall .+394 ; 0x1a6a <CDC_Device_Event_Stub>
}
break;
}
}
- 1870: df 91 pop r29
- 1872: cf 91 pop r28
- 1874: 08 95 ret
+ 18e0: df 91 pop r29
+ 18e2: cf 91 pop r28
+ 18e4: 08 95 ret
-00001876 <CDC_Device_ConfigureEndpoints>:
+000018e6 <CDC_Device_ConfigureEndpoints>:
bool CDC_Device_ConfigureEndpoints(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
{
- 1876: cf 93 push r28
- 1878: df 93 push r29
- 187a: ec 01 movw r28, r24
+ 18e6: cf 93 push r28
+ 18e8: df 93 push r29
+ 18ea: ec 01 movw r28, r24
memset(&CDCInterfaceInfo->State, 0x00, sizeof(CDCInterfaceInfo->State));
- 187c: 40 96 adiw r24, 0x10 ; 16
- 187e: fc 01 movw r30, r24
- 1880: 8b e0 ldi r24, 0x0B ; 11
- 1882: df 01 movw r26, r30
- 1884: 1d 92 st X+, r1
- 1886: 8a 95 dec r24
- 1888: e9 f7 brne .-6 ; 0x1884 <CDC_Device_ConfigureEndpoints+0xe>
+ 18ec: 40 96 adiw r24, 0x10 ; 16
+ 18ee: fc 01 movw r30, r24
+ 18f0: 8b e0 ldi r24, 0x0B ; 11
+ 18f2: df 01 movw r26, r30
+ 18f4: 1d 92 st X+, r1
+ 18f6: 8a 95 dec r24
+ 18f8: e9 f7 brne .-6 ; 0x18f4 <CDC_Device_ConfigureEndpoints+0xe>
CDCInterfaceInfo->Config.DataINEndpoint.Type = EP_TYPE_BULK;
- 188a: 82 e0 ldi r24, 0x02 ; 2
- 188c: 8c 83 std Y+4, r24 ; 0x04
+ 18fa: 82 e0 ldi r24, 0x02 ; 2
+ 18fc: 8c 83 std Y+4, r24 ; 0x04
CDCInterfaceInfo->Config.DataOUTEndpoint.Type = EP_TYPE_BULK;
- 188e: 89 87 std Y+9, r24 ; 0x09
+ 18fe: 89 87 std Y+9, r24 ; 0x09
CDCInterfaceInfo->Config.NotificationEndpoint.Type = EP_TYPE_INTERRUPT;
- 1890: 83 e0 ldi r24, 0x03 ; 3
- 1892: 8e 87 std Y+14, r24 ; 0x0e
+ 1900: 83 e0 ldi r24, 0x03 ; 3
+ 1902: 8e 87 std Y+14, r24 ; 0x0e
if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataINEndpoint, 1)))
- 1894: ce 01 movw r24, r28
- 1896: 01 96 adiw r24, 0x01 ; 1
- 1898: 61 e0 ldi r22, 0x01 ; 1
- 189a: 06 dc rcall .-2036 ; 0x10a8 <Endpoint_ConfigureEndpointTable>
- 189c: 88 23 and r24, r24
- 189e: 59 f0 breq .+22 ; 0x18b6 <CDC_Device_ConfigureEndpoints+0x40>
+ 1904: ce 01 movw r24, r28
+ 1906: 01 96 adiw r24, 0x01 ; 1
+ 1908: 61 e0 ldi r22, 0x01 ; 1
+ 190a: 06 dc rcall .-2036 ; 0x1118 <Endpoint_ConfigureEndpointTable>
+ 190c: 88 23 and r24, r24
+ 190e: 59 f0 breq .+22 ; 0x1926 <CDC_Device_ConfigureEndpoints+0x40>
return false;
if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataOUTEndpoint, 1)))
- 18a0: ce 01 movw r24, r28
- 18a2: 06 96 adiw r24, 0x06 ; 6
- 18a4: 61 e0 ldi r22, 0x01 ; 1
- 18a6: 00 dc rcall .-2048 ; 0x10a8 <Endpoint_ConfigureEndpointTable>
- 18a8: 88 23 and r24, r24
- 18aa: 29 f0 breq .+10 ; 0x18b6 <CDC_Device_ConfigureEndpoints+0x40>
+ 1910: ce 01 movw r24, r28
+ 1912: 06 96 adiw r24, 0x06 ; 6
+ 1914: 61 e0 ldi r22, 0x01 ; 1
+ 1916: 00 dc rcall .-2048 ; 0x1118 <Endpoint_ConfigureEndpointTable>
+ 1918: 88 23 and r24, r24
+ 191a: 29 f0 breq .+10 ; 0x1926 <CDC_Device_ConfigureEndpoints+0x40>
return false;
if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.NotificationEndpoint, 1)))
- 18ac: ce 01 movw r24, r28
- 18ae: 0b 96 adiw r24, 0x0b ; 11
- 18b0: 61 e0 ldi r22, 0x01 ; 1
- 18b2: fa db rcall .-2060 ; 0x10a8 <Endpoint_ConfigureEndpointTable>
- 18b4: 01 c0 rjmp .+2 ; 0x18b8 <CDC_Device_ConfigureEndpoints+0x42>
+ 191c: ce 01 movw r24, r28
+ 191e: 0b 96 adiw r24, 0x0b ; 11
+ 1920: 61 e0 ldi r22, 0x01 ; 1
+ 1922: fa db rcall .-2060 ; 0x1118 <Endpoint_ConfigureEndpointTable>
+ 1924: 01 c0 rjmp .+2 ; 0x1928 <CDC_Device_ConfigureEndpoints+0x42>
if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataINEndpoint, 1)))
return false;
if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataOUTEndpoint, 1)))
return false;
- 18b6: 80 e0 ldi r24, 0x00 ; 0
+ 1926: 80 e0 ldi r24, 0x00 ; 0
if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.NotificationEndpoint, 1)))
return false;
return true;
}
- 18b8: df 91 pop r29
- 18ba: cf 91 pop r28
- 18bc: 08 95 ret
+ 1928: df 91 pop r29
+ 192a: cf 91 pop r28
+ 192c: 08 95 ret
-000018be <CDC_Device_SendByte>:
+0000192e <CDC_Device_SendByte>:
return Endpoint_Write_Stream_LE(Buffer, Length, NULL);
}
uint8_t CDC_Device_SendByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo,
const uint8_t Data)
{
- 18be: df 93 push r29
- 18c0: cf 93 push r28
- 18c2: 0f 92 push r0
- 18c4: cd b7 in r28, 0x3d ; 61
- 18c6: de b7 in r29, 0x3e ; 62
- 18c8: fc 01 movw r30, r24
+ 192e: df 93 push r29
+ 1930: cf 93 push r28
+ 1932: 0f 92 push r0
+ 1934: cd b7 in r28, 0x3d ; 61
+ 1936: de b7 in r29, 0x3e ; 62
+ 1938: fc 01 movw r30, r24
if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS))
- 18ca: 8e b3 in r24, 0x1e ; 30
- 18cc: 84 30 cpi r24, 0x04 ; 4
- 18ce: f9 f4 brne .+62 ; 0x190e <CDC_Device_SendByte+0x50>
- 18d0: 24 89 ldd r18, Z+20 ; 0x14
- 18d2: 35 89 ldd r19, Z+21 ; 0x15
- 18d4: 46 89 ldd r20, Z+22 ; 0x16
- 18d6: 57 89 ldd r21, Z+23 ; 0x17
- 18d8: 21 15 cp r18, r1
- 18da: 31 05 cpc r19, r1
- 18dc: 41 05 cpc r20, r1
- 18de: 51 05 cpc r21, r1
- 18e0: b1 f0 breq .+44 ; 0x190e <CDC_Device_SendByte+0x50>
+ 193a: 8e b3 in r24, 0x1e ; 30
+ 193c: 84 30 cpi r24, 0x04 ; 4
+ 193e: f9 f4 brne .+62 ; 0x197e <CDC_Device_SendByte+0x50>
+ 1940: 24 89 ldd r18, Z+20 ; 0x14
+ 1942: 35 89 ldd r19, Z+21 ; 0x15
+ 1944: 46 89 ldd r20, Z+22 ; 0x16
+ 1946: 57 89 ldd r21, Z+23 ; 0x17
+ 1948: 21 15 cp r18, r1
+ 194a: 31 05 cpc r19, r1
+ 194c: 41 05 cpc r20, r1
+ 194e: 51 05 cpc r21, r1
+ 1950: b1 f0 breq .+44 ; 0x197e <CDC_Device_SendByte+0x50>
*/
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);
- 18e2: 81 81 ldd r24, Z+1 ; 0x01
- 18e4: 8f 70 andi r24, 0x0F ; 15
- 18e6: 80 93 e9 00 sts 0x00E9, r24
+ 1952: 81 81 ldd r24, Z+1 ; 0x01
+ 1954: 8f 70 andi r24, 0x0F ; 15
+ 1956: 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);
- 18ea: 80 91 e8 00 lds r24, 0x00E8
+ 195a: 80 91 e8 00 lds r24, 0x00E8
return ENDPOINT_RWSTREAM_DeviceDisconnected;
Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address);
if (!(Endpoint_IsReadWriteAllowed()))
- 18ee: 85 fd sbrc r24, 5
- 18f0: 0a c0 rjmp .+20 ; 0x1906 <CDC_Device_SendByte+0x48>
+ 195e: 85 fd sbrc r24, 5
+ 1960: 0a c0 rjmp .+20 ; 0x1976 <CDC_Device_SendByte+0x48>
*/
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));
- 18f2: 80 91 e8 00 lds r24, 0x00E8
- 18f6: 8e 77 andi r24, 0x7E ; 126
- 18f8: 80 93 e8 00 sts 0x00E8, r24
+ 1962: 80 91 e8 00 lds r24, 0x00E8
+ 1966: 8e 77 andi r24, 0x7E ; 126
+ 1968: 80 93 e8 00 sts 0x00E8, r24
{
Endpoint_ClearIN();
uint8_t ErrorCode;
if ((ErrorCode = Endpoint_WaitUntilReady()) != ENDPOINT_READYWAIT_NoError)
- 18fc: 69 83 std Y+1, r22 ; 0x01
- 18fe: 37 dc rcall .-1938 ; 0x116e <Endpoint_WaitUntilReady>
- 1900: 69 81 ldd r22, Y+1 ; 0x01
- 1902: 88 23 and r24, r24
- 1904: 29 f4 brne .+10 ; 0x1910 <CDC_Device_SendByte+0x52>
+ 196c: 69 83 std Y+1, r22 ; 0x01
+ 196e: 37 dc rcall .-1938 ; 0x11de <Endpoint_WaitUntilReady>
+ 1970: 69 81 ldd r22, Y+1 ; 0x01
+ 1972: 88 23 and r24, r24
+ 1974: 29 f4 brne .+10 ; 0x1980 <CDC_Device_SendByte+0x52>
* \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;
- 1906: 60 93 f1 00 sts 0x00F1, r22
+ 1976: 60 93 f1 00 sts 0x00F1, r22
return ErrorCode;
}
Endpoint_Write_8(Data);
return ENDPOINT_READYWAIT_NoError;
- 190a: 80 e0 ldi r24, 0x00 ; 0
- 190c: 01 c0 rjmp .+2 ; 0x1910 <CDC_Device_SendByte+0x52>
+ 197a: 80 e0 ldi r24, 0x00 ; 0
+ 197c: 01 c0 rjmp .+2 ; 0x1980 <CDC_Device_SendByte+0x52>
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;
- 190e: 82 e0 ldi r24, 0x02 ; 2
+ 197e: 82 e0 ldi r24, 0x02 ; 2
return ErrorCode;
}
Endpoint_Write_8(Data);
return ENDPOINT_READYWAIT_NoError;
}
- 1910: 0f 90 pop r0
- 1912: cf 91 pop r28
- 1914: df 91 pop r29
- 1916: 08 95 ret
+ 1980: 0f 90 pop r0
+ 1982: cf 91 pop r28
+ 1984: df 91 pop r29
+ 1986: 08 95 ret
-00001918 <CDC_Device_Flush>:
+00001988 <CDC_Device_Flush>:
uint8_t CDC_Device_Flush(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
{
- 1918: fc 01 movw r30, r24
+ 1988: fc 01 movw r30, r24
if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS))
- 191a: 8e b3 in r24, 0x1e ; 30
- 191c: 84 30 cpi r24, 0x04 ; 4
- 191e: 19 f5 brne .+70 ; 0x1966 <CDC_Device_Flush+0x4e>
- 1920: 24 89 ldd r18, Z+20 ; 0x14
- 1922: 35 89 ldd r19, Z+21 ; 0x15
- 1924: 46 89 ldd r20, Z+22 ; 0x16
- 1926: 57 89 ldd r21, Z+23 ; 0x17
- 1928: 21 15 cp r18, r1
- 192a: 31 05 cpc r19, r1
- 192c: 41 05 cpc r20, r1
- 192e: 51 05 cpc r21, r1
- 1930: d1 f0 breq .+52 ; 0x1966 <CDC_Device_Flush+0x4e>
+ 198a: 8e b3 in r24, 0x1e ; 30
+ 198c: 84 30 cpi r24, 0x04 ; 4
+ 198e: 19 f5 brne .+70 ; 0x19d6 <CDC_Device_Flush+0x4e>
+ 1990: 24 89 ldd r18, Z+20 ; 0x14
+ 1992: 35 89 ldd r19, Z+21 ; 0x15
+ 1994: 46 89 ldd r20, Z+22 ; 0x16
+ 1996: 57 89 ldd r21, Z+23 ; 0x17
+ 1998: 21 15 cp r18, r1
+ 199a: 31 05 cpc r19, r1
+ 199c: 41 05 cpc r20, r1
+ 199e: 51 05 cpc r21, r1
+ 19a0: d1 f0 breq .+52 ; 0x19d6 <CDC_Device_Flush+0x4e>
*/
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);
- 1932: 81 81 ldd r24, Z+1 ; 0x01
- 1934: 8f 70 andi r24, 0x0F ; 15
- 1936: 80 93 e9 00 sts 0x00E9, r24
+ 19a2: 81 81 ldd r24, Z+1 ; 0x01
+ 19a4: 8f 70 andi r24, 0x0F ; 15
+ 19a6: 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;
- 193a: 80 91 f2 00 lds r24, 0x00F2
+ 19aa: 80 91 f2 00 lds r24, 0x00F2
uint8_t ErrorCode;
Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address);
if (!(Endpoint_BytesInEndpoint()))
- 193e: 88 23 and r24, r24
- 1940: a1 f0 breq .+40 ; 0x196a <CDC_Device_Flush+0x52>
+ 19ae: 88 23 and r24, r24
+ 19b0: a1 f0 breq .+40 ; 0x19da <CDC_Device_Flush+0x52>
* 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);
- 1942: 90 91 e8 00 lds r25, 0x00E8
+ 19b2: 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));
- 1946: 80 91 e8 00 lds r24, 0x00E8
- 194a: 8e 77 andi r24, 0x7E ; 126
- 194c: 80 93 e8 00 sts 0x00E8, r24
+ 19b6: 80 91 e8 00 lds r24, 0x00E8
+ 19ba: 8e 77 andi r24, 0x7E ; 126
+ 19bc: 80 93 e8 00 sts 0x00E8, r24
bool BankFull = !(Endpoint_IsReadWriteAllowed());
Endpoint_ClearIN();
if (BankFull)
- 1950: 95 fd sbrc r25, 5
- 1952: 0d c0 rjmp .+26 ; 0x196e <CDC_Device_Flush+0x56>
+ 19c0: 95 fd sbrc r25, 5
+ 19c2: 0d c0 rjmp .+26 ; 0x19de <CDC_Device_Flush+0x56>
{
if ((ErrorCode = Endpoint_WaitUntilReady()) != ENDPOINT_READYWAIT_NoError)
- 1954: 0c dc rcall .-2024 ; 0x116e <Endpoint_WaitUntilReady>
- 1956: 88 23 and r24, r24
- 1958: 59 f4 brne .+22 ; 0x1970 <CDC_Device_Flush+0x58>
- 195a: 90 91 e8 00 lds r25, 0x00E8
- 195e: 9e 77 andi r25, 0x7E ; 126
- 1960: 90 93 e8 00 sts 0x00E8, r25
- 1964: 08 95 ret
+ 19c4: 0c dc rcall .-2024 ; 0x11de <Endpoint_WaitUntilReady>
+ 19c6: 88 23 and r24, r24
+ 19c8: 59 f4 brne .+22 ; 0x19e0 <CDC_Device_Flush+0x58>
+ 19ca: 90 91 e8 00 lds r25, 0x00E8
+ 19ce: 9e 77 andi r25, 0x7E ; 126
+ 19d0: 90 93 e8 00 sts 0x00E8, r25
+ 19d4: 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;
- 1966: 82 e0 ldi r24, 0x02 ; 2
- 1968: 08 95 ret
+ 19d6: 82 e0 ldi r24, 0x02 ; 2
+ 19d8: 08 95 ret
uint8_t ErrorCode;
Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address);
if (!(Endpoint_BytesInEndpoint()))
return ENDPOINT_READYWAIT_NoError;
- 196a: 80 e0 ldi r24, 0x00 ; 0
- 196c: 08 95 ret
+ 19da: 80 e0 ldi r24, 0x00 ; 0
+ 19dc: 08 95 ret
return ErrorCode;
Endpoint_ClearIN();
}
return ENDPOINT_READYWAIT_NoError;
- 196e: 80 e0 ldi r24, 0x00 ; 0
+ 19de: 80 e0 ldi r24, 0x00 ; 0
}
- 1970: 08 95 ret
+ 19e0: 08 95 ret
-00001972 <CDC_Device_USBTask>:
+000019e2 <CDC_Device_USBTask>:
return true;
}
void CDC_Device_USBTask(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
{
if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS))
- 1972: 2e b3 in r18, 0x1e ; 30
- 1974: 24 30 cpi r18, 0x04 ; 4
- 1976: 99 f4 brne .+38 ; 0x199e <CDC_Device_USBTask+0x2c>
- 1978: fc 01 movw r30, r24
- 197a: 24 89 ldd r18, Z+20 ; 0x14
- 197c: 35 89 ldd r19, Z+21 ; 0x15
- 197e: 46 89 ldd r20, Z+22 ; 0x16
- 1980: 57 89 ldd r21, Z+23 ; 0x17
- 1982: 21 15 cp r18, r1
- 1984: 31 05 cpc r19, r1
- 1986: 41 05 cpc r20, r1
- 1988: 51 05 cpc r21, r1
- 198a: 49 f0 breq .+18 ; 0x199e <CDC_Device_USBTask+0x2c>
+ 19e2: 2e b3 in r18, 0x1e ; 30
+ 19e4: 24 30 cpi r18, 0x04 ; 4
+ 19e6: 99 f4 brne .+38 ; 0x1a0e <CDC_Device_USBTask+0x2c>
+ 19e8: fc 01 movw r30, r24
+ 19ea: 24 89 ldd r18, Z+20 ; 0x14
+ 19ec: 35 89 ldd r19, Z+21 ; 0x15
+ 19ee: 46 89 ldd r20, Z+22 ; 0x16
+ 19f0: 57 89 ldd r21, Z+23 ; 0x17
+ 19f2: 21 15 cp r18, r1
+ 19f4: 31 05 cpc r19, r1
+ 19f6: 41 05 cpc r20, r1
+ 19f8: 51 05 cpc r21, r1
+ 19fa: 49 f0 breq .+18 ; 0x1a0e <CDC_Device_USBTask+0x2c>
*/
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);
- 198c: 21 81 ldd r18, Z+1 ; 0x01
- 198e: 2f 70 andi r18, 0x0F ; 15
- 1990: 20 93 e9 00 sts 0x00E9, r18
+ 19fc: 21 81 ldd r18, Z+1 ; 0x01
+ 19fe: 2f 70 andi r18, 0x0F ; 15
+ 1a00: 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);
- 1994: 20 91 e8 00 lds r18, 0x00E8
+ 1a04: 20 91 e8 00 lds r18, 0x00E8
return;
#if !defined(NO_CLASS_DRIVER_AUTOFLUSH)
Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address);
if (Endpoint_IsINReady())
- 1998: 20 ff sbrs r18, 0
- 199a: 01 c0 rjmp .+2 ; 0x199e <CDC_Device_USBTask+0x2c>
+ 1a08: 20 ff sbrs r18, 0
+ 1a0a: 01 c0 rjmp .+2 ; 0x1a0e <CDC_Device_USBTask+0x2c>
CDC_Device_Flush(CDCInterfaceInfo);
- 199c: bd cf rjmp .-134 ; 0x1918 <CDC_Device_Flush>
- 199e: 08 95 ret
+ 1a0c: bd cf rjmp .-134 ; 0x1988 <CDC_Device_Flush>
+ 1a0e: 08 95 ret
-000019a0 <CDC_Device_ReceiveByte>:
+00001a10 <CDC_Device_ReceiveByte>:
return 0;
}
}
int16_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
{
- 19a0: fc 01 movw r30, r24
+ 1a10: fc 01 movw r30, r24
if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS))
- 19a2: 8e b3 in r24, 0x1e ; 30
- 19a4: 84 30 cpi r24, 0x04 ; 4
- 19a6: 29 f5 brne .+74 ; 0x19f2 <CDC_Device_ReceiveByte+0x52>
- 19a8: 24 89 ldd r18, Z+20 ; 0x14
- 19aa: 35 89 ldd r19, Z+21 ; 0x15
- 19ac: 46 89 ldd r20, Z+22 ; 0x16
- 19ae: 57 89 ldd r21, Z+23 ; 0x17
- 19b0: 21 15 cp r18, r1
- 19b2: 31 05 cpc r19, r1
- 19b4: 41 05 cpc r20, r1
- 19b6: 51 05 cpc r21, r1
- 19b8: e1 f0 breq .+56 ; 0x19f2 <CDC_Device_ReceiveByte+0x52>
+ 1a12: 8e b3 in r24, 0x1e ; 30
+ 1a14: 84 30 cpi r24, 0x04 ; 4
+ 1a16: 29 f5 brne .+74 ; 0x1a62 <CDC_Device_ReceiveByte+0x52>
+ 1a18: 24 89 ldd r18, Z+20 ; 0x14
+ 1a1a: 35 89 ldd r19, Z+21 ; 0x15
+ 1a1c: 46 89 ldd r20, Z+22 ; 0x16
+ 1a1e: 57 89 ldd r21, Z+23 ; 0x17
+ 1a20: 21 15 cp r18, r1
+ 1a22: 31 05 cpc r19, r1
+ 1a24: 41 05 cpc r20, r1
+ 1a26: 51 05 cpc r21, r1
+ 1a28: e1 f0 breq .+56 ; 0x1a62 <CDC_Device_ReceiveByte+0x52>
*/
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);
- 19ba: 86 81 ldd r24, Z+6 ; 0x06
- 19bc: 8f 70 andi r24, 0x0F ; 15
- 19be: 80 93 e9 00 sts 0x00E9, r24
+ 1a2a: 86 81 ldd r24, Z+6 ; 0x06
+ 1a2c: 8f 70 andi r24, 0x0F ; 15
+ 1a2e: 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);
- 19c2: 80 91 e8 00 lds r24, 0x00E8
+ 1a32: 80 91 e8 00 lds r24, 0x00E8
int16_t ReceivedByte = -1;
Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataOUTEndpoint.Address);
if (Endpoint_IsOUTReceived())
- 19c6: 82 ff sbrs r24, 2
- 19c8: 14 c0 rjmp .+40 ; 0x19f2 <CDC_Device_ReceiveByte+0x52>
+ 1a36: 82 ff sbrs r24, 2
+ 1a38: 14 c0 rjmp .+40 ; 0x1a62 <CDC_Device_ReceiveByte+0x52>
#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;
- 19ca: 80 91 f2 00 lds r24, 0x00F2
+ 1a3a: 80 91 f2 00 lds r24, 0x00F2
{
if (Endpoint_BytesInEndpoint())
- 19ce: 88 23 and r24, r24
- 19d0: 21 f0 breq .+8 ; 0x19da <CDC_Device_ReceiveByte+0x3a>
+ 1a3e: 88 23 and r24, r24
+ 1a40: 21 f0 breq .+8 ; 0x1a4a <CDC_Device_ReceiveByte+0x3a>
* \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;
- 19d2: 20 91 f1 00 lds r18, 0x00F1
+ 1a42: 20 91 f1 00 lds r18, 0x00F1
ReceivedByte = Endpoint_Read_8();
- 19d6: 30 e0 ldi r19, 0x00 ; 0
- 19d8: 02 c0 rjmp .+4 ; 0x19de <CDC_Device_ReceiveByte+0x3e>
+ 1a46: 30 e0 ldi r19, 0x00 ; 0
+ 1a48: 02 c0 rjmp .+4 ; 0x1a4e <CDC_Device_ReceiveByte+0x3e>
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;
- 19da: 2f ef ldi r18, 0xFF ; 255
- 19dc: 3f ef ldi r19, 0xFF ; 255
+ 1a4a: 2f ef ldi r18, 0xFF ; 255
+ 1a4c: 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;
- 19de: 80 91 f2 00 lds r24, 0x00F2
+ 1a4e: 80 91 f2 00 lds r24, 0x00F2
if (Endpoint_IsOUTReceived())
{
if (Endpoint_BytesInEndpoint())
ReceivedByte = Endpoint_Read_8();
if (!(Endpoint_BytesInEndpoint()))
- 19e2: 88 23 and r24, r24
- 19e4: 41 f4 brne .+16 ; 0x19f6 <CDC_Device_ReceiveByte+0x56>
+ 1a52: 88 23 and r24, r24
+ 1a54: 41 f4 brne .+16 ; 0x1a66 <CDC_Device_ReceiveByte+0x56>
*/
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));
- 19e6: 80 91 e8 00 lds r24, 0x00E8
- 19ea: 8b 77 andi r24, 0x7B ; 123
- 19ec: 80 93 e8 00 sts 0x00E8, r24
- 19f0: 02 c0 rjmp .+4 ; 0x19f6 <CDC_Device_ReceiveByte+0x56>
+ 1a56: 80 91 e8 00 lds r24, 0x00E8
+ 1a5a: 8b 77 andi r24, 0x7B ; 123
+ 1a5c: 80 93 e8 00 sts 0x00E8, r24
+ 1a60: 02 c0 rjmp .+4 ; 0x1a66 <CDC_Device_ReceiveByte+0x56>
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;
- 19f2: 2f ef ldi r18, 0xFF ; 255
- 19f4: 3f ef ldi r19, 0xFF ; 255
+ 1a62: 2f ef ldi r18, 0xFF ; 255
+ 1a64: 3f ef ldi r19, 0xFF ; 255
if (!(Endpoint_BytesInEndpoint()))
Endpoint_ClearOUT();
}
return ReceivedByte;
}
- 19f6: c9 01 movw r24, r18
- 19f8: 08 95 ret
+ 1a66: c9 01 movw r24, r18
+ 1a68: 08 95 ret
-000019fa <CDC_Device_Event_Stub>:
+00001a6a <CDC_Device_Event_Stub>:
#endif
void CDC_Device_Event_Stub(void)
{
}
- 19fa: 08 95 ret
-
-000019fc <__subsf3>:
- 19fc: 50 58 subi r21, 0x80 ; 128
-
-000019fe <__addsf3>:
- 19fe: bb 27 eor r27, r27
- 1a00: aa 27 eor r26, r26
- 1a02: 0e d0 rcall .+28 ; 0x1a20 <__addsf3x>
- 1a04: 70 c1 rjmp .+736 ; 0x1ce6 <__fp_round>
- 1a06: 61 d1 rcall .+706 ; 0x1cca <__fp_pscA>
- 1a08: 30 f0 brcs .+12 ; 0x1a16 <__addsf3+0x18>
- 1a0a: 66 d1 rcall .+716 ; 0x1cd8 <__fp_pscB>
- 1a0c: 20 f0 brcs .+8 ; 0x1a16 <__addsf3+0x18>
- 1a0e: 31 f4 brne .+12 ; 0x1a1c <__addsf3+0x1e>
- 1a10: 9f 3f cpi r25, 0xFF ; 255
- 1a12: 11 f4 brne .+4 ; 0x1a18 <__addsf3+0x1a>
- 1a14: 1e f4 brtc .+6 ; 0x1a1c <__addsf3+0x1e>
- 1a16: 56 c1 rjmp .+684 ; 0x1cc4 <__fp_nan>
- 1a18: 0e f4 brtc .+2 ; 0x1a1c <__addsf3+0x1e>
- 1a1a: e0 95 com r30
- 1a1c: e7 fb bst r30, 7
- 1a1e: 4c c1 rjmp .+664 ; 0x1cb8 <__fp_inf>
-
-00001a20 <__addsf3x>:
- 1a20: e9 2f mov r30, r25
- 1a22: 72 d1 rcall .+740 ; 0x1d08 <__fp_split3>
- 1a24: 80 f3 brcs .-32 ; 0x1a06 <__addsf3+0x8>
- 1a26: ba 17 cp r27, r26
- 1a28: 62 07 cpc r22, r18
- 1a2a: 73 07 cpc r23, r19
- 1a2c: 84 07 cpc r24, r20
- 1a2e: 95 07 cpc r25, r21
- 1a30: 18 f0 brcs .+6 ; 0x1a38 <__addsf3x+0x18>
- 1a32: 71 f4 brne .+28 ; 0x1a50 <__addsf3x+0x30>
- 1a34: 9e f5 brtc .+102 ; 0x1a9c <__addsf3x+0x7c>
- 1a36: 8a c1 rjmp .+788 ; 0x1d4c <__fp_zero>
- 1a38: 0e f4 brtc .+2 ; 0x1a3c <__addsf3x+0x1c>
- 1a3a: e0 95 com r30
- 1a3c: 0b 2e mov r0, r27
- 1a3e: ba 2f mov r27, r26
- 1a40: a0 2d mov r26, r0
- 1a42: 0b 01 movw r0, r22
- 1a44: b9 01 movw r22, r18
- 1a46: 90 01 movw r18, r0
- 1a48: 0c 01 movw r0, r24
- 1a4a: ca 01 movw r24, r20
- 1a4c: a0 01 movw r20, r0
- 1a4e: 11 24 eor r1, r1
- 1a50: ff 27 eor r31, r31
- 1a52: 59 1b sub r21, r25
- 1a54: 99 f0 breq .+38 ; 0x1a7c <__addsf3x+0x5c>
- 1a56: 59 3f cpi r21, 0xF9 ; 249
- 1a58: 50 f4 brcc .+20 ; 0x1a6e <__addsf3x+0x4e>
- 1a5a: 50 3e cpi r21, 0xE0 ; 224
- 1a5c: 68 f1 brcs .+90 ; 0x1ab8 <__addsf3x+0x98>
- 1a5e: 1a 16 cp r1, r26
- 1a60: f0 40 sbci r31, 0x00 ; 0
- 1a62: a2 2f mov r26, r18
- 1a64: 23 2f mov r18, r19
- 1a66: 34 2f mov r19, r20
- 1a68: 44 27 eor r20, r20
- 1a6a: 58 5f subi r21, 0xF8 ; 248
- 1a6c: f3 cf rjmp .-26 ; 0x1a54 <__addsf3x+0x34>
- 1a6e: 46 95 lsr r20
- 1a70: 37 95 ror r19
- 1a72: 27 95 ror r18
- 1a74: a7 95 ror r26
- 1a76: f0 40 sbci r31, 0x00 ; 0
- 1a78: 53 95 inc r21
- 1a7a: c9 f7 brne .-14 ; 0x1a6e <__addsf3x+0x4e>
- 1a7c: 7e f4 brtc .+30 ; 0x1a9c <__addsf3x+0x7c>
- 1a7e: 1f 16 cp r1, r31
- 1a80: ba 0b sbc r27, r26
- 1a82: 62 0b sbc r22, r18
- 1a84: 73 0b sbc r23, r19
- 1a86: 84 0b sbc r24, r20
- 1a88: ba f0 brmi .+46 ; 0x1ab8 <__addsf3x+0x98>
- 1a8a: 91 50 subi r25, 0x01 ; 1
- 1a8c: a1 f0 breq .+40 ; 0x1ab6 <__addsf3x+0x96>
- 1a8e: ff 0f add r31, r31
- 1a90: bb 1f adc r27, r27
- 1a92: 66 1f adc r22, r22
- 1a94: 77 1f adc r23, r23
- 1a96: 88 1f adc r24, r24
- 1a98: c2 f7 brpl .-16 ; 0x1a8a <__addsf3x+0x6a>
- 1a9a: 0e c0 rjmp .+28 ; 0x1ab8 <__addsf3x+0x98>
- 1a9c: ba 0f add r27, r26
- 1a9e: 62 1f adc r22, r18
- 1aa0: 73 1f adc r23, r19
- 1aa2: 84 1f adc r24, r20
- 1aa4: 48 f4 brcc .+18 ; 0x1ab8 <__addsf3x+0x98>
- 1aa6: 87 95 ror r24
- 1aa8: 77 95 ror r23
- 1aaa: 67 95 ror r22
- 1aac: b7 95 ror r27
- 1aae: f7 95 ror r31
- 1ab0: 9e 3f cpi r25, 0xFE ; 254
- 1ab2: 08 f0 brcs .+2 ; 0x1ab6 <__addsf3x+0x96>
- 1ab4: b3 cf rjmp .-154 ; 0x1a1c <__addsf3+0x1e>
- 1ab6: 93 95 inc r25
- 1ab8: 88 0f add r24, r24
- 1aba: 08 f0 brcs .+2 ; 0x1abe <__addsf3x+0x9e>
- 1abc: 99 27 eor r25, r25
- 1abe: ee 0f add r30, r30
- 1ac0: 97 95 ror r25
- 1ac2: 87 95 ror r24
- 1ac4: 08 95 ret
-
-00001ac6 <__cmpsf2>:
- 1ac6: d4 d0 rcall .+424 ; 0x1c70 <__fp_cmp>
- 1ac8: 08 f4 brcc .+2 ; 0x1acc <__cmpsf2+0x6>
- 1aca: 81 e0 ldi r24, 0x01 ; 1
- 1acc: 08 95 ret
-
-00001ace <__divsf3>:
- 1ace: 0c d0 rcall .+24 ; 0x1ae8 <__divsf3x>
- 1ad0: 0a c1 rjmp .+532 ; 0x1ce6 <__fp_round>
- 1ad2: 02 d1 rcall .+516 ; 0x1cd8 <__fp_pscB>
- 1ad4: 40 f0 brcs .+16 ; 0x1ae6 <__divsf3+0x18>
- 1ad6: f9 d0 rcall .+498 ; 0x1cca <__fp_pscA>
- 1ad8: 30 f0 brcs .+12 ; 0x1ae6 <__divsf3+0x18>
- 1ada: 21 f4 brne .+8 ; 0x1ae4 <__divsf3+0x16>
- 1adc: 5f 3f cpi r21, 0xFF ; 255
- 1ade: 19 f0 breq .+6 ; 0x1ae6 <__divsf3+0x18>
- 1ae0: eb c0 rjmp .+470 ; 0x1cb8 <__fp_inf>
- 1ae2: 51 11 cpse r21, r1
- 1ae4: 34 c1 rjmp .+616 ; 0x1d4e <__fp_szero>
- 1ae6: ee c0 rjmp .+476 ; 0x1cc4 <__fp_nan>
-
-00001ae8 <__divsf3x>:
- 1ae8: 0f d1 rcall .+542 ; 0x1d08 <__fp_split3>
- 1aea: 98 f3 brcs .-26 ; 0x1ad2 <__divsf3+0x4>
-
-00001aec <__divsf3_pse>:
- 1aec: 99 23 and r25, r25
- 1aee: c9 f3 breq .-14 ; 0x1ae2 <__divsf3+0x14>
- 1af0: 55 23 and r21, r21
- 1af2: b1 f3 breq .-20 ; 0x1ae0 <__divsf3+0x12>
- 1af4: 95 1b sub r25, r21
- 1af6: 55 0b sbc r21, r21
- 1af8: bb 27 eor r27, r27
- 1afa: aa 27 eor r26, r26
- 1afc: 62 17 cp r22, r18
- 1afe: 73 07 cpc r23, r19
- 1b00: 84 07 cpc r24, r20
- 1b02: 38 f0 brcs .+14 ; 0x1b12 <__divsf3_pse+0x26>
- 1b04: 9f 5f subi r25, 0xFF ; 255
- 1b06: 5f 4f sbci r21, 0xFF ; 255
- 1b08: 22 0f add r18, r18
- 1b0a: 33 1f adc r19, r19
- 1b0c: 44 1f adc r20, r20
- 1b0e: aa 1f adc r26, r26
- 1b10: a9 f3 breq .-22 ; 0x1afc <__divsf3_pse+0x10>
- 1b12: 33 d0 rcall .+102 ; 0x1b7a <__divsf3_pse+0x8e>
- 1b14: 0e 2e mov r0, r30
- 1b16: 3a f0 brmi .+14 ; 0x1b26 <__divsf3_pse+0x3a>
- 1b18: e0 e8 ldi r30, 0x80 ; 128
- 1b1a: 30 d0 rcall .+96 ; 0x1b7c <__divsf3_pse+0x90>
- 1b1c: 91 50 subi r25, 0x01 ; 1
- 1b1e: 50 40 sbci r21, 0x00 ; 0
- 1b20: e6 95 lsr r30
- 1b22: 00 1c adc r0, r0
- 1b24: ca f7 brpl .-14 ; 0x1b18 <__divsf3_pse+0x2c>
- 1b26: 29 d0 rcall .+82 ; 0x1b7a <__divsf3_pse+0x8e>
- 1b28: fe 2f mov r31, r30
- 1b2a: 27 d0 rcall .+78 ; 0x1b7a <__divsf3_pse+0x8e>
- 1b2c: 66 0f add r22, r22
- 1b2e: 77 1f adc r23, r23
- 1b30: 88 1f adc r24, r24
- 1b32: bb 1f adc r27, r27
- 1b34: 26 17 cp r18, r22
- 1b36: 37 07 cpc r19, r23
- 1b38: 48 07 cpc r20, r24
- 1b3a: ab 07 cpc r26, r27
- 1b3c: b0 e8 ldi r27, 0x80 ; 128
- 1b3e: 09 f0 breq .+2 ; 0x1b42 <__divsf3_pse+0x56>
- 1b40: bb 0b sbc r27, r27
- 1b42: 80 2d mov r24, r0
- 1b44: bf 01 movw r22, r30
- 1b46: ff 27 eor r31, r31
- 1b48: 93 58 subi r25, 0x83 ; 131
- 1b4a: 5f 4f sbci r21, 0xFF ; 255
- 1b4c: 2a f0 brmi .+10 ; 0x1b58 <__divsf3_pse+0x6c>
- 1b4e: 9e 3f cpi r25, 0xFE ; 254
- 1b50: 51 05 cpc r21, r1
- 1b52: 68 f0 brcs .+26 ; 0x1b6e <__divsf3_pse+0x82>
- 1b54: b1 c0 rjmp .+354 ; 0x1cb8 <__fp_inf>
- 1b56: fb c0 rjmp .+502 ; 0x1d4e <__fp_szero>
- 1b58: 5f 3f cpi r21, 0xFF ; 255
- 1b5a: ec f3 brlt .-6 ; 0x1b56 <__divsf3_pse+0x6a>
- 1b5c: 98 3e cpi r25, 0xE8 ; 232
- 1b5e: dc f3 brlt .-10 ; 0x1b56 <__divsf3_pse+0x6a>
- 1b60: 86 95 lsr r24
- 1b62: 77 95 ror r23
- 1b64: 67 95 ror r22
- 1b66: b7 95 ror r27
- 1b68: f7 95 ror r31
- 1b6a: 9f 5f subi r25, 0xFF ; 255
- 1b6c: c9 f7 brne .-14 ; 0x1b60 <__divsf3_pse+0x74>
- 1b6e: 88 0f add r24, r24
- 1b70: 91 1d adc r25, r1
- 1b72: 96 95 lsr r25
- 1b74: 87 95 ror r24
- 1b76: 97 f9 bld r25, 7
- 1b78: 08 95 ret
- 1b7a: e1 e0 ldi r30, 0x01 ; 1
- 1b7c: 66 0f add r22, r22
- 1b7e: 77 1f adc r23, r23
- 1b80: 88 1f adc r24, r24
- 1b82: bb 1f adc r27, r27
- 1b84: 62 17 cp r22, r18
- 1b86: 73 07 cpc r23, r19
- 1b88: 84 07 cpc r24, r20
- 1b8a: ba 07 cpc r27, r26
- 1b8c: 20 f0 brcs .+8 ; 0x1b96 <__divsf3_pse+0xaa>
- 1b8e: 62 1b sub r22, r18
- 1b90: 73 0b sbc r23, r19
- 1b92: 84 0b sbc r24, r20
- 1b94: ba 0b sbc r27, r26
- 1b96: ee 1f adc r30, r30
- 1b98: 88 f7 brcc .-30 ; 0x1b7c <__divsf3_pse+0x90>
- 1b9a: e0 95 com r30
- 1b9c: 08 95 ret
-
-00001b9e <__fixunssfsi>:
- 1b9e: bc d0 rcall .+376 ; 0x1d18 <__fp_splitA>
- 1ba0: 88 f0 brcs .+34 ; 0x1bc4 <__fixunssfsi+0x26>
- 1ba2: 9f 57 subi r25, 0x7F ; 127
- 1ba4: 90 f0 brcs .+36 ; 0x1bca <__fixunssfsi+0x2c>
- 1ba6: b9 2f mov r27, r25
- 1ba8: 99 27 eor r25, r25
- 1baa: b7 51 subi r27, 0x17 ; 23
- 1bac: a0 f0 brcs .+40 ; 0x1bd6 <__fixunssfsi+0x38>
- 1bae: d1 f0 breq .+52 ; 0x1be4 <__fixunssfsi+0x46>
- 1bb0: 66 0f add r22, r22
- 1bb2: 77 1f adc r23, r23
- 1bb4: 88 1f adc r24, r24
- 1bb6: 99 1f adc r25, r25
- 1bb8: 1a f0 brmi .+6 ; 0x1bc0 <__fixunssfsi+0x22>
- 1bba: ba 95 dec r27
- 1bbc: c9 f7 brne .-14 ; 0x1bb0 <__fixunssfsi+0x12>
- 1bbe: 12 c0 rjmp .+36 ; 0x1be4 <__fixunssfsi+0x46>
- 1bc0: b1 30 cpi r27, 0x01 ; 1
- 1bc2: 81 f0 breq .+32 ; 0x1be4 <__fixunssfsi+0x46>
- 1bc4: c3 d0 rcall .+390 ; 0x1d4c <__fp_zero>
- 1bc6: b1 e0 ldi r27, 0x01 ; 1
- 1bc8: 08 95 ret
- 1bca: c0 c0 rjmp .+384 ; 0x1d4c <__fp_zero>
- 1bcc: 67 2f mov r22, r23
- 1bce: 78 2f mov r23, r24
- 1bd0: 88 27 eor r24, r24
- 1bd2: b8 5f subi r27, 0xF8 ; 248
- 1bd4: 39 f0 breq .+14 ; 0x1be4 <__fixunssfsi+0x46>
- 1bd6: b9 3f cpi r27, 0xF9 ; 249
- 1bd8: cc f3 brlt .-14 ; 0x1bcc <__fixunssfsi+0x2e>
- 1bda: 86 95 lsr r24
- 1bdc: 77 95 ror r23
- 1bde: 67 95 ror r22
- 1be0: b3 95 inc r27
- 1be2: d9 f7 brne .-10 ; 0x1bda <__fixunssfsi+0x3c>
- 1be4: 3e f4 brtc .+14 ; 0x1bf4 <__fixunssfsi+0x56>
- 1be6: 90 95 com r25
- 1be8: 80 95 com r24
- 1bea: 70 95 com r23
- 1bec: 61 95 neg r22
- 1bee: 7f 4f sbci r23, 0xFF ; 255
- 1bf0: 8f 4f sbci r24, 0xFF ; 255
- 1bf2: 9f 4f sbci r25, 0xFF ; 255
- 1bf4: 08 95 ret
-
-00001bf6 <__floatunsisf>:
- 1bf6: e8 94 clt
- 1bf8: 09 c0 rjmp .+18 ; 0x1c0c <__floatsisf+0x12>
-
-00001bfa <__floatsisf>:
- 1bfa: 97 fb bst r25, 7
- 1bfc: 3e f4 brtc .+14 ; 0x1c0c <__floatsisf+0x12>
- 1bfe: 90 95 com r25
- 1c00: 80 95 com r24
- 1c02: 70 95 com r23
- 1c04: 61 95 neg r22
- 1c06: 7f 4f sbci r23, 0xFF ; 255
- 1c08: 8f 4f sbci r24, 0xFF ; 255
- 1c0a: 9f 4f sbci r25, 0xFF ; 255
- 1c0c: 99 23 and r25, r25
- 1c0e: a9 f0 breq .+42 ; 0x1c3a <__floatsisf+0x40>
- 1c10: f9 2f mov r31, r25
- 1c12: 96 e9 ldi r25, 0x96 ; 150
- 1c14: bb 27 eor r27, r27
- 1c16: 93 95 inc r25
- 1c18: f6 95 lsr r31
- 1c1a: 87 95 ror r24
- 1c1c: 77 95 ror r23
- 1c1e: 67 95 ror r22
- 1c20: b7 95 ror r27
- 1c22: f1 11 cpse r31, r1
- 1c24: f8 cf rjmp .-16 ; 0x1c16 <__floatsisf+0x1c>
- 1c26: fa f4 brpl .+62 ; 0x1c66 <__floatsisf+0x6c>
- 1c28: bb 0f add r27, r27
- 1c2a: 11 f4 brne .+4 ; 0x1c30 <__floatsisf+0x36>
- 1c2c: 60 ff sbrs r22, 0
- 1c2e: 1b c0 rjmp .+54 ; 0x1c66 <__floatsisf+0x6c>
- 1c30: 6f 5f subi r22, 0xFF ; 255
- 1c32: 7f 4f sbci r23, 0xFF ; 255
- 1c34: 8f 4f sbci r24, 0xFF ; 255
- 1c36: 9f 4f sbci r25, 0xFF ; 255
- 1c38: 16 c0 rjmp .+44 ; 0x1c66 <__floatsisf+0x6c>
- 1c3a: 88 23 and r24, r24
- 1c3c: 11 f0 breq .+4 ; 0x1c42 <__floatsisf+0x48>
- 1c3e: 96 e9 ldi r25, 0x96 ; 150
- 1c40: 11 c0 rjmp .+34 ; 0x1c64 <__floatsisf+0x6a>
- 1c42: 77 23 and r23, r23
- 1c44: 21 f0 breq .+8 ; 0x1c4e <__floatsisf+0x54>
- 1c46: 9e e8 ldi r25, 0x8E ; 142
- 1c48: 87 2f mov r24, r23
- 1c4a: 76 2f mov r23, r22
- 1c4c: 05 c0 rjmp .+10 ; 0x1c58 <__floatsisf+0x5e>
- 1c4e: 66 23 and r22, r22
- 1c50: 71 f0 breq .+28 ; 0x1c6e <__floatsisf+0x74>
- 1c52: 96 e8 ldi r25, 0x86 ; 134
- 1c54: 86 2f mov r24, r22
- 1c56: 70 e0 ldi r23, 0x00 ; 0
- 1c58: 60 e0 ldi r22, 0x00 ; 0
- 1c5a: 2a f0 brmi .+10 ; 0x1c66 <__floatsisf+0x6c>
- 1c5c: 9a 95 dec r25
- 1c5e: 66 0f add r22, r22
- 1c60: 77 1f adc r23, r23
- 1c62: 88 1f adc r24, r24
- 1c64: da f7 brpl .-10 ; 0x1c5c <__floatsisf+0x62>
- 1c66: 88 0f add r24, r24
- 1c68: 96 95 lsr r25
- 1c6a: 87 95 ror r24
- 1c6c: 97 f9 bld r25, 7
- 1c6e: 08 95 ret
-
-00001c70 <__fp_cmp>:
- 1c70: 99 0f add r25, r25
- 1c72: 00 08 sbc r0, r0
- 1c74: 55 0f add r21, r21
- 1c76: aa 0b sbc r26, r26
- 1c78: e0 e8 ldi r30, 0x80 ; 128
- 1c7a: fe ef ldi r31, 0xFE ; 254
- 1c7c: 16 16 cp r1, r22
- 1c7e: 17 06 cpc r1, r23
- 1c80: e8 07 cpc r30, r24
- 1c82: f9 07 cpc r31, r25
- 1c84: c0 f0 brcs .+48 ; 0x1cb6 <__fp_cmp+0x46>
- 1c86: 12 16 cp r1, r18
- 1c88: 13 06 cpc r1, r19
- 1c8a: e4 07 cpc r30, r20
- 1c8c: f5 07 cpc r31, r21
- 1c8e: 98 f0 brcs .+38 ; 0x1cb6 <__fp_cmp+0x46>
- 1c90: 62 1b sub r22, r18
- 1c92: 73 0b sbc r23, r19
- 1c94: 84 0b sbc r24, r20
- 1c96: 95 0b sbc r25, r21
- 1c98: 39 f4 brne .+14 ; 0x1ca8 <__fp_cmp+0x38>
- 1c9a: 0a 26 eor r0, r26
- 1c9c: 61 f0 breq .+24 ; 0x1cb6 <__fp_cmp+0x46>
- 1c9e: 23 2b or r18, r19
- 1ca0: 24 2b or r18, r20
- 1ca2: 25 2b or r18, r21
- 1ca4: 21 f4 brne .+8 ; 0x1cae <__fp_cmp+0x3e>
- 1ca6: 08 95 ret
- 1ca8: 0a 26 eor r0, r26
- 1caa: 09 f4 brne .+2 ; 0x1cae <__fp_cmp+0x3e>
- 1cac: a1 40 sbci r26, 0x01 ; 1
- 1cae: a6 95 lsr r26
- 1cb0: 8f ef ldi r24, 0xFF ; 255
- 1cb2: 81 1d adc r24, r1
- 1cb4: 81 1d adc r24, r1
- 1cb6: 08 95 ret
-
-00001cb8 <__fp_inf>:
- 1cb8: 97 f9 bld r25, 7
- 1cba: 9f 67 ori r25, 0x7F ; 127
- 1cbc: 80 e8 ldi r24, 0x80 ; 128
- 1cbe: 70 e0 ldi r23, 0x00 ; 0
- 1cc0: 60 e0 ldi r22, 0x00 ; 0
- 1cc2: 08 95 ret
-
-00001cc4 <__fp_nan>:
- 1cc4: 9f ef ldi r25, 0xFF ; 255
- 1cc6: 80 ec ldi r24, 0xC0 ; 192
- 1cc8: 08 95 ret
-
-00001cca <__fp_pscA>:
- 1cca: 00 24 eor r0, r0
- 1ccc: 0a 94 dec r0
- 1cce: 16 16 cp r1, r22
- 1cd0: 17 06 cpc r1, r23
- 1cd2: 18 06 cpc r1, r24
- 1cd4: 09 06 cpc r0, r25
- 1cd6: 08 95 ret
-
-00001cd8 <__fp_pscB>:
- 1cd8: 00 24 eor r0, r0
- 1cda: 0a 94 dec r0
- 1cdc: 12 16 cp r1, r18
- 1cde: 13 06 cpc r1, r19
- 1ce0: 14 06 cpc r1, r20
- 1ce2: 05 06 cpc r0, r21
- 1ce4: 08 95 ret
-
-00001ce6 <__fp_round>:
- 1ce6: 09 2e mov r0, r25
- 1ce8: 03 94 inc r0
- 1cea: 00 0c add r0, r0
- 1cec: 11 f4 brne .+4 ; 0x1cf2 <__fp_round+0xc>
- 1cee: 88 23 and r24, r24
- 1cf0: 52 f0 brmi .+20 ; 0x1d06 <__fp_round+0x20>
- 1cf2: bb 0f add r27, r27
- 1cf4: 40 f4 brcc .+16 ; 0x1d06 <__fp_round+0x20>
- 1cf6: bf 2b or r27, r31
- 1cf8: 11 f4 brne .+4 ; 0x1cfe <__fp_round+0x18>
- 1cfa: 60 ff sbrs r22, 0
- 1cfc: 04 c0 rjmp .+8 ; 0x1d06 <__fp_round+0x20>
- 1cfe: 6f 5f subi r22, 0xFF ; 255
- 1d00: 7f 4f sbci r23, 0xFF ; 255
- 1d02: 8f 4f sbci r24, 0xFF ; 255
- 1d04: 9f 4f sbci r25, 0xFF ; 255
- 1d06: 08 95 ret
-
-00001d08 <__fp_split3>:
- 1d08: 57 fd sbrc r21, 7
- 1d0a: 90 58 subi r25, 0x80 ; 128
- 1d0c: 44 0f add r20, r20
- 1d0e: 55 1f adc r21, r21
- 1d10: 59 f0 breq .+22 ; 0x1d28 <__fp_splitA+0x10>
- 1d12: 5f 3f cpi r21, 0xFF ; 255
- 1d14: 71 f0 breq .+28 ; 0x1d32 <__fp_splitA+0x1a>
- 1d16: 47 95 ror r20
-
-00001d18 <__fp_splitA>:
- 1d18: 88 0f add r24, r24
- 1d1a: 97 fb bst r25, 7
- 1d1c: 99 1f adc r25, r25
- 1d1e: 61 f0 breq .+24 ; 0x1d38 <__fp_splitA+0x20>
- 1d20: 9f 3f cpi r25, 0xFF ; 255
- 1d22: 79 f0 breq .+30 ; 0x1d42 <__fp_splitA+0x2a>
- 1d24: 87 95 ror r24
+ 1a6a: 08 95 ret
+
+00001a6c <__subsf3>:
+ 1a6c: 50 58 subi r21, 0x80 ; 128
+
+00001a6e <__addsf3>:
+ 1a6e: bb 27 eor r27, r27
+ 1a70: aa 27 eor r26, r26
+ 1a72: 0e d0 rcall .+28 ; 0x1a90 <__addsf3x>
+ 1a74: 70 c1 rjmp .+736 ; 0x1d56 <__fp_round>
+ 1a76: 61 d1 rcall .+706 ; 0x1d3a <__fp_pscA>
+ 1a78: 30 f0 brcs .+12 ; 0x1a86 <__addsf3+0x18>
+ 1a7a: 66 d1 rcall .+716 ; 0x1d48 <__fp_pscB>
+ 1a7c: 20 f0 brcs .+8 ; 0x1a86 <__addsf3+0x18>
+ 1a7e: 31 f4 brne .+12 ; 0x1a8c <__addsf3+0x1e>
+ 1a80: 9f 3f cpi r25, 0xFF ; 255
+ 1a82: 11 f4 brne .+4 ; 0x1a88 <__addsf3+0x1a>
+ 1a84: 1e f4 brtc .+6 ; 0x1a8c <__addsf3+0x1e>
+ 1a86: 56 c1 rjmp .+684 ; 0x1d34 <__fp_nan>
+ 1a88: 0e f4 brtc .+2 ; 0x1a8c <__addsf3+0x1e>
+ 1a8a: e0 95 com r30
+ 1a8c: e7 fb bst r30, 7
+ 1a8e: 4c c1 rjmp .+664 ; 0x1d28 <__fp_inf>
+
+00001a90 <__addsf3x>:
+ 1a90: e9 2f mov r30, r25
+ 1a92: 72 d1 rcall .+740 ; 0x1d78 <__fp_split3>
+ 1a94: 80 f3 brcs .-32 ; 0x1a76 <__addsf3+0x8>
+ 1a96: ba 17 cp r27, r26
+ 1a98: 62 07 cpc r22, r18
+ 1a9a: 73 07 cpc r23, r19
+ 1a9c: 84 07 cpc r24, r20
+ 1a9e: 95 07 cpc r25, r21
+ 1aa0: 18 f0 brcs .+6 ; 0x1aa8 <__addsf3x+0x18>
+ 1aa2: 71 f4 brne .+28 ; 0x1ac0 <__addsf3x+0x30>
+ 1aa4: 9e f5 brtc .+102 ; 0x1b0c <__addsf3x+0x7c>
+ 1aa6: 8a c1 rjmp .+788 ; 0x1dbc <__fp_zero>
+ 1aa8: 0e f4 brtc .+2 ; 0x1aac <__addsf3x+0x1c>
+ 1aaa: e0 95 com r30
+ 1aac: 0b 2e mov r0, r27
+ 1aae: ba 2f mov r27, r26
+ 1ab0: a0 2d mov r26, r0
+ 1ab2: 0b 01 movw r0, r22
+ 1ab4: b9 01 movw r22, r18
+ 1ab6: 90 01 movw r18, r0
+ 1ab8: 0c 01 movw r0, r24
+ 1aba: ca 01 movw r24, r20
+ 1abc: a0 01 movw r20, r0
+ 1abe: 11 24 eor r1, r1
+ 1ac0: ff 27 eor r31, r31
+ 1ac2: 59 1b sub r21, r25
+ 1ac4: 99 f0 breq .+38 ; 0x1aec <__addsf3x+0x5c>
+ 1ac6: 59 3f cpi r21, 0xF9 ; 249
+ 1ac8: 50 f4 brcc .+20 ; 0x1ade <__addsf3x+0x4e>
+ 1aca: 50 3e cpi r21, 0xE0 ; 224
+ 1acc: 68 f1 brcs .+90 ; 0x1b28 <__addsf3x+0x98>
+ 1ace: 1a 16 cp r1, r26
+ 1ad0: f0 40 sbci r31, 0x00 ; 0
+ 1ad2: a2 2f mov r26, r18
+ 1ad4: 23 2f mov r18, r19
+ 1ad6: 34 2f mov r19, r20
+ 1ad8: 44 27 eor r20, r20
+ 1ada: 58 5f subi r21, 0xF8 ; 248
+ 1adc: f3 cf rjmp .-26 ; 0x1ac4 <__addsf3x+0x34>
+ 1ade: 46 95 lsr r20
+ 1ae0: 37 95 ror r19
+ 1ae2: 27 95 ror r18
+ 1ae4: a7 95 ror r26
+ 1ae6: f0 40 sbci r31, 0x00 ; 0
+ 1ae8: 53 95 inc r21
+ 1aea: c9 f7 brne .-14 ; 0x1ade <__addsf3x+0x4e>
+ 1aec: 7e f4 brtc .+30 ; 0x1b0c <__addsf3x+0x7c>
+ 1aee: 1f 16 cp r1, r31
+ 1af0: ba 0b sbc r27, r26
+ 1af2: 62 0b sbc r22, r18
+ 1af4: 73 0b sbc r23, r19
+ 1af6: 84 0b sbc r24, r20
+ 1af8: ba f0 brmi .+46 ; 0x1b28 <__addsf3x+0x98>
+ 1afa: 91 50 subi r25, 0x01 ; 1
+ 1afc: a1 f0 breq .+40 ; 0x1b26 <__addsf3x+0x96>
+ 1afe: ff 0f add r31, r31
+ 1b00: bb 1f adc r27, r27
+ 1b02: 66 1f adc r22, r22
+ 1b04: 77 1f adc r23, r23
+ 1b06: 88 1f adc r24, r24
+ 1b08: c2 f7 brpl .-16 ; 0x1afa <__addsf3x+0x6a>
+ 1b0a: 0e c0 rjmp .+28 ; 0x1b28 <__addsf3x+0x98>
+ 1b0c: ba 0f add r27, r26
+ 1b0e: 62 1f adc r22, r18
+ 1b10: 73 1f adc r23, r19
+ 1b12: 84 1f adc r24, r20
+ 1b14: 48 f4 brcc .+18 ; 0x1b28 <__addsf3x+0x98>
+ 1b16: 87 95 ror r24
+ 1b18: 77 95 ror r23
+ 1b1a: 67 95 ror r22
+ 1b1c: b7 95 ror r27
+ 1b1e: f7 95 ror r31
+ 1b20: 9e 3f cpi r25, 0xFE ; 254
+ 1b22: 08 f0 brcs .+2 ; 0x1b26 <__addsf3x+0x96>
+ 1b24: b3 cf rjmp .-154 ; 0x1a8c <__addsf3+0x1e>
+ 1b26: 93 95 inc r25
+ 1b28: 88 0f add r24, r24
+ 1b2a: 08 f0 brcs .+2 ; 0x1b2e <__addsf3x+0x9e>
+ 1b2c: 99 27 eor r25, r25
+ 1b2e: ee 0f add r30, r30
+ 1b30: 97 95 ror r25
+ 1b32: 87 95 ror r24
+ 1b34: 08 95 ret
+
+00001b36 <__cmpsf2>:
+ 1b36: d4 d0 rcall .+424 ; 0x1ce0 <__fp_cmp>
+ 1b38: 08 f4 brcc .+2 ; 0x1b3c <__cmpsf2+0x6>
+ 1b3a: 81 e0 ldi r24, 0x01 ; 1
+ 1b3c: 08 95 ret
+
+00001b3e <__divsf3>:
+ 1b3e: 0c d0 rcall .+24 ; 0x1b58 <__divsf3x>
+ 1b40: 0a c1 rjmp .+532 ; 0x1d56 <__fp_round>
+ 1b42: 02 d1 rcall .+516 ; 0x1d48 <__fp_pscB>
+ 1b44: 40 f0 brcs .+16 ; 0x1b56 <__divsf3+0x18>
+ 1b46: f9 d0 rcall .+498 ; 0x1d3a <__fp_pscA>
+ 1b48: 30 f0 brcs .+12 ; 0x1b56 <__divsf3+0x18>
+ 1b4a: 21 f4 brne .+8 ; 0x1b54 <__divsf3+0x16>
+ 1b4c: 5f 3f cpi r21, 0xFF ; 255
+ 1b4e: 19 f0 breq .+6 ; 0x1b56 <__divsf3+0x18>
+ 1b50: eb c0 rjmp .+470 ; 0x1d28 <__fp_inf>
+ 1b52: 51 11 cpse r21, r1
+ 1b54: 34 c1 rjmp .+616 ; 0x1dbe <__fp_szero>
+ 1b56: ee c0 rjmp .+476 ; 0x1d34 <__fp_nan>
+
+00001b58 <__divsf3x>:
+ 1b58: 0f d1 rcall .+542 ; 0x1d78 <__fp_split3>
+ 1b5a: 98 f3 brcs .-26 ; 0x1b42 <__divsf3+0x4>
+
+00001b5c <__divsf3_pse>:
+ 1b5c: 99 23 and r25, r25
+ 1b5e: c9 f3 breq .-14 ; 0x1b52 <__divsf3+0x14>
+ 1b60: 55 23 and r21, r21
+ 1b62: b1 f3 breq .-20 ; 0x1b50 <__divsf3+0x12>
+ 1b64: 95 1b sub r25, r21
+ 1b66: 55 0b sbc r21, r21
+ 1b68: bb 27 eor r27, r27
+ 1b6a: aa 27 eor r26, r26
+ 1b6c: 62 17 cp r22, r18
+ 1b6e: 73 07 cpc r23, r19
+ 1b70: 84 07 cpc r24, r20
+ 1b72: 38 f0 brcs .+14 ; 0x1b82 <__divsf3_pse+0x26>
+ 1b74: 9f 5f subi r25, 0xFF ; 255
+ 1b76: 5f 4f sbci r21, 0xFF ; 255
+ 1b78: 22 0f add r18, r18
+ 1b7a: 33 1f adc r19, r19
+ 1b7c: 44 1f adc r20, r20
+ 1b7e: aa 1f adc r26, r26
+ 1b80: a9 f3 breq .-22 ; 0x1b6c <__divsf3_pse+0x10>
+ 1b82: 33 d0 rcall .+102 ; 0x1bea <__divsf3_pse+0x8e>
+ 1b84: 0e 2e mov r0, r30
+ 1b86: 3a f0 brmi .+14 ; 0x1b96 <__divsf3_pse+0x3a>
+ 1b88: e0 e8 ldi r30, 0x80 ; 128
+ 1b8a: 30 d0 rcall .+96 ; 0x1bec <__divsf3_pse+0x90>
+ 1b8c: 91 50 subi r25, 0x01 ; 1
+ 1b8e: 50 40 sbci r21, 0x00 ; 0
+ 1b90: e6 95 lsr r30
+ 1b92: 00 1c adc r0, r0
+ 1b94: ca f7 brpl .-14 ; 0x1b88 <__divsf3_pse+0x2c>
+ 1b96: 29 d0 rcall .+82 ; 0x1bea <__divsf3_pse+0x8e>
+ 1b98: fe 2f mov r31, r30
+ 1b9a: 27 d0 rcall .+78 ; 0x1bea <__divsf3_pse+0x8e>
+ 1b9c: 66 0f add r22, r22
+ 1b9e: 77 1f adc r23, r23
+ 1ba0: 88 1f adc r24, r24
+ 1ba2: bb 1f adc r27, r27
+ 1ba4: 26 17 cp r18, r22
+ 1ba6: 37 07 cpc r19, r23
+ 1ba8: 48 07 cpc r20, r24
+ 1baa: ab 07 cpc r26, r27
+ 1bac: b0 e8 ldi r27, 0x80 ; 128
+ 1bae: 09 f0 breq .+2 ; 0x1bb2 <__divsf3_pse+0x56>
+ 1bb0: bb 0b sbc r27, r27
+ 1bb2: 80 2d mov r24, r0
+ 1bb4: bf 01 movw r22, r30
+ 1bb6: ff 27 eor r31, r31
+ 1bb8: 93 58 subi r25, 0x83 ; 131
+ 1bba: 5f 4f sbci r21, 0xFF ; 255
+ 1bbc: 2a f0 brmi .+10 ; 0x1bc8 <__divsf3_pse+0x6c>
+ 1bbe: 9e 3f cpi r25, 0xFE ; 254
+ 1bc0: 51 05 cpc r21, r1
+ 1bc2: 68 f0 brcs .+26 ; 0x1bde <__divsf3_pse+0x82>
+ 1bc4: b1 c0 rjmp .+354 ; 0x1d28 <__fp_inf>
+ 1bc6: fb c0 rjmp .+502 ; 0x1dbe <__fp_szero>
+ 1bc8: 5f 3f cpi r21, 0xFF ; 255
+ 1bca: ec f3 brlt .-6 ; 0x1bc6 <__divsf3_pse+0x6a>
+ 1bcc: 98 3e cpi r25, 0xE8 ; 232
+ 1bce: dc f3 brlt .-10 ; 0x1bc6 <__divsf3_pse+0x6a>
+ 1bd0: 86 95 lsr r24
+ 1bd2: 77 95 ror r23
+ 1bd4: 67 95 ror r22
+ 1bd6: b7 95 ror r27
+ 1bd8: f7 95 ror r31
+ 1bda: 9f 5f subi r25, 0xFF ; 255
+ 1bdc: c9 f7 brne .-14 ; 0x1bd0 <__divsf3_pse+0x74>
+ 1bde: 88 0f add r24, r24
+ 1be0: 91 1d adc r25, r1
+ 1be2: 96 95 lsr r25
+ 1be4: 87 95 ror r24
+ 1be6: 97 f9 bld r25, 7
+ 1be8: 08 95 ret
+ 1bea: e1 e0 ldi r30, 0x01 ; 1
+ 1bec: 66 0f add r22, r22
+ 1bee: 77 1f adc r23, r23
+ 1bf0: 88 1f adc r24, r24
+ 1bf2: bb 1f adc r27, r27
+ 1bf4: 62 17 cp r22, r18
+ 1bf6: 73 07 cpc r23, r19
+ 1bf8: 84 07 cpc r24, r20
+ 1bfa: ba 07 cpc r27, r26
+ 1bfc: 20 f0 brcs .+8 ; 0x1c06 <__divsf3_pse+0xaa>
+ 1bfe: 62 1b sub r22, r18
+ 1c00: 73 0b sbc r23, r19
+ 1c02: 84 0b sbc r24, r20
+ 1c04: ba 0b sbc r27, r26
+ 1c06: ee 1f adc r30, r30
+ 1c08: 88 f7 brcc .-30 ; 0x1bec <__divsf3_pse+0x90>
+ 1c0a: e0 95 com r30
+ 1c0c: 08 95 ret
+
+00001c0e <__fixunssfsi>:
+ 1c0e: bc d0 rcall .+376 ; 0x1d88 <__fp_splitA>
+ 1c10: 88 f0 brcs .+34 ; 0x1c34 <__fixunssfsi+0x26>
+ 1c12: 9f 57 subi r25, 0x7F ; 127
+ 1c14: 90 f0 brcs .+36 ; 0x1c3a <__fixunssfsi+0x2c>
+ 1c16: b9 2f mov r27, r25
+ 1c18: 99 27 eor r25, r25
+ 1c1a: b7 51 subi r27, 0x17 ; 23
+ 1c1c: a0 f0 brcs .+40 ; 0x1c46 <__fixunssfsi+0x38>
+ 1c1e: d1 f0 breq .+52 ; 0x1c54 <__fixunssfsi+0x46>
+ 1c20: 66 0f add r22, r22
+ 1c22: 77 1f adc r23, r23
+ 1c24: 88 1f adc r24, r24
+ 1c26: 99 1f adc r25, r25
+ 1c28: 1a f0 brmi .+6 ; 0x1c30 <__fixunssfsi+0x22>
+ 1c2a: ba 95 dec r27
+ 1c2c: c9 f7 brne .-14 ; 0x1c20 <__fixunssfsi+0x12>
+ 1c2e: 12 c0 rjmp .+36 ; 0x1c54 <__fixunssfsi+0x46>
+ 1c30: b1 30 cpi r27, 0x01 ; 1
+ 1c32: 81 f0 breq .+32 ; 0x1c54 <__fixunssfsi+0x46>
+ 1c34: c3 d0 rcall .+390 ; 0x1dbc <__fp_zero>
+ 1c36: b1 e0 ldi r27, 0x01 ; 1
+ 1c38: 08 95 ret
+ 1c3a: c0 c0 rjmp .+384 ; 0x1dbc <__fp_zero>
+ 1c3c: 67 2f mov r22, r23
+ 1c3e: 78 2f mov r23, r24
+ 1c40: 88 27 eor r24, r24
+ 1c42: b8 5f subi r27, 0xF8 ; 248
+ 1c44: 39 f0 breq .+14 ; 0x1c54 <__fixunssfsi+0x46>
+ 1c46: b9 3f cpi r27, 0xF9 ; 249
+ 1c48: cc f3 brlt .-14 ; 0x1c3c <__fixunssfsi+0x2e>
+ 1c4a: 86 95 lsr r24
+ 1c4c: 77 95 ror r23
+ 1c4e: 67 95 ror r22
+ 1c50: b3 95 inc r27
+ 1c52: d9 f7 brne .-10 ; 0x1c4a <__fixunssfsi+0x3c>
+ 1c54: 3e f4 brtc .+14 ; 0x1c64 <__fixunssfsi+0x56>
+ 1c56: 90 95 com r25
+ 1c58: 80 95 com r24
+ 1c5a: 70 95 com r23
+ 1c5c: 61 95 neg r22
+ 1c5e: 7f 4f sbci r23, 0xFF ; 255
+ 1c60: 8f 4f sbci r24, 0xFF ; 255
+ 1c62: 9f 4f sbci r25, 0xFF ; 255
+ 1c64: 08 95 ret
+
+00001c66 <__floatunsisf>:
+ 1c66: e8 94 clt
+ 1c68: 09 c0 rjmp .+18 ; 0x1c7c <__floatsisf+0x12>
+
+00001c6a <__floatsisf>:
+ 1c6a: 97 fb bst r25, 7
+ 1c6c: 3e f4 brtc .+14 ; 0x1c7c <__floatsisf+0x12>
+ 1c6e: 90 95 com r25
+ 1c70: 80 95 com r24
+ 1c72: 70 95 com r23
+ 1c74: 61 95 neg r22
+ 1c76: 7f 4f sbci r23, 0xFF ; 255
+ 1c78: 8f 4f sbci r24, 0xFF ; 255
+ 1c7a: 9f 4f sbci r25, 0xFF ; 255
+ 1c7c: 99 23 and r25, r25
+ 1c7e: a9 f0 breq .+42 ; 0x1caa <__floatsisf+0x40>
+ 1c80: f9 2f mov r31, r25
+ 1c82: 96 e9 ldi r25, 0x96 ; 150
+ 1c84: bb 27 eor r27, r27
+ 1c86: 93 95 inc r25
+ 1c88: f6 95 lsr r31
+ 1c8a: 87 95 ror r24
+ 1c8c: 77 95 ror r23
+ 1c8e: 67 95 ror r22
+ 1c90: b7 95 ror r27
+ 1c92: f1 11 cpse r31, r1
+ 1c94: f8 cf rjmp .-16 ; 0x1c86 <__floatsisf+0x1c>
+ 1c96: fa f4 brpl .+62 ; 0x1cd6 <__floatsisf+0x6c>
+ 1c98: bb 0f add r27, r27
+ 1c9a: 11 f4 brne .+4 ; 0x1ca0 <__floatsisf+0x36>
+ 1c9c: 60 ff sbrs r22, 0
+ 1c9e: 1b c0 rjmp .+54 ; 0x1cd6 <__floatsisf+0x6c>
+ 1ca0: 6f 5f subi r22, 0xFF ; 255
+ 1ca2: 7f 4f sbci r23, 0xFF ; 255
+ 1ca4: 8f 4f sbci r24, 0xFF ; 255
+ 1ca6: 9f 4f sbci r25, 0xFF ; 255
+ 1ca8: 16 c0 rjmp .+44 ; 0x1cd6 <__floatsisf+0x6c>
+ 1caa: 88 23 and r24, r24
+ 1cac: 11 f0 breq .+4 ; 0x1cb2 <__floatsisf+0x48>
+ 1cae: 96 e9 ldi r25, 0x96 ; 150
+ 1cb0: 11 c0 rjmp .+34 ; 0x1cd4 <__floatsisf+0x6a>
+ 1cb2: 77 23 and r23, r23
+ 1cb4: 21 f0 breq .+8 ; 0x1cbe <__floatsisf+0x54>
+ 1cb6: 9e e8 ldi r25, 0x8E ; 142
+ 1cb8: 87 2f mov r24, r23
+ 1cba: 76 2f mov r23, r22
+ 1cbc: 05 c0 rjmp .+10 ; 0x1cc8 <__floatsisf+0x5e>
+ 1cbe: 66 23 and r22, r22
+ 1cc0: 71 f0 breq .+28 ; 0x1cde <__floatsisf+0x74>
+ 1cc2: 96 e8 ldi r25, 0x86 ; 134
+ 1cc4: 86 2f mov r24, r22
+ 1cc6: 70 e0 ldi r23, 0x00 ; 0
+ 1cc8: 60 e0 ldi r22, 0x00 ; 0
+ 1cca: 2a f0 brmi .+10 ; 0x1cd6 <__floatsisf+0x6c>
+ 1ccc: 9a 95 dec r25
+ 1cce: 66 0f add r22, r22
+ 1cd0: 77 1f adc r23, r23
+ 1cd2: 88 1f adc r24, r24
+ 1cd4: da f7 brpl .-10 ; 0x1ccc <__floatsisf+0x62>
+ 1cd6: 88 0f add r24, r24
+ 1cd8: 96 95 lsr r25
+ 1cda: 87 95 ror r24
+ 1cdc: 97 f9 bld r25, 7
+ 1cde: 08 95 ret
+
+00001ce0 <__fp_cmp>:
+ 1ce0: 99 0f add r25, r25
+ 1ce2: 00 08 sbc r0, r0
+ 1ce4: 55 0f add r21, r21
+ 1ce6: aa 0b sbc r26, r26
+ 1ce8: e0 e8 ldi r30, 0x80 ; 128
+ 1cea: fe ef ldi r31, 0xFE ; 254
+ 1cec: 16 16 cp r1, r22
+ 1cee: 17 06 cpc r1, r23
+ 1cf0: e8 07 cpc r30, r24
+ 1cf2: f9 07 cpc r31, r25
+ 1cf4: c0 f0 brcs .+48 ; 0x1d26 <__fp_cmp+0x46>
+ 1cf6: 12 16 cp r1, r18
+ 1cf8: 13 06 cpc r1, r19
+ 1cfa: e4 07 cpc r30, r20
+ 1cfc: f5 07 cpc r31, r21
+ 1cfe: 98 f0 brcs .+38 ; 0x1d26 <__fp_cmp+0x46>
+ 1d00: 62 1b sub r22, r18
+ 1d02: 73 0b sbc r23, r19
+ 1d04: 84 0b sbc r24, r20
+ 1d06: 95 0b sbc r25, r21
+ 1d08: 39 f4 brne .+14 ; 0x1d18 <__fp_cmp+0x38>
+ 1d0a: 0a 26 eor r0, r26
+ 1d0c: 61 f0 breq .+24 ; 0x1d26 <__fp_cmp+0x46>
+ 1d0e: 23 2b or r18, r19
+ 1d10: 24 2b or r18, r20
+ 1d12: 25 2b or r18, r21
+ 1d14: 21 f4 brne .+8 ; 0x1d1e <__fp_cmp+0x3e>
+ 1d16: 08 95 ret
+ 1d18: 0a 26 eor r0, r26
+ 1d1a: 09 f4 brne .+2 ; 0x1d1e <__fp_cmp+0x3e>
+ 1d1c: a1 40 sbci r26, 0x01 ; 1
+ 1d1e: a6 95 lsr r26
+ 1d20: 8f ef ldi r24, 0xFF ; 255
+ 1d22: 81 1d adc r24, r1
+ 1d24: 81 1d adc r24, r1
1d26: 08 95 ret
- 1d28: 12 16 cp r1, r18
- 1d2a: 13 06 cpc r1, r19
- 1d2c: 14 06 cpc r1, r20
- 1d2e: 55 1f adc r21, r21
- 1d30: f2 cf rjmp .-28 ; 0x1d16 <__fp_split3+0xe>
- 1d32: 46 95 lsr r20
- 1d34: f1 df rcall .-30 ; 0x1d18 <__fp_splitA>
- 1d36: 08 c0 rjmp .+16 ; 0x1d48 <__fp_splitA+0x30>
- 1d38: 16 16 cp r1, r22
- 1d3a: 17 06 cpc r1, r23
- 1d3c: 18 06 cpc r1, r24
- 1d3e: 99 1f adc r25, r25
- 1d40: f1 cf rjmp .-30 ; 0x1d24 <__fp_splitA+0xc>
- 1d42: 86 95 lsr r24
- 1d44: 71 05 cpc r23, r1
- 1d46: 61 05 cpc r22, r1
- 1d48: 08 94 sec
- 1d4a: 08 95 ret
-
-00001d4c <__fp_zero>:
- 1d4c: e8 94 clt
-
-00001d4e <__fp_szero>:
- 1d4e: bb 27 eor r27, r27
- 1d50: 66 27 eor r22, r22
- 1d52: 77 27 eor r23, r23
- 1d54: cb 01 movw r24, r22
- 1d56: 97 f9 bld r25, 7
- 1d58: 08 95 ret
-
-00001d5a <__gesf2>:
- 1d5a: 8a df rcall .-236 ; 0x1c70 <__fp_cmp>
- 1d5c: 08 f4 brcc .+2 ; 0x1d60 <__gesf2+0x6>
- 1d5e: 8f ef ldi r24, 0xFF ; 255
- 1d60: 08 95 ret
-
-00001d62 <__mulhi3>:
- 1d62: 55 27 eor r21, r21
- 1d64: 00 24 eor r0, r0
-
-00001d66 <__mulhi3_loop>:
- 1d66: 80 ff sbrs r24, 0
- 1d68: 02 c0 rjmp .+4 ; 0x1d6e <__mulhi3_skip1>
- 1d6a: 06 0e add r0, r22
- 1d6c: 57 1f adc r21, r23
-
-00001d6e <__mulhi3_skip1>:
- 1d6e: 66 0f add r22, r22
- 1d70: 77 1f adc r23, r23
- 1d72: 61 15 cp r22, r1
- 1d74: 71 05 cpc r23, r1
- 1d76: 21 f0 breq .+8 ; 0x1d80 <__mulhi3_exit>
- 1d78: 96 95 lsr r25
- 1d7a: 87 95 ror r24
- 1d7c: 00 97 sbiw r24, 0x00 ; 0
- 1d7e: 99 f7 brne .-26 ; 0x1d66 <__mulhi3_loop>
-
-00001d80 <__mulhi3_exit>:
- 1d80: 95 2f mov r25, r21
- 1d82: 80 2d mov r24, r0
- 1d84: 08 95 ret
-
-00001d86 <__udivmodhi4>:
- 1d86: aa 1b sub r26, r26
- 1d88: bb 1b sub r27, r27
- 1d8a: 51 e1 ldi r21, 0x11 ; 17
- 1d8c: 07 c0 rjmp .+14 ; 0x1d9c <__udivmodhi4_ep>
-
-00001d8e <__udivmodhi4_loop>:
- 1d8e: aa 1f adc r26, r26
- 1d90: bb 1f adc r27, r27
- 1d92: a6 17 cp r26, r22
- 1d94: b7 07 cpc r27, r23
- 1d96: 10 f0 brcs .+4 ; 0x1d9c <__udivmodhi4_ep>
- 1d98: a6 1b sub r26, r22
- 1d9a: b7 0b sbc r27, r23
-
-00001d9c <__udivmodhi4_ep>:
- 1d9c: 88 1f adc r24, r24
- 1d9e: 99 1f adc r25, r25
- 1da0: 5a 95 dec r21
- 1da2: a9 f7 brne .-22 ; 0x1d8e <__udivmodhi4_loop>
- 1da4: 80 95 com r24
- 1da6: 90 95 com r25
- 1da8: bc 01 movw r22, r24
- 1daa: cd 01 movw r24, r26
- 1dac: 08 95 ret
-
-00001dae <__divmodhi4>:
- 1dae: 97 fb bst r25, 7
- 1db0: 09 2e mov r0, r25
- 1db2: 07 26 eor r0, r23
- 1db4: 0a d0 rcall .+20 ; 0x1dca <__divmodhi4_neg1>
- 1db6: 77 fd sbrc r23, 7
- 1db8: 04 d0 rcall .+8 ; 0x1dc2 <__divmodhi4_neg2>
- 1dba: e5 df rcall .-54 ; 0x1d86 <__udivmodhi4>
- 1dbc: 06 d0 rcall .+12 ; 0x1dca <__divmodhi4_neg1>
- 1dbe: 00 20 and r0, r0
- 1dc0: 1a f4 brpl .+6 ; 0x1dc8 <__divmodhi4_exit>
-
-00001dc2 <__divmodhi4_neg2>:
- 1dc2: 70 95 com r23
- 1dc4: 61 95 neg r22
- 1dc6: 7f 4f sbci r23, 0xFF ; 255
-
-00001dc8 <__divmodhi4_exit>:
+
+00001d28 <__fp_inf>:
+ 1d28: 97 f9 bld r25, 7
+ 1d2a: 9f 67 ori r25, 0x7F ; 127
+ 1d2c: 80 e8 ldi r24, 0x80 ; 128
+ 1d2e: 70 e0 ldi r23, 0x00 ; 0
+ 1d30: 60 e0 ldi r22, 0x00 ; 0
+ 1d32: 08 95 ret
+
+00001d34 <__fp_nan>:
+ 1d34: 9f ef ldi r25, 0xFF ; 255
+ 1d36: 80 ec ldi r24, 0xC0 ; 192
+ 1d38: 08 95 ret
+
+00001d3a <__fp_pscA>:
+ 1d3a: 00 24 eor r0, r0
+ 1d3c: 0a 94 dec r0
+ 1d3e: 16 16 cp r1, r22
+ 1d40: 17 06 cpc r1, r23
+ 1d42: 18 06 cpc r1, r24
+ 1d44: 09 06 cpc r0, r25
+ 1d46: 08 95 ret
+
+00001d48 <__fp_pscB>:
+ 1d48: 00 24 eor r0, r0
+ 1d4a: 0a 94 dec r0
+ 1d4c: 12 16 cp r1, r18
+ 1d4e: 13 06 cpc r1, r19
+ 1d50: 14 06 cpc r1, r20
+ 1d52: 05 06 cpc r0, r21
+ 1d54: 08 95 ret
+
+00001d56 <__fp_round>:
+ 1d56: 09 2e mov r0, r25
+ 1d58: 03 94 inc r0
+ 1d5a: 00 0c add r0, r0
+ 1d5c: 11 f4 brne .+4 ; 0x1d62 <__fp_round+0xc>
+ 1d5e: 88 23 and r24, r24
+ 1d60: 52 f0 brmi .+20 ; 0x1d76 <__fp_round+0x20>
+ 1d62: bb 0f add r27, r27
+ 1d64: 40 f4 brcc .+16 ; 0x1d76 <__fp_round+0x20>
+ 1d66: bf 2b or r27, r31
+ 1d68: 11 f4 brne .+4 ; 0x1d6e <__fp_round+0x18>
+ 1d6a: 60 ff sbrs r22, 0
+ 1d6c: 04 c0 rjmp .+8 ; 0x1d76 <__fp_round+0x20>
+ 1d6e: 6f 5f subi r22, 0xFF ; 255
+ 1d70: 7f 4f sbci r23, 0xFF ; 255
+ 1d72: 8f 4f sbci r24, 0xFF ; 255
+ 1d74: 9f 4f sbci r25, 0xFF ; 255
+ 1d76: 08 95 ret
+
+00001d78 <__fp_split3>:
+ 1d78: 57 fd sbrc r21, 7
+ 1d7a: 90 58 subi r25, 0x80 ; 128
+ 1d7c: 44 0f add r20, r20
+ 1d7e: 55 1f adc r21, r21
+ 1d80: 59 f0 breq .+22 ; 0x1d98 <__fp_splitA+0x10>
+ 1d82: 5f 3f cpi r21, 0xFF ; 255
+ 1d84: 71 f0 breq .+28 ; 0x1da2 <__fp_splitA+0x1a>
+ 1d86: 47 95 ror r20
+
+00001d88 <__fp_splitA>:
+ 1d88: 88 0f add r24, r24
+ 1d8a: 97 fb bst r25, 7
+ 1d8c: 99 1f adc r25, r25
+ 1d8e: 61 f0 breq .+24 ; 0x1da8 <__fp_splitA+0x20>
+ 1d90: 9f 3f cpi r25, 0xFF ; 255
+ 1d92: 79 f0 breq .+30 ; 0x1db2 <__fp_splitA+0x2a>
+ 1d94: 87 95 ror r24
+ 1d96: 08 95 ret
+ 1d98: 12 16 cp r1, r18
+ 1d9a: 13 06 cpc r1, r19
+ 1d9c: 14 06 cpc r1, r20
+ 1d9e: 55 1f adc r21, r21
+ 1da0: f2 cf rjmp .-28 ; 0x1d86 <__fp_split3+0xe>
+ 1da2: 46 95 lsr r20
+ 1da4: f1 df rcall .-30 ; 0x1d88 <__fp_splitA>
+ 1da6: 08 c0 rjmp .+16 ; 0x1db8 <__fp_splitA+0x30>
+ 1da8: 16 16 cp r1, r22
+ 1daa: 17 06 cpc r1, r23
+ 1dac: 18 06 cpc r1, r24
+ 1dae: 99 1f adc r25, r25
+ 1db0: f1 cf rjmp .-30 ; 0x1d94 <__fp_splitA+0xc>
+ 1db2: 86 95 lsr r24
+ 1db4: 71 05 cpc r23, r1
+ 1db6: 61 05 cpc r22, r1
+ 1db8: 08 94 sec
+ 1dba: 08 95 ret
+
+00001dbc <__fp_zero>:
+ 1dbc: e8 94 clt
+
+00001dbe <__fp_szero>:
+ 1dbe: bb 27 eor r27, r27
+ 1dc0: 66 27 eor r22, r22
+ 1dc2: 77 27 eor r23, r23
+ 1dc4: cb 01 movw r24, r22
+ 1dc6: 97 f9 bld r25, 7
1dc8: 08 95 ret
-00001dca <__divmodhi4_neg1>:
- 1dca: f6 f7 brtc .-4 ; 0x1dc8 <__divmodhi4_exit>
- 1dcc: 90 95 com r25
- 1dce: 81 95 neg r24
- 1dd0: 9f 4f sbci r25, 0xFF ; 255
- 1dd2: 08 95 ret
-
-00001dd4 <__udivmodsi4>:
- 1dd4: a1 e2 ldi r26, 0x21 ; 33
- 1dd6: 1a 2e mov r1, r26
- 1dd8: aa 1b sub r26, r26
- 1dda: bb 1b sub r27, r27
- 1ddc: fd 01 movw r30, r26
- 1dde: 0d c0 rjmp .+26 ; 0x1dfa <__udivmodsi4_ep>
-
-00001de0 <__udivmodsi4_loop>:
- 1de0: aa 1f adc r26, r26
- 1de2: bb 1f adc r27, r27
- 1de4: ee 1f adc r30, r30
- 1de6: ff 1f adc r31, r31
- 1de8: a2 17 cp r26, r18
- 1dea: b3 07 cpc r27, r19
- 1dec: e4 07 cpc r30, r20
- 1dee: f5 07 cpc r31, r21
- 1df0: 20 f0 brcs .+8 ; 0x1dfa <__udivmodsi4_ep>
- 1df2: a2 1b sub r26, r18
- 1df4: b3 0b sbc r27, r19
- 1df6: e4 0b sbc r30, r20
- 1df8: f5 0b sbc r31, r21
-
-00001dfa <__udivmodsi4_ep>:
- 1dfa: 66 1f adc r22, r22
- 1dfc: 77 1f adc r23, r23
- 1dfe: 88 1f adc r24, r24
- 1e00: 99 1f adc r25, r25
- 1e02: 1a 94 dec r1
- 1e04: 69 f7 brne .-38 ; 0x1de0 <__udivmodsi4_loop>
- 1e06: 60 95 com r22
- 1e08: 70 95 com r23
- 1e0a: 80 95 com r24
- 1e0c: 90 95 com r25
- 1e0e: 9b 01 movw r18, r22
- 1e10: ac 01 movw r20, r24
- 1e12: bd 01 movw r22, r26
- 1e14: cf 01 movw r24, r30
- 1e16: 08 95 ret
-
-00001e18 <atoi>:
- 1e18: fc 01 movw r30, r24
- 1e1a: 88 27 eor r24, r24
- 1e1c: 99 27 eor r25, r25
- 1e1e: e8 94 clt
- 1e20: 21 91 ld r18, Z+
- 1e22: 20 32 cpi r18, 0x20 ; 32
- 1e24: e9 f3 breq .-6 ; 0x1e20 <atoi+0x8>
- 1e26: 29 30 cpi r18, 0x09 ; 9
- 1e28: 10 f0 brcs .+4 ; 0x1e2e <atoi+0x16>
- 1e2a: 2e 30 cpi r18, 0x0E ; 14
- 1e2c: c8 f3 brcs .-14 ; 0x1e20 <atoi+0x8>
- 1e2e: 2b 32 cpi r18, 0x2B ; 43
- 1e30: 39 f0 breq .+14 ; 0x1e40 <atoi+0x28>
- 1e32: 2d 32 cpi r18, 0x2D ; 45
- 1e34: 31 f4 brne .+12 ; 0x1e42 <atoi+0x2a>
- 1e36: 68 94 set
- 1e38: 03 c0 rjmp .+6 ; 0x1e40 <atoi+0x28>
- 1e3a: 1a d0 rcall .+52 ; 0x1e70 <__mulhi_const_10>
- 1e3c: 82 0f add r24, r18
- 1e3e: 91 1d adc r25, r1
- 1e40: 21 91 ld r18, Z+
- 1e42: 20 53 subi r18, 0x30 ; 48
- 1e44: 2a 30 cpi r18, 0x0A ; 10
- 1e46: c8 f3 brcs .-14 ; 0x1e3a <atoi+0x22>
- 1e48: 1e f4 brtc .+6 ; 0x1e50 <atoi+0x38>
- 1e4a: 90 95 com r25
- 1e4c: 81 95 neg r24
- 1e4e: 9f 4f sbci r25, 0xFF ; 255
- 1e50: 08 95 ret
-
-00001e52 <strncpy>:
- 1e52: fb 01 movw r30, r22
- 1e54: dc 01 movw r26, r24
- 1e56: 41 50 subi r20, 0x01 ; 1
- 1e58: 50 40 sbci r21, 0x00 ; 0
- 1e5a: 48 f0 brcs .+18 ; 0x1e6e <strncpy+0x1c>
- 1e5c: 01 90 ld r0, Z+
- 1e5e: 0d 92 st X+, r0
- 1e60: 00 20 and r0, r0
- 1e62: c9 f7 brne .-14 ; 0x1e56 <strncpy+0x4>
- 1e64: 01 c0 rjmp .+2 ; 0x1e68 <strncpy+0x16>
- 1e66: 1d 92 st X+, r1
- 1e68: 41 50 subi r20, 0x01 ; 1
- 1e6a: 50 40 sbci r21, 0x00 ; 0
- 1e6c: e0 f7 brcc .-8 ; 0x1e66 <strncpy+0x14>
- 1e6e: 08 95 ret
-
-00001e70 <__mulhi_const_10>:
- 1e70: bc 01 movw r22, r24
- 1e72: 88 0f add r24, r24
- 1e74: 99 1f adc r25, r25
- 1e76: 88 0f add r24, r24
- 1e78: 99 1f adc r25, r25
- 1e7a: 86 0f add r24, r22
- 1e7c: 97 1f adc r25, r23
- 1e7e: 88 0f add r24, r24
- 1e80: 99 1f adc r25, r25
- 1e82: 08 95 ret
-
-00001e84 <_exit>:
- 1e84: f8 94 cli
-
-00001e86 <__stop_program>:
- 1e86: ff cf rjmp .-2 ; 0x1e86 <__stop_program>
+00001dca <__gesf2>:
+ 1dca: 8a df rcall .-236 ; 0x1ce0 <__fp_cmp>
+ 1dcc: 08 f4 brcc .+2 ; 0x1dd0 <__gesf2+0x6>
+ 1dce: 8f ef ldi r24, 0xFF ; 255
+ 1dd0: 08 95 ret
+
+00001dd2 <__mulhi3>:
+ 1dd2: 55 27 eor r21, r21
+ 1dd4: 00 24 eor r0, r0
+
+00001dd6 <__mulhi3_loop>:
+ 1dd6: 80 ff sbrs r24, 0
+ 1dd8: 02 c0 rjmp .+4 ; 0x1dde <__mulhi3_skip1>
+ 1dda: 06 0e add r0, r22
+ 1ddc: 57 1f adc r21, r23
+
+00001dde <__mulhi3_skip1>:
+ 1dde: 66 0f add r22, r22
+ 1de0: 77 1f adc r23, r23
+ 1de2: 61 15 cp r22, r1
+ 1de4: 71 05 cpc r23, r1
+ 1de6: 21 f0 breq .+8 ; 0x1df0 <__mulhi3_exit>
+ 1de8: 96 95 lsr r25
+ 1dea: 87 95 ror r24
+ 1dec: 00 97 sbiw r24, 0x00 ; 0
+ 1dee: 99 f7 brne .-26 ; 0x1dd6 <__mulhi3_loop>
+
+00001df0 <__mulhi3_exit>:
+ 1df0: 95 2f mov r25, r21
+ 1df2: 80 2d mov r24, r0
+ 1df4: 08 95 ret
+
+00001df6 <__udivmodhi4>:
+ 1df6: aa 1b sub r26, r26
+ 1df8: bb 1b sub r27, r27
+ 1dfa: 51 e1 ldi r21, 0x11 ; 17
+ 1dfc: 07 c0 rjmp .+14 ; 0x1e0c <__udivmodhi4_ep>
+
+00001dfe <__udivmodhi4_loop>:
+ 1dfe: aa 1f adc r26, r26
+ 1e00: bb 1f adc r27, r27
+ 1e02: a6 17 cp r26, r22
+ 1e04: b7 07 cpc r27, r23
+ 1e06: 10 f0 brcs .+4 ; 0x1e0c <__udivmodhi4_ep>
+ 1e08: a6 1b sub r26, r22
+ 1e0a: b7 0b sbc r27, r23
+
+00001e0c <__udivmodhi4_ep>:
+ 1e0c: 88 1f adc r24, r24
+ 1e0e: 99 1f adc r25, r25
+ 1e10: 5a 95 dec r21
+ 1e12: a9 f7 brne .-22 ; 0x1dfe <__udivmodhi4_loop>
+ 1e14: 80 95 com r24
+ 1e16: 90 95 com r25
+ 1e18: bc 01 movw r22, r24
+ 1e1a: cd 01 movw r24, r26
+ 1e1c: 08 95 ret
+
+00001e1e <__divmodhi4>:
+ 1e1e: 97 fb bst r25, 7
+ 1e20: 09 2e mov r0, r25
+ 1e22: 07 26 eor r0, r23
+ 1e24: 0a d0 rcall .+20 ; 0x1e3a <__divmodhi4_neg1>
+ 1e26: 77 fd sbrc r23, 7
+ 1e28: 04 d0 rcall .+8 ; 0x1e32 <__divmodhi4_neg2>
+ 1e2a: e5 df rcall .-54 ; 0x1df6 <__udivmodhi4>
+ 1e2c: 06 d0 rcall .+12 ; 0x1e3a <__divmodhi4_neg1>
+ 1e2e: 00 20 and r0, r0
+ 1e30: 1a f4 brpl .+6 ; 0x1e38 <__divmodhi4_exit>
+
+00001e32 <__divmodhi4_neg2>:
+ 1e32: 70 95 com r23
+ 1e34: 61 95 neg r22
+ 1e36: 7f 4f sbci r23, 0xFF ; 255
+
+00001e38 <__divmodhi4_exit>:
+ 1e38: 08 95 ret
+
+00001e3a <__divmodhi4_neg1>:
+ 1e3a: f6 f7 brtc .-4 ; 0x1e38 <__divmodhi4_exit>
+ 1e3c: 90 95 com r25
+ 1e3e: 81 95 neg r24
+ 1e40: 9f 4f sbci r25, 0xFF ; 255
+ 1e42: 08 95 ret
+
+00001e44 <__udivmodsi4>:
+ 1e44: a1 e2 ldi r26, 0x21 ; 33
+ 1e46: 1a 2e mov r1, r26
+ 1e48: aa 1b sub r26, r26
+ 1e4a: bb 1b sub r27, r27
+ 1e4c: fd 01 movw r30, r26
+ 1e4e: 0d c0 rjmp .+26 ; 0x1e6a <__udivmodsi4_ep>
+
+00001e50 <__udivmodsi4_loop>:
+ 1e50: aa 1f adc r26, r26
+ 1e52: bb 1f adc r27, r27
+ 1e54: ee 1f adc r30, r30
+ 1e56: ff 1f adc r31, r31
+ 1e58: a2 17 cp r26, r18
+ 1e5a: b3 07 cpc r27, r19
+ 1e5c: e4 07 cpc r30, r20
+ 1e5e: f5 07 cpc r31, r21
+ 1e60: 20 f0 brcs .+8 ; 0x1e6a <__udivmodsi4_ep>
+ 1e62: a2 1b sub r26, r18
+ 1e64: b3 0b sbc r27, r19
+ 1e66: e4 0b sbc r30, r20
+ 1e68: f5 0b sbc r31, r21
+
+00001e6a <__udivmodsi4_ep>:
+ 1e6a: 66 1f adc r22, r22
+ 1e6c: 77 1f adc r23, r23
+ 1e6e: 88 1f adc r24, r24
+ 1e70: 99 1f adc r25, r25
+ 1e72: 1a 94 dec r1
+ 1e74: 69 f7 brne .-38 ; 0x1e50 <__udivmodsi4_loop>
+ 1e76: 60 95 com r22
+ 1e78: 70 95 com r23
+ 1e7a: 80 95 com r24
+ 1e7c: 90 95 com r25
+ 1e7e: 9b 01 movw r18, r22
+ 1e80: ac 01 movw r20, r24
+ 1e82: bd 01 movw r22, r26
+ 1e84: cf 01 movw r24, r30
+ 1e86: 08 95 ret
+
+00001e88 <atoi>:
+ 1e88: fc 01 movw r30, r24
+ 1e8a: 88 27 eor r24, r24
+ 1e8c: 99 27 eor r25, r25
+ 1e8e: e8 94 clt
+ 1e90: 21 91 ld r18, Z+
+ 1e92: 20 32 cpi r18, 0x20 ; 32
+ 1e94: e9 f3 breq .-6 ; 0x1e90 <atoi+0x8>
+ 1e96: 29 30 cpi r18, 0x09 ; 9
+ 1e98: 10 f0 brcs .+4 ; 0x1e9e <atoi+0x16>
+ 1e9a: 2e 30 cpi r18, 0x0E ; 14
+ 1e9c: c8 f3 brcs .-14 ; 0x1e90 <atoi+0x8>
+ 1e9e: 2b 32 cpi r18, 0x2B ; 43
+ 1ea0: 39 f0 breq .+14 ; 0x1eb0 <atoi+0x28>
+ 1ea2: 2d 32 cpi r18, 0x2D ; 45
+ 1ea4: 31 f4 brne .+12 ; 0x1eb2 <atoi+0x2a>
+ 1ea6: 68 94 set
+ 1ea8: 03 c0 rjmp .+6 ; 0x1eb0 <atoi+0x28>
+ 1eaa: 1a d0 rcall .+52 ; 0x1ee0 <__mulhi_const_10>
+ 1eac: 82 0f add r24, r18
+ 1eae: 91 1d adc r25, r1
+ 1eb0: 21 91 ld r18, Z+
+ 1eb2: 20 53 subi r18, 0x30 ; 48
+ 1eb4: 2a 30 cpi r18, 0x0A ; 10
+ 1eb6: c8 f3 brcs .-14 ; 0x1eaa <atoi+0x22>
+ 1eb8: 1e f4 brtc .+6 ; 0x1ec0 <atoi+0x38>
+ 1eba: 90 95 com r25
+ 1ebc: 81 95 neg r24
+ 1ebe: 9f 4f sbci r25, 0xFF ; 255
+ 1ec0: 08 95 ret
+
+00001ec2 <strncpy>:
+ 1ec2: fb 01 movw r30, r22
+ 1ec4: dc 01 movw r26, r24
+ 1ec6: 41 50 subi r20, 0x01 ; 1
+ 1ec8: 50 40 sbci r21, 0x00 ; 0
+ 1eca: 48 f0 brcs .+18 ; 0x1ede <strncpy+0x1c>
+ 1ecc: 01 90 ld r0, Z+
+ 1ece: 0d 92 st X+, r0
+ 1ed0: 00 20 and r0, r0
+ 1ed2: c9 f7 brne .-14 ; 0x1ec6 <strncpy+0x4>
+ 1ed4: 01 c0 rjmp .+2 ; 0x1ed8 <strncpy+0x16>
+ 1ed6: 1d 92 st X+, r1
+ 1ed8: 41 50 subi r20, 0x01 ; 1
+ 1eda: 50 40 sbci r21, 0x00 ; 0
+ 1edc: e0 f7 brcc .-8 ; 0x1ed6 <strncpy+0x14>
+ 1ede: 08 95 ret
+
+00001ee0 <__mulhi_const_10>:
+ 1ee0: bc 01 movw r22, r24
+ 1ee2: 88 0f add r24, r24
+ 1ee4: 99 1f adc r25, r25
+ 1ee6: 88 0f add r24, r24
+ 1ee8: 99 1f adc r25, r25
+ 1eea: 86 0f add r24, r22
+ 1eec: 97 1f adc r25, r23
+ 1eee: 88 0f add r24, r24
+ 1ef0: 99 1f adc r25, r25
+ 1ef2: 08 95 ret
+
+00001ef4 <_exit>:
+ 1ef4: f8 94 cli
+
+00001ef6 <__stop_program>:
+ 1ef6: ff cf rjmp .-2 ; 0x1ef6 <__stop_program>