aboutsummaryrefslogtreecommitdiffstats
path: root/usbdrv/usbdrvasm20.inc
diff options
context:
space:
mode:
Diffstat (limited to 'usbdrv/usbdrvasm20.inc')
-rw-r--r--usbdrv/usbdrvasm20.inc10
1 files changed, 7 insertions, 3 deletions
diff --git a/usbdrv/usbdrvasm20.inc b/usbdrv/usbdrvasm20.inc
index 2d4be52..ebe14e2 100644
--- a/usbdrv/usbdrvasm20.inc
+++ b/usbdrv/usbdrvasm20.inc
@@ -57,10 +57,14 @@ USB_INTR_VECTOR:
;----------------------------------------------------------------------------
;sync byte (D-) pattern LSb to MSb: 01010100 [1 = idle = J, 0 = K]
;sync up with J to K edge during sync pattern -- use fastest possible loops
-;first part has no timeout because it waits for IDLE or SE1 (== disconnected)
+;The first part waits at most 1 bit long since we must be in sync pattern.
+;YL is guarenteed to be < 0x80 because I flag is clear. When we jump to
+;waitForJ, ensure that this prerequisite is met.
waitForJ:
- sbis USBIN, USBMINUS ;[-21] wait for D- == 1
- rjmp waitForJ
+ sbic USBIN, USBMINUS
+ rjmp waitForK
+ inc YL
+ brne waitForJ ; just make sure we have ANY timeout
waitForK:
;The following code results in a sampling window of < 1/4 bit which meets the spec.
sbis USBIN, USBMINUS ;[-19]