0800044c : #pragma GCC optimize ("O2") void InitEndpoints(void) { trace("InitEndpoints\n"); USB_CNTR = 1; // disable reset and int CMD.Configuration = 0; // nothing before CONFIGURED 800044c: 4823 ldr r0, [pc, #140] @ (80004dc ) USB_CNTR = 1; // disable reset and int 800044e: 4b24 ldr r3, [pc, #144] @ (80004e0 ) configurationSet = false; transmitting = false; receiving = false; // EP0 = Control, IN and OUT EpTable[0].TxOffset = Ep0TxOffset; 8000450: 4924 ldr r1, [pc, #144] @ (80004e4 ) { 8000452: b4f0 push {r4, r5, r6, r7} CMD.TransferLen = 0; // nothing to transfer 8000454: 2400 movs r4, #0 8000456: 2500 movs r5, #0 8000458: e9c0 4502 strd r4, r5, [r0, #8] suspended = false; 800045c: 4f22 ldr r7, [pc, #136] @ (80004e8 ) configurationSet = false; 800045e: 4e23 ldr r6, [pc, #140] @ (80004ec ) transmitting = false; 8000460: 4d23 ldr r5, [pc, #140] @ (80004f0 ) receiving = false; 8000462: 4c24 ldr r4, [pc, #144] @ (80004f4 ) USB_CNTR = 1; // disable reset and int 8000464: 2201 movs r2, #1 8000466: f8c3 2c40 str.w r2, [r3, #3136] @ 0xc40 CMD.Configuration = 0; // nothing before CONFIGURED 800046a: 2200 movs r2, #0 USB_CNTR = 0; // all int off 800046c: f8c3 2c40 str.w r2, [r3, #3136] @ 0xc40 suspended = false; 8000470: 703a strb r2, [r7, #0] configurationSet = false; 8000472: 7032 strb r2, [r6, #0] transmitting = false; 8000474: 702a strb r2, [r5, #0] receiving = false; 8000476: 7022 strb r2, [r4, #0] EpTable[0].TxCount = 0; EpTable[0].RxOffset = Ep0RxOffset; 8000478: 4c1f ldr r4, [pc, #124] @ (80004f8 ) CMD.Configuration = 0; // nothing before CONFIGURED 800047a: 7582 strb r2, [r0, #22] CMD.TransferPtr = 0; 800047c: 6102 str r2, [r0, #16] EpTable[0].RxCount = EpCtrlLenId; // EP1 = Bulk IN (only IN) EpTable[1].TxOffset = Ep1TxAOffset; 800047e: 2080 movs r0, #128 @ 0x80 EpTable[0].RxOffset = Ep0RxOffset; 8000480: e9c1 2464 strd r2, r4, [r1, #400] @ 0x190 EpTable[1].TxCount = 0; EpTable[1].RxOffset = Ep1TxBOffset; // here 2nd tx buffer 8000484: 4404 add r4, r0 8000486: e9c1 0466 strd r0, r4, [r1, #408] @ 0x198 EpTable[1].RxCount = EpBulkLenId; // EP2 = Bulk OUT (only OUT) EpTable[2].TxOffset = Ep2RxAOffset; 800048a: 3440 adds r4, #64 @ 0x40 800048c: f8c1 41a0 str.w r4, [r1, #416] @ 0x1a0 EpTable[2].TxCount = EpBulkLenId; EpTable[2].RxOffset = Ep2RxBOffset; 8000490: 3440 adds r4, #64 @ 0x40 8000492: f8c1 41a4 str.w r4, [r1, #420] @ 0x1a4 EpTable[2].RxCount = EpBulkLenId; // EP3 = Int, IN and OUT EpTable[3].TxOffset = Ep3TxOffset; 8000496: 4c19 ldr r4, [pc, #100] @ (80004fc ) 8000498: f8c1 41a8 str.w r4, [r1, #424] @ 0x1a8 EpTable[3].TxCount = EpIntLenId; EpTable[3].RxOffset = Ep3RxOffset; 800049c: 3408 adds r4, #8 800049e: f8c1 41ac str.w r4, [r1, #428] @ 0x1ac EpTable[3].RxCount = EpIntLenId; USB_BTABLE = EpTableOffset; 80004a2: f44f 74c8 mov.w r4, #400 @ 0x190 USB_EP0R = 80004a6: f243 2120 movw r1, #12832 @ 0x3220 USB_BTABLE = EpTableOffset; 80004aa: f8c3 4c50 str.w r4, [r3, #3152] @ 0xc50 USB_EP0R = 80004ae: f8c3 1c00 str.w r1, [r3, #3072] @ 0xc00 (3 << 12) | // STAT_RX = 3, rx enabled (2 << 4) | // STAT_TX = 2, send nak (1 << 9) | // EP_TYPE = 1, control logEpCtrl; USB_EP1R = 80004b2: 2421 movs r4, #33 @ 0x21 (0 << 12) | // STAT_RX = 0, rx disabled (2 << 4) | // STAT_TX = 2, send nak (0 << 9) | // EP_TYPE = 0, bulk logEpBulkIn; USB_EP2R = 80004b4: f243 0102 movw r1, #12290 @ 0x3002 USB_EP1R = 80004b8: f8c3 4c04 str.w r4, [r3, #3076] @ 0xc04 USB_EP2R = 80004bc: f8c3 1c08 str.w r1, [r3, #3080] @ 0xc08 (3 << 12) | // STAT_RX = 3, rx enabled (0 << 4) | // STAT_TX = 0, tx disabled (0 << 9) | // EP_TYPE = 0, bulk logEpBulkOut; USB_EP3R = 80004c0: f243 6423 movw r4, #13859 @ 0x3623 (3 << 9) | // EP_TYPE = 0, bulk logEpInt; USB_ISTR = 0; // remove pending interrupts USB_CNTR = 80004c4: f44f 411f mov.w r1, #40704 @ 0x9f00 USB_EP3R = 80004c8: f8c3 4c0c str.w r4, [r3, #3084] @ 0xc0c USB_ISTR = 0; // remove pending interrupts 80004cc: f8c3 2c44 str.w r2, [r3, #3140] @ 0xc44 USB_CNTR = 80004d0: f8c3 1c40 str.w r1, [r3, #3136] @ 0xc40 USB_DADDR = 0x80 | adr; 80004d4: f8c3 0c4c str.w r0, [r3, #3148] @ 0xc4c RESETM | // Int after reset SUSPM | WKUPM | ESOFM | SOFM; // Int every 1ms frame USB_SetAddress(0); } 80004d8: bcf0 pop {r4, r5, r6, r7} 80004da: 4770 bx lr 80004dc: 20000038 .word 0x20000038 80004e0: 40005000 .word 0x40005000 80004e4: 40006000 .word 0x40006000 80004e8: 20000055 .word 0x20000055 80004ec: 20000054 .word 0x20000054 80004f0: 20000056 .word 0x20000056 80004f4: 20000057 .word 0x20000057 80004f8: 84000040 .word 0x84000040 80004fc: 10000180 .word 0x10000180 08000500 : #pragma GCC pop_options