summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim <cpldcpu@gmail.com>2014-07-15 22:52:39 +0200
committerTim <cpldcpu@gmail.com>2014-07-15 22:52:39 +0200
commitdf94369d5291f8842d36938f7b2bb2c926cf0740 (patch)
treeff31e7c3a0fc1f26ccc1a7444b4fc45370111353
parenta1e06e102573dbb2bdb9db3c0acd774a7f9c6346 (diff)
parent3c997b042f0480e15818fcd55802dba6277f383a (diff)
downloadmicronucleus-df94369d5291f8842d36938f7b2bb2c926cf0740.tar.gz
micronucleus-df94369d5291f8842d36938f7b2bb2c926cf0740.tar.bz2
micronucleus-df94369d5291f8842d36938f7b2bb2c926cf0740.zip
Merge pull request #53 from gblargg/testing-V2-New
Fix osccalASM.S to work when connected to hub
-rw-r--r--firmware/osccalASM.S18
1 files changed, 18 insertions, 0 deletions
diff --git a/firmware/osccalASM.S b/firmware/osccalASM.S
index e8e174e..fa26dc4 100644
--- a/firmware/osccalASM.S
+++ b/firmware/osccalASM.S
@@ -113,6 +113,8 @@ usbCOloop:
#endif
nop
+usbCOLoopNoCal:
+
; Delay values = F_CPU * 999e-6 / 5 + 0.5
#if (F_CPU == 16500000)
@@ -145,6 +147,22 @@ usbCOWaitLoop:
sbic USBIN, USBMINUS ;[2]
rjmp usbCOWaitLoop ;[3]
+ sbis USBIN, USBPLUS ; ignore frame if data is present
+ rjmp usbCOnotdata
+
+usbCOWaitNoData:
+ in cnt16H, USBIN ; wait for SE0 state (both lines low)
+ andi cnt16H, (1<<USBPLUS)|(1<<USBMINUS)
+ brne usbCOWaitNoData
+ in cnt16H, USBIN ; be sure SE0 state wasn't a glitch
+ andi cnt16H, (1<<USBPLUS)|(1<<USBMINUS)
+ brne usbCOWaitNoData
+usbCOWaitNoData2:
+ sbis USBIN, USBMINUS ; wait for D- go to high
+ rjmp usbCOWaitNoData2
+ rjmp usbCOLoopNoCal
+
+usbCOnotdata:
sbrs cnt16H, 7 ;delay overflow?
rjmp usbCOclocktoolow
sub try, stp