General discussions about V-USB, our firmware-only implementation of a low speed USB device on Atmel's AVR microcontrollers
			
		
		
			- 
				
																			 az3749
- Posts: 1
- Joined: Wed Feb 15, 2017 11:33 am
						
						
													
							
						
									
						Post
					
								by az3749 » Wed Feb 15, 2017 11:48 am
			
			
			
			
			Code: Select all
txBitLoop:
    sbrs    shift, 0        ;[-3] [7]
    eor     x1, x4          ;[-2] [8]
    out     USBOUT, x1      ;[-1] [9] <-- out N <- jitter is here - AZ
    ror     shift           ;[0] [10]
    ror     x2              ;[1]
timing will depends of sending data. zero data (0x00) will have ~10% less  duration than (0xff). USB allows only 1.5%.
It is possible to solve - make bitcnt dependent of data to compensate jitter:
Code: Select all
;   calc shift comp pare - 1+4 cycles
   ldi      bitcnt, 0xFF
   EOR      bitcnt,shift
   andi   bitcnt,0x3F
   ORI      bitcnt,0x20
   nop   ; AZ
I placed it before  
Code: Select all
  dec     cnt             ;[3]
    brne    txByteLoop      ;[4]
 
		 
				
		
		 
	 
	
				
		
		
			- 
				
																			 kuro68k
- Posts: 5
- Joined: Wed Feb 15, 2017 11:44 am
						
						
													
							
						
									
						Post
					
								by kuro68k » Thu Feb 16, 2017 6:58 pm
			
			
			
			
			Thanks for this. I'm interesting in integrating it into my code. I've noticed the jitter too. Can you post the complete TX routine?
I think the best solution would be to remove the sbrs. There is a nop in didStuff7 so you could replace it with a bst/bld, but not the other two.
The only thing I can think of at the moment is to unroll the loop.