GAS LISTING /tmp/cc80rrUS.s page 1 1 .file "test.c" 2 __SP_H__ = 0x3e 3 __SP_L__ = 0x3d 4 __SREG__ = 0x3f 5 __tmp_reg__ = 0 6 __zero_reg__ = 1 9 .text 10 .Ltext0: 112 .section .text.startup,"ax",@progbits 114 .global main 116 main: 117 .stabd 46,0,0 1:test.c **** #include 2:test.c **** #include 3:test.c **** #include 4:test.c **** #include "usb.h" 5:test.c **** #include "SPIPrinting.h" 6:test.c **** #include 7:test.c **** 8:test.c **** unsigned char sendbuffer[128]; 9:test.c **** unsigned char recvbuffer[32]; 10:test.c **** 11:test.c **** int main() 12:test.c **** { 119 .LM0: 120 .LFBB1: 121 /* prologue: function */ 122 /* frame size = 0 */ 123 /* stack size = 0 */ 124 .L__stack_usage = 0 13:test.c **** unsigned char i; 14:test.c **** 15:test.c **** cli(); 126 .LM1: 127 /* #APP */ 128 ; 15 "test.c" 1 129 0000 F894 cli 130 ; 0 "" 2 16:test.c **** DDRD = 1; 132 .LM2: 133 /* #NOAPP */ 134 0002 81E0 ldi r24,lo8(1) 135 0004 8AB9 out 0xa,r24 17:test.c **** SetupPrintf(); 18:test.c **** 19:test.c **** USB_ZeroPrescaler(); 137 .LM3: 138 0006 0E94 0000 call USB_ZeroPrescaler 20:test.c **** USB_Init(); 140 .LM4: 141 000a 0E94 0000 call USB_Init 21:test.c **** 22:test.c **** //Safe to leave lockdown... 23:test.c **** sei(); 143 .LM5: 144 /* #APP */ 145 ; 23 "test.c" 1 GAS LISTING /tmp/cc80rrUS.s page 2 146 000e 7894 sei 147 ; 0 "" 2 148 /* #NOAPP */ 149 0010 E0E0 ldi r30,lo8(sendbuffer) 150 0012 F0E0 ldi r31,hi8(sendbuffer) 151 0014 80E3 ldi r24,lo8(48) 152 .L2: 24:test.c **** 25:test.c **** for( i = 0; i < 128; i++ ) 26:test.c **** { 27:test.c **** sendbuffer[i] = 0x30 + i; 154 .LM6: 155 0016 8193 st Z+,r24 156 0018 8F5F subi r24,lo8(-(1)) 25:test.c **** { 158 .LM7: 159 001a 803B cpi r24,lo8(-80) 160 001c 01F4 brne .L2 161 .LBB9: 162 .LBB10: 164 .Ltext1: 1:/usr/lib/avr/include/util/delay.h **** /* Copyright (c) 2002, Marek Michalkiewicz 2:/usr/lib/avr/include/util/delay.h **** Copyright (c) 2004,2005,2007 Joerg Wunsch 3:/usr/lib/avr/include/util/delay.h **** Copyright (c) 2007 Florin-Viorel Petrov 4:/usr/lib/avr/include/util/delay.h **** All rights reserved. 5:/usr/lib/avr/include/util/delay.h **** 6:/usr/lib/avr/include/util/delay.h **** Redistribution and use in source and binary forms, with or without 7:/usr/lib/avr/include/util/delay.h **** modification, are permitted provided that the following conditions are met: 8:/usr/lib/avr/include/util/delay.h **** 9:/usr/lib/avr/include/util/delay.h **** * Redistributions of source code must retain the above copyright 10:/usr/lib/avr/include/util/delay.h **** notice, this list of conditions and the following disclaimer. 11:/usr/lib/avr/include/util/delay.h **** 12:/usr/lib/avr/include/util/delay.h **** * Redistributions in binary form must reproduce the above copyright 13:/usr/lib/avr/include/util/delay.h **** notice, this list of conditions and the following disclaimer in 14:/usr/lib/avr/include/util/delay.h **** the documentation and/or other materials provided with the 15:/usr/lib/avr/include/util/delay.h **** distribution. 16:/usr/lib/avr/include/util/delay.h **** 17:/usr/lib/avr/include/util/delay.h **** * Neither the name of the copyright holders nor the names of 18:/usr/lib/avr/include/util/delay.h **** contributors may be used to endorse or promote products derived 19:/usr/lib/avr/include/util/delay.h **** from this software without specific prior written permission. 20:/usr/lib/avr/include/util/delay.h **** 21:/usr/lib/avr/include/util/delay.h **** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22:/usr/lib/avr/include/util/delay.h **** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23:/usr/lib/avr/include/util/delay.h **** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24:/usr/lib/avr/include/util/delay.h **** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 25:/usr/lib/avr/include/util/delay.h **** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26:/usr/lib/avr/include/util/delay.h **** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27:/usr/lib/avr/include/util/delay.h **** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28:/usr/lib/avr/include/util/delay.h **** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29:/usr/lib/avr/include/util/delay.h **** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30:/usr/lib/avr/include/util/delay.h **** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31:/usr/lib/avr/include/util/delay.h **** POSSIBILITY OF SUCH DAMAGE. */ 32:/usr/lib/avr/include/util/delay.h **** 33:/usr/lib/avr/include/util/delay.h **** /* $Id$ */ 34:/usr/lib/avr/include/util/delay.h **** 35:/usr/lib/avr/include/util/delay.h **** #ifndef _UTIL_DELAY_H_ 36:/usr/lib/avr/include/util/delay.h **** #define _UTIL_DELAY_H_ 1 GAS LISTING /tmp/cc80rrUS.s page 3 37:/usr/lib/avr/include/util/delay.h **** 38:/usr/lib/avr/include/util/delay.h **** #ifndef __HAS_DELAY_CYCLES 39:/usr/lib/avr/include/util/delay.h **** #define __HAS_DELAY_CYCLES 1 40:/usr/lib/avr/include/util/delay.h **** #endif 41:/usr/lib/avr/include/util/delay.h **** 42:/usr/lib/avr/include/util/delay.h **** #include 43:/usr/lib/avr/include/util/delay.h **** #include 44:/usr/lib/avr/include/util/delay.h **** #include 45:/usr/lib/avr/include/util/delay.h **** 46:/usr/lib/avr/include/util/delay.h **** /** \file */ 47:/usr/lib/avr/include/util/delay.h **** /** \defgroup util_delay : Convenience functions for busy-wait delay loops 48:/usr/lib/avr/include/util/delay.h **** \code 49:/usr/lib/avr/include/util/delay.h **** #define F_CPU 1000000UL // 1 MHz 50:/usr/lib/avr/include/util/delay.h **** //#define F_CPU 14.7456E6 51:/usr/lib/avr/include/util/delay.h **** #include 52:/usr/lib/avr/include/util/delay.h **** \endcode 53:/usr/lib/avr/include/util/delay.h **** 54:/usr/lib/avr/include/util/delay.h **** \note As an alternative method, it is possible to pass the 55:/usr/lib/avr/include/util/delay.h **** F_CPU macro down to the compiler from the Makefile. 56:/usr/lib/avr/include/util/delay.h **** Obviously, in that case, no \c \#define statement should be 57:/usr/lib/avr/include/util/delay.h **** used. 58:/usr/lib/avr/include/util/delay.h **** 59:/usr/lib/avr/include/util/delay.h **** The functions in this header file are wrappers around the basic 60:/usr/lib/avr/include/util/delay.h **** busy-wait functions from . They are meant as 61:/usr/lib/avr/include/util/delay.h **** convenience functions where actual time values can be specified 62:/usr/lib/avr/include/util/delay.h **** rather than a number of cycles to wait for. The idea behind is 63:/usr/lib/avr/include/util/delay.h **** that compile-time constant expressions will be eliminated by 64:/usr/lib/avr/include/util/delay.h **** compiler optimization so floating-point expressions can be used 65:/usr/lib/avr/include/util/delay.h **** to calculate the number of delay cycles needed based on the CPU 66:/usr/lib/avr/include/util/delay.h **** frequency passed by the macro F_CPU. 67:/usr/lib/avr/include/util/delay.h **** 68:/usr/lib/avr/include/util/delay.h **** \note In order for these functions to work as intended, compiler 69:/usr/lib/avr/include/util/delay.h **** optimizations must be enabled, and the delay time 70:/usr/lib/avr/include/util/delay.h **** must be an expression that is a known constant at 71:/usr/lib/avr/include/util/delay.h **** compile-time. If these requirements are not met, the resulting 72:/usr/lib/avr/include/util/delay.h **** delay will be much longer (and basically unpredictable), and 73:/usr/lib/avr/include/util/delay.h **** applications that otherwise do not use floating-point calculations 74:/usr/lib/avr/include/util/delay.h **** will experience severe code bloat by the floating-point library 75:/usr/lib/avr/include/util/delay.h **** routines linked into the application. 76:/usr/lib/avr/include/util/delay.h **** 77:/usr/lib/avr/include/util/delay.h **** The functions available allow the specification of microsecond, and 78:/usr/lib/avr/include/util/delay.h **** millisecond delays directly, using the application-supplied macro 79:/usr/lib/avr/include/util/delay.h **** F_CPU as the CPU clock frequency (in Hertz). 80:/usr/lib/avr/include/util/delay.h **** 81:/usr/lib/avr/include/util/delay.h **** */ 82:/usr/lib/avr/include/util/delay.h **** 83:/usr/lib/avr/include/util/delay.h **** #if !defined(__DOXYGEN__) 84:/usr/lib/avr/include/util/delay.h **** static inline void _delay_us(double __us) __attribute__((always_inline)); 85:/usr/lib/avr/include/util/delay.h **** static inline void _delay_ms(double __ms) __attribute__((always_inline)); 86:/usr/lib/avr/include/util/delay.h **** #endif 87:/usr/lib/avr/include/util/delay.h **** 88:/usr/lib/avr/include/util/delay.h **** #ifndef F_CPU 89:/usr/lib/avr/include/util/delay.h **** /* prevent compiler error by supplying a default */ 90:/usr/lib/avr/include/util/delay.h **** # warning "F_CPU not defined for " 91:/usr/lib/avr/include/util/delay.h **** # define F_CPU 1000000UL 92:/usr/lib/avr/include/util/delay.h **** #endif 93:/usr/lib/avr/include/util/delay.h **** GAS LISTING /tmp/cc80rrUS.s page 4 94:/usr/lib/avr/include/util/delay.h **** #ifndef __OPTIMIZE__ 95:/usr/lib/avr/include/util/delay.h **** # warning "Compiler optimizations disabled; functions from won't work as designed" 96:/usr/lib/avr/include/util/delay.h **** #endif 97:/usr/lib/avr/include/util/delay.h **** 98:/usr/lib/avr/include/util/delay.h **** #if __HAS_DELAY_CYCLES && defined(__OPTIMIZE__) && \ 99:/usr/lib/avr/include/util/delay.h **** !defined(__DELAY_BACKWARD_COMPATIBLE__) && \ 100:/usr/lib/avr/include/util/delay.h **** __STDC_HOSTED__ 101:/usr/lib/avr/include/util/delay.h **** # include 102:/usr/lib/avr/include/util/delay.h **** #endif 103:/usr/lib/avr/include/util/delay.h **** 104:/usr/lib/avr/include/util/delay.h **** /** 105:/usr/lib/avr/include/util/delay.h **** \ingroup util_delay 106:/usr/lib/avr/include/util/delay.h **** 107:/usr/lib/avr/include/util/delay.h **** Perform a delay of \c __ms milliseconds, using _delay_loop_2(). 108:/usr/lib/avr/include/util/delay.h **** 109:/usr/lib/avr/include/util/delay.h **** The macro F_CPU is supposed to be defined to a 110:/usr/lib/avr/include/util/delay.h **** constant defining the CPU clock frequency (in Hertz). 111:/usr/lib/avr/include/util/delay.h **** 112:/usr/lib/avr/include/util/delay.h **** The maximal possible delay is 262.14 ms / F_CPU in MHz. 113:/usr/lib/avr/include/util/delay.h **** 114:/usr/lib/avr/include/util/delay.h **** When the user request delay which exceed the maximum possible one, 115:/usr/lib/avr/include/util/delay.h **** _delay_ms() provides a decreased resolution functionality. In this 116:/usr/lib/avr/include/util/delay.h **** mode _delay_ms() will work with a resolution of 1/10 ms, providing 117:/usr/lib/avr/include/util/delay.h **** delays up to 6.5535 seconds (independent from CPU frequency). The 118:/usr/lib/avr/include/util/delay.h **** user will not be informed about decreased resolution. 119:/usr/lib/avr/include/util/delay.h **** 120:/usr/lib/avr/include/util/delay.h **** If the avr-gcc toolchain has __builtin_avr_delay_cycles(unsigned long) 121:/usr/lib/avr/include/util/delay.h **** support, maximal possible delay is 4294967.295 ms/ F_CPU in MHz. For 122:/usr/lib/avr/include/util/delay.h **** values greater than the maximal possible delay, overflows results in 123:/usr/lib/avr/include/util/delay.h **** no delay i.e., 0ms. 124:/usr/lib/avr/include/util/delay.h **** 125:/usr/lib/avr/include/util/delay.h **** Conversion of __us into clock cycles may not always result in integer. 126:/usr/lib/avr/include/util/delay.h **** By default, the clock cycles rounded up to next integer. This ensures that 127:/usr/lib/avr/include/util/delay.h **** the user gets atleast __us microseconds of delay. 128:/usr/lib/avr/include/util/delay.h **** 129:/usr/lib/avr/include/util/delay.h **** Alternatively, user can define __DELAY_ROUND_DOWN__ and __DELAY_ROUND_CLOSEST__ 130:/usr/lib/avr/include/util/delay.h **** to round down and round to closest integer. 131:/usr/lib/avr/include/util/delay.h **** 132:/usr/lib/avr/include/util/delay.h **** Note: The new implementation of _delay_ms(double __ms) with 133:/usr/lib/avr/include/util/delay.h **** __builtin_avr_delay_cycles(unsigned long) support is not backward compatible. 134:/usr/lib/avr/include/util/delay.h **** User can define __DELAY_BACKWARD_COMPATIBLE__ to get a backward compatible delay. 135:/usr/lib/avr/include/util/delay.h **** Also, the backward compatible 136:/usr/lib/avr/include/util/delay.h **** algorithm will be chosen if the code is compiled in a freestanding 137:/usr/lib/avr/include/util/delay.h **** environment (GCC option \c -ffreestanding), as the math functions 138:/usr/lib/avr/include/util/delay.h **** required for rounding are not available to the compiler then. 139:/usr/lib/avr/include/util/delay.h **** 140:/usr/lib/avr/include/util/delay.h **** */ 141:/usr/lib/avr/include/util/delay.h **** void 142:/usr/lib/avr/include/util/delay.h **** _delay_ms(double __ms) 143:/usr/lib/avr/include/util/delay.h **** { 144:/usr/lib/avr/include/util/delay.h **** double __tmp ; 145:/usr/lib/avr/include/util/delay.h **** #if __HAS_DELAY_CYCLES && defined(__OPTIMIZE__) && \ 146:/usr/lib/avr/include/util/delay.h **** !defined(__DELAY_BACKWARD_COMPATIBLE__) && \ 147:/usr/lib/avr/include/util/delay.h **** __STDC_HOSTED__ 148:/usr/lib/avr/include/util/delay.h **** uint32_t __ticks_dc; 149:/usr/lib/avr/include/util/delay.h **** extern void __builtin_avr_delay_cycles(unsigned long); 150:/usr/lib/avr/include/util/delay.h **** __tmp = ((F_CPU) / 1e3) * __ms; GAS LISTING /tmp/cc80rrUS.s page 5 151:/usr/lib/avr/include/util/delay.h **** 152:/usr/lib/avr/include/util/delay.h **** #if defined(__DELAY_ROUND_DOWN__) 153:/usr/lib/avr/include/util/delay.h **** __ticks_dc = (uint32_t)fabs(__tmp); 154:/usr/lib/avr/include/util/delay.h **** 155:/usr/lib/avr/include/util/delay.h **** #elif defined(__DELAY_ROUND_CLOSEST__) 156:/usr/lib/avr/include/util/delay.h **** __ticks_dc = (uint32_t)(fabs(__tmp)+0.5); 157:/usr/lib/avr/include/util/delay.h **** 158:/usr/lib/avr/include/util/delay.h **** #else 159:/usr/lib/avr/include/util/delay.h **** //round up by default 160:/usr/lib/avr/include/util/delay.h **** __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); 161:/usr/lib/avr/include/util/delay.h **** #endif 162:/usr/lib/avr/include/util/delay.h **** 163:/usr/lib/avr/include/util/delay.h **** __builtin_avr_delay_cycles(__ticks_dc); 166 .LM8: 167 001e 2FEF ldi r18,lo8(1599999) 168 0020 89E6 ldi r24,hi8(1599999) 169 0022 98E1 ldi r25,hlo8(1599999) 170 0024 2150 1: subi r18,1 171 0026 8040 sbci r24,0 172 0028 9040 sbci r25,0 173 002a 01F4 brne 1b 174 002c 00C0 rjmp . 175 002e 0000 nop 176 .LBE10: 177 .LBE9: 178 .LBB11: 179 .LBB12: 180 0030 2FEF ldi r18,lo8(1599999) 181 0032 89E6 ldi r24,hi8(1599999) 182 0034 98E1 ldi r25,hlo8(1599999) 183 0036 2150 1: subi r18,1 184 0038 8040 sbci r24,0 185 003a 9040 sbci r25,0 186 003c 01F4 brne 1b 187 003e 00C0 rjmp . 188 0040 0000 nop 189 .L3: 190 .LBE12: 191 .LBE11: 193 .Ltext2: 28:test.c **** } 29:test.c **** 30:test.c **** _delay_ms(500); 31:test.c **** SPISendStr( "Tick\n" ); 32:test.c **** _delay_ms(500); 33:test.c **** sendhex2( USBInitState ); 34:test.c **** while( USBInitState <= 1 ); 195 .LM9: 196 0042 8091 0000 lds r24,USBInitState 197 0046 8230 cpi r24,lo8(2) 198 0048 04F0 brlt .L3 199 .LBB13: 35:test.c **** 36:test.c **** uint8_t ras[64]; 37:test.c **** 38:test.c **** 39:test.c **** while(1) GAS LISTING /tmp/cc80rrUS.s page 6 40:test.c **** { 41:test.c **** int i; 42:test.c **** cli(); 43:test.c **** int tmpep = UENUM; 44:test.c **** UENUM = 3; 201 .LM10: 202 004a 33E0 ldi r19,lo8(3) 45:test.c **** if (UEINTX & (1<= sizeof(ras) ) break; 60:test.c **** } 61:test.c **** UEINTX = 0x3A; 62:test.c **** // UEINTX |= _BV(NAKOUTI); 63:test.c **** */ 64:test.c **** UENUM = tmpep; 243 .LM20: 244 0072 2093 E900 sts 233,r18 65:test.c **** sei(); 246 .LM21: 247 /* #APP */ 248 ; 65 "test.c" 1 249 0076 7894 sei 250 ; 0 "" 2 251 /* #NOAPP */ 252 .LBB14: 253 .LBB15: 255 .Ltext3: 257 .LM22: 258 0078 8FE9 ldi r24,lo8(3999) 259 007a 9FE0 ldi r25,hi8(3999) 260 007c 0197 1: sbiw r24,1 261 007e 01F4 brne 1b 262 0080 00C0 rjmp . 263 0082 0000 nop 264 0084 00C0 rjmp .L13 265 .LBE15: 266 .LBE14: 267 .LBE13: 269 .Lscope1: 271 .stabd 78,0,0 272 .comm recvbuffer,32,1 273 .comm sendbuffer,128,1 276 .text 278 .Letext0: 279 .ident "GCC: (GNU) 4.9.2" 280 .global __do_clear_bss GAS LISTING /tmp/cc80rrUS.s page 8 DEFINED SYMBOLS *ABS*:0000000000000000 test.c /tmp/cc80rrUS.s:2 *ABS*:000000000000003e __SP_H__ /tmp/cc80rrUS.s:3 *ABS*:000000000000003d __SP_L__ /tmp/cc80rrUS.s:4 *ABS*:000000000000003f __SREG__ /tmp/cc80rrUS.s:5 *ABS*:0000000000000000 __tmp_reg__ /tmp/cc80rrUS.s:6 *ABS*:0000000000000001 __zero_reg__ /tmp/cc80rrUS.s:116 .text.startup:0000000000000000 main *COM*:0000000000000080 sendbuffer *COM*:0000000000000020 recvbuffer UNDEFINED SYMBOLS USB_ZeroPrescaler USB_Init USBInitState __do_clear_bss GAS LISTING /tmp/cc80rrUS.s page 1 1 .file "usb.c" 2 __SP_H__ = 0x3e 3 __SP_L__ = 0x3d 4 __SREG__ = 0x3f 5 __tmp_reg__ = 0 6 __zero_reg__ = 1 9 .text 10 .Ltext0: 120 usb_wait_in_ready: 121 .stabd 46,0,0 1:usb.c **** 2:usb.c **** #include "usb.h" 3:usb.c **** #include "SPIPrinting.h" 4:usb.c **** #include "usbconfig.h" 5:usb.c **** #include 6:usb.c **** #include 7:usb.c **** 8:usb.c **** //unsigned char USB_Initialized; 9:usb.c **** volatile char USBInitState; 10:usb.c **** 11:usb.c **** // zero when we are not configured, non-zero when enumerated 12:usb.c **** static volatile uint8_t usb_configuration=0; 13:usb.c **** 14:usb.c **** void USB_ZeroPrescaler() 15:usb.c **** { 16:usb.c **** CLKPR=0x80; 17:usb.c **** CLKPR=0x00; 18:usb.c **** } 19:usb.c **** 20:usb.c **** void HandleWSControl(); 21:usb.c **** 22:usb.c **** void USB_Init() 23:usb.c **** { 24:usb.c **** USBInitState = -1; 25:usb.c **** USBCON = (1<= NUM_DESC_LIST) 144:usb.c **** { 145:usb.c **** UECONX = (1< desc_length) len = desc_length; 169:usb.c **** do 170:usb.c **** { 171:usb.c **** // wait for host ready for IN packet 172:usb.c **** do 173:usb.c **** { 174:usb.c **** i = UEINTX; 175:usb.c **** } while (!(i & ((1<Host 249:usb.c **** { 250:usb.c **** // wait for host ready for IN packet 251:usb.c **** do { 252:usb.c **** i = UEINTX; 253:usb.c **** } while (!(i & ((1<>=1; 397:usb.c **** } 398:usb.c **** 399:usb.c **** if( (i & 63) == 0 ) _delay_us(4); 400:usb.c **** } 401:usb.c **** */ 402:usb.c **** 403:usb.c **** //wLength = 1537? 404:usb.c **** 405:usb.c **** //#define EXTRA_HOLD GAS LISTING /tmp/cc80rrUS.s page 12 406:usb.c **** 407:usb.c **** 408:usb.c **** #define SEND_WS( var ) \ 409:usb.c **** mask = 0x80; \ 410:usb.c **** v = var; \ 411:usb.c **** while( mask ) \ 412:usb.c **** { \ 413:usb.c **** if( mask & v ) \ 414:usb.c **** { \ 415:usb.c **** PORTD = set; mask>>=1; \ 416:usb.c **** NOOP; NOOP; NOOP; NOOP; \ 417:usb.c **** NOOP; NOOP; NOOP; NOOP; \ 418:usb.c **** PORTD = rset;\ 419:usb.c **** } \ 420:usb.c **** else \ 421:usb.c **** { \ 422:usb.c **** PORTD = set; NOOP; \ 423:usb.c **** PORTD = rset; \ 424:usb.c **** mask>>=1; \ 425:usb.c **** NOOP; NOOP; NOOP; NOOP; \ 426:usb.c **** } \ 427:usb.c **** \ 428:usb.c **** } 429:usb.c **** 430:usb.c **** l = wLength>>6; 431:usb.c **** int remainder = wLength & 63; 370 .LM36: 371 00da 6701 movw r12,r14 372 00dc 8FE3 ldi r24,63 373 00de C822 and r12,r24 374 00e0 DD24 clr r13 432:usb.c **** 433:usb.c **** uint8_t rmask = _BV(3); 434:usb.c **** uint8_t imask = ~rmask; 435:usb.c **** uint8_t pd = PORTD; 376 .LM37: 377 00e2 9BB0 in r9,0xb 436:usb.c **** 437:usb.c **** #if ENDPOINT0_SIZE != 64 438:usb.c **** #error 64 only 439:usb.c **** #endif 440:usb.c **** 441:usb.c **** #define EXTRA_HOLD 1 442:usb.c **** 443:usb.c **** DDRD = 0xFF; 379 .LM38: 380 00e4 8FEF ldi r24,lo8(-1) 381 00e6 8AB9 out 0xa,r24 444:usb.c **** for( i = 0; i < l; i++ ) 383 .LM39: 384 00e8 66E0 ldi r22,6 385 1: 386 00ea F694 lsr r15 387 00ec E794 ror r14 388 00ee 6A95 dec r22 389 00f0 01F4 brne 1b 390 .LBB46: GAS LISTING /tmp/cc80rrUS.s page 13 445:usb.c **** { 446:usb.c **** rmask = UEDATX; 447:usb.c **** imask = ~rmask; 448:usb.c **** uint8_t set = rmask | pd; 449:usb.c **** uint8_t rset = imask & pd; 450:usb.c **** //SEND_WS(buf[0]); 451:usb.c **** buf[1] = UEDATX; 452:usb.c **** SEND_WS(buf[1]); 453:usb.c **** buf[2] = UEDATX; 454:usb.c **** buf[3] = UEDATX; 455:usb.c **** buf[4] = UEDATX; 456:usb.c **** buf[5] = UEDATX; 457:usb.c **** buf[6] = UEDATX; 458:usb.c **** buf[7] = UEDATX; 459:usb.c **** buf[8] = UEDATX; 460:usb.c **** SEND_WS(buf[2]); 461:usb.c **** buf[9] = UEDATX; 462:usb.c **** buf[10] = UEDATX; 463:usb.c **** buf[11] = UEDATX; 464:usb.c **** buf[12] = UEDATX; 465:usb.c **** SEND_WS(buf[3]); 466:usb.c **** buf[13] = UEDATX; 467:usb.c **** buf[14] = UEDATX; 468:usb.c **** buf[15] = UEDATX; 469:usb.c **** 470:usb.c **** buf[16] = UEDATX; 471:usb.c **** buf[17] = UEDATX; 472:usb.c **** SEND_WS(buf[4]); 473:usb.c **** buf[18] = UEDATX; 474:usb.c **** buf[19] = UEDATX; 475:usb.c **** buf[20] = UEDATX; 476:usb.c **** buf[21] = UEDATX; 477:usb.c **** SEND_WS(buf[5]); 478:usb.c **** buf[22] = UEDATX; 479:usb.c **** buf[23] = UEDATX; 480:usb.c **** buf[24] = UEDATX; 481:usb.c **** SEND_WS(buf[6]); 482:usb.c **** buf[25] = UEDATX; 483:usb.c **** buf[26] = UEDATX; 484:usb.c **** buf[27] = UEDATX; 485:usb.c **** SEND_WS(buf[7]); 486:usb.c **** buf[28] = UEDATX; 487:usb.c **** buf[29] = UEDATX; 488:usb.c **** buf[30] = UEDATX; 489:usb.c **** buf[31] = UEDATX; 490:usb.c **** 491:usb.c **** SEND_WS(buf[8]); 492:usb.c **** 493:usb.c **** buf[32] = UEDATX; 494:usb.c **** buf[33] = UEDATX; 495:usb.c **** buf[34] = UEDATX; 496:usb.c **** buf[35] = UEDATX; 497:usb.c **** SEND_WS(buf[9]); 498:usb.c **** 499:usb.c **** buf[36] = UEDATX; 500:usb.c **** buf[37] = UEDATX; 501:usb.c **** buf[38] = UEDATX; GAS LISTING /tmp/cc80rrUS.s page 14 502:usb.c **** buf[39] = UEDATX; 503:usb.c **** SEND_WS(buf[10]); 504:usb.c **** 505:usb.c **** buf[40] = UEDATX; 506:usb.c **** buf[41] = UEDATX; 507:usb.c **** buf[42] = UEDATX; 508:usb.c **** buf[43] = UEDATX; 509:usb.c **** SEND_WS(buf[11]); 510:usb.c **** buf[44] = UEDATX; 511:usb.c **** buf[45] = UEDATX; 512:usb.c **** buf[46] = UEDATX; 513:usb.c **** buf[47] = UEDATX; 514:usb.c **** 515:usb.c **** SEND_WS(buf[12]); 516:usb.c **** buf[48] = UEDATX; 517:usb.c **** buf[49] = UEDATX; 518:usb.c **** buf[50] = UEDATX; 519:usb.c **** buf[51] = UEDATX; 520:usb.c **** SEND_WS(buf[13]); 521:usb.c **** buf[52] = UEDATX; 522:usb.c **** buf[53] = UEDATX; 523:usb.c **** buf[54] = UEDATX; 524:usb.c **** buf[55] = UEDATX; 525:usb.c **** SEND_WS(buf[14]); 526:usb.c **** buf[56] = UEDATX; 527:usb.c **** buf[57] = UEDATX; 528:usb.c **** buf[58] = UEDATX; 529:usb.c **** buf[59] = UEDATX; 530:usb.c **** SEND_WS(buf[15]); 531:usb.c **** buf[60] = UEDATX; 532:usb.c **** buf[61] = UEDATX; 533:usb.c **** buf[62] = UEDATX; 534:usb.c **** buf[63] = UEDATX; 392 .LM40: 393 00f2 FE01 movw r30,r28 394 00f4 E05C subi r30,-64 395 00f6 FF4F sbci r31,-1 396 00f8 5F01 movw r10,r30 397 .LBB47: 398 .LBB48: 96:usb.c **** } 400 .LM41: 401 00fa 7BEF ldi r23,lo8(-5) 402 00fc 872E mov r8,r23 403 .L21: 404 .LBE48: 405 .LBE47: 406 .LBE46: 444:usb.c **** for( i = 0; i < l; i++ ) 408 .LM42: 409 00fe E114 cp r14,__zero_reg__ 410 0100 F104 cpc r15,__zero_reg__ 411 0102 01F4 brne .+2 412 0104 00C0 rjmp .L105 413 .LBB53: 446:usb.c **** imask = ~rmask; 415 .LM43: GAS LISTING /tmp/cc80rrUS.s page 15 416 0106 1091 F100 lds r17,241 448:usb.c **** uint8_t rset = imask & pd; 418 .LM44: 419 010a 012F mov r16,r17 420 010c 0929 or r16,r9 447:usb.c **** uint8_t set = rmask | pd; 422 .LM45: 423 010e 1095 com r17 449:usb.c **** //SEND_WS(buf[0]); 425 .LM46: 426 0110 1921 and r17,r9 451:usb.c **** SEND_WS(buf[1]); 428 .LM47: 429 0112 9091 F100 lds r25,241 430 0116 9A83 std Y+2,r25 452:usb.c **** buf[2] = UEDATX; 432 .LM48: 433 0118 50E8 ldi r21,lo8(-128) 434 011a 252E mov r2,r21 435 .L22: 452:usb.c **** buf[2] = UEDATX; 437 .LM49: 438 011c 2220 tst r2 439 011e 01F0 breq .L106 452:usb.c **** buf[2] = UEDATX; 441 .LM50: 442 0120 822D mov r24,r2 443 0122 8923 and r24,r25 444 0124 0BB9 out 0xb,r16 445 0126 8823 tst r24 446 0128 01F0 breq .L23 452:usb.c **** buf[2] = UEDATX; 448 .LM51: 449 012a 2694 lsr r2 450 /* #APP */ 451 ; 452 "usb.c" 1 452 012c 0000 nop 453 ; 0 "" 2 454 ; 452 "usb.c" 1 455 012e 0000 nop 456 ; 0 "" 2 457 ; 452 "usb.c" 1 458 0130 0000 nop 459 ; 0 "" 2 460 ; 452 "usb.c" 1 461 0132 0000 nop 462 ; 0 "" 2 463 ; 452 "usb.c" 1 464 0134 0000 nop 465 ; 0 "" 2 466 ; 452 "usb.c" 1 467 0136 0000 nop 468 ; 0 "" 2 469 ; 452 "usb.c" 1 470 0138 0000 nop 471 ; 0 "" 2 472 ; 452 "usb.c" 1 GAS LISTING /tmp/cc80rrUS.s page 16 473 013a 0000 nop 474 ; 0 "" 2 475 /* #NOAPP */ 476 013c 1BB9 out 0xb,r17 477 013e 00C0 rjmp .L22 478 .L23: 452:usb.c **** buf[2] = UEDATX; 480 .LM52: 481 /* #APP */ 482 ; 452 "usb.c" 1 483 0140 0000 nop 484 ; 0 "" 2 485 /* #NOAPP */ 486 0142 1BB9 out 0xb,r17 487 0144 2694 lsr r2 488 /* #APP */ 489 ; 452 "usb.c" 1 490 0146 0000 nop 491 ; 0 "" 2 492 ; 452 "usb.c" 1 493 0148 0000 nop 494 ; 0 "" 2 495 ; 452 "usb.c" 1 496 014a 0000 nop 497 ; 0 "" 2 498 ; 452 "usb.c" 1 499 014c 0000 nop 500 ; 0 "" 2 501 /* #NOAPP */ 502 014e 00C0 rjmp .L22 503 .L106: 453:usb.c **** buf[3] = UEDATX; 505 .LM53: 506 0150 9091 F100 lds r25,241 507 0154 9B83 std Y+3,r25 454:usb.c **** buf[4] = UEDATX; 509 .LM54: 510 0156 8091 F100 lds r24,241 511 015a 8C83 std Y+4,r24 455:usb.c **** buf[5] = UEDATX; 513 .LM55: 514 015c 8091 F100 lds r24,241 515 0160 8D83 std Y+5,r24 456:usb.c **** buf[6] = UEDATX; 517 .LM56: 518 0162 8091 F100 lds r24,241 519 0166 8E83 std Y+6,r24 457:usb.c **** buf[7] = UEDATX; 521 .LM57: 522 0168 8091 F100 lds r24,241 523 016c 8F83 std Y+7,r24 458:usb.c **** buf[8] = UEDATX; 525 .LM58: 526 016e 8091 F100 lds r24,241 527 0172 8887 std Y+8,r24 459:usb.c **** SEND_WS(buf[2]); 529 .LM59: GAS LISTING /tmp/cc80rrUS.s page 17 530 0174 8091 F100 lds r24,241 531 0178 8987 std Y+9,r24 460:usb.c **** buf[9] = UEDATX; 533 .LM60: 534 017a 40E8 ldi r20,lo8(-128) 535 017c 242E mov r2,r20 536 .L26: 460:usb.c **** buf[9] = UEDATX; 538 .LM61: 539 017e 2220 tst r2 540 0180 01F0 breq .L107 460:usb.c **** buf[9] = UEDATX; 542 .LM62: 543 0182 822D mov r24,r2 544 0184 8923 and r24,r25 545 0186 0BB9 out 0xb,r16 546 0188 8823 tst r24 547 018a 01F0 breq .L27 460:usb.c **** buf[9] = UEDATX; 549 .LM63: 550 018c 2694 lsr r2 551 /* #APP */ 552 ; 460 "usb.c" 1 553 018e 0000 nop 554 ; 0 "" 2 555 ; 460 "usb.c" 1 556 0190 0000 nop 557 ; 0 "" 2 558 ; 460 "usb.c" 1 559 0192 0000 nop 560 ; 0 "" 2 561 ; 460 "usb.c" 1 562 0194 0000 nop 563 ; 0 "" 2 564 ; 460 "usb.c" 1 565 0196 0000 nop 566 ; 0 "" 2 567 ; 460 "usb.c" 1 568 0198 0000 nop 569 ; 0 "" 2 570 ; 460 "usb.c" 1 571 019a 0000 nop 572 ; 0 "" 2 573 ; 460 "usb.c" 1 574 019c 0000 nop 575 ; 0 "" 2 576 /* #NOAPP */ 577 019e 1BB9 out 0xb,r17 578 01a0 00C0 rjmp .L26 579 .L27: 460:usb.c **** buf[9] = UEDATX; 581 .LM64: 582 /* #APP */ 583 ; 460 "usb.c" 1 584 01a2 0000 nop 585 ; 0 "" 2 586 /* #NOAPP */ GAS LISTING /tmp/cc80rrUS.s page 18 587 01a4 1BB9 out 0xb,r17 588 01a6 2694 lsr r2 589 /* #APP */ 590 ; 460 "usb.c" 1 591 01a8 0000 nop 592 ; 0 "" 2 593 ; 460 "usb.c" 1 594 01aa 0000 nop 595 ; 0 "" 2 596 ; 460 "usb.c" 1 597 01ac 0000 nop 598 ; 0 "" 2 599 ; 460 "usb.c" 1 600 01ae 0000 nop 601 ; 0 "" 2 602 /* #NOAPP */ 603 01b0 00C0 rjmp .L26 604 .L107: 461:usb.c **** buf[10] = UEDATX; 606 .LM65: 607 01b2 8091 F100 lds r24,241 608 01b6 8A87 std Y+10,r24 462:usb.c **** buf[11] = UEDATX; 610 .LM66: 611 01b8 8091 F100 lds r24,241 612 01bc 8B87 std Y+11,r24 463:usb.c **** buf[12] = UEDATX; 614 .LM67: 615 01be 8091 F100 lds r24,241 616 01c2 8C87 std Y+12,r24 464:usb.c **** SEND_WS(buf[3]); 618 .LM68: 619 01c4 8091 F100 lds r24,241 620 01c8 8D87 std Y+13,r24 465:usb.c **** buf[13] = UEDATX; 622 .LM69: 623 01ca 30E8 ldi r19,lo8(-128) 624 01cc 232E mov r2,r19 625 01ce 9C81 ldd r25,Y+4 626 .L30: 465:usb.c **** buf[13] = UEDATX; 628 .LM70: 629 01d0 2220 tst r2 630 01d2 01F0 breq .L108 465:usb.c **** buf[13] = UEDATX; 632 .LM71: 633 01d4 822D mov r24,r2 634 01d6 8923 and r24,r25 635 01d8 0BB9 out 0xb,r16 636 01da 8823 tst r24 637 01dc 01F0 breq .L31 465:usb.c **** buf[13] = UEDATX; 639 .LM72: 640 01de 2694 lsr r2 641 /* #APP */ 642 ; 465 "usb.c" 1 643 01e0 0000 nop GAS LISTING /tmp/cc80rrUS.s page 19 644 ; 0 "" 2 645 ; 465 "usb.c" 1 646 01e2 0000 nop 647 ; 0 "" 2 648 ; 465 "usb.c" 1 649 01e4 0000 nop 650 ; 0 "" 2 651 ; 465 "usb.c" 1 652 01e6 0000 nop 653 ; 0 "" 2 654 ; 465 "usb.c" 1 655 01e8 0000 nop 656 ; 0 "" 2 657 ; 465 "usb.c" 1 658 01ea 0000 nop 659 ; 0 "" 2 660 ; 465 "usb.c" 1 661 01ec 0000 nop 662 ; 0 "" 2 663 ; 465 "usb.c" 1 664 01ee 0000 nop 665 ; 0 "" 2 666 /* #NOAPP */ 667 01f0 1BB9 out 0xb,r17 668 01f2 00C0 rjmp .L30 669 .L31: 465:usb.c **** buf[13] = UEDATX; 671 .LM73: 672 /* #APP */ 673 ; 465 "usb.c" 1 674 01f4 0000 nop 675 ; 0 "" 2 676 /* #NOAPP */ 677 01f6 1BB9 out 0xb,r17 678 01f8 2694 lsr r2 679 /* #APP */ 680 ; 465 "usb.c" 1 681 01fa 0000 nop 682 ; 0 "" 2 683 ; 465 "usb.c" 1 684 01fc 0000 nop 685 ; 0 "" 2 686 ; 465 "usb.c" 1 687 01fe 0000 nop 688 ; 0 "" 2 689 ; 465 "usb.c" 1 690 0200 0000 nop 691 ; 0 "" 2 692 /* #NOAPP */ 693 0202 00C0 rjmp .L30 694 .L108: 466:usb.c **** buf[14] = UEDATX; 696 .LM74: 697 0204 8091 F100 lds r24,241 698 0208 8E87 std Y+14,r24 467:usb.c **** buf[15] = UEDATX; 700 .LM75: GAS LISTING /tmp/cc80rrUS.s page 20 701 020a 8091 F100 lds r24,241 702 020e 8F87 std Y+15,r24 468:usb.c **** 704 .LM76: 705 0210 8091 F100 lds r24,241 706 0214 888B std Y+16,r24 470:usb.c **** buf[17] = UEDATX; 708 .LM77: 709 0216 8091 F100 lds r24,241 710 021a 898B std Y+17,r24 471:usb.c **** SEND_WS(buf[4]); 712 .LM78: 713 021c 8091 F100 lds r24,241 714 0220 8A8B std Y+18,r24 472:usb.c **** buf[18] = UEDATX; 716 .LM79: 717 0222 20E8 ldi r18,lo8(-128) 718 0224 222E mov r2,r18 719 0226 9D81 ldd r25,Y+5 720 .L34: 472:usb.c **** buf[18] = UEDATX; 722 .LM80: 723 0228 2220 tst r2 724 022a 01F0 breq .L109 472:usb.c **** buf[18] = UEDATX; 726 .LM81: 727 022c 822D mov r24,r2 728 022e 8923 and r24,r25 729 0230 0BB9 out 0xb,r16 730 0232 8823 tst r24 731 0234 01F0 breq .L35 472:usb.c **** buf[18] = UEDATX; 733 .LM82: 734 0236 2694 lsr r2 735 /* #APP */ 736 ; 472 "usb.c" 1 737 0238 0000 nop 738 ; 0 "" 2 739 ; 472 "usb.c" 1 740 023a 0000 nop 741 ; 0 "" 2 742 ; 472 "usb.c" 1 743 023c 0000 nop 744 ; 0 "" 2 745 ; 472 "usb.c" 1 746 023e 0000 nop 747 ; 0 "" 2 748 ; 472 "usb.c" 1 749 0240 0000 nop 750 ; 0 "" 2 751 ; 472 "usb.c" 1 752 0242 0000 nop 753 ; 0 "" 2 754 ; 472 "usb.c" 1 755 0244 0000 nop 756 ; 0 "" 2 757 ; 472 "usb.c" 1 GAS LISTING /tmp/cc80rrUS.s page 21 758 0246 0000 nop 759 ; 0 "" 2 760 /* #NOAPP */ 761 0248 1BB9 out 0xb,r17 762 024a 00C0 rjmp .L34 763 .L35: 472:usb.c **** buf[18] = UEDATX; 765 .LM83: 766 /* #APP */ 767 ; 472 "usb.c" 1 768 024c 0000 nop 769 ; 0 "" 2 770 /* #NOAPP */ 771 024e 1BB9 out 0xb,r17 772 0250 2694 lsr r2 773 /* #APP */ 774 ; 472 "usb.c" 1 775 0252 0000 nop 776 ; 0 "" 2 777 ; 472 "usb.c" 1 778 0254 0000 nop 779 ; 0 "" 2 780 ; 472 "usb.c" 1 781 0256 0000 nop 782 ; 0 "" 2 783 ; 472 "usb.c" 1 784 0258 0000 nop 785 ; 0 "" 2 786 /* #NOAPP */ 787 025a 00C0 rjmp .L34 788 .L109: 473:usb.c **** buf[19] = UEDATX; 790 .LM84: 791 025c 8091 F100 lds r24,241 792 0260 8B8B std Y+19,r24 474:usb.c **** buf[20] = UEDATX; 794 .LM85: 795 0262 8091 F100 lds r24,241 796 0266 8C8B std Y+20,r24 475:usb.c **** buf[21] = UEDATX; 798 .LM86: 799 0268 8091 F100 lds r24,241 800 026c 8D8B std Y+21,r24 476:usb.c **** SEND_WS(buf[5]); 802 .LM87: 803 026e 8091 F100 lds r24,241 804 0272 8E8B std Y+22,r24 477:usb.c **** buf[22] = UEDATX; 806 .LM88: 807 0274 90E8 ldi r25,lo8(-128) 808 0276 292E mov r2,r25 809 0278 9E81 ldd r25,Y+6 810 .L38: 477:usb.c **** buf[22] = UEDATX; 812 .LM89: 813 027a 2220 tst r2 814 027c 01F0 breq .L110 GAS LISTING /tmp/cc80rrUS.s page 22 477:usb.c **** buf[22] = UEDATX; 816 .LM90: 817 027e 822D mov r24,r2 818 0280 8923 and r24,r25 819 0282 0BB9 out 0xb,r16 820 0284 8823 tst r24 821 0286 01F0 breq .L39 477:usb.c **** buf[22] = UEDATX; 823 .LM91: 824 0288 2694 lsr r2 825 /* #APP */ 826 ; 477 "usb.c" 1 827 028a 0000 nop 828 ; 0 "" 2 829 ; 477 "usb.c" 1 830 028c 0000 nop 831 ; 0 "" 2 832 ; 477 "usb.c" 1 833 028e 0000 nop 834 ; 0 "" 2 835 ; 477 "usb.c" 1 836 0290 0000 nop 837 ; 0 "" 2 838 ; 477 "usb.c" 1 839 0292 0000 nop 840 ; 0 "" 2 841 ; 477 "usb.c" 1 842 0294 0000 nop 843 ; 0 "" 2 844 ; 477 "usb.c" 1 845 0296 0000 nop 846 ; 0 "" 2 847 ; 477 "usb.c" 1 848 0298 0000 nop 849 ; 0 "" 2 850 /* #NOAPP */ 851 029a 1BB9 out 0xb,r17 852 029c 00C0 rjmp .L38 853 .L39: 477:usb.c **** buf[22] = UEDATX; 855 .LM92: 856 /* #APP */ 857 ; 477 "usb.c" 1 858 029e 0000 nop 859 ; 0 "" 2 860 /* #NOAPP */ 861 02a0 1BB9 out 0xb,r17 862 02a2 2694 lsr r2 863 /* #APP */ 864 ; 477 "usb.c" 1 865 02a4 0000 nop 866 ; 0 "" 2 867 ; 477 "usb.c" 1 868 02a6 0000 nop 869 ; 0 "" 2 870 ; 477 "usb.c" 1 871 02a8 0000 nop GAS LISTING /tmp/cc80rrUS.s page 23 872 ; 0 "" 2 873 ; 477 "usb.c" 1 874 02aa 0000 nop 875 ; 0 "" 2 876 /* #NOAPP */ 877 02ac 00C0 rjmp .L38 878 .L110: 478:usb.c **** buf[23] = UEDATX; 880 .LM93: 881 02ae 8091 F100 lds r24,241 882 02b2 8F8B std Y+23,r24 479:usb.c **** buf[24] = UEDATX; 884 .LM94: 885 02b4 8091 F100 lds r24,241 886 02b8 888F std Y+24,r24 480:usb.c **** SEND_WS(buf[6]); 888 .LM95: 889 02ba 8091 F100 lds r24,241 890 02be 898F std Y+25,r24 481:usb.c **** buf[25] = UEDATX; 892 .LM96: 893 02c0 80E8 ldi r24,lo8(-128) 894 02c2 282E mov r2,r24 895 02c4 9F81 ldd r25,Y+7 896 .L42: 481:usb.c **** buf[25] = UEDATX; 898 .LM97: 899 02c6 2220 tst r2 900 02c8 01F0 breq .L111 481:usb.c **** buf[25] = UEDATX; 902 .LM98: 903 02ca 822D mov r24,r2 904 02cc 8923 and r24,r25 905 02ce 0BB9 out 0xb,r16 906 02d0 8823 tst r24 907 02d2 01F0 breq .L43 481:usb.c **** buf[25] = UEDATX; 909 .LM99: 910 02d4 2694 lsr r2 911 /* #APP */ 912 ; 481 "usb.c" 1 913 02d6 0000 nop 914 ; 0 "" 2 915 ; 481 "usb.c" 1 916 02d8 0000 nop 917 ; 0 "" 2 918 ; 481 "usb.c" 1 919 02da 0000 nop 920 ; 0 "" 2 921 ; 481 "usb.c" 1 922 02dc 0000 nop 923 ; 0 "" 2 924 ; 481 "usb.c" 1 925 02de 0000 nop 926 ; 0 "" 2 927 ; 481 "usb.c" 1 928 02e0 0000 nop GAS LISTING /tmp/cc80rrUS.s page 24 929 ; 0 "" 2 930 ; 481 "usb.c" 1 931 02e2 0000 nop 932 ; 0 "" 2 933 ; 481 "usb.c" 1 934 02e4 0000 nop 935 ; 0 "" 2 936 /* #NOAPP */ 937 02e6 1BB9 out 0xb,r17 938 02e8 00C0 rjmp .L42 939 .L43: 481:usb.c **** buf[25] = UEDATX; 941 .LM100: 942 /* #APP */ 943 ; 481 "usb.c" 1 944 02ea 0000 nop 945 ; 0 "" 2 946 /* #NOAPP */ 947 02ec 1BB9 out 0xb,r17 948 02ee 2694 lsr r2 949 /* #APP */ 950 ; 481 "usb.c" 1 951 02f0 0000 nop 952 ; 0 "" 2 953 ; 481 "usb.c" 1 954 02f2 0000 nop 955 ; 0 "" 2 956 ; 481 "usb.c" 1 957 02f4 0000 nop 958 ; 0 "" 2 959 ; 481 "usb.c" 1 960 02f6 0000 nop 961 ; 0 "" 2 962 /* #NOAPP */ 963 02f8 00C0 rjmp .L42 964 .L111: 482:usb.c **** buf[26] = UEDATX; 966 .LM101: 967 02fa 8091 F100 lds r24,241 968 02fe 8A8F std Y+26,r24 483:usb.c **** buf[27] = UEDATX; 970 .LM102: 971 0300 8091 F100 lds r24,241 972 0304 8B8F std Y+27,r24 484:usb.c **** SEND_WS(buf[7]); 974 .LM103: 975 0306 8091 F100 lds r24,241 976 030a 8C8F std Y+28,r24 485:usb.c **** buf[28] = UEDATX; 978 .LM104: 979 030c B0E8 ldi r27,lo8(-128) 980 030e 2B2E mov r2,r27 981 0310 9885 ldd r25,Y+8 982 .L46: 485:usb.c **** buf[28] = UEDATX; 984 .LM105: 985 0312 2220 tst r2 GAS LISTING /tmp/cc80rrUS.s page 25 986 0314 01F0 breq .L112 485:usb.c **** buf[28] = UEDATX; 988 .LM106: 989 0316 822D mov r24,r2 990 0318 8923 and r24,r25 991 031a 0BB9 out 0xb,r16 992 031c 8823 tst r24 993 031e 01F0 breq .L47 485:usb.c **** buf[28] = UEDATX; 995 .LM107: 996 0320 2694 lsr r2 997 /* #APP */ 998 ; 485 "usb.c" 1 999 0322 0000 nop 1000 ; 0 "" 2 1001 ; 485 "usb.c" 1 1002 0324 0000 nop 1003 ; 0 "" 2 1004 ; 485 "usb.c" 1 1005 0326 0000 nop 1006 ; 0 "" 2 1007 ; 485 "usb.c" 1 1008 0328 0000 nop 1009 ; 0 "" 2 1010 ; 485 "usb.c" 1 1011 032a 0000 nop 1012 ; 0 "" 2 1013 ; 485 "usb.c" 1 1014 032c 0000 nop 1015 ; 0 "" 2 1016 ; 485 "usb.c" 1 1017 032e 0000 nop 1018 ; 0 "" 2 1019 ; 485 "usb.c" 1 1020 0330 0000 nop 1021 ; 0 "" 2 1022 /* #NOAPP */ 1023 0332 1BB9 out 0xb,r17 1024 0334 00C0 rjmp .L46 1025 .L47: 485:usb.c **** buf[28] = UEDATX; 1027 .LM108: 1028 /* #APP */ 1029 ; 485 "usb.c" 1 1030 0336 0000 nop 1031 ; 0 "" 2 1032 /* #NOAPP */ 1033 0338 1BB9 out 0xb,r17 1034 033a 2694 lsr r2 1035 /* #APP */ 1036 ; 485 "usb.c" 1 1037 033c 0000 nop 1038 ; 0 "" 2 1039 ; 485 "usb.c" 1 1040 033e 0000 nop 1041 ; 0 "" 2 1042 ; 485 "usb.c" 1 GAS LISTING /tmp/cc80rrUS.s page 26 1043 0340 0000 nop 1044 ; 0 "" 2 1045 ; 485 "usb.c" 1 1046 0342 0000 nop 1047 ; 0 "" 2 1048 /* #NOAPP */ 1049 0344 00C0 rjmp .L46 1050 .L112: 486:usb.c **** buf[29] = UEDATX; 1052 .LM109: 1053 0346 8091 F100 lds r24,241 1054 034a 8D8F std Y+29,r24 487:usb.c **** buf[30] = UEDATX; 1056 .LM110: 1057 034c 8091 F100 lds r24,241 1058 0350 8E8F std Y+30,r24 488:usb.c **** buf[31] = UEDATX; 1060 .LM111: 1061 0352 8091 F100 lds r24,241 1062 0356 8F8F std Y+31,r24 489:usb.c **** 1064 .LM112: 1065 0358 8091 F100 lds r24,241 1066 035c 88A3 std Y+32,r24 491:usb.c **** 1068 .LM113: 1069 035e A0E8 ldi r26,lo8(-128) 1070 0360 2A2E mov r2,r26 1071 0362 9985 ldd r25,Y+9 1072 .L50: 491:usb.c **** 1074 .LM114: 1075 0364 2220 tst r2 1076 0366 01F0 breq .L113 491:usb.c **** 1078 .LM115: 1079 0368 822D mov r24,r2 1080 036a 8923 and r24,r25 1081 036c 0BB9 out 0xb,r16 1082 036e 8823 tst r24 1083 0370 01F0 breq .L51 491:usb.c **** 1085 .LM116: 1086 0372 2694 lsr r2 1087 /* #APP */ 1088 ; 491 "usb.c" 1 1089 0374 0000 nop 1090 ; 0 "" 2 1091 ; 491 "usb.c" 1 1092 0376 0000 nop 1093 ; 0 "" 2 1094 ; 491 "usb.c" 1 1095 0378 0000 nop 1096 ; 0 "" 2 1097 ; 491 "usb.c" 1 1098 037a 0000 nop 1099 ; 0 "" 2 GAS LISTING /tmp/cc80rrUS.s page 27 1100 ; 491 "usb.c" 1 1101 037c 0000 nop 1102 ; 0 "" 2 1103 ; 491 "usb.c" 1 1104 037e 0000 nop 1105 ; 0 "" 2 1106 ; 491 "usb.c" 1 1107 0380 0000 nop 1108 ; 0 "" 2 1109 ; 491 "usb.c" 1 1110 0382 0000 nop 1111 ; 0 "" 2 1112 /* #NOAPP */ 1113 0384 1BB9 out 0xb,r17 1114 0386 00C0 rjmp .L50 1115 .L51: 491:usb.c **** 1117 .LM117: 1118 /* #APP */ 1119 ; 491 "usb.c" 1 1120 0388 0000 nop 1121 ; 0 "" 2 1122 /* #NOAPP */ 1123 038a 1BB9 out 0xb,r17 1124 038c 2694 lsr r2 1125 /* #APP */ 1126 ; 491 "usb.c" 1 1127 038e 0000 nop 1128 ; 0 "" 2 1129 ; 491 "usb.c" 1 1130 0390 0000 nop 1131 ; 0 "" 2 1132 ; 491 "usb.c" 1 1133 0392 0000 nop 1134 ; 0 "" 2 1135 ; 491 "usb.c" 1 1136 0394 0000 nop 1137 ; 0 "" 2 1138 /* #NOAPP */ 1139 0396 00C0 rjmp .L50 1140 .L113: 493:usb.c **** buf[33] = UEDATX; 1142 .LM118: 1143 0398 8091 F100 lds r24,241 1144 039c 89A3 std Y+33,r24 494:usb.c **** buf[34] = UEDATX; 1146 .LM119: 1147 039e 8091 F100 lds r24,241 1148 03a2 8AA3 std Y+34,r24 495:usb.c **** buf[35] = UEDATX; 1150 .LM120: 1151 03a4 8091 F100 lds r24,241 1152 03a8 8BA3 std Y+35,r24 496:usb.c **** SEND_WS(buf[9]); 1154 .LM121: 1155 03aa 8091 F100 lds r24,241 1156 03ae 8CA3 std Y+36,r24 GAS LISTING /tmp/cc80rrUS.s page 28 497:usb.c **** 1158 .LM122: 1159 03b0 F0E8 ldi r31,lo8(-128) 1160 03b2 2F2E mov r2,r31 1161 03b4 9A85 ldd r25,Y+10 1162 .L54: 497:usb.c **** 1164 .LM123: 1165 03b6 2220 tst r2 1166 03b8 01F0 breq .L114 497:usb.c **** 1168 .LM124: 1169 03ba 822D mov r24,r2 1170 03bc 8923 and r24,r25 1171 03be 0BB9 out 0xb,r16 1172 03c0 8823 tst r24 1173 03c2 01F0 breq .L55 497:usb.c **** 1175 .LM125: 1176 03c4 2694 lsr r2 1177 /* #APP */ 1178 ; 497 "usb.c" 1 1179 03c6 0000 nop 1180 ; 0 "" 2 1181 ; 497 "usb.c" 1 1182 03c8 0000 nop 1183 ; 0 "" 2 1184 ; 497 "usb.c" 1 1185 03ca 0000 nop 1186 ; 0 "" 2 1187 ; 497 "usb.c" 1 1188 03cc 0000 nop 1189 ; 0 "" 2 1190 ; 497 "usb.c" 1 1191 03ce 0000 nop 1192 ; 0 "" 2 1193 ; 497 "usb.c" 1 1194 03d0 0000 nop 1195 ; 0 "" 2 1196 ; 497 "usb.c" 1 1197 03d2 0000 nop 1198 ; 0 "" 2 1199 ; 497 "usb.c" 1 1200 03d4 0000 nop 1201 ; 0 "" 2 1202 /* #NOAPP */ 1203 03d6 1BB9 out 0xb,r17 1204 03d8 00C0 rjmp .L54 1205 .L55: 497:usb.c **** 1207 .LM126: 1208 /* #APP */ 1209 ; 497 "usb.c" 1 1210 03da 0000 nop 1211 ; 0 "" 2 1212 /* #NOAPP */ 1213 03dc 1BB9 out 0xb,r17 GAS LISTING /tmp/cc80rrUS.s page 29 1214 03de 2694 lsr r2 1215 /* #APP */ 1216 ; 497 "usb.c" 1 1217 03e0 0000 nop 1218 ; 0 "" 2 1219 ; 497 "usb.c" 1 1220 03e2 0000 nop 1221 ; 0 "" 2 1222 ; 497 "usb.c" 1 1223 03e4 0000 nop 1224 ; 0 "" 2 1225 ; 497 "usb.c" 1 1226 03e6 0000 nop 1227 ; 0 "" 2 1228 /* #NOAPP */ 1229 03e8 00C0 rjmp .L54 1230 .L114: 499:usb.c **** buf[37] = UEDATX; 1232 .LM127: 1233 03ea 8091 F100 lds r24,241 1234 03ee 8DA3 std Y+37,r24 500:usb.c **** buf[38] = UEDATX; 1236 .LM128: 1237 03f0 8091 F100 lds r24,241 1238 03f4 8EA3 std Y+38,r24 501:usb.c **** buf[39] = UEDATX; 1240 .LM129: 1241 03f6 8091 F100 lds r24,241 1242 03fa 8FA3 std Y+39,r24 502:usb.c **** SEND_WS(buf[10]); 1244 .LM130: 1245 03fc 8091 F100 lds r24,241 1246 0400 88A7 std Y+40,r24 503:usb.c **** 1248 .LM131: 1249 0402 E0E8 ldi r30,lo8(-128) 1250 0404 2E2E mov r2,r30 1251 0406 9B85 ldd r25,Y+11 1252 .L58: 503:usb.c **** 1254 .LM132: 1255 0408 2220 tst r2 1256 040a 01F0 breq .L115 503:usb.c **** 1258 .LM133: 1259 040c 822D mov r24,r2 1260 040e 8923 and r24,r25 1261 0410 0BB9 out 0xb,r16 1262 0412 8823 tst r24 1263 0414 01F0 breq .L59 503:usb.c **** 1265 .LM134: 1266 0416 2694 lsr r2 1267 /* #APP */ 1268 ; 503 "usb.c" 1 1269 0418 0000 nop 1270 ; 0 "" 2 GAS LISTING /tmp/cc80rrUS.s page 30 1271 ; 503 "usb.c" 1 1272 041a 0000 nop 1273 ; 0 "" 2 1274 ; 503 "usb.c" 1 1275 041c 0000 nop 1276 ; 0 "" 2 1277 ; 503 "usb.c" 1 1278 041e 0000 nop 1279 ; 0 "" 2 1280 ; 503 "usb.c" 1 1281 0420 0000 nop 1282 ; 0 "" 2 1283 ; 503 "usb.c" 1 1284 0422 0000 nop 1285 ; 0 "" 2 1286 ; 503 "usb.c" 1 1287 0424 0000 nop 1288 ; 0 "" 2 1289 ; 503 "usb.c" 1 1290 0426 0000 nop 1291 ; 0 "" 2 1292 /* #NOAPP */ 1293 0428 1BB9 out 0xb,r17 1294 042a 00C0 rjmp .L58 1295 .L59: 503:usb.c **** 1297 .LM135: 1298 /* #APP */ 1299 ; 503 "usb.c" 1 1300 042c 0000 nop 1301 ; 0 "" 2 1302 /* #NOAPP */ 1303 042e 1BB9 out 0xb,r17 1304 0430 2694 lsr r2 1305 /* #APP */ 1306 ; 503 "usb.c" 1 1307 0432 0000 nop 1308 ; 0 "" 2 1309 ; 503 "usb.c" 1 1310 0434 0000 nop 1311 ; 0 "" 2 1312 ; 503 "usb.c" 1 1313 0436 0000 nop 1314 ; 0 "" 2 1315 ; 503 "usb.c" 1 1316 0438 0000 nop 1317 ; 0 "" 2 1318 /* #NOAPP */ 1319 043a 00C0 rjmp .L58 1320 .L115: 505:usb.c **** buf[41] = UEDATX; 1322 .LM136: 1323 043c 8091 F100 lds r24,241 1324 0440 89A7 std Y+41,r24 506:usb.c **** buf[42] = UEDATX; 1326 .LM137: 1327 0442 8091 F100 lds r24,241 GAS LISTING /tmp/cc80rrUS.s page 31 1328 0446 8AA7 std Y+42,r24 507:usb.c **** buf[43] = UEDATX; 1330 .LM138: 1331 0448 8091 F100 lds r24,241 1332 044c 8BA7 std Y+43,r24 508:usb.c **** SEND_WS(buf[11]); 1334 .LM139: 1335 044e 8091 F100 lds r24,241 1336 0452 8CA7 std Y+44,r24 509:usb.c **** buf[44] = UEDATX; 1338 .LM140: 1339 0454 70E8 ldi r23,lo8(-128) 1340 0456 272E mov r2,r23 1341 0458 9C85 ldd r25,Y+12 1342 .L62: 509:usb.c **** buf[44] = UEDATX; 1344 .LM141: 1345 045a 2220 tst r2 1346 045c 01F0 breq .L116 509:usb.c **** buf[44] = UEDATX; 1348 .LM142: 1349 045e 822D mov r24,r2 1350 0460 8923 and r24,r25 1351 0462 0BB9 out 0xb,r16 1352 0464 8823 tst r24 1353 0466 01F0 breq .L63 509:usb.c **** buf[44] = UEDATX; 1355 .LM143: 1356 0468 2694 lsr r2 1357 /* #APP */ 1358 ; 509 "usb.c" 1 1359 046a 0000 nop 1360 ; 0 "" 2 1361 ; 509 "usb.c" 1 1362 046c 0000 nop 1363 ; 0 "" 2 1364 ; 509 "usb.c" 1 1365 046e 0000 nop 1366 ; 0 "" 2 1367 ; 509 "usb.c" 1 1368 0470 0000 nop 1369 ; 0 "" 2 1370 ; 509 "usb.c" 1 1371 0472 0000 nop 1372 ; 0 "" 2 1373 ; 509 "usb.c" 1 1374 0474 0000 nop 1375 ; 0 "" 2 1376 ; 509 "usb.c" 1 1377 0476 0000 nop 1378 ; 0 "" 2 1379 ; 509 "usb.c" 1 1380 0478 0000 nop 1381 ; 0 "" 2 1382 /* #NOAPP */ 1383 047a 1BB9 out 0xb,r17 1384 047c 00C0 rjmp .L62 GAS LISTING /tmp/cc80rrUS.s page 32 1385 .L63: 509:usb.c **** buf[44] = UEDATX; 1387 .LM144: 1388 /* #APP */ 1389 ; 509 "usb.c" 1 1390 047e 0000 nop 1391 ; 0 "" 2 1392 /* #NOAPP */ 1393 0480 1BB9 out 0xb,r17 1394 0482 2694 lsr r2 1395 /* #APP */ 1396 ; 509 "usb.c" 1 1397 0484 0000 nop 1398 ; 0 "" 2 1399 ; 509 "usb.c" 1 1400 0486 0000 nop 1401 ; 0 "" 2 1402 ; 509 "usb.c" 1 1403 0488 0000 nop 1404 ; 0 "" 2 1405 ; 509 "usb.c" 1 1406 048a 0000 nop 1407 ; 0 "" 2 1408 /* #NOAPP */ 1409 048c 00C0 rjmp .L62 1410 .L116: 510:usb.c **** buf[45] = UEDATX; 1412 .LM145: 1413 048e 8091 F100 lds r24,241 1414 0492 8DA7 std Y+45,r24 511:usb.c **** buf[46] = UEDATX; 1416 .LM146: 1417 0494 8091 F100 lds r24,241 1418 0498 8EA7 std Y+46,r24 512:usb.c **** buf[47] = UEDATX; 1420 .LM147: 1421 049a 8091 F100 lds r24,241 1422 049e 8FA7 std Y+47,r24 513:usb.c **** 1424 .LM148: 1425 04a0 8091 F100 lds r24,241 1426 04a4 88AB std Y+48,r24 515:usb.c **** buf[48] = UEDATX; 1428 .LM149: 1429 04a6 60E8 ldi r22,lo8(-128) 1430 04a8 262E mov r2,r22 1431 04aa 9D85 ldd r25,Y+13 1432 .L66: 515:usb.c **** buf[48] = UEDATX; 1434 .LM150: 1435 04ac 2220 tst r2 1436 04ae 01F0 breq .L117 515:usb.c **** buf[48] = UEDATX; 1438 .LM151: 1439 04b0 822D mov r24,r2 1440 04b2 8923 and r24,r25 1441 04b4 0BB9 out 0xb,r16 GAS LISTING /tmp/cc80rrUS.s page 33 1442 04b6 8823 tst r24 1443 04b8 01F0 breq .L67 515:usb.c **** buf[48] = UEDATX; 1445 .LM152: 1446 04ba 2694 lsr r2 1447 /* #APP */ 1448 ; 515 "usb.c" 1 1449 04bc 0000 nop 1450 ; 0 "" 2 1451 ; 515 "usb.c" 1 1452 04be 0000 nop 1453 ; 0 "" 2 1454 ; 515 "usb.c" 1 1455 04c0 0000 nop 1456 ; 0 "" 2 1457 ; 515 "usb.c" 1 1458 04c2 0000 nop 1459 ; 0 "" 2 1460 ; 515 "usb.c" 1 1461 04c4 0000 nop 1462 ; 0 "" 2 1463 ; 515 "usb.c" 1 1464 04c6 0000 nop 1465 ; 0 "" 2 1466 ; 515 "usb.c" 1 1467 04c8 0000 nop 1468 ; 0 "" 2 1469 ; 515 "usb.c" 1 1470 04ca 0000 nop 1471 ; 0 "" 2 1472 /* #NOAPP */ 1473 04cc 1BB9 out 0xb,r17 1474 04ce 00C0 rjmp .L66 1475 .L67: 515:usb.c **** buf[48] = UEDATX; 1477 .LM153: 1478 /* #APP */ 1479 ; 515 "usb.c" 1 1480 04d0 0000 nop 1481 ; 0 "" 2 1482 /* #NOAPP */ 1483 04d2 1BB9 out 0xb,r17 1484 04d4 2694 lsr r2 1485 /* #APP */ 1486 ; 515 "usb.c" 1 1487 04d6 0000 nop 1488 ; 0 "" 2 1489 ; 515 "usb.c" 1 1490 04d8 0000 nop 1491 ; 0 "" 2 1492 ; 515 "usb.c" 1 1493 04da 0000 nop 1494 ; 0 "" 2 1495 ; 515 "usb.c" 1 1496 04dc 0000 nop 1497 ; 0 "" 2 1498 /* #NOAPP */ GAS LISTING /tmp/cc80rrUS.s page 34 1499 04de 00C0 rjmp .L66 1500 .L117: 516:usb.c **** buf[49] = UEDATX; 1502 .LM154: 1503 04e0 8091 F100 lds r24,241 1504 04e4 89AB std Y+49,r24 517:usb.c **** buf[50] = UEDATX; 1506 .LM155: 1507 04e6 8091 F100 lds r24,241 1508 04ea 8AAB std Y+50,r24 518:usb.c **** buf[51] = UEDATX; 1510 .LM156: 1511 04ec 8091 F100 lds r24,241 1512 04f0 8BAB std Y+51,r24 519:usb.c **** SEND_WS(buf[13]); 1514 .LM157: 1515 04f2 8091 F100 lds r24,241 1516 04f6 8CAB std Y+52,r24 520:usb.c **** buf[52] = UEDATX; 1518 .LM158: 1519 04f8 50E8 ldi r21,lo8(-128) 1520 04fa 252E mov r2,r21 1521 04fc 9E85 ldd r25,Y+14 1522 .L70: 520:usb.c **** buf[52] = UEDATX; 1524 .LM159: 1525 04fe 2220 tst r2 1526 0500 01F0 breq .L118 520:usb.c **** buf[52] = UEDATX; 1528 .LM160: 1529 0502 822D mov r24,r2 1530 0504 8923 and r24,r25 1531 0506 0BB9 out 0xb,r16 1532 0508 8823 tst r24 1533 050a 01F0 breq .L71 520:usb.c **** buf[52] = UEDATX; 1535 .LM161: 1536 050c 2694 lsr r2 1537 /* #APP */ 1538 ; 520 "usb.c" 1 1539 050e 0000 nop 1540 ; 0 "" 2 1541 ; 520 "usb.c" 1 1542 0510 0000 nop 1543 ; 0 "" 2 1544 ; 520 "usb.c" 1 1545 0512 0000 nop 1546 ; 0 "" 2 1547 ; 520 "usb.c" 1 1548 0514 0000 nop 1549 ; 0 "" 2 1550 ; 520 "usb.c" 1 1551 0516 0000 nop 1552 ; 0 "" 2 1553 ; 520 "usb.c" 1 1554 0518 0000 nop 1555 ; 0 "" 2 GAS LISTING /tmp/cc80rrUS.s page 35 1556 ; 520 "usb.c" 1 1557 051a 0000 nop 1558 ; 0 "" 2 1559 ; 520 "usb.c" 1 1560 051c 0000 nop 1561 ; 0 "" 2 1562 /* #NOAPP */ 1563 051e 1BB9 out 0xb,r17 1564 0520 00C0 rjmp .L70 1565 .L71: 520:usb.c **** buf[52] = UEDATX; 1567 .LM162: 1568 /* #APP */ 1569 ; 520 "usb.c" 1 1570 0522 0000 nop 1571 ; 0 "" 2 1572 /* #NOAPP */ 1573 0524 1BB9 out 0xb,r17 1574 0526 2694 lsr r2 1575 /* #APP */ 1576 ; 520 "usb.c" 1 1577 0528 0000 nop 1578 ; 0 "" 2 1579 ; 520 "usb.c" 1 1580 052a 0000 nop 1581 ; 0 "" 2 1582 ; 520 "usb.c" 1 1583 052c 0000 nop 1584 ; 0 "" 2 1585 ; 520 "usb.c" 1 1586 052e 0000 nop 1587 ; 0 "" 2 1588 /* #NOAPP */ 1589 0530 00C0 rjmp .L70 1590 .L118: 521:usb.c **** buf[53] = UEDATX; 1592 .LM163: 1593 0532 8091 F100 lds r24,241 1594 0536 8DAB std Y+53,r24 522:usb.c **** buf[54] = UEDATX; 1596 .LM164: 1597 0538 8091 F100 lds r24,241 1598 053c 8EAB std Y+54,r24 523:usb.c **** buf[55] = UEDATX; 1600 .LM165: 1601 053e 8091 F100 lds r24,241 1602 0542 8FAB std Y+55,r24 524:usb.c **** SEND_WS(buf[14]); 1604 .LM166: 1605 0544 8091 F100 lds r24,241 1606 0548 88AF std Y+56,r24 525:usb.c **** buf[56] = UEDATX; 1608 .LM167: 1609 054a 40E8 ldi r20,lo8(-128) 1610 054c 242E mov r2,r20 1611 054e 9F85 ldd r25,Y+15 1612 .L74: GAS LISTING /tmp/cc80rrUS.s page 36 525:usb.c **** buf[56] = UEDATX; 1614 .LM168: 1615 0550 2220 tst r2 1616 0552 01F0 breq .L119 525:usb.c **** buf[56] = UEDATX; 1618 .LM169: 1619 0554 822D mov r24,r2 1620 0556 8923 and r24,r25 1621 0558 0BB9 out 0xb,r16 1622 055a 8823 tst r24 1623 055c 01F0 breq .L75 525:usb.c **** buf[56] = UEDATX; 1625 .LM170: 1626 055e 2694 lsr r2 1627 /* #APP */ 1628 ; 525 "usb.c" 1 1629 0560 0000 nop 1630 ; 0 "" 2 1631 ; 525 "usb.c" 1 1632 0562 0000 nop 1633 ; 0 "" 2 1634 ; 525 "usb.c" 1 1635 0564 0000 nop 1636 ; 0 "" 2 1637 ; 525 "usb.c" 1 1638 0566 0000 nop 1639 ; 0 "" 2 1640 ; 525 "usb.c" 1 1641 0568 0000 nop 1642 ; 0 "" 2 1643 ; 525 "usb.c" 1 1644 056a 0000 nop 1645 ; 0 "" 2 1646 ; 525 "usb.c" 1 1647 056c 0000 nop 1648 ; 0 "" 2 1649 ; 525 "usb.c" 1 1650 056e 0000 nop 1651 ; 0 "" 2 1652 /* #NOAPP */ 1653 0570 1BB9 out 0xb,r17 1654 0572 00C0 rjmp .L74 1655 .L75: 525:usb.c **** buf[56] = UEDATX; 1657 .LM171: 1658 /* #APP */ 1659 ; 525 "usb.c" 1 1660 0574 0000 nop 1661 ; 0 "" 2 1662 /* #NOAPP */ 1663 0576 1BB9 out 0xb,r17 1664 0578 2694 lsr r2 1665 /* #APP */ 1666 ; 525 "usb.c" 1 1667 057a 0000 nop 1668 ; 0 "" 2 1669 ; 525 "usb.c" 1 GAS LISTING /tmp/cc80rrUS.s page 37 1670 057c 0000 nop 1671 ; 0 "" 2 1672 ; 525 "usb.c" 1 1673 057e 0000 nop 1674 ; 0 "" 2 1675 ; 525 "usb.c" 1 1676 0580 0000 nop 1677 ; 0 "" 2 1678 /* #NOAPP */ 1679 0582 00C0 rjmp .L74 1680 .L119: 526:usb.c **** buf[57] = UEDATX; 1682 .LM172: 1683 0584 8091 F100 lds r24,241 1684 0588 89AF std Y+57,r24 527:usb.c **** buf[58] = UEDATX; 1686 .LM173: 1687 058a 8091 F100 lds r24,241 1688 058e 8AAF std Y+58,r24 528:usb.c **** buf[59] = UEDATX; 1690 .LM174: 1691 0590 8091 F100 lds r24,241 1692 0594 8BAF std Y+59,r24 529:usb.c **** SEND_WS(buf[15]); 1694 .LM175: 1695 0596 8091 F100 lds r24,241 1696 059a 8CAF std Y+60,r24 530:usb.c **** buf[60] = UEDATX; 1698 .LM176: 1699 059c 30E8 ldi r19,lo8(-128) 1700 059e 232E mov r2,r19 1701 05a0 9889 ldd r25,Y+16 1702 .L78: 530:usb.c **** buf[60] = UEDATX; 1704 .LM177: 1705 05a2 2220 tst r2 1706 05a4 01F0 breq .L120 530:usb.c **** buf[60] = UEDATX; 1708 .LM178: 1709 05a6 822D mov r24,r2 1710 05a8 8923 and r24,r25 1711 05aa 0BB9 out 0xb,r16 1712 05ac 8823 tst r24 1713 05ae 01F0 breq .L79 530:usb.c **** buf[60] = UEDATX; 1715 .LM179: 1716 05b0 2694 lsr r2 1717 /* #APP */ 1718 ; 530 "usb.c" 1 1719 05b2 0000 nop 1720 ; 0 "" 2 1721 ; 530 "usb.c" 1 1722 05b4 0000 nop 1723 ; 0 "" 2 1724 ; 530 "usb.c" 1 1725 05b6 0000 nop 1726 ; 0 "" 2 GAS LISTING /tmp/cc80rrUS.s page 38 1727 ; 530 "usb.c" 1 1728 05b8 0000 nop 1729 ; 0 "" 2 1730 ; 530 "usb.c" 1 1731 05ba 0000 nop 1732 ; 0 "" 2 1733 ; 530 "usb.c" 1 1734 05bc 0000 nop 1735 ; 0 "" 2 1736 ; 530 "usb.c" 1 1737 05be 0000 nop 1738 ; 0 "" 2 1739 ; 530 "usb.c" 1 1740 05c0 0000 nop 1741 ; 0 "" 2 1742 /* #NOAPP */ 1743 05c2 1BB9 out 0xb,r17 1744 05c4 00C0 rjmp .L78 1745 .L79: 530:usb.c **** buf[60] = UEDATX; 1747 .LM180: 1748 /* #APP */ 1749 ; 530 "usb.c" 1 1750 05c6 0000 nop 1751 ; 0 "" 2 1752 /* #NOAPP */ 1753 05c8 1BB9 out 0xb,r17 1754 05ca 2694 lsr r2 1755 /* #APP */ 1756 ; 530 "usb.c" 1 1757 05cc 0000 nop 1758 ; 0 "" 2 1759 ; 530 "usb.c" 1 1760 05ce 0000 nop 1761 ; 0 "" 2 1762 ; 530 "usb.c" 1 1763 05d0 0000 nop 1764 ; 0 "" 2 1765 ; 530 "usb.c" 1 1766 05d2 0000 nop 1767 ; 0 "" 2 1768 /* #NOAPP */ 1769 05d4 00C0 rjmp .L78 1770 .L120: 531:usb.c **** buf[61] = UEDATX; 1772 .LM181: 1773 05d6 8091 F100 lds r24,241 1774 05da 8DAF std Y+61,r24 532:usb.c **** buf[62] = UEDATX; 1776 .LM182: 1777 05dc 8091 F100 lds r24,241 1778 05e0 8EAF std Y+62,r24 533:usb.c **** buf[63] = UEDATX; 1780 .LM183: 1781 05e2 8091 F100 lds r24,241 1782 05e6 8FAF std Y+63,r24 1784 .LM184: GAS LISTING /tmp/cc80rrUS.s page 39 1785 05e8 8091 F100 lds r24,241 1786 05ec F501 movw r30,r10 1787 05ee 8083 st Z,r24 535:usb.c **** SEND_WS(buf[16]); 1789 .LM185: 1790 05f0 20E8 ldi r18,lo8(-128) 1791 05f2 222E mov r2,r18 1792 05f4 9989 ldd r25,Y+17 1793 .L82: 1795 .LM186: 1796 05f6 2220 tst r2 1797 05f8 01F0 breq .L121 1799 .LM187: 1800 05fa 822D mov r24,r2 1801 05fc 8923 and r24,r25 1802 05fe 0BB9 out 0xb,r16 1803 0600 8823 tst r24 1804 0602 01F0 breq .L83 1806 .LM188: 1807 0604 2694 lsr r2 1808 /* #APP */ 1809 ; 535 "usb.c" 1 1810 0606 0000 nop 1811 ; 0 "" 2 1812 ; 535 "usb.c" 1 1813 0608 0000 nop 1814 ; 0 "" 2 1815 ; 535 "usb.c" 1 1816 060a 0000 nop 1817 ; 0 "" 2 1818 ; 535 "usb.c" 1 1819 060c 0000 nop 1820 ; 0 "" 2 1821 ; 535 "usb.c" 1 1822 060e 0000 nop 1823 ; 0 "" 2 1824 ; 535 "usb.c" 1 1825 0610 0000 nop 1826 ; 0 "" 2 1827 ; 535 "usb.c" 1 1828 0612 0000 nop 1829 ; 0 "" 2 1830 ; 535 "usb.c" 1 1831 0614 0000 nop 1832 ; 0 "" 2 1833 /* #NOAPP */ 1834 0616 1BB9 out 0xb,r17 1835 0618 00C0 rjmp .L82 1836 .L83: 1838 .LM189: 1839 /* #APP */ 1840 ; 535 "usb.c" 1 1841 061a 0000 nop 1842 ; 0 "" 2 1843 /* #NOAPP */ 1844 061c 1BB9 out 0xb,r17 1845 061e 2694 lsr r2 GAS LISTING /tmp/cc80rrUS.s page 40 1846 /* #APP */ 1847 ; 535 "usb.c" 1 1848 0620 0000 nop 1849 ; 0 "" 2 1850 ; 535 "usb.c" 1 1851 0622 0000 nop 1852 ; 0 "" 2 1853 ; 535 "usb.c" 1 1854 0624 0000 nop 1855 ; 0 "" 2 1856 ; 535 "usb.c" 1 1857 0626 0000 nop 1858 ; 0 "" 2 1859 /* #NOAPP */ 1860 0628 00C0 rjmp .L82 1861 .L121: 536:usb.c **** 537:usb.c **** if( l-i > 1 ) 1863 .LM190: 1864 062a F2E0 ldi r31,2 1865 062c EF16 cp r14,r31 1866 062e F104 cpc r15,__zero_reg__ 1867 0630 00F0 brlo .L86 1868 .LBB50: 1869 .LBB49: 96:usb.c **** } 1871 .LM191: 1872 0632 8092 E800 sts 232,r8 1873 .L86: 1874 0636 FE01 movw r30,r28 1875 0638 7296 adiw r30,18 1876 .L91: 1877 .LBE49: 1878 .LBE50: 538:usb.c **** usb_ack_out(); 539:usb.c **** 540:usb.c **** for( j = 17; j < 63; j++ ) 541:usb.c **** { 542:usb.c **** SEND_WS( (buf[j]) ); 1880 .LM192: 1881 063a 90E8 ldi r25,lo8(-128) 1882 063c 292E mov r2,r25 1883 063e 9191 ld r25,Z+ 1884 .L87: 1886 .LM193: 1887 0640 2220 tst r2 1888 0642 01F0 breq .L122 1890 .LM194: 1891 0644 822D mov r24,r2 1892 0646 8923 and r24,r25 1893 0648 0BB9 out 0xb,r16 1894 064a 8823 tst r24 1895 064c 01F0 breq .L88 1897 .LM195: 1898 064e 2694 lsr r2 1899 /* #APP */ 1900 ; 542 "usb.c" 1 GAS LISTING /tmp/cc80rrUS.s page 41 1901 0650 0000 nop 1902 ; 0 "" 2 1903 ; 542 "usb.c" 1 1904 0652 0000 nop 1905 ; 0 "" 2 1906 ; 542 "usb.c" 1 1907 0654 0000 nop 1908 ; 0 "" 2 1909 ; 542 "usb.c" 1 1910 0656 0000 nop 1911 ; 0 "" 2 1912 ; 542 "usb.c" 1 1913 0658 0000 nop 1914 ; 0 "" 2 1915 ; 542 "usb.c" 1 1916 065a 0000 nop 1917 ; 0 "" 2 1918 ; 542 "usb.c" 1 1919 065c 0000 nop 1920 ; 0 "" 2 1921 ; 542 "usb.c" 1 1922 065e 0000 nop 1923 ; 0 "" 2 1924 /* #NOAPP */ 1925 0660 1BB9 out 0xb,r17 1926 0662 00C0 rjmp .L87 1927 .L88: 1929 .LM196: 1930 /* #APP */ 1931 ; 542 "usb.c" 1 1932 0664 0000 nop 1933 ; 0 "" 2 1934 /* #NOAPP */ 1935 0666 1BB9 out 0xb,r17 1936 0668 2694 lsr r2 1937 /* #APP */ 1938 ; 542 "usb.c" 1 1939 066a 0000 nop 1940 ; 0 "" 2 1941 ; 542 "usb.c" 1 1942 066c 0000 nop 1943 ; 0 "" 2 1944 ; 542 "usb.c" 1 1945 066e 0000 nop 1946 ; 0 "" 2 1947 ; 542 "usb.c" 1 1948 0670 0000 nop 1949 ; 0 "" 2 1950 /* #NOAPP */ 1951 0672 00C0 rjmp .L87 1952 .L122: 1953 .LBB51: 1954 .LBB52: 1956 .Ltext1: 1:/usr/lib/avr/include/util/delay.h **** /* Copyright (c) 2002, Marek Michalkiewicz 2:/usr/lib/avr/include/util/delay.h **** Copyright (c) 2004,2005,2007 Joerg Wunsch 3:/usr/lib/avr/include/util/delay.h **** Copyright (c) 2007 Florin-Viorel Petrov GAS LISTING /tmp/cc80rrUS.s page 42 4:/usr/lib/avr/include/util/delay.h **** All rights reserved. 5:/usr/lib/avr/include/util/delay.h **** 6:/usr/lib/avr/include/util/delay.h **** Redistribution and use in source and binary forms, with or without 7:/usr/lib/avr/include/util/delay.h **** modification, are permitted provided that the following conditions are met: 8:/usr/lib/avr/include/util/delay.h **** 9:/usr/lib/avr/include/util/delay.h **** * Redistributions of source code must retain the above copyright 10:/usr/lib/avr/include/util/delay.h **** notice, this list of conditions and the following disclaimer. 11:/usr/lib/avr/include/util/delay.h **** 12:/usr/lib/avr/include/util/delay.h **** * Redistributions in binary form must reproduce the above copyright 13:/usr/lib/avr/include/util/delay.h **** notice, this list of conditions and the following disclaimer in 14:/usr/lib/avr/include/util/delay.h **** the documentation and/or other materials provided with the 15:/usr/lib/avr/include/util/delay.h **** distribution. 16:/usr/lib/avr/include/util/delay.h **** 17:/usr/lib/avr/include/util/delay.h **** * Neither the name of the copyright holders nor the names of 18:/usr/lib/avr/include/util/delay.h **** contributors may be used to endorse or promote products derived 19:/usr/lib/avr/include/util/delay.h **** from this software without specific prior written permission. 20:/usr/lib/avr/include/util/delay.h **** 21:/usr/lib/avr/include/util/delay.h **** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22:/usr/lib/avr/include/util/delay.h **** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23:/usr/lib/avr/include/util/delay.h **** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24:/usr/lib/avr/include/util/delay.h **** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 25:/usr/lib/avr/include/util/delay.h **** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26:/usr/lib/avr/include/util/delay.h **** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27:/usr/lib/avr/include/util/delay.h **** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28:/usr/lib/avr/include/util/delay.h **** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29:/usr/lib/avr/include/util/delay.h **** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30:/usr/lib/avr/include/util/delay.h **** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31:/usr/lib/avr/include/util/delay.h **** POSSIBILITY OF SUCH DAMAGE. */ 32:/usr/lib/avr/include/util/delay.h **** 33:/usr/lib/avr/include/util/delay.h **** /* $Id$ */ 34:/usr/lib/avr/include/util/delay.h **** 35:/usr/lib/avr/include/util/delay.h **** #ifndef _UTIL_DELAY_H_ 36:/usr/lib/avr/include/util/delay.h **** #define _UTIL_DELAY_H_ 1 37:/usr/lib/avr/include/util/delay.h **** 38:/usr/lib/avr/include/util/delay.h **** #ifndef __HAS_DELAY_CYCLES 39:/usr/lib/avr/include/util/delay.h **** #define __HAS_DELAY_CYCLES 1 40:/usr/lib/avr/include/util/delay.h **** #endif 41:/usr/lib/avr/include/util/delay.h **** 42:/usr/lib/avr/include/util/delay.h **** #include 43:/usr/lib/avr/include/util/delay.h **** #include 44:/usr/lib/avr/include/util/delay.h **** #include 45:/usr/lib/avr/include/util/delay.h **** 46:/usr/lib/avr/include/util/delay.h **** /** \file */ 47:/usr/lib/avr/include/util/delay.h **** /** \defgroup util_delay : Convenience functions for busy-wait delay loops 48:/usr/lib/avr/include/util/delay.h **** \code 49:/usr/lib/avr/include/util/delay.h **** #define F_CPU 1000000UL // 1 MHz 50:/usr/lib/avr/include/util/delay.h **** //#define F_CPU 14.7456E6 51:/usr/lib/avr/include/util/delay.h **** #include 52:/usr/lib/avr/include/util/delay.h **** \endcode 53:/usr/lib/avr/include/util/delay.h **** 54:/usr/lib/avr/include/util/delay.h **** \note As an alternative method, it is possible to pass the 55:/usr/lib/avr/include/util/delay.h **** F_CPU macro down to the compiler from the Makefile. 56:/usr/lib/avr/include/util/delay.h **** Obviously, in that case, no \c \#define statement should be 57:/usr/lib/avr/include/util/delay.h **** used. 58:/usr/lib/avr/include/util/delay.h **** 59:/usr/lib/avr/include/util/delay.h **** The functions in this header file are wrappers around the basic 60:/usr/lib/avr/include/util/delay.h **** busy-wait functions from . They are meant as GAS LISTING /tmp/cc80rrUS.s page 43 61:/usr/lib/avr/include/util/delay.h **** convenience functions where actual time values can be specified 62:/usr/lib/avr/include/util/delay.h **** rather than a number of cycles to wait for. The idea behind is 63:/usr/lib/avr/include/util/delay.h **** that compile-time constant expressions will be eliminated by 64:/usr/lib/avr/include/util/delay.h **** compiler optimization so floating-point expressions can be used 65:/usr/lib/avr/include/util/delay.h **** to calculate the number of delay cycles needed based on the CPU 66:/usr/lib/avr/include/util/delay.h **** frequency passed by the macro F_CPU. 67:/usr/lib/avr/include/util/delay.h **** 68:/usr/lib/avr/include/util/delay.h **** \note In order for these functions to work as intended, compiler 69:/usr/lib/avr/include/util/delay.h **** optimizations must be enabled, and the delay time 70:/usr/lib/avr/include/util/delay.h **** must be an expression that is a known constant at 71:/usr/lib/avr/include/util/delay.h **** compile-time. If these requirements are not met, the resulting 72:/usr/lib/avr/include/util/delay.h **** delay will be much longer (and basically unpredictable), and 73:/usr/lib/avr/include/util/delay.h **** applications that otherwise do not use floating-point calculations 74:/usr/lib/avr/include/util/delay.h **** will experience severe code bloat by the floating-point library 75:/usr/lib/avr/include/util/delay.h **** routines linked into the application. 76:/usr/lib/avr/include/util/delay.h **** 77:/usr/lib/avr/include/util/delay.h **** The functions available allow the specification of microsecond, and 78:/usr/lib/avr/include/util/delay.h **** millisecond delays directly, using the application-supplied macro 79:/usr/lib/avr/include/util/delay.h **** F_CPU as the CPU clock frequency (in Hertz). 80:/usr/lib/avr/include/util/delay.h **** 81:/usr/lib/avr/include/util/delay.h **** */ 82:/usr/lib/avr/include/util/delay.h **** 83:/usr/lib/avr/include/util/delay.h **** #if !defined(__DOXYGEN__) 84:/usr/lib/avr/include/util/delay.h **** static inline void _delay_us(double __us) __attribute__((always_inline)); 85:/usr/lib/avr/include/util/delay.h **** static inline void _delay_ms(double __ms) __attribute__((always_inline)); 86:/usr/lib/avr/include/util/delay.h **** #endif 87:/usr/lib/avr/include/util/delay.h **** 88:/usr/lib/avr/include/util/delay.h **** #ifndef F_CPU 89:/usr/lib/avr/include/util/delay.h **** /* prevent compiler error by supplying a default */ 90:/usr/lib/avr/include/util/delay.h **** # warning "F_CPU not defined for " 91:/usr/lib/avr/include/util/delay.h **** # define F_CPU 1000000UL 92:/usr/lib/avr/include/util/delay.h **** #endif 93:/usr/lib/avr/include/util/delay.h **** 94:/usr/lib/avr/include/util/delay.h **** #ifndef __OPTIMIZE__ 95:/usr/lib/avr/include/util/delay.h **** # warning "Compiler optimizations disabled; functions from won't work as designed" 96:/usr/lib/avr/include/util/delay.h **** #endif 97:/usr/lib/avr/include/util/delay.h **** 98:/usr/lib/avr/include/util/delay.h **** #if __HAS_DELAY_CYCLES && defined(__OPTIMIZE__) && \ 99:/usr/lib/avr/include/util/delay.h **** !defined(__DELAY_BACKWARD_COMPATIBLE__) && \ 100:/usr/lib/avr/include/util/delay.h **** __STDC_HOSTED__ 101:/usr/lib/avr/include/util/delay.h **** # include 102:/usr/lib/avr/include/util/delay.h **** #endif 103:/usr/lib/avr/include/util/delay.h **** 104:/usr/lib/avr/include/util/delay.h **** /** 105:/usr/lib/avr/include/util/delay.h **** \ingroup util_delay 106:/usr/lib/avr/include/util/delay.h **** 107:/usr/lib/avr/include/util/delay.h **** Perform a delay of \c __ms milliseconds, using _delay_loop_2(). 108:/usr/lib/avr/include/util/delay.h **** 109:/usr/lib/avr/include/util/delay.h **** The macro F_CPU is supposed to be defined to a 110:/usr/lib/avr/include/util/delay.h **** constant defining the CPU clock frequency (in Hertz). 111:/usr/lib/avr/include/util/delay.h **** 112:/usr/lib/avr/include/util/delay.h **** The maximal possible delay is 262.14 ms / F_CPU in MHz. 113:/usr/lib/avr/include/util/delay.h **** 114:/usr/lib/avr/include/util/delay.h **** When the user request delay which exceed the maximum possible one, 115:/usr/lib/avr/include/util/delay.h **** _delay_ms() provides a decreased resolution functionality. In this 116:/usr/lib/avr/include/util/delay.h **** mode _delay_ms() will work with a resolution of 1/10 ms, providing 117:/usr/lib/avr/include/util/delay.h **** delays up to 6.5535 seconds (independent from CPU frequency). The GAS LISTING /tmp/cc80rrUS.s page 44 118:/usr/lib/avr/include/util/delay.h **** user will not be informed about decreased resolution. 119:/usr/lib/avr/include/util/delay.h **** 120:/usr/lib/avr/include/util/delay.h **** If the avr-gcc toolchain has __builtin_avr_delay_cycles(unsigned long) 121:/usr/lib/avr/include/util/delay.h **** support, maximal possible delay is 4294967.295 ms/ F_CPU in MHz. For 122:/usr/lib/avr/include/util/delay.h **** values greater than the maximal possible delay, overflows results in 123:/usr/lib/avr/include/util/delay.h **** no delay i.e., 0ms. 124:/usr/lib/avr/include/util/delay.h **** 125:/usr/lib/avr/include/util/delay.h **** Conversion of __us into clock cycles may not always result in integer. 126:/usr/lib/avr/include/util/delay.h **** By default, the clock cycles rounded up to next integer. This ensures that 127:/usr/lib/avr/include/util/delay.h **** the user gets atleast __us microseconds of delay. 128:/usr/lib/avr/include/util/delay.h **** 129:/usr/lib/avr/include/util/delay.h **** Alternatively, user can define __DELAY_ROUND_DOWN__ and __DELAY_ROUND_CLOSEST__ 130:/usr/lib/avr/include/util/delay.h **** to round down and round to closest integer. 131:/usr/lib/avr/include/util/delay.h **** 132:/usr/lib/avr/include/util/delay.h **** Note: The new implementation of _delay_ms(double __ms) with 133:/usr/lib/avr/include/util/delay.h **** __builtin_avr_delay_cycles(unsigned long) support is not backward compatible. 134:/usr/lib/avr/include/util/delay.h **** User can define __DELAY_BACKWARD_COMPATIBLE__ to get a backward compatible delay. 135:/usr/lib/avr/include/util/delay.h **** Also, the backward compatible 136:/usr/lib/avr/include/util/delay.h **** algorithm will be chosen if the code is compiled in a freestanding 137:/usr/lib/avr/include/util/delay.h **** environment (GCC option \c -ffreestanding), as the math functions 138:/usr/lib/avr/include/util/delay.h **** required for rounding are not available to the compiler then. 139:/usr/lib/avr/include/util/delay.h **** 140:/usr/lib/avr/include/util/delay.h **** */ 141:/usr/lib/avr/include/util/delay.h **** void 142:/usr/lib/avr/include/util/delay.h **** _delay_ms(double __ms) 143:/usr/lib/avr/include/util/delay.h **** { 144:/usr/lib/avr/include/util/delay.h **** double __tmp ; 145:/usr/lib/avr/include/util/delay.h **** #if __HAS_DELAY_CYCLES && defined(__OPTIMIZE__) && \ 146:/usr/lib/avr/include/util/delay.h **** !defined(__DELAY_BACKWARD_COMPATIBLE__) && \ 147:/usr/lib/avr/include/util/delay.h **** __STDC_HOSTED__ 148:/usr/lib/avr/include/util/delay.h **** uint32_t __ticks_dc; 149:/usr/lib/avr/include/util/delay.h **** extern void __builtin_avr_delay_cycles(unsigned long); 150:/usr/lib/avr/include/util/delay.h **** __tmp = ((F_CPU) / 1e3) * __ms; 151:/usr/lib/avr/include/util/delay.h **** 152:/usr/lib/avr/include/util/delay.h **** #if defined(__DELAY_ROUND_DOWN__) 153:/usr/lib/avr/include/util/delay.h **** __ticks_dc = (uint32_t)fabs(__tmp); 154:/usr/lib/avr/include/util/delay.h **** 155:/usr/lib/avr/include/util/delay.h **** #elif defined(__DELAY_ROUND_CLOSEST__) 156:/usr/lib/avr/include/util/delay.h **** __ticks_dc = (uint32_t)(fabs(__tmp)+0.5); 157:/usr/lib/avr/include/util/delay.h **** 158:/usr/lib/avr/include/util/delay.h **** #else 159:/usr/lib/avr/include/util/delay.h **** //round up by default 160:/usr/lib/avr/include/util/delay.h **** __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); 161:/usr/lib/avr/include/util/delay.h **** #endif 162:/usr/lib/avr/include/util/delay.h **** 163:/usr/lib/avr/include/util/delay.h **** __builtin_avr_delay_cycles(__ticks_dc); 164:/usr/lib/avr/include/util/delay.h **** 165:/usr/lib/avr/include/util/delay.h **** #else 166:/usr/lib/avr/include/util/delay.h **** uint16_t __ticks; 167:/usr/lib/avr/include/util/delay.h **** __tmp = ((F_CPU) / 4e3) * __ms; 168:/usr/lib/avr/include/util/delay.h **** if (__tmp < 1.0) 169:/usr/lib/avr/include/util/delay.h **** __ticks = 1; 170:/usr/lib/avr/include/util/delay.h **** else if (__tmp > 65535) 171:/usr/lib/avr/include/util/delay.h **** { 172:/usr/lib/avr/include/util/delay.h **** // __ticks = requested delay in 1/10 ms 173:/usr/lib/avr/include/util/delay.h **** __ticks = (uint16_t) (__ms * 10.0); 174:/usr/lib/avr/include/util/delay.h **** while(__ticks) GAS LISTING /tmp/cc80rrUS.s page 45 175:/usr/lib/avr/include/util/delay.h **** { 176:/usr/lib/avr/include/util/delay.h **** // wait 1/10 ms 177:/usr/lib/avr/include/util/delay.h **** _delay_loop_2(((F_CPU) / 4e3) / 10); 178:/usr/lib/avr/include/util/delay.h **** __ticks --; 179:/usr/lib/avr/include/util/delay.h **** } 180:/usr/lib/avr/include/util/delay.h **** return; 181:/usr/lib/avr/include/util/delay.h **** } 182:/usr/lib/avr/include/util/delay.h **** else 183:/usr/lib/avr/include/util/delay.h **** __ticks = (uint16_t)__tmp; 184:/usr/lib/avr/include/util/delay.h **** _delay_loop_2(__ticks); 185:/usr/lib/avr/include/util/delay.h **** #endif 186:/usr/lib/avr/include/util/delay.h **** } 187:/usr/lib/avr/include/util/delay.h **** 188:/usr/lib/avr/include/util/delay.h **** /** 189:/usr/lib/avr/include/util/delay.h **** \ingroup util_delay 190:/usr/lib/avr/include/util/delay.h **** 191:/usr/lib/avr/include/util/delay.h **** Perform a delay of \c __us microseconds, using _delay_loop_1(). 192:/usr/lib/avr/include/util/delay.h **** 193:/usr/lib/avr/include/util/delay.h **** The macro F_CPU is supposed to be defined to a 194:/usr/lib/avr/include/util/delay.h **** constant defining the CPU clock frequency (in Hertz). 195:/usr/lib/avr/include/util/delay.h **** 196:/usr/lib/avr/include/util/delay.h **** The maximal possible delay is 768 us / F_CPU in MHz. 197:/usr/lib/avr/include/util/delay.h **** 198:/usr/lib/avr/include/util/delay.h **** If the user requests a delay greater than the maximal possible one, 199:/usr/lib/avr/include/util/delay.h **** _delay_us() will automatically call _delay_ms() instead. The user 200:/usr/lib/avr/include/util/delay.h **** will not be informed about this case. 201:/usr/lib/avr/include/util/delay.h **** 202:/usr/lib/avr/include/util/delay.h **** If the avr-gcc toolchain has __builtin_avr_delay_cycles(unsigned long) 203:/usr/lib/avr/include/util/delay.h **** support, maximal possible delay is 4294967.295 us/ F_CPU in MHz. For 204:/usr/lib/avr/include/util/delay.h **** values greater than the maximal possible delay, overflow results in 205:/usr/lib/avr/include/util/delay.h **** no delay i.e., 0us. 206:/usr/lib/avr/include/util/delay.h **** 207:/usr/lib/avr/include/util/delay.h **** Conversion of __us into clock cycles may not always result in integer. 208:/usr/lib/avr/include/util/delay.h **** By default, the clock cycles rounded up to next integer. This ensures that 209:/usr/lib/avr/include/util/delay.h **** the user gets atleast __us microseconds of delay. 210:/usr/lib/avr/include/util/delay.h **** 211:/usr/lib/avr/include/util/delay.h **** Alternatively, user can define __DELAY_ROUND_DOWN__ and __DELAY_ROUND_CLOSEST__ 212:/usr/lib/avr/include/util/delay.h **** to round down and round to closest integer. 213:/usr/lib/avr/include/util/delay.h **** 214:/usr/lib/avr/include/util/delay.h **** Note: The new implementation of _delay_us(double __us) with 215:/usr/lib/avr/include/util/delay.h **** __builtin_avr_delay_cycles(unsigned long) support is not backward compatible. 216:/usr/lib/avr/include/util/delay.h **** User can define __DELAY_BACKWARD_COMPATIBLE__ to get a backward compatible delay. 217:/usr/lib/avr/include/util/delay.h **** Also, the backward compatible 218:/usr/lib/avr/include/util/delay.h **** algorithm will be chosen if the code is compiled in a freestanding 219:/usr/lib/avr/include/util/delay.h **** environment (GCC option \c -ffreestanding), as the math functions 220:/usr/lib/avr/include/util/delay.h **** required for rounding are not available to the compiler then. 221:/usr/lib/avr/include/util/delay.h **** 222:/usr/lib/avr/include/util/delay.h **** */ 223:/usr/lib/avr/include/util/delay.h **** void 224:/usr/lib/avr/include/util/delay.h **** _delay_us(double __us) 225:/usr/lib/avr/include/util/delay.h **** { 226:/usr/lib/avr/include/util/delay.h **** double __tmp ; 227:/usr/lib/avr/include/util/delay.h **** #if __HAS_DELAY_CYCLES && defined(__OPTIMIZE__) && \ 228:/usr/lib/avr/include/util/delay.h **** !defined(__DELAY_BACKWARD_COMPATIBLE__) && \ 229:/usr/lib/avr/include/util/delay.h **** __STDC_HOSTED__ 230:/usr/lib/avr/include/util/delay.h **** uint32_t __ticks_dc; 231:/usr/lib/avr/include/util/delay.h **** extern void __builtin_avr_delay_cycles(unsigned long); GAS LISTING /tmp/cc80rrUS.s page 46 232:/usr/lib/avr/include/util/delay.h **** __tmp = ((F_CPU) / 1e6) * __us; 233:/usr/lib/avr/include/util/delay.h **** 234:/usr/lib/avr/include/util/delay.h **** #if defined(__DELAY_ROUND_DOWN__) 235:/usr/lib/avr/include/util/delay.h **** __ticks_dc = (uint32_t)fabs(__tmp); 236:/usr/lib/avr/include/util/delay.h **** 237:/usr/lib/avr/include/util/delay.h **** #elif defined(__DELAY_ROUND_CLOSEST__) 238:/usr/lib/avr/include/util/delay.h **** __ticks_dc = (uint32_t)(fabs(__tmp)+0.5); 239:/usr/lib/avr/include/util/delay.h **** 240:/usr/lib/avr/include/util/delay.h **** #else 241:/usr/lib/avr/include/util/delay.h **** //round up by default 242:/usr/lib/avr/include/util/delay.h **** __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); 243:/usr/lib/avr/include/util/delay.h **** #endif 244:/usr/lib/avr/include/util/delay.h **** 245:/usr/lib/avr/include/util/delay.h **** __builtin_avr_delay_cycles(__ticks_dc); 1958 .LM197: 1959 0674 85E1 ldi r24,lo8(21) 1960 0676 8A95 1: dec r24 1961 0678 01F4 brne 1b 1962 067a 0000 nop 1963 .LBE52: 1964 .LBE51: 1966 .Ltext2: 540:usb.c **** { 1968 .LM198: 1969 067c EA15 cp r30,r10 1970 067e FB05 cpc r31,r11 1971 0680 01F4 brne .L91 543:usb.c **** #ifdef EXTRA_HOLD 544:usb.c **** _delay_us(4); 545:usb.c **** #endif 546:usb.c **** } 547:usb.c **** 548:usb.c **** if( l - i > 1 ) 1973 .LM199: 1974 0682 92E0 ldi r25,2 1975 0684 E916 cp r14,r25 1976 0686 F104 cpc r15,__zero_reg__ 1977 0688 00F0 brlo .L92 549:usb.c **** usb_wait_receive_out(); 1979 .LM200: 1980 068a 0E94 0000 call usb_wait_receive_out 1981 .L92: 550:usb.c **** 551:usb.c **** SEND_WS(buf[63]); 1983 .LM201: 1984 068e 80E8 ldi r24,lo8(-128) 1985 0690 282E mov r2,r24 1986 0692 F501 movw r30,r10 1987 0694 9081 ld r25,Z 1988 .L93: 1990 .LM202: 1991 0696 2220 tst r2 1992 0698 01F0 breq .L123 1994 .LM203: 1995 069a 822D mov r24,r2 1996 069c 8923 and r24,r25 1997 069e 0BB9 out 0xb,r16 GAS LISTING /tmp/cc80rrUS.s page 47 1998 06a0 8823 tst r24 1999 06a2 01F0 breq .L94 2001 .LM204: 2002 06a4 2694 lsr r2 2003 /* #APP */ 2004 ; 551 "usb.c" 1 2005 06a6 0000 nop 2006 ; 0 "" 2 2007 ; 551 "usb.c" 1 2008 06a8 0000 nop 2009 ; 0 "" 2 2010 ; 551 "usb.c" 1 2011 06aa 0000 nop 2012 ; 0 "" 2 2013 ; 551 "usb.c" 1 2014 06ac 0000 nop 2015 ; 0 "" 2 2016 ; 551 "usb.c" 1 2017 06ae 0000 nop 2018 ; 0 "" 2 2019 ; 551 "usb.c" 1 2020 06b0 0000 nop 2021 ; 0 "" 2 2022 ; 551 "usb.c" 1 2023 06b2 0000 nop 2024 ; 0 "" 2 2025 ; 551 "usb.c" 1 2026 06b4 0000 nop 2027 ; 0 "" 2 2028 /* #NOAPP */ 2029 06b6 1BB9 out 0xb,r17 2030 06b8 00C0 rjmp .L93 2031 .L94: 2033 .LM205: 2034 /* #APP */ 2035 ; 551 "usb.c" 1 2036 06ba 0000 nop 2037 ; 0 "" 2 2038 /* #NOAPP */ 2039 06bc 1BB9 out 0xb,r17 2040 06be 2694 lsr r2 2041 /* #APP */ 2042 ; 551 "usb.c" 1 2043 06c0 0000 nop 2044 ; 0 "" 2 2045 ; 551 "usb.c" 1 2046 06c2 0000 nop 2047 ; 0 "" 2 2048 ; 551 "usb.c" 1 2049 06c4 0000 nop 2050 ; 0 "" 2 2051 ; 551 "usb.c" 1 2052 06c6 0000 nop 2053 ; 0 "" 2 2054 /* #NOAPP */ 2055 06c8 00C0 rjmp .L93 2056 .L123: GAS LISTING /tmp/cc80rrUS.s page 48 2057 06ca F1E0 ldi r31,1 2058 06cc EF1A sub r14,r31 2059 06ce F108 sbc r15,__zero_reg__ 2060 06d0 00C0 rjmp .L21 2061 .L105: 2062 .LBE53: 552:usb.c **** } 553:usb.c **** 554:usb.c **** if( remainder ) 2064 .LM206: 2065 06d2 C114 cp r12,__zero_reg__ 2066 06d4 D104 cpc r13,__zero_reg__ 2067 06d6 01F0 breq .L98 2068 .LBB54: 2069 .LBB55: 96:usb.c **** } 2071 .LM207: 2072 06d8 8BEF ldi r24,lo8(-5) 2073 06da 8093 E800 sts 232,r24 2074 .LBE55: 2075 .LBE54: 555:usb.c **** { 556:usb.c **** usb_ack_out(); 557:usb.c **** usb_wait_receive_out(); 2077 .LM208: 2078 06de 0E94 0000 call usb_wait_receive_out 2079 .L98: 558:usb.c **** } 559:usb.c **** 560:usb.c **** PORTD &= ~_BV(3); 2081 .LM209: 2082 06e2 5B98 cbi 0xb,3 561:usb.c **** 562:usb.c **** // _delay_us(50); //force reset. 563:usb.c **** 564:usb.c **** for( i = 0; i < remainder; i++ ) 2084 .LM210: 2085 06e4 80E0 ldi r24,0 2086 06e6 90E0 ldi r25,0 2087 .L99: 2089 .LM211: 2090 06e8 8C15 cp r24,r12 2091 06ea 9D05 cpc r25,r13 2092 06ec 01F0 breq .L124 565:usb.c **** v = UEDATX; //read extra byte? 2094 .LM212: 2095 06ee 2091 F100 lds r18,241 564:usb.c **** v = UEDATX; //read extra byte? 2097 .LM213: 2098 06f2 0196 adiw r24,1 2099 06f4 00C0 rjmp .L99 2100 .L124: 2101 .LBB56: 2102 .LBB57: 96:usb.c **** } 2104 .LM214: 2105 06f6 8BEF ldi r24,lo8(-5) GAS LISTING /tmp/cc80rrUS.s page 49 2106 06f8 8093 E800 sts 232,r24 2107 .LBE57: 2108 .LBE56: 2109 .LBB58: 2110 .LBB59: 88:usb.c **** } 2112 .LM215: 2113 06fc 8EEF ldi r24,lo8(-2) 2114 06fe 8093 E800 sts 232,r24 2115 /* epilogue start */ 2116 .LBE59: 2117 .LBE58: 566:usb.c **** 567:usb.c **** usb_ack_out(); 568:usb.c **** usb_send_in(); 569:usb.c **** 570:usb.c **** } 2119 .LM216: 2120 0702 C05C subi r28,-64 2121 0704 DF4F sbci r29,-1 2122 0706 0FB6 in __tmp_reg__,__SREG__ 2123 0708 F894 cli 2124 070a DEBF out __SP_H__,r29 2125 070c 0FBE out __SREG__,__tmp_reg__ 2126 070e CDBF out __SP_L__,r28 2127 0710 DF91 pop r29 2128 0712 CF91 pop r28 2129 0714 1F91 pop r17 2130 0716 0F91 pop r16 2131 0718 FF90 pop r15 2132 071a EF90 pop r14 2133 071c DF90 pop r13 2134 071e CF90 pop r12 2135 0720 BF90 pop r11 2136 0722 AF90 pop r10 2137 0724 9F90 pop r9 2138 0726 8F90 pop r8 2139 0728 3F90 pop r3 2140 072a 2F90 pop r2 2141 072c 0895 ret 2160 .Lscope6: 2162 .stabd 78,0,0 2164 .global __vector_12 2166 __vector_12: 2167 .stabd 46,0,0 107:usb.c **** static unsigned char frame; 2169 .LM217: 2170 .LFBB7: 2171 072e 1F92 push r1 2172 0730 0F92 push r0 2173 0732 0FB6 in r0,__SREG__ 2174 0734 0F92 push r0 2175 0736 1124 clr __zero_reg__ 2176 0738 EF92 push r14 2177 073a FF92 push r15 2178 073c 0F93 push r16 2179 073e 1F93 push r17 GAS LISTING /tmp/cc80rrUS.s page 50 2180 0740 2F93 push r18 2181 0742 3F93 push r19 2182 0744 4F93 push r20 2183 0746 5F93 push r21 2184 0748 6F93 push r22 2185 074a 7F93 push r23 2186 074c 8F93 push r24 2187 074e 9F93 push r25 2188 0750 AF93 push r26 2189 0752 BF93 push r27 2190 0754 EF93 push r30 2191 0756 FF93 push r31 2192 0758 CF93 push r28 2193 075a DF93 push r29 2194 075c 1F92 push __zero_reg__ 2195 075e CDB7 in r28,__SP_L__ 2196 0760 DEB7 in r29,__SP_H__ 2197 /* prologue: Signal */ 2198 /* frame size = 1 */ 2199 /* stack size = 22 */ 2200 .L__stack_usage = 22 122:usb.c **** intbits = UEINTX; 2202 .LM218: 2203 0762 1092 E900 sts 233,__zero_reg__ 123:usb.c **** 2205 .LM219: 2206 0766 8091 E800 lds r24,232 127:usb.c **** bmRequestType = UEDATX; 2208 .LM220: 2209 076a 83FF sbrs r24,3 2210 076c 00C0 rjmp .L156 128:usb.c **** bRequest = UEDATX; 2212 .LM221: 2213 076e 2091 F100 lds r18,241 129:usb.c **** wValue = UEDATX; 2215 .LM222: 2216 0772 9091 F100 lds r25,241 130:usb.c **** wValue |= (UEDATX << 8); 2218 .LM223: 2219 0776 E090 F100 lds r14,241 131:usb.c **** wIndex = UEDATX; 2221 .LM224: 2222 077a 8091 F100 lds r24,241 2223 077e F12C mov r15,__zero_reg__ 2224 0780 F82A or r15,r24 132:usb.c **** wIndex |= (UEDATX << 8); 2226 .LM225: 2227 0782 8091 F100 lds r24,241 133:usb.c **** wLength = UEDATX; 2229 .LM226: 2230 0786 3091 F100 lds r19,241 134:usb.c **** wLength |= (UEDATX << 8); 2232 .LM227: 2233 078a 0091 F100 lds r16,241 135:usb.c **** 2235 .LM228: 2236 078e 4091 F100 lds r20,241 GAS LISTING /tmp/cc80rrUS.s page 51 2237 0792 10E0 ldi r17,0 2238 0794 142B or r17,r20 137:usb.c **** if (bRequest == GET_DESCRIPTOR) 2240 .LM229: 2241 0796 42EF ldi r20,lo8(-14) 2242 0798 4093 E800 sts 232,r20 138:usb.c **** { 2244 .LM230: 2245 079c 9630 cpi r25,lo8(6) 2246 079e 01F0 breq .+2 2247 07a0 00C0 rjmp .L188 133:usb.c **** wLength = UEDATX; 2249 .LM231: 2250 07a2 90E0 ldi r25,0 2251 07a4 932B or r25,r19 2252 07a6 48E0 ldi r20,lo8(8) 2253 07a8 20E0 ldi r18,lo8(descriptor_list) 2254 07aa 30E0 ldi r19,hi8(descriptor_list) 2255 .L137: 2256 .LBB60: 148:usb.c **** if (desc_val != wValue) 2258 .LM232: 2259 07ac F901 movw r30,r18 2260 /* #APP */ 2261 ; 148 "usb.c" 1 2262 07ae 6591 lpm r22, Z+ 2263 07b0 7491 lpm r23, Z 2264 2265 ; 0 "" 2 2266 /* #NOAPP */ 2267 .LBE60: 149:usb.c **** { 2269 .LM233: 2270 07b2 6E15 cp r22,r14 2271 07b4 7F05 cpc r23,r15 2272 07b6 01F4 brne .L190 154:usb.c **** desc_val = pgm_read_word(list); 2274 .LM234: 2275 07b8 F901 movw r30,r18 2276 07ba 3296 adiw r30,2 2277 .LBB61: 155:usb.c **** if (desc_val != wIndex) 2279 .LM235: 2280 /* #APP */ 2281 ; 155 "usb.c" 1 2282 07bc 6591 lpm r22, Z+ 2283 07be 7491 lpm r23, Z 2284 2285 ; 0 "" 2 2286 /* #NOAPP */ 2287 .LBE61: 156:usb.c **** { 2289 .LM236: 2290 07c0 6817 cp r22,r24 2291 07c2 7907 cpc r23,r25 2292 07c4 01F0 breq .L132 2293 .L190: GAS LISTING /tmp/cc80rrUS.s page 52 158:usb.c **** continue; 2295 .LM237: 2296 07c6 295F subi r18,-7 2297 07c8 3F4F sbci r19,-1 2298 07ca 4150 subi r20,lo8(-(-1)) 143:usb.c **** { 2300 .LM238: 2301 07cc 01F4 brne .L137 2302 07ce 00C0 rjmp .L156 2303 .L132: 161:usb.c **** desc_addr = (const uint8_t *)pgm_read_word(list); 2305 .LM239: 2306 07d0 F901 movw r30,r18 2307 07d2 3496 adiw r30,4 162:usb.c **** list += 2; 2309 .LM240: 2310 /* #APP */ 2311 ; 162 "usb.c" 1 2312 07d4 4591 lpm r20, Z+ 2313 07d6 5491 lpm r21, Z 2314 2315 ; 0 "" 2 163:usb.c **** desc_length = pgm_read_byte(list); 2317 .LM241: 2318 /* #NOAPP */ 2319 07d8 F901 movw r30,r18 2320 07da 3696 adiw r30,6 2321 .LBB62: 164:usb.c **** break; 2323 .LM242: 2324 /* #APP */ 2325 ; 164 "usb.c" 1 2326 07dc 2491 lpm r18, Z 2327 2328 ; 0 "" 2 2329 /* #NOAPP */ 2330 .LBE62: 167:usb.c **** if (len > desc_length) len = desc_length; 2332 .LM243: 2333 07de 0F3F cpi r16,-1 2334 07e0 1105 cpc r17,__zero_reg__ 2335 07e2 01F0 breq .L133 2336 07e4 00F0 brlo .L133 2337 07e6 0FEF ldi r16,lo8(-1) 2338 07e8 10E0 ldi r17,0 2339 .L133: 2340 07ea 0217 cp r16,r18 2341 07ec 00F4 brsh .L134 2342 07ee 202F mov r18,r16 2343 .L134: 2344 .LBB63: 2345 .LBB64: 88:usb.c **** } 2347 .LM244: 2348 07f0 3EEF ldi r19,lo8(-2) 2349 .L138: 2350 .LBE64: GAS LISTING /tmp/cc80rrUS.s page 53 2351 .LBE63: 174:usb.c **** } while (!(i & ((1<