diff options
author | Jenna Fox <a@creativepony.com> | 2012-09-23 19:35:41 +1000 |
---|---|---|
committer | Jenna Fox <a@creativepony.com> | 2012-09-23 19:35:41 +1000 |
commit | 288212e19a9341788772afcc0fb02d8240e5ffcc (patch) | |
tree | 2caa021f8fa8a9dd14ef3511341d5f7052826e05 /firmware | |
parent | 41b3fdbb95bc6751d00b5c8b9aef61d0a5ec6697 (diff) | |
download | micronucleus-288212e19a9341788772afcc0fb02d8240e5ffcc.tar.gz micronucleus-288212e19a9341788772afcc0fb02d8240e5ffcc.tar.bz2 micronucleus-288212e19a9341788772afcc0fb02d8240e5ffcc.zip |
Giving up on HID - looks like OS wants to poll it which wont work with frozen writing/erasing chip, so going to make custom usb class mini bootloader based on this. This is the last commit where there was something which might be adaptable in to a hid driver
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/Makefile | 2 | ||||
-rw-r--r-- | firmware/libs-device/osccal.c.lst | 20 | ||||
-rw-r--r-- | firmware/libs-device/osccal.o | bin | 956 -> 0 bytes | |||
-rwxr-xr-x | firmware/main.bin | bin | 8512 -> 8879 bytes | |||
-rw-r--r-- | firmware/main.c | 184 | ||||
-rw-r--r-- | firmware/main.c.lst | 1855 | ||||
-rw-r--r-- | firmware/main.hex | 260 | ||||
-rw-r--r-- | firmware/main.map | 76 | ||||
-rw-r--r-- | firmware/main.o | bin | 5992 -> 6304 bytes | |||
-rw-r--r-- | firmware/usbconfig.h | 10 | ||||
-rw-r--r-- | firmware/usbdrv/usbdrvasm.o | bin | 4064 -> 4364 bytes |
11 files changed, 1172 insertions, 1235 deletions
diff --git a/firmware/Makefile b/firmware/Makefile index bbb4d67..bc6ab7f 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -149,7 +149,7 @@ CFLAGS = -Wall -Os -fno-move-loop-invariants -fno-tree-scev-cprop -fno-inline-sm LDFLAGS = -Wl,--relax,--gc-sections -Wl,--section-start=.text=$(BOOTLOADER_ADDRESS),-Map=main.map OBJECTS = usbdrv/usbdrvasm.o main.o -OBJECTS += libs-device/osccal.o +#### OBJECTS += libs-device/osccal.o # symbolic targets: all: main.hex diff --git a/firmware/libs-device/osccal.c.lst b/firmware/libs-device/osccal.c.lst index 6f3dda5..15c6e39 100644 --- a/firmware/libs-device/osccal.c.lst +++ b/firmware/libs-device/osccal.c.lst @@ -1,4 +1,4 @@ -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccedtz3p.s page 1 +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccFtOAWY.s page 1 1 .file "osccal.c" @@ -58,7 +58,7 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccedtz3p.s page 55 0046 8C17 cp r24,r28 56 0048 9D07 cpc r25,r29 57 004a 04F4 brge .L6 -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccedtz3p.s page 2 +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccFtOAWY.s page 2 58 004c 01B7 in r16,81-32 @@ -85,18 +85,18 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccedtz3p.s page 79 0070 FF90 pop r15 80 0072 0895 ret 81 .size calibrateOscillator, .-calibrateOscillator -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccedtz3p.s page 3 +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccFtOAWY.s page 3 DEFINED SYMBOLS *ABS*:00000000 osccal.c -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccedtz3p.s:2 *ABS*:0000003f __SREG__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccedtz3p.s:3 *ABS*:0000003e __SP_H__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccedtz3p.s:4 *ABS*:0000003d __SP_L__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccedtz3p.s:5 *ABS*:00000034 __CCP__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccedtz3p.s:6 *ABS*:00000000 __tmp_reg__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccedtz3p.s:7 *ABS*:00000001 __zero_reg__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccedtz3p.s:11 .text:00000000 calibrateOscillator +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccFtOAWY.s:2 *ABS*:0000003f __SREG__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccFtOAWY.s:3 *ABS*:0000003e __SP_H__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccFtOAWY.s:4 *ABS*:0000003d __SP_L__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccFtOAWY.s:5 *ABS*:00000034 __CCP__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccFtOAWY.s:6 *ABS*:00000000 __tmp_reg__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccFtOAWY.s:7 *ABS*:00000001 __zero_reg__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccFtOAWY.s:11 .text:00000000 calibrateOscillator UNDEFINED SYMBOLS usbMeasureFrameLength diff --git a/firmware/libs-device/osccal.o b/firmware/libs-device/osccal.o Binary files differdeleted file mode 100644 index 79622f1..0000000 --- a/firmware/libs-device/osccal.o +++ /dev/null diff --git a/firmware/main.bin b/firmware/main.bin Binary files differindex 352ffea..af6070d 100755 --- a/firmware/main.bin +++ b/firmware/main.bin diff --git a/firmware/main.c b/firmware/main.c index fa91e40..d4fc842 100644 --- a/firmware/main.c +++ b/firmware/main.c @@ -16,12 +16,13 @@ #include <avr/boot.h> //#include <avr/eeprom.h> #include <util/delay.h> -#include <string.h> +//#include <string.h> static void leaveBootloader() __attribute__((__noreturn__)); #include "bootloaderconfig.h" #include "usbdrv/usbdrv.c" +#include "libs-device/osccal.c" /* ------------------------------------------------------------------------ */ @@ -112,7 +113,7 @@ PROGMEM char usbHidReportDescriptor[33] = { /* ------------------------------------------------------------------------ */ // TODO: inline these? -static void eraseFlashPage(void) { +static inline void eraseFlashPage(void) { cli(); boot_page_erase(currentAddress - 2); boot_spm_busy_wait(); @@ -162,15 +163,15 @@ static void writeWordToPageBuffer(uint16_t data) { // only need to erase if there is data already in the page that doesn't match what we're programming // TODO: what about this: if (pgm_read_word(currentAddress) & data != data) { ??? should work right? - if (pgm_read_word(currentAddress) != data && pgm_read_word(currentAddress) != 0xFFFF) { + //if (pgm_read_word(currentAddress) != data && pgm_read_word(currentAddress) != 0xFFFF) { + if (pgm_read_word(currentAddress) & data != data) { fireEvent(EVENT_PAGE_NEEDS_ERASE); } currentAddress += 2; } -static void fillFlashWithVectors(void) -{ +static void fillFlashWithVectors(void) { int16_t i; // fill all or remainder of page with 0xFFFF @@ -181,24 +182,6 @@ static void fillFlashWithVectors(void) writeFlashPage(); } -// # if HAVE_CHIP_ERASE -// static void eraseApplication(void) -// { -// // erase all pages starting from end of application section down to page 1 (leaving page 0) -// currentAddress = BOOTLOADER_ADDRESS - SPM_PAGESIZE; -// while(currentAddress != 0x0000) -// { -// boot_page_erase(currentAddress); -// boot_spm_busy_wait(); -// -// currentAddress -= SPM_PAGESIZE; -// } -// -// // erase and load page 0 with vectors -// fillFlashWithVectors(); -// } -// # endif - static inline __attribute__((noreturn)) void leaveBootloader(void) { //DBG1(0x01, 0, 0); @@ -225,12 +208,12 @@ static inline __attribute__((noreturn)) void leaveBootloader(void) { /* ------------------------------------------------------------------------ */ -uchar usbFunctionSetup(uchar data[8]) { +static uchar usbFunctionSetup(uchar data[8]) { usbRequest_t *rq = (void *)data; static uchar replyBuffer[7] = { // TODO: Adjust this buffer size when trimming off those two useless bytes 1, // report ID SPM_PAGESIZE & 0xff, - SPM_PAGESIZE >> 8, // also completely useless on tiny85's - they'll never have more than 64 byte pagesize + 0, // also completely useless on tiny85's - they'll never have more than 64 byte pagesize ((uint)PROGMEM_SIZE) & 0xff, (((uint)PROGMEM_SIZE) >> 8) & 0xff, 0, @@ -254,157 +237,10 @@ uchar usbFunctionSetup(uchar data[8]) { } return 0; } -// -// uchar usbFunctionSetup(uchar data[8]) { -// usbRequest_t *rq = (void *)data; -// uchar len = 0; -// static uchar replyBuffer[4]; -// -// -// usbMsgPtr = replyBuffer; -// if (rq->bRequest == USBASP_FUNC_TRANSMIT) { /* emulate parts of ISP protocol */ -// uchar rval = 0; -// usbWord_t address; -// address.bytes[1] = rq->wValue.bytes[1]; -// address.bytes[0] = rq->wIndex.bytes[0]; -// if(rq->wValue.bytes[0] == 0x30){ /* read signature */ -// rval = rq->wIndex.bytes[0] & 3; -// rval = signatureBytes[rval]; -// #if HAVE_EEPROM_BYTE_ACCESS -// }else if(rq->wValue.bytes[0] == 0xa0){ /* read EEPROM byte */ -// rval = eeprom_read_byte((void *)address.word); -// }else if(rq->wValue.bytes[0] == 0xc0){ /* write EEPROM byte */ -// eeprom_write_byte((void *)address.word, rq->wIndex.bytes[1]); -// #endif -// #if HAVE_CHIP_ERASE -// }else if(rq->wValue.bytes[0] == 0xac && rq->wValue.bytes[1] == 0x80){ /* chip erase */ -// # ifdef TINY85MODE -// eraseRequested = 1; -// # else -// addr_t addr; -// for(addr = 0; addr < FLASHEND + 1 - 2048; addr += SPM_PAGESIZE) { -// /* wait and erase page */ -// //DBG1(0x33, 0, 0); -// # ifndef NO_FLASH_WRITE -// boot_spm_busy_wait(); -// cli(); -// boot_page_erase(addr); -// sei(); -// # endif -// } -// # endif -// #endif -// }else{ -// /* ignore all others, return default value == 0 */ -// } -// replyBuffer[3] = rval; -// len = 4; -// }else if(rq->bRequest == USBASP_FUNC_ENABLEPROG){ -// /* replyBuffer[0] = 0; is never touched and thus always 0 which means success */ -// len = 1; -// }else if(rq->bRequest >= USBASP_FUNC_READFLASH && rq->bRequest <= USBASP_FUNC_SETLONGADDRESS){ -// currentAddress.w[0] = rq->wValue.word; -// if(rq->bRequest == USBASP_FUNC_SETLONGADDRESS){ -// #if (FLASHEND) > 0xffff -// currentAddress.w[1] = rq->wIndex.word; -// #endif -// }else{ -// bytesRemaining = rq->wLength.bytes[0]; -// /* if(rq->bRequest == USBASP_FUNC_WRITEFLASH) only evaluated during writeFlash anyway */ -// isLastPage = rq->wIndex.bytes[1] & 0x02; -// #if HAVE_EEPROM_PAGED_ACCESS -// currentRequest = rq->bRequest; -// #endif -// len = 0xff; /* hand over to usbFunctionRead() / usbFunctionWrite() */ -// } -// #if BOOTLOADER_CAN_EXIT -// }else if(rq->bRequest == USBASP_FUNC_DISCONNECT){ -// requestBootLoaderExit = 1; /* allow proper shutdown/close of connection */ -// #endif -// }else{ -// /* ignore: USBASP_FUNC_CONNECT */ -// } -// return len; -// } - -// uchar usbFunctionWrite(uchar *data, uchar len) -// { -// uchar isLast; -// -// //DBG1(0x31, (void *)¤tAddress.l, 4); -// if(len > bytesRemaining) -// len = bytesRemaining; -// bytesRemaining -= len; -// isLast = bytesRemaining == 0; -// #if HAVE_EEPROM_PAGED_ACCESS -// if(currentRequest >= USBASP_FUNC_READEEPROM){ -// uchar i; -// for(i = 0; i < len; i++){ -// eeprom_write_byte((void *)(currentAddress.w[0]++), *data++); -// } -// }else { -// #endif -// uchar i; -// for(i = 0; i < len;){ -// //#ifdef TINY85MODE -// //#if 1 -// if(currentAddress == RESET_VECTOR_OFFSET * 2) -// { -// vectorTemp[0] = *(short *)data; -// } -// if(currentAddress == USBPLUS_VECTOR_OFFSET * 2) -// { -// vectorTemp[1] = *(short *)data; -// } -// // #else -// // if(currentAddress == RESET_VECTOR_OFFSET * 2 || currentAddress == USBPLUS_VECTOR_OFFSET * 2) -// // { -// // vectorTemp[currentAddress ? 1:0] = *(short *)data; -// // } -// // #endif -// -// i += 2; -// //DBG1(0x32, 0, 0); -// #ifdef TINY85MODE -// if(currentAddress >= BOOTLOADER_ADDRESS - 6) -// { -// // stop writing data to flash if the application is too big, and clear any leftover data in the page buffer -// __boot_page_fill_clear(); -// return isLast; -// } -// -// writeWordToPageBuffer(*(short *)data); -// #else -// cli(); -// boot_page_fill(currentAddress, *(short *)data); -// sei(); -// currentAddress += 2; -// #endif -// data += 2; -// /* write page when we cross page boundary or we have the last partial page */ -// if((currentAddress.w[0] & (SPM_PAGESIZE - 1)) == 0 || (isLast && i >= len && isLastPage)){ -// //DBG1(0x34, 0, 0); -// #ifdef TINY85MODE -// flashPageLoaded = 1; -// #else -// # ifndef NO_FLASH_WRITE -// cli(); -// boot_page_write(currentAddress - 2); -// sei(); -// boot_spm_busy_wait(); -// cli(); -// boot_rww_enable(); -// sei(); -// # endif -// #endif -// } -// } -// -// return isLast; -// } + // read in a page over usb, and write it in to the flash write buffer -uchar usbFunctionWrite(uchar *data, uchar length) { +static uchar usbFunctionWrite(uchar *data, uchar length) { union { addr_t l; uint s[sizeof(addr_t)/2]; diff --git a/firmware/main.c.lst b/firmware/main.c.lst index 83300d0..e442403 100644 --- a/firmware/main.c.lst +++ b/firmware/main.c.lst @@ -1,4 +1,4 @@ -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s page 1 +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s page 1 1 .file "main.c" @@ -16,7 +16,7 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s page 13 /* stack size = 0 */ 14 .L__stack_usage = 0 15 /* #APP */ - 16 ; 123 "main.c" 1 + 16 ; 124 "main.c" 1 17 0000 F894 cli 18 ; 0 "" 2 19 /* #NOAPP */ @@ -25,7 +25,7 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s page 22 000a 3297 sbiw r30,2 23 000c 85E0 ldi r24,lo8(5) 24 /* #APP */ - 25 ; 124 "main.c" 1 + 25 ; 125 "main.c" 1 26 000e 8093 5700 sts 87, r24 27 0012 E895 spm 28 @@ -36,7 +36,7 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s page 33 0016 00FC sbrc __tmp_reg__,0 34 0018 00C0 rjmp .L2 35 /* #APP */ - 36 ; 126 "main.c" 1 + 36 ; 127 "main.c" 1 37 001a 7894 sei 38 ; 0 "" 2 39 /* epilogue start */ @@ -53,905 +53,988 @@ GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s page 50 0022 3091 0000 lds r19,currentAddress+1 51 0026 2115 cp r18,__zero_reg__ 52 0028 3105 cpc r19,__zero_reg__ - 53 002a 01F4 brne .+2 - 54 002c 00C0 rjmp .L4 - 55 002e 2430 cpi r18,4 - 56 0030 3105 cpc r19,__zero_reg__ - 57 0032 01F0 breq .L9 -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s page 2 - - - 58 0034 44E1 ldi r20,hi8(5372) - 59 0036 2C3F cpi r18,lo8(5372) - 60 0038 3407 cpc r19,r20 - 61 003a 01F4 brne .L6 - 62 003c 8091 0000 lds r24,vectorTemp - 63 0040 9091 0000 lds r25,vectorTemp+1 - 64 0044 8E57 subi r24,lo8(-(1410)) - 65 0046 9A4F sbci r25,hi8(-(1410)) - 66 0048 00C0 rjmp .L7 - 67 .L6: - 68 004a 44E1 ldi r20,hi8(5374) - 69 004c 2E3F cpi r18,lo8(5374) - 70 004e 3407 cpc r19,r20 - 71 0050 01F4 brne .L7 - 72 0052 8091 0000 lds r24,vectorTemp+2 - 73 0056 9091 0000 lds r25,vectorTemp+2+1 - 74 005a 8D57 subi r24,lo8(-(1411)) - 75 005c 9A4F sbci r25,hi8(-(1411)) - 76 005e 00C0 rjmp .L7 - 77 .L9: - 78 0060 8FE7 ldi r24,lo8(-13697) - 79 0062 9AEC ldi r25,hi8(-13697) - 80 .L7: - 81 /* #APP */ - 82 ; 159 "main.c" 1 - 83 0064 F894 cli - 84 ; 0 "" 2 - 85 /* #NOAPP */ - 86 0066 E091 0000 lds r30,currentAddress - 87 006a F091 0000 lds r31,currentAddress+1 - 88 006e 21E0 ldi r18,lo8(1) - 89 /* #APP */ - 90 ; 160 "main.c" 1 - 91 0070 0C01 movw r0, r24 - 92 0072 2093 5700 sts 87, r18 - 93 0076 E895 spm - 94 0078 1124 clr r1 - 95 - 96 ; 0 "" 2 - 97 ; 161 "main.c" 1 - 98 007a 7894 sei - 99 ; 0 "" 2 - 100 /* #NOAPP */ - 101 007c 2091 0000 lds r18,currentAddress - 102 0080 3091 0000 lds r19,currentAddress+1 - 103 0084 F901 movw r30,r18 - 104 /* #APP */ - 105 ; 165 "main.c" 1 - 106 0086 4591 lpm r20, Z+ - 107 0088 5491 lpm r21, Z - 108 - 109 ; 0 "" 2 - 110 /* #NOAPP */ - 111 008a 4817 cp r20,r24 - 112 008c 5907 cpc r21,r25 - 113 008e 01F0 breq .L8 - 114 0090 8FEF ldi r24,hi8(-1) -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s page 3 - - - 115 0092 4F3F cpi r20,lo8(-1) - 116 0094 5807 cpc r21,r24 - 117 0096 01F0 breq .L8 - 118 0098 8091 0000 lds r24,events - 119 009c 8160 ori r24,lo8(1) - 120 009e 8093 0000 sts events,r24 - 121 .L8: - 122 00a2 2E5F subi r18,lo8(-(2)) - 123 00a4 3F4F sbci r19,hi8(-(2)) - 124 00a6 3093 0000 sts currentAddress+1,r19 - 125 00aa 2093 0000 sts currentAddress,r18 - 126 /* epilogue start */ - 127 00ae 0895 ret - 128 .L4: - 129 00b0 81E1 ldi r24,lo8(17) - 130 /* #APP */ - 131 ; 157 "main.c" 1 - 132 00b2 8093 5700 sts 87, r24 - 133 00b6 E895 spm - 134 - 135 ; 0 "" 2 - 136 /* #NOAPP */ - 137 00b8 00C0 rjmp .L9 - 138 .size writeWordToPageBuffer, .-writeWordToPageBuffer - 139 .type fillFlashWithVectors, @function - 140 fillFlashWithVectors: - 141 00ba CF93 push r28 - 142 00bc DF93 push r29 - 143 /* prologue: function */ - 144 /* frame size = 0 */ - 145 /* stack size = 2 */ - 146 .L__stack_usage = 2 - 147 00be C091 0000 lds r28,currentAddress - 148 00c2 D091 0000 lds r29,currentAddress+1 - 149 00c6 CF73 andi r28,lo8(63) - 150 00c8 D070 andi r29,hi8(63) - 151 .L11: - 152 00ca 8FEF ldi r24,lo8(-1) - 153 00cc 9FEF ldi r25,hi8(-1) - 154 00ce 00D0 rcall writeWordToPageBuffer - 155 00d0 2296 adiw r28,2 - 156 00d2 C034 cpi r28,64 - 157 00d4 D105 cpc r29,__zero_reg__ - 158 00d6 04F0 brlt .L11 - 159 00d8 00D0 rcall writeFlashPage - 160 /* epilogue start */ - 161 00da DF91 pop r29 - 162 00dc CF91 pop r28 - 163 00de 0895 ret - 164 .size fillFlashWithVectors, .-fillFlashWithVectors - 165 .section .init3,"ax",@progbits - 166 .global PushMagicWord - 167 .type PushMagicWord, @function - 168 PushMagicWord: - 169 /* prologue: naked */ - 170 /* frame size = 0 */ - 171 /* stack size = 0 */ -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s page 4 - - - 172 .L__stack_usage = 0 - 173 /* #APP */ - 174 ; 464 "main.c" 1 - 175 0000 00EB ldi r16, 0xB0 - 176 ; 0 "" 2 - 177 ; 465 "main.c" 1 - 178 0002 0F93 push r16 - 179 ; 0 "" 2 - 180 ; 466 "main.c" 1 - 181 0004 07E0 ldi r16, 0x07 - 182 ; 0 "" 2 - 183 ; 467 "main.c" 1 - 184 0006 0F93 push r16 - 185 ; 0 "" 2 - 186 /* epilogue start */ - 187 /* #NOAPP */ - 188 .size PushMagicWord, .-PushMagicWord - 189 .text - 190 .global main - 191 .type main, @function - 192 main: - 193 00e0 DF93 push r29 - 194 00e2 CF93 push r28 - 195 00e4 0F92 push __tmp_reg__ - 196 00e6 CDB7 in r28,__SP_L__ - 197 00e8 DEB7 in r29,__SP_H__ - 198 /* prologue: function */ - 199 /* frame size = 1 */ - 200 /* stack size = 3 */ - 201 .L__stack_usage = 3 - 202 00ea 88E1 ldi r24,lo8(24) - 203 /* #APP */ - 204 ; 496 "main.c" 1 - 205 00ec 0FB6 in __tmp_reg__, __SREG__ - 206 00ee F894 cli - 207 00f0 81BD out 33, r24 - 208 00f2 11BC out 33, __zero_reg__ - 209 00f4 0FBE out __SREG__,__tmp_reg__ - 210 - 211 ; 0 "" 2 - 212 /* #NOAPP */ - 213 00f6 1092 0000 sts currentAddress+1,__zero_reg__ - 214 00fa 1092 0000 sts currentAddress,__zero_reg__ - 215 00fe AC9A sbi 53-32,4 - 216 0100 8BB7 in r24,91-32 - 217 0102 8062 ori r24,lo8(32) - 218 0104 8BBF out 91-32,r24 - 219 0106 BB9A sbi 55-32,3 - 220 0108 8FE4 ldi r24,lo8(1649999) - 221 010a 9DE2 ldi r25,hi8(1649999) - 222 010c A9E1 ldi r26,hlo8(1649999) - 223 010e 8150 1:subi r24,1 - 224 0110 9040 sbci r25,0 - 225 0112 A040 sbci r26,0 - 226 0114 01F4 brne 1b - 227 0116 00C0 rjmp . - 228 0118 0000 nop -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s page 5 - - - 229 011a BB98 cbi 55-32,3 - 230 /* #APP */ - 231 ; 478 "main.c" 1 - 232 011c 7894 sei - 233 ; 0 "" 2 - 234 /* #NOAPP */ - 235 011e EE24 clr r14 - 236 0120 FF24 clr r15 - 237 .L60: - 238 0122 8091 0000 lds r24,usbRxLen - 239 0126 282F mov r18,r24 - 240 0128 2350 subi r18,lo8(-(-3)) - 241 012a 27FD sbrc r18,7 - 242 012c 00C0 rjmp .L14 - 243 012e 9091 0000 lds r25,usbInputBufOffset - 244 0132 ECE0 ldi r30,lo8(12) - 245 0134 F0E0 ldi r31,hi8(12) - 246 0136 E91B sub r30,r25 - 247 0138 F109 sbc r31,__zero_reg__ - 248 013a E050 subi r30,lo8(-(usbRxBuf)) - 249 013c F040 sbci r31,hi8(-(usbRxBuf)) - 250 013e 9091 0000 lds r25,usbRxToken - 251 0142 9D32 cpi r25,lo8(45) - 252 0144 01F0 breq .+2 - 253 0146 00C0 rjmp .L15 - 254 0148 2830 cpi r18,lo8(8) - 255 014a 01F0 breq .+2 - 256 014c 00C0 rjmp .L16 - 257 014e 83EC ldi r24,lo8(-61) - 258 0150 8093 0000 sts usbTxBuf,r24 - 259 0154 8AE5 ldi r24,lo8(90) - 260 0156 8093 0000 sts usbTxLen,r24 - 261 015a 1092 0000 sts usbMsgFlags,__zero_reg__ - 262 015e 9081 ld r25,Z - 263 0160 292F mov r18,r25 - 264 0162 2076 andi r18,lo8(96) - 265 0164 8181 ldd r24,Z+1 - 266 0166 2223 tst r18 - 267 0168 01F0 breq .L17 - 268 016a 8930 cpi r24,lo8(9) - 269 016c 01F4 brne .L18 - 270 016e 8281 ldd r24,Z+2 - 271 0170 8230 cpi r24,lo8(2) - 272 0172 01F4 brne .L19 - 273 0174 81E0 ldi r24,lo8(1) - 274 0176 8093 0000 sts state,r24 - 275 017a 97FD sbrc r25,7 - 276 017c 00C0 rjmp .L20 - 277 017e 2FEF ldi r18,lo8(-1) - 278 0180 00C0 rjmp .L21 - 279 .L19: - 280 0182 8091 0000 lds r24,events - 281 0186 8460 ori r24,lo8(4) - 282 0188 8093 0000 sts events,r24 - 283 018c 00C0 rjmp .L62 - 284 .L18: - 285 018e 8130 cpi r24,lo8(1) -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s page 6 - - - 286 0190 01F0 breq .+2 - 287 0192 00C0 rjmp .L62 - 288 0194 80E0 ldi r24,lo8(replyBuffer.1882) - 289 0196 90E0 ldi r25,hi8(replyBuffer.1882) - 290 0198 9093 0000 sts usbMsgPtr+1,r25 - 291 019c 8093 0000 sts usbMsgPtr,r24 - 292 01a0 27E0 ldi r18,lo8(7) - 293 01a2 00C0 rjmp .L61 - 294 .L17: - 295 01a4 9281 ldd r25,Z+2 - 296 01a6 1092 0000 sts usbTxBuf+9,__zero_reg__ - 297 01aa 8823 tst r24 - 298 01ac 01F4 brne .L23 - 299 01ae 1092 0000 sts usbTxBuf+10,__zero_reg__ - 300 01b2 80E0 ldi r24,lo8(usbTxBuf+9) - 301 01b4 90E0 ldi r25,hi8(usbTxBuf+9) - 302 01b6 22E0 ldi r18,lo8(2) - 303 01b8 00C0 rjmp .L24 - 304 .L23: - 305 01ba 8530 cpi r24,lo8(5) - 306 01bc 01F4 brne .L25 - 307 01be 9093 0000 sts usbNewDeviceAddr,r25 - 308 01c2 00C0 rjmp .L69 - 309 .L25: - 310 01c4 8630 cpi r24,lo8(6) - 311 01c6 01F0 breq .+2 - 312 01c8 00C0 rjmp .L26 - 313 01ca 8381 ldd r24,Z+3 - 314 01cc 8130 cpi r24,lo8(1) - 315 01ce 01F4 brne .L27 - 316 01d0 80E0 ldi r24,lo8(usbDescriptorDevice) - 317 01d2 90E0 ldi r25,hi8(usbDescriptorDevice) - 318 01d4 00C0 rjmp .L68 - 319 .L27: - 320 01d6 8230 cpi r24,lo8(2) - 321 01d8 01F4 brne .L29 - 322 01da 80E0 ldi r24,lo8(usbDescriptorConfiguration) - 323 01dc 90E0 ldi r25,hi8(usbDescriptorConfiguration) - 324 01de 9093 0000 sts usbMsgPtr+1,r25 - 325 01e2 8093 0000 sts usbMsgPtr,r24 - 326 01e6 22E2 ldi r18,lo8(34) - 327 01e8 00C0 rjmp .L28 - 328 .L29: - 329 01ea 8330 cpi r24,lo8(3) - 330 01ec 01F4 brne .L30 - 331 01ee 9923 tst r25 - 332 01f0 01F4 brne .L31 - 333 01f2 80E0 ldi r24,lo8(usbDescriptorString0) - 334 01f4 90E0 ldi r25,hi8(usbDescriptorString0) - 335 01f6 9093 0000 sts usbMsgPtr+1,r25 - 336 01fa 8093 0000 sts usbMsgPtr,r24 - 337 01fe 24E0 ldi r18,lo8(4) - 338 0200 00C0 rjmp .L28 - 339 .L31: - 340 0202 9130 cpi r25,lo8(1) - 341 0204 01F4 brne .L32 - 342 0206 80E0 ldi r24,lo8(usbDescriptorStringVendor) -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s page 7 - - - 343 0208 90E0 ldi r25,hi8(usbDescriptorStringVendor) - 344 .L68: - 345 020a 9093 0000 sts usbMsgPtr+1,r25 - 346 020e 8093 0000 sts usbMsgPtr,r24 - 347 0212 22E1 ldi r18,lo8(18) - 348 0214 00C0 rjmp .L28 - 349 .L32: - 350 0216 9230 cpi r25,lo8(2) - 351 0218 01F4 brne .L64 - 352 021a 80E0 ldi r24,lo8(usbDescriptorStringDevice) - 353 021c 90E0 ldi r25,hi8(usbDescriptorStringDevice) - 354 021e 9093 0000 sts usbMsgPtr+1,r25 - 355 0222 8093 0000 sts usbMsgPtr,r24 - 356 0226 20E1 ldi r18,lo8(16) - 357 0228 00C0 rjmp .L28 - 358 .L30: - 359 022a 8132 cpi r24,lo8(33) - 360 022c 01F4 brne .L33 - 361 022e 80E0 ldi r24,lo8(usbDescriptorConfiguration+18) - 362 0230 90E0 ldi r25,hi8(usbDescriptorConfiguration+18) - 363 0232 9093 0000 sts usbMsgPtr+1,r25 - 364 0236 8093 0000 sts usbMsgPtr,r24 - 365 023a 29E0 ldi r18,lo8(9) - 366 023c 00C0 rjmp .L28 - 367 .L33: - 368 023e 8232 cpi r24,lo8(34) - 369 0240 01F4 brne .L64 - 370 0242 80E0 ldi r24,lo8(usbDescriptorHidReport) - 371 0244 90E0 ldi r25,hi8(usbDescriptorHidReport) - 372 0246 9093 0000 sts usbMsgPtr+1,r25 - 373 024a 8093 0000 sts usbMsgPtr,r24 - 374 024e 21E2 ldi r18,lo8(33) - 375 0250 00C0 rjmp .L28 - 376 .L64: - 377 0252 20E0 ldi r18,lo8(0) - 378 .L28: - 379 0254 80E4 ldi r24,lo8(64) - 380 0256 8093 0000 sts usbMsgFlags,r24 - 381 025a 00C0 rjmp .L61 - 382 .L26: - 383 025c 8830 cpi r24,lo8(8) - 384 025e 01F0 breq .L65 - 385 0260 8930 cpi r24,lo8(9) - 386 0262 01F4 brne .L35 - 387 0264 9093 0000 sts usbConfiguration,r25 - 388 0268 00C0 rjmp .L69 - 389 .L35: - 390 026a 8A30 cpi r24,lo8(10) - 391 026c 01F0 breq .L66 - 392 .L69: - 393 026e 80E0 ldi r24,lo8(usbTxBuf+9) - 394 0270 90E0 ldi r25,hi8(usbTxBuf+9) - 395 0272 20E0 ldi r18,lo8(0) - 396 0274 00C0 rjmp .L24 - 397 .L65: - 398 0276 80E0 ldi r24,lo8(usbConfiguration) - 399 0278 90E0 ldi r25,hi8(usbConfiguration) -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s page 8 - - - 400 027a 00C0 rjmp .L70 - 401 .L66: - 402 027c 80E0 ldi r24,lo8(usbTxBuf+9) - 403 027e 90E0 ldi r25,hi8(usbTxBuf+9) - 404 .L70: - 405 0280 21E0 ldi r18,lo8(1) - 406 .L24: - 407 0282 9093 0000 sts usbMsgPtr+1,r25 - 408 0286 8093 0000 sts usbMsgPtr,r24 - 409 028a 00C0 rjmp .L61 - 410 .L20: - 411 028c 2681 ldd r18,Z+6 - 412 .L21: - 413 028e 80E8 ldi r24,lo8(-128) - 414 0290 8093 0000 sts usbMsgFlags,r24 - 415 0294 00C0 rjmp .L36 - 416 .L61: - 417 0296 8781 ldd r24,Z+7 - 418 0298 8823 tst r24 - 419 029a 01F4 brne .L36 - 420 029c 8681 ldd r24,Z+6 - 421 029e 8217 cp r24,r18 - 422 02a0 00F4 brsh .L36 - 423 02a2 282F mov r18,r24 - 424 .L36: - 425 02a4 2093 0000 sts usbMsgLen,r18 - 426 02a8 00C0 rjmp .L16 - 427 .L15: - 428 02aa 9091 0000 lds r25,usbMsgFlags - 429 02ae 97FF sbrs r25,7 - 430 02b0 00C0 rjmp .L16 - 431 02b2 9091 0000 lds r25,state - 432 02b6 9130 cpi r25,lo8(1) - 433 02b8 01F4 brne .L37 - 434 02ba 3181 ldd r19,Z+1 - 435 02bc 9281 ldd r25,Z+2 - 436 02be 3496 adiw r30,4 - 437 02c0 282F mov r18,r24 - 438 02c2 2750 subi r18,lo8(-(-7)) - 439 02c4 3093 0000 sts currentAddress,r19 - 440 02c8 9093 0000 sts currentAddress+1,r25 - 441 02cc 82E0 ldi r24,lo8(2) - 442 02ce 8093 0000 sts state,r24 - 443 .L37: - 444 02d2 8F01 movw r16,r30 - 445 .L42: - 446 02d4 8091 0000 lds r24,currentAddress - 447 02d8 9091 0000 lds r25,currentAddress+1 - 448 02dc 0097 sbiw r24,0 - 449 02de 01F4 brne .L38 - 450 02e0 D801 movw r26,r16 - 451 02e2 8D91 ld r24,X+ - 452 02e4 9C91 ld r25,X - 453 02e6 1197 sbiw r26,1 - 454 02e8 9093 0000 sts vectorTemp+1,r25 - 455 02ec 8093 0000 sts vectorTemp,r24 - 456 02f0 00C0 rjmp .L39 -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s page 9 - - - 457 .L38: - 458 02f2 8430 cpi r24,4 - 459 02f4 9105 cpc r25,__zero_reg__ - 460 02f6 01F4 brne .L40 - 461 02f8 F801 movw r30,r16 - 462 02fa 8081 ld r24,Z - 463 02fc 9181 ldd r25,Z+1 - 464 02fe 9093 0000 sts vectorTemp+2+1,r25 - 465 0302 8093 0000 sts vectorTemp+2,r24 - 466 0306 00C0 rjmp .L39 - 467 .L40: - 468 0308 F4E1 ldi r31,hi8(5370) - 469 030a 8A3F cpi r24,lo8(5370) - 470 030c 9F07 cpc r25,r31 - 471 030e 00F0 brlo .L39 - 472 0310 81E1 ldi r24,lo8(17) - 473 /* #APP */ - 474 ; 441 "main.c" 1 - 475 0312 8093 5700 sts 87, r24 - 476 0316 E895 spm - 477 - 478 ; 0 "" 2 - 479 /* #NOAPP */ - 480 0318 00C0 rjmp .L41 - 481 .L39: - 482 031a D801 movw r26,r16 - 483 031c 8D91 ld r24,X+ - 484 031e 9D91 ld r25,X+ - 485 0320 8D01 movw r16,r26 - 486 0322 2983 std Y+1,r18 - 487 0324 00D0 rcall writeWordToPageBuffer - 488 0326 8091 0000 lds r24,currentAddress - 489 032a 9091 0000 lds r25,currentAddress+1 - 490 032e 0296 adiw r24,2 - 491 0330 9093 0000 sts currentAddress+1,r25 - 492 0334 8093 0000 sts currentAddress,r24 - 493 0338 2981 ldd r18,Y+1 - 494 033a 2250 subi r18,lo8(-(-2)) - 495 033c 01F4 brne .L42 - 496 .L41: - 497 033e 8091 0000 lds r24,currentAddress - 498 0342 9091 0000 lds r25,currentAddress+1 - 499 0346 8F73 andi r24,lo8(63) - 500 0348 9070 andi r25,hi8(63) - 501 034a 0097 sbiw r24,0 - 502 034c 01F0 breq .L16 - 503 034e 8091 0000 lds r24,events - 504 0352 8260 ori r24,lo8(2) - 505 0354 8093 0000 sts events,r24 - 506 0358 1092 0000 sts usbMsgLen,__zero_reg__ - 507 .L16: - 508 035c 1092 0000 sts usbRxLen,__zero_reg__ - 509 .L14: - 510 0360 8091 0000 lds r24,usbTxLen - 511 0364 84FF sbrs r24,4 - 512 0366 00C0 rjmp .L43 - 513 0368 8091 0000 lds r24,usbMsgLen -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s page 10 - - - 514 036c 8F3F cpi r24,lo8(-1) - 515 036e 01F4 brne .+2 - 516 0370 00C0 rjmp .L43 - 517 0372 082F mov r16,r24 - 518 0374 8930 cpi r24,lo8(9) - 519 0376 00F0 brlo .L44 - 520 0378 08E0 ldi r16,lo8(8) - 521 .L44: - 522 037a 801B sub r24,r16 - 523 037c 8093 0000 sts usbMsgLen,r24 - 524 0380 8091 0000 lds r24,usbTxBuf - 525 0384 98E8 ldi r25,lo8(-120) - 526 0386 8927 eor r24,r25 - 527 0388 8093 0000 sts usbTxBuf,r24 - 528 038c 0023 tst r16 - 529 038e 01F0 breq .L45 - 530 0390 E091 0000 lds r30,usbMsgPtr - 531 0394 F091 0000 lds r31,usbMsgPtr+1 - 532 0398 9091 0000 lds r25,usbMsgFlags - 533 039c 802F mov r24,r16 - 534 039e 8150 subi r24,lo8(-(-1)) - 535 03a0 96FF sbrs r25,6 - 536 03a2 00C0 rjmp .L46 - 537 03a4 90E0 ldi r25,lo8(0) - 538 03a6 8050 subi r24,lo8(-(usbTxBuf+2)) - 539 03a8 9040 sbci r25,hi8(-(usbTxBuf+2)) - 540 03aa A0E0 ldi r26,lo8(usbTxBuf+1) - 541 03ac B0E0 ldi r27,hi8(usbTxBuf+1) - 542 .L47: - 543 /* #APP */ - 544 ; 504 "usbdrv/usbdrv.c" 1 - 545 03ae 2491 lpm r18, Z - 546 - 547 ; 0 "" 2 - 548 /* #NOAPP */ - 549 03b0 2D93 st X+,r18 - 550 03b2 3196 adiw r30,1 - 551 03b4 A817 cp r26,r24 - 552 03b6 B907 cpc r27,r25 - 553 03b8 01F4 brne .L47 - 554 03ba 00C0 rjmp .L48 - 555 .L46: - 556 03bc 9F01 movw r18,r30 - 557 03be 90E0 ldi r25,lo8(0) - 558 03c0 8050 subi r24,lo8(-(usbTxBuf+2)) - 559 03c2 9040 sbci r25,hi8(-(usbTxBuf+2)) - 560 03c4 A0E0 ldi r26,lo8(usbTxBuf+1) - 561 03c6 B0E0 ldi r27,hi8(usbTxBuf+1) - 562 .L49: - 563 03c8 F901 movw r30,r18 - 564 03ca 4191 ld r20,Z+ - 565 03cc 9F01 movw r18,r30 - 566 03ce 4D93 st X+,r20 - 567 03d0 A817 cp r26,r24 - 568 03d2 B907 cpc r27,r25 - 569 03d4 01F4 brne .L49 - 570 .L48: -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s page 11 - - - 571 03d6 F093 0000 sts usbMsgPtr+1,r31 - 572 03da E093 0000 sts usbMsgPtr,r30 - 573 .L45: - 574 03de 80E0 ldi r24,lo8(usbTxBuf+1) - 575 03e0 90E0 ldi r25,hi8(usbTxBuf+1) - 576 03e2 602F mov r22,r16 - 577 03e4 00D0 rcall usbCrc16Append - 578 03e6 0C5F subi r16,lo8(-(4)) - 579 03e8 0C30 cpi r16,lo8(12) - 580 03ea 01F0 breq .L50 - 581 03ec 8FEF ldi r24,lo8(-1) - 582 03ee 8093 0000 sts usbMsgLen,r24 - 583 .L50: - 584 03f2 0093 0000 sts usbTxLen,r16 - 585 .L43: - 586 03f6 84E1 ldi r24,lo8(20) - 587 .L52: - 588 03f8 96B3 in r25,54-32 - 589 03fa 9871 andi r25,lo8(24) - 590 03fc 01F4 brne .L51 - 591 03fe 8150 subi r24,lo8(-(-1)) - 592 0400 01F4 brne .L52 - 593 0402 1092 0000 sts usbNewDeviceAddr,__zero_reg__ - 594 0406 1092 0000 sts usbDeviceAddr,__zero_reg__ - 595 .L51: - 596 040a 8CE9 ldi r24,lo8(412) - 597 040c 91E0 ldi r25,hi8(412) - 598 040e 0197 1:sbiw r24,1 - 599 0410 01F4 brne 1b - 600 0412 0000 nop - 601 0414 8091 0000 lds r24,events - 602 0418 8823 tst r24 - 603 041a 01F4 brne .L67 - 604 041c 0894 sec - 605 041e E11C adc r14,__zero_reg__ - 606 0420 F11C adc r15,__zero_reg__ - 607 0422 00C0 rjmp .L53 - 608 .L67: - 609 0424 EE24 clr r14 - 610 0426 FF24 clr r15 - 611 .L53: - 612 0428 80FF sbrs r24,0 - 613 042a 00C0 rjmp .L54 - 614 /* #APP */ - 615 ; 116 "main.c" 1 - 616 042c F894 cli - 617 ; 0 "" 2 - 618 /* #NOAPP */ - 619 042e E091 0000 lds r30,currentAddress - 620 0432 F091 0000 lds r31,currentAddress+1 - 621 0436 3297 sbiw r30,2 - 622 0438 83E0 ldi r24,lo8(3) - 623 /* #APP */ - 624 ; 117 "main.c" 1 - 625 043a 8093 5700 sts 87, r24 - 626 043e E895 spm - 627 -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s page 12 - - - 628 ; 0 "" 2 - 629 /* #NOAPP */ - 630 .L55: - 631 0440 07B6 in __tmp_reg__,87-32 - 632 0442 00FC sbrc __tmp_reg__,0 - 633 0444 00C0 rjmp .L55 - 634 /* #APP */ - 635 ; 119 "main.c" 1 - 636 0446 7894 sei - 637 ; 0 "" 2 - 638 /* #NOAPP */ - 639 .L54: - 640 0448 8091 0000 lds r24,events - 641 044c 81FF sbrs r24,1 - 642 044e 00C0 rjmp .L56 - 643 0450 A9E3 ldi r26,lo8(8249) - 644 0452 B0E2 ldi r27,hi8(8249) - 645 0454 1197 1:sbiw r26,1 - 646 0456 01F4 brne 1b - 647 0458 00C0 rjmp . - 648 045a 0000 nop - 649 045c 8091 0000 lds r24,currentAddress - 650 0460 9091 0000 lds r25,currentAddress+1 - 651 0464 8F73 andi r24,lo8(63) - 652 0466 9070 andi r25,hi8(63) - 653 0468 0097 sbiw r24,0 - 654 046a 01F0 breq .L57 - 655 046c 00D0 rcall fillFlashWithVectors - 656 046e 00C0 rjmp .L56 - 657 .L57: - 658 0470 00D0 rcall writeFlashPage - 659 .L56: - 660 0472 8091 0000 lds r24,events - 661 0476 82FD sbrc r24,2 - 662 0478 00C0 rjmp .L58 - 663 047a B1E5 ldi r27,lo8(-15535) - 664 047c EB16 cp r14,r27 - 665 047e B3EC ldi r27,hi8(-15535) - 666 0480 FB06 cpc r15,r27 - 667 0482 00F0 brlo .L59 - 668 .L58: - 669 0484 E1E2 ldi r30,lo8(-24287) - 670 0486 F1EA ldi r31,hi8(-24287) - 671 0488 3197 1:sbiw r30,1 - 672 048a 01F4 brne 1b - 673 048c 00C0 rjmp . - 674 048e 0000 nop - 675 /* #APP */ - 676 ; 206 "main.c" 1 - 677 0490 F894 cli - 678 ; 0 "" 2 - 679 /* #NOAPP */ - 680 0492 1BBE out 91-32,__zero_reg__ - 681 0494 15BA out 53-32,__zero_reg__ - 682 0496 1092 5F02 sts 607,__zero_reg__ - 683 049a 1092 5E02 sts 606,__zero_reg__ - 684 /* #APP */ -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s page 13 - - - 685 ; 223 "main.c" 1 - 686 049e 00C0 rjmp __vectors - 4 - 687 ; 0 "" 2 - 688 /* #NOAPP */ - 689 .L59: - 690 04a0 1092 0000 sts events,__zero_reg__ - 691 04a4 00C0 rjmp .L60 - 692 .L62: - 693 04a6 20E0 ldi r18,lo8(0) - 694 04a8 00C0 rjmp .L61 - 695 .size main, .-main - 696 .global usbTxLen - 697 .data - 698 .type usbTxLen, @object - 699 .size usbTxLen, 1 - 700 usbTxLen: - 701 0000 5A .byte 90 - 702 .global usbDescriptorString0 - 703 .section .progmem.data,"a",@progbits - 704 .type usbDescriptorString0, @object - 705 .size usbDescriptorString0, 4 - 706 usbDescriptorString0: - 707 0000 04 .byte 4 - 708 0001 03 .byte 3 - 709 0002 09 .byte 9 - 710 0003 04 .byte 4 - 711 .global usbDescriptorStringVendor - 712 .type usbDescriptorStringVendor, @object - 713 .size usbDescriptorStringVendor, 18 - 714 usbDescriptorStringVendor: - 715 0004 1203 .word 786 - 716 0006 6F00 .word 111 - 717 0008 6200 .word 98 - 718 000a 6400 .word 100 - 719 000c 6500 .word 101 - 720 000e 7600 .word 118 - 721 0010 2E00 .word 46 - 722 0012 6100 .word 97 - 723 0014 7400 .word 116 - 724 .global usbDescriptorStringDevice - 725 .type usbDescriptorStringDevice, @object - 726 .size usbDescriptorStringDevice, 16 - 727 usbDescriptorStringDevice: - 728 0016 1003 .word 784 - 729 0018 4800 .word 72 - 730 001a 4900 .word 73 - 731 001c 4400 .word 68 - 732 001e 4200 .word 66 - 733 0020 6F00 .word 111 - 734 0022 6F00 .word 111 - 735 0024 7400 .word 116 - 736 .global usbDescriptorDevice - 737 .type usbDescriptorDevice, @object - 738 .size usbDescriptorDevice, 18 - 739 usbDescriptorDevice: - 740 0026 12 .byte 18 - 741 0027 01 .byte 1 -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s page 14 - - - 742 0028 10 .byte 16 - 743 0029 01 .byte 1 - 744 002a 00 .byte 0 - 745 002b 00 .byte 0 - 746 002c 00 .byte 0 - 747 002d 08 .byte 8 - 748 002e C0 .byte -64 - 749 002f 16 .byte 22 - 750 0030 DF .byte -33 - 751 0031 05 .byte 5 - 752 0032 00 .byte 0 - 753 0033 01 .byte 1 - 754 0034 01 .byte 1 - 755 0035 02 .byte 2 - 756 0036 00 .byte 0 - 757 0037 01 .byte 1 - 758 .global usbDescriptorConfiguration - 759 .type usbDescriptorConfiguration, @object - 760 .size usbDescriptorConfiguration, 34 - 761 usbDescriptorConfiguration: - 762 0038 09 .byte 9 - 763 0039 02 .byte 2 - 764 003a 22 .byte 34 - 765 003b 00 .byte 0 - 766 003c 01 .byte 1 - 767 003d 01 .byte 1 - 768 003e 00 .byte 0 - 769 003f 80 .byte -128 - 770 0040 32 .byte 50 - 771 0041 09 .byte 9 - 772 0042 04 .byte 4 - 773 0043 00 .byte 0 - 774 0044 00 .byte 0 - 775 0045 01 .byte 1 - 776 0046 03 .byte 3 - 777 0047 00 .byte 0 - 778 0048 00 .byte 0 - 779 0049 00 .byte 0 - 780 004a 09 .byte 9 - 781 004b 21 .byte 33 - 782 004c 01 .byte 1 - 783 004d 01 .byte 1 - 784 004e 00 .byte 0 - 785 004f 01 .byte 1 - 786 0050 22 .byte 34 - 787 0051 21 .byte 33 - 788 0052 00 .byte 0 - 789 0053 07 .byte 7 - 790 0054 05 .byte 5 - 791 0055 81 .byte -127 - 792 0056 03 .byte 3 - 793 0057 08 .byte 8 - 794 0058 00 .byte 0 - 795 0059 C8 .byte -56 - 796 .global usbDescriptorHidReport - 797 .type usbDescriptorHidReport, @object - 798 .size usbDescriptorHidReport, 33 -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s page 15 - - - 799 usbDescriptorHidReport: - 800 005a 06 .byte 6 - 801 005b 00 .byte 0 - 802 005c FF .byte -1 - 803 005d 09 .byte 9 - 804 005e 01 .byte 1 - 805 005f A1 .byte -95 - 806 0060 01 .byte 1 - 807 0061 15 .byte 21 - 808 0062 00 .byte 0 - 809 0063 26 .byte 38 - 810 0064 FF .byte -1 - 811 0065 00 .byte 0 - 812 0066 75 .byte 117 - 813 0067 08 .byte 8 - 814 0068 85 .byte -123 - 815 0069 01 .byte 1 - 816 006a 95 .byte -107 - 817 006b 06 .byte 6 - 818 006c 09 .byte 9 - 819 006d 00 .byte 0 - 820 006e B2 .byte -78 - 821 006f 02 .byte 2 - 822 0070 01 .byte 1 - 823 0071 85 .byte -123 - 824 0072 02 .byte 2 - 825 0073 95 .byte -107 - 826 0074 83 .byte -125 - 827 0075 09 .byte 9 - 828 0076 00 .byte 0 - 829 0077 B2 .byte -78 - 830 0078 02 .byte 2 - 831 0079 01 .byte 1 - 832 007a C0 .byte -64 - 833 .comm usbMsgPtr,2,1 - 834 .comm usbRxToken,1,1 - 835 .comm usbConfiguration,1,1 - 836 .comm usbRxBuf,22,1 - 837 .comm usbInputBufOffset,1,1 - 838 .comm usbDeviceAddr,1,1 - 839 .comm usbNewDeviceAddr,1,1 - 840 .comm usbRxLen,1,1 - 841 .comm usbCurrentTok,1,1 - 842 .comm usbTxBuf,11,1 - 843 .lcomm currentAddress,2 - 844 .lcomm events,1 - 845 .data - 846 .type usbMsgLen, @object - 847 .size usbMsgLen, 1 - 848 usbMsgLen: - 849 0001 FF .byte -1 - 850 .lcomm usbMsgFlags,1 - 851 .lcomm state,1 - 852 .type replyBuffer.1882, @object - 853 .size replyBuffer.1882, 7 - 854 replyBuffer.1882: - 855 0002 01 .byte 1 -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s page 16 - - - 856 0003 40 .byte 64 - 857 0004 00 .byte 0 - 858 0005 FA .byte -6 - 859 0006 14 .byte 20 - 860 0007 00 .byte 0 - 861 0008 00 .byte 0 - 862 .lcomm vectorTemp,4 - 863 .global __do_copy_data - 864 .global __do_clear_bss -GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s page 17 + 53 002a 01F0 breq .L4 + 54 002c 2430 cpi r18,4 + 55 002e 3105 cpc r19,__zero_reg__ + 56 0030 01F0 breq .L8 + 57 0032 44E1 ldi r20,hi8(5372) +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s page 2 + + + 58 0034 2C3F cpi r18,lo8(5372) + 59 0036 3407 cpc r19,r20 + 60 0038 01F4 brne .L6 + 61 003a 8091 0000 lds r24,vectorTemp + 62 003e 9091 0000 lds r25,vectorTemp+1 + 63 0042 8E57 subi r24,lo8(-(1410)) + 64 0044 9A4F sbci r25,hi8(-(1410)) + 65 0046 00C0 rjmp .L7 + 66 .L6: + 67 0048 44E1 ldi r20,hi8(5374) + 68 004a 2E3F cpi r18,lo8(5374) + 69 004c 3407 cpc r19,r20 + 70 004e 01F4 brne .L7 + 71 0050 8091 0000 lds r24,vectorTemp+2 + 72 0054 9091 0000 lds r25,vectorTemp+2+1 + 73 0058 8D57 subi r24,lo8(-(1411)) + 74 005a 9A4F sbci r25,hi8(-(1411)) + 75 005c 00C0 rjmp .L7 + 76 .L8: + 77 005e 8FE7 ldi r24,lo8(-13697) + 78 0060 9AEC ldi r25,hi8(-13697) + 79 .L7: + 80 /* #APP */ + 81 ; 160 "main.c" 1 + 82 0062 F894 cli + 83 ; 0 "" 2 + 84 /* #NOAPP */ + 85 0064 E091 0000 lds r30,currentAddress + 86 0068 F091 0000 lds r31,currentAddress+1 + 87 006c 21E0 ldi r18,lo8(1) + 88 /* #APP */ + 89 ; 161 "main.c" 1 + 90 006e 0C01 movw r0, r24 + 91 0070 2093 5700 sts 87, r18 + 92 0074 E895 spm + 93 0076 1124 clr r1 + 94 + 95 ; 0 "" 2 + 96 ; 162 "main.c" 1 + 97 0078 7894 sei + 98 ; 0 "" 2 + 99 /* #NOAPP */ + 100 007a 8091 0000 lds r24,currentAddress + 101 007e 9091 0000 lds r25,currentAddress+1 + 102 0082 0296 adiw r24,2 + 103 0084 9093 0000 sts currentAddress+1,r25 + 104 0088 8093 0000 sts currentAddress,r24 + 105 /* epilogue start */ + 106 008c 0895 ret + 107 .L4: + 108 008e 81E1 ldi r24,lo8(17) + 109 /* #APP */ + 110 ; 158 "main.c" 1 + 111 0090 8093 5700 sts 87, r24 + 112 0094 E895 spm + 113 + 114 ; 0 "" 2 +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s page 3 + + + 115 /* #NOAPP */ + 116 0096 00C0 rjmp .L8 + 117 .size writeWordToPageBuffer, .-writeWordToPageBuffer + 118 .type fillFlashWithVectors, @function + 119 fillFlashWithVectors: + 120 0098 CF93 push r28 + 121 009a DF93 push r29 + 122 /* prologue: function */ + 123 /* frame size = 0 */ + 124 /* stack size = 2 */ + 125 .L__stack_usage = 2 + 126 009c C091 0000 lds r28,currentAddress + 127 00a0 D091 0000 lds r29,currentAddress+1 + 128 00a4 CF73 andi r28,lo8(63) + 129 00a6 D070 andi r29,hi8(63) + 130 .L10: + 131 00a8 8FEF ldi r24,lo8(-1) + 132 00aa 9FEF ldi r25,hi8(-1) + 133 00ac 00D0 rcall writeWordToPageBuffer + 134 00ae 2296 adiw r28,2 + 135 00b0 C034 cpi r28,64 + 136 00b2 D105 cpc r29,__zero_reg__ + 137 00b4 04F0 brlt .L10 + 138 00b6 00D0 rcall writeFlashPage + 139 /* epilogue start */ + 140 00b8 DF91 pop r29 + 141 00ba CF91 pop r28 + 142 00bc 0895 ret + 143 .size fillFlashWithVectors, .-fillFlashWithVectors + 144 .global calibrateOscillator + 145 .type calibrateOscillator, @function + 146 calibrateOscillator: + 147 00be FF92 push r15 + 148 00c0 0F93 push r16 + 149 00c2 1F93 push r17 + 150 00c4 CF93 push r28 + 151 00c6 DF93 push r29 + 152 /* prologue: function */ + 153 /* frame size = 0 */ + 154 /* stack size = 5 */ + 155 .L__stack_usage = 5 + 156 00c8 C8E0 ldi r28,lo8(8) + 157 00ca D0E0 ldi r29,hi8(8) + 158 00cc 10E0 ldi r17,lo8(0) + 159 00ce 00E8 ldi r16,lo8(-128) + 160 .L13: + 161 00d0 F12E mov r15,r17 + 162 00d2 F00E add r15,r16 + 163 00d4 F1BE out 81-32,r15 + 164 00d6 00D0 rcall usbMeasureFrameLength + 165 00d8 9C01 movw r18,r24 + 166 00da 89E0 ldi r24,hi8(2356) + 167 00dc 2433 cpi r18,lo8(2356) + 168 00de 3807 cpc r19,r24 + 169 00e0 04F4 brge .L12 + 170 00e2 1F2D mov r17,r15 + 171 .L12: +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s page 4 + + + 172 00e4 0695 lsr r16 + 173 00e6 2197 sbiw r28,1 + 174 00e8 01F4 brne .L13 + 175 00ea 812F mov r24,r17 + 176 00ec 8150 subi r24,lo8(-(-1)) + 177 00ee 81BF out 81-32,r24 + 178 00f0 E901 movw r28,r18 + 179 00f2 012F mov r16,r17 + 180 00f4 00C0 rjmp .L14 + 181 .L17: + 182 00f6 00D0 rcall usbMeasureFrameLength + 183 00f8 8453 subi r24,lo8(-(-2356)) + 184 00fa 9940 sbci r25,hi8(-(-2356)) + 185 00fc 97FF sbrs r25,7 + 186 00fe 00C0 rjmp .L15 + 187 0100 9095 com r25 + 188 0102 8195 neg r24 + 189 0104 9F4F sbci r25,lo8(-1) + 190 .L15: + 191 0106 8C17 cp r24,r28 + 192 0108 9D07 cpc r25,r29 + 193 010a 04F4 brge .L16 + 194 010c 01B7 in r16,81-32 + 195 010e EC01 movw r28,r24 + 196 .L16: + 197 0110 81B7 in r24,81-32 + 198 0112 8F5F subi r24,lo8(-(1)) + 199 0114 81BF out 81-32,r24 + 200 .L14: + 201 0116 21B7 in r18,81-32 + 202 0118 30E0 ldi r19,lo8(0) + 203 011a 812F mov r24,r17 + 204 011c 90E0 ldi r25,lo8(0) + 205 011e 0196 adiw r24,1 + 206 0120 8217 cp r24,r18 + 207 0122 9307 cpc r25,r19 + 208 0124 04F4 brge .L17 + 209 0126 01BF out 81-32,r16 + 210 /* epilogue start */ + 211 0128 DF91 pop r29 + 212 012a CF91 pop r28 + 213 012c 1F91 pop r17 + 214 012e 0F91 pop r16 + 215 0130 FF90 pop r15 + 216 0132 0895 ret + 217 .size calibrateOscillator, .-calibrateOscillator + 218 .section .init3,"ax",@progbits + 219 .global PushMagicWord + 220 .type PushMagicWord, @function + 221 PushMagicWord: + 222 /* prologue: naked */ + 223 /* frame size = 0 */ + 224 /* stack size = 0 */ + 225 .L__stack_usage = 0 + 226 /* #APP */ + 227 ; 300 "main.c" 1 + 228 0000 00EB ldi r16, 0xB0 +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s page 5 + + + 229 ; 0 "" 2 + 230 ; 301 "main.c" 1 + 231 0002 0F93 push r16 + 232 ; 0 "" 2 + 233 ; 302 "main.c" 1 + 234 0004 07E0 ldi r16, 0x07 + 235 ; 0 "" 2 + 236 ; 303 "main.c" 1 + 237 0006 0F93 push r16 + 238 ; 0 "" 2 + 239 /* epilogue start */ + 240 /* #NOAPP */ + 241 .size PushMagicWord, .-PushMagicWord + 242 .text + 243 .global main + 244 .type main, @function + 245 main: + 246 0134 DF93 push r29 + 247 0136 CF93 push r28 + 248 0138 0F92 push __tmp_reg__ + 249 013a CDB7 in r28,__SP_L__ + 250 013c DEB7 in r29,__SP_H__ + 251 /* prologue: function */ + 252 /* frame size = 1 */ + 253 /* stack size = 3 */ + 254 .L__stack_usage = 3 + 255 013e 88E1 ldi r24,lo8(24) + 256 /* #APP */ + 257 ; 332 "main.c" 1 + 258 0140 0FB6 in __tmp_reg__, __SREG__ + 259 0142 F894 cli + 260 0144 81BD out 33, r24 + 261 0146 11BC out 33, __zero_reg__ + 262 0148 0FBE out __SREG__,__tmp_reg__ + 263 + 264 ; 0 "" 2 + 265 /* #NOAPP */ + 266 014a 1092 0000 sts currentAddress+1,__zero_reg__ + 267 014e 1092 0000 sts currentAddress,__zero_reg__ + 268 0152 AC9A sbi 53-32,4 + 269 0154 8BB7 in r24,91-32 + 270 0156 8062 ori r24,lo8(32) + 271 0158 8BBF out 91-32,r24 + 272 015a BB9A sbi 55-32,3 + 273 015c 8FE4 ldi r24,lo8(1649999) + 274 015e 9DE2 ldi r25,hi8(1649999) + 275 0160 A9E1 ldi r26,hlo8(1649999) + 276 0162 8150 1:subi r24,1 + 277 0164 9040 sbci r25,0 + 278 0166 A040 sbci r26,0 + 279 0168 01F4 brne 1b + 280 016a 00C0 rjmp . + 281 016c 0000 nop + 282 016e BB98 cbi 55-32,3 + 283 /* #APP */ + 284 ; 314 "main.c" 1 + 285 0170 7894 sei +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s page 6 + + + 286 ; 0 "" 2 + 287 /* #NOAPP */ + 288 0172 EE24 clr r14 + 289 0174 FF24 clr r15 + 290 .L69: + 291 0176 8091 0000 lds r24,usbRxLen + 292 017a 282F mov r18,r24 + 293 017c 2350 subi r18,lo8(-(-3)) + 294 017e 27FD sbrc r18,7 + 295 0180 00C0 rjmp .L20 + 296 0182 9091 0000 lds r25,usbInputBufOffset + 297 0186 ECE0 ldi r30,lo8(12) + 298 0188 F0E0 ldi r31,hi8(12) + 299 018a E91B sub r30,r25 + 300 018c F109 sbc r31,__zero_reg__ + 301 018e E050 subi r30,lo8(-(usbRxBuf)) + 302 0190 F040 sbci r31,hi8(-(usbRxBuf)) + 303 0192 9091 0000 lds r25,usbRxToken + 304 0196 9D32 cpi r25,lo8(45) + 305 0198 01F0 breq .+2 + 306 019a 00C0 rjmp .L21 + 307 019c 2830 cpi r18,lo8(8) + 308 019e 01F0 breq .+2 + 309 01a0 00C0 rjmp .L22 + 310 01a2 83EC ldi r24,lo8(-61) + 311 01a4 8093 0000 sts usbTxBuf,r24 + 312 01a8 8AE5 ldi r24,lo8(90) + 313 01aa 8093 0000 sts usbTxLen,r24 + 314 01ae 1092 0000 sts usbMsgFlags,__zero_reg__ + 315 01b2 9081 ld r25,Z + 316 01b4 292F mov r18,r25 + 317 01b6 2076 andi r18,lo8(96) + 318 01b8 8181 ldd r24,Z+1 + 319 01ba 2223 tst r18 + 320 01bc 01F0 breq .L23 + 321 01be 8930 cpi r24,lo8(9) + 322 01c0 01F4 brne .L24 + 323 01c2 8281 ldd r24,Z+2 + 324 01c4 8230 cpi r24,lo8(2) + 325 01c6 01F4 brne .L25 + 326 01c8 81E0 ldi r24,lo8(1) + 327 01ca 8093 0000 sts state,r24 + 328 01ce 97FD sbrc r25,7 + 329 01d0 00C0 rjmp .L26 + 330 01d2 2FEF ldi r18,lo8(-1) + 331 01d4 00C0 rjmp .L27 + 332 .L25: + 333 01d6 8091 0000 lds r24,events + 334 01da 8460 ori r24,lo8(4) + 335 01dc 8093 0000 sts events,r24 + 336 01e0 00C0 rjmp .L71 + 337 .L24: + 338 01e2 8130 cpi r24,lo8(1) + 339 01e4 01F0 breq .+2 + 340 01e6 00C0 rjmp .L71 + 341 01e8 80E0 ldi r24,lo8(replyBuffer.1776) + 342 01ea 90E0 ldi r25,hi8(replyBuffer.1776) +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s page 7 + + + 343 01ec 9093 0000 sts usbMsgPtr+1,r25 + 344 01f0 8093 0000 sts usbMsgPtr,r24 + 345 01f4 27E0 ldi r18,lo8(7) + 346 01f6 00C0 rjmp .L70 + 347 .L23: + 348 01f8 9281 ldd r25,Z+2 + 349 01fa 1092 0000 sts usbTxBuf+9,__zero_reg__ + 350 01fe 8823 tst r24 + 351 0200 01F4 brne .L29 + 352 0202 1092 0000 sts usbTxBuf+10,__zero_reg__ + 353 0206 80E0 ldi r24,lo8(usbTxBuf+9) + 354 0208 90E0 ldi r25,hi8(usbTxBuf+9) + 355 020a 22E0 ldi r18,lo8(2) + 356 020c 00C0 rjmp .L30 + 357 .L29: + 358 020e 8530 cpi r24,lo8(5) + 359 0210 01F4 brne .L31 + 360 0212 9093 0000 sts usbNewDeviceAddr,r25 + 361 0216 00C0 rjmp .L78 + 362 .L31: + 363 0218 8630 cpi r24,lo8(6) + 364 021a 01F0 breq .+2 + 365 021c 00C0 rjmp .L32 + 366 021e 8381 ldd r24,Z+3 + 367 0220 8130 cpi r24,lo8(1) + 368 0222 01F4 brne .L33 + 369 0224 80E0 ldi r24,lo8(usbDescriptorDevice) + 370 0226 90E0 ldi r25,hi8(usbDescriptorDevice) + 371 0228 00C0 rjmp .L77 + 372 .L33: + 373 022a 8230 cpi r24,lo8(2) + 374 022c 01F4 brne .L35 + 375 022e 80E0 ldi r24,lo8(usbDescriptorConfiguration) + 376 0230 90E0 ldi r25,hi8(usbDescriptorConfiguration) + 377 0232 9093 0000 sts usbMsgPtr+1,r25 + 378 0236 8093 0000 sts usbMsgPtr,r24 + 379 023a 22E2 ldi r18,lo8(34) + 380 023c 00C0 rjmp .L34 + 381 .L35: + 382 023e 8330 cpi r24,lo8(3) + 383 0240 01F4 brne .L36 + 384 0242 9923 tst r25 + 385 0244 01F4 brne .L37 + 386 0246 80E0 ldi r24,lo8(usbDescriptorString0) + 387 0248 90E0 ldi r25,hi8(usbDescriptorString0) + 388 024a 9093 0000 sts usbMsgPtr+1,r25 + 389 024e 8093 0000 sts usbMsgPtr,r24 + 390 0252 24E0 ldi r18,lo8(4) + 391 0254 00C0 rjmp .L34 + 392 .L37: + 393 0256 9130 cpi r25,lo8(1) + 394 0258 01F4 brne .L38 + 395 025a 80E0 ldi r24,lo8(usbDescriptorStringVendor) + 396 025c 90E0 ldi r25,hi8(usbDescriptorStringVendor) + 397 .L77: + 398 025e 9093 0000 sts usbMsgPtr+1,r25 + 399 0262 8093 0000 sts usbMsgPtr,r24 +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s page 8 + + + 400 0266 22E1 ldi r18,lo8(18) + 401 0268 00C0 rjmp .L34 + 402 .L38: + 403 026a 9230 cpi r25,lo8(2) + 404 026c 01F4 brne .L73 + 405 026e 80E0 ldi r24,lo8(usbDescriptorStringDevice) + 406 0270 90E0 ldi r25,hi8(usbDescriptorStringDevice) + 407 0272 9093 0000 sts usbMsgPtr+1,r25 + 408 0276 8093 0000 sts usbMsgPtr,r24 + 409 027a 20E1 ldi r18,lo8(16) + 410 027c 00C0 rjmp .L34 + 411 .L36: + 412 027e 8132 cpi r24,lo8(33) + 413 0280 01F4 brne .L39 + 414 0282 80E0 ldi r24,lo8(usbDescriptorConfiguration+18) + 415 0284 90E0 ldi r25,hi8(usbDescriptorConfiguration+18) + 416 0286 9093 0000 sts usbMsgPtr+1,r25 + 417 028a 8093 0000 sts usbMsgPtr,r24 + 418 028e 29E0 ldi r18,lo8(9) + 419 0290 00C0 rjmp .L34 + 420 .L39: + 421 0292 8232 cpi r24,lo8(34) + 422 0294 01F4 brne .L73 + 423 0296 80E0 ldi r24,lo8(usbDescriptorHidReport) + 424 0298 90E0 ldi r25,hi8(usbDescriptorHidReport) + 425 029a 9093 0000 sts usbMsgPtr+1,r25 + 426 029e 8093 0000 sts usbMsgPtr,r24 + 427 02a2 21E2 ldi r18,lo8(33) + 428 02a4 00C0 rjmp .L34 + 429 .L73: + 430 02a6 20E0 ldi r18,lo8(0) + 431 .L34: + 432 02a8 80E4 ldi r24,lo8(64) + 433 02aa 8093 0000 sts usbMsgFlags,r24 + 434 02ae 00C0 rjmp .L70 + 435 .L32: + 436 02b0 8830 cpi r24,lo8(8) + 437 02b2 01F0 breq .L74 + 438 02b4 8930 cpi r24,lo8(9) + 439 02b6 01F4 brne .L41 + 440 02b8 9093 0000 sts usbConfiguration,r25 + 441 02bc 00C0 rjmp .L78 + 442 .L41: + 443 02be 8A30 cpi r24,lo8(10) + 444 02c0 01F0 breq .L75 + 445 .L78: + 446 02c2 80E0 ldi r24,lo8(usbTxBuf+9) + 447 02c4 90E0 ldi r25,hi8(usbTxBuf+9) + 448 02c6 20E0 ldi r18,lo8(0) + 449 02c8 00C0 rjmp .L30 + 450 .L74: + 451 02ca 80E0 ldi r24,lo8(usbConfiguration) + 452 02cc 90E0 ldi r25,hi8(usbConfiguration) + 453 02ce 00C0 rjmp .L79 + 454 .L75: + 455 02d0 80E0 ldi r24,lo8(usbTxBuf+9) + 456 02d2 90E0 ldi r25,hi8(usbTxBuf+9) +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s page 9 + + + 457 .L79: + 458 02d4 21E0 ldi r18,lo8(1) + 459 .L30: + 460 02d6 9093 0000 sts usbMsgPtr+1,r25 + 461 02da 8093 0000 sts usbMsgPtr,r24 + 462 02de 00C0 rjmp .L70 + 463 .L26: + 464 02e0 2681 ldd r18,Z+6 + 465 .L27: + 466 02e2 80E8 ldi r24,lo8(-128) + 467 02e4 8093 0000 sts usbMsgFlags,r24 + 468 02e8 00C0 rjmp .L42 + 469 .L70: + 470 02ea 8781 ldd r24,Z+7 + 471 02ec 8823 tst r24 + 472 02ee 01F4 brne .L42 + 473 02f0 8681 ldd r24,Z+6 + 474 02f2 8217 cp r24,r18 + 475 02f4 00F4 brsh .L42 + 476 02f6 282F mov r18,r24 + 477 .L42: + 478 02f8 2093 0000 sts usbMsgLen,r18 + 479 02fc 00C0 rjmp .L22 + 480 .L21: + 481 02fe 9091 0000 lds r25,usbMsgFlags + 482 0302 97FF sbrs r25,7 + 483 0304 00C0 rjmp .L22 + 484 0306 9091 0000 lds r25,state + 485 030a 9130 cpi r25,lo8(1) + 486 030c 01F4 brne .L43 + 487 030e 3181 ldd r19,Z+1 + 488 0310 9281 ldd r25,Z+2 + 489 0312 3496 adiw r30,4 + 490 0314 282F mov r18,r24 + 491 0316 2750 subi r18,lo8(-(-7)) + 492 0318 3093 0000 sts currentAddress,r19 + 493 031c 9093 0000 sts currentAddress+1,r25 + 494 0320 82E0 ldi r24,lo8(2) + 495 0322 8093 0000 sts state,r24 + 496 .L43: + 497 0326 8F01 movw r16,r30 + 498 .L48: + 499 0328 8091 0000 lds r24,currentAddress + 500 032c 9091 0000 lds r25,currentAddress+1 + 501 0330 0097 sbiw r24,0 + 502 0332 01F4 brne .L44 + 503 0334 D801 movw r26,r16 + 504 0336 8D91 ld r24,X+ + 505 0338 9C91 ld r25,X + 506 033a 1197 sbiw r26,1 + 507 033c 9093 0000 sts vectorTemp+1,r25 + 508 0340 8093 0000 sts vectorTemp,r24 + 509 0344 00C0 rjmp .L45 + 510 .L44: + 511 0346 8430 cpi r24,4 + 512 0348 9105 cpc r25,__zero_reg__ + 513 034a 01F4 brne .L46 +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s page 10 + + + 514 034c F801 movw r30,r16 + 515 034e 8081 ld r24,Z + 516 0350 9181 ldd r25,Z+1 + 517 0352 9093 0000 sts vectorTemp+2+1,r25 + 518 0356 8093 0000 sts vectorTemp+2,r24 + 519 035a 00C0 rjmp .L45 + 520 .L46: + 521 035c F4E1 ldi r31,hi8(5370) + 522 035e 8A3F cpi r24,lo8(5370) + 523 0360 9F07 cpc r25,r31 + 524 0362 00F0 brlo .L45 + 525 0364 81E1 ldi r24,lo8(17) + 526 /* #APP */ + 527 ; 277 "main.c" 1 + 528 0366 8093 5700 sts 87, r24 + 529 036a E895 spm + 530 + 531 ; 0 "" 2 + 532 /* #NOAPP */ + 533 036c 00C0 rjmp .L47 + 534 .L45: + 535 036e D801 movw r26,r16 + 536 0370 8D91 ld r24,X+ + 537 0372 9D91 ld r25,X+ + 538 0374 8D01 movw r16,r26 + 539 0376 2983 std Y+1,r18 + 540 0378 00D0 rcall writeWordToPageBuffer + 541 037a 8091 0000 lds r24,currentAddress + 542 037e 9091 0000 lds r25,currentAddress+1 + 543 0382 0296 adiw r24,2 + 544 0384 9093 0000 sts currentAddress+1,r25 + 545 0388 8093 0000 sts currentAddress,r24 + 546 038c 2981 ldd r18,Y+1 + 547 038e 2250 subi r18,lo8(-(-2)) + 548 0390 01F4 brne .L48 + 549 .L47: + 550 0392 8091 0000 lds r24,currentAddress + 551 0396 9091 0000 lds r25,currentAddress+1 + 552 039a 8F73 andi r24,lo8(63) + 553 039c 9070 andi r25,hi8(63) + 554 039e 0097 sbiw r24,0 + 555 03a0 01F0 breq .L22 + 556 03a2 8091 0000 lds r24,events + 557 03a6 8260 ori r24,lo8(2) + 558 03a8 8093 0000 sts events,r24 + 559 03ac 1092 0000 sts usbMsgLen,__zero_reg__ + 560 .L22: + 561 03b0 1092 0000 sts usbRxLen,__zero_reg__ + 562 .L20: + 563 03b4 8091 0000 lds r24,usbTxLen + 564 03b8 84FF sbrs r24,4 + 565 03ba 00C0 rjmp .L49 + 566 03bc 8091 0000 lds r24,usbMsgLen + 567 03c0 8F3F cpi r24,lo8(-1) + 568 03c2 01F4 brne .+2 + 569 03c4 00C0 rjmp .L49 + 570 03c6 082F mov r16,r24 +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s page 11 + + + 571 03c8 8930 cpi r24,lo8(9) + 572 03ca 00F0 brlo .L50 + 573 03cc 08E0 ldi r16,lo8(8) + 574 .L50: + 575 03ce 801B sub r24,r16 + 576 03d0 8093 0000 sts usbMsgLen,r24 + 577 03d4 8091 0000 lds r24,usbTxBuf + 578 03d8 98E8 ldi r25,lo8(-120) + 579 03da 8927 eor r24,r25 + 580 03dc 8093 0000 sts usbTxBuf,r24 + 581 03e0 0023 tst r16 + 582 03e2 01F0 breq .L51 + 583 03e4 E091 0000 lds r30,usbMsgPtr + 584 03e8 F091 0000 lds r31,usbMsgPtr+1 + 585 03ec 9091 0000 lds r25,usbMsgFlags + 586 03f0 802F mov r24,r16 + 587 03f2 8150 subi r24,lo8(-(-1)) + 588 03f4 96FF sbrs r25,6 + 589 03f6 00C0 rjmp .L52 + 590 03f8 90E0 ldi r25,lo8(0) + 591 03fa 8050 subi r24,lo8(-(usbTxBuf+2)) + 592 03fc 9040 sbci r25,hi8(-(usbTxBuf+2)) + 593 03fe A0E0 ldi r26,lo8(usbTxBuf+1) + 594 0400 B0E0 ldi r27,hi8(usbTxBuf+1) + 595 .L53: + 596 /* #APP */ + 597 ; 504 "usbdrv/usbdrv.c" 1 + 598 0402 2491 lpm r18, Z + 599 + 600 ; 0 "" 2 + 601 /* #NOAPP */ + 602 0404 2D93 st X+,r18 + 603 0406 3196 adiw r30,1 + 604 0408 A817 cp r26,r24 + 605 040a B907 cpc r27,r25 + 606 040c 01F4 brne .L53 + 607 040e 00C0 rjmp .L54 + 608 .L52: + 609 0410 9F01 movw r18,r30 + 610 0412 90E0 ldi r25,lo8(0) + 611 0414 8050 subi r24,lo8(-(usbTxBuf+2)) + 612 0416 9040 sbci r25,hi8(-(usbTxBuf+2)) + 613 0418 A0E0 ldi r26,lo8(usbTxBuf+1) + 614 041a B0E0 ldi r27,hi8(usbTxBuf+1) + 615 .L55: + 616 041c F901 movw r30,r18 + 617 041e 4191 ld r20,Z+ + 618 0420 9F01 movw r18,r30 + 619 0422 4D93 st X+,r20 + 620 0424 A817 cp r26,r24 + 621 0426 B907 cpc r27,r25 + 622 0428 01F4 brne .L55 + 623 .L54: + 624 042a F093 0000 sts usbMsgPtr+1,r31 + 625 042e E093 0000 sts usbMsgPtr,r30 + 626 .L51: + 627 0432 80E0 ldi r24,lo8(usbTxBuf+1) +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s page 12 + + + 628 0434 90E0 ldi r25,hi8(usbTxBuf+1) + 629 0436 602F mov r22,r16 + 630 0438 00D0 rcall usbCrc16Append + 631 043a 0C5F subi r16,lo8(-(4)) + 632 043c 0C30 cpi r16,lo8(12) + 633 043e 01F0 breq .L56 + 634 0440 8FEF ldi r24,lo8(-1) + 635 0442 8093 0000 sts usbMsgLen,r24 + 636 .L56: + 637 0446 0093 0000 sts usbTxLen,r16 + 638 .L49: + 639 044a 84E1 ldi r24,lo8(20) + 640 .L58: + 641 044c 96B3 in r25,54-32 + 642 044e 9871 andi r25,lo8(24) + 643 0450 01F4 brne .L57 + 644 0452 8150 subi r24,lo8(-(-1)) + 645 0454 01F4 brne .L58 + 646 0456 1092 0000 sts usbNewDeviceAddr,__zero_reg__ + 647 045a 1092 0000 sts usbDeviceAddr,__zero_reg__ + 648 .L57: + 649 045e 01E0 ldi r16,lo8(1) + 650 0460 8111 cpse r24,__zero_reg__ + 651 0462 00E0 ldi r16,lo8(0) + 652 .L59: + 653 0464 8091 0000 lds r24,wasReset.1703 + 654 0468 8017 cp r24,r16 + 655 046a 01F0 breq .L60 + 656 046c 0023 tst r16 + 657 046e 01F4 brne .L61 + 658 /* #APP */ + 659 ; 557 "usbdrv/usbdrv.c" 1 + 660 0470 F894 cli + 661 ; 0 "" 2 + 662 /* #NOAPP */ + 663 0472 00D0 rcall calibrateOscillator + 664 /* #APP */ + 665 ; 557 "usbdrv/usbdrv.c" 1 + 666 0474 7894 sei + 667 ; 0 "" 2 + 668 /* #NOAPP */ + 669 .L61: + 670 0476 0093 0000 sts wasReset.1703,r16 + 671 .L60: + 672 047a 8CE9 ldi r24,lo8(412) + 673 047c 91E0 ldi r25,hi8(412) + 674 047e 0197 1:sbiw r24,1 + 675 0480 01F4 brne 1b + 676 0482 0000 nop + 677 0484 8091 0000 lds r24,events + 678 0488 8823 tst r24 + 679 048a 01F4 brne .L76 + 680 048c 0894 sec + 681 048e E11C adc r14,__zero_reg__ + 682 0490 F11C adc r15,__zero_reg__ + 683 0492 00C0 rjmp .L62 + 684 .L76: +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s page 13 + + + 685 0494 EE24 clr r14 + 686 0496 FF24 clr r15 + 687 .L62: + 688 0498 80FF sbrs r24,0 + 689 049a 00C0 rjmp .L63 + 690 /* #APP */ + 691 ; 117 "main.c" 1 + 692 049c F894 cli + 693 ; 0 "" 2 + 694 /* #NOAPP */ + 695 049e E091 0000 lds r30,currentAddress + 696 04a2 F091 0000 lds r31,currentAddress+1 + 697 04a6 3297 sbiw r30,2 + 698 04a8 83E0 ldi r24,lo8(3) + 699 /* #APP */ + 700 ; 118 "main.c" 1 + 701 04aa 8093 5700 sts 87, r24 + 702 04ae E895 spm + 703 + 704 ; 0 "" 2 + 705 /* #NOAPP */ + 706 .L64: + 707 04b0 07B6 in __tmp_reg__,87-32 + 708 04b2 00FC sbrc __tmp_reg__,0 + 709 04b4 00C0 rjmp .L64 + 710 /* #APP */ + 711 ; 120 "main.c" 1 + 712 04b6 7894 sei + 713 ; 0 "" 2 + 714 /* #NOAPP */ + 715 .L63: + 716 04b8 8091 0000 lds r24,events + 717 04bc 81FF sbrs r24,1 + 718 04be 00C0 rjmp .L65 + 719 04c0 A9E3 ldi r26,lo8(8249) + 720 04c2 B0E2 ldi r27,hi8(8249) + 721 04c4 1197 1:sbiw r26,1 + 722 04c6 01F4 brne 1b + 723 04c8 00C0 rjmp . + 724 04ca 0000 nop + 725 04cc 8091 0000 lds r24,currentAddress + 726 04d0 9091 0000 lds r25,currentAddress+1 + 727 04d4 8F73 andi r24,lo8(63) + 728 04d6 9070 andi r25,hi8(63) + 729 04d8 0097 sbiw r24,0 + 730 04da 01F0 breq .L66 + 731 04dc 00D0 rcall fillFlashWithVectors + 732 04de 00C0 rjmp .L65 + 733 .L66: + 734 04e0 00D0 rcall writeFlashPage + 735 .L65: + 736 04e2 8091 0000 lds r24,events + 737 04e6 82FD sbrc r24,2 + 738 04e8 00C0 rjmp .L67 + 739 04ea B1E5 ldi r27,lo8(-15535) + 740 04ec EB16 cp r14,r27 + 741 04ee B3EC ldi r27,hi8(-15535) +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s page 14 + + + 742 04f0 FB06 cpc r15,r27 + 743 04f2 00F0 brlo .L68 + 744 .L67: + 745 04f4 E1E2 ldi r30,lo8(-24287) + 746 04f6 F1EA ldi r31,hi8(-24287) + 747 04f8 3197 1:sbiw r30,1 + 748 04fa 01F4 brne 1b + 749 04fc 00C0 rjmp . + 750 04fe 0000 nop + 751 /* #APP */ + 752 ; 189 "main.c" 1 + 753 0500 F894 cli + 754 ; 0 "" 2 + 755 /* #NOAPP */ + 756 0502 1BBE out 91-32,__zero_reg__ + 757 0504 15BA out 53-32,__zero_reg__ + 758 0506 1092 5F02 sts 607,__zero_reg__ + 759 050a 1092 5E02 sts 606,__zero_reg__ + 760 /* #APP */ + 761 ; 206 "main.c" 1 + 762 050e 00C0 rjmp __vectors - 4 + 763 ; 0 "" 2 + 764 /* #NOAPP */ + 765 .L68: + 766 0510 1092 0000 sts events,__zero_reg__ + 767 0514 00C0 rjmp .L69 + 768 .L71: + 769 0516 20E0 ldi r18,lo8(0) + 770 0518 00C0 rjmp .L70 + 771 .size main, .-main + 772 .global usbTxLen + 773 .data + 774 .type usbTxLen, @object + 775 .size usbTxLen, 1 + 776 usbTxLen: + 777 0000 5A .byte 90 + 778 .global usbDescriptorString0 + 779 .section .progmem.data,"a",@progbits + 780 .type usbDescriptorString0, @object + 781 .size usbDescriptorString0, 4 + 782 usbDescriptorString0: + 783 0000 04 .byte 4 + 784 0001 03 .byte 3 + 785 0002 09 .byte 9 + 786 0003 04 .byte 4 + 787 .global usbDescriptorStringVendor + 788 .type usbDescriptorStringVendor, @object + 789 .size usbDescriptorStringVendor, 18 + 790 usbDescriptorStringVendor: + 791 0004 1203 .word 786 + 792 0006 6F00 .word 111 + 793 0008 6200 .word 98 + 794 000a 6400 .word 100 + 795 000c 6500 .word 101 + 796 000e 7600 .word 118 + 797 0010 2E00 .word 46 + 798 0012 6100 .word 97 +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s page 15 + + + 799 0014 7400 .word 116 + 800 .global usbDescriptorStringDevice + 801 .type usbDescriptorStringDevice, @object + 802 .size usbDescriptorStringDevice, 16 + 803 usbDescriptorStringDevice: + 804 0016 1003 .word 784 + 805 0018 4800 .word 72 + 806 001a 4900 .word 73 + 807 001c 4400 .word 68 + 808 001e 4200 .word 66 + 809 0020 6F00 .word 111 + 810 0022 6F00 .word 111 + 811 0024 7400 .word 116 + 812 .global usbDescriptorDevice + 813 .type usbDescriptorDevice, @object + 814 .size usbDescriptorDevice, 18 + 815 usbDescriptorDevice: + 816 0026 12 .byte 18 + 817 0027 01 .byte 1 + 818 0028 10 .byte 16 + 819 0029 01 .byte 1 + 820 002a 00 .byte 0 + 821 002b 00 .byte 0 + 822 002c 00 .byte 0 + 823 002d 08 .byte 8 + 824 002e C0 .byte -64 + 825 002f 16 .byte 22 + 826 0030 DF .byte -33 + 827 0031 05 .byte 5 + 828 0032 00 .byte 0 + 829 0033 01 .byte 1 + 830 0034 01 .byte 1 + 831 0035 02 .byte 2 + 832 0036 00 .byte 0 + 833 0037 01 .byte 1 + 834 .global usbDescriptorConfiguration + 835 .type usbDescriptorConfiguration, @object + 836 .size usbDescriptorConfiguration, 34 + 837 usbDescriptorConfiguration: + 838 0038 09 .byte 9 + 839 0039 02 .byte 2 + 840 003a 22 .byte 34 + 841 003b 00 .byte 0 + 842 003c 01 .byte 1 + 843 003d 01 .byte 1 + 844 003e 00 .byte 0 + 845 003f 80 .byte -128 + 846 0040 32 .byte 50 + 847 0041 09 .byte 9 + 848 0042 04 .byte 4 + 849 0043 00 .byte 0 + 850 0044 00 .byte 0 + 851 0045 01 .byte 1 + 852 0046 03 .byte 3 + 853 0047 00 .byte 0 + 854 0048 00 .byte 0 + 855 0049 00 .byte 0 +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s page 16 + + + 856 004a 09 .byte 9 + 857 004b 21 .byte 33 + 858 004c 01 .byte 1 + 859 004d 01 .byte 1 + 860 004e 00 .byte 0 + 861 004f 01 .byte 1 + 862 0050 22 .byte 34 + 863 0051 21 .byte 33 + 864 0052 00 .byte 0 + 865 0053 07 .byte 7 + 866 0054 05 .byte 5 + 867 0055 81 .byte -127 + 868 0056 03 .byte 3 + 869 0057 08 .byte 8 + 870 0058 00 .byte 0 + 871 0059 C8 .byte -56 + 872 .global usbDescriptorHidReport + 873 .type usbDescriptorHidReport, @object + 874 .size usbDescriptorHidReport, 33 + 875 usbDescriptorHidReport: + 876 005a 06 .byte 6 + 877 005b 00 .byte 0 + 878 005c FF .byte -1 + 879 005d 09 .byte 9 + 880 005e 01 .byte 1 + 881 005f A1 .byte -95 + 882 0060 01 .byte 1 + 883 0061 15 .byte 21 + 884 0062 00 .byte 0 + 885 0063 26 .byte 38 + 886 0064 FF .byte -1 + 887 0065 00 .byte 0 + 888 0066 75 .byte 117 + 889 0067 08 .byte 8 + 890 0068 85 .byte -123 + 891 0069 01 .byte 1 + 892 006a 95 .byte -107 + 893 006b 06 .byte 6 + 894 006c 09 .byte 9 + 895 006d 00 .byte 0 + 896 006e B2 .byte -78 + 897 006f 02 .byte 2 + 898 0070 01 .byte 1 + 899 0071 85 .byte -123 + 900 0072 02 .byte 2 + 901 0073 95 .byte -107 + 902 0074 83 .byte -125 + 903 0075 09 .byte 9 + 904 0076 00 .byte 0 + 905 0077 B2 .byte -78 + 906 0078 02 .byte 2 + 907 0079 01 .byte 1 + 908 007a C0 .byte -64 + 909 .comm usbMsgPtr,2,1 + 910 .comm usbRxToken,1,1 + 911 .comm usbConfiguration,1,1 + 912 .comm usbRxBuf,22,1 +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s page 17 + + + 913 .comm usbInputBufOffset,1,1 + 914 .comm usbDeviceAddr,1,1 + 915 .comm usbNewDeviceAddr,1,1 + 916 .comm usbRxLen,1,1 + 917 .comm usbCurrentTok,1,1 + 918 .comm usbTxBuf,11,1 + 919 .lcomm currentAddress,2 + 920 .lcomm events,1 + 921 .data + 922 .type usbMsgLen, @object + 923 .size usbMsgLen, 1 + 924 usbMsgLen: + 925 0001 FF .byte -1 + 926 .lcomm usbMsgFlags,1 + 927 .lcomm state,1 + 928 .type replyBuffer.1776, @object + 929 .size replyBuffer.1776, 7 + 930 replyBuffer.1776: + 931 0002 01 .byte 1 + 932 0003 40 .byte 64 + 933 0004 00 .byte 0 + 934 0005 FA .byte -6 + 935 0006 14 .byte 20 + 936 0007 00 .byte 0 + 937 0008 00 .byte 0 + 938 .lcomm vectorTemp,4 + 939 .lcomm wasReset.1703,1 + 940 .global __do_copy_data + 941 .global __do_clear_bss +GAS LISTING /var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s page 18 DEFINED SYMBOLS *ABS*:00000000 main.c -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s:2 *ABS*:0000003f __SREG__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s:3 *ABS*:0000003e __SP_H__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s:4 *ABS*:0000003d __SP_L__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s:5 *ABS*:00000034 __CCP__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s:6 *ABS*:00000000 __tmp_reg__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s:7 *ABS*:00000001 __zero_reg__ -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s:10 .text:00000000 writeFlashPage +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:2 *ABS*:0000003f __SREG__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:3 *ABS*:0000003e __SP_H__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:4 *ABS*:0000003d __SP_L__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:5 *ABS*:00000034 __CCP__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:6 *ABS*:00000000 __tmp_reg__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:7 *ABS*:00000001 __zero_reg__ +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:10 .text:00000000 writeFlashPage .bss:00000000 currentAddress -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s:44 .text:0000001e writeWordToPageBuffer -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s:851 .bss:00000005 vectorTemp -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s:843 .bss:00000002 events -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s:140 .text:000000ba fillFlashWithVectors -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s:168 .init3:00000000 PushMagicWord -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s:192 .text:000000e0 main +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:44 .text:0000001e writeWordToPageBuffer +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:927 .bss:00000005 vectorTemp +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:119 .text:00000098 fillFlashWithVectors +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:146 .text:000000be calibrateOscillator +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:221 .init3:00000000 PushMagicWord +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:245 .text:00000134 main *COM*:00000001 usbRxLen *COM*:00000001 usbInputBufOffset *COM*:00000016 usbRxBuf *COM*:00000001 usbRxToken *COM*:0000000b usbTxBuf -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s:700 .data:00000000 usbTxLen -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s:844 .bss:00000003 usbMsgFlags -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s:850 .bss:00000004 state -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s:854 .data:00000002 replyBuffer.1882 +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:776 .data:00000000 usbTxLen +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:920 .bss:00000003 usbMsgFlags +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:926 .bss:00000004 state +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:919 .bss:00000002 events +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:930 .data:00000002 replyBuffer.1776 *COM*:00000002 usbMsgPtr *COM*:00000001 usbNewDeviceAddr -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s:739 .progmem.data:00000026 usbDescriptorDevice -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s:761 .progmem.data:00000038 usbDescriptorConfiguration -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s:706 .progmem.data:00000000 usbDescriptorString0 -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s:714 .progmem.data:00000004 usbDescriptorStringVendor -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s:727 .progmem.data:00000016 usbDescriptorStringDevice -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s:799 .progmem.data:0000005a usbDescriptorHidReport +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:815 .progmem.data:00000026 usbDescriptorDevice +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:837 .progmem.data:00000038 usbDescriptorConfiguration +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:782 .progmem.data:00000000 usbDescriptorString0 +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:790 .progmem.data:00000004 usbDescriptorStringVendor +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:803 .progmem.data:00000016 usbDescriptorStringDevice +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:875 .progmem.data:0000005a usbDescriptorHidReport *COM*:00000001 usbConfiguration -/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccDo3M0x.s:848 .data:00000001 usbMsgLen +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:924 .data:00000001 usbMsgLen *COM*:00000001 usbDeviceAddr +/var/folders/nd/dq8cd7_x03d_z3x899kwf__80000gn/T//ccKpW58U.s:938 .bss:00000009 wasReset.1703 *COM*:00000001 usbCurrentTok UNDEFINED SYMBOLS +usbMeasureFrameLength usbCrc16Append __vectors __do_copy_data diff --git a/firmware/main.hex b/firmware/main.hex index fe2f6b3..e0e59e1 100644 --- a/firmware/main.hex +++ b/firmware/main.hex @@ -1,4 +1,4 @@ -:101500004CC06AC083C068C067C066C065C064C0A4
+:101500004CC06AC096C068C067C066C065C064C091
:1015100063C062C061C060C05FC05EC05DC00403E4
:10152000090412036F0062006400650076002E005B
:1015300061007400100348004900440042006F003D
@@ -9,131 +9,141 @@ :101580000026FF007508850195060900B202018555
:101590000295830900B20201C00011241FBECFE5ED
:1015A000D2E0DEBFCDBF00EB0F9307E00F9310E05A
-:1015B000A0E6B0E0EEE7FDE102C005900D92AA368C
-:1015C000B107D9F710E0AAE6B0E001C01D92AD392D
-:1015D000B107E1F7EDD1D1C393CFA82FB92F80E0A8
+:1015B000A0E6B0E0E4E1FEE102C005900D92AA369B
+:1015C000B107D9F710E0AAE6B0E001C01D92AE392C
+:1015D000B107E1F72AD21CC493CFA82FB92F80E01E
:1015E00090E041E050EA609530E009C02D918227FB
:1015F0009795879510F084279527305EC8F36F5F25
-:10160000A8F30895EADF8D939D930895CF93CFB704
-:10161000CF93C0915F02C03B21F4C0915E02C730FE
-:1016200021F0CF91CFBFCF916ACFCC27C395B39B89
-:10163000E9F7B39B0BC0B39B09C0B39B07C0B39B37
-:1016400005C0B39B03C0B39B01C0D5C00F92DF930D
-:10165000C0918000DD27C957DF4F012EB39B03C027
-:10166000DF910F90E6CF2F930F931F934F932FEFA0
-:101670004F6F06B303FB20F95F933F9350E03BE0CD
-:1016800065C016B30126502953FDC89556B30127EE
-:1016900003FB25F92F7306B3B1F05027102713FB76
-:1016A00026F906B22230F0F000C016B3012703FB82
-:1016B00027F90126502906B22430E8F54F77206833
-:1016C00016B30000F6CF50274F7D206206B2102FD0
-:1016D000000000C006B300265029102713FB26F98E
-:1016E00006B2E2CF4F7B06B3206400C0DACF0126FA
-:1016F0005029187106B269F14E7F2160012F16B38F
-:1017000028C0002650294D7F06B22260102F29C024
-:10171000012650294B7F06B22460012F2DC016B33D
-:1017200001265029477F2860000006B22EC04F7E58
-:1017300006B3206130C0422706B3499300265029E2
-:10174000102706B24FEF13FB20F9297F16B379F269
-:10175000187159F10126502906B2012703FB21F91E
-:10176000237F06B371F2002650293150D0F006B223
-:10177000102713FB22F9277E16B351F201265029B8
-:10178000012703FB06B223F92F7C49F2000006B3C0
-:10179000102713FB24F90026502906B22F7939F2BD
-:1017A00070CF10E21ABF002719C03B503195C31B00
-:1017B000D04010E21ABF0881033C09F10B34F9F064
-:1017C00020917E001981110F1213EDCF4A81441F21
-:1017D000093651F10D3211F0013E29F700938500D1
-:1017E0003F915F914F911F910F912F91DF910F903A
-:1017F000CAB7C5FD1BCFCF91CFBFCF911895209110
-:101800008500222369F310918300112331F53430D0
-:1018100032F13093830020937F00109180003BE0F1
-:10182000311B309380001BC0009183000130ACF469
-:101830000AE54F7091F43091600034FD11C00093BF
-:101840006000C3E7D0E010C0052710E000C021C051
-:10185000052710E0C89508BB14C03AE501C032ED79
-:10186000032EC0E0D0E032E017B31861C39A08B38A
-:1018700017BB58E120E84FEF20FF052708BB27954D
-:1018800017951C3F28F700004552B0F720FF0527A9
-:10189000279508BB17951C3FB8F629913A9561F733
-:1018A000077E10918400110F08BBC250D04011F088
-:1018B00010937E0010E21ABF086017B3177E402F06
-:1018C000477E54E05A95F1F708BB17BB48BB88CF59
-:1018D000F894E0916A00F0916B00329785E0809374
-:1018E0005700E89507B600FCFDCF78940895209145
-:1018F0006A0030916B002115310509F441C0243094
-:101900003105B1F044E12C3F340739F480916F0088
-:10191000909170008E579A4F0DC044E12E3F3407CE
-:1019200049F480917100909172008D579A4F02C0D6
-:101930008FE79AECF894E0916A00F0916B0021E057
-:101940000C0120935700E8951124789420916A00A7
-:1019500030916B00F901459154914817590749F0AE
-:101960008FEF4F3F580729F080916C008160809382
-:101970006C002E5F3F4F30936B0020936A000895F8
-:1019800081E180935700E895D3CFCF93DF93C09147
-:101990006A00D0916B00CF73D0708FEF9FEFA7DFFD
-:1019A0002296C034D105CCF393DFDF91CF91089517
-:1019B000DF93CF930F92CDB7DEB788E10FB6F894DF
-:1019C00081BD11BC0FBE10926B0010926A00AC9AE0
-:1019D0008BB780628BBFBB9A8FE49DE2A9E18150F7
-:1019E0009040A040E1F700C00000BB987894EE243E
-:1019F000FF2480918300282F235027FD19C1909147
-:101A00008000ECE0F0E0E91BF109E957FF4F90910D
-:101A10007F009D3209F0B1C0283009F007C183EC86
-:101A2000809373008AE58093600010926D0090812E
-:101A3000292F207681812223E9F0893081F4828167
-:101A4000823039F481E080936E0097FD87C02FEFDC
-:101A500086C080916C00846080936C008CC1813062
-:101A600009F089C182E690E0909382008093810022
-:101A700027E079C0928110927C00882331F4109283
-:101A80007D008CE790E022E064C0853019F49093EB
-:101A9000840055C0863009F049C08381813019F433
-:101AA00084E495E11AC0823041F486E595E1909393
-:101AB00082008093810022E235C08330F1F49923C3
-:101AC00041F48EE195E1909382008093810024E0BF
-:101AD00029C0913041F482E295E190938200809395
-:101AE000810022E11FC09230E1F484E395E19093FC
-:101AF00082008093810020E115C0813241F488E6A4
-:101B000095E1909382008093810029E00BC082329E
-:101B100041F488E795E1909382008093810021E26F
-:101B200001C020E080E480936D001DC0883059F032
-:101B3000893019F49093860002C08A3039F08CE71E
-:101B400090E020E006C086E890E002C08CE790E0DC
-:101B500021E0909382008093810005C0268180E877
-:101B600080936D0007C08781882321F486818217C6
-:101B700008F4282F2093610059C090916D0097FFC1
-:101B800055C090916E00913061F43181928134960C
-:101B9000282F275030936A0090936B0082E0809347
-:101BA0006E008F0180916A0090916B00009749F45C
-:101BB000D8018D919C9111979093700080936F0044
-:101BC00014C08430910541F4F80180819181909393
-:101BD00072008093710009C0F4E18A3F9F0728F0EA
-:101BE00081E180935700E89512C0D8018D919D91B5
-:101BF0008D0129837CDE80916A0090916B000296B2
-:101C000090936B0080936A002981225059F680914D
-:101C10006A0090916B008F739070009739F08091FB
-:101C20006C00826080936C001092610010928300BF
-:101C30008091600084FF47C0809161008F3F09F46C
-:101C400042C0082F893008F008E0801B80936100B3
-:101C50008091730098E8892780937300002339F1FD
-:101C6000E0918100F091820090916D00802F815071
-:101C700096FF0CC090E08B589F4FA4E7B0E02491F2
-:101C80002D933196A817B907D1F70DC09F0190E0A9
-:101C90008B589F4FA4E7B0E0F90141919F014D930C
-:101CA000A817B907C9F7F0938200E093810084E791
-:101CB00090E0602FA7DC0C5F0C3019F08FEF809361
-:101CC00061000093600084E196B3987131F4815013
-:101CD000D9F71092840010927E008CE991E0019770
-:101CE000F1F7000080916C00882321F40894E11C36
-:101CF000F11C02C0EE24FF2480FF0EC0F894E09196
-:101D00006A00F0916B00329783E080935700E8956A
-:101D100007B600FCFDCF789480916C0081FF11C064
-:101D2000A9E3B0E21197F1F700C0000080916A00CA
-:101D300090916B008F739070009711F026DE01C0B8
-:101D4000C7DD80916C0082FD05C0B1E5EB16B3ECF8
-:101D5000FB0670F0E1E2F1EA3197F1F700C0000014
-:101D6000F8941BBE15BA10925F0210925E02C6CBA9
-:0E1D700010926C003ECE20E0F6CEF894FFCF2D
-:0A1D7E005AFF014000FA14000000B3
+:10160000A8F30895EADF8D939D930895A6E08827B7
+:101610009927AA9569F00197E1F3B399FCCFB39BA1
+:10162000FECF81E09927A6B3019611F0A871D9F7F2
+:101630000895CF93CFB7CF93C0915F02C03B21F401
+:10164000C0915E02C73021F0CF91CFBFCF9157CF6D
+:10165000CC27C395B39BE9F7B39B0BC0B39B09C0E1
+:10166000B39B07C0B39B05C0B39B03C0B39B01C032
+:10167000D5C00F92DF93C0918100DD27C857DF4F9F
+:10168000012EB39B03C0DF910F90E6CF2F930F93F2
+:101690001F934F932FEF4F6F06B303FB20F95F9318
+:1016A0003F9350E03BE065C016B30126502953FD3F
+:1016B000C89556B3012703FB25F92F7306B3B1F084
+:1016C0005027102713FB26F906B22230F0F000C095
+:1016D00016B3012703FB27F90126502906B224304F
+:1016E000E8F54F77206816B30000F6CF50274F7DFE
+:1016F000206206B2102F000000C006B30026502959
+:10170000102713FB26F906B2E2CF4F7B06B3206405
+:1017100000C0DACF01265029187106B269F14E7F58
+:101720002160012F16B328C0002650294D7F06B234
+:101730002260102F29C0012650294B7F06B2246059
+:10174000012F2DC016B301265029477F28600000C5
+:1017500006B22EC04F7E06B3206130C0422706B3CA
+:10176000499300265029102706B24FEF13FB20F9AA
+:10177000297F16B379F2187159F10126502906B262
+:10178000012703FB21F9237F06B371F200265029BC
+:101790003150D0F006B2102713FB22F9277E16B382
+:1017A00051F201265029012703FB06B223F92F7CB1
+:1017B00049F2000006B3102713FB24F90026502934
+:1017C00006B22F7939F270CF10E21ABF002719C084
+:1017D0003B503195C31BD04010E21ABF0881033C37
+:1017E00009F10B34F9F020917F001981110F1213C8
+:1017F000EDCF4A81441F093651F10D3211F0013EFF
+:1018000029F7009386003F915F914F911F910F91AF
+:101810002F91DF910F90CAB7C5FD1BCFCF91CFBFDE
+:10182000CF91189520918600222369F310918400AE
+:10183000112331F5343032F130938400209380004D
+:10184000109181003BE0311B309381001BC000915F
+:1018500084000130ACF40AE54F7091F430916000DF
+:1018600034FD11C000936000C4E7D0E010C005272C
+:1018700010E000C021C0052710E0C89508BB14C0C7
+:101880003AE501C032ED032EC0E0D0E032E017B3FC
+:101890001861C39A08B317BB58E120E84FEF20FF47
+:1018A000052708BB279517951C3F28F700004552D0
+:1018B000B0F720FF0527279508BB17951C3FB8F602
+:1018C00029913A9561F7077E10918500110F08BBA9
+:1018D000C250D04011F010937F0010E21ABF086090
+:1018E00017B3177E402F477E54E05A95F1F708BB97
+:1018F00017BB48BB88CFF894E0916A00F0916B0069
+:10190000329785E080935700E89507B600FCFDCF3D
+:101910007894089520916A0030916B00211531056B
+:1019200089F124303105B1F044E12C3F340739F41A
+:1019300080916F00909170008E579A4F0DC044E1D6
+:101940002E3F340749F480917100909172008D57B9
+:101950009A4F02C08FE79AECF894E0916A00F091F8
+:101960006B0021E00C0120935700E8951124789436
+:1019700080916A0090916B00029690936B00809327
+:101980006A00089581E180935700E895E3CFCF93F3
+:10199000DF93C0916A00D0916B00CF73D0708FEF4E
+:1019A0009FEFB8DF2296C034D105CCF3A4DFDF91DE
+:1019B000CF910895FF920F931F93CF93DF93C8E0C9
+:1019C000D0E010E000E8F12EF00EF1BE1FDE9C0129
+:1019D00089E0243338070CF41F2D0695219799F7D9
+:1019E000812F815081BFE901012F10C00FDE845388
+:1019F000994097FF03C0909581959F4F8C179D0745
+:101A000014F401B7EC0181B78F5F81BF21B730E0DB
+:101A1000812F90E001968217930744F701BFDF9171
+:101A2000CF911F910F91FF900895DF93CF930F9265
+:101A3000CDB7DEB788E10FB6F89481BD11BC0FBEFB
+:101A400010926B0010926A00AC9A8BB780628BBFC9
+:101A5000BB9A8FE49DE2A9E181509040A040E1F75C
+:101A600000C00000BB987894EE24FF24809184008D
+:101A7000282F235027FD19C190918100ECE0F0E060
+:101A8000E91BF109E857FF4F909180009D3209F062
+:101A9000B1C0283009F007C183EC809374008AE557
+:101AA0008093600010926D009081292F20768181B3
+:101AB0002223E9F0893081F48281823039F481E097
+:101AC00080936E0097FD87C02FEF86C080916C00D9
+:101AD000846080936C009AC1813009F097C182E6DE
+:101AE00090E0909383008093820027E079C09281F8
+:101AF00010927D00882331F410927E008DE790E0F3
+:101B000022E064C0853019F49093850055C086307A
+:101B100009F049C08381813019F484E495E11AC049
+:101B2000823041F486E595E19093830080938200B2
+:101B300022E235C08330F1F4992341F48EE195E13E
+:101B4000909383008093820024E029C0913041F477
+:101B500082E295E1909383008093820022E11FC08E
+:101B60009230E1F484E395E19093830080938200C6
+:101B700020E115C0813241F488E695E1909383001D
+:101B80008093820029E00BC0823241F488E795E11E
+:101B9000909383008093820021E201C020E080E4E2
+:101BA00080936D001DC0883059F0893019F49093EE
+:101BB000870002C08A3039F08DE790E020E006C04F
+:101BC00087E890E002C08DE790E021E090938300E9
+:101BD0008093820005C0268180E880936D0007C055
+:101BE0008781882321F48681821708F4282F209387
+:101BF000610059C090916D0097FF55C090916E00A3
+:101C0000913061F4318192813496282F275030939E
+:101C10006A0090936B0082E080936E008F01809148
+:101C20006A0090916B00009749F4D8018D919C91C6
+:101C300011979093700080936F0014C084309105C9
+:101C400041F4F8018081918190937200809371003A
+:101C500009C0F4E18A3F9F0728F081E18093570093
+:101C6000E89512C0D8018D919D918D01298352DE96
+:101C700080916A0090916B00029690936B00809324
+:101C80006A002981225059F680916A0090916B0078
+:101C90008F739070009739F080916C008260809310
+:101CA0006C0010926100109284008091600084FFAB
+:101CB00047C0809161008F3F09F442C0082F8930EE
+:101CC00008F008E0801B809361008091740098E820
+:101CD000892780937400002339F1E0918200F0910C
+:101CE000830090916D00802F815096FF0CC090E092
+:101CF0008A589F4FA5E7B0E024912D933196A817FD
+:101D0000B907D1F70DC09F0190E08A589F4FA5E712
+:101D1000B0E0F90141919F014D93A817B907C9F7A8
+:101D2000F0938300E093820085E790E0602F6ADC07
+:101D30000C5F0C3019F08FEF80936100009360000E
+:101D400084E196B3987131F48150D9F710928500EF
+:101D500010927F0001E0811100E0809173008017F4
+:101D600039F0002319F4F89425DE78940093730079
+:101D70008CE991E00197F1F7000080916C008823D5
+:101D800021F40894E11CF11C02C0EE24FF2480FF22
+:101D90000EC0F894E0916A00F0916B00329783E0F6
+:101DA00080935700E89507B600FCFDCF78948091AA
+:101DB0006C0081FF11C0A9E3B0E21197F1F700C0F8
+:101DC000000080916A0090916B008F739070009773
+:101DD00011F0DDDD01C08FDD80916C0082FD05C05A
+:101DE000B1E5EB16B3ECFB0670F0E1E2F1EA3197F6
+:101DF000F1F700C00000F8941BBE15BA10925F0204
+:101E000010925E027BCB10926C0030CE20E0E8CEC8
+:041E1000F894FFCF74
+:0A1E14005AFF014000FA140000001C
:0400000300001500E4
:00000001FF
diff --git a/firmware/main.map b/firmware/main.map index 994016f..2b663ae 100644 --- a/firmware/main.map +++ b/firmware/main.map @@ -27,9 +27,6 @@ Discarded input sections .bss 0x00000000 0x0 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/../../../../avr/lib/avr25/crttn85.o .data 0x00000000 0x0 usbdrv/usbdrvasm.o .bss 0x00000000 0x0 usbdrv/usbdrvasm.o - .text 0x00000000 0x74 libs-device/osccal.o - .data 0x00000000 0x0 libs-device/osccal.o - .bss 0x00000000 0x0 libs-device/osccal.o .text 0x00000000 0x0 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a(_exit.o) .data 0x00000000 0x0 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a(_exit.o) .bss 0x00000000 0x0 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a(_exit.o) @@ -59,7 +56,6 @@ Linker script and memory map LOAD /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/../../../../avr/lib/avr25/crttn85.o LOAD usbdrv/usbdrvasm.o LOAD main.o -LOAD libs-device/osccal.o Address of section .text set to 0x1500 LOAD /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a LOAD /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/../../../../avr/lib/avr25/libc.a @@ -155,7 +151,7 @@ LOAD /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a .rela.plt *(.rela.plt) -.text 0x00001500 0x87e +.text 0x00001500 0x914 *(.vectors) .vectors 0x00001500 0x1e /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/../../../../avr/lib/avr25/crttn85.o 0x00001500 __vectors @@ -235,19 +231,21 @@ LOAD /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a 0x000015d8 __vector_8 0x000015d8 __vector_14 0x000015d8 __vector_1 - .text 0x000015da 0x2f6 usbdrv/usbdrvasm.o + .text 0x000015da 0x31c usbdrv/usbdrvasm.o 0x000015da usbCrc16 0x00001604 usbCrc16Append - 0x0000160c __vector_2 - .text 0x000018d0 0x4aa main.o - 0x000019b0 main - 0x00001d7a . = ALIGN (0x2) + 0x0000160c usbMeasureFrameLength + 0x00001632 __vector_2 + .text 0x000018f6 0x51a main.o + 0x000019b4 calibrateOscillator + 0x00001a2a main + 0x00001e10 . = ALIGN (0x2) *(.text.*) - 0x00001d7a . = ALIGN (0x2) + 0x00001e10 . = ALIGN (0x2) *(.fini9) - .fini9 0x00001d7a 0x0 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a(_exit.o) - 0x00001d7a exit - 0x00001d7a _exit + .fini9 0x00001e10 0x0 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a(_exit.o) + 0x00001e10 exit + 0x00001e10 _exit *(.fini9) *(.fini8) *(.fini8) @@ -266,11 +264,11 @@ LOAD /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a *(.fini1) *(.fini1) *(.fini0) - .fini0 0x00001d7a 0x4 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a(_exit.o) + .fini0 0x00001e10 0x4 /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a(_exit.o) *(.fini0) - 0x00001d7e _etext = . + 0x00001e14 _etext = . -.data 0x00800060 0xa load address 0x00001d7e +.data 0x00800060 0xa load address 0x00001e14 0x00800060 PROVIDE (__data_start, .) *(.data) .data 0x00800060 0x9 main.o @@ -284,33 +282,33 @@ LOAD /usr/local/CrossPack-AVR-20120217/lib/gcc/avr/4.5.1/avr25/libgcc.a 0x0080006a _edata = . 0x0080006a PROVIDE (__data_end, .) -.bss 0x0080006a 0x33 +.bss 0x0080006a 0x34 0x0080006a PROVIDE (__bss_start, .) *(.bss) - .bss 0x0080006a 0x9 main.o + .bss 0x0080006a 0xa main.o *(.bss*) *(COMMON) - COMMON 0x00800073 0x2a main.o - 0x00800073 usbTxBuf - 0x0080007e usbDeviceAddr - 0x0080007f usbRxToken - 0x00800080 usbInputBufOffset - 0x00800081 usbMsgPtr - 0x00800083 usbRxLen - 0x00800084 usbNewDeviceAddr - 0x00800085 usbCurrentTok - 0x00800086 usbConfiguration - 0x00800087 usbRxBuf - 0x0080009d PROVIDE (__bss_end, .) - 0x00001d7e __data_load_start = LOADADDR (.data) - 0x00001d88 __data_load_end = (__data_load_start + SIZEOF (.data)) - -.noinit 0x0080009d 0x0 - 0x0080009d PROVIDE (__noinit_start, .) + COMMON 0x00800074 0x2a main.o + 0x00800074 usbTxBuf + 0x0080007f usbDeviceAddr + 0x00800080 usbRxToken + 0x00800081 usbInputBufOffset + 0x00800082 usbMsgPtr + 0x00800084 usbRxLen + 0x00800085 usbNewDeviceAddr + 0x00800086 usbCurrentTok + 0x00800087 usbConfiguration + 0x00800088 usbRxBuf + 0x0080009e PROVIDE (__bss_end, .) + 0x00001e14 __data_load_start = LOADADDR (.data) + 0x00001e1e __data_load_end = (__data_load_start + SIZEOF (.data)) + +.noinit 0x0080009e 0x0 + 0x0080009e PROVIDE (__noinit_start, .) *(.noinit*) - 0x0080009d PROVIDE (__noinit_end, .) - 0x0080009d _end = . - 0x0080009d PROVIDE (__heap_start, .) + 0x0080009e PROVIDE (__noinit_end, .) + 0x0080009e _end = . + 0x0080009e PROVIDE (__heap_start, .) .eeprom 0x00810000 0x0 *(.eeprom*) diff --git a/firmware/main.o b/firmware/main.o Binary files differindex c783efd..efd5d65 100644 --- a/firmware/main.o +++ b/firmware/main.o diff --git a/firmware/usbconfig.h b/firmware/usbconfig.h index 91cde90..929d5e2 100644 --- a/firmware/usbconfig.h +++ b/firmware/usbconfig.h @@ -30,6 +30,16 @@ the newest features and options. /* Use the define above if you #include usbdrv.c instead of linking against it. * This technique saves a couple of bytes in flash memory. */ + +//#if USB_CFG_CLOCK_KHZ==16500 +#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH 1 +#include "osccal.h" +//#else +//#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH 0 +//#endif +/* define this macro to 1 if you want the function usbMeasureFrameLength() + * compiled in. This function can be used to calibrate the AVR's RC oscillator. + */ /* --------------------------- Functional Range ---------------------------- */ diff --git a/firmware/usbdrv/usbdrvasm.o b/firmware/usbdrv/usbdrvasm.o Binary files differindex eee4fe0..3894ce9 100644 --- a/firmware/usbdrv/usbdrvasm.o +++ b/firmware/usbdrv/usbdrvasm.o |