123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- overflow:
- ldi x2, 1<<USB_INTR_PENDING_BIT
- USB_STORE_PENDING(x2)
- ignorePacket:
- clr token
- rjmp storeTokenAndReturn
- se0:
- subi cnt, USB_BUFSIZE
- neg cnt
- sub YL, cnt
- sbci YH, 0
- ldi x2, 1<<USB_INTR_PENDING_BIT
- USB_STORE_PENDING(x2)
- ld token, y
- cpi token, USBPID_DATA0
- breq handleData
- cpi token, USBPID_DATA1
- breq handleData
- lds shift, usbDeviceAddr
- ldd x2, y+1
- lsl x2
- cpse x2, shift
- rjmp ignorePacket
- ldd x3, y+2
- rol x3
- cpi token, USBPID_IN
- breq handleIn
- cpi token, USBPID_SETUP
- breq handleSetupOrOut
- cpi token, USBPID_OUT
- brne ignorePacket
- handleSetupOrOut:
- andi x3, 0xf
- breq storeTokenAndReturn
- mov token, x3
- storeTokenAndReturn:
- sts usbCurrentTok, token
- doReturn:
- POP_STANDARD
- USB_LOAD_PENDING(YL)
- sbrc YL, USB_INTR_PENDING_BIT
- rjmp waitForJ
- sofError:
- POP_RETI
- reti
- handleData:
- CRC_CLEANUP_AND_CHECK
- lds shift, usbCurrentTok
- tst shift
- breq doReturn
- lds x2, usbRxLen
- tst x2
- brne sendNakAndReti
- cpi cnt, 4
- brmi sendAckAndReti
- sts usbCurrentDataToken, token
- sts usbRxLen, cnt
- sts usbRxToken, shift
- lds x2, usbInputBufOffset
- ldi cnt, USB_BUFSIZE
- sub cnt, x2
- sts usbInputBufOffset, cnt
- rjmp sendAckAndReti
- handleIn:
- lds x1, usbRxLen
- cpi x1, 1
- brge sendNakAndReti
- ldi x1, USBPID_NAK
- andi x3, 0xf
- brne sendNakAndReti
- brne handleIn1
- lds cnt, usbTxLen
- sbrc cnt, 4
- rjmp sendCntAndReti
- sts usbTxLen, x1
- ldi YL, lo8(usbTxBuf)
- ldi YH, hi8(usbTxBuf)
- rjmp usbSendAndReti
- handleIn1:
- cpi x3, USB_CFG_EP3_NUMBER
- breq handleIn3
- lds cnt, usbTxLen1
- sbrc cnt, 4
- rjmp sendCntAndReti
- sts usbTxLen1, x1
- ldi YL, lo8(usbTxBuf1)
- ldi YH, hi8(usbTxBuf1)
- rjmp usbSendAndReti
- handleIn3:
- lds cnt, usbTxLen3
- sbrc cnt, 4
- rjmp sendCntAndReti
- sts usbTxLen3, x1
- ldi YL, lo8(usbTxBuf3)
- ldi YH, hi8(usbTxBuf3)
- rjmp usbSendAndReti
|