summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--firmware/Makefile2
-rw-r--r--firmware/libs-device/osccal.c.lst20
-rw-r--r--firmware/libs-device/osccal.obin956 -> 0 bytes
-rwxr-xr-xfirmware/main.binbin8512 -> 8879 bytes
-rw-r--r--firmware/main.c184
-rw-r--r--firmware/main.c.lst1855
-rw-r--r--firmware/main.hex260
-rw-r--r--firmware/main.map76
-rw-r--r--firmware/main.obin5992 -> 6304 bytes
-rw-r--r--firmware/usbconfig.h10
-rw-r--r--firmware/usbdrv/usbdrvasm.obin4064 -> 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
deleted file mode 100644
index 79622f1..0000000
--- a/firmware/libs-device/osccal.o
+++ /dev/null
Binary files differ
diff --git a/firmware/main.bin b/firmware/main.bin
index 352ffea..af6070d 100755
--- a/firmware/main.bin
+++ b/firmware/main.bin
Binary files differ
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 *)&currentAddress.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
index c783efd..efd5d65 100644
--- a/firmware/main.o
+++ b/firmware/main.o
Binary files differ
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
index eee4fe0..3894ce9 100644
--- a/firmware/usbdrv/usbdrvasm.o
+++ b/firmware/usbdrv/usbdrvasm.o
Binary files differ